diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 732331f96..d20daa190 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,11 +1,9 @@ [bumpversion] -current_version = 1.5.1 +current_version = 2.0.0b1 commit = True tag = True -[bumpversion:file:setup.cfg] - -[bumpversion:file:setup.py] +[bumpversion:file:pyproject.toml] [bumpversion:file:chemprop/__init__.py] diff --git a/.flake8 b/.flake8 new file mode 100644 index 000000000..f75d336cb --- /dev/null +++ b/.flake8 @@ -0,0 +1,8 @@ +[flake8] +ignore = E203, E266, E501, F403, E741, W503, W605 +max-line-length = 100 +max-complexity = 18 +per-file-ignores = + __init__.py: F401 + chemprop/nn/predictors.py: F405 + chemprop/nn/metrics.py: F405 diff --git a/.github/ISSUE_TEMPLATE/todo.md b/.github/ISSUE_TEMPLATE/todo.md new file mode 100644 index 000000000..360e58f78 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/todo.md @@ -0,0 +1,11 @@ +--- +name: to-do +about: Add an item to the to-do list. More generic than a feature request +title: "[TODO]: " +labels: todo +assignees: '' + +--- + +**Notes** +_these could be implementation or more specific details to keep in mind, if they'll be helpful for issue tracking_ diff --git a/.github/ISSUE_TEMPLATE/v1_bug_report.md b/.github/ISSUE_TEMPLATE/v1_bug_report.md new file mode 100644 index 000000000..c015b6171 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/v1_bug_report.md @@ -0,0 +1,35 @@ +--- +name: v1 Bug Report +about: Report a bug in v1 (will not be fixed) +title: "[v1 BUG]: " +labels: bug, v1-wontfix +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**Example(s)** +Provide some examples of where the current code fails. Feel free to share your actual code for additional context, but a minimal and isolated example is preferred. + +**Expected behavior** +A clear and concise description of what you expected to happen. If there is correct, expected output, include that here as well. + +**Error Stack Trace** +If the bug is resulting in an error message, provide the _full_ stack trace (not just the last line). This is helpful for debugging, especially in cases where you aren't able to provide a minimum/isolated working example with accompanying files. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Environment** +- python version +- package versions: `conda list` or `pip list` +- OS + +**Checklist** +- [ ] all dependencies are satisifed: `conda list` or `pip list` shows the packages listed in the `pyproject.toml` +- [ ] the unit tests are working: `pytest -v` reports no errors + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/v1_question.md similarity index 78% rename from .github/ISSUE_TEMPLATE/question.md rename to .github/ISSUE_TEMPLATE/v1_question.md index 303b7de43..3af2bcfa9 100644 --- a/.github/ISSUE_TEMPLATE/question.md +++ b/.github/ISSUE_TEMPLATE/v1_question.md @@ -1,7 +1,7 @@ --- -name: Question -about: Have a question about how to use Chemprop? -title: "[QUESTION]: " +name: v1 Question +about: Have a question about how to use Chemprop v1? +title: "[v1 QUESTION]: " labels: question assignees: '' diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/v2_bug_report.md similarity index 65% rename from .github/ISSUE_TEMPLATE/bug_report.md rename to .github/ISSUE_TEMPLATE/v2_bug_report.md index 38dd1cc3f..3d62b3eeb 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/v2_bug_report.md @@ -1,7 +1,7 @@ --- -name: Bug report +name: v2 Bug Report about: Create a report to help us improve -title: "[BUG]: " +title: "[v2 BUG]: " labels: bug assignees: '' @@ -16,6 +16,9 @@ Provide some examples of where the current code fails. Feel free to share your a **Expected behavior** A clear and concise description of what you expected to happen. If there is correct, expected output, include that here as well. +**Error Stack Trace** +If the bug is resulting in an error message, provide the _full_ stack trace (not just the last line). This is helpful for debugging, especially in cases where you aren't able to provide a minimum/isolated working example with accompanying files. + **Screenshots** If applicable, add screenshots to help explain your problem. @@ -25,7 +28,7 @@ If applicable, add screenshots to help explain your problem. - OS **Checklist** -- [ ] all dependencies are satisifed: `conda list` shows the packages listed in the `README` +- [ ] all dependencies are satisifed: `conda list` or `pip list` shows the packages listed in the `pyproject.toml` - [ ] the unit tests are working: `pytest -v` reports no errors **Additional context** diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/v2_feature_request.md similarity index 93% rename from .github/ISSUE_TEMPLATE/feature_request.md rename to .github/ISSUE_TEMPLATE/v2_feature_request.md index b21da3b7c..36f1cfa07 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/v2_feature_request.md @@ -1,7 +1,7 @@ --- -name: Feature request +name: v2 Feature Request about: Suggest an idea for this project -title: "[FEATURE]: " +title: "[v2 FEATURE]: " labels: enhancement assignees: '' diff --git a/.github/ISSUE_TEMPLATE/v2_question.md b/.github/ISSUE_TEMPLATE/v2_question.md new file mode 100644 index 000000000..231ee1a3f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/v2_question.md @@ -0,0 +1,17 @@ +--- +name: v2 Question +about: Have a question about how to use Chemprop v2? +title: "[v2 QUESTION]: " +labels: question +assignees: '' + +--- + +**What are you trying to do?** +Please tell us what you're trying to do with Chemprop, providing as much detail as possible + +**Previous attempts** +If possible, provide some examples of what you've already tried and what the output was. + +**Screenshots** +If applicable, add screenshots to help explain your problem. diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 000000000..2c6dba1de --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,156 @@ +# ci.yml +# +# Continuous Integration for Chemprop - checks build, code formatting, and runs tests for all +# proposed changes and on a regular schedule +# +# Note: this file contains extensive inline documentation to aid with knowledge transfer. + +name: Continuous Integration + +on: + # run on pushes/pull requests to/against main or v2/dev + push: + branches: [main] + pull_request: + branches: [main, v2/dev] + # run this in the morning on weekdays to catch dependency issues + schedule: + - cron: "0 8 * * 1-5" + # allow manual runs + workflow_dispatch: + +# cancel previously running tests if new commits are made +# https://docs.github.com/en/actions/examples/using-concurrency-expressions-and-a-test-matrix +concurrency: + group: actions-id-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + build: + name: Check Build + runs-on: ubuntu-latest + steps: + # clone the repo, attempt to build + - uses: actions/checkout@v4 + - run: python -m pip install build + - run: python -m build . + + lint: + name: Check Formatting + needs: build + runs-on: ubuntu-latest + steps: + # clone the repo, run black and flake8 on it + - uses: actions/checkout@v4 + - run: python -m pip install black==23.* flake8 + - run: black --check . + - run: flake8 . + + test: + name: Execute Tests + needs: lint + runs-on: ${{ matrix.os }} + defaults: + run: + # run with a login shell (so that the conda environment is activated) + # and echo the commands we run as we do them (for debugging purposes) + shell: bash -el {0} + strategy: + # if one platform/python version fails, continue testing the others + fail-fast: false + matrix: + # test on all platforms with both supported versions of Python + os: [ubuntu-latest, macos-latest, windows-latest] + python-version: [3.11, 3.12] + steps: + - uses: actions/checkout@v4 + # use a version of the conda virtual environment manager to set up an + # isolated environment with the Python version we want + - uses: mamba-org/setup-micromamba@main + with: + environment-name: temp + condarc: | + channels: + - defaults + - conda-forge + channel_priority: flexible + create-args: | + python=${{ matrix.python-version }} + - name: Install dependencies + shell: bash -l {0} + run: | + python -m pip install nbmake + python -m pip install ".[dev,docs,test]" + - name: Install hyperopt optional dependencies (Python 3.11 only) + if: ${{ matrix.python-version == '3.11' }} + run: | + python -m pip install ".[hpopt]" + - name: Test with pytest + shell: bash -l {0} + run: | + pytest -v tests + - name: Test notebooks + shell: bash -l {0} + run: | + pytest --nbmake examples/training.ipynb + pytest --nbmake examples/predicting.ipynb + pytest --nbmake examples/convert_v1_to_v2.ipynb + pytest --nbmake examples/training_regression_multicomponent.ipynb + pytest --nbmake examples/predicting_regression_multicomponent.ipynb + + conda-test: + name: Execute Tests with Conda-based Install + needs: lint + runs-on: ubuntu-latest + defaults: + run: + # run with a login shell (so that the conda environment is activated) + # and echo the commands we run as we do them (for debugging purposes) + shell: bash -el {0} + strategy: + # if one platform/python version fails, continue testing the others + fail-fast: false + matrix: + python-version: [3.11, 3.12] + steps: + - uses: actions/checkout@v4 + # use a version of the conda virtual environment manager to set up an + # isolated environment with the Python version we want + - uses: mamba-org/setup-micromamba@main + with: + environment-file: environment.yml + condarc: | + channels: + - defaults + - conda-forge + - pytorch + channel_priority: flexible + create-args: | + python=${{ matrix.python-version }} + - name: Install Testing Dependencies + run: conda install -c conda-forge pytest>=6.2 pytest-cov + - name: Install Chemprop + run: python -m pip install . --no-deps + - name: Test with pytest + shell: bash -l {0} + run: | + pytest -v tests + + # GitHub allows you to set checks as required before PRs can be merged, which is annoying to do + # for matrix jobs like the one above which have six actual jobs. Instead we have a summary job + # like this, which we mark as required. + # Copied in part from: + # https://github.com/orgs/community/discussions/26822#discussioncomment-3305794 + ci-report-status: + name: report CI status + needs: test + runs-on: ubuntu-latest + steps: + - run: | + result="${{ needs.test.result }}" + if test $result == "success"; then + exit 0 + else + exit 1 + fi + \ No newline at end of file diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 000000000..4d47ec486 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,34 @@ +name: publish + +on: + push: + tags: + - v** + +jobs: + publish: + name: build and publish to PyPI + runs-on: ubuntu-latest + + steps: + - name: checkout + uses: actions/checkout@v2 + + - name: Set up python + uses: actions/setup-python@v2 + with: + python-version: 3.8 + + - name: Install dependencies + run: | + pip install --upgrade pip + pip install --upgrade build + + - name: build package + run: python3 -m build + + - name: Publish package + uses: pypa/gh-action-pypi-publish@v1.5.0 + with: + user: __token__ + password: ${{ secrets.PYPI_API_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml deleted file mode 100644 index 3cb3936a5..000000000 --- a/.github/workflows/tests.yml +++ /dev/null @@ -1,57 +0,0 @@ -# This workflow will install Python dependencies, run tests and lint with a variety of Python versions -# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions - -name: tests - -on: - push: - branches: [ master ] - pull_request: - branches: [ master ] - -jobs: - build: - - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-latest, macos-latest] # TODO: fix windows permissions issues and add windows-latest - python-version: [3.7, 3.8] - exclude: - # excludes node 8 on macOS - - os: macos-latest - python-version: 3.8 - - steps: - - uses: actions/checkout@v2 - - uses: conda-incubator/setup-miniconda@v2 - with: - python-version: ${{ matrix.python-version }} - mamba-version: "*" - environment-file: environment.yml - channels: conda-forge, defaults - activate-environment: chemprop - - - name: Set temp directories on Windows - shell: bash -l {0} - if: matrix.os == 'windows-latest' - run: | - echo "TMPDIR=$env:USERPROFILE\AppData\Local\Temp" >> $env:GITHUB_ENV - echo "TEMP=$env:USERPROFILE\AppData\Local\Temp" >> $env:GITHUB_ENV - echo "TMP=$env:USERPROFILE\AppData\Local\Temp" >> $env:GITHUB_ENV - - name: Install dependencies - shell: bash -l {0} - run: | - mamba install flake8 pytest parameterized - python -m pip install -e . - - name: Lint with flake8 - shell: bash -l {0} - run: | - # stop the build if there are Python syntax errors or undefined names - flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics - # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide - flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - - name: Test with pytest - shell: bash -l {0} - run: | - pytest -v diff --git a/.gitignore b/.gitignore index 351907b95..453839a55 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,178 @@ -*.pyc +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ + *.idea *.DS_Store *.vscode *.csv +*.pkl *.pt *.json *.sqlite3 -chemprop.egg-info -docs/build +*.yaml +*.tfevents.* +*.ckpt +chemprop/_version.py +*.ckpt +*.ipynb +config.toml + +!tests/data/* diff --git a/.readthedocs.yml b/.readthedocs.yml index dd64ae852..d6328e6e3 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -5,17 +5,15 @@ # Required version: 2 +# Set the OS, Python version and other tools you might need +build: + os: ubuntu-22.04 + tools: + python: "3.11" + jobs: + post_install: + - python -m pip install --upgrade --upgrade-strategy only-if-needed --no-cache-dir ".[docs]" + # Build documentation in the docs/ directory with Sphinx sphinx: configuration: docs/source/conf.py - -# Build documentation with MkDocs -#mkdocs: -# configuration: mkdocs.yml - -# Optionally build your docs in additional formats such as PDF -formats: all - -# Optionally set the version of Python and requirements required to build your docs -conda: - environment: environment.yml diff --git a/Dockerfile b/Dockerfile index d40fa361f..4e8cb85d0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,21 +1,48 @@ -FROM mambaorg/micromamba:0.23.0 - -USER root - +# Dockerfile +# +# Builds a Docker image containing Chemprop and its required dependencies. +# +# Build this image with: +# docker build . +# +# Run the built image with: +# docker run --name chemprop_container -it +# where is shown from the output of the build command. +# +# Note: +# This image only runs on CPU - we do not provide a Dockerfile +# for GPU use (see installation documentation). + +# Parent Image +FROM continuumio/miniconda3:latest + +# Install libxrender1 (required by RDKit) and then clean up RUN apt-get update && \ - apt-get install -y git && \ - rm -rf /var/lib/{apt,dpkg,cache,log} - -USER $MAMBA_USER - -COPY --chown=$MAMBA_USER:$MAMBA_USER environment.yml /tmp/environment.yml - -RUN micromamba install -y -n base -f /tmp/environment.yml && \ - micromamba clean --all --yes - -COPY --chown=$MAMBA_USER:$MAMBA_USER . /opt/chemprop + apt-get install -y \ + libxrender1 && \ + apt-get autoremove -y && \ + apt-get clean -y WORKDIR /opt/chemprop -RUN /opt/conda/bin/python -m pip install -e . - +# build an empty conda environment with appropriate Python version +RUN conda create --name chemprop_env python=3.11* && \ + conda clean --all --yes + +# This runs all subsequent commands inside the chemprop_env conda environment +# +# Analogous to just activating the environment, which we can't actually do here +# since that requires running conda init and restarting the shell (not possible +# in a Dockerfile build script) +SHELL ["conda", "run", "--no-capture-output", "-n", "chemprop_env", "/bin/bash", "-c"] + +# Follow the installation instructions then clear the cache +ADD chemprop chemprop +ENV PYTHONPATH /opt/chemprop +ADD LICENSE.txt pyproject.toml README.md . +RUN python -m pip install . && \ + python -m pip cache purge + +# when running this image, open an interactive bash terminal inside the conda environment +RUN echo "conda activate chemprop_env" > ~/.bashrc +ENTRYPOINT ["/bin/bash", "--login"] diff --git a/LICENSE.txt b/LICENSE.txt index 8e22b49c3..50549ec9b 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,6 +1,11 @@ MIT License -Copyright (c) 2020 Wengong Jin, Kyle Swanson, Kevin Yang, Regina Barzilay, Tommi Jaakkola +Copyright (c) 2023 The Chemprop Development Team (Regina Barzilay, Jackson Burns, +Yunsie Chung, Xiaorui Dong, David Graff, William Green, Kevin Greenman, +Yanfei Guan, Esther Heid, Lior Hirschfeld, Tommi Jaakkola, Wengong Jin, +Shih-Cheng Li, Mengjie Liu, Charles McGill, Angiras Menon, Nathan Morgan, +Hao-Wei Pang, Kevin Spiekermann, Kyle Swanson, Allison Tam, Florence Vermeire, +Haoyang Wu, and Kevin Yang) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 9ad82f158..8aec67ac5 100644 --- a/README.md +++ b/README.md @@ -1,508 +1,11 @@ -# Molecular Property Prediction +# Chemprop v2.0.0 -[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/chemprop)](https://badge.fury.io/py/chemprop) -[![PyPI version](https://badge.fury.io/py/chemprop.svg)](https://badge.fury.io/py/chemprop) -[![Build Status](https://github.com/chemprop/chemprop/workflows/tests/badge.svg)](https://github.com/chemprop/chemprop) +This is the development branch for Chemprop v2.0.0. -This repository contains message passing neural networks for molecular property prediction as described in the paper [Analyzing Learned Molecular Representations for Property Prediction](https://pubs.acs.org/doi/abs/10.1021/acs.jcim.9b00237) and as used in the paper [A Deep Learning Approach to Antibiotic Discovery](https://www.cell.com/cell/fulltext/S0092-8674(20)30102-1) for molecules and [Machine Learning of Reaction Properties via Learned Representations of the Condensed Graph of Reaction](https://doi.org/10.1021/acs.jcim.1c00975) for reactions. +The v2 documentation can be found [here](https://chemprop.readthedocs.io/en/v2-dev/index.html). -**Documentation:** Full documentation of Chemprop is available at https://chemprop.readthedocs.io/en/latest/. +There are tutorial notebooks for v2 in the [`examples/`](https://github.com/chemprop/chemprop/tree/v2/dev/examples) directory. -**Website:** A web prediction interface with some trained Chemprop models is available at [chemprop.csail.mit.edu](http://chemprop.csail.mit.edu). +A helpful transition guide from v1 to v2 can be found [here](https://docs.google.com/spreadsheets/u/3/d/e/2PACX-1vRshySIknVBBsTs5P18jL4WeqisxDAnDE5VRnzxqYEhYrMe4GLS17w5KeKPw9sged6TmmPZ4eEZSTIy/pubhtml). This includes a side-by-side comparison of CLI argument options, a list of which arguments will be implemented in later versions of v2, and a list of changes to default hyperparameters. -**Tutorial:** These [slides](https://docs.google.com/presentation/d/14pbd9LTXzfPSJHyXYkfLxnK8Q80LhVnjImg8a3WqCRM/edit?usp=sharing) provide a Chemprop tutorial and highlight recent additions as of April 28th, 2020. - -## COVID-19 Update - -Please see [aicures.mit.edu](https://aicures.mit.edu) and the associated [data GitHub repo](https://github.com/yangkevin2/coronavirus_data) for information about our recent efforts to use Chemprop to identify drug candidates for treating COVID-19. - -## Table of Contents - -- [Requirements](#requirements) -- [Installation](#installation) - * [Option 1: Installing from PyPi](#option-1-installing-from-pypi) - * [Option 2: Installing from source](#option-2-installing-from-source) - * [Docker](#docker) -- [Web Interface](#web-interface) -- [Within Python](#within-python) -- [Data](#data) -- [Training](#training) - * [Train/Validation/Test Splits](#trainvalidationtest-splits) - * [Loss functions](#loss-functions) - * [Metrics](#metrics) - * [Cross validation and ensembling](#cross-validation-and-ensembling) - * [Aggregation](#aggregation) - * [Additional Features](#additional-features) - * [Custom Features](#molecule-level-custom-features) - * [RDKit 2D Features](#molecule-level-rdkit-2d-features) - * [Atomic Features](#atom-level-features) - * [Spectra](#spectra) - * [Reaction](#reaction) - * [Reaction in a solvent / Reaction and a molecule](#reaction-in-a-solvent--reaction-and-a-molecule) - * [Pretraining](#pretraining) - * [Missing target values](#missing-target-values) - * [Weighted training by target and data](#weighted-training-by-target-and-data) - * [Caching](#caching) -- [Predicting](#predicting) - * [Uncertainty Estimation](#uncertainty-estimation) - * [Uncertainty Calibration](#uncertainty-calibration) - * [Uncertainty Evaluation Metrics](#uncertainty-evaluation-metrics) -- [Hyperparameter Optimization](#hyperparameter-optimization) -- [Encode Fingerprint Latent Representation](#encode-fingerprint-latent-representation) -- [Interpreting Model Prediction](#interpreting) -- [TensorBoard](#tensorboard) -- [Results](#results) - -## Requirements - -For small datasets (~1000 molecules), it is possible to train models within a few minutes on a standard laptop with CPUs only. However, for larger datasets and larger Chemprop models, we recommend using a GPU for significantly faster training. - -To use `chemprop` with GPUs, you will need: - * cuda >= 8.0 - * cuDNN - -## Installation - -Chemprop can either be installed from PyPi via pip or from source (i.e., directly from this git repo). The PyPi version includes a vast majority of Chemprop functionality, but some functionality is only accessible when installed from source. - -Both options require conda, so first install Miniconda from [https://conda.io/miniconda.html](https://conda.io/miniconda.html). - -Then proceed to either option below to complete the installation. Note that on machines with GPUs, you may need to manually install a GPU-enabled version of PyTorch by following the instructions [here](https://pytorch.org/get-started/locally/). - -### Option 1: Installing from PyPi - -1. `conda create -n chemprop python=3.8` -2. `conda activate chemprop` -3. `conda install -c conda-forge rdkit` -4. `pip install git+https://github.com/bp-kelley/descriptastorus` -5. `pip install chemprop` - -### Option 2: Installing from source - -1. `git clone https://github.com/chemprop/chemprop.git` -2. `cd chemprop` -3. `conda env create -f environment.yml` -4. `conda activate chemprop` -5. `pip install -e .` - -### Docker - -Chemprop can also be installed with Docker. Docker makes it possible to isolate the Chemprop code and environment. To install and run our code in a Docker container, follow these steps: - -1. `git clone https://github.com/chemprop/chemprop.git` -2. `cd chemprop` -3. Install Docker from [https://docs.docker.com/install/](https://docs.docker.com/install/) -4. `docker build -t chemprop .` -5. `docker run -it chemprop:latest` - -Note that you will need to run the latter command with nvidia-docker if you are on a GPU machine in order to be able to access the GPUs. -Alternatively, with Docker 19.03+, you can specify the `--gpus` command line option instead. - -In addition, you will also need to ensure that the CUDA toolkit version in the Docker image is compatible with the CUDA driver on your host machine. -Newer CUDA driver versions are backward-compatible with older CUDA toolkit versions. -To set a specific CUDA toolkit version, add `cudatoolkit=X.Y` to `environment.yml` before building the Docker image. - -## Web Interface - -For those less familiar with the command line, Chemprop also includes a web interface which allows for basic training and predicting. An example of the website (in demo mode with training disabled) is available here: [chemprop.csail.mit.edu](http://chemprop.csail.mit.edu/). - -You can start the web interface on your local machine in two ways. Flask is used for development mode while gunicorn is used for production mode. - -### Flask - -Run `chemprop_web` (or optionally `python web.py` if installed from source) and then navigate to [localhost:5000](http://localhost:5000) in a web browser. - -### Gunicorn - -Gunicorn is only available for a UNIX environment, meaning it will not work on Windows. It is not installed by default with the rest of Chemprop, so first run: - -``` -pip install gunicorn -``` - -Next, navigate to `chemprop/web` and run `gunicorn --bind {host}:{port} 'wsgi:build_app()'`. This will start the site in production mode. - * To run this server in the background, add the `--daemon` flag. - * Arguments including `init_db` and `demo` can be passed with this pattern: `'wsgi:build_app(init_db=True, demo=True)'` - * Gunicorn documentation can be found [here](http://docs.gunicorn.org/en/stable/index.html). - -## Within Python - -For information on the use of Chemprop within a python script, refer to the [Within a python script](https://chemprop.readthedocs.io/en/latest/tutorial.html#within-a-python-script) -section of the documentation. A [Google Colab notebook](https://colab.research.google.com/github/chemprop/chemprop/blob/master/colab_demo.ipynb) is also available with several examples. Note that this notebook is intended to be run in Google Colab rather than as a Jupyter notebook on your local machine. A similar notebook of examples is available as a [nanoHUB tool](https://nanohub.org/resources/chempropdemo/). - - -## Data - -In order to train a model, you must provide training data containing molecules (as SMILES strings) and known target values. - -Chemprop can either train on a single target ("single tasking") or on multiple targets simultaneously ("multi-tasking"). - -There are four current supported dataset types. Targets with unknown values can be left as blanks. -* **Regression.** Targets are float values. With bounded loss functions or metrics, the values may also be simple inequalities (e.g., >7.5 or <5.0). -* **Classification.** Targets are binary (i.e. 0s and 1s) indicators of the classification. -* **Multiclass.** Targets are integers (starting with zero) indicating which class the datapoint belongs to, out of a total number of exclusive classes indicated with `--multiclass_num_classes `. -* **Spectra.** Targets are positive float values with each target representing the signal at a specific spectrum position. - -The data file must be be a **CSV file with a header row**. For example: -``` -smiles,NR-AR,NR-AR-LBD,NR-AhR -CCOc1ccc2nc(S(N)(=O)=O)sc2c1,0,0,1 -CCN1C(=O)NC(c2ccccc2)C1=O,0,,0 -... -``` - -By default, it is assumed that the SMILES are in the first column (can be changed using `--number_of_molecules`) and the targets are in the remaining columns. However, the specific columns containing the SMILES and targets can be specified using the `--smiles_columns ...` and `--target_columns ...` flags, respectively. - -Datasets from [MoleculeNet](http://moleculenet.ai/) and a 450K subset of ChEMBL from [http://www.bioinf.jku.at/research/lsc/index.html](http://www.bioinf.jku.at/research/lsc/index.html) have been preprocessed and are available in `data.tar.gz`. To uncompress them, run `tar xvzf data.tar.gz`. - -## Training - -To train a model, run: -``` -chemprop_train --data_path --dataset_type --save_dir -``` -where `` is the path to a CSV file containing a dataset, `` is one of [classification, regression, multiclass, spectra] depending on the type of the dataset, and `` is the directory where model checkpoints will be saved. - -For example: -``` -chemprop_train --data_path data/tox21.csv --dataset_type classification --save_dir tox21_checkpoints -``` - -A full list of available command-line arguments can be found in [chemprop/args.py](https://github.com/chemprop/chemprop/blob/master/chemprop/args.py). - -If installed from source, `chemprop_train` can be replaced with `python train.py`. - -Notes: -* The default metric for classification is AUC and the default metric for regression is RMSE. Other metrics may be specified with `--metric `. -* `--save_dir` may be left out if you don't want to save model checkpoints. -* `--quiet` can be added to reduce the amount of debugging information printed to the console. Both a quiet and verbose version of the logs are saved in the `save_dir`. - -### Train/Validation/Test Splits - -Our code supports several methods of splitting data into train, validation, and test sets. - -* **Random.** By default, the data will be split randomly into train, validation, and test sets. -* **Scaffold.** Alternatively, the data can be split by molecular scaffold so that the same scaffold never appears in more than one split. This can be specified by adding `--split_type scaffold_balanced`. -* **Random With Repeated SMILES.** Some datasets have multiple entries with the same SMILES. To constrain splitting so the repeated SMILES are in the same split, use the argument `--split_type random_with_repeated_smiles`. -* **Separate val/test.** If you have separate data files you would like to use as the validation or test set, you can specify them with `--separate_val_path ` and/or `--separate_test_path `. If both are provided, then the data specified by `--data_path` is used entirely as the training data. If only one separate path is provided, the `--data_path` data is split between train data and either val or test data, whichever is not provided separately. - -When data contains multiple molecules per datapoint, scaffold and repeated SMILES splitting will only constrain splitting based on one of the molecules. The key molecule can be chosen with the argument `--split_key_molecule `, with the default setting using an index of 0 indicating the first molecule. - -By default, both random and scaffold split the data into 80% train, 10% validation, and 10% test. This can be changed with `--split_sizes `. The default setting is `--split_sizes 0.8 0.1 0.1`. If a separate validation set or test set is provided, the split defaults to 80%-20%. Splitting involves a random component and can be seeded with `--seed `. The default setting is `--seed 0`. - -### Loss functions - -The loss functions available for training are dependent on the selected dataset type. Loss functions other than the defaults can be selected from the supported options with the argument `--loss_function `. -* **Regression.** mse (default), bounded_mse, mve (mean-variance estimation, a.k.a. heteroscedastic loss), evidential. -* **Classification.** binary_cross_entropy (default), mcc (a soft version of Matthews Correlation Coefficient), dirichlet (a.k.a. evidential classification) -* **Multiclass.** cross_entropy (default), mcc (a soft version of Matthews Correlation Coefficient) -* **Spectra.** sid (default, spectral information divergence), wasserstein (First-order Wasserstein distance a.k.a. earthmover's distance.) - -The regression loss functions `mve` and `evidential` function by minimizing the negative log likelihood of a predicted uncertainty distribution. If used during training, the uncertainty predictions from these loss functions can be used for uncertainty prediction during prediction tasks. -### Metrics - -Metrics are used to evaluate the success of the model against the test set as the final model score and to determine the optimal epoch to save the model at based on the validation set. The primary metric used for both purposes is selected with the argument `--metric ` and additional metrics for test set score only can be added with `--extra_metrics ...`. Supported metrics are dependent on the dataset type. Unlike loss functions, metrics do not have to be differentiable. -* **Regression.** rmse (default), mae, mse, r2, bounded_rmse, bounded_mae, bounded_mse (default if bounded_mse is loss function). -* **Classification.** auc (default), prc-auc, accuracy, binary_cross_entropy, f1, mcc. -* **Multiclass.** cross_entropy (default), accuracy, f1, mcc. -* **Spectra.** sid (default), wasserstein. - -### Cross validation and ensembling - -k-fold cross-validation can be run by specifying `--num_folds `. The default is `--num_folds 1`. Each trained model will have different data splits. The reported test score will be the average of the metrics from each fold. - -To train an ensemble, specify the number of models in the ensemble with `--ensemble_size `. The default is `--ensemble_size 1`. Each trained model within the ensemble will share data splits. The reported test score for one ensemble is the metric applied to the averaged prediction across the models. Ensembling and cros-validation can be used at the same time. - -### Aggregation - -By default, the atom-level representations from the message passing network are averaged over all atoms of a molecule to yield a molecule-level representation. Alternatively, the atomic vectors can be summed up (by specifying `--aggregation sum`) or summed up and divided by a constant number N (by specifying `--aggregation norm --aggregation_norm `). A reasonable value for N is usually the average number of atoms per molecule in the dataset of interest. The default is `--aggregation_norm 100`. - -### Additional Features - -While the model works very well on its own, especially after hyperparameter optimization, we have seen that additional features can further improve performance on certain datasets. The additional features can be added at the atom-, bond, or molecule-level. Molecule-level features can be either automatically generated by RDKit or custom features provided by the user. - -#### Molecule-Level Custom Features - -If you install from source, you can modify the code to load custom features as follows: - -1. **Generate features:** If you want to generate features in code, you can write a custom features generator function in `chemprop/features/features_generators.py`. Scroll down to the bottom of that file to see a features generator code template. -2. **Load features:** If you have features saved as a numpy `.npy` file or as a `.csv` file, you can load the features by using `--features_path /path/to/features`. Note that the features must be in the same order as the SMILES strings in your data file. Also note that `.csv` files must have a header row and the features should be comma-separated with one line per molecule. By default, provided features will be normalized unless the flag `--no_features_scaling` is used. - -#### Molecule-Level RDKit 2D Features - -As a starting point, we recommend using pre-normalized RDKit features by using the `--features_generator rdkit_2d_normalized --no_features_scaling` flags. In general, we recommend NOT using the `--no_features_scaling` flag (i.e. allow the code to automatically perform feature scaling), but in the case of `rdkit_2d_normalized`, those features have been pre-normalized and don't require further scaling. - -The full list of available features for `--features_generator` is as follows. - -`morgan` is binary Morgan fingerprints, radius 2 and 2048 bits. -`morgan_count` is count-based Morgan, radius 2 and 2048 bits. -`rdkit_2d` is an unnormalized version of 200 assorted rdkit descriptors. Full list can be found at the bottom of our paper: https://arxiv.org/pdf/1904.01561.pdf -`rdkit_2d_normalized` is the CDF-normalized version of the 200 rdkit descriptors. - -#### Atom-Level Features - -Similar to the additional molecular features described above, you can also provide additional atomic features via `--atom_descriptors_path /path/to/features` with valid file formats: -* `.npz` file, where descriptors are saved as 2D array for each molecule in the exact same order as the SMILES strings in your data file. -* `.pkl` / `.pckl` / `.pickle` containing a pandas dataframe with smiles as index and a numpy array of descriptors as columns. -* `.sdf` containing all mol blocks with descriptors as entries. - -The order of the descriptors for each atom per molecule must match the ordering of atoms in the RDKit molecule object. Further information on supplying atomic descriptors can be found [here](https://github.com/chemprop/chemprop/releases/tag/v1.1.0). - -Users must select in which way atom descriptors are used. The command line option `--atom_descriptors descriptor` concatenates the new features to the embedded atomic features after the D-MPNN with an additional linear layer. The option `--atom_descriptors feature` concatenates the features to each atomic feature vector before the D-MPNN, so that they are used during message-passing. Alternatively, the user can overwrite the default atom features with the custom features using the option `--overwrite_default_atom_features`. - -Similar to the molecule-level features, the atom-level descriptors and features are scaled by default. This can be disabled with the option `--no_atom_descriptor_scaling` - -#### Bond-Level Features - -Bond-level features can be provided in the same format as the atom-level features, using the option `--bond_features_path /path/to/features`. The order of the features for each molecule must match the bond ordering in the RDKit molecule object. - -The bond-level features are concatenated with the bond feature vectors before the D-MPNN, such that they are used during message-passing. Alternatively, the user can overwrite the default bond features with the custom features using the option `--overwrite_default_bond_features`. - -Similar to molecule-, and atom-level features, the bond-level features are scaled by default. This can be disabled with the option `--no_bond_features_scaling`. - -### Spectra - -One of the data types that can be trained with Chemprop is "spectra". Spectra training is different than other datatypes because it considers the predictions of all targets together. Targets for spectra should be provided as the values for the spectrum at a specific position in the spectrum. The loss function for spectra is SID, spectral information divergence. Alternatively, Wasserstein distance (earthmover's distance) can be used for both loss function and metric with input arguments `--metric wasserstein --loss_function wasserstein`. - -Spectra predictions are configured to return only positive values and normalize them to sum each spectrum to 1. Activation to enforce positivity is an exponential function by default but can also be set as a Softplus function, according to the argument `--spectra_activation `. Value positivity is enforced on input targets as well using a floor value that replaces negative or smaller target values with the floor value (default 1e-8), customizable with the argument `--spectra_target_floor `. - -In absorption spectra, sometimes the phase of collection will create regions in the spectrum where data collection or prediction would be unreliable. To exclude these regions, include paths to phase features for your data (`--phase_features_path `) and a mask indicating the spectrum regions that are supported (`--spectra_phase_mask_path `). The format for the mask file is a `.csv` file with columns for the spectrum positions and rows for the phases, with column and row labels in the same order as they appear in the targets and features files. - -### Reaction - -As an alternative to molecule SMILES, Chemprop can also process atom-mapped reaction SMILES (see [Daylight manual](https://www.daylight.com/meetings/summerschool01/course/basics/smirks.html) for details on reaction SMILES), which consist of three parts denoting reactants, agents and products, separated by ">". Use the option `--reaction` to enable the input of reactions, which transforms the reactants and products of each reaction to the corresponding condensed graph of reaction and changes the initial atom and bond features to hold information from both the reactant and product (option `--reaction_mode reac_prod`), or from the reactant and the difference upon reaction (option `--reaction_mode reac_diff`, default) or from the product and the difference upon reaction (option `--reaction_mode prod_diff`). In reaction mode, Chemprop thus concatenates information to each atomic and bond feature vector, for example, with option `--reaction_mode reac_prod`, each atomic feature vector holds information on the state of the atom in the reactant (similar to default Chemprop), and concatenates information on the state of the atom in the product, so that the size of the D-MPNN increases slightly. Agents are discarded. Functions incompatible with a reaction as input (scaffold splitting and feature generation) are carried out on the reactants only. If the atom-mapped reaction SMILES contain mapped hydrogens, enable explicit hydrogens via `--explicit_h`. Example of an atom-mapped reaction SMILES denoting the reaction of methanol to formaldehyde without hydrogens: `[CH3:1][OH:2]>>[CH2:1]=[O:2]` and with hydrogens: `[C:1]([H:3])([H:4])([H:5])[O:2][H:6]>>[C:1]([H:3])([H:4])=[O:2].[H:5][H:6]`. The reactions do not need to be balanced and can thus contain unmapped parts, for example leaving groups, if necessary. With reaction modes `reac_prod`, `reac_diff` and `prod_diff`, the atom and bond features of unbalanced aroma are set to zero on the side of the reaction they are not specified. Alternatively, features can be set to the same values on the reactant and product side via the modes `reac_prod_balance`, `reac_diff_balance` and `prod_diff_balance`, which corresponds to a rough balancing of the reaction. -For further details and benchmarking, as well as a citable reference, please refer to the [article](https://doi.org/10.1021/acs.jcim.1c00975). - -### Reaction in a solvent / Reaction and a molecule] - -Chemprop can process a reaction in a solvent or a reaction and a molecule with the `--reaction_solvent` option. While this -option is originally built to model a reaction in a solvent, this option works for any reaction and a molecule where -the molecule can represent anything, i.e. a solvent, a reagent, etc. -This requires the input csv file to have two separate columns of SMILES: one column for atom-mapped reaction SMILES -and the other column for solvent/molecule SMILES. The reaction and solvent/molecule SMILES columns can be ordered in -any way (i.e. the first column can be either reaction SMILES or solvent SMILES and the second column can then be -solvent SMILES or reaction SMILES). However, the same column ordering as used in the training must be used for the prediction -(i.e. if the input csv file used for model training had reaction SMILES as the first column and solvent SMILES as the -second columns, the csv file used for prediction should also have the first column as reaction SMILES and second column -as the solvent SMILES). For the information on atom-mapped reaction SMILES, please refer to [Reaction](#reaction). - -When using the `--reaction_solvent` option, `--number_of_molecules` must be set to 2. All options listed in the [Reaction](#reaction) -section such as different `--reaction_mode` and `--explicit_h` can be used for `--reaction_solvent`. Note that -`--explicit_h` option is only applicable to reaction SMILES. The `--adding_h` option can be used instead for -solvent/molecule if one wishes to add hydrogens to solvent/molecule SMILES. Chemprop allows differently sized MPNNs to be used for each -reaction and solvent/molecule encoding. Below are the input arguments for specifying the size and option of the two MPNNs: -* Reaction: - * `--bias` Whether to add bias to linear layers. - * `--hidden_size` Dimensionality of hidden layers. - * `--depth` Number of message passing steps. - * `--explicit_h` Whether H are explicitly specified in input and should be kept this way. Only applicable to reaction SMILES. -* Solvent / Molecule: - * `--bias_solvent` Whether to add bias to linear layers for solvent/molecule MPN. - * `--hidden_size_solvent` Dimensionality of hidden layers in solvent/molecule MPN. - * `--depth_solvent` Number of message passing steps for solvent/molecule. - * `--adding_h` Whether RDKit molecules will be constructed with adding the Hs to them. Applicable to any SMILES that is not reaction. - -### Pretraining - -Pretraining can be carried out using previously trained checkpoint files to set some or all of the initial values of a model for training. Additionally, some model parameters from the previous model can be frozen in place, so that they will not be updated during training. - -Parameters from existing models can be used for parameter-initialization of a new model by providing a checkpoint of the existing model using either - * `--checkpoint_dir ` Directory where the model checkpoint(s) are saved (i.e. `--save_dir` during training of the old model). This will walk the directory, and load all `.pt` files it finds. - * `--checkpoint_path ` Path to a model checkpoint file (`.pt` file). - * `--checkpoint_paths ` A list of paths to multiple model checkpoint (`.pt`) files. -when training the new model. The model architecture of the new model should resemble the architecture of the old model - otherwise some or all parameters might not be loaded correctly. If any of these options are specified during training, any argument provided with `--ensemble_size` will be overwritten and the ensemble size will be specified as the number of checkpoint files that were provided, with each submodel in the ensemble using a separate checkpoint file for initialization. When using these options, new model parameters are initialized using the old checkpoint files but all parameters remain trainable (no frozen layers from these arguments). - -Certain portions of the model can be loaded from a previous model and frozen so that they will not be trainable, using the various frozen layer parameters. A path to a checkpoint file for frozen parameters is provided with the argument `--checkpoint_frzn `. If this path is provided, the parameters in the MPNN portion of the model will be specified from the path and frozen. Layers in the FFNN portion of the model can also be applied and frozen in addition to freezing the MPNN using `--frzn_ffn_layers `. Model architecture of the new model should match the old model in any layers that are being frozen, but non-frozen layers can be different without affecting the frozen layers (e.g., MPNN alone is frozen and new model has a larger number of FFNN layers). Parameters provided with `--checkpoint_frzn` will overwrite initialization parameters from `--checkpoint_path` (or similar) that are frozen in the new model. At present, only one checkpoint can be provided for the `--checkpoint_frzn` and those parameters will be used for any number of submodels if `--ensemble_size` is specified. If multiple molecules (with multiple MPNNs) are being trained in the new model, the default behavior is for both of the new MPNNs to be frozen and drawn from the checkpoint. Only the first MPNN will be frozen and subsequent MPNNs still allowed to train if `--freeze_first_only` is specified. - -### Missing Target Values - -When training multitask models (models which predict more than one target simultaneously), sometimes not all target values are known for all molecules in the dataset. Chemprop automatically handles missing entries in the dataset by masking out the respective values in the loss function, so that partial data can be utilized, too. The loss function is rescaled according to all non-missing values, and missing values furthermore do not contribute to validation or test errors. Training on partial data is therefore possible and encouraged (versus taking out datapoints with missing target entries). No keyword is needed for this behavior, it is the default. - -In contrast, when using `sklearn_train.py` (a utility script provided within Chemprop that trains standard models such as random forests on Morgan fingerprints via the python package scikit-learn), multi-task models cannot be trained on datasets with partially missing targets. However, one can instead train individual models for each task (via the argument `--single_task`), where missing values are automatically removed from the dataset. Thus, the training still makes use of all non-missing values, but by training individual models for each task, instead of one model with multiple output values. This restriction only applies to sklearn models (via :code:`sklearn_train` or :code:`python sklearn_train.py`), but NOT to default Chemprop models via `chemprop_train` or `python train.py`. Alternatively, missing target values can be imputed by specifying `--impute_mode `. The option `single_task` trains single task sklearn models on each task to predict missing values and is computationally expensive. The option `linear` trains a stochastic gradient linear model on each target to compute missing targets. Both `single_task` and `linear` are applicable to regression and classification task. For regression tasks, the options `median` and `mean` furthermore compute the median and mean of the training data. For classification tasks, `frequent` computes the most frequent value for each task. For all options, models are fitted to non-missing training targets and predict missing training targets. The test set is not affected by imputing. - -### Weighted Training by Target and Data - -By default, each task in multitask training and each provided datapoint are weighted equally for training. Weights can be specified in either case to allow some tasks in training or some specified data points to be weighted more heavily than others in the training of the model. - -Using the `--target_weights` argument followed by a list of numbers equal in length to the number of tasks in multitask training, different tasks can be given more weight in parameter updates during training. For instance, in a multitask training with two tasks, the argument `--target_weights 1 2` would give the second task twice as much weight in model parameter updates. Provided weights must be non-negative. Values are normalized to make the average weight equal 1. Target weights are not used with the validation set for the determination of early stopping or in evaluation of the test set. - -Using the `--data_weights_path` argument followed by a path to a data file containing weights will allow each individual datapoint in the training data to be given different weight in parameter updates. Formatting of this file is similar to provided features CSV files: they should contain only a single column with one header row and a numerical value in each row that corresponds to the order of datapoints provided with `--data_path`. Data weights should not be provided for validation or test sets if they are provided through the arguments `--separate_test_path` or `--separate_val_path`. Provided weights must be non-negative. Values are normalized to make the average weight equal 1. Data weights are not used with the validation set for the determination of early stopping or in evaluation of the test set. - -### Caching - -By default, the molecule objects created from each SMILES string are cached for all dataset sizes, and the graph objects created from each molecule object are cached for datasets up to 10000 molecules. If memory permits, you may use the keyword `--cache_cutoff inf` to set this cutoff from 10000 to infinity to always keep the generated graphs in cache (or to another integer value for custom behavior). This may speed up training (depending on the dataset size, molecule size, number of epochs and GPU support), since the graphs do not need to be recreated each epoch, but increases memory usage considerably. Below the cutoff, graphs are created sequentially in the first epoch. Above the cutoff, graphs are created in parallel (on `--num_workers ` workers) for each epoch. If training on a GPU, training without caching and creating graphs on the fly in parallel is often preferable. On CPU, training with caching if often preferable for medium-sized datasets and a very low number of CPUs. If a very large dataset causes memory issues, you might turn off caching even of the molecule objects via the commands `--no_cache_mol` to reduce memory usage further. - -## Predicting - -To load a trained model and make predictions, run `predict.py` and specify: -* `--test_path ` Path to the data to predict on. -* A checkpoint by using either: - * `--checkpoint_dir ` Directory where the model checkpoint(s) are saved (i.e. `--save_dir` during training). This will walk the directory, load all `.pt` files it finds, and treat the models as an ensemble. - * `--checkpoint_path ` Path to a model checkpoint file (`.pt` file). -* `--preds_path` Path where a CSV file containing the predictions will be saved. - -For example: -``` -chemprop_predict --test_path data/tox21.csv --checkpoint_dir tox21_checkpoints --preds_path tox21_preds.csv -``` -or -``` -chemprop_predict --test_path data/tox21.csv --checkpoint_path tox21_checkpoints/fold_0/model_0/model.pt --preds_path tox21_preds.csv -``` - -Predictions made on an ensemble of models will return the average of the individual model predictions. To return the individual model predictions as well, include the `--individual_ensemble_predictions` argument. - -If installed from source, `chemprop_predict` can be replaced with `python predict.py`. - -### Uncertainty Estimation - -The uncertainty of predictions made in Chemprop can be estimated by several different methods. Uncertainty estimation is carried out alongside model value prediction and reported in the predictions csv file when the argument `--uncertainty_method ` is provided. If no uncertainty method is provided, then only the model value predictions will be carried out. The available methods are: - -* `ensemble` For a prediction using an ensemble of models. Returns the variance of predictions made by each of the ensemble submodels. Ensemble variance can be used with any dataset type, but the results are only usable for calibration or evaluation with regression datasets. -* `dropout` Intended for use with a single model and not an ensemble. This method uses Monte Carlo dropout to generate a virtual ensemble of models and reports the ensemble variance of the predictions. The number of models generated and the probability of dropout can be changed using `--uncertainty_dropout_p ` and `--dropout_sampling_size `, respectively. Note that this dropout is distinct from dropout regularization used during training, which is not active during predictions. -* `mve` When mve has been used for the training loss function on regression datasets, this method uses the separate variance prediction of the model. The variance result from ensembling models together includes the variance contribution of the different models having different mean predictions. -* `evidential_total`, `evidential_epistemic`, `evidential_aleatoric` When evidential was used as the training loss function for regression datasets, these methods use the variance prediction of the model. The evidential output includes different functions intended to divide the variance into epistemic and aleatoric uncertainty. The variance result from ensembling models together includes the variance contribution of the different models having different mean predictions. -* `spectra_roundrobin` For an ensemble of spectra predictions. Calculates the pairwise SID between the predictions made by each of the ensemble submodels. Returns the average SID. -* `classification` The predictions of classification and multiclass dataset types are inherently probabilistic already. Used by default for classification and multiclass as needed. - -### Uncertainty Calibration - -Uncertainty predictions may be calibrated to improve their performance on new predictions. Calibration methods are selected using `--calibration_method `, options provided below. An additional dataset to use in calibration is provided through `--calibration_path `, along with necessary features like `--calibration_features_path `. - -**Regression** Calibrated regression outputs can be in the form of a standard deviation or an interval, as specified with the argument `--regression_calibrator_metric <"stdev" or "interval">`. The interval can be set using `--calibration_interval_percentile ` in the range (1,100). -* `zscaling` Assumes that errors are normally distributed according to the estimated variance for each prediction. Applies a constant multiple to all stdev or interval outputs in order to minimize the negative log likelihood for the normal distributions. (https://arxiv.org/abs/1905.11659) -* `tscaling` Similar to zscaling. Assumes that the errors are normally distributed, but accounts for the ensemble size and uncertainty in the sample variance by using a sample-size reduced t-distribution in the negative log likelihood. Works best when errors are mostly due to variability between model instances and not dataset noise or model bias. -* `zelikman_interval` Assumes that the error distribution is the same for each prediction but scaled by the uncalibrated standard deviation for each. Multiplies the uncalibrated standard deviation by a factor necessary to cover the specified interval of the calibration set. Does not assume a Gaussian distribution. Intended for use with intervals but can return a stdev as well. (https://arxiv.org/abs/2005.12496) -* `mve_weighting` For use with ensembles of models trained with mve or evidential loss function. Uses a weighted average of the predicted variances to achieve a minimum negative log likelihood of predictions. (https://doi.org/10.1186/s13321-021-00551-x) -**Classification** -* `platt` Uses a linear scaling before the sigmoid function in prediction to minimize the negative log likelihood of the predictions. If the model checkpoint was generated after Chemprop v1.5.0, then a Bayesian correction is applied to account for the class balance in the training set during prediction. Implemented for classification but not multiclass datasets. (https://arxiv.org/abs/1706.04599) -* `isotonic` Fits an isotonic regression model to the predictions. Prediction outputs are transformed using a stepped histogram-style to match the empirical probability observed in the calibration data. Number and size of the histogram bins are procedurally decided. Histogram bins are wider in the regions of the model output that are less reliable in ordering confidence. Implemented for both classification and multiclass datasets. (https://arxiv.org/abs/1706.04599) - -### Uncertainty Evaluation Metrics - -The performance of uncertainty predictions (calibrated or uncalibrated) as evaluated on the test set using different evaluation metrics as specified with `--evaluation_methods <[methods]>`. Evaluation scores will be saved at the path provided with `--evaluation_scores_path `. If no path is provided to save the scores, then the results will only appear in the output trace. Multiple evaluation methods can be provided and they will be calculated separately for each model task. Evaluation is only available when the target values are provided with the data in `--test_path `. - -* Any valid classification or multiclass metric. Because classification and multiclass outputs are inherently probabilistic, any metric used to assess them during training is appropriate to evaluate the confidences produced after calibration. -* `nll` Returns the average negative log likelihood of the real target as indicated by the uncertainty predictions. Enabled for regression, classification, and multiclass dataset types. -* `spearman` A regression evaluation metric. Returns the Spearman rank correlation between the predicted uncertainty and the actual error in predictions. Only considers ordering, does not assume a particular probability distribution. -* `ence` Expected normalized calibration error. A regression evaluation metric. Bins model prediction according to uncertainty prediction and compares the RMSE in each bin versus the expected error based on the predicted uncertainty variance then scaled by variance. (discussed in https://doi.org/10.1021/acs.jcim.9b00975) -* `miscalibration_area` A regression evaluation metric. Calculates the model's performance of expected probability versus realized probability at different points along the probability distribution. Values range (0, 0.5) with perfect calibration at 0. (discussed in https://doi.org/10.1021/acs.jcim.9b00975) - -Different evaluation metrics consider different aspects of uncertainty. It is often appropriate to consider multiple metrics. For intance, miscalibration error is important for evaluating uncertainty magnitude but does not indicate that the uncertainty function discriminates well between different outputs. Similarly, spearman tests ordering but not prediction magnitude. - -Evaluations can be used to compare different uncertainty methods and different calibration methods for a given dataset. Using evaluations to compare between datasets may not be a fair comparison and should be done cautiously. - -## Hyperparameter Optimization - -Although the default message passing architecture works quite well on a variety of datasets, optimizing the hyperparameters for a particular dataset often leads to marked improvement in predictive performance. We have automated hyperparameter optimization via Bayesian optimization (using the [hyperopt](https://github.com/hyperopt/hyperopt) package), which will find the optimal hidden size, depth, dropout, and number of feed-forward layers for our model. Optimization can be run as follows: -``` -chemprop_hyperopt --data_path --dataset_type --num_iters --config_save_path -``` -where `` is the number of hyperparameter trial configurations to try and `` is the path to a `.json` file where the optimal hyperparameters will be saved. If installed from source, `chemprop_hyperopt` can be replaced with `python hyperparameter_optimization.py`. Additional training arguments can also be supplied during submission, and they will be applied to all included training iterations (`--epochs`, `--aggregation`, `--num_folds`, `--gpu`, `--seed`, etc.). The argument `--log_dir ` can optionally be provided to set a location for the hyperparameter optimization log. - -Results of completed trial configurations will be stored there and may serve as checkpoints for other instances of hyperparameter optimization if the directory for hyperopt checkpoint files has been specified, `--hyperopt_checkpoint_dir `. If `--hyperopt_checkpoint_dir` is not specified, then checkpoints will default to being stored with the hyperparame. Interrupted hyperparameter optimizations can be restarted by specifying the same directory. Previously completed hyperparameter optimizations can be used as the starting point for new optimizations with a larger selected number of iterations. Note that the `--num_iters ` argument will count all previous checkpoints saved in the directory towards the total number of iterations, and if the existing number of checkpoints exceeds this argment then no new trials will be carried out. - -Manual training instances outside of hyperparameter optimization may also be considered in the history of attempted trials. The paths to the save_dirs for these training instances can be specified with `--manual_trial_dirs `. These directories must contain the files `test_scores.csv` and `args.json` as generated during training. To work appropriately, these training instances must be consistent with the parameter space being searched in hyperparameter optimization (including the hyperparameter optimization default of ffn_hidden_size being set equal to hidden_size). Manual trials considered with this argument are not added to the checkpoint directory. - -As part of the hyperopt search algorithm, the first trial configurations for the model will be randomly spread through the search space. The number of randomized trials can be altered with the argument `--startup_random_iters `. After this number of trial iterations has been carried out, subsequent trials will use the directed search algorithm to select parameter configurations. This startup count considers the total number of trials in the checkpoint directory rather than the number that has been carried out by an individual instance of hyperparamter optimization. - -Parallel instances of hyperparameter optimization that share a checkpoint directory will have access to the shared results of hyperparameter optimization trials, allowing them to arrive at the desired total number of iterations collectively more quickly. In this way multiple GPUs or other computing resources can be applied to the search. Each instance of hyperparameter optimization is unaware of parallel trials that have not yet completed. This has several implications when running `n` parallel instances: -* A parallel search will have different information and search different parameters than a single instance sequential search. -* New trials will not consider the parameters in currently running trials, in rare cases leading to duplication. -* Up to `n-1` extra random search iterations may occur above the number specified with `--startup_random_iters`. -* Up to `n-1` extra total trials will be run above the chosen `num_iters`, though each instance will be exposed to at least that number of iterations. -* The last parallel instance to complete is the only one that is aware of all the trials when reporting results. - -Once hyperparameter optimization is complete, the optimal hyperparameters can be applied during training by specifying the config path as follows: -``` -chemprop_train --data_path --dataset_type --config_path -``` - -Note that the hyperparameter optimization script sees all the data given to it. The intended use is to run the hyperparameter optimization script on a dataset with the eventual test set held out. If you need to optimize hyperparameters separately for several different cross validation splits, you should e.g. set up a bash script to run hyperparameter_optimization.py separately on each split's training and validation data with test held out. - -## Encode Fingerprint Latent Representation - -To load a trained model and encode the fingerprint latent representation of molecules, run `fingerprint.py` and specify: -* `--test_path ` Path to the data to predict on. -* A checkpoint by using either: - * `--checkpoint_dir ` Directory where the model checkpoint is saved (i.e. `--save_dir` during training). - * `--checkpoint_path ` Path to a model checkpoint file (`.pt` file). -* `--preds_path` Path where a CSV file containing the encoded fingerprint vectors will be saved. -* Any other arguments that you would supply for a prediction, such as atom or bond features. - -Latent representations of molecules are taken from intermediate stages of the prediction model. This latent representation can be taken at the output of the MPNN (default) or from the last input layer of the FFNN, specified using `--fingerprint_type `. Fingerprint encoding uses the same set of arguments as making predictions. If multiple checkpoint files are supplied through `--checkpoint_dir`, then the fingerprint encodings for each of the models will be provided concatenated together as a longer vector. - -Example input: -``` -chemprop_fingerprint --test_path data/tox21.csv --checkpoint_dir tox21_checkpoints --preds_path tox21_fingerprint.csv -``` -or -``` -chemprop_fingerprint --test_path data/tox21.csv --checkpoint_path tox21_checkpoints/fold_0/model_0/model.pt --preds_path tox21_fingerprint.csv -``` - -If installed from source, `chemprop_fingerprint` can be replaced with `python fingerprint.py`. - -## Interpreting - -It is often helpful to provide explanation of model prediction (i.e., this molecule is toxic because of this substructure). Given a trained model, you can interpret the model prediction using the following command: -``` -chemprop_interpret --data_path data/tox21.csv --checkpoint_dir tox21_checkpoints/fold_0/ --property_id 1 -``` - -If installed from source, `chemprop_interpret` can be replaced with `python interpret.py`. - -The output will be like the following: -* The first column is a molecule and second column is its predicted property (in this case NR-AR toxicity). -* The third column is the smallest substructure that made this molecule classified as toxic (which we call rationale). -* The fourth column is the predicted toxicity of that substructure. - -As shown in the first row, when a molecule is predicted to be non-toxic, we will not provide any rationale for its prediction. - -smiles | NR-AR | rationale | rationale_score -| :---: | :---: | :---: | :---: | -O=\[N+\](\[O-\])c1cc(C(F)(F)F)cc(\[N+\](=O)\[O-\])c1Cl | 0.014 | | | -CC1(C)O\[C@@H\]2C\[C@H\]3\[C@@H\]4C\[C@H\](F)C5=CC(=O)C=C\[C@\]5(C)\[C@H\]4\[C@@H\](O)C\[C@\]3(C)\[C@\]2(C(=O)CO)O1 | 0.896 | C\[C@\]12C=CC(=O)C=C1\[CH2:1\]C\[CH2:1\]\[CH2:1\]2 | 0.769 | -C\[C@\]12CC\[C@H\]3\[C@@H\](CC\[C@@\]45O\[C@@H\]4C(O)=C(C#N)C\[C@\]35C)\[C@@H\]1CC\[C@@H\]2O | 0.941 | C\[C@\]12C\[CH:1\]=\[CH:1\]\[C@H\]3O\[C@\]31CC\[C@@H\]1\[C@@H\]2CC\[C:1\]\[CH2:1\]1 | 0.808 | -C\[C@\]12C\[C@H\](O)\[C@H\]3\[C@@H\](CCC4=CC(=O)CC\[C@@\]43C)\[C@@H\]1CC\[C@\]2(O)C(=O)COP(=O)(\[O-\])\[O-\] | 0.957 | C1C\[CH2:1\]\[C:1\]\[C@@H\]2\[C@@H\]1\[C@@H\]1CC\[C:1\]\[C:1\]1C\[CH2:1\]2 | 0.532 | - -Chemprop's interpretation script explains model prediction one property at a time. `--property_id 1` tells the script to provide explanation for the first property in the dataset (which is NR-AR). In a multi-task training setting, you will need to change `--property_id` to provide explanation for each property in the dataset. - -For computational efficiency, we currently restricted the rationale to have maximum 20 atoms and minimum 8 atoms. You can adjust these constraints through `--max_atoms` and `--min_atoms` argument. - -Please note that the interpreting framework is currently only available for models trained on properties of single molecules, that is, multi-molecule models generated via the `--number_of_molecules` command are not supported. - -## TensorBoard - -During training, TensorBoard logs are automatically saved to the same directory as the model checkpoints. To view TensorBoard logs, first install TensorFlow with `pip install tensorflow`. Then run `tensorboard --logdir=` where `` is the path to the checkpoint directory. Then navigate to [http://localhost:6006](http://localhost:6006). - -## Results - -We compared our model against MolNet by Wu et al. on all of the MolNet datasets for which we could reproduce their splits (all but Bace, Toxcast, and qm7). When there was only one fold provided (scaffold split for BBBP and HIV), we ran our model multiple times and reported average performance. In each case we optimize hyperparameters on separate folds, use rdkit_2d_normalized features when useful, and compare to the best-performing model in MolNet as reported by Wu et al. We did not ensemble our model in these results. - -Results on regression datasets (lower is better) - -Dataset | Size | Metric | Ours | MolNet Best Model | -| :---: | :---: | :---: | :---: | :---: | -QM8 | 21,786 | MAE | 0.011 ± 0.000 | 0.0143 ± 0.0011 | -QM9 | 133,885 | MAE | 2.666 ± 0.006 | 2.4 ± 1.1 | -ESOL | 1,128 | RMSE | 0.555 ± 0.047 | 0.58 ± 0.03 | -FreeSolv | 642 | RMSE | 1.075 ± 0.054 | 1.15 ± 0.12 | -Lipophilicity | 4,200 | RMSE | 0.555 ± 0.023 | 0.655 ± 0.036 | -PDBbind (full) | 9,880 | RMSE | 1.391 ± 0.012 | 1.25 ± 0 | -PDBbind (core) | 168 | RMSE | 2.173 ± 0.090 | 1.92 ± 0.07 | -PDBbind (refined) | 3,040 | RMSE | 1.486 ± 0.026 | 1.38 ± 0 | - -Results on classification datasets (higher is better) - -| Dataset | Size | Metric | Ours | MolNet Best Model | -| :---: | :---: | :---: | :---: | :---: | -| PCBA | 437,928 | PRC-AUC | 0.335 ± 0.001 | 0.136 ± 0.004 | -| MUV | 93,087 | PRC-AUC | 0.041 ± 0.007 | 0.184 ± 0.02 | -| HIV | 41,127 | ROC-AUC | 0.776 ± 0.007 | 0.792 ± 0 | -| BBBP | 2,039 | ROC-AUC | 0.737 ± 0.001 | 0.729 ± 0 | -| Tox21 | 7,831 | ROC-AUC | 0.851 ± 0.002 | 0.829 ± 0.006 | -| SIDER | 1,427 | ROC-AUC | 0.676 ± 0.014 | 0.648 ± 0.009 | -| ClinTox | 1,478 | ROC-AUC | 0.864 ± 0.017 | 0.832 ± 0.037 | - -Lastly, you can find the code to our original repo at https://github.com/wengong-jin/chemprop and for the Mayr et al. baseline at https://github.com/yangkevin2/lsc_experiments . +You can subscribe to our development status and notes for this version [here](https://github.com/chemprop/chemprop/issues/517). diff --git a/__init__.py b/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/chemprop/__init__.py b/chemprop/__init__.py index 1757405c3..69f74ad49 100644 --- a/chemprop/__init__.py +++ b/chemprop/__init__.py @@ -1,22 +1,5 @@ -import chemprop.data -import chemprop.features -import chemprop.models -import chemprop.train -import chemprop.uncertainty -# import chemprop.web +from . import data, featurizers, models, nn, utils, conf, exceptions, schedulers -import chemprop.args -import chemprop.constants -import chemprop.hyperparameter_optimization -import chemprop.interpret -import chemprop.nn_utils -import chemprop.utils -import chemprop.rdkit -import chemprop.sklearn_predict -import chemprop.sklearn_train -import chemprop.spectra_utils -import chemprop.hyperopt_utils +__all__ = ["data", "featurizers", "models", "nn", "utils", "conf", "exceptions", "schedulers"] -# from chemprop._version import __version__ - -__version__ = "1.5.1" +__version__ = "2.0.0-rc.1" diff --git a/chemprop/_version.py b/chemprop/_version.py deleted file mode 100644 index d81d2d492..000000000 --- a/chemprop/_version.py +++ /dev/null @@ -1,10 +0,0 @@ -__all__ = ['__version__'] - -# major, minor, patch -version_info = 1, 4, 1 - -# suffix -suffix = None - -# version string -__version__ = '.'.join(map(str, version_info)) + (f'.{suffix}' if suffix else '') diff --git a/chemprop/args.py b/chemprop/args.py deleted file mode 100644 index 6ab64a4f2..000000000 --- a/chemprop/args.py +++ /dev/null @@ -1,976 +0,0 @@ -import json -import os -from tempfile import TemporaryDirectory -import pickle -from typing import List, Optional -from typing_extensions import Literal -from packaging import version -from warnings import warn - -import torch -from tap import Tap # pip install typed-argument-parser (https://github.com/swansonk14/typed-argument-parser) - -import chemprop.data.utils -from chemprop.data import set_cache_mol, empty_cache -from chemprop.features import get_available_features_generators - - -Metric = Literal['auc', 'prc-auc', 'rmse', 'mae', 'mse', 'r2', 'accuracy', 'cross_entropy', 'binary_cross_entropy', 'sid', 'wasserstein', 'f1', 'mcc', 'bounded_rmse', 'bounded_mae', 'bounded_mse'] - - -def get_checkpoint_paths(checkpoint_path: Optional[str] = None, - checkpoint_paths: Optional[List[str]] = None, - checkpoint_dir: Optional[str] = None, - ext: str = '.pt') -> Optional[List[str]]: - """ - Gets a list of checkpoint paths either from a single checkpoint path or from a directory of checkpoints. - - If :code:`checkpoint_path` is provided, only collects that one checkpoint. - If :code:`checkpoint_paths` is provided, collects all of the provided checkpoints. - If :code:`checkpoint_dir` is provided, walks the directory and collects all checkpoints. - A checkpoint is any file ending in the extension ext. - - :param checkpoint_path: Path to a checkpoint. - :param checkpoint_paths: List of paths to checkpoints. - :param checkpoint_dir: Path to a directory containing checkpoints. - :param ext: The extension which defines a checkpoint file. - :return: A list of paths to checkpoints or None if no checkpoint path(s)/dir are provided. - """ - if sum(var is not None for var in [checkpoint_dir, checkpoint_path, checkpoint_paths]) > 1: - raise ValueError('Can only specify one of checkpoint_dir, checkpoint_path, and checkpoint_paths') - - if checkpoint_path is not None: - return [checkpoint_path] - - if checkpoint_paths is not None: - return checkpoint_paths - - if checkpoint_dir is not None: - checkpoint_paths = [] - - for root, _, files in os.walk(checkpoint_dir): - for fname in files: - if fname.endswith(ext): - checkpoint_paths.append(os.path.join(root, fname)) - - if len(checkpoint_paths) == 0: - raise ValueError(f'Failed to find any checkpoints with extension "{ext}" in directory "{checkpoint_dir}"') - - return checkpoint_paths - - return None - - -class CommonArgs(Tap): - """:class:`CommonArgs` contains arguments that are used in both :class:`TrainArgs` and :class:`PredictArgs`.""" - - smiles_columns: List[str] = None - """List of names of the columns containing SMILES strings. - By default, uses the first :code:`number_of_molecules` columns.""" - number_of_molecules: int = 1 - """Number of molecules in each input to the model. - This must equal the length of :code:`smiles_columns` (if not :code:`None`).""" - checkpoint_dir: str = None - """Directory from which to load model checkpoints (walks directory and ensembles all models that are found).""" - checkpoint_path: str = None - """Path to model checkpoint (:code:`.pt` file).""" - checkpoint_paths: List[str] = None - """List of paths to model checkpoints (:code:`.pt` files).""" - no_cuda: bool = False - """Turn off cuda (i.e., use CPU instead of GPU).""" - gpu: int = None - """Which GPU to use.""" - features_generator: List[str] = None - """Method(s) of generating additional features.""" - features_path: List[str] = None - """Path(s) to features to use in FNN (instead of features_generator).""" - phase_features_path: str = None - """Path to features used to indicate the phase of the data in one-hot vector form. Used in spectra datatype.""" - no_features_scaling: bool = False - """Turn off scaling of features.""" - max_data_size: int = None - """Maximum number of data points to load.""" - num_workers: int = 8 - """Number of workers for the parallel data loading (0 means sequential).""" - batch_size: int = 50 - """Batch size.""" - atom_descriptors: Literal['feature', 'descriptor'] = None - """ - Custom extra atom descriptors. - :code:`feature`: used as atom features to featurize a given molecule. - :code:`descriptor`: used as descriptor and concatenated to the machine learned atomic representation. - """ - atom_descriptors_path: str = None - """Path to the extra atom descriptors.""" - bond_features_path: str = None - """Path to the extra bond descriptors that will be used as bond features to featurize a given molecule.""" - no_cache_mol: bool = False - """ - Whether to not cache the RDKit molecule for each SMILES string to reduce memory usage (cached by default). - """ - empty_cache: bool = False - """ - Whether to empty all caches before training or predicting. This is necessary if multiple jobs are run within a single script and the atom or bond features change. - """ - - def __init__(self, *args, **kwargs): - super(CommonArgs, self).__init__(*args, **kwargs) - self._atom_features_size = 0 - self._bond_features_size = 0 - self._atom_descriptors_size = 0 - - @property - def device(self) -> torch.device: - """The :code:`torch.device` on which to load and process data and models.""" - if not self.cuda: - return torch.device('cpu') - - return torch.device('cuda', self.gpu) - - @device.setter - def device(self, device: torch.device) -> None: - self.cuda = device.type == 'cuda' - self.gpu = device.index - - @property - def cuda(self) -> bool: - """Whether to use CUDA (i.e., GPUs) or not.""" - return not self.no_cuda and torch.cuda.is_available() - - @cuda.setter - def cuda(self, cuda: bool) -> None: - self.no_cuda = not cuda - - @property - def features_scaling(self) -> bool: - """ - Whether to apply normalization with a :class:`~chemprop.data.scaler.StandardScaler` - to the additional molecule-level features. - """ - return not self.no_features_scaling - - @features_scaling.setter - def features_scaling(self, features_scaling: bool) -> None: - self.no_features_scaling = not features_scaling - - @property - def atom_features_size(self) -> int: - """The size of the atom features.""" - return self._atom_features_size - - @atom_features_size.setter - def atom_features_size(self, atom_features_size: int) -> None: - self._atom_features_size = atom_features_size - - @property - def atom_descriptors_size(self) -> int: - """The size of the atom descriptors.""" - return self._atom_descriptors_size - - @atom_descriptors_size.setter - def atom_descriptors_size(self, atom_descriptors_size: int) -> None: - self._atom_descriptors_size = atom_descriptors_size - - @property - def bond_features_size(self) -> int: - """The size of the atom features.""" - return self._bond_features_size - - @bond_features_size.setter - def bond_features_size(self, bond_features_size: int) -> None: - self._bond_features_size = bond_features_size - - def configure(self) -> None: - self.add_argument('--gpu', choices=list(range(torch.cuda.device_count()))) - self.add_argument('--features_generator', choices=get_available_features_generators()) - - def process_args(self) -> None: - # Load checkpoint paths - self.checkpoint_paths = get_checkpoint_paths( - checkpoint_path=self.checkpoint_path, - checkpoint_paths=self.checkpoint_paths, - checkpoint_dir=self.checkpoint_dir, - ) - - # Validate features - if self.features_generator is not None and 'rdkit_2d_normalized' in self.features_generator and self.features_scaling: - raise ValueError('When using rdkit_2d_normalized features, --no_features_scaling must be specified.') - - # Validate atom descriptors - if (self.atom_descriptors is None) != (self.atom_descriptors_path is None): - raise ValueError('If atom_descriptors is specified, then an atom_descriptors_path must be provided ' - 'and vice versa.') - - if self.atom_descriptors is not None and self.number_of_molecules > 1: - raise NotImplementedError('Atom descriptors are currently only supported with one molecule ' - 'per input (i.e., number_of_molecules = 1).') - - # Validate bond descriptors - if self.bond_features_path is not None and self.number_of_molecules > 1: - raise NotImplementedError('Bond descriptors are currently only supported with one molecule ' - 'per input (i.e., number_of_molecules = 1).') - - set_cache_mol(not self.no_cache_mol) - - if self.empty_cache: - empty_cache() - - -class TrainArgs(CommonArgs): - """:class:`TrainArgs` includes :class:`CommonArgs` along with additional arguments used for training a Chemprop model.""" - - # General arguments - data_path: str - """Path to data CSV file.""" - target_columns: List[str] = None - """ - Name of the columns containing target values. - By default, uses all columns except the SMILES column and the :code:`ignore_columns`. - """ - ignore_columns: List[str] = None - """Name of the columns to ignore when :code:`target_columns` is not provided.""" - dataset_type: Literal['regression', 'classification', 'multiclass', 'spectra'] - """Type of dataset. This determines the default loss function used during training.""" - loss_function: Literal['mse', 'bounded_mse', 'binary_cross_entropy', 'cross_entropy', 'mcc', 'sid', 'wasserstein', 'mve', 'evidential', 'dirichlet'] = None - """Choice of loss function. Loss functions are limited to compatible dataset types.""" - multiclass_num_classes: int = 3 - """Number of classes when running multiclass classification.""" - separate_val_path: str = None - """Path to separate val set, optional.""" - separate_test_path: str = None - """Path to separate test set, optional.""" - spectra_phase_mask_path: str = None - """Path to a file containing a phase mask array, used for excluding particular regions in spectra predictions.""" - data_weights_path: str = None - """Path to weights for each molecule in the training data, affecting the relative weight of molecules in the loss function""" - target_weights: List[float] = None - """Weights associated with each target, affecting the relative weight of targets in the loss function. Must match the number of target columns.""" - split_type: Literal['random', 'scaffold_balanced', 'predetermined', 'crossval', 'cv', 'cv-no-test', 'index_predetermined', 'random_with_repeated_smiles'] = 'random' - """Method of splitting the data into train/val/test.""" - split_sizes: List[float] = None - """Split proportions for train/validation/test sets.""" - split_key_molecule: int = 0 - """The index of the key molecule used for splitting when multiple molecules are present and constrained split_type is used, like scaffold_balanced or random_with_repeated_smiles. - Note that this index begins with zero for the first molecule.""" - num_folds: int = 1 - """Number of folds when performing cross validation.""" - folds_file: str = None - """Optional file of fold labels.""" - val_fold_index: int = None - """Which fold to use as val for leave-one-out cross val.""" - test_fold_index: int = None - """Which fold to use as test for leave-one-out cross val.""" - crossval_index_dir: str = None - """Directory in which to find cross validation index files.""" - crossval_index_file: str = None - """Indices of files to use as train/val/test. Overrides :code:`--num_folds` and :code:`--seed`.""" - seed: int = 0 - """ - Random seed to use when splitting data into train/val/test sets. - When :code`num_folds > 1`, the first fold uses this seed and all subsequent folds add 1 to the seed. - """ - pytorch_seed: int = 0 - """Seed for PyTorch randomness (e.g., random initial weights).""" - metric: Metric = None - """ - Metric to use during evaluation. It is also used with the validation set for early stopping. - Defaults to "auc" for classification, "rmse" for regression, and "sid" for spectra. - """ - extra_metrics: List[Metric] = [] - """Additional metrics to use to evaluate the model. Not used for early stopping.""" - save_dir: str = None - """Directory where model checkpoints will be saved.""" - checkpoint_frzn: str = None - """Path to model checkpoint file to be loaded for overwriting and freezing weights.""" - save_smiles_splits: bool = False - """Save smiles for each train/val/test splits for prediction convenience later.""" - test: bool = False - """Whether to skip training and only test the model.""" - quiet: bool = False - """Skip non-essential print statements.""" - log_frequency: int = 10 - """The number of batches between each logging of the training loss.""" - show_individual_scores: bool = False - """Show all scores for individual targets, not just average, at the end.""" - cache_cutoff: float = 10000 - """ - Maximum number of molecules in dataset to allow caching. - Below this number, caching is used and data loading is sequential. - Above this number, caching is not used and data loading is parallel. - Use "inf" to always cache. - """ - save_preds: bool = False - """Whether to save test split predictions during training.""" - resume_experiment: bool = False - """ - Whether to resume the experiment. - Loads test results from any folds that have already been completed and skips training those folds. - """ - - # Model arguments - bias: bool = False - """Whether to add bias to linear layers.""" - hidden_size: int = 300 - """Dimensionality of hidden layers in MPN.""" - depth: int = 3 - """Number of message passing steps.""" - bias_solvent: bool = False - """Whether to add bias to linear layers for solvent MPN if :code:`reaction_solvent` is True.""" - hidden_size_solvent: int = 300 - """Dimensionality of hidden layers in solvent MPN if :code:`reaction_solvent` is True.""" - depth_solvent: int = 3 - """Number of message passing steps for solvent if :code:`reaction_solvent` is True.""" - mpn_shared: bool = False - """Whether to use the same message passing neural network for all input molecules - Only relevant if :code:`number_of_molecules > 1`""" - dropout: float = 0.0 - """Dropout probability.""" - activation: Literal['ReLU', 'LeakyReLU', 'PReLU', 'tanh', 'SELU', 'ELU'] = 'ReLU' - """Activation function.""" - atom_messages: bool = False - """Centers messages on atoms instead of on bonds.""" - undirected: bool = False - """Undirected edges (always sum the two relevant bond vectors).""" - ffn_hidden_size: int = None - """Hidden dim for higher-capacity FFN (defaults to hidden_size).""" - ffn_num_layers: int = 2 - """Number of layers in FFN after MPN encoding.""" - features_only: bool = False - """Use only the additional features in an FFN, no graph network.""" - separate_val_features_path: List[str] = None - """Path to file with features for separate val set.""" - separate_test_features_path: List[str] = None - """Path to file with features for separate test set.""" - separate_val_phase_features_path: str = None - """Path to file with phase features for separate val set.""" - separate_test_phase_features_path: str = None - """Path to file with phase features for separate test set.""" - separate_val_atom_descriptors_path: str = None - """Path to file with extra atom descriptors for separate val set.""" - separate_test_atom_descriptors_path: str = None - """Path to file with extra atom descriptors for separate test set.""" - separate_val_bond_features_path: str = None - """Path to file with extra atom descriptors for separate val set.""" - separate_test_bond_features_path: str = None - """Path to file with extra atom descriptors for separate test set.""" - config_path: str = None - """ - Path to a :code:`.json` file containing arguments. Any arguments present in the config file - will override arguments specified via the command line or by the defaults. - """ - ensemble_size: int = 1 - """Number of models in ensemble.""" - aggregation: Literal['mean', 'sum', 'norm'] = 'mean' - """Aggregation scheme for atomic vectors into molecular vectors""" - aggregation_norm: int = 100 - """For norm aggregation, number by which to divide summed up atomic features""" - reaction: bool = False - """ - Whether to adjust MPNN layer to take reactions as input instead of molecules. - """ - reaction_mode: Literal['reac_prod', 'reac_diff', 'prod_diff', 'reac_prod_balance', 'reac_diff_balance', 'prod_diff_balance'] = 'reac_diff' - """ - Choices for construction of atom and bond features for reactions - :code:`reac_prod`: concatenates the reactants feature with the products feature. - :code:`reac_diff`: concatenates the reactants feature with the difference in features between reactants and products. - :code:`prod_diff`: concatenates the products feature with the difference in features between reactants and products. - :code:`reac_prod_balance`: concatenates the reactants feature with the products feature, balances imbalanced reactions. - :code:`reac_diff_balance`: concatenates the reactants feature with the difference in features between reactants and products, balances imbalanced reactions. - :code:`prod_diff_balance`: concatenates the products feature with the difference in features between reactants and products, balances imbalanced reactions. - """ - reaction_solvent: bool = False - """ - Whether to adjust the MPNN layer to take as input a reaction and a molecule, and to encode them with separate MPNNs. - """ - explicit_h: bool = False - """ - Whether H are explicitly specified in input (and should be kept this way). This option is intended to be used - with the :code:`reaction` or :code:`reaction_solvent` options, and applies only to the reaction part. - """ - adding_h: bool = False - """ - Whether RDKit molecules will be constructed with adding the Hs to them. This option is intended to be used - with Chemprop's default molecule or multi-molecule encoders, or in :code:`reaction_solvent` mode where it applies to the solvent only. - """ - - # Training arguments - epochs: int = 30 - """Number of epochs to run.""" - warmup_epochs: float = 2.0 - """ - Number of epochs during which learning rate increases linearly from :code:`init_lr` to :code:`max_lr`. - Afterwards, learning rate decreases exponentially from :code:`max_lr` to :code:`final_lr`. - """ - init_lr: float = 1e-4 - """Initial learning rate.""" - max_lr: float = 1e-3 - """Maximum learning rate.""" - final_lr: float = 1e-4 - """Final learning rate.""" - grad_clip: float = None - """Maximum magnitude of gradient during training.""" - class_balance: bool = False - """Trains with an equal number of positives and negatives in each batch.""" - spectra_activation: Literal['exp', 'softplus'] = 'exp' - """Indicates which function to use in dataset_type spectra training to constrain outputs to be positive.""" - spectra_target_floor: float = 1e-8 - """Values in targets for dataset type spectra are replaced with this value, intended to be a small positive number used to enforce positive values.""" - evidential_regularization: float = 0 - """Value used in regularization for evidential loss function. Value used in literature was 1.""" - overwrite_default_atom_features: bool = False - """ - Overwrites the default atom descriptors with the new ones instead of concatenating them. - Can only be used if atom_descriptors are used as a feature. - """ - no_atom_descriptor_scaling: bool = False - """Turn off atom feature scaling.""" - overwrite_default_bond_features: bool = False - """Overwrites the default atom descriptors with the new ones instead of concatenating them""" - no_bond_features_scaling: bool = False - """Turn off atom feature scaling.""" - frzn_ffn_layers: int = 0 - """ - Overwrites weights for the first n layers of the ffn from checkpoint model (specified checkpoint_frzn), - where n is specified in the input. - Automatically also freezes mpnn weights. - """ - freeze_first_only: bool = False - """ - Determines whether or not to use checkpoint_frzn for just the first encoder. - Default (False) is to use the checkpoint to freeze all encoders. - (only relevant for number_of_molecules > 1, where checkpoint model has number_of_molecules = 1) - """ - - def __init__(self, *args, **kwargs) -> None: - super(TrainArgs, self).__init__(*args, **kwargs) - self._task_names = None - self._crossval_index_sets = None - self._task_names = None - self._num_tasks = None - self._features_size = None - self._train_data_size = None - - @property - def metrics(self) -> List[str]: - """The list of metrics used for evaluation. Only the first is used for early stopping.""" - return [self.metric] + self.extra_metrics - - @property - def minimize_score(self) -> bool: - """Whether the model should try to minimize the score metric or maximize it.""" - return self.metric in {'rmse', 'mae', 'mse', 'cross_entropy', 'binary_cross_entropy', 'sid', 'wasserstein', 'bounded_mse', 'bounded_mae', 'bounded_rmse'} - - @property - def use_input_features(self) -> bool: - """Whether the model is using additional molecule-level features.""" - return self.features_generator is not None or self.features_path is not None or self.phase_features_path is not None - - @property - def num_lrs(self) -> int: - """The number of learning rates to use (currently hard-coded to 1).""" - return 1 - - @property - def crossval_index_sets(self) -> List[List[List[int]]]: - """Index sets used for splitting data into train/validation/test during cross-validation""" - return self._crossval_index_sets - - @property - def task_names(self) -> List[str]: - """A list of names of the tasks being trained on.""" - return self._task_names - - @task_names.setter - def task_names(self, task_names: List[str]) -> None: - self._task_names = task_names - - @property - def num_tasks(self) -> int: - """The number of tasks being trained on.""" - return len(self.task_names) if self.task_names is not None else 0 - - @property - def features_size(self) -> int: - """The dimensionality of the additional molecule-level features.""" - return self._features_size - - @features_size.setter - def features_size(self, features_size: int) -> None: - self._features_size = features_size - - @property - def train_data_size(self) -> int: - """The size of the training data set.""" - return self._train_data_size - - @train_data_size.setter - def train_data_size(self, train_data_size: int) -> None: - self._train_data_size = train_data_size - - @property - def atom_descriptor_scaling(self) -> bool: - """ - Whether to apply normalization with a :class:`~chemprop.data.scaler.StandardScaler` - to the additional atom features." - """ - return not self.no_atom_descriptor_scaling - - @property - def bond_feature_scaling(self) -> bool: - """ - Whether to apply normalization with a :class:`~chemprop.data.scaler.StandardScaler` - to the additional bond features." - """ - return not self.no_bond_features_scaling - - def process_args(self) -> None: - super(TrainArgs, self).process_args() - - global temp_save_dir # Prevents the temporary directory from being deleted upon function return - - # Adapt the number of molecules for reaction_solvent mode - if self.reaction_solvent is True and self.number_of_molecules != 2: - raise ValueError('In reaction_solvent mode, --number_of_molecules 2 must be specified.') - - # Process SMILES columns - self.smiles_columns = chemprop.data.utils.preprocess_smiles_columns( - path=self.data_path, - smiles_columns=self.smiles_columns, - number_of_molecules=self.number_of_molecules, - ) - - # Load config file - if self.config_path is not None: - with open(self.config_path) as f: - config = json.load(f) - for key, value in config.items(): - setattr(self, key, value) - - # Check whether the number of input columns is two for the reaction_solvent mode - if self.reaction_solvent is True and len(self.smiles_columns) != 2: - raise ValueError(f'In reaction_solvent mode, exactly two smiles column must be provided (one for reactions, and one for molecules)') - - # Validate reaction/reaction_solvent mode - if self.reaction is True and self.reaction_solvent is True: - raise ValueError('Only reaction or reaction_solvent mode can be used, not both.') - - # Create temporary directory as save directory if not provided - if self.save_dir is None: - temp_save_dir = TemporaryDirectory() - self.save_dir = temp_save_dir.name - - # Fix ensemble size if loading checkpoints - if self.checkpoint_paths is not None and len(self.checkpoint_paths) > 0: - self.ensemble_size = len(self.checkpoint_paths) - - # Process and validate metric and loss function - if self.metric is None: - if self.dataset_type == 'classification': - self.metric = 'auc' - elif self.dataset_type == 'multiclass': - self.metric = 'cross_entropy' - elif self.dataset_type == 'spectra': - self.metric = 'sid' - elif self.dataset_type == 'regression' and self.loss_function == 'bounded_mse': - self.metric = 'bounded_mse' - elif self.dataset_type == 'regression': - self.metric = 'rmse' - else: - raise ValueError(f'Dataset type {self.dataset_type} is not supported.') - - if self.metric in self.extra_metrics: - raise ValueError(f'Metric {self.metric} is both the metric and is in extra_metrics. ' - f'Please only include it once.') - - for metric in self.metrics: - if not any([(self.dataset_type == 'classification' and metric in ['auc', 'prc-auc', 'accuracy', 'binary_cross_entropy', 'f1', 'mcc']), - (self.dataset_type == 'regression' and metric in ['rmse', 'mae', 'mse', 'r2', 'bounded_rmse', 'bounded_mae', 'bounded_mse']), - (self.dataset_type == 'multiclass' and metric in ['cross_entropy', 'accuracy', 'f1', 'mcc']), - (self.dataset_type == 'spectra' and metric in ['sid','wasserstein'])]): - raise ValueError(f'Metric "{metric}" invalid for dataset type "{self.dataset_type}".') - - if self.loss_function is None: - if self.dataset_type == 'classification': - self.loss_function = 'binary_cross_entropy' - elif self.dataset_type == 'multiclass': - self.loss_function = 'cross_entropy' - elif self.dataset_type == 'spectra': - self.loss_function = 'sid' - elif self.dataset_type == 'regression': - self.loss_function = 'mse' - else: - raise ValueError(f'Default loss function not configured for dataset type {self.dataset_type}.') - - if self.loss_function != 'bounded_mse' and any(metric in ['bounded_mse', 'bounded_rmse', 'bounded_mae'] for metric in self.metrics): - raise ValueError('Bounded metrics can only be used in conjunction with the regression loss function bounded_mse.') - - # Validate class balance - if self.class_balance and self.dataset_type != 'classification': - raise ValueError('Class balance can only be applied if the dataset type is classification.') - - # Validate features - if self.features_only and not (self.features_generator or self.features_path): - raise ValueError('When using features_only, a features_generator or features_path must be provided.') - - # Handle FFN hidden size - if self.ffn_hidden_size is None: - self.ffn_hidden_size = self.hidden_size - - # Handle MPN variants - if self.atom_messages and self.undirected: - raise ValueError('Undirected is unnecessary when using atom_messages ' - 'since atom_messages are by their nature undirected.') - - # Validate split type settings - if not (self.split_type == 'predetermined') == (self.folds_file is not None) == (self.test_fold_index is not None): - raise ValueError('When using predetermined split type, must provide folds_file and test_fold_index.') - - if not (self.split_type == 'crossval') == (self.crossval_index_dir is not None): - raise ValueError('When using crossval split type, must provide crossval_index_dir.') - - if not (self.split_type in ['crossval', 'index_predetermined']) == (self.crossval_index_file is not None): - raise ValueError('When using crossval or index_predetermined split type, must provide crossval_index_file.') - - if self.split_type in ['crossval', 'index_predetermined']: - with open(self.crossval_index_file, 'rb') as rf: - self._crossval_index_sets = pickle.load(rf) - self.num_folds = len(self.crossval_index_sets) - self.seed = 0 - - # Validate split size entry and set default values - if self.split_sizes is None: - if self.separate_val_path is None and self.separate_test_path is None: # separate data paths are not provided - self.split_sizes = (0.8, 0.1, 0.1) - elif self.separate_val_path is not None and self.separate_test_path is None: # separate val path only - self.split_sizes = (0.8, 0., 0.2) - elif self.separate_val_path is None and self.separate_test_path is not None: # separate test path only - self.split_sizes = (0.8, 0.2, 0.) - else: # both separate data paths are provided - self.split_sizes = (1., 0., 0.) - - else: - if sum(self.split_sizes) != 1.: - raise ValueError(f'Provided split sizes of {self.split_sizes} do not sum to 1.') - - if len(self.split_sizes) not in [2,3]: - raise ValueError(f'Three values should be provided for train/val/test split sizes. Instead received {len(self.split_sizes)} value(s).') - - if self.separate_val_path is None and self.separate_test_path is None: # separate data paths are not provided - if len(self.split_sizes) != 3: - raise ValueError(f'Three values should be provided for train/val/test split sizes. Instead received {len(self.split_sizes)} value(s).') - if 0. in self.split_sizes: - raise ValueError(f'Provided split sizes must be nonzero if no separate data files are provided. Received split sizes of {self.split_sizes}.') - - elif self.separate_val_path is not None and self.separate_test_path is None: # separate val path only - if len(self.split_sizes) == 2: # allow input of just 2 values - self.split_sizes = (self.split_sizes[0], 0., self.split_sizes[1]) - if self.split_sizes[0] == 0.: - raise ValueError('Provided split size for train split must be nonzero.') - if self.split_sizes[1] != 0.: - raise ValueError('Provided split size for validation split must be 0 because validation set is provided separately.') - if self.split_sizes[2] == 0.: - raise ValueError('Provided split size for test split must be nonzero.') - - elif self.separate_val_path is None and self.separate_test_path is not None: # separate test path only - if len(self.split_sizes) == 2: # allow input of just 2 values - self.split_sizes = (self.split_sizes[0], self.split_sizes[1], 0.) - if self.split_sizes[0] == 0.: - raise ValueError('Provided split size for train split must be nonzero.') - if self.split_sizes[1] == 0.: - raise ValueError('Provided split size for validation split must be nonzero.') - if self.split_sizes[2] != 0.: - raise ValueError('Provided split size for test split must be 0 because test set is provided separately.') - - - else: # both separate data paths are provided - if self.split_sizes != (1., 0., 0.): - raise ValueError(f'Separate data paths were provided for val and test splits. Split sizes should not also be provided.') - - # Test settings - if self.test: - self.epochs = 0 - - # Validate features are provided for separate validation or test set for each of the kinds of additional features - for (features_argument, base_features_path, val_features_path, test_features_path) in [ - ('`--features_path`', self.features_path, self.separate_val_features_path, self.separate_test_features_path), - ('`--phase_features_path`', self.phase_features_path, self.separate_val_phase_features_path, self.separate_test_phase_features_path), - ('`--atom_descriptors_path`', self.atom_descriptors_path, self.separate_val_atom_descriptors_path, self.separate_test_atom_descriptors_path), - ('`--bond_features_path`', self.bond_features_path, self.separate_val_bond_features_path, self.separate_test_bond_features_path) - ]: - if base_features_path is not None: - if self.separate_val_path is not None and val_features_path is None: - raise ValueError(f'Additional features were provided using the argument {features_argument}. The same kinds of features must be provided for the separate validation set.') - if self.separate_test_path is not None and test_features_path is None: - raise ValueError(f'Additional features were provided using the argument {features_argument}. The same kinds of features must be provided for the separate test set.') - - - # validate extra atom descriptor options - if self.overwrite_default_atom_features and self.atom_descriptors != 'feature': - raise NotImplementedError('Overwriting of the default atom descriptors can only be used if the' - 'provided atom descriptors are features.') - - if not self.atom_descriptor_scaling and self.atom_descriptors is None: - raise ValueError('Atom descriptor scaling is only possible if additional atom features are provided.') - - # validate extra bond feature options - if self.overwrite_default_bond_features and self.bond_features_path is None: - raise ValueError('If you want to overwrite the default bond descriptors, ' - 'a bond_descriptor_path must be provided.') - - if not self.bond_feature_scaling and self.bond_features_path is None: - raise ValueError('Bond descriptor scaling is only possible if additional bond features are provided.') - - # normalize target weights - if self.target_weights is not None: - avg_weight = sum(self.target_weights)/len(self.target_weights) - self.target_weights = [w/avg_weight for w in self.target_weights] - if min(self.target_weights) < 0: - raise ValueError('Provided target weights must be non-negative.') - - # check if key molecule index is outside of the number of molecules - if self.split_key_molecule >= self.number_of_molecules: - raise ValueError('The index provided with the argument `--split_key_molecule` must be less than the number of molecules. Note that this index begins with 0 for the first molecule. ') - - -class PredictArgs(CommonArgs): - """:class:`PredictArgs` includes :class:`CommonArgs` along with additional arguments used for predicting with a Chemprop model.""" - - test_path: str - """Path to CSV file containing testing data for which predictions will be made.""" - preds_path: str - """Path to CSV file where predictions will be saved.""" - drop_extra_columns: bool = False - """Whether to drop all columns from the test data file besides the SMILES columns and the new prediction columns.""" - ensemble_variance: bool = False - """Deprecated. Whether to calculate the variance of ensembles as a measure of epistemic uncertainty. If True, the variance is saved as an additional column for each target in the preds_path.""" - individual_ensemble_predictions: bool = False - """Whether to return the predictions made by each of the individual models rather than the average of the ensemble""" - # Uncertainty arguments - uncertainty_method: Literal[ - 'mve', - 'ensemble', - 'evidential_epistemic', - 'evidential_aleatoric', - 'evidential_total', - 'classification', - 'dropout', - 'spectra_roundrobin', - ] = None - """The method of calculating uncertainty.""" - calibration_method: Literal['zscaling', 'tscaling', 'zelikman_interval', 'mve_weighting', 'platt', 'isotonic'] = None - """Methods used for calibrating the uncertainty calculated with uncertainty method.""" - evaluation_methods: List[str] = None - """The methods used for evaluating the uncertainty performance if the test data provided includes targets. - Available methods are [nll, miscalibration_area, ence, spearman] or any available classification or multiclass metric.""" - evaluation_scores_path: str = None - """Location to save the results of uncertainty evaluations.""" - uncertainty_dropout_p: float = 0.1 - """The probability to use for Monte Carlo dropout uncertainty estimation.""" - dropout_sampling_size: int = 10 - """The number of samples to use for Monte Carlo dropout uncertainty estimation. Distinct from the dropout used during training.""" - calibration_interval_percentile: float = 95 - """Sets the percentile used in the calibration methods. Must be in the range (1,100).""" - regression_calibrator_metric: Literal['stdev', 'interval'] = None - """Regression calibrators can output either a stdev or an inverval. """ - calibration_path: str = None - """Path to data file to be used for uncertainty calibration.""" - calibration_features_path: str = None - """Path to features data to be used with the uncertainty calibration dataset.""" - calibration_phase_features_path: str = None - """ """ - calibration_atom_descriptors_path: str = None - """Path to the extra atom descriptors.""" - calibration_bond_features_path: str = None - """Path to the extra bond descriptors that will be used as bond features to featurize a given molecule.""" - - @property - def ensemble_size(self) -> int: - """The number of models in the ensemble.""" - return len(self.checkpoint_paths) - - def process_args(self) -> None: - super(PredictArgs, self).process_args() - - if self.regression_calibrator_metric is None: - if self.calibration_method == 'zelikman_interval': - self.regression_calibrator_metric = 'interval' - else: - self.regression_calibrator_metric = 'stdev' - - if self.uncertainty_method == 'dropout' and version.parse(torch.__version__) < version.parse('1.9.0'): - raise ValueError('Dropout uncertainty is only supported for pytorch versions >= 1.9.0') - - self.smiles_columns = chemprop.data.utils.preprocess_smiles_columns( - path=self.test_path, - smiles_columns=self.smiles_columns, - number_of_molecules=self.number_of_molecules, - ) - - if self.checkpoint_paths is None or len(self.checkpoint_paths) == 0: - raise ValueError('Found no checkpoints. Must specify --checkpoint_path or ' - '--checkpoint_dir containing at least one checkpoint.') - - if self.ensemble_variance == True: - if self.uncertainty_method in ['ensemble', None]: - warn( - 'The `--ensemble_variance` argument is deprecated and should \ - be replaced with `--uncertainty_method ensemble`.', - DeprecationWarning, - ) - self.uncertainty_method = 'ensemble' - else: - raise ValueError( - f'Only one uncertainty method can be used at a time. \ - The arguement `--ensemble_variance` was provided along \ - with the uncertainty method {self.uncertainty_method}. The `--ensemble_variance` \ - argument is deprecated and should be replaced with `--uncertainty_method ensemble`.' - ) - - if self.calibration_interval_percentile <= 1 or self.calibration_interval_percentile >= 100: - raise ValueError('The calibration interval must be a percentile value in the range (1,100).') - - if self.uncertainty_dropout_p < 0 or self.uncertainty_dropout_p > 1: - raise ValueError('The dropout probability must be in the range (0,1).') - - if self.dropout_sampling_size <= 1: - raise ValueError('The argument `--dropout_sampling_size` must be an integer greater than 1.') - - # Validate that features provided for the prediction test set are also provided for the calibration set - for (features_argument, base_features_path, cal_features_path) in [ - ('`--features_path`', self.features_path, self.calibration_features_path), - ('`--phase_features_path`', self.phase_features_path, self.calibration_phase_features_path), - ('`--atom_descriptors_path`', self.atom_descriptors_path, self.calibration_atom_descriptors_path), - ('`--bond_features_path`', self.bond_features_path, self.calibration_bond_features_path) - ]: - if base_features_path is not None and self.calibration_path is not None and cal_features_path is None: - raise ValueError(f'Additional features were provided using the argument {features_argument}. The same kinds of features must be provided for the calibration dataset.') - - -class InterpretArgs(CommonArgs): - """:class:`InterpretArgs` includes :class:`CommonArgs` along with additional arguments used for interpreting a trained Chemprop model.""" - - data_path: str - """Path to data CSV file.""" - batch_size: int = 500 - """Batch size.""" - property_id: int = 1 - """Index of the property of interest in the trained model.""" - rollout: int = 20 - """Number of rollout steps.""" - c_puct: float = 10.0 - """Constant factor in MCTS.""" - max_atoms: int = 20 - """Maximum number of atoms in rationale.""" - min_atoms: int = 8 - """Minimum number of atoms in rationale.""" - prop_delta: float = 0.5 - """Minimum score to count as positive.""" - - def process_args(self) -> None: - super(InterpretArgs, self).process_args() - - self.smiles_columns = chemprop.data.utils.preprocess_smiles_columns( - path=self.data_path, - smiles_columns=self.smiles_columns, - number_of_molecules=self.number_of_molecules, - ) - - if self.features_path is not None: - raise ValueError('Cannot use --features_path for interpretation since features ' - 'need to be computed dynamically for molecular substructures. ' - 'Please specify --features_generator .') - - if self.checkpoint_paths is None or len(self.checkpoint_paths) == 0: - raise ValueError('Found no checkpoints. Must specify --checkpoint_path or ' - '--checkpoint_dir containing at least one checkpoint.') - - -class FingerprintArgs(PredictArgs): - """:class:`FingerprintArgs` includes :class:`PredictArgs` with additional arguments for the generation of latent fingerprint vectors.""" - - fingerprint_type: Literal['MPN', 'last_FFN'] = 'MPN' - """Choice of which type of latent fingerprint vector to use. Default is the output of the MPNN, excluding molecular features""" - - -class HyperoptArgs(TrainArgs): - """:class:`HyperoptArgs` includes :class:`TrainArgs` along with additional arguments used for optimizing Chemprop hyperparameters.""" - - num_iters: int = 20 - """Number of hyperparameter choices to try.""" - config_save_path: str - """Path to :code:`.json` file where best hyperparameter settings will be written.""" - log_dir: str = None - """(Optional) Path to a directory where all results of the hyperparameter optimization will be written.""" - hyperopt_checkpoint_dir: str = None - """Path to a directory where hyperopt completed trial data is stored. Hyperopt job will include these trials if restarted. - Can also be used to run multiple instances in parallel if they share the same checkpoint directory.""" - startup_random_iters: int = 10 - """The initial number of trials that will be randomly specified before TPE algorithm is used to select the rest.""" - manual_trial_dirs: List[str] = None - """Paths to save directories for manually trained models in the same search space as the hyperparameter search. - Results will be considered as part of the trial history of the hyperparameter search.""" - - def process_args(self) -> None: - super(HyperoptArgs, self).process_args() - - # Assign log and checkpoint directories if none provided - if self.log_dir is None: - self.log_dir = self.save_dir - if self.hyperopt_checkpoint_dir is None: - self.hyperopt_checkpoint_dir = self.log_dir - - -class SklearnTrainArgs(TrainArgs): - """:class:`SklearnTrainArgs` includes :class:`TrainArgs` along with additional arguments for training a scikit-learn model.""" - - model_type: Literal['random_forest', 'svm'] - """scikit-learn model to use.""" - class_weight: Literal['balanced'] = None - """How to weight classes (None means no class balance).""" - single_task: bool = False - """Whether to run each task separately (needed when dataset has null entries).""" - radius: int = 2 - """Morgan fingerprint radius.""" - num_bits: int = 2048 - """Number of bits in morgan fingerprint.""" - num_trees: int = 500 - """Number of random forest trees.""" - impute_mode: Literal['single_task', 'median', 'mean', 'linear','frequent'] = None - """How to impute missing data (None means no imputation).""" - - -class SklearnPredictArgs(Tap): - """:class:`SklearnPredictArgs` contains arguments used for predicting with a trained scikit-learn model.""" - - test_path: str - """Path to CSV file containing testing data for which predictions will be made.""" - smiles_columns: List[str] = None - """List of names of the columns containing SMILES strings. - By default, uses the first :code:`number_of_molecules` columns.""" - number_of_molecules: int = 1 - """Number of molecules in each input to the model. - This must equal the length of :code:`smiles_columns` (if not :code:`None`).""" - preds_path: str - """Path to CSV file where predictions will be saved.""" - checkpoint_dir: str = None - """Path to directory containing model checkpoints (:code:`.pkl` file)""" - checkpoint_path: str = None - """Path to model checkpoint (:code:`.pkl` file)""" - checkpoint_paths: List[str] = None - """List of paths to model checkpoints (:code:`.pkl` files)""" - - def process_args(self) -> None: - - self.smiles_columns = chemprop.data.utils.preprocess_smiles_columns( - path=self.test_path, - smiles_columns=self.smiles_columns, - number_of_molecules=self.number_of_molecules, - ) - - # Load checkpoint paths - self.checkpoint_paths = get_checkpoint_paths( - checkpoint_path=self.checkpoint_path, - checkpoint_paths=self.checkpoint_paths, - checkpoint_dir=self.checkpoint_dir, - ext='.pkl' - ) diff --git a/chemprop/cli/common.py b/chemprop/cli/common.py new file mode 100644 index 000000000..e5d4583f2 --- /dev/null +++ b/chemprop/cli/common.py @@ -0,0 +1,183 @@ +import logging +from argparse import ArgumentParser, Namespace, ArgumentError +from pathlib import Path + +from chemprop.cli.utils import LookupAction +from chemprop.cli.utils.args import uppercase +from chemprop.featurizers import MoleculeFeaturizerRegistry, RxnMode, AtomFeatureMode + +logger = logging.getLogger(__name__) + + +def add_common_args(parser: ArgumentParser) -> ArgumentParser: + data_args = parser.add_argument_group("Shared input data args") + data_args.add_argument( + "-s", + "--smiles-columns", + nargs="+", + help="The column names in the input CSV containing SMILES strings. If unspecified, uses the the 0th column.", + ) + data_args.add_argument( + "-r", + "--reaction-columns", + nargs="+", + help="The column names in the input CSV containing reaction SMILES in the format 'REACTANT>AGENT>PRODUCT', where 'AGENT' is optional.", + ) + data_args.add_argument( + "--no-header-row", + action="store_true", + help="If specified, the first row in the input CSV will not be used as column names.", + ) + + dataloader_args = parser.add_argument_group("Dataloader args") + dataloader_args.add_argument( + "-n", + "--num-workers", + type=int, + default=0, + help="""Number of workers for parallel data loading (0 means sequential). +Warning: setting num_workers>0 can cause hangs on Windows and MacOS.""", + ) + dataloader_args.add_argument("-b", "--batch-size", type=int, default=64, help="Batch size.") + + parser.add_argument( + "--accelerator", default="auto", help="Passed directly to the lightning Trainer()." + ) + parser.add_argument( + "--devices", + default="auto", + help="Passed directly to the lightning Trainer(). If specifying multiple devices, must be a single string of comma separated devices, e.g. '1, 2'.", + ) + + featurization_args = parser.add_argument_group("Featurization args") + featurization_args.add_argument( + "--rxn-mode", + "--reaction-mode", + type=uppercase, + default="REAC_DIFF", + choices=list(RxnMode.keys()), + help="""Choices for construction of atom and bond features for reactions (case insensitive): +- 'reac_prod': concatenates the reactants feature with the products feature. +- 'reac_diff': concatenates the reactants feature with the difference in features between reactants and products. (Default) +- 'prod_diff': concatenates the products feature with the difference in features between reactants and products. +- 'reac_prod_balance': concatenates the reactants feature with the products feature, balances imbalanced reactions. +- 'reac_diff_balance': concatenates the reactants feature with the difference in features between reactants and products, balances imbalanced reactions. +- 'prod_diff_balance': concatenates the products feature with the difference in features between reactants and products, balances imbalanced reactions.""", + ) + # TODO: Update documenation for multi_hot_atom_featurizer_mode + featurization_args.add_argument( + "--multi-hot-atom-featurizer-mode", + type=uppercase, + default="V2", + choices=list(AtomFeatureMode.keys()), + help="""Choices for multi-hot atom featurization scheme. This will affect both non-reatction and reaction feturization (case insensitive): +- `V1`: Corresponds to the original configuration employed in the Chemprop V1. +- `V2`: Tailored for a broad range of molecules, this configuration encompasses all elements in the first four rows of the periodic table, along with iodine. It is the default in Chemprop V2. +- `ORGANIC`: Designed specifically for use with organic molecules for drug research and development, this configuration includes a subset of elements most common in organic chemistry, including H, B, C, N, O, F, Si, P, S, Cl, Br, and I.""", + ) + featurization_args.add_argument( + "--keep-h", + action="store_true", + help="Whether hydrogens explicitly specified in input should be kept in the mol graph.", + ) + featurization_args.add_argument( + "--add-h", action="store_true", help="Whether hydrogens should be added to the mol graph." + ) + featurization_args.add_argument( + "--features-generators", + nargs="+", + action=LookupAction(MoleculeFeaturizerRegistry), + help="Method(s) of generating additional features.", + ) + featurization_args.add_argument( + "--descriptors-path", + type=Path, + help="Path to extra descriptors to concatenate to learned representation.", + ) + # TODO: Add in v2.1 + # featurization_args.add_argument( + # "--phase-features-path", + # help="Path to features used to indicate the phase of the data in one-hot vector form. Used in spectra datatype.", + # ) + featurization_args.add_argument( + "--no-descriptor-scaling", action="store_true", help="Turn off extra descriptor scaling." + ) + featurization_args.add_argument( + "--no-atom-feature-scaling", + action="store_true", + help="Turn off extra atom feature scaling.", + ) + featurization_args.add_argument( + "--no-atom-descriptor-scaling", + action="store_true", + help="Turn off extra atom descriptor scaling.", + ) + featurization_args.add_argument( + "--no-bond-feature-scaling", + action="store_true", + help="Turn off extra bond feature scaling.", + ) + featurization_args.add_argument( + "--atom-features-path", + nargs="+", + action="append", + help="If a single path is given, it's assumed to correspond to the 0-th molecule. Or, it can be a two-tuple of molecule index and path to additional atom features to supply before message passing. E.g., `--atom-features-path 0 /path/to/features_0.npz` indicates that the features at the given path should be supplied to the 0-th component. To supply additional features for multiple components, repeat this argument on the command line for each component's respective values, e.g., `--atom-features-path [...] --atom-features-path [...]`.", + ) + featurization_args.add_argument( + "--atom-descriptors-path", + nargs="+", + action="append", + help="If a single path is given, it's assumed to correspond to the 0-th molecule. Or, it can be a two-tuple of molecule index and path to additional atom descriptors to supply after message passing. E.g., `--atom-descriptors-path 0 /path/to/descriptors_0.npz` indicates that the descriptors at the given path should be supplied to the 0-th component. To supply additional descriptors for multiple components, repeat this argument on the command line for each component's respective values, e.g., `--atom-descriptors-path [...] --atom-descriptors-path [...]`.", + ) + featurization_args.add_argument( + "--bond-features-path", + nargs="+", + action="append", + help="If a single path is given, it's assumed to correspond to the 0-th molecule. Or, it can be a two-tuple of molecule index and path to additional bond features to supply before message passing. E.g., `--bond-features-path 0 /path/to/features_0.npz` indicates that the features at the given path should be supplied to the 0-th component. To supply additional features for multiple components, repeat this argument on the command line for each component's respective values, e.g., `--bond-features-path [...] --bond-features-path [...]`.", + ) + # TODO: Add in v2.2 + # parser.add_argument( + # "--constraints-path", + # help="Path to constraints applied to atomic/bond properties prediction.", + # ) + + return parser + + +def process_common_args(args: Namespace) -> Namespace: + for key in ["atom_features_path", "atom_descriptors_path", "bond_features_path"]: + inds_paths = getattr(args, key) + + if not inds_paths: + continue + + ind_path_dict = {} + + for ind_path in inds_paths: + if len(ind_path) > 2: + raise ArgumentError( + argument=None, + message="Too many arguments given for atom features/descriptors or bond features. It can be either a two-tuple of molecule index and a path, or a single path (assumed to be the 0-th molecule).", + ) + + if len(ind_path) == 1: + ind = 0 + path = ind_path[0] + else: + ind, path = ind_path + + if ind_path_dict.get(int(ind), None): + raise ArgumentError( + argument=None, + message=f"Duplicate atom features/descriptors or bond features given for molecule index {ind}.", + ) + + ind_path_dict[int(ind)] = Path(path) + + setattr(args, key, ind_path_dict) + + return args + + +def validate_common_args(args): + pass diff --git a/chemprop/cli/conf.py b/chemprop/cli/conf.py new file mode 100644 index 000000000..56763ca54 --- /dev/null +++ b/chemprop/cli/conf.py @@ -0,0 +1,8 @@ +from datetime import datetime +import logging +import os +from pathlib import Path + +LOG_DIR = Path(os.getenv("CHEMPROP_LOG_DIR", "chemprop_logs")) +LOG_LEVELS = [logging.ERROR, logging.WARNING, logging.INFO, logging.DEBUG] +NOW = datetime.now().strftime("%Y-%m-%dT%H-%M-%S") diff --git a/chemprop/cli/convert.py b/chemprop/cli/convert.py new file mode 100644 index 000000000..0a20ff994 --- /dev/null +++ b/chemprop/cli/convert.py @@ -0,0 +1,55 @@ +from argparse import ArgumentError, ArgumentParser, Namespace +import sys +import logging +from pathlib import Path + +from chemprop.cli.utils import Subcommand +from chemprop.utils.v1_to_v2 import convert_model_file_v1_to_v2 + +logger = logging.getLogger(__name__) + + +class ConvertSubcommand(Subcommand): + COMMAND = "convert" + HELP = "convert a v1 model checkpoint (.pt) to a v2 model checkpoint (.ckpt)" + + @classmethod + def add_args(cls, parser: ArgumentParser) -> ArgumentParser: + parser.add_argument( + "-i", + "--input-path", + required=True, + type=Path, + help="The path to a v1 model .pt checkpoint file.", + ) + parser.add_argument( + "-o", + "--output-path", + type=Path, + help="The path to which the converted model will be saved. Defaults to 'CURRENT_DIRECTORY/STEM_OF_INPUT_v2.ckpt'", + ) + return parser + + @classmethod + def func(cls, args: Namespace): + if args.output_path is None: + args.output_path = Path(args.input_path.stem + "_v2.ckpt") + if args.output_path.suffix != ".ckpt": + raise ArgumentError( + argument=None, message=f"Output must be a `.ckpt` file. Got {args.output_path}" + ) + + logger.info( + f"Converting v1 model checkpoint '{args.input_path}' to v2 model checkpoint '{args.output_path}'..." + ) + convert_model_file_v1_to_v2(args.input_path, args.output_path) + + +if __name__ == "__main__": + parser = ArgumentParser() + parser = ConvertSubcommand.add_args(parser) + + logging.basicConfig(stream=sys.stdout, level=logging.DEBUG, force=True) + + args = parser.parse_args() + ConvertSubcommand.func(args) diff --git a/chemprop/cli/fingerprint.py b/chemprop/cli/fingerprint.py new file mode 100644 index 000000000..078c08bfd --- /dev/null +++ b/chemprop/cli/fingerprint.py @@ -0,0 +1,184 @@ +from argparse import ArgumentError, ArgumentParser, Namespace +import logging +from pathlib import Path +import sys +import pandas as pd +import numpy as np +import torch + +from chemprop import data +from chemprop.nn.loss import LossFunctionRegistry +from chemprop.models import load_model +from chemprop.cli.utils import Subcommand, build_data_from_files, make_dataset +from chemprop.cli.common import add_common_args, process_common_args, validate_common_args + +logger = logging.getLogger(__name__) + + +class FingerprintSubcommand(Subcommand): + COMMAND = "fingerprint" + HELP = "use a pretrained chemprop model for to calculate learned representations" + + @classmethod + def add_args(cls, parser: ArgumentParser) -> ArgumentParser: + parser = add_common_args(parser) + parser.add_argument( + "-i", + "--test-path", + required=True, + type=Path, + help="Path to an input CSV file containing SMILES.", + ) + parser.add_argument( + "-o", + "--output", + "--preds-path", + type=Path, + help="Path to which predictions will be saved. If the file extension is .npz, they will be saved as a npz file, respectively. Otherwise, will save predictions as a CSV. The index of the model will be appended to the filename's stem. By default, predictions will be saved to the same location as '--test-path' with '_fps' appended, i.e., 'PATH/TO/TEST_PATH_fps_0.csv'.", + ) + parser.add_argument( + "--model-path", + required=True, + type=Path, + help="Path to either a single pretrained model checkpoint (.ckpt) or single pretrained model file (.pt) or to a directory that contains these files. If a directory, will recursively search and predict on all found models.", + ) + parser.add_argument( + "--ffn-block-index", + required=True, + type=int, + default=-1, + help="The index indicates which linear layer returns the encoding in the FFN. An index of 0 denotes the post-aggregation representation through a 0-layer MLP, while an index of 1 represents the output from the first linear layer in the FFN, and so forth.", + ) + + return parser + + @classmethod + def func(cls, args: Namespace): + args = process_common_args(args) + validate_common_args(args) + args = process_fingerprint_args(args) + main(args) + + +def process_fingerprint_args(args: Namespace) -> Namespace: + if args.test_path.suffix not in [".csv"]: + raise ArgumentError( + argument=None, message=f"Input data must be a CSV file. Got {args.test_path}" + ) + if args.output is None: + args.output = args.test_path.parent / (args.test_path.stem + "_fps.csv") + if args.output.suffix not in [".csv", ".npz"]: + raise ArgumentError( + argument=None, message=f"Output must be a CSV or NPZ file. Got '{args.output}'." + ) + return args + + +def find_models(model_path: Path): + if model_path.suffix in [".ckpt", ".pt"]: + return [model_path] + elif model_path.is_dir(): + return list(model_path.rglob("*.ckpt")) + list(model_path.rglob("*.pt")) + + +def make_fingerprint_for_model( + args: Namespace, model_path: Path, multicomponent: bool, output_path: Path +): + model = load_model(model_path, multicomponent) + model.eval() + + bounded = any( + isinstance(model.criterion, LossFunctionRegistry[loss_function]) + for loss_function in LossFunctionRegistry.keys() + if "bounded" in loss_function + ) + + format_kwargs = dict( + no_header_row=args.no_header_row, + smiles_cols=args.smiles_columns, + rxn_cols=args.reaction_columns, + target_cols=None, + ignore_cols=None, + splits_col=None, + weight_col=None, + bounded=bounded, + ) + featurization_kwargs = dict( + features_generators=args.features_generators, keep_h=args.keep_h, add_h=args.add_h + ) + + test_data = build_data_from_files( + args.test_path, + **format_kwargs, + p_descriptors=args.descriptors_path, + p_atom_feats=args.atom_features_path, + p_bond_feats=args.bond_features_path, + p_atom_descs=args.atom_descriptors_path, + **featurization_kwargs, + ) + logger.info(f"test size: {len(test_data[0])}") + test_dsets = [ + make_dataset(d, args.rxn_mode, args.multi_hot_atom_featurizer_mode) for d in test_data + ] + + if multicomponent: + test_dset = data.MulticomponentDataset(test_dsets) + else: + test_dset = test_dsets[0] + + test_loader = data.build_dataloader(test_dset, args.batch_size, args.num_workers, shuffle=False) + + logger.info(model) + + with torch.no_grad(): + if multicomponent: + encodings = [ + model.encoding(batch.bmgs, batch.V_ds, batch.X_d, args.ffn_block_index) + for batch in test_loader + ] + else: + encodings = [ + model.encoding(batch.bmg, batch.V_d, batch.X_d, args.ffn_block_index) + for batch in test_loader + ] + H = torch.cat(encodings, 0).numpy() + + if output_path.suffix in [".npz"]: + np.savez(output_path, H=H) + elif output_path.suffix == ".csv": + fingerprint_columns = [f"fp_{i}" for i in range(H.shape[1])] + df_fingerprints = pd.DataFrame(H, columns=fingerprint_columns) + df_fingerprints.to_csv(output_path, index=False) + else: + raise ArgumentError( + argument=None, message=f"Output must be a CSV or npz file. Got {args.output}." + ) + logger.info(f"Fingerprints saved to '{output_path}'") + + +def main(args): + match (args.smiles_columns, args.reaction_columns): + case [None, None]: + n_components = 1 + case [_, None]: + n_components = len(args.smiles_columns) + case [None, _]: + n_components = len(args.reaction_columns) + case _: + n_components = len(args.smiles_columns) + len(args.reaction_columns) + + multicomponent = n_components > 1 + + for i, model_path in enumerate(find_models(args.model_path)): + logger.info(f"Fingerprints with model at '{model_path}'") + output_path = args.output.parent / f"{args.output.stem}_{i}{args.output.suffix}" + make_fingerprint_for_model(args, model_path, multicomponent, output_path) + + +if __name__ == "__main__": + parser = ArgumentParser() + parser = FingerprintSubcommand.add_args(parser) + + logging.basicConfig(stream=sys.stdout, level=logging.DEBUG, force=True) + args = parser.parse_args() + args = FingerprintSubcommand.func(args) diff --git a/chemprop/cli/hpopt.py b/chemprop/cli/hpopt.py new file mode 100644 index 000000000..f3fd3d324 --- /dev/null +++ b/chemprop/cli/hpopt.py @@ -0,0 +1,428 @@ +import json +import logging +import sys +from argparse import ArgumentParser, Namespace +from copy import deepcopy +from pathlib import Path + +import torch +from lightning import pytorch as pl +from lightning.pytorch.callbacks import EarlyStopping + +from chemprop.cli.common import add_common_args, process_common_args, validate_common_args +from chemprop.cli.train import ( + add_train_args, + build_datasets, + build_model, + build_splits, + normalize_inputs, + process_train_args, + validate_train_args, +) +from chemprop.cli.utils.command import Subcommand +from chemprop.data import build_dataloader +from chemprop.nn import AggregationRegistry +from chemprop.nn.utils import Activation +from chemprop.nn.transforms import UnscaleTransform + +NO_RAY = False +DEFAULT_SEARCH_SPACE = {} +try: + from ray import tune + from ray.train import CheckpointConfig, RunConfig, ScalingConfig + from ray.train.lightning import ( + RayDDPStrategy, + RayLightningEnvironment, + RayTrainReportCallback, + prepare_trainer, + ) + from ray.train.torch import TorchTrainer + from ray.tune.schedulers import ASHAScheduler + + DEFAULT_SEARCH_SPACE = { + "activation": tune.choice(categories=list(Activation.keys())), + "aggregation": tune.choice(categories=list(AggregationRegistry.keys())), + "aggregation_norm": tune.quniform(lower=1, upper=200, q=1), + "batch_size": tune.loguniform(lower=16, upper=256, base=2), + "depth": tune.quniform(lower=2, upper=6, q=1), + "dropout": tune.choice([tune.choice([0.0]), tune.quniform(lower=0.05, upper=0.4, q=0.05)]), + "ffn_hidden_dim": tune.quniform(lower=300, upper=2400, q=100), + "ffn_num_layers": tune.quniform(lower=1, upper=3, q=1), + "final_lr_ratio": tune.loguniform(lower=1e-4, upper=1), + "message_hidden_dim": tune.quniform(lower=300, upper=2400, q=100), + "init_lr_ratio": tune.loguniform(lower=1e-4, upper=1), + "max_lr": tune.loguniform(lower=1e-6, upper=1e-2), + "warmup_epochs": None, + } +except ImportError: + NO_RAY = True + +NO_HYPEROPT = False +try: + from ray.tune.search.hyperopt import HyperOptSearch +except ImportError: + NO_HYPEROPT = True + +# NO_OPTUNA = False +# try: +# from ray.tune.search.optuna import OptunaSearch +# except ImportError: +# NO_OPTUNA = True + + +logger = logging.getLogger(__name__) + +SEARCH_SPACE = DEFAULT_SEARCH_SPACE + +SEARCH_PARAM_KEYWORDS_MAP = { + "basic": ["depth", "ffn_num_layers", "dropout", "ffn_hidden_dim", "message_hidden_dim"], + "learning_rate": ["max_lr", "init_lr_ratio", "final_lr_ratio", "warmup_epochs"], + "all": list(DEFAULT_SEARCH_SPACE.keys()), +} + + +class HpoptSubcommand(Subcommand): + COMMAND = "hpopt" + HELP = "perform hyperparameter optimization on the given task" + + @classmethod + def add_args(cls, parser: ArgumentParser) -> ArgumentParser: + parser = add_common_args(parser) + parser = add_train_args(parser) + return add_hpopt_args(parser) + + @classmethod + def func(cls, args: Namespace): + args = process_common_args(args) + args = process_train_args(args) + args = process_hpopt_args(args) + validate_common_args(args) + validate_train_args(args) + main(args) + + +def add_hpopt_args(parser: ArgumentParser) -> ArgumentParser: + hpopt_args = parser.add_argument_group("Chemprop hyperparameter optimization arguments") + + hpopt_args.add_argument( + "--search-parameter-keywords", + type=str, + nargs="+", + default=["basic"], + help=f"""The model parameters over which to search for an optimal hyperparameter configuration. + Some options are bundles of parameters or otherwise special parameter operations. + + Special keywords: + basic - the default set of hyperparameters for search: depth, ffn_num_layers, dropout, message_hidden_dim, and ffn_hidden_dim. + learning_rate - search for max_lr, init_lr_ratio, final_lr_ratio, and warmup_epochs. The search for init_lr and final_lr values + are defined as fractions of the max_lr value. The search for warmup_epochs is as a fraction of the total epochs used. + all - include search for all 13 inidividual keyword options + + Individual supported parameters: + {list(DEFAULT_SEARCH_SPACE.keys())} + """, + ) + + hpopt_args.add_argument( + "--hpopt-save-dir", + type=Path, + help="Directory to save the hyperparameter optimization results", + ) + + raytune_args = parser.add_argument_group("Ray Tune arguments") + + raytune_args.add_argument( + "--raytune-num-samples", + type=int, + default=10, + help="Passed directly to Ray Tune TuneConfig to control number of trials to run", + ) + + raytune_args.add_argument( + "--raytune-search-algorithm", + choices=["random", "hyperopt"], # , "optuna"], + default="hyperopt", + help="Passed to Ray Tune TuneConfig to control search algorithm", + ) + + raytune_args.add_argument( + "--raytune-num-workers", + type=int, + default=1, + help="Passed directly to Ray Tune ScalingConfig to control number of workers to use", + ) + + raytune_args.add_argument( + "--raytune-use-gpu", + action="store_true", + help="Passed directly to Ray Tune ScalingConfig to control whether to use GPUs", + ) + + raytune_args.add_argument( + "--raytune-num-checkpoints-to-keep", + type=int, + default=1, + help="Passed directly to Ray Tune CheckpointConfig to control number of checkpoints to keep", + ) + + raytune_args.add_argument( + "--raytune-grace-period", + type=int, + default=10, + help="Passed directly to Ray Tune ASHAScheduler to control grace period", + ) + + raytune_args.add_argument( + "--raytune-reduction-factor", + type=int, + default=2, + help="Passed directly to Ray Tune ASHAScheduler to control reduction factor", + ) + + hyperopt_args = parser.add_argument_group("Hyperopt arguments") + + hyperopt_args.add_argument( + "--hyperopt-n-initial-points", + type=int, + default=20, + help="Passed directly to HyperOptSearch to control number of initial points to sample", + ) + + hyperopt_args.add_argument( + "--hyperopt-random-state-seed", + type=int, + default=None, + help="Passed directly to HyperOptSearch to control random state seed", + ) + + return parser + + +def process_hpopt_args(args: Namespace) -> Namespace: + if args.hpopt_save_dir is None: + args.hpopt_save_dir = Path(f"chemprop_hpopt/{args.data_path.stem}") + + args.hpopt_save_dir.mkdir(exist_ok=True, parents=True) + + search_parameters = set() + + for keyword in args.search_parameter_keywords: + if keyword not in SEARCH_PARAM_KEYWORDS_MAP and keyword not in SEARCH_SPACE: + raise ValueError( + f"Search parameter keyword: {keyword} not in available options: {list(SEARCH_PARAM_KEYWORDS_MAP.keys()) + list(SEARCH_SPACE.keys())}." + ) + + search_parameters.update( + SEARCH_PARAM_KEYWORDS_MAP[keyword] + if keyword in SEARCH_PARAM_KEYWORDS_MAP + else [keyword] + ) + + args.search_parameter_keywords = list(search_parameters) + + return args + + +def build_search_space(search_parameters: list[str], train_epochs: int) -> dict: + if "warmup_epochs" not in SEARCH_SPACE and "warmup_epochs" in search_parameters: + SEARCH_SPACE["warmup_epochs"] = tune.quniform(lower=1, upper=train_epochs // 2, q=1) + + return {param: SEARCH_SPACE[param] for param in search_parameters} + + +def update_args_with_config(args: Namespace, config: dict) -> Namespace: + args = deepcopy(args) + + for key, value in config.items(): + match key: + case "final_lr_ratio": + setattr(args, "final_lr", value * args.max_lr) + + case "init_lr_ratio": + setattr(args, "init_lr", value * args.max_lr) + + case _: + assert key in args, f"Key: {key} not found in args." + setattr(args, key, value) + + return args + + +def train_model(config, args, train_dset, val_dset, logger, output_transform, input_transforms): + update_args_with_config(args, config) + + train_loader = build_dataloader( + train_dset, args.batch_size, args.num_workers, seed=args.data_seed + ) + val_loader = build_dataloader(val_dset, args.batch_size, args.num_workers, shuffle=False) + + seed = args.pytorch_seed if args.pytorch_seed is not None else torch.seed() + + torch.manual_seed(seed) + + model = build_model(args, train_loader.dataset, output_transform, input_transforms) + logger.info(model) + + monitor_mode = "min" if model.metrics[0].minimize else "max" + logger.debug(f"Evaluation metric: '{model.metrics[0].alias}', mode: '{monitor_mode}'") + + patience = args.patience if args.patience is not None else args.epochs + early_stopping = EarlyStopping("val_loss", patience=patience, mode=monitor_mode) + + trainer = pl.Trainer( + accelerator=args.accelerator, + devices=args.devices, + max_epochs=args.epochs, + gradient_clip_val=args.grad_clip, + strategy=RayDDPStrategy(find_unused_parameters=True), + callbacks=[RayTrainReportCallback(), early_stopping], + plugins=[RayLightningEnvironment()], + deterministic=args.pytorch_seed is not None, + ) + trainer = prepare_trainer(trainer) + trainer.fit(model, train_loader, val_loader) + + +def tune_model( + args, train_dset, val_dset, logger, monitor_mode, output_transform, input_transforms +): + scheduler = ASHAScheduler( + max_t=args.epochs, + grace_period=min(args.raytune_grace_period, args.epochs), + reduction_factor=args.raytune_reduction_factor, + ) + + scaling_config = ScalingConfig( + num_workers=args.raytune_num_workers, use_gpu=args.raytune_use_gpu + ) + + checkpoint_config = CheckpointConfig( + num_to_keep=args.raytune_num_checkpoints_to_keep, + checkpoint_score_attribute="val_loss", + checkpoint_score_order=monitor_mode, + ) + + run_config = RunConfig( + checkpoint_config=checkpoint_config, + storage_path=args.hpopt_save_dir.absolute() / "ray_results", + ) + + ray_trainer = TorchTrainer( + lambda config: train_model( + config, args, train_dset, val_dset, logger, output_transform, input_transforms + ), + scaling_config=scaling_config, + run_config=run_config, + ) + + match args.raytune_search_algorithm: + case "random": + search_alg = None + case "hyperopt": + if NO_HYPEROPT: + raise ImportError( + "HyperOptSearch requires hyperopt to be installed. Use 'pip -U install hyperopt' to install." + ) + + search_alg = HyperOptSearch( + n_initial_points=args.hyperopt_n_initial_points, + random_state_seed=args.hyperopt_random_state_seed, + ) + # case "optuna": + # if NO_OPTUNA: + # raise ImportError( + # "OptunaSearch requires optuna to be installed. Use 'pip -U install optuna' to install." + # ) + + # search_alg = OptunaSearch() + + tune_config = tune.TuneConfig( + metric="val_loss", + mode=monitor_mode, + num_samples=args.raytune_num_samples, + scheduler=scheduler, + search_alg=search_alg, + ) + + tuner = tune.Tuner( + ray_trainer, + param_space={ + "train_loop_config": build_search_space(args.search_parameter_keywords, args.epochs) + }, + tune_config=tune_config, + ) + + return tuner.fit() + + +def main(args: Namespace): + if NO_RAY: + raise ImportError( + "Ray Tune requires ray to be installed. Use 'pip -U install ray[tune]' to install." + ) + + format_kwargs = dict( + no_header_row=args.no_header_row, + smiles_cols=args.smiles_columns, + rxn_cols=args.reaction_columns, + target_cols=args.target_columns, + ignore_cols=args.ignore_columns, + splits_col=args.splits_column, + weight_col=args.weight_column, + bounded=args.loss_function is not None and "bounded" in args.loss_function, + ) + featurization_kwargs = dict( + features_generators=args.features_generators, keep_h=args.keep_h, add_h=args.add_h + ) + + train_data, val_data, test_data = build_splits(args, format_kwargs, featurization_kwargs) + train_dset, val_dset, test_dset = build_datasets(args, train_data[0], val_data[0], test_data[0]) + + input_transforms = normalize_inputs(train_dset, val_dset, args) + + if "regression" in args.task_type: + output_scaler = train_dset.normalize_targets() + val_dset.normalize_targets(output_scaler) + logger.info(f"Train data: mean = {output_scaler.mean_} | std = {output_scaler.scale_}") + output_transform = UnscaleTransform.from_standard_scaler(output_scaler) + else: + output_transform = None + + train_loader = build_dataloader( + train_dset, args.batch_size, args.num_workers, seed=args.data_seed + ) + + model = build_model(args, train_loader.dataset, output_transform, input_transforms) + monitor_mode = "min" if model.metrics[0].minimize else "max" + + results = tune_model( + args, train_dset, val_dset, logger, monitor_mode, output_transform, input_transforms + ) + + best_result = results.get_best_result() + best_config = best_result.config + best_checkpoint = best_result.checkpoint # Get best trial's best checkpoint + + logger.info(f"Saving best hyperparameter parameters: {best_config}") + + with open(args.hpopt_save_dir / "best_params.json", "w") as f: + json.dump(best_config, f, indent=4) + + logger.info(f"Saving best hyperparameter configuration checkpoint: {best_checkpoint}") + + torch.save(best_checkpoint, args.hpopt_save_dir / "best_checkpoint.ckpt") + + result_df = results.get_dataframe() + + logger.info(f"Saving hyperparameter optimization results: {result_df}") + + result_df.to_csv(args.hpopt_save_dir / "all_progress.csv", index=False) + + +if __name__ == "__main__": + parser = ArgumentParser() + parser = HpoptSubcommand.add_args(parser) + + logging.basicConfig(stream=sys.stdout, level=logging.DEBUG, force=True) + args = parser.parse_args() + HpoptSubcommand.func(args) diff --git a/chemprop/cli/main.py b/chemprop/cli/main.py new file mode 100644 index 000000000..ec78cda77 --- /dev/null +++ b/chemprop/cli/main.py @@ -0,0 +1,80 @@ +from configargparse import ArgumentParser +import logging +import sys +from pathlib import Path + +from chemprop.cli.train import TrainSubcommand +from chemprop.cli.predict import PredictSubcommand +from chemprop.cli.convert import ConvertSubcommand +from chemprop.cli.fingerprint import FingerprintSubcommand +from chemprop.cli.hpopt import HpoptSubcommand + +from chemprop.cli.utils import pop_attr +from chemprop.cli.conf import LOG_DIR, LOG_LEVELS, NOW + +logger = logging.getLogger(__name__) + +SUBCOMMANDS = [ + TrainSubcommand, + PredictSubcommand, + ConvertSubcommand, + FingerprintSubcommand, + HpoptSubcommand, +] + + +def construct_parser(): + parser = ArgumentParser() + subparsers = parser.add_subparsers(title="mode", dest="mode", required=True) + + parent = ArgumentParser(add_help=False) + parent.add_argument( + "--logfile", + "--log", + nargs="?", + const="default", + help=f"The path to which the log file should be written. Specifying just the flag (i.e., '--log/--logfile') will automatically log to a file '{LOG_DIR}/MODE/TIMESTAMP.log', where 'MODE' is the CLI mode chosen. An example 'TIMESTAMP' is {NOW}.", + ) + parent.add_argument( + "-v", + "--verbose", + action="count", + default=0, + help="The verbosity level, specify the flag multiple times to increase verbosity.", + ) + + parents = [parent] + for subcommand in SUBCOMMANDS: + subcommand.add(subparsers, parents) + + return parser + + +def main(): + parser = construct_parser() + args = parser.parse_args() + logfile, verbose, mode, func = ( + pop_attr(args, attr) for attr in ["logfile", "verbose", "mode", "func"] + ) + + match logfile: + case None: + handler = logging.StreamHandler(sys.stderr) + case "default": + (LOG_DIR / mode).mkdir(parents=True, exist_ok=True) + handler = logging.FileHandler(str(LOG_DIR / mode / f"{NOW}.log")) + case _: + Path(logfile).parent.mkdir(parents=True, exist_ok=True) + handler = logging.FileHandler(logfile) + + logging.basicConfig( + handlers=[handler], + format="%(asctime)s - %(levelname)s:%(name)s - %(message)s", + level=LOG_LEVELS[min(verbose, len(LOG_LEVELS) - 1)], + datefmt="%Y-%m-%dT%H:%M:%S", + force=True, + ) + + logger.info(f"Running in mode '{mode}' with args: {vars(args)}") + + func(args) diff --git a/chemprop/cli/predict.py b/chemprop/cli/predict.py new file mode 100644 index 000000000..e80170212 --- /dev/null +++ b/chemprop/cli/predict.py @@ -0,0 +1,315 @@ +from argparse import ArgumentError, ArgumentParser, Namespace +import logging +from pathlib import Path +import sys +import pandas as pd + +from lightning import pytorch as pl +import torch + +from chemprop import data +from chemprop.nn.loss import LossFunctionRegistry +from chemprop.nn.predictors import MulticlassClassificationFFN +from chemprop.models import load_model + +from chemprop.cli.utils import Subcommand, build_data_from_files, make_dataset +from chemprop.cli.common import add_common_args, process_common_args, validate_common_args + + +logger = logging.getLogger(__name__) + + +class PredictSubcommand(Subcommand): + COMMAND = "predict" + HELP = "use a pretrained chemprop model for prediction" + + @classmethod + def add_args(cls, parser: ArgumentParser) -> ArgumentParser: + parser = add_common_args(parser) + return add_predict_args(parser) + + @classmethod + def func(cls, args: Namespace): + args = process_common_args(args) + validate_common_args(args) + args = process_predict_args(args) + main(args) + + +def add_predict_args(parser: ArgumentParser) -> ArgumentParser: + parser.add_argument( + "-i", + "--test-path", + required=True, + type=Path, + help="Path to an input CSV file containing SMILES.", + ) + parser.add_argument( + "-o", + "--output", + "--preds-path", + type=Path, + help="Path to which predictions will be saved. If the file extension is .pkl, will be saved as a pickle file. Otherwise, will save predictions as a CSV. The index of the model will be appended to the filename's stem. By default, predictions will be saved to the same location as '--test-path' with '_preds' appended, i.e., 'PATH/TO/TEST_PATH_preds_0.csv'.", + ) + parser.add_argument( + "--drop-extra-columns", + action="store_true", + help="Whether to drop all columns from the test data file besides the SMILES columns and the new prediction columns.", + ) + parser.add_argument( + "--model-path", + required=True, + type=Path, + help="Path to either a single pretrained model checkpoint (.ckpt) or single pretrained model file (.pt) or to a directory that contains these files. If a directory, will recursively search and predict on all found models.", + ) + parser.add_argument( + "--target-columns", + nargs="+", + help="Column names to save the predictions to. If not provided, the predictions will be saved to columns named 'pred_0', 'pred_1', etc.", + ) + + # TODO: add uncertainty and calibration in v2.1 + # unc_args = parser.add_argument_group("Uncertainty and calibration args") + # unc_args.add_argument("--cal-path") + # unc_args.add_argument("--cal-features-path") + # unc_args.add_argument("--cal-atom-features-path") + # unc_args.add_argument("--cal-bond-features-path") + # unc_args.add_argument("--cal-atom-descriptors-path") + # unc_args.add_argument( + # "--ensemble-variance", + # type=None, + # help="Deprecated. Whether to calculate the variance of ensembles as a measure of epistemic uncertainty. If True, the variance is saved as an additional column for each target in the preds_path.", + # ) + # unc_args.add_argument( + # "--individual-ensemble-predictions", + # type=bool, + # action="store_true", + # help="Whether to return the predictions made by each of the individual models rather than the average of the ensemble.", + # ) + # unc_args.add_argument( + # "--uncertainty-method", + # #action=RegistryAction(TODO: make register for uncertainty methods) + # help="The method of calculating uncertainty.", + # ) + # unc_args.add_argument( + # "--calibration-method", + # #action=RegistryAction(TODO: make register for calibration methods) + # help="Methods used for calibrating the uncertainty calculated with uncertainty method.", + # ) + # unc_args.add_argument( + # "--evaluation-method", + # #action=RegistryAction(TODO: make register for evaluation methods) + # type=list[str], + # help="The methods used for evaluating the uncertainty performance if the test data provided includes targets. Available methods are [nll, miscalibration_area, ence, spearman] or any available classification or multiclass metric.", + # ) + # unc_args.add_argument( + # "--evaluation-scores-path", + # help="Location to save the results of uncertainty evaluations.", + # ) + # unc_args.add_argument( + # "--uncertainty-dropout-p", + # type=float, + # default=0.1, + # help="The probability to use for Monte Carlo dropout uncertainty estimation.", + # ) + # unc_args.add_argument( + # "--dropout-sampling-size", + # type=int, + # default=10, + # help="The number of samples to use for Monte Carlo dropout uncertainty estimation. Distinct from the dropout used during training.", + # ) + # unc_args.add_argument( + # "--calibration-interval-percentile", + # type=float, + # default=95, + # help="Sets the percentile used in the calibration methods. Must be in the range (1,100).", + # ) + # unc_args.add_argument( + # "--regression-calibrator-metric", + # choices=['stdev', 'interval'], + # help="Regression calibrators can output either a stdev or an inverval.", + # ) + # unc_args.add_argument( + # "--calibrationipath", + # help="Path to data file to be used for uncertainty calibration.", + # ) + # unc_args.add_argument( + # "--calibration-features-path", + # type=list[str], + # help="Path to features data to be used with the uncertainty calibration dataset.", + # ) + # unc_args.add_argument( + # "--calibration-phase-features-path", + # help=" ", + # ) + # unc_args.add_argument( + # "--calibration-atom-descriptors-path", + # help="Path to the extra atom descriptors.", + # ) + # unc_args.add_argument( + # "--calibration-bond-descriptors-path", + # help="Path to the extra bond descriptors that will be used as bond features to featurize a given molecule.", + # ) + + return parser + + +def process_predict_args(args: Namespace) -> Namespace: + if args.test_path.suffix not in [".csv"]: + raise ArgumentError( + argument=None, message=f"Input data must be a CSV file. Got {args.test_path}" + ) + if args.output is None: + args.output = args.test_path.parent / (args.test_path.stem + "_preds.csv") + if args.output.suffix not in [".csv", ".pkl"]: + raise ArgumentError( + argument=None, message=f"Output must be a CSV or Pickle file. Got {args.output}" + ) + return args + + +def find_models(model_path: Path): + if model_path.suffix in [".ckpt", ".pt"]: + return [model_path] + elif model_path.is_dir(): + return list(model_path.rglob("*.ckpt")) + list(model_path.rglob("*.pt")) + + +def make_prediction_for_model( + args: Namespace, model_path: Path, multicomponent: bool, output_path: Path +): + model = load_model(model_path, multicomponent) + + bounded = any( + isinstance(model.criterion, LossFunctionRegistry[loss_function]) + for loss_function in LossFunctionRegistry.keys() + if "bounded" in loss_function + ) + + format_kwargs = dict( + no_header_row=args.no_header_row, + smiles_cols=args.smiles_columns, + rxn_cols=args.reaction_columns, + target_cols=None, + ignore_cols=None, + splits_col=None, + weight_col=None, + bounded=bounded, + ) + featurization_kwargs = dict( + features_generators=args.features_generators, keep_h=args.keep_h, add_h=args.add_h + ) + + test_data = build_data_from_files( + args.test_path, + **format_kwargs, + p_descriptors=args.descriptors_path, + p_atom_feats=args.atom_features_path, + p_bond_feats=args.bond_features_path, + p_atom_descs=args.atom_descriptors_path, + **featurization_kwargs, + ) + logger.info(f"test size: {len(test_data[0])}") + test_dsets = [ + make_dataset(d, args.rxn_mode, args.multi_hot_atom_featurizer_mode) for d in test_data + ] + + if multicomponent: + test_dset = data.MulticomponentDataset(test_dsets) + else: + test_dset = test_dsets[0] + + # TODO: add uncertainty and calibration + # if args.cal_path is not None: + # cal_data = build_data_from_files( + # args.cal_path, + # **format_kwargs, + # target_columns=args.target_columns, + # p_features=args.cal_features_path, + # p_atom_feats=args.cal_atom_features_path, + # p_bond_feats=args.cal_bond_features_path, + # p_atom_descs=args.cal_atom_descriptors_path, + # **featurization_kwargs, + # ) + # logger.info(f"calibration size: {len(cal_data)}") + # else: + # cal_data = None + + test_loader = data.build_dataloader(test_dset, args.batch_size, args.num_workers, shuffle=False) + # TODO: add uncertainty and calibration + # if cal_data is not None: + # cal_dset = make_dataset(cal_data, bond_messages, args.rxn_mode) + # cal_loader = data.build_dataloader(cal_dset, args.batch_size, args.num_workers, shuffle=False) + # else: + # cal_loader = None + + logger.info(model) + + trainer = pl.Trainer( + logger=False, enable_progress_bar=True, accelerator=args.accelerator, devices=args.devices + ) + + predss = trainer.predict(model, test_loader) + + # TODO: add uncertainty and calibration + # if cal_dset is not None: + # if args.task_type == "regression": + # model.loc, model.scale = float(scaler.mean_), float(scaler.scale_) + # predss_cal = trainer.predict(model, cal_loader)[0] + + # TODO: might want to write a shared function for this as train.py might also want to do this. + df_test = pd.read_csv(args.test_path) + preds = torch.concat(predss, 0) + + if isinstance(model.predictor, MulticlassClassificationFFN): + preds = torch.argmax(preds, dim=-1) + + if args.target_columns is not None: + assert ( + len(args.target_columns) == model.n_tasks + ), "Number of target columns must match the number of tasks." + target_columns = args.target_columns + else: + target_columns = [ + f"pred_{i}" for i in range(preds.shape[1]) + ] # TODO: need to improve this for cases like multi-task MVE and multi-task multiclass + + df_test[target_columns] = preds + if output_path.suffix == ".pkl": + df_test = df_test.reset_index(drop=True) + df_test.to_pickle(output_path) + else: + df_test.to_csv(output_path, index=False) + logger.info(f"Predictions saved to '{output_path}'") + + +def main(args): + match (args.smiles_columns, args.reaction_columns): + case [None, None]: + n_components = 1 + case [_, None]: + n_components = len(args.smiles_columns) + case [None, _]: + n_components = len(args.reaction_columns) + case _: + n_components = len(args.smiles_columns) + len(args.reaction_columns) + + multicomponent = n_components > 1 + + model_paths = find_models(args.model_path) + + for i, model_path in enumerate(model_paths): + logger.info(f"Predicting with model at '{model_path}'") + output_path = args.output.parent / Path( + str(args.output.stem) + f"_{i}" + str(args.output.suffix) + ) + make_prediction_for_model(args, model_path, multicomponent, output_path) + + +if __name__ == "__main__": + parser = ArgumentParser() + parser = PredictSubcommand.add_args(parser) + + logging.basicConfig(stream=sys.stdout, level=logging.DEBUG, force=True) + args = parser.parse_args() + args = PredictSubcommand.func(args) diff --git a/chemprop/cli/train.py b/chemprop/cli/train.py new file mode 100644 index 000000000..383d1d342 --- /dev/null +++ b/chemprop/cli/train.py @@ -0,0 +1,1006 @@ +from configargparse import ArgumentParser, Namespace, ArgumentError +import logging +from pathlib import Path +import sys +from copy import deepcopy +import pandas as pd +import json +import numpy as np + +from lightning import pytorch as pl +from lightning.pytorch.loggers import TensorBoardLogger, CSVLogger +from lightning.pytorch.callbacks import ModelCheckpoint, EarlyStopping +import torch +import torch.nn as nn + +from chemprop.data import ( + build_dataloader, + MolGraphDataset, + MulticomponentDataset, + MoleculeDataset, + ReactionDatapoint, +) +from chemprop.data import SplitType, make_split_indices, split_data_by_indices +from chemprop.utils import Factory +from chemprop.models import MPNN, MulticomponentMPNN, save_model +from chemprop.nn.transforms import GraphTransform, ScaleTransform, UnscaleTransform +from chemprop.nn import AggregationRegistry, LossFunctionRegistry, MetricRegistry, PredictorRegistry +from chemprop.nn.message_passing import ( + BondMessagePassing, + AtomMessagePassing, + MulticomponentMessagePassing, +) +from chemprop.nn.utils import Activation + +from chemprop.cli.common import add_common_args, process_common_args, validate_common_args +from chemprop.cli.conf import NOW +from chemprop.cli.utils import ( + Subcommand, + LookupAction, + build_data_from_files, + make_dataset, + get_column_names, + parse_indices, +) +from chemprop.cli.utils.args import uppercase +from chemprop.featurizers import MoleculeFeaturizerRegistry + +logger = logging.getLogger(__name__) + + +class TrainSubcommand(Subcommand): + COMMAND = "train" + HELP = "train a chemprop model" + parser = None + + @classmethod + def add_args(cls, parser: ArgumentParser) -> ArgumentParser: + parser = add_common_args(parser) + parser = add_train_args(parser) + cls.parser = parser + return parser + + @classmethod + def func(cls, args: Namespace): + args = process_common_args(args) + validate_common_args(args) + args = process_train_args(args) + validate_train_args(args) + + args.output_dir.mkdir(exist_ok=True, parents=True) + save_config(cls.parser, args) + main(args) + + +def add_train_args(parser: ArgumentParser) -> ArgumentParser: + parser.add_argument( + "--config-path", + type=Path, + is_config_file=True, + help="Path to a configuration file. Command line arguments override values in the configuration file.", + ) + parser.add_argument( + "-i", + "--data-path", + type=Path, + help="Path to an input CSV file containing SMILES and the associated target values.", + ) + parser.add_argument( + "-o", + "--output-dir", + "--save-dir", + type=Path, + help="Directory where training outputs will be saved. Defaults to 'CURRENT_DIRECTORY/chemprop_training/STEM_OF_INPUT/TIME_STAMP'.", + ) + + # TODO: Add in v2.1 + # parser.add_argument( + # "--checkpoint-dir", + # help="Directory from which to load model checkpoints (walks directory and ensembles all models that are found).", + # ) + # parser.add_argument("--checkpoint-path", help="Path to model checkpoint (:code:`.pt` file).") + # parser.add_argument( + # "--checkpoint-paths", + # type=list[str], + # help="List of paths to model checkpoints (:code:`.pt` files).", + # ) + # # TODO: Is this a prediction only argument? + # parser.add_argument( + # "--checkpoint", + # help="Location of checkpoint(s) to use for ... If the location is a directory, chemprop walks it and ensembles all models that are found. If the location is a path or list of paths to model checkpoints (:code:`.pt` files), only those models will be loaded.", + # ) + + # TODO: Add in v2.1; see if we can tell lightning how often to log training loss + # parser.add_argument( + # "--log-frequency", + # type=int, + # default=10, + # help="The number of batches between each logging of the training loss.", + # ) + + transfer_args = parser.add_argument_group("transfer learning args") + transfer_args.add_argument( + "--model-frzn", + help="Path to model checkpoint file to be loaded for overwriting and freezing weights.", + ) + transfer_args.add_argument( + "--frzn-ffn-layers", + type=int, + default=0, + help="Overwrites weights for the first n layers of the ffn from checkpoint model (specified checkpoint_frzn), where n is specified in the input. Automatically also freezes mpnn weights.", + ) + # transfer_args.add_argument( + # "--freeze-first-only", + # action="store_true", + # help="Determines whether or not to use checkpoint_frzn for just the first encoder. Default (False) is to use the checkpoint to freeze all encoders. (only relevant for number_of_molecules > 1, where checkpoint model has number_of_molecules = 1)", + # ) + + # TODO: Add in v2.1 + # parser.add_argument( + # "--resume-experiment", + # action="store_true", + # help="Whether to resume the experiment. Loads test results from any folds that have already been completed and skips training those folds.", + # ) + # parser.add_argument( + # "--config-path", + # help="Path to a :code:`.json` file containing arguments. Any arguments present in the config file will override arguments specified via the command line or by the defaults.", + # ) + parser.add_argument( + "--ensemble-size", + type=int, + default=1, + help="Number of models in ensemble for each splitting of data.", + ) + + # TODO: Add in v2.2 + # abt_args = parser.add_argument_group("atom/bond target args") + # abt_args.add_argument( + # "--is-atom-bond-targets", + # action="store_true", + # help="Whether this is atomic/bond properties prediction.", + # ) + # abt_args.add_argument( + # "--no-adding-bond-types", + # action="store_true", + # help="Whether the bond types determined by RDKit molecules added to the output of bond targets. This option is intended to be used with the :code:`is_atom_bond_targets`.", + # ) + # abt_args.add_argument( + # "--keeping-atom-map", + # action="store_true", + # help="Whether RDKit molecules keep the original atom mapping. This option is intended to be used when providing atom-mapped SMILES with the :code:`is_atom_bond_targets`.", + # ) + # abt_args.add_argument( + # "--no-shared-atom-bond-ffn", + # action="store_true", + # help="Whether the FFN weights for atom and bond targets should be independent between tasks.", + # ) + # abt_args.add_argument( + # "--weights-ffn-num-layers", + # type=int, + # default=2, + # help="Number of layers in FFN for determining weights used in constrained targets.", + # ) + + mp_args = parser.add_argument_group("message passing") + mp_args.add_argument( + "--message-hidden-dim", type=int, default=300, help="hidden dimension of the messages" + ) + mp_args.add_argument( + "--message-bias", action="store_true", help="add bias to the message passing layers" + ) + mp_args.add_argument("--depth", type=int, default=3, help="Number of message passing steps.") + mp_args.add_argument( + "--undirected", + action="store_true", + help="Pass messages on undirected bonds/edges (always sum the two relevant bond vectors).", + ) + mp_args.add_argument( + "--dropout", + type=float, + default=0.0, + help="dropout probability in message passing/FFN layers", + ) + mp_args.add_argument( + "--mpn-shared", + action="store_true", + help="Whether to use the same message passing neural network for all input molecules. Only relevant if :code:`number_of_molecules > 1`", + ) + mp_args.add_argument( + "--activation", + type=uppercase, + default="RELU", + choices=list(Activation.keys()), + help="activation function in message passing/FFN layers", + ) + mp_args.add_argument( + "--aggregation", + "--agg", + default="mean", + action=LookupAction(AggregationRegistry), + help="the aggregation mode to use during graph predictor", + ) + mp_args.add_argument( + "--aggregation-norm", + type=float, + default=100, + help="normalization factor by which to divide summed up atomic features for 'norm' aggregation", + ) + mp_args.add_argument( + "--atom-messages", action="store_true", help="pass messages on atoms rather than bonds" + ) + + # TODO: Add in v2.1 + # mpsolv_args = parser.add_argument_group("message passing with solvent") + # mpsolv_args.add_argument( + # "--reaction-solvent", + # action="store_true", + # help="Whether to adjust the MPNN layer to take as input a reaction and a molecule, and to encode them with separate MPNNs.", + # ) + # mpsolv_args.add_argument( + # "--bias-solvent", + # action="store_true", + # help="Whether to add bias to linear layers for solvent MPN if :code:`reaction_solvent` is True.", + # ) + # mpsolv_args.add_argument( + # "--hidden-size-solvent", + # type=int, + # default=300, + # help="Dimensionality of hidden layers in solvent MPN if :code:`reaction_solvent` is True.", + # ) + # mpsolv_args.add_argument( + # "--depth-solvent", + # type=int, + # default=3, + # help="Number of message passing steps for solvent if :code:`reaction_solvent` is True.", + # ) + + ffn_args = parser.add_argument_group("FFN args") + ffn_args.add_argument( + "--ffn-hidden-dim", type=int, default=300, help="hidden dimension in the FFN top model" + ) + ffn_args.add_argument( # TODO: the default in v1 was 2. (see weights_ffn_num_layers option) Do we really want the default to now be 1? + "--ffn-num-layers", type=int, default=1, help="number of layers in FFN top model" + ) + # TODO: Decide if we want to implment this in v2 + # ffn_args.add_argument( + # "--features-only", + # action="store_true", + # help="Use only the additional features in an FFN, no graph network.", + # ) + + extra_mpnn_args = parser.add_argument_group("extra MPNN args") + extra_mpnn_args.add_argument( + "--no-batch-norm", + action="store_true", + help="Don't use batch normalization after aggregation.", + ) + extra_mpnn_args.add_argument( + "--multiclass-num-classes", + type=int, + default=3, + help="Number of classes when running multiclass classification.", + ) + # TODO: Add in v2.1 + # extra_mpnn_args.add_argument( + # "--spectral-activation", + # default="exp", + # choices=["softplus", "exp"], + # help="Indicates which function to use in task_type spectra training to constrain outputs to be positive.", + # ) + + train_data_args = parser.add_argument_group("training input data args") + train_data_args.add_argument( + "-w", + "--weight-column", + help="the name of the column in the input CSV containg individual data weights", + ) + train_data_args.add_argument( + "--target-columns", + nargs="+", + help="Name of the columns containing target values. By default, uses all columns except the SMILES column and the :code:`ignore_columns`.", + ) + train_data_args.add_argument( + "--ignore-columns", + nargs="+", + help="Name of the columns to ignore when :code:`target_columns` is not provided.", + ) + # TODO: Add in v2.1 + # train_data_args.add_argument( + # "--spectra-phase-mask-path", + # help="Path to a file containing a phase mask array, used for excluding particular regions in spectra predictions.", + # ) + + train_args = parser.add_argument_group("training args") + train_args.add_argument( + "-t", + "--task-type", + default="regression", + action=LookupAction(PredictorRegistry), + help="Type of dataset. This determines the default loss function used during training. Defaults to regression.", + ) + train_args.add_argument( + "-l", + "--loss-function", + action=LookupAction(LossFunctionRegistry), + help="Loss function to use during training. If not specified, will use the default loss function for the given task type (see documentation).", + ) + train_args.add_argument( + "--v-kl", + "--evidential-regularization", + type=float, + default=0.0, + help="Value used in regularization for evidential loss function. The default value recommended by Soleimany et al.(2021) is 0.2. Optimal value is dataset-dependent; it is recommended that users test different values to find the best value for their model.", + ) + + train_args.add_argument( + "--eps", type=float, default=1e-8, help="evidential regularization epsilon" + ) + # TODO: Add in v2.1 + # train_args.add_argument( # TODO: Is threshold the same thing as the spectra target floor? I'm not sure but combined them. + # "-T", + # "--threshold", + # "--spectra-target-floor", + # type=float, + # default=1e-8, + # help="spectral threshold limit. v1 help string: Values in targets for dataset type spectra are replaced with this value, intended to be a small positive number used to enforce positive values.", + # ) + train_args.add_argument( + "--metrics", + "--metric", + nargs="+", + action=LookupAction(MetricRegistry), + help="evaluation metrics. If unspecified, will use the following metrics for given dataset types: regression->rmse, classification->roc, multiclass->ce ('cross entropy'), spectral->sid. If multiple metrics are provided, the 0th one will be used for early stopping and checkpointing", + ) + # TODO: Add in v2.1 + # train_args.add_argument( + # "--show-individual-scores", + # action="store_true", + # help="Show all scores for individual targets, not just average, at the end.", + # ) + train_args.add_argument( + "--task-weights", + nargs="+", + type=float, + help="the weight to apply to an individual task in the overall loss", + ) + train_args.add_argument( + "--warmup-epochs", + type=int, + default=2, + help="Number of epochs during which learning rate increases linearly from :code:`init_lr` to :code:`max_lr`. Afterwards, learning rate decreases exponentially from :code:`max_lr` to :code:`final_lr`.", + ) + + train_args.add_argument("--init-lr", type=float, default=1e-4, help="Initial learning rate.") + train_args.add_argument("--max-lr", type=float, default=1e-3, help="Maximum learning rate.") + train_args.add_argument("--final-lr", type=float, default=1e-4, help="Final learning rate.") + train_args.add_argument( + "--epochs", type=int, default=50, help="the number of epochs to train over" + ) + train_args.add_argument( + "--patience", + type=int, + default=None, + help="Number of epochs to wait for improvement before early stopping.", + ) + train_args.add_argument( + "--grad-clip", + type=float, + help="Passed directly to the lightning trainer which controls grad clipping. See the :code:`Trainer()` docstring for details.", + ) + # TODO: Add in v2.1 + # train_args.add_argument( + # "--class-balance", + # action="store_true", + # help="Trains with an equal number of positives and negatives in each batch.", + # ) + + split_args = parser.add_argument_group("split args") + split_args.add_argument( + "--split", + "--split-type", + type=uppercase, + default="RANDOM", + choices=list(SplitType.keys()), + help="Method of splitting the data into train/val/test (case insensitive).", + ) + split_args.add_argument( + "--split-sizes", + type=float, + nargs=3, + default=[0.8, 0.1, 0.1], + help="Split proportions for train/validation/test sets.", + ) + split_args.add_argument( + "--split-key-molecule", + type=int, + default=0, + help="The index of the key molecule used for splitting when multiple molecules are present and constrained split_type is used (e.g., 'scaffold_balanced' or 'random_with_repeated_smiles'). Note that this index begins with zero for the first molecule.", + ) + split_args.add_argument( + "-k", + "--num-folds", + type=int, + default=1, + help="Number of folds when performing cross validation.", + ) + split_args.add_argument( + "--save-smiles-splits", + action="store_true", + help="Save smiles for each train/val/test splits for prediction convenience later.", + ) + split_args.add_argument( + "--splits-file", + type=Path, + help="Path to a JSON file containing pre-defined splits for the input data, formatted as a list of dictionaries with keys 'train', 'val', and 'test' and values as lists of indices or strings formatted like '0-2,4'. See documentation for more details.", + ) + train_data_args.add_argument( + "--splits-column", + help="Name of the column in the input CSV file containing 'train', 'val', or 'test' for each row.", + ) + split_args.add_argument( + "--data-seed", + type=int, + default=0, + help="Random seed to use when splitting data into train/val/test sets. When :code`num_folds > 1`, the first fold uses this seed and all subsequent folds add 1 to the seed. Also used for shuffling data in :code:`build_dataloader` when :code:`shuffle` is True.", + ) + + parser.add_argument( + "--pytorch-seed", + type=int, + default=None, + help="Seed for PyTorch randomness (e.g., random initial weights).", + ) + + return parser + + +def process_train_args(args: Namespace) -> Namespace: + if args.config_path is None and args.data_path is None: + raise ArgumentError(argument=None, message="Data path must be provided for training.") + + if args.data_path.suffix not in [".csv"]: + raise ArgumentError( + argument=None, message=f"Input data must be a CSV file. Got {args.data_path}" + ) + if args.output_dir is None: + args.output_dir = Path(f"chemprop_training/{args.data_path.stem}/{NOW}") + + return args + + +def validate_train_args(args): + pass + + +def normalize_inputs(train_dset, val_dset, args): + multicomponent = isinstance(train_dset, MulticomponentDataset) + num_components = train_dset.n_components if multicomponent else 1 + + X_d_transform = None + V_f_transforms = [nn.Identity()] * num_components + E_f_transforms = [nn.Identity()] * num_components + V_d_transforms = [None] * num_components + graph_transforms = [] + + d_xd = train_dset.d_xd + d_vf = train_dset.d_vf + d_ef = train_dset.d_ef + d_vd = train_dset.d_vd + + if d_xd > 0 and not args.no_descriptor_scaling: + scaler = train_dset.normalize_inputs("X_d") + val_dset.normalize_inputs("X_d", scaler) + + scaler = scaler if not isinstance(scaler, list) else scaler[0] + + if scaler is not None: + logger.info( + f"Descriptors: loc = {np.array2string(scaler.mean_, precision=3)}, scale = {np.array2string(scaler.scale_, precision=3)}" + ) + X_d_transform = ScaleTransform.from_standard_scaler(scaler) + + if d_vf > 0 and not args.no_atom_feature_scaling: + scaler = train_dset.normalize_inputs("V_f") + val_dset.normalize_inputs("V_f", scaler) + + scalers = [scaler] if not isinstance(scaler, list) else scaler + + for i, scaler in enumerate(scalers): + if scaler is None: + continue + + logger.info( + f"Atom features for mol {i}: loc = {np.array2string(scaler.mean_, precision=3)}, scale = {np.array2string(scaler.scale_, precision=3)}" + ) + featurizer = ( + train_dset.datasets[i].featurizer if multicomponent else train_dset.featurizer + ) + V_f_transforms[i] = ScaleTransform.from_standard_scaler( + scaler, pad=featurizer.atom_fdim - featurizer.extra_atom_fdim + ) + + if d_ef > 0 and not args.no_bond_feature_scaling: + scaler = train_dset.normalize_inputs("E_f") + val_dset.normalize_inputs("E_f", scaler) + + scalers = [scaler] if not isinstance(scaler, list) else scaler + + for i, scaler in enumerate(scalers): + if scaler is None: + continue + + logger.info( + f"Bond features for mol {i}: loc = {np.array2string(scaler.mean_, precision=3)}, scale = {np.array2string(scaler.scale_, precision=3)}" + ) + featurizer = ( + train_dset.datasets[i].featurizer if multicomponent else train_dset.featurizer + ) + E_f_transforms[i] = ScaleTransform.from_standard_scaler( + scaler, pad=featurizer.bond_fdim - featurizer.extra_bond_fdim + ) + + for V_f_transform, E_f_transform in zip(V_f_transforms, E_f_transforms): + graph_transforms.append(GraphTransform(V_f_transform, E_f_transform)) + + if d_vd > 0 and not args.no_atom_descriptor_scaling: + scaler = train_dset.normalize_inputs("V_d") + val_dset.normalize_inputs("V_d", scaler) + + scalers = [scaler] if not isinstance(scaler, list) else scaler + + for i, scaler in enumerate(scalers): + if scaler is None: + continue + + logger.info( + f"Atom descriptors for mol {i}: loc = {np.array2string(scaler.mean_, precision=3)}, scale = {np.array2string(scaler.scale_, precision=3)}" + ) + V_d_transforms[i] = ScaleTransform.from_standard_scaler(scaler) + + return X_d_transform, graph_transforms, V_d_transforms + + +def save_config(parser: ArgumentParser, args: Namespace): + config_args = deepcopy(args) + for key, value in vars(config_args).items(): + if isinstance(value, Path): + setattr(config_args, key, str(value)) + + for key in ["atom_features_path", "atom_descriptors_path", "bond_features_path"]: + if getattr(config_args, key) is not None: + for index, path in getattr(config_args, key).items(): + getattr(config_args, key)[index] = str(path) + + config_path = str(args.output_dir / "config.toml") + parser.write_config_file(parsed_namespace=config_args, output_file_paths=[config_path]) + + +def save_smiles_splits(args: Namespace, output_dir, train_dset, val_dset, test_dset): + train_smis = train_dset.smiles + df_train = pd.DataFrame(train_smis, columns=args.smiles_columns) + df_train.to_csv(output_dir / "train_smiles.csv", index=False) + + val_smis = val_dset.smiles + df_val = pd.DataFrame(val_smis, columns=args.smiles_columns) + df_val.to_csv(output_dir / "val_smiles.csv", index=False) + + if test_dset is not None: + test_smis = test_dset.smiles + df_test = pd.DataFrame(test_smis, columns=args.smiles_columns) + df_test.to_csv(output_dir / "test_smiles.csv", index=False) + + +def build_splits(args, format_kwargs, featurization_kwargs): + """build the train/val/test splits""" + logger.info(f"Pulling data from file: {args.data_path}") + all_data = build_data_from_files( + args.data_path, + p_descriptors=args.descriptors_path, + p_atom_feats=args.atom_features_path, + p_bond_feats=args.bond_features_path, + p_atom_descs=args.atom_descriptors_path, + **format_kwargs, + **featurization_kwargs, + ) + + if args.splits_column is not None: + df = pd.read_csv( + args.data_path, header=None if args.no_header_row else "infer", index_col=False + ) + grouped = df.groupby(df[args.splits_column].str.lower()) + train_indices = grouped.groups.get("train", pd.Index([])).tolist() + val_indices = grouped.groups.get("val", pd.Index([])).tolist() + test_indices = grouped.groups.get("test", pd.Index([])).tolist() + train_indices, val_indices, test_indices = [train_indices], [val_indices], [test_indices] + + elif args.splits_file is not None: + with open(args.splits_file, "rb") as json_file: + split_idxss = json.load(json_file) + train_indices = [parse_indices(d["train"]) for d in split_idxss] + val_indices = [parse_indices(d["val"]) for d in split_idxss] + test_indices = [parse_indices(d["test"]) for d in split_idxss] + + else: + splitting_data = all_data[args.split_key_molecule] + if isinstance(splitting_data[0], ReactionDatapoint): + splitting_mols = [datapoint.rct for datapoint in splitting_data] + else: + splitting_mols = [datapoint.mol for datapoint in splitting_data] + train_indices, val_indices, test_indices = make_split_indices( + splitting_mols, args.split, args.split_sizes, args.data_seed, args.num_folds + ) + if not ( + SplitType.get(args.split) == SplitType.CV_NO_VAL + or SplitType.get(args.split) == SplitType.CV + ): + train_indices, val_indices, test_indices = ( + [train_indices], + [val_indices], + [test_indices], + ) + + train_data, val_data, test_data = split_data_by_indices( + all_data, train_indices, val_indices, test_indices + ) + for i_split in range(len(train_data)): + sizes = [len(train_data[i_split][0]), len(val_data[i_split][0]), len(test_data[i_split][0])] + logger.info(f"train/val/test split_{i_split} sizes: {sizes}") + + return train_data, val_data, test_data + + +def build_datasets(args, train_data, val_data, test_data): + """build the train/val/test datasets, where :attr:`test_data` may be None""" + multicomponent = len(train_data) > 1 + if multicomponent: + train_dsets = [ + make_dataset(data, args.rxn_mode, args.multi_hot_atom_featurizer_mode) + for data in train_data + ] + val_dsets = [ + make_dataset(data, args.rxn_mode, args.multi_hot_atom_featurizer_mode) + for data in val_data + ] + train_dset = MulticomponentDataset(train_dsets) + val_dset = MulticomponentDataset(val_dsets) + if len(test_data[0]) > 0: + test_dsets = [ + make_dataset(data, args.rxn_mode, args.multi_hot_atom_featurizer_mode) + for data in test_data + ] + test_dset = MulticomponentDataset(test_dsets) + else: + test_dset = None + else: + train_data = train_data[0] + val_data = val_data[0] + test_data = test_data[0] + + train_dset = make_dataset(train_data, args.rxn_mode, args.multi_hot_atom_featurizer_mode) + val_dset = make_dataset(val_data, args.rxn_mode, args.multi_hot_atom_featurizer_mode) + if len(test_data) > 0: + test_dset = make_dataset(test_data, args.rxn_mode, args.multi_hot_atom_featurizer_mode) + else: + test_dset = None + + return train_dset, val_dset, test_dset + + +def build_model( + args, + train_dset: MolGraphDataset | MulticomponentDataset, + output_transform: UnscaleTransform, + input_transforms: tuple[ScaleTransform, list[GraphTransform], list[ScaleTransform]], +) -> MPNN: + mp_cls = AtomMessagePassing if args.atom_messages else BondMessagePassing + + X_d_transform, graph_transforms, V_d_transforms = input_transforms + + if isinstance(train_dset, MulticomponentDataset): + mp_blocks = [ + mp_cls( + train_dset.datasets[i].featurizer.atom_fdim, + train_dset.datasets[i].featurizer.bond_fdim, + d_h=args.message_hidden_dim, + d_vd=( + train_dset.datasets[i].d_vd + if isinstance(train_dset.datasets[i], MoleculeDataset) + else 0 + ), + bias=args.message_bias, + depth=args.depth, + undirected=args.undirected, + dropout=args.dropout, + activation=args.activation, + V_d_transform=V_d_transforms[i], + graph_transform=graph_transforms[i], + ) + for i in range(train_dset.n_components) + ] + if args.mpn_shared: + if args.reaction_columns is not None and args.smiles_columns is not None: + raise ArgumentError( + argument=None, + message="Cannot use shared MPNN with both molecule and reaction data.", + ) + + mp_block = MulticomponentMessagePassing(mp_blocks, train_dset.n_components, args.mpn_shared) + # NOTE(degraff): this if/else block should be handled by the init of MulticomponentMessagePassing + # if args.mpn_shared: + # mp_block = MulticomponentMessagePassing(mp_blocks[0], n_components, args.mpn_shared) + # else: + d_xd = train_dset.datasets[0].d_xd + n_tasks = train_dset.datasets[0].Y.shape[1] + mpnn_cls = MulticomponentMPNN + else: + mp_block = mp_cls( + train_dset.featurizer.atom_fdim, + train_dset.featurizer.bond_fdim, + d_h=args.message_hidden_dim, + d_vd=train_dset.d_vd if isinstance(train_dset, MoleculeDataset) else 0, + bias=args.message_bias, + depth=args.depth, + undirected=args.undirected, + dropout=args.dropout, + activation=args.activation, + V_d_transform=V_d_transforms[0], + graph_transform=graph_transforms[0], + ) + d_xd = train_dset.d_xd + n_tasks = train_dset.Y.shape[1] + mpnn_cls = MPNN + + agg = Factory.build(AggregationRegistry[args.aggregation], norm=args.aggregation_norm) + predictor_cls = PredictorRegistry[args.task_type] + if args.loss_function is not None: + criterion = Factory.build( + LossFunctionRegistry[args.loss_function], + task_weights=args.task_weights, + v_kl=args.v_kl, + # threshold=args.threshold, TODO: Add in v2.1 + eps=args.eps, + ) + else: + criterion = None + if args.metrics is not None: + metrics = [Factory.build(MetricRegistry[metric]) for metric in args.metrics] + else: + metrics = None + + predictor = Factory.build( + predictor_cls, + input_dim=mp_block.output_dim + d_xd, + n_tasks=n_tasks, + hidden_dim=args.ffn_hidden_dim, + n_layers=args.ffn_num_layers, + dropout=args.dropout, + activation=args.activation, + criterion=criterion, + n_classes=args.multiclass_num_classes, + output_transform=output_transform, + # spectral_activation=args.spectral_activation, TODO: Add in v2.1 + ) + + if args.loss_function is None: + logger.info( + f"No loss function was specified! Using class default: {predictor_cls._T_default_criterion}" + ) + + if args.model_frzn is not None: + model = mpnn_cls.load_from_file(args.model_frzn) + model.message_passing.apply(lambda module: module.requires_grad_(False)) + model.message_passing.apply( + lambda m: setattr(m, "p", 0.0) if isinstance(m, torch.nn.Dropout) else None + ) + model.bn.apply(lambda module: module.requires_grad_(False)) + for idx in range(args.frzn_ffn_layers): + model.predictor.ffn[idx].requires_grad_(False) + setattr(model.predictor.ffn[idx + 1][1], "p", 0.0) + + return model + + return mpnn_cls( + mp_block, + agg, + predictor, + not args.no_batch_norm, + metrics, + args.warmup_epochs, + args.init_lr, + args.max_lr, + args.final_lr, + X_d_transform=X_d_transform, + ) + + +def train_model( + args, train_loader, val_loader, test_loader, output_dir, output_transform, input_transforms +): + for model_idx in range(args.ensemble_size): + model_output_dir = output_dir / f"model_{model_idx}" + model_output_dir.mkdir(exist_ok=True, parents=True) + + if args.pytorch_seed is None: + seed = torch.seed() + deterministic = False + else: + seed = args.pytorch_seed + model_idx + deterministic = True + + torch.manual_seed(seed) + + model = build_model(args, train_loader.dataset, output_transform, input_transforms) + logger.info(model) + + monitor_mode = "min" if model.metrics[0].minimize else "max" + logger.debug(f"Evaluation metric: '{model.metrics[0].alias}', mode: '{monitor_mode}'") + + try: + trainer_logger = TensorBoardLogger(model_output_dir, "trainer_logs") + except ModuleNotFoundError: + trainer_logger = CSVLogger(model_output_dir, "trainer_logs") + + checkpointing = ModelCheckpoint( + model_output_dir / "checkpoints", + "best-{epoch}-{val_loss:.2f}", + "val_loss", + mode=monitor_mode, + save_last=True, + ) + + patience = args.patience if args.patience is not None else args.epochs + early_stopping = EarlyStopping("val_loss", patience=patience, mode=monitor_mode) + + trainer = pl.Trainer( + logger=trainer_logger, + enable_progress_bar=True, + accelerator=args.accelerator, + devices=args.devices, + max_epochs=args.epochs, + callbacks=[checkpointing, early_stopping], + gradient_clip_val=args.grad_clip, + deterministic=deterministic, + ) + trainer.fit(model, train_loader, val_loader) + + if test_loader is not None: + predss = trainer.predict(dataloaders=test_loader) + preds = torch.concat(predss, 0).numpy() + + if isinstance(test_loader.dataset, MulticomponentDataset): + test_dset = test_loader.dataset.datasets[0] + else: + test_dset = test_loader.dataset + targets = test_dset.Y + mask = torch.from_numpy(np.isfinite(targets)) + targets = np.nan_to_num(targets, nan=0.0) + weights = torch.from_numpy(test_dset.weights) + lt_mask = ( + torch.from_numpy(test_dset.lt_mask) if test_dset.lt_mask[0] is not None else None + ) + gt_mask = ( + torch.from_numpy(test_dset.gt_mask) if test_dset.gt_mask[0] is not None else None + ) + preds_losses = [ + metric( + torch.from_numpy(preds), + torch.from_numpy(targets), + mask, + weights, + lt_mask, + gt_mask, + ) + for metric in model.metrics + ] + preds_metrics = { + f"entire_test/{m.alias}": l.item() for m, l in zip(model.metrics, preds_losses) + } + print(f"Entire Test Set results: {preds_metrics}") + + columns = get_column_names( + args.data_path, + args.smiles_columns, + args.reaction_columns, + args.target_columns, + args.ignore_columns, + args.splits_column, + args.weight_column, + args.no_header_row, + ) + names = test_loader.dataset.names + if isinstance(test_loader.dataset, MulticomponentDataset): + namess = list(zip(*names)) + else: + namess = [names] + if "multiclass" in args.task_type: + df_preds = pd.DataFrame(list(zip(*namess, preds)), columns=columns) + else: + df_preds = pd.DataFrame(list(zip(*namess, *preds.T)), columns=columns) + df_preds.to_csv(model_output_dir / "test_predictions.csv", index=False) + + best_model_path = checkpointing.best_model_path + model = model.__class__.load_from_checkpoint(best_model_path) + p_model = model_output_dir / "best.pt" + save_model(p_model, model) + logger.info(f"Best model saved to '{p_model}'") + + +def main(args): + format_kwargs = dict( + no_header_row=args.no_header_row, + smiles_cols=args.smiles_columns, + rxn_cols=args.reaction_columns, + target_cols=args.target_columns, + ignore_cols=args.ignore_columns, + splits_col=args.splits_column, + weight_col=args.weight_column, + bounded=args.loss_function is not None and "bounded" in args.loss_function, + ) + if args.features_generators is not None: + # TODO: MorganFeaturizers take radius, length, and include_chirality as arguements. Should we expose these through the CLI? + features_generators = [ + Factory.build(MoleculeFeaturizerRegistry[features_generator]) + for features_generator in args.features_generators + ] + else: + features_generators = None + + featurization_kwargs = dict( + features_generators=features_generators, keep_h=args.keep_h, add_h=args.add_h + ) + + splits = build_splits(args, format_kwargs, featurization_kwargs) + + for fold_idx, (train_data, val_data, test_data) in enumerate(zip(*splits)): + if args.num_folds == 1: + output_dir = args.output_dir + else: + output_dir = args.output_dir / f"fold_{fold_idx}" + + output_dir.mkdir(exist_ok=True, parents=True) + + train_dset, val_dset, test_dset = build_datasets(args, train_data, val_data, test_data) + + input_transforms = normalize_inputs(train_dset, val_dset, args) + + if args.save_smiles_splits: + save_smiles_splits(args, output_dir, train_dset, val_dset, test_dset) + + if "regression" in args.task_type: + output_scaler = train_dset.normalize_targets() + val_dset.normalize_targets(output_scaler) + logger.info(f"Train data: mean = {output_scaler.mean_} | std = {output_scaler.scale_}") + output_transform = UnscaleTransform.from_standard_scaler(output_scaler) + else: + output_transform = None + + train_loader = build_dataloader( + train_dset, args.batch_size, args.num_workers, seed=args.data_seed + ) + val_loader = build_dataloader(val_dset, args.batch_size, args.num_workers, shuffle=False) + if test_dset is not None: + test_loader = build_dataloader( + test_dset, args.batch_size, args.num_workers, shuffle=False + ) + else: + test_loader = None + + train_model( + args, + train_loader, + val_loader, + test_loader, + output_dir, + output_transform, + input_transforms, + ) + + +if __name__ == "__main__": + # TODO: update this old code or remove it. + parser = ArgumentParser() + parser = TrainSubcommand.add_args(parser) + + logging.basicConfig(stream=sys.stdout, level=logging.DEBUG, force=True) + args = parser.parse_args() + TrainSubcommand.func(args) diff --git a/chemprop/cli/utils/__init__.py b/chemprop/cli/utils/__init__.py new file mode 100644 index 000000000..d37a575ee --- /dev/null +++ b/chemprop/cli/utils/__init__.py @@ -0,0 +1,31 @@ +from .args import bounded +from .actions import LookupAction +from .command import Subcommand +from .parsing import ( + build_data_from_files, + make_datapoints, + make_dataset, + get_column_names, + parse_indices, +) +from .utils import pop_attr, _pop_attr, _pop_attr_d, validate_loss_function + +__all__ = [ + "bounded", + "LookupAction", + "Subcommand", + "build_data_from_files", + "make_datapoints", + "make_dataset", + "get_column_names", + "parse_indices", + "actions", + "args", + "command", + "parsing", + "utils", + "pop_attr", + "_pop_attr", + "_pop_attr_d", + "validate_loss_function", +] diff --git a/chemprop/cli/utils/actions.py b/chemprop/cli/utils/actions.py new file mode 100644 index 000000000..9d45c3569 --- /dev/null +++ b/chemprop/cli/utils/actions.py @@ -0,0 +1,28 @@ +from argparse import Action, ArgumentParser, Namespace +from typing import Any, Mapping, Sequence + + +def LookupAction(obj: Mapping[str, Any]): + class LookupAction_(Action): + def __init__(self, option_strings, dest, default=None, choices=None, **kwargs): + if default not in obj.keys() and default is not None: + raise ValueError( + f"Invalid value for arg 'default': '{default}'. " + f"Expected one of {tuple(obj.keys())}" + ) + + kwargs["choices"] = choices if choices is not None else obj.keys() + kwargs["default"] = default + + super().__init__(option_strings, dest, **kwargs) + + def __call__( + self, + parser: ArgumentParser, + namespace: Namespace, + values: str | Sequence[Any] | None, + option_string: str | None = None, + ): + setattr(namespace, self.dest, values) + + return LookupAction_ diff --git a/chemprop/cli/utils/args.py b/chemprop/cli/utils/args.py new file mode 100644 index 000000000..50593a45a --- /dev/null +++ b/chemprop/cli/utils/args.py @@ -0,0 +1,34 @@ +import functools + +__all__ = ["bounded"] + + +def bounded(lo: float | None = None, hi: float | None = None): + if lo is None and hi is None: + raise ValueError("No bounds provided!") + + def decorator(f): + @functools.wraps(f) + def wrapper(*args, **kwargs): + x = f(*args, **kwargs) + + if (lo is not None and hi is not None) and not lo <= x <= hi: + raise ValueError(f"Parsed value outside of range [{lo}, {hi}]! got: {x}") + if hi is not None and x > hi: + raise ValueError(f"Parsed value below {hi}! got: {x}") + if lo is not None and x < lo: + raise ValueError(f"Parsed value above {lo}]! got: {x}") + + return x + + return wrapper + + return decorator + + +def uppercase(x: str): + return x.upper() + + +def lowercase(x: str): + return x.lower() diff --git a/chemprop/cli/utils/command.py b/chemprop/cli/utils/command.py new file mode 100644 index 000000000..4b4a7edd3 --- /dev/null +++ b/chemprop/cli/utils/command.py @@ -0,0 +1,24 @@ +from abc import ABC, abstractmethod +from argparse import ArgumentParser, _SubParsersAction, Namespace + + +class Subcommand(ABC): + COMMAND: str + HELP: str | None = None + + @classmethod + def add(cls, subparsers: _SubParsersAction, parents) -> ArgumentParser: + parser = subparsers.add_parser(cls.COMMAND, help=cls.HELP, parents=parents) + cls.add_args(parser).set_defaults(func=cls.func) + + return parser + + @classmethod + @abstractmethod + def add_args(cls, parser: ArgumentParser) -> ArgumentParser: + pass + + @classmethod + @abstractmethod + def func(cls, args: Namespace): + pass diff --git a/chemprop/cli/utils/parsing.py b/chemprop/cli/utils/parsing.py new file mode 100644 index 000000000..c6dae8241 --- /dev/null +++ b/chemprop/cli/utils/parsing.py @@ -0,0 +1,380 @@ +import logging +from os import PathLike +from typing import Mapping, Sequence + +import numpy as np +import pandas as pd +from rdkit.Chem import Mol + +from chemprop.data.datapoints import MoleculeDatapoint, ReactionDatapoint +from chemprop.data.datasets import MoleculeDataset, ReactionDataset +from chemprop.featurizers.base import VectorFeaturizer +from chemprop.featurizers.molgraph import ( + CondensedGraphOfReactionFeaturizer, + SimpleMoleculeMolGraphFeaturizer, +) +from chemprop.featurizers.atom import get_multi_hot_atom_featurizer + +logger = logging.getLogger(__name__) + + +def parse_csv( + path: PathLike, + smiles_cols: Sequence[str] | None, + rxn_cols: Sequence[str] | None, + target_cols: Sequence[str] | None, + ignore_cols: Sequence[str] | None, + splits_col: str | None, + weight_col: str | None, + bounded: bool = False, + no_header_row: bool = False, +): + df = pd.read_csv(path, header=None if no_header_row else "infer", index_col=False) + + if smiles_cols is not None and rxn_cols is not None: + smiss = df[smiles_cols].T.values.tolist() + rxnss = df[rxn_cols].T.values.tolist() + input_cols = [*smiles_cols, *rxn_cols] + elif smiles_cols is not None and rxn_cols is None: + smiss = df[smiles_cols].T.values.tolist() + rxnss = None + input_cols = smiles_cols + elif smiles_cols is None and rxn_cols is not None: + smiss = None + rxnss = df[rxn_cols].T.values.tolist() + input_cols = rxn_cols + else: + smiss = df.iloc[:, [0]].T.values.tolist() + rxnss = None + input_cols = [df.columns[0]] + + if target_cols is None: + target_cols = list( + set(df.columns) + - set(input_cols) + - set(ignore_cols or []) + - set(splits_col or []) + - set(weight_col or []) + ) + + Y = df[target_cols] + weights = None if weight_col is None else df[weight_col].to_numpy(np.single) + + if bounded: + lt_mask = Y.applymap(lambda x: "<" in x).to_numpy() + gt_mask = Y.applymap(lambda x: ">" in x).to_numpy() + Y = Y.applymap(lambda x: x.strip("<").strip(">")).to_numpy(np.single) + else: + Y = Y.to_numpy(np.single) + lt_mask = None + gt_mask = None + + return smiss, rxnss, Y, weights, lt_mask, gt_mask + + +def get_column_names( + path: PathLike, + smiles_cols: Sequence[str] | None, + rxn_cols: Sequence[str] | None, + target_cols: Sequence[str] | None, + ignore_cols: Sequence[str] | None, + splits_col: str | None, + weight_col: str | None, + no_header_row: bool = False, +): + df = pd.read_csv(path, header=None if no_header_row else "infer", index_col=False) + + if no_header_row: + return ["SMILES"] + ["pred_" + str(i) for i in range((len(df.columns) - 1))] + + input_cols = (smiles_cols or []) + (rxn_cols or []) + + if len(input_cols) == 0: + input_cols = [df.columns[0]] + + if target_cols is None: + target_cols = list( + set(df.columns) + - set(input_cols) + - set(ignore_cols or []) + - set(splits_col or []) + - set(weight_col or []) + ) + + return input_cols + target_cols + + +def make_datapoints( + smiss: list[list[str]] | None, + rxnss: list[list[str]] | None, + Y: np.ndarray, + weights: np.ndarray | None, + lt_mask: np.ndarray | None, + gt_mask: np.ndarray | None, + X_d: np.ndarray | None, + V_fss: list[list[np.ndarray] | list[None]] | None, + E_fss: list[list[np.ndarray] | list[None]] | None, + V_dss: list[list[np.ndarray] | list[None]] | None, + features_generators: list[VectorFeaturizer[Mol]] | None, + keep_h: bool, + add_h: bool, +) -> tuple[list[list[MoleculeDatapoint]], list[list[ReactionDatapoint]]]: + """Make the :class:`MoleculeDatapoint`s and :class:`ReactionDatapoint`s for a given + dataset. + + Parameters + ---------- + smiss : list[list[str]] | None + a list of ``j`` lists of ``n`` SMILES strings, where ``j`` is the number of molecules per + datapoint and ``n`` is the number of datapoints. If ``None``, the corresponding list of + :class:`MoleculeDatapoint`\s will be empty. + rxnss : list[list[str]] | None + a list of ``k`` lists of ``n`` reaction SMILES strings, where ``k`` is the number of + reactions per datapoint. If ``None``, the corresponding list of :class:`ReactionDatapoint`\s + will be empty. + Y : np.ndarray + the target values of shape ``n x m``, where ``m`` is the number of targets + weights : np.ndarray | None + the weights of the datapoints to use in the loss function of shape ``n x m``. If ``None``, + the weights all default to 1. + lt_mask : np.ndarray | None + a boolean mask of shape ``n x m`` indicating whether the targets are less than inequality + targets. If ``None``, ``lt_mask`` for all datapoints will be ``None``. + gt_mask : np.ndarray | None + a boolean mask of shape ``n x m`` indicating whether the targets are greater than inequality + targets. If ``None``, ``gt_mask`` for all datapoints will be ``None``. + X_d : np.ndarray | None + the extra descriptors of shape ``n x p``, where ``p`` is the number of extra descriptors. If + ``None``, ``x_d`` for all datapoints will be ``None``. + V_fss : list[list[np.ndarray] | list[None]] | None + a list of ``j`` lists of ``n`` np.ndarrays each of shape ``v_jn x q_j``, where ``v_jn`` is + the number of atoms in the j-th molecule of the n-th datapoint and ``q_j`` is the number of + extra atom features used for the j-th molecules. Any of the ``j`` lists can be a list of + None values if the corresponding component does not use extra atom features. If ``None``, + ``V_f`` for all datapoints will be ``None``. + E_fss : list[list[np.ndarray] | list[None]] | None + a list of ``j`` lists of ``n`` np.ndarrays each of shape ``e_jn x r_j``, where ``e_jn`` is + the number of bonds in the j-th molecule of the n-th datapoint and ``r_j`` is the number of + extra bond features used for the j-th molecules. Any of the ``j`` lists can be a list of + None values if the corresponding component does not use extra bond features. If ``None``, + ``E_f`` for all datapoints will be ``None``. + V_dss : list[list[np.ndarray] | list[None]] | None + a list of ``j`` lists of ``n`` np.ndarrays each of shape ``v_jn x s_j``, where ``s_j`` is + the number of extra atom descriptors used for the j-th molecules. Any of the ``j`` lists can + be a list of None values if the corresponding component does not use extra atom features. If + ``None``, ``V_d`` for all datapoints will be ``None``. + features_generators : list[MoleculeFeaturizer] | None + a list of :class:`MoleculeFeaturizer` instances to generate additional molecule features to + use as extra descriptors + keep_h : bool + add_h : bool + + Returns + ------- + list[list[MoleculeDatapoint]] + a list of ``j`` lists of ``n`` :class:`MoleculeDatapoint`\s + list[list[ReactionDatapoint]] + a list of ``k`` lists of ``n`` :class:`ReactionDatapoint`\s + .. note:: + either ``j`` or ``k`` may be 0, in which case the corresponding list will be empty. + + Raises + ------ + ValueError + if both ``smiss`` and ``rxnss`` are ``None``. + if ``smiss`` and ``rxnss`` are both given and have different lengths. + """ + if smiss is None and rxnss is None: + raise ValueError("args 'smiss' and 'rnxss' were both `None`!") + elif rxnss is None: + N = len(smiss[0]) + rxnss = [] + elif smiss is None: + N = len(rxnss[0]) + smiss = [] + elif len(smiss[0]) != len(rxnss[0]): + raise ValueError( + f"args 'smiss' and 'rxnss' must have same length! got {len(smiss[0])} and {len(rxnss[0])}" + ) + else: + N = len(smiss[0]) + + weights = np.ones(N, dtype=np.single) if weights is None else weights + gt_mask = [None] * N if gt_mask is None else gt_mask + lt_mask = [None] * N if lt_mask is None else lt_mask + + n_mols = len(smiss) if smiss else 0 + X_d = [None] * N if X_d is None else X_d + V_fss = [[None] * N] * n_mols if V_fss is None else V_fss + E_fss = [[None] * N] * n_mols if E_fss is None else E_fss + V_dss = [[None] * N] * n_mols if V_dss is None else V_dss + + mol_data = [ + [ + MoleculeDatapoint.from_smi( + smis[i], + keep_h=keep_h, + add_h=add_h, + y=Y[i], + weight=weights[i], + gt_mask=gt_mask[i], + lt_mask=lt_mask[i], + x_d=X_d[i], + mfs=features_generators, + x_phase=None, + V_f=V_fss[mol_idx][i], + E_f=E_fss[mol_idx][i], + V_d=V_dss[mol_idx][i], + ) + for i in range(N) + ] + for mol_idx, smis in enumerate(smiss) + ] + rxn_data = [ + [ + ReactionDatapoint.from_smi( + rxns[i], + keep_h=keep_h, + add_h=add_h, + y=Y[i], + weight=weights[i], + gt_mask=gt_mask[i], + lt_mask=lt_mask[i], + x_d=X_d[i], + mfs=features_generators, + x_phase=None, + ) + for i in range(N) + ] + for rxn_idx, rxns in enumerate(rxnss) + ] + + return mol_data, rxn_data + + +def build_data_from_files( + p_data: PathLike, + no_header_row: bool, + smiles_cols: Sequence[str] | None, + rxn_cols: Sequence[str] | None, + target_cols: Sequence[str] | None, + ignore_cols: Sequence[str] | None, + splits_col: str | None, + weight_col: str | None, + bounded: bool, + p_descriptors: PathLike, + p_atom_feats: dict[int, PathLike], + p_bond_feats: dict[int, PathLike], + p_atom_descs: dict[int, PathLike], + **featurization_kwargs: Mapping, +) -> list[list[MoleculeDatapoint] | list[ReactionDatapoint]]: + smiss, rxnss, Y, weights, lt_mask, gt_mask = parse_csv( + p_data, + smiles_cols, + rxn_cols, + target_cols, + ignore_cols, + splits_col, + weight_col, + bounded, + no_header_row, + ) + n_molecules = len(smiss) if smiss is not None else 0 + n_datapoints = len(Y) + + X_ds = load_input_feats_and_descs(p_descriptors, None, None, feat_desc="X_d") + V_fss = load_input_feats_and_descs(p_atom_feats, n_molecules, n_datapoints, feat_desc="V_f") + E_fss = load_input_feats_and_descs(p_bond_feats, n_molecules, n_datapoints, feat_desc="E_f") + V_dss = load_input_feats_and_descs(p_atom_descs, n_molecules, n_datapoints, feat_desc="V_d") + + mol_data, rxn_data = make_datapoints( + smiss, + rxnss, + Y, + weights, + lt_mask, + gt_mask, + X_ds, + V_fss, + E_fss, + V_dss, + **featurization_kwargs, + ) + + return mol_data + rxn_data + + +def load_input_feats_and_descs( + paths: dict[int, PathLike] | PathLike, + n_molecules: int | None, + n_datapoints: int | None, + feat_desc: str, +): + if paths is None: + return None + + match feat_desc: + case "X_d": + path = paths + loaded_feature = np.load(path) + features = loaded_feature["arr_0"] + + case _: + for index in paths: + if index >= n_molecules: + raise ValueError( + f"For {n_molecules} molecules, atom/bond features/descriptors can only be specified for indices 0-{n_molecules - 1}! Got index {index}." + ) + + features = [] + for idx in range(n_molecules): + path = paths.get(idx, None) + + if path is not None: + loaded_feature = np.load(path) + loaded_feature = [ + loaded_feature[f"arr_{i}"] for i in range(len(loaded_feature)) + ] + else: + loaded_feature = [None] * n_datapoints + + features.append(loaded_feature) + return features + + +def make_dataset( + data: Sequence[MoleculeDatapoint] | Sequence[ReactionDatapoint], + reaction_mode: str, + multi_hot_atom_featurizer_mode: str = "V2", +) -> MoleculeDataset | ReactionDataset: + atom_featurizer = get_multi_hot_atom_featurizer(multi_hot_atom_featurizer_mode) + + if isinstance(data[0], MoleculeDatapoint): + extra_atom_fdim = data[0].V_f.shape[1] if data[0].V_f is not None else 0 + extra_bond_fdim = data[0].E_f.shape[1] if data[0].E_f is not None else 0 + featurizer = SimpleMoleculeMolGraphFeaturizer( + atom_featurizer=atom_featurizer, + extra_atom_fdim=extra_atom_fdim, + extra_bond_fdim=extra_bond_fdim, + ) + return MoleculeDataset(data, featurizer) + + featurizer = CondensedGraphOfReactionFeaturizer( + mode_=reaction_mode, atom_featurizer=atom_featurizer + ) + + return ReactionDataset(data, featurizer) + + +def parse_indices(idxs): + """Parses a string of indices into a list of integers. e.g. '0,1,2-4' -> [0, 1, 2, 3, 4]""" + if isinstance(idxs, str): + indices = [] + for idx in idxs.split(","): + if "-" in idx: + start, end = map(int, idx.split("-")) + indices.extend(range(start, end + 1)) + else: + indices.append(int(idx)) + return indices + return idxs diff --git a/chemprop/cli/utils/utils.py b/chemprop/cli/utils/utils.py new file mode 100644 index 000000000..28a4b4e20 --- /dev/null +++ b/chemprop/cli/utils/utils.py @@ -0,0 +1,76 @@ +from typing import Any, Type + +from chemprop.nn import loss, predictors + +__all__ = ["pop_attr"] + + +def pop_attr(o: object, attr: str, *args) -> Any | None: + """like ``pop()`` but for attribute maps""" + match len(args): + case 0: + return _pop_attr(o, attr) + case 1: + return _pop_attr_d(o, attr, args[0]) + case _: + raise TypeError(f"Expected at most 2 arguments! got: {len(args)}") + + +def _pop_attr(o: object, attr: str) -> Any: + val = getattr(o, attr) + delattr(o, attr) + + return val + + +def _pop_attr_d(o: object, attr: str, default: Any | None = None) -> Any | None: + try: + val = getattr(o, attr) + delattr(o, attr) + except AttributeError: + val = default + + return val + + +def validate_loss_function( + predictor_ffn: Type[predictors._FFNPredictorBase], criterion: Type[loss.LossFunction] +): + match predictor_ffn: + case predictors.RegressionFFN: + if criterion not in (loss.MSELoss, loss.BoundedMSELoss): + raise ValueError(f"Expected a regression loss function! got: {criterion.__name__}") + case predictors.MveFFN: + if criterion is not loss.MVELoss: + raise ValueError(f"Expected a MVE loss function! got: {criterion.__name__}") + case predictors.EvidentialFFN: + if criterion is not loss.EvidentialLoss: + raise ValueError(f"Expected an evidential loss function! got: {criterion.__name__}") + case predictors.BinaryClassificationFFN: + if criterion not in (loss.BCELoss, loss.BinaryMCCLoss): + raise ValueError( + f"Expected a binary classification loss function! got: {criterion.__name__}" + ) + case predictors.BinaryDirichletFFN: + if loss is not loss.BinaryDirichletLoss: + raise ValueError( + f"Expected a binary Dirichlet loss function! got: {criterion.__name__}" + ) + case predictors.MulticlassClassificationFFN: + if loss not in (loss.CrossEntropyLoss, loss.MulticlassMCCLoss): + raise ValueError( + f"Expected a multiclass classification loss function! got: {criterion.__name__}" + ) + case predictors.MulticlassDirichletFFN: + if loss is not loss.MulticlassDirichletLoss: + raise ValueError( + f"Expected a multiclass Dirichlet loss function! got: {criterion.__name__}" + ) + case predictors.SpectralFFN: + if loss not in (loss.SIDLoss, loss.WassersteinLoss): + raise ValueError(f"Expected a spectral loss function! got: {criterion.__name__}") + case _: + raise ValueError( + f"Unknown predictor function! got: {predictor_ffn}. " + f"Expected one of: {tuple(predictors.PredictorRegistry.values())}" + ) diff --git a/chemprop/conf.py b/chemprop/conf.py new file mode 100644 index 000000000..921da6dbc --- /dev/null +++ b/chemprop/conf.py @@ -0,0 +1,7 @@ +"""Global configuration variables for chemprop""" + +from chemprop.featurizers.molgraph.molecule import SimpleMoleculeMolGraphFeaturizer + + +DEFAULT_ATOM_FDIM, DEFAULT_BOND_FDIM = SimpleMoleculeMolGraphFeaturizer().shape +DEFAULT_HIDDEN_DIM = 300 diff --git a/chemprop/constants.py b/chemprop/constants.py deleted file mode 100644 index 922cec3c9..000000000 --- a/chemprop/constants.py +++ /dev/null @@ -1,8 +0,0 @@ -# Logger names -TRAIN_LOGGER_NAME = 'train' -HYPEROPT_LOGGER_NAME = 'hyperparameter-optimization' - -# Save file names -MODEL_FILE_NAME = 'model.pt' -TEST_SCORES_FILE_NAME = 'test_scores.csv' -HYPEROPT_SEED_FILE_NAME = 'hyperopt_seeds.txt' diff --git a/chemprop/data/__init__.py b/chemprop/data/__init__.py index 4fb3ba513..8db6ad470 100644 --- a/chemprop/data/__init__.py +++ b/chemprop/data/__init__.py @@ -1,39 +1,34 @@ -from .data import cache_graph, cache_mol, MoleculeDatapoint, MoleculeDataset, MoleculeDataLoader, \ - MoleculeSampler, set_cache_graph, empty_cache, set_cache_mol -from .scaffold import generate_scaffold, log_scaffold_stats, scaffold_split, scaffold_to_smiles -from .scaler import StandardScaler -from .utils import filter_invalid_smiles, get_class_sizes, get_data, get_data_from_smiles, \ - get_header, get_smiles, get_task_names, get_data_weights, preprocess_smiles_columns, split_data, \ - validate_data, validate_dataset_type, get_invalid_smiles_from_file, get_invalid_smiles_from_list +from .collate import BatchMolGraph, TrainingBatch, collate_batch, collate_multicomponent +from .dataloader import build_dataloader +from .datapoints import MoleculeDatapoint, ReactionDatapoint +from .datasets import ( + MoleculeDataset, + ReactionDataset, + Datum, + MulticomponentDataset, + MolGraphDataset, +) +from .molgraph import MolGraph +from .samplers import ClassBalanceSampler, SeededSampler +from .splitting import SplitType, make_split_indices, split_data_by_indices __all__ = [ - 'cache_graph', - 'empty_cache', - 'cache_mol', - 'MoleculeDatapoint', - 'MoleculeDataset', - 'MoleculeDataLoader', - 'MoleculeSampler', - 'set_cache_graph', - 'set_cache_mol', - 'generate_scaffold', - 'log_scaffold_stats', - 'scaffold_split', - 'scaffold_to_smiles', - 'StandardScaler', - 'filter_invalid_smiles', - 'get_class_sizes', - 'get_data', - 'get_data_weights', - 'get_data_from_smiles', - 'get_data_weights', - 'get_invalid_smiles_from_file', - 'get_invalid_smiles_from_list', - 'get_header', - 'get_smiles', - 'get_task_names', - 'preprocess_smiles_columns', - 'split_data', - 'validate_data', - 'validate_dataset_type', + "BatchMolGraph", + "TrainingBatch", + "collate_batch", + "collate_multicomponent", + "build_dataloader", + "MoleculeDatapoint", + "ReactionDatapoint", + "MoleculeDataset", + "ReactionDataset", + "Datum", + "MulticomponentDataset", + "MolGraphDataset", + "MolGraph", + "ClassBalanceSampler", + "SeededSampler", + "SplitType", + "make_split_indices", + "split_data_by_indices", ] diff --git a/chemprop/data/collate.py b/chemprop/data/collate.py new file mode 100644 index 000000000..21abdb157 --- /dev/null +++ b/chemprop/data/collate.py @@ -0,0 +1,120 @@ +from dataclasses import dataclass, field, InitVar +from typing import Iterable, NamedTuple, Sequence + +import numpy as np +import torch +from torch import Tensor + +from chemprop.data.datasets import Datum +from chemprop.data.molgraph import MolGraph + + +@dataclass(repr=False, eq=False, slots=True) +class BatchMolGraph: + """A :class:`BatchMolGraph` represents a batch of individual :class:`MolGraph`\s. + + It has all the attributes of a ``MolGraph`` with the addition of the ``batch`` attribute. This + class is intended for use with data loading, so it uses :obj:`~torch.Tensor`\s to store data + """ + + mgs: InitVar[Sequence[MolGraph]] + """A list of individual :class:`MolGraph`\s to be batched together""" + V: Tensor = field(init=False) + """the atom feature matrix""" + E: Tensor = field(init=False) + """the bond feature matrix""" + edge_index: Tensor = field(init=False) + """an tensor of shape ``2 x E`` containing the edges of the graph in COO format""" + rev_edge_index: Tensor = field(init=False) + """A tensor of shape ``E`` that maps from an edge index to the index of the source of the + reverse edge in the ``edge_index`` attribute.""" + batch: Tensor = field(init=False) + """the index of the parent :class:`MolGraph` in the batched graph""" + + __size: int = field(init=False) + + def __post_init__(self, mgs: Sequence[MolGraph]): + self.__size = len(mgs) + + Vs = [] + Es = [] + edge_indexes = [] + rev_edge_indexes = [] + batch_indexes = [] + + num_nodes = 0 + num_edges = 0 + for i, mg in enumerate(mgs): + Vs.append(mg.V) + Es.append(mg.E) + edge_indexes.append(mg.edge_index + num_nodes) + rev_edge_indexes.append(mg.rev_edge_index + num_edges) + batch_indexes.append([i] * len(mg.V)) + + num_nodes += mg.V.shape[0] + num_edges += mg.edge_index.shape[1] + + self.V = torch.from_numpy(np.concatenate(Vs)).float() + self.E = torch.from_numpy(np.concatenate(Es)).float() + self.edge_index = torch.from_numpy(np.hstack(edge_indexes)).long() + self.rev_edge_index = torch.from_numpy(np.concatenate(rev_edge_indexes)).long() + self.batch = torch.tensor(np.concatenate(batch_indexes)).long() + + def __len__(self) -> int: + """the number of individual :class:`MolGraph`\s in this batch""" + return self.__size + + def to(self, device: str | torch.device): + self.V = self.V.to(device) + self.E = self.E.to(device) + self.edge_index = self.edge_index.to(device) + self.rev_edge_index = self.rev_edge_index.to(device) + self.batch = self.batch.to(device) + + +class TrainingBatch(NamedTuple): + bmg: BatchMolGraph + V_d: Tensor | None + X_d: Tensor | None + Y: Tensor | None + w: Tensor + lt_mask: Tensor | None + gt_mask: Tensor | None + + +def collate_batch(batch: Iterable[Datum]) -> TrainingBatch: + mgs, V_ds, x_ds, ys, weights, lt_masks, gt_masks = zip(*batch) + + return TrainingBatch( + BatchMolGraph(mgs), + None if V_ds[0] is None else torch.from_numpy(np.concatenate(V_ds)).float(), + None if x_ds[0] is None else torch.from_numpy(np.array(x_ds)).float(), + None if ys[0] is None else torch.from_numpy(np.array(ys)).float(), + torch.tensor(weights, dtype=torch.float).unsqueeze(1), + None if lt_masks[0] is None else torch.from_numpy(np.array(lt_masks)), + None if gt_masks[0] is None else torch.from_numpy(np.array(gt_masks)), + ) + + +class MulticomponentTrainingBatch(NamedTuple): + bmgs: list[BatchMolGraph] + V_ds: list[Tensor | None] + X_d: Tensor | None + Y: Tensor | None + w: Tensor + lt_mask: Tensor | None + gt_mask: Tensor | None + + +def collate_multicomponent(batches: Iterable[Iterable[Datum]]) -> MulticomponentTrainingBatch: + tbs = [collate_batch(batch) for batch in zip(*batches)] + + return MulticomponentTrainingBatch( + [tb.bmg for tb in tbs], + [tb.V_d for tb in tbs], + tbs[0].X_d, + tbs[0].Y, + tbs[0].w, + tbs[0].lt_mask, + tbs[0].gt_mask, + ) diff --git a/chemprop/data/data.py b/chemprop/data/data.py deleted file mode 100644 index 0f81a8ecd..000000000 --- a/chemprop/data/data.py +++ /dev/null @@ -1,764 +0,0 @@ -import threading -from collections import OrderedDict -from random import Random -from typing import Dict, Iterator, List, Optional, Union, Tuple - -import numpy as np -from torch.utils.data import DataLoader, Dataset, Sampler -from rdkit import Chem - -from .scaler import StandardScaler -from chemprop.features import get_features_generator -from chemprop.features import BatchMolGraph, MolGraph -from chemprop.features import is_explicit_h, is_reaction, is_adding_hs, is_mol -from chemprop.rdkit import make_mol - -# Cache of graph featurizations -CACHE_GRAPH = True -SMILES_TO_GRAPH: Dict[str, MolGraph] = {} - - -def cache_graph() -> bool: - r"""Returns whether :class:`~chemprop.features.MolGraph`\ s will be cached.""" - return CACHE_GRAPH - - -def set_cache_graph(cache_graph: bool) -> None: - r"""Sets whether :class:`~chemprop.features.MolGraph`\ s will be cached.""" - global CACHE_GRAPH - CACHE_GRAPH = cache_graph - - -def empty_cache(): - r"""Empties the cache of :class:`~chemprop.features.MolGraph` and RDKit molecules.""" - SMILES_TO_GRAPH.clear() - SMILES_TO_MOL.clear() - - -# Cache of RDKit molecules -CACHE_MOL = True -SMILES_TO_MOL: Dict[str, Union[Chem.Mol, Tuple[Chem.Mol, Chem.Mol]]] = {} - - -def cache_mol() -> bool: - r"""Returns whether RDKit molecules will be cached.""" - return CACHE_MOL - - -def set_cache_mol(cache_mol: bool) -> None: - r"""Sets whether RDKit molecules will be cached.""" - global CACHE_MOL - CACHE_MOL = cache_mol - - -class MoleculeDatapoint: - """A :class:`MoleculeDatapoint` contains a single molecule and its associated features and targets.""" - - def __init__(self, - smiles: List[str], - targets: List[Optional[float]] = None, - row: OrderedDict = None, - data_weight: float = None, - gt_targets: List[bool] = None, - lt_targets: List[bool] = None, - features: np.ndarray = None, - features_generator: List[str] = None, - phase_features: List[float] = None, - atom_features: np.ndarray = None, - atom_descriptors: np.ndarray = None, - bond_features: np.ndarray = None, - overwrite_default_atom_features: bool = False, - overwrite_default_bond_features: bool = False): - """ - :param smiles: A list of the SMILES strings for the molecules. - :param targets: A list of targets for the molecule (contains None for unknown target values). - :param row: The raw CSV row containing the information for this molecule. - :param data_weight: Weighting of the datapoint for the loss function. - :param gt_targets: Indicates whether the targets are an inequality regression target of the form ">x". - :param lt_targets: Indicates whether the targets are an inequality regression target of the form " 0: - self.features.extend(features_generator(m)) - # for H2 - elif m is not None and m.GetNumHeavyAtoms() == 0: - # not all features are equally long, so use methane as dummy molecule to determine length - self.features.extend(np.zeros(len(features_generator(Chem.MolFromSmiles('C'))))) - else: - if m[0] is not None and m[1] is not None and m[0].GetNumHeavyAtoms() > 0: - self.features.extend(features_generator(m[0])) - elif m[0] is not None and m[1] is not None and m[0].GetNumHeavyAtoms() == 0: - self.features.extend(np.zeros(len(features_generator(Chem.MolFromSmiles('C'))))) - - - self.features = np.array(self.features) - - # Fix nans in features - replace_token = 0 - if self.features is not None: - self.features = np.where(np.isnan(self.features), replace_token, self.features) - - # Fix nans in atom_descriptors - if self.atom_descriptors is not None: - self.atom_descriptors = np.where(np.isnan(self.atom_descriptors), replace_token, self.atom_descriptors) - - # Fix nans in atom_features - if self.atom_features is not None: - self.atom_features = np.where(np.isnan(self.atom_features), replace_token, self.atom_features) - - # Fix nans in bond_descriptors - if self.bond_features is not None: - self.bond_features = np.where(np.isnan(self.bond_features), replace_token, self.bond_features) - - # Save a copy of the raw features and targets to enable different scaling later on - self.raw_features, self.raw_targets = self.features, self.targets - self.raw_atom_descriptors, self.raw_atom_features, self.raw_bond_features = \ - self.atom_descriptors, self.atom_features, self.bond_features - - @property - def mol(self) -> List[Union[Chem.Mol, Tuple[Chem.Mol, Chem.Mol]]]: - """Gets the corresponding list of RDKit molecules for the corresponding SMILES list.""" - mol = make_mols(self.smiles, self.is_reaction_list, self.is_explicit_h_list, self.is_adding_hs_list) - if cache_mol(): - for s, m in zip(self.smiles, mol): - SMILES_TO_MOL[s] = m - - return mol - - @property - def number_of_molecules(self) -> int: - """ - Gets the number of molecules in the :class:`MoleculeDatapoint`. - - :return: The number of molecules. - """ - return len(self.smiles) - - def set_features(self, features: np.ndarray) -> None: - """ - Sets the features of the molecule. - - :param features: A 1D numpy array of features for the molecule. - """ - self.features = features - - def set_atom_descriptors(self, atom_descriptors: np.ndarray) -> None: - """ - Sets the atom descriptors of the molecule. - - :param atom_descriptors: A 1D numpy array of features for the molecule. - """ - self.atom_descriptors = atom_descriptors - - def set_atom_features(self, atom_features: np.ndarray) -> None: - """ - Sets the atom features of the molecule. - - :param atom_features: A 1D numpy array of features for the molecule. - """ - self.atom_features = atom_features - - def set_bond_features(self, bond_features: np.ndarray) -> None: - """ - Sets the bond features of the molecule. - - :param bond_features: A 1D numpy array of features for the molecule. - """ - self.bond_features = bond_features - - def extend_features(self, features: np.ndarray) -> None: - """ - Extends the features of the molecule. - - :param features: A 1D numpy array of extra features for the molecule. - """ - self.features = np.append(self.features, features) if self.features is not None else features - - def num_tasks(self) -> int: - """ - Returns the number of prediction tasks. - - :return: The number of tasks. - """ - return len(self.targets) - - def set_targets(self, targets: List[Optional[float]]): - """ - Sets the targets of a molecule. - - :param targets: A list of floats containing the targets. - """ - self.targets = targets - - def reset_features_and_targets(self) -> None: - """Resets the features (atom, bond, and molecule) and targets to their raw values.""" - self.features, self.targets = self.raw_features, self.raw_targets - self.atom_descriptors, self.atom_features, self.bond_features = \ - self.raw_atom_descriptors, self.raw_atom_features, self.raw_bond_features - - -class MoleculeDataset(Dataset): - r"""A :class:`MoleculeDataset` contains a list of :class:`MoleculeDatapoint`\ s with access to their attributes.""" - - def __init__(self, data: List[MoleculeDatapoint]): - r""" - :param data: A list of :class:`MoleculeDatapoint`\ s. - """ - self._data = data - self._batch_graph = None - self._random = Random() - - def smiles(self, flatten: bool = False) -> Union[List[str], List[List[str]]]: - """ - Returns a list containing the SMILES list associated with each :class:`MoleculeDatapoint`. - - :param flatten: Whether to flatten the returned SMILES to a list instead of a list of lists. - :return: A list of SMILES or a list of lists of SMILES, depending on :code:`flatten`. - """ - if flatten: - return [smiles for d in self._data for smiles in d.smiles] - - return [d.smiles for d in self._data] - - def mols(self, flatten: bool = False) -> Union[List[Chem.Mol], List[List[Chem.Mol]], List[Tuple[Chem.Mol, Chem.Mol]], List[List[Tuple[Chem.Mol, Chem.Mol]]]]: - """ - Returns a list of the RDKit molecules associated with each :class:`MoleculeDatapoint`. - - :param flatten: Whether to flatten the returned RDKit molecules to a list instead of a list of lists. - :return: A list of SMILES or a list of lists of RDKit molecules, depending on :code:`flatten`. - """ - if flatten: - return [mol for d in self._data for mol in d.mol] - - return [d.mol for d in self._data] - - @property - def number_of_molecules(self) -> int: - """ - Gets the number of molecules in each :class:`MoleculeDatapoint`. - - :return: The number of molecules. - """ - return self._data[0].number_of_molecules if len(self._data) > 0 else None - - def batch_graph(self) -> List[BatchMolGraph]: - r""" - Constructs a :class:`~chemprop.features.BatchMolGraph` with the graph featurization of all the molecules. - - .. note:: - The :class:`~chemprop.features.BatchMolGraph` is cached in after the first time it is computed - and is simply accessed upon subsequent calls to :meth:`batch_graph`. This means that if the underlying - set of :class:`MoleculeDatapoint`\ s changes, then the returned :class:`~chemprop.features.BatchMolGraph` - will be incorrect for the underlying data. - - :return: A list of :class:`~chemprop.features.BatchMolGraph` containing the graph featurization of all the - molecules in each :class:`MoleculeDatapoint`. - """ - if self._batch_graph is None: - self._batch_graph = [] - - mol_graphs = [] - for d in self._data: - mol_graphs_list = [] - for s, m in zip(d.smiles, d.mol): - if s in SMILES_TO_GRAPH: - mol_graph = SMILES_TO_GRAPH[s] - else: - if len(d.smiles) > 1 and (d.atom_features is not None or d.bond_features is not None): - raise NotImplementedError('Atom descriptors are currently only supported with one molecule ' - 'per input (i.e., number_of_molecules = 1).') - - mol_graph = MolGraph(m, d.atom_features, d.bond_features, - overwrite_default_atom_features=d.overwrite_default_atom_features, - overwrite_default_bond_features=d.overwrite_default_bond_features) - if cache_graph(): - SMILES_TO_GRAPH[s] = mol_graph - mol_graphs_list.append(mol_graph) - mol_graphs.append(mol_graphs_list) - - self._batch_graph = [BatchMolGraph([g[i] for g in mol_graphs]) for i in range(len(mol_graphs[0]))] - - return self._batch_graph - - def features(self) -> List[np.ndarray]: - """ - Returns the features associated with each molecule (if they exist). - - :return: A list of 1D numpy arrays containing the features for each molecule or None if there are no features. - """ - if len(self._data) == 0 or self._data[0].features is None: - return None - - return [d.features for d in self._data] - - def phase_features(self) -> List[np.ndarray]: - """ - Returns the phase features associated with each molecule (if they exist). - - :return: A list of 1D numpy arrays containing the phase features for each molecule or None if there are no features. - """ - if len(self._data) == 0 or self._data[0].phase_features is None: - return None - - return [d.phase_features for d in self._data] - - def atom_features(self) -> List[np.ndarray]: - """ - Returns the atom descriptors associated with each molecule (if they exit). - - :return: A list of 2D numpy arrays containing the atom descriptors - for each molecule or None if there are no features. - """ - if len(self._data) == 0 or self._data[0].atom_features is None: - return None - - return [d.atom_features for d in self._data] - - def atom_descriptors(self) -> List[np.ndarray]: - """ - Returns the atom descriptors associated with each molecule (if they exit). - - :return: A list of 2D numpy arrays containing the atom descriptors - for each molecule or None if there are no features. - """ - if len(self._data) == 0 or self._data[0].atom_descriptors is None: - return None - - return [d.atom_descriptors for d in self._data] - - def bond_features(self) -> List[np.ndarray]: - """ - Returns the bond features associated with each molecule (if they exit). - - :return: A list of 2D numpy arrays containing the bond features - for each molecule or None if there are no features. - """ - if len(self._data) == 0 or self._data[0].bond_features is None: - return None - - return [d.bond_features for d in self._data] - - def data_weights(self) -> List[float]: - """ - Returns the loss weighting associated with each datapoint. - """ - if not hasattr(self._data[0], 'data_weight'): - return [1. for d in self._data] - - return [d.data_weight for d in self._data] - - def targets(self) -> List[List[Optional[float]]]: - """ - Returns the targets associated with each molecule. - - :return: A list of lists of floats (or None) containing the targets. - """ - return [d.targets for d in self._data] - - def gt_targets(self) -> List[np.ndarray]: - """ - - """ - if not hasattr(self._data[0], 'gt_targets'): - return None - - return [d.gt_targets for d in self._data] - - def lt_targets(self) -> List[np.ndarray]: - """ - - """ - if not hasattr(self._data[0], 'lt_targets'): - return None - - return [d.lt_targets for d in self._data] - - def num_tasks(self) -> int: - """ - Returns the number of prediction tasks. - - :return: The number of tasks. - """ - return self._data[0].num_tasks() if len(self._data) > 0 else None - - def features_size(self) -> int: - """ - Returns the size of the additional features vector associated with the molecules. - - :return: The size of the additional features vector. - """ - return len(self._data[0].features) if len(self._data) > 0 and self._data[0].features is not None else None - - def atom_descriptors_size(self) -> int: - """ - Returns the size of custom additional atom descriptors vector associated with the molecules. - - :return: The size of the additional atom descriptor vector. - """ - return len(self._data[0].atom_descriptors[0]) \ - if len(self._data) > 0 and self._data[0].atom_descriptors is not None else None - - def atom_features_size(self) -> int: - """ - Returns the size of custom additional atom features vector associated with the molecules. - - :return: The size of the additional atom feature vector. - """ - return len(self._data[0].atom_features[0]) \ - if len(self._data) > 0 and self._data[0].atom_features is not None else None - - def bond_features_size(self) -> int: - """ - Returns the size of custom additional bond features vector associated with the molecules. - - :return: The size of the additional bond feature vector. - """ - return len(self._data[0].bond_features[0]) \ - if len(self._data) > 0 and self._data[0].bond_features is not None else None - - def normalize_features(self, scaler: StandardScaler = None, replace_nan_token: int = 0, - scale_atom_descriptors: bool = False, scale_bond_features: bool = False) -> StandardScaler: - """ - Normalizes the features of the dataset using a :class:`~chemprop.data.StandardScaler`. - - The :class:`~chemprop.data.StandardScaler` subtracts the mean and divides by the standard deviation - for each feature independently. - - If a :class:`~chemprop.data.StandardScaler` is provided, it is used to perform the normalization. - Otherwise, a :class:`~chemprop.data.StandardScaler` is first fit to the features in this dataset - and is then used to perform the normalization. - - :param scaler: A fitted :class:`~chemprop.data.StandardScaler`. If it is provided it is used, - otherwise a new :class:`~chemprop.data.StandardScaler` is first fitted to this - data and is then used. - :param replace_nan_token: A token to use to replace NaN entries in the features. - :param scale_atom_descriptors: If the features that need to be scaled are atom features rather than molecule. - :param scale_bond_features: If the features that need to be scaled are bond descriptors rather than molecule. - :return: A fitted :class:`~chemprop.data.StandardScaler`. If a :class:`~chemprop.data.StandardScaler` - is provided as a parameter, this is the same :class:`~chemprop.data.StandardScaler`. Otherwise, - this is a new :class:`~chemprop.data.StandardScaler` that has been fit on this dataset. - """ - if len(self._data) == 0 or \ - (self._data[0].features is None and not scale_bond_features and not scale_atom_descriptors): - return None - - if scaler is None: - if scale_atom_descriptors and not self._data[0].atom_descriptors is None: - features = np.vstack([d.raw_atom_descriptors for d in self._data]) - elif scale_atom_descriptors and not self._data[0].atom_features is None: - features = np.vstack([d.raw_atom_features for d in self._data]) - elif scale_bond_features: - features = np.vstack([d.raw_bond_features for d in self._data]) - else: - features = np.vstack([d.raw_features for d in self._data]) - scaler = StandardScaler(replace_nan_token=replace_nan_token) - scaler.fit(features) - - if scale_atom_descriptors and not self._data[0].atom_descriptors is None: - for d in self._data: - d.set_atom_descriptors(scaler.transform(d.raw_atom_descriptors)) - elif scale_atom_descriptors and not self._data[0].atom_features is None: - for d in self._data: - d.set_atom_features(scaler.transform(d.raw_atom_features)) - elif scale_bond_features: - for d in self._data: - d.set_bond_features(scaler.transform(d.raw_bond_features)) - else: - for d in self._data: - d.set_features(scaler.transform(d.raw_features.reshape(1, -1))[0]) - - return scaler - - def normalize_targets(self) -> StandardScaler: - """ - Normalizes the targets of the dataset using a :class:`~chemprop.data.StandardScaler`. - - The :class:`~chemprop.data.StandardScaler` subtracts the mean and divides by the standard deviation - for each task independently. - - This should only be used for regression datasets. - - :return: A :class:`~chemprop.data.StandardScaler` fitted to the targets. - """ - targets = [d.raw_targets for d in self._data] - scaler = StandardScaler().fit(targets) - scaled_targets = scaler.transform(targets).tolist() - self.set_targets(scaled_targets) - - return scaler - - def set_targets(self, targets: List[List[Optional[float]]]) -> None: - """ - Sets the targets for each molecule in the dataset. Assumes the targets are aligned with the datapoints. - - :param targets: A list of lists of floats (or None) containing targets for each molecule. This must be the - same length as the underlying dataset. - """ - if not len(self._data) == len(targets): - raise ValueError( - "number of molecules and targets must be of same length! " - f"num molecules: {len(self._data)}, num targets: {len(targets)}" - ) - for i in range(len(self._data)): - self._data[i].set_targets(targets[i]) - - def reset_features_and_targets(self) -> None: - """Resets the features (atom, bond, and molecule) and targets to their raw values.""" - for d in self._data: - d.reset_features_and_targets() - - def __len__(self) -> int: - """ - Returns the length of the dataset (i.e., the number of molecules). - - :return: The length of the dataset. - """ - return len(self._data) - - def __getitem__(self, item) -> Union[MoleculeDatapoint, List[MoleculeDatapoint]]: - r""" - Gets one or more :class:`MoleculeDatapoint`\ s via an index or slice. - - :param item: An index (int) or a slice object. - :return: A :class:`MoleculeDatapoint` if an int is provided or a list of :class:`MoleculeDatapoint`\ s - if a slice is provided. - """ - return self._data[item] - - -class MoleculeSampler(Sampler): - """A :class:`MoleculeSampler` samples data from a :class:`MoleculeDataset` for a :class:`MoleculeDataLoader`.""" - - def __init__(self, - dataset: MoleculeDataset, - class_balance: bool = False, - shuffle: bool = False, - seed: int = 0): - """ - :param class_balance: Whether to perform class balancing (i.e., use an equal number of positive - and negative molecules). Set shuffle to True in order to get a random - subset of the larger class. - :param shuffle: Whether to shuffle the data. - :param seed: Random seed. Only needed if :code:`shuffle` is True. - """ - super(Sampler, self).__init__() - - self.dataset = dataset - self.class_balance = class_balance - self.shuffle = shuffle - - self._random = Random(seed) - - if self.class_balance: - indices = np.arange(len(dataset)) - has_active = np.array([any(target == 1 for target in datapoint.targets) for datapoint in dataset]) - - self.positive_indices = indices[has_active].tolist() - self.negative_indices = indices[~has_active].tolist() - - self.length = 2 * min(len(self.positive_indices), len(self.negative_indices)) - else: - self.positive_indices = self.negative_indices = None - - self.length = len(self.dataset) - - def __iter__(self) -> Iterator[int]: - """Creates an iterator over indices to sample.""" - if self.class_balance: - if self.shuffle: - self._random.shuffle(self.positive_indices) - self._random.shuffle(self.negative_indices) - - indices = [index for pair in zip(self.positive_indices, self.negative_indices) for index in pair] - else: - indices = list(range(len(self.dataset))) - - if self.shuffle: - self._random.shuffle(indices) - - return iter(indices) - - def __len__(self) -> int: - """Returns the number of indices that will be sampled.""" - return self.length - - -def construct_molecule_batch(data: List[MoleculeDatapoint]) -> MoleculeDataset: - r""" - Constructs a :class:`MoleculeDataset` from a list of :class:`MoleculeDatapoint`\ s. - - Additionally, precomputes the :class:`~chemprop.features.BatchMolGraph` for the constructed - :class:`MoleculeDataset`. - - :param data: A list of :class:`MoleculeDatapoint`\ s. - :return: A :class:`MoleculeDataset` containing all the :class:`MoleculeDatapoint`\ s. - """ - data = MoleculeDataset(data) - data.batch_graph() # Forces computation and caching of the BatchMolGraph for the molecules - - return data - - -class MoleculeDataLoader(DataLoader): - """A :class:`MoleculeDataLoader` is a PyTorch :class:`DataLoader` for loading a :class:`MoleculeDataset`.""" - - def __init__(self, - dataset: MoleculeDataset, - batch_size: int = 50, - num_workers: int = 8, - class_balance: bool = False, - shuffle: bool = False, - seed: int = 0): - """ - :param dataset: The :class:`MoleculeDataset` containing the molecules to load. - :param batch_size: Batch size. - :param num_workers: Number of workers used to build batches. - :param class_balance: Whether to perform class balancing (i.e., use an equal number of positive - and negative molecules). Class balance is only available for single task - classification datasets. Set shuffle to True in order to get a random - subset of the larger class. - :param shuffle: Whether to shuffle the data. - :param seed: Random seed. Only needed if shuffle is True. - """ - self._dataset = dataset - self._batch_size = batch_size - self._num_workers = num_workers - self._class_balance = class_balance - self._shuffle = shuffle - self._seed = seed - self._context = None - self._timeout = 0 - is_main_thread = threading.current_thread() is threading.main_thread() - if not is_main_thread and self._num_workers > 0: - self._context = 'forkserver' # In order to prevent a hanging - self._timeout = 3600 # Just for sure that the DataLoader won't hang - - self._sampler = MoleculeSampler( - dataset=self._dataset, - class_balance=self._class_balance, - shuffle=self._shuffle, - seed=self._seed - ) - - super(MoleculeDataLoader, self).__init__( - dataset=self._dataset, - batch_size=self._batch_size, - sampler=self._sampler, - num_workers=self._num_workers, - collate_fn=construct_molecule_batch, - multiprocessing_context=self._context, - timeout=self._timeout - ) - - @property - def targets(self) -> List[List[Optional[float]]]: - """ - Returns the targets associated with each molecule. - - :return: A list of lists of floats (or None) containing the targets. - """ - if self._class_balance or self._shuffle: - raise ValueError('Cannot safely extract targets when class balance or shuffle are enabled.') - - return [self._dataset[index].targets for index in self._sampler] - - @property - def gt_targets(self) -> List[List[Optional[bool]]]: - """ - Returns booleans for whether each target is an inequality rather than a value target, associated with each molecule. - - :return: A list of lists of booleans (or None) containing the targets. - """ - if self._class_balance or self._shuffle: - raise ValueError('Cannot safely extract targets when class balance or shuffle are enabled.') - - if not hasattr(self._dataset[0],'gt_targets'): - return None - - return [self._dataset[index].gt_targets for index in self._sampler] - - @property - def lt_targets(self) -> List[List[Optional[bool]]]: - """ - Returns booleans for whether each target is an inequality rather than a value target, associated with each molecule. - - :return: A list of lists of booleans (or None) containing the targets. - """ - if self._class_balance or self._shuffle: - raise ValueError('Cannot safely extract targets when class balance or shuffle are enabled.') - - if not hasattr(self._dataset[0],'lt_targets'): - return None - - return [self._dataset[index].lt_targets for index in self._sampler] - - - @property - def iter_size(self) -> int: - """Returns the number of data points included in each full iteration through the :class:`MoleculeDataLoader`.""" - return len(self._sampler) - - def __iter__(self) -> Iterator[MoleculeDataset]: - r"""Creates an iterator which returns :class:`MoleculeDataset`\ s""" - return super(MoleculeDataLoader, self).__iter__() - - -def make_mols(smiles: List[str], reaction_list: List[bool], keep_h_list: List[bool], add_h_list: List[bool]): - """ - Builds a list of RDKit molecules (or a list of tuples of molecules if reaction is True) for a list of smiles. - - :param smiles: List of SMILES strings. - :param reaction_list: List of booleans whether the SMILES strings are to be treated as a reaction. - :param keep_h_list: List of booleans whether to keep hydrogens in the input smiles. This does not add hydrogens, it only keeps them if they are specified. - :param add_h_list: List of booleasn whether to add hydrogens to the input smiles. - :return: List of RDKit molecules or list of tuple of molecules. - """ - mol = [] - for s, reaction, keep_h, add_h in zip(smiles, reaction_list, keep_h_list, add_h_list): - if reaction: - mol.append(SMILES_TO_MOL[s] if s in SMILES_TO_MOL else (make_mol(s.split(">")[0], keep_h, add_h), make_mol(s.split(">")[-1], keep_h, add_h))) - else: - mol.append(SMILES_TO_MOL[s] if s in SMILES_TO_MOL else make_mol(s, keep_h, add_h)) - return mol - diff --git a/chemprop/data/dataloader.py b/chemprop/data/dataloader.py new file mode 100644 index 000000000..e4728344e --- /dev/null +++ b/chemprop/data/dataloader.py @@ -0,0 +1,69 @@ +import warnings + +from torch.utils.data import DataLoader + +from chemprop.data.collate import collate_batch, collate_multicomponent +from chemprop.data.datasets import MoleculeDataset, MulticomponentDataset, ReactionDataset +from chemprop.data.samplers import ClassBalanceSampler, SeededSampler + + +def build_dataloader( + dataset: MoleculeDataset | ReactionDataset | MulticomponentDataset, + batch_size: int = 64, + num_workers: int = 0, + class_balance: bool = False, + seed: int | None = None, + shuffle: bool = True, + **kwargs, +): + """Return a :obj:`~torch.utils.data.DataLoader` for :class:`MolGraphDataset`\s + + Parameters + ---------- + dataset : MoleculeDataset | ReactionDataset | MulticomponentDataset + The dataset containing the molecules or reactions to load. + batch_size : int, default=64 + the batch size to load. + num_workers : int, default=0 + the number of workers used to build batches. + class_balance : bool, default=False + Whether to perform class balancing (i.e., use an equal number of positive and negative + molecules). Class balance is only available for single task classification datasets. Set + shuffle to True in order to get a random subset of the larger class. + seed : int, default=None + the random seed to use for shuffling (only used when `shuffle` is `True`). + shuffle : bool, default=False + whether to shuffle the data during sampling. + """ + + if class_balance: + sampler = ClassBalanceSampler(dataset.Y, seed, shuffle) + elif shuffle and seed is not None: + sampler = SeededSampler(len(dataset), seed) + else: + sampler = None + + if isinstance(dataset, MulticomponentDataset): + collate_fn = collate_multicomponent + else: + collate_fn = collate_batch + + if len(dataset) % batch_size == 1: + warnings.warn( + f"Dropping last batch of size 1 to avoid issues with batch normalization \ +(dataset size = {len(dataset)}, batch_size = {batch_size})" + ) + drop_last = True + else: + drop_last = False + + return DataLoader( + dataset, + batch_size, + sampler is None and shuffle, + sampler, + num_workers=num_workers, + collate_fn=collate_fn, + drop_last=drop_last, + **kwargs, + ) diff --git a/chemprop/data/datapoints.py b/chemprop/data/datapoints.py new file mode 100644 index 000000000..fef5e81d3 --- /dev/null +++ b/chemprop/data/datapoints.py @@ -0,0 +1,169 @@ +from __future__ import annotations + +from dataclasses import InitVar, dataclass + +import numpy as np +from rdkit.Chem import AllChem as Chem + +from chemprop.featurizers import Featurizer +from chemprop.utils import make_mol + +MoleculeFeaturizer = Featurizer[Chem.Mol, np.ndarray] + + +@dataclass(slots=True) +class _DatapointMixin: + """A mixin class for both molecule- and reaction- and multicomponent-type data""" + + y: np.ndarray | None = None + """the targets for the molecule with unknown targets indicated by `nan`s""" + weight: float = 1.0 + """the weight of this datapoint for the loss calculation.""" + gt_mask: np.ndarray | None = None + """Indicates whether the targets are an inequality regression target of the form `x`""" + x_d: np.ndarray | None = None + """A vector of length ``d_f`` containing additional features (e.g., Morgan fingerprint) that + will be concatenated to the global representation *after* aggregation""" + mfs: InitVar[list[MoleculeFeaturizer] | None] = None + """A list of molecule featurizers to use""" + x_phase: list[float] = None + """A one-hot vector indicating the phase of the data, as used in spectra data.""" + name: str | None = None + """A string identifier for the datapoint.""" + + def __post_init__(self, mfs: list[MoleculeFeaturizer] | None): + if self.x_d is not None and mfs is not None: + raise ValueError("Cannot provide both loaded features and molecular featurizers!") + + if mfs is not None: + self.x_d = self.calc_features(mfs) + + NAN_TOKEN = 0 + if self.x_d is not None: + self.x_d[np.isnan(self.x_d)] = NAN_TOKEN + + @property + def t(self) -> int | None: + return len(self.y) if self.y is not None else None + + +@dataclass +class _MoleculeDatapointMixin: + mol: Chem.Mol + """the molecule associated with this datapoint""" + + @classmethod + def from_smi( + cls, smi: str, *args, keep_h: bool = False, add_h: bool = False, **kwargs + ) -> _MoleculeDatapointMixin: + mol = make_mol(smi, keep_h, add_h) + + kwargs["name"] = smi if "name" not in kwargs else kwargs["name"] + + return cls(mol, *args, **kwargs) + + +@dataclass +class MoleculeDatapoint(_DatapointMixin, _MoleculeDatapointMixin): + """A :class:`MoleculeDatapoint` contains a single molecule and its associated features and targets.""" + + V_f: np.ndarray | None = None + """a numpy array of shape ``V x d_vf``, where ``V`` is the number of atoms in the molecule, and + ``d_vf`` is the number of additional features that will be concatenated to atom-level features + *before* message passing""" + E_f: np.ndarray | None = None + """A numpy array of shape ``E x d_ef``, where ``E`` is the number of bonds in the molecule, and + ``d_ef`` is the number of additional features containing additional features that will be + concatenated to bond-level features *before* message passing""" + V_d: np.ndarray | None = None + """A numpy array of shape ``V x d_vd``, where ``V`` is the number of atoms in the molecule, and + ``d_vd`` is the number of additional descriptors that will be concatenated to atom-level + descriptors *after* message passing""" + + def __post_init__(self, mfs: list[MoleculeFeaturizer] | None): + if self.mol is None: + raise ValueError("Input molecule was `None`!") + + NAN_TOKEN = 0 + + if self.V_f is not None: + self.V_f[np.isnan(self.V_f)] = NAN_TOKEN + if self.E_f is not None: + self.E_f[np.isnan(self.E_f)] = NAN_TOKEN + if self.V_d is not None: + self.V_d[np.isnan(self.V_d)] = NAN_TOKEN + + super().__post_init__(mfs) + + def __len__(self) -> int: + return 1 + + def calc_features(self, mfs: list[MoleculeFeaturizer]) -> np.ndarray: + if self.mol.GetNumHeavyAtoms() == 0: + return np.zeros(sum(len(mf) for mf in mfs)) + + return np.hstack([mf(self.mol) for mf in mfs]) + + +@dataclass +class _ReactionDatapointMixin: + rct: Chem.Mol + """the reactant associated with this datapoint""" + pdt: Chem.Mol + """the product associated with this datapoint""" + + @classmethod + def from_smi( + cls, + rxn_or_smis: str | tuple[str, str], + *args, + keep_h: bool = False, + add_h: bool = False, + **kwargs, + ) -> _ReactionDatapointMixin: + match rxn_or_smis: + case str(): + rct_smi, agt_smi, pdt_smi = rxn_or_smis.split(">") + rct_smi = f"{rct_smi}.{agt_smi}" if agt_smi else rct_smi + name = rxn_or_smis + case tuple(): + rct_smi, pdt_smi = rxn_or_smis + name = ">>".join(rxn_or_smis) + case _: + raise TypeError( + "Must provide either a reaction SMARTS string or a tuple of reactant and product SMILES strings!" + ) + + rct = make_mol(rct_smi, keep_h, add_h) + pdt = make_mol(pdt_smi, keep_h, add_h) + + kwargs["name"] = name if "name" not in kwargs else kwargs["name"] + + return cls(rct, pdt, *args, **kwargs) + + +@dataclass +class ReactionDatapoint(_DatapointMixin, _ReactionDatapointMixin): + """A :class:`ReactionDatapoint` contains a single reaction and its associated features and targets.""" + + def __post_init__(self, mfs: list[MoleculeFeaturizer] | None): + if self.rct is None: + raise ValueError("Reactant cannot be `None`!") + if self.pdt is None: + raise ValueError("Product cannot be `None`!") + + return super().__post_init__(mfs) + + def __len__(self) -> int: + return 2 + + def calc_features(self, mfs: list[MoleculeFeaturizer]) -> np.ndarray: + x_ds = [ + mf(mol) if mol.GetNumHeavyAtoms() > 0 else np.zeros(len(mf)) + for mf in mfs + for mol in [self.rct, self.pdt] + ] + + return np.hstack(x_ds) diff --git a/chemprop/data/datasets.py b/chemprop/data/datasets.py new file mode 100644 index 000000000..1d948ed4f --- /dev/null +++ b/chemprop/data/datasets.py @@ -0,0 +1,459 @@ +from dataclasses import dataclass, field +from functools import cached_property +from typing import NamedTuple, TypeAlias + +import numpy as np +from numpy.typing import ArrayLike +from rdkit import Chem +from rdkit.Chem import Mol +from sklearn.preprocessing import StandardScaler +from torch.utils.data import Dataset + +from chemprop.types import Rxn +from chemprop.data.datapoints import MoleculeDatapoint, ReactionDatapoint +from chemprop.data.molgraph import MolGraph +from chemprop.featurizers.base import Featurizer +from chemprop.featurizers.molgraph.cache import MolGraphCache, MolGraphCacheOnTheFly +from chemprop.featurizers.molgraph import SimpleMoleculeMolGraphFeaturizer, CGRFeaturizer + + +class Datum(NamedTuple): + """a singular training data point""" + + mg: MolGraph + V_d: np.ndarray | None + x_d: np.ndarray | None + y: np.ndarray | None + weight: float + lt_mask: np.ndarray | None + gt_mask: np.ndarray | None + + +MolGraphDataset: TypeAlias = Dataset[Datum] + + +class _MolGraphDatasetMixin: + def __len__(self) -> int: + return len(self.data) + + @cached_property + def _Y(self) -> np.ndarray: + """the raw targets of the dataset""" + return np.array([d.y for d in self.data], float) + + @property + def Y(self) -> np.ndarray: + """the (scaled) targets of the dataset""" + return self.__Y + + @Y.setter + def Y(self, Y: ArrayLike): + self._validate_attribute(Y, "targets") + + self.__Y = np.array(Y, float) + + @cached_property + def _X_d(self) -> np.ndarray: + """the raw extra descriptors of the dataset""" + return np.array([d.x_d for d in self.data]) + + @property + def X_d(self) -> np.ndarray: + """the (scaled) extra descriptors of the dataset""" + return self.__X_d + + @X_d.setter + def X_d(self, X_d: ArrayLike): + self._validate_attribute(X_d, "extra descriptors") + + self.__X_d = np.array(X_d) + + @property + def weights(self) -> np.ndarray: + return np.array([d.weight for d in self.data]) + + @property + def gt_mask(self) -> np.ndarray: + return np.array([d.gt_mask for d in self.data]) + + @property + def lt_mask(self) -> np.ndarray: + return np.array([d.lt_mask for d in self.data]) + + @property + def t(self) -> int | None: + return self.data[0].t if len(self.data) > 0 else None + + @property + def d_xd(self) -> int: + """the extra molecule descriptor dimension, if any""" + return 0 if self.X_d[0] is None else self.X_d.shape[1] + + @property + def names(self) -> list[str]: + return [d.name for d in self.data] + + def normalize_targets(self, scaler: StandardScaler | None = None) -> StandardScaler: + """Normalizes the targets of this dataset using a :obj:`StandardScaler` + + The :obj:`StandardScaler` subtracts the mean and divides by the standard deviation for + each task independently. NOTE: This should only be used for regression datasets. + + Returns + ------- + StandardScaler + a scaler fit to the targets. + """ + + if scaler is None: + scaler = StandardScaler().fit(self._Y) + + self.Y = scaler.transform(self._Y) + + return scaler + + def normalize_inputs( + self, key: str = "X_d", scaler: StandardScaler | None = None + ) -> StandardScaler: + VALID_KEYS = {"X_d"} + if key not in VALID_KEYS: + raise ValueError(f"Invalid feature key! got: {key}. expected one of: {VALID_KEYS}") + + X = self.X_d if self.X_d[0] is not None else None + + if X is None: + return scaler + + if scaler is None: + scaler = StandardScaler().fit(X) + + self.X_d = scaler.transform(X) + + return scaler + + def reset(self): + """Reset the atom and bond features; atom and extra descriptors; and targets of each + datapoint to their initial, unnormalized values.""" + self.__Y = self._Y + self.__X_d = self._X_d + + def _validate_attribute(self, X: np.ndarray, label: str): + if not len(self.data) == len(X): + raise ValueError( + f"number of molecules ({len(self.data)}) and {label} ({len(X)}) " + "must have same length!" + ) + + +@dataclass +class MoleculeDataset(_MolGraphDatasetMixin, MolGraphDataset): + """A :class:`MoleculeDataset` composed of :class:`MoleculeDatapoint`\s + + A :class:`MoleculeDataset` produces featurized data for input to a + :class:`MPNN` model. Typically, data featurization is performed on-the-fly + and parallelized across multiple workers via the :class:`~torch.utils.data + DataLoader` class. However, for small datasets, it may be more efficient to + featurize the data in advance and cache the results. This can be done by + setting ``MoleculeDataset.cache=True``. + + Parameters + ---------- + data : Iterable[MoleculeDatapoint] + the data from which to create a dataset + featurizer : MoleculeFeaturizer + the featurizer with which to generate MolGraphs of the molecules + """ + + data: list[MoleculeDatapoint] + featurizer: Featurizer[Mol, MolGraph] = field(default_factory=SimpleMoleculeMolGraphFeaturizer) + + def __post_init__(self): + if self.data is None: + raise ValueError("Data cannot be None!") + + self.reset() + self.cache = False + + def __getitem__(self, idx: int) -> Datum: + d = self.data[idx] + mg = self.mg_cache[idx] + + return Datum(mg, self.V_ds[idx], self.X_d[idx], self.Y[idx], d.weight, d.lt_mask, d.gt_mask) + + @property + def cache(self) -> bool: + return self.__cache + + @cache.setter + def cache(self, cache: bool = False): + self.__cache = cache + self._init_cache() + + def _init_cache(self): + """initialize the cache""" + self.mg_cache = (MolGraphCache if self.cache else MolGraphCacheOnTheFly)( + self.mols, self.V_fs, self.E_fs, self.featurizer + ) + + @property + def smiles(self) -> list[str]: + """the SMILES strings associated with the dataset""" + return [Chem.MolToSmiles(d.mol) for d in self.data] + + @property + def mols(self) -> list[Chem.Mol]: + """the molecules associated with the dataset""" + return [d.mol for d in self.data] + + @property + def _V_fs(self) -> list[np.ndarray]: + """the raw atom features of the dataset""" + return [d.V_f for d in self.data] + + @property + def V_fs(self) -> list[np.ndarray]: + """the (scaled) atom descriptors of the dataset""" + return self.__V_fs + + @V_fs.setter + def V_fs(self, V_fs: list[np.ndarray]): + """the (scaled) atom features of the dataset""" + self._validate_attribute(V_fs, "atom features") + + self.__V_fs = V_fs + self._init_cache() + + @property + def _E_fs(self) -> list[np.ndarray]: + """the raw bond features of the dataset""" + return [d.E_f for d in self.data] + + @property + def E_fs(self) -> list[np.ndarray]: + """the (scaled) bond features of the dataset""" + return self.__E_fs + + @E_fs.setter + def E_fs(self, E_fs: list[np.ndarray]): + self._validate_attribute(E_fs, "bond features") + + self.__E_fs = E_fs + self._init_cache() + + @property + def _V_ds(self) -> list[np.ndarray]: + """the raw atom descriptors of the dataset""" + return [d.V_d for d in self.data] + + @property + def V_ds(self) -> list[np.ndarray]: + """the (scaled) atom descriptors of the dataset""" + return self.__V_ds + + @V_ds.setter + def V_ds(self, V_ds: list[np.ndarray]): + self._validate_attribute(V_ds, "atom descriptors") + + self.__V_ds = V_ds + + @property + def d_vf(self) -> int: + """the extra atom feature dimension, if any""" + return 0 if self.V_fs[0] is None else self.V_fs[0].shape[1] + + @property + def d_ef(self) -> int: + """the extra bond feature dimension, if any""" + return 0 if self.E_fs[0] is None else self.E_fs[0].shape[1] + + @property + def d_vd(self) -> int: + """the extra atom descriptor dimension, if any""" + return 0 if self.V_ds[0] is None else self.V_ds[0].shape[1] + + def normalize_inputs( + self, key: str = "X_d", scaler: StandardScaler | None = None + ) -> StandardScaler: + VALID_KEYS = {"X_d", "V_f", "E_f", "V_d"} + + match key: + case "X_d": + X = None if self.d_xd == 0 else self.X_d + case "V_f": + X = None if self.d_vf == 0 else np.concatenate(self.V_fs, axis=0) + case "E_f": + X = None if self.d_ef == 0 else np.concatenate(self.E_fs, axis=0) + case "V_d": + X = None if self.d_vd == 0 else np.concatenate(self.V_ds, axis=0) + case _: + raise ValueError(f"Invalid feature key! got: {key}. expected one of: {VALID_KEYS}") + + if X is None: + return scaler + + if scaler is None: + scaler = StandardScaler().fit(X) + + match key: + case "X_d": + self.X_d = scaler.transform(X) + case "V_f": + self.V_fs = [scaler.transform(V_f) if V_f.size > 0 else V_f for V_f in self.V_fs] + case "E_f": + self.E_fs = [scaler.transform(E_f) if E_f.size > 0 else E_f for E_f in self.E_fs] + case "V_d": + self.V_ds = [scaler.transform(V_d) if V_d.size > 0 else V_d for V_d in self.V_ds] + case _: + raise RuntimeError("unreachable code reached!") + + return scaler + + def reset(self): + """Reset the atom and bond features; atom and extra descriptors; and targets of each + datapoint to their initial, unnormalized values.""" + super().reset() + self.__V_fs = self._V_fs + self.__E_fs = self._E_fs + self.__V_ds = self._V_ds + + +@dataclass +class ReactionDataset(_MolGraphDatasetMixin, MolGraphDataset): + """A :class:`ReactionDataset` composed of :class:`ReactionDatapoint`\s + + .. note:: + The featurized data provided by this class may be cached, simlar to a + :class:`MoleculeDataset`. To enable the cache, set ``ReactionDataset + cache=True``. + """ + + data: list[ReactionDatapoint] + """the dataset from which to load""" + featurizer: Featurizer[Rxn, MolGraph] = field(default_factory=CGRFeaturizer) + """the featurizer with which to generate MolGraphs of the input""" + + def __post_init__(self): + if self.data is None: + raise ValueError("Data cannot be None!") + + self.reset() + self.cache = False + + @property + def cache(self) -> bool: + return self.__cache + + @cache.setter + def cache(self, cache: bool = False): + self.__cache = cache + self.mg_cache = (MolGraphCache if cache else MolGraphCacheOnTheFly)( + self.mols, [None] * len(self), [None] * len(self), self.featurizer + ) + + def __getitem__(self, idx: int) -> Datum: + d = self.data[idx] + mg = self.mg_cache[idx] + + return Datum(mg, None, self.X_d[idx], self.Y[idx], d.weight, d.lt_mask, d.gt_mask) + + @property + def smiles(self) -> list[tuple]: + return [(Chem.MolToSmiles(d.rct), Chem.MolToSmiles(d.pdt)) for d in self.data] + + @property + def mols(self) -> list[Rxn]: + return [(d.rct, d.pdt) for d in self.data] + + @property + def d_vf(self) -> int: + return 0 + + @property + def d_ef(self) -> int: + return 0 + + @property + def d_vd(self) -> int: + return 0 + + +@dataclass(repr=False, eq=False) +class MulticomponentDataset(_MolGraphDatasetMixin, Dataset): + """A :class:`MulticomponentDataset` is a :class:`Dataset` composed of parallel + :class:`MoleculeDatasets` and :class:`ReactionDataset`\s""" + + datasets: list[MoleculeDataset | ReactionDataset] + """the parallel datasets""" + + def __post_init__(self): + sizes = [len(dset) for dset in self.datasets] + if not all(sizes[0] == size for size in sizes[1:]): + raise ValueError(f"Datasets must have all same length! got: {sizes}") + + def __len__(self) -> int: + return len(self.datasets[0]) + + @property + def n_components(self) -> int: + return len(self.datasets) + + def __getitem__(self, idx: int) -> list[Datum]: + return [dset[idx] for dset in self.datasets] + + @property + def smiles(self) -> list[list[str]]: + return list(zip(*[dset.smiles for dset in self.datasets])) + + @property + def names(self) -> list[list[str]]: + return list(zip(*[dset.names for dset in self.datasets])) + + @property + def mols(self) -> list[list[Chem.Mol]]: + return list(zip(*[dset.mols for dset in self.datasets])) + + def normalize_targets(self, scaler: StandardScaler | None = None) -> StandardScaler: + return self.datasets[0].normalize_targets(scaler) + + def normalize_inputs( + self, key: str = "X_d", scaler: list[StandardScaler] | None = None + ) -> list[StandardScaler]: + RXN_VALID_KEYS = {"X_d"} + match scaler: + case None: + return [ + dset.normalize_inputs(key) + if isinstance(dset, MoleculeDataset) or key in RXN_VALID_KEYS + else None + for dset in self.datasets + ] + case _: + assert len(scaler) == len( + self.datasets + ), "Number of scalers must match number of datasets!" + + return [ + dset.normalize_inputs(key, s) + if isinstance(dset, MoleculeDataset) or key in RXN_VALID_KEYS + else None + for dset, s in zip(self.datasets, scaler) + ] + + def reset(self): + return [dset.reset() for dset in self.datasets] + + @property + def d_xd(self) -> list[int]: + return self.datasets[0].d_xd + + @property + def d_vf(self) -> list[int]: + return sum(dset.d_vf for dset in self.datasets) + + @property + def d_ef(self) -> list[int]: + return sum(dset.d_ef for dset in self.datasets) + + @property + def d_vd(self) -> list[int]: + return sum(dset.d_vd for dset in self.datasets) diff --git a/chemprop/data/molgraph.py b/chemprop/data/molgraph.py new file mode 100644 index 000000000..2b4e6b4e1 --- /dev/null +++ b/chemprop/data/molgraph.py @@ -0,0 +1,16 @@ +from typing import NamedTuple + +import numpy as np + + +class MolGraph(NamedTuple): + """A :class:`MolGraph` represents the graph featurization of a molecule.""" + + V: np.ndarray + """an array of shape ``V x d_v`` containing the atom features of the molecule""" + E: np.ndarray + """an array of shape ``E x d_e`` containing the bond features of the molecule""" + edge_index: np.ndarray + """an array of shape ``2 x E`` containing the edges of the graph in COO format""" + rev_edge_index: np.ndarray + """A array of shape ``E`` that maps from an edge index to the index of the source of the reverse edge in :attr:`edge_index` attribute.""" diff --git a/chemprop/data/samplers.py b/chemprop/data/samplers.py new file mode 100644 index 000000000..d19855b0e --- /dev/null +++ b/chemprop/data/samplers.py @@ -0,0 +1,66 @@ +from itertools import chain +from typing import Iterator, Optional + +import numpy as np +from torch.utils.data import Sampler + + +class SeededSampler(Sampler): + """A :class`SeededSampler` is a class for iterating through a dataset in a randomly seeded + fashion""" + + def __init__(self, N: int, seed: int): + if seed is None: + raise ValueError("arg 'seed' was `None`! A SeededSampler must be seeded!") + + self.idxs = np.arange(N) + self.rg = np.random.default_rng(seed) + + def __iter__(self) -> Iterator[int]: + """an iterator over indices to sample.""" + self.rg.shuffle(self.idxs) + + return iter(self.idxs) + + def __len__(self) -> int: + """the number of indices that will be sampled.""" + return len(self.idxs) + + +class ClassBalanceSampler(Sampler): + """A :class:`ClassBalanceSampler` samples data from a :class:`MolGraphDataset` such that + positive and negative classes are equally sampled + + Parameters + ---------- + dataset : MolGraphDataset + the dataset from which to sample + seed : int + the random seed to use for shuffling (only used when `shuffle` is `True`) + shuffle : bool, default=False + whether to shuffle the data during sampling + """ + + def __init__(self, Y: np.ndarray, seed: Optional[int] = None, shuffle: bool = False): + self.shuffle = shuffle + self.rg = np.random.default_rng(seed) + + idxs = np.arange(len(Y)) + actives = Y.any(1) + + self.pos_idxs = idxs[actives] + self.neg_idxs = idxs[~actives] + + self.length = 2 * min(len(self.pos_idxs), len(self.neg_idxs)) + + def __iter__(self) -> Iterator[int]: + """an iterator over indices to sample.""" + if self.shuffle: + self.rg.shuffle(self.pos_idxs) + self.rg.shuffle(self.neg_idxs) + + return chain(*zip(self.pos_idxs, self.neg_idxs)) + + def __len__(self) -> int: + """the number of indices that will be sampled.""" + return self.length diff --git a/chemprop/data/scaffold.py b/chemprop/data/scaffold.py deleted file mode 100644 index ede9ec069..000000000 --- a/chemprop/data/scaffold.py +++ /dev/null @@ -1,174 +0,0 @@ -from collections import defaultdict -import logging -from random import Random -from typing import Dict, List, Set, Tuple, Union -import warnings - -from rdkit import Chem -from rdkit.Chem.Scaffolds import MurckoScaffold -from tqdm import tqdm -import numpy as np - -from .data import MoleculeDataset, make_mol - - -def generate_scaffold(mol: Union[str, Chem.Mol, Tuple[Chem.Mol, Chem.Mol]], include_chirality: bool = False) -> str: - """ - Computes the Bemis-Murcko scaffold for a SMILES string. - - :param mol: A SMILES or an RDKit molecule. - :param include_chirality: Whether to include chirality in the computed scaffold.. - :return: The Bemis-Murcko scaffold for the molecule. - """ - if isinstance(mol, str): - mol = make_mol(mol, keep_h = False, add_h = False) - if isinstance(mol, tuple): - mol = mol[0] - scaffold = MurckoScaffold.MurckoScaffoldSmiles(mol = mol, includeChirality = include_chirality) - - return scaffold - - -def scaffold_to_smiles(mols: Union[List[str], List[Chem.Mol], List[Tuple[Chem.Mol, Chem.Mol]]], - use_indices: bool = False) -> Dict[str, Union[Set[str], Set[int]]]: - """ - Computes the scaffold for each SMILES and returns a mapping from scaffolds to sets of smiles (or indices). - - :param mols: A list of SMILES or RDKit molecules. - :param use_indices: Whether to map to the SMILES's index in :code:`mols` rather than - mapping to the smiles string itself. This is necessary if there are duplicate smiles. - :return: A dictionary mapping each unique scaffold to all SMILES (or indices) which have that scaffold. - """ - scaffolds = defaultdict(set) - for i, mol in tqdm(enumerate(mols), total = len(mols)): - scaffold = generate_scaffold(mol) - if use_indices: - scaffolds[scaffold].add(i) - else: - scaffolds[scaffold].add(mol) - - return scaffolds - - -def scaffold_split(data: MoleculeDataset, - sizes: Tuple[float, float, float] = (0.8, 0.1, 0.1), - balanced: bool = False, - key_molecule_index: int = 0, - seed: int = 0, - logger: logging.Logger = None) -> Tuple[MoleculeDataset, - MoleculeDataset, - MoleculeDataset]: - r""" - Splits a :class:`~chemprop.data.MoleculeDataset` by scaffold so that no molecules sharing a scaffold are in different splits. - - :param data: A :class:`MoleculeDataset`. - :param sizes: A length-3 tuple with the proportions of data in the train, validation, and test sets. - :param balanced: Whether to balance the sizes of scaffolds in each set rather than putting the smallest in test set. - :param key_molecule_index: For data with multiple molecules, this sets which molecule will be considered during splitting. - :param seed: Random seed for shuffling when doing balanced splitting. - :param logger: A logger for recording output. - :return: A tuple of :class:`~chemprop.data.MoleculeDataset`\ s containing the train, - validation, and test splits of the data. - """ - if not (len(sizes) == 3 and np.isclose(sum(sizes), 1)): - raise ValueError(f"Invalid train/val/test splits! got: {sizes}") - - # Split - train_size, val_size, test_size = sizes[0] * len(data), sizes[1] * len(data), sizes[2] * len(data) - train, val, test = [], [], [] - train_scaffold_count, val_scaffold_count, test_scaffold_count = 0, 0, 0 - - # Map from scaffold to index in the data - key_mols = [m[key_molecule_index] for m in data.mols(flatten=False)] - scaffold_to_indices = scaffold_to_smiles(key_mols, use_indices=True) - - # Seed randomness - random = Random(seed) - - if balanced: # Put stuff that's bigger than half the val/test size into train, rest just order randomly - index_sets = list(scaffold_to_indices.values()) - big_index_sets = [] - small_index_sets = [] - for index_set in index_sets: - if len(index_set) > val_size / 2 or len(index_set) > test_size / 2: - big_index_sets.append(index_set) - else: - small_index_sets.append(index_set) - random.seed(seed) - random.shuffle(big_index_sets) - random.shuffle(small_index_sets) - index_sets = big_index_sets + small_index_sets - else: # Sort from largest to smallest scaffold sets - index_sets = sorted(list(scaffold_to_indices.values()), - key=lambda index_set: len(index_set), - reverse=True) - - for index_set in index_sets: - if len(train) + len(index_set) <= train_size: - train += index_set - train_scaffold_count += 1 - elif len(val) + len(index_set) <= val_size: - val += index_set - val_scaffold_count += 1 - else: - test += index_set - test_scaffold_count += 1 - - if logger is not None: - logger.debug(f'Total scaffolds = {len(scaffold_to_indices):,} | ' - f'train scaffolds = {train_scaffold_count:,} | ' - f'val scaffolds = {val_scaffold_count:,} | ' - f'test scaffolds = {test_scaffold_count:,}') - - if logger is not None: - log_scaffold_stats(data, index_sets, logger=logger) - - # Map from indices to data - train = [data[i] for i in train] - val = [data[i] for i in val] - test = [data[i] for i in test] - - return MoleculeDataset(train), MoleculeDataset(val), MoleculeDataset(test) - - -def log_scaffold_stats(data: MoleculeDataset, - index_sets: List[Set[int]], - num_scaffolds: int = 10, - num_labels: int = 20, - logger: logging.Logger = None) -> List[Tuple[List[float], List[int]]]: - """ - Logs and returns statistics about counts and average target values in molecular scaffolds. - - :param data: A :class:`~chemprop.data.MoleculeDataset`. - :param index_sets: A list of sets of indices representing splits of the data. - :param num_scaffolds: The number of scaffolds about which to display statistics. - :param num_labels: The number of labels about which to display statistics. - :param logger: A logger for recording output. - :return: A list of tuples where each tuple contains a list of average target values - across the first :code:`num_labels` labels and a list of the number of non-zero values for - the first :code:`num_scaffolds` scaffolds, sorted in decreasing order of scaffold frequency. - """ - if logger is not None: - logger.debug('Label averages per scaffold, in decreasing order of scaffold frequency,' - f'capped at {num_scaffolds} scaffolds and {num_labels} labels:') - - stats = [] - index_sets = sorted(index_sets, key=lambda idx_set: len(idx_set), reverse=True) - for scaffold_num, index_set in enumerate(index_sets[:num_scaffolds]): - data_set = [data[i] for i in index_set] - targets = np.array([d.targets for d in data_set], dtype=np.float) - - with warnings.catch_warnings(): # Likely warning of empty slice of target has no values besides NaN - warnings.simplefilter('ignore', category=RuntimeWarning) - target_avgs = np.nanmean(targets, axis=0)[:num_labels] - - counts = np.count_nonzero(~np.isnan(targets), axis=0)[:num_labels] - stats.append((target_avgs, counts)) - - if logger is not None: - logger.debug(f'Scaffold {scaffold_num}') - for task_num, (target_avg, count) in enumerate(zip(target_avgs, counts)): - logger.debug(f'Task {task_num}: count = {count:,} | target average = {target_avg:.6f}') - logger.debug('\n') - - return stats diff --git a/chemprop/data/scaler.py b/chemprop/data/scaler.py deleted file mode 100644 index 3dd661d27..000000000 --- a/chemprop/data/scaler.py +++ /dev/null @@ -1,63 +0,0 @@ -from typing import Any, List, Optional - -import numpy as np - - -class StandardScaler: - """A :class:`StandardScaler` normalizes the features of a dataset. - - When it is fit on a dataset, the :class:`StandardScaler` learns the mean and standard deviation across the 0th axis. - When transforming a dataset, the :class:`StandardScaler` subtracts the means and divides by the standard deviations. - """ - - def __init__(self, means: np.ndarray = None, stds: np.ndarray = None, replace_nan_token: Any = None): - """ - :param means: An optional 1D numpy array of precomputed means. - :param stds: An optional 1D numpy array of precomputed standard deviations. - :param replace_nan_token: A token to use to replace NaN entries in the features. - """ - self.means = means - self.stds = stds - self.replace_nan_token = replace_nan_token - - def fit(self, X: List[List[Optional[float]]]) -> 'StandardScaler': - """ - Learns means and standard deviations across the 0th axis of the data :code:`X`. - - :param X: A list of lists of floats (or None). - :return: The fitted :class:`StandardScaler` (self). - """ - X = np.array(X).astype(float) - self.means = np.nanmean(X, axis=0) - self.stds = np.nanstd(X, axis=0) - self.means = np.where(np.isnan(self.means), np.zeros(self.means.shape), self.means) - self.stds = np.where(np.isnan(self.stds), np.ones(self.stds.shape), self.stds) - self.stds = np.where(self.stds == 0, np.ones(self.stds.shape), self.stds) - - return self - - def transform(self, X: List[List[Optional[float]]]) -> np.ndarray: - """ - Transforms the data by subtracting the means and dividing by the standard deviations. - - :param X: A list of lists of floats (or None). - :return: The transformed data with NaNs replaced by :code:`self.replace_nan_token`. - """ - X = np.array(X).astype(float) - transformed_with_nan = (X - self.means) / self.stds - transformed_with_none = np.where(np.isnan(transformed_with_nan), self.replace_nan_token, transformed_with_nan) - - return transformed_with_none - - def inverse_transform(self, X: List[List[Optional[float]]]) -> np.ndarray: - """ - Performs the inverse transformation by multiplying by the standard deviations and adding the means. - - :param X: A list of lists of floats. - :return: The inverse transformed data with NaNs replaced by :code:`self.replace_nan_token`. - """ - X = np.array(X).astype(float) - transformed_with_nan = X * self.stds + self.means - transformed_with_none = np.where(np.isnan(transformed_with_nan), self.replace_nan_token, transformed_with_nan) - - return transformed_with_none diff --git a/chemprop/data/splitting.py b/chemprop/data/splitting.py new file mode 100644 index 000000000..7319ab1fd --- /dev/null +++ b/chemprop/data/splitting.py @@ -0,0 +1,257 @@ +import copy +import logging +from enum import auto +from collections.abc import Sequence, Iterable +import numpy as np +from astartes import train_test_split, train_val_test_split +from astartes.molecules import train_test_split_molecules, train_val_test_split_molecules +from rdkit import Chem + +from chemprop.data.datapoints import MoleculeDatapoint, ReactionDatapoint +from chemprop.utils.utils import EnumMapping + +logger = logging.getLogger(__name__) + +Datapoints = Sequence[MoleculeDatapoint] | Sequence[ReactionDatapoint] +MulticomponentDatapoints = Sequence[Datapoints] + + +class SplitType(EnumMapping): + CV_NO_VAL = auto() + CV = auto() + SCAFFOLD_BALANCED = auto() + RANDOM_WITH_REPEATED_SMILES = auto() + RANDOM = auto() + KENNARD_STONE = auto() + KMEANS = auto() + + +def make_split_indices( + mols: Sequence[Chem.Mol], + split: SplitType | str = "random", + sizes: tuple[float, float, float] = (0.8, 0.1, 0.1), + seed: int = 0, + num_folds: int = 1, +): + """Splits data into training, validation, and test splits. + + Parameters + ---------- + mols : Sequence[Chem.Mol] + Sequence of RDKit molecules to use for structure based splitting + split : SplitType | str, optional + Split type, one of ~chemprop.data.utils.SplitType, by default "random" + sizes : tuple[float, float, float], optional + 3-tuple with the proportions of data in the train, validation, and test sets, by default + (0.8, 0.1, 0.1). Set the middle value to 0 for a two way split. + seed : int, optional + The random seed passed to astartes, by default 0 + num_folds : int, optional + Number of folds to create (only needed for "cv" and "cv-no-test"), by default 1 + + Returns + ------- + tuple[list[int], list[int], list[int]] | tuple[list[list[int], ...], list[list[int], ...], list[list[int], ...]] + A tuple of list of indices corresponding to the train, validation, and test splits of the + data. If the split type is "cv" or "cv-no-test", returns a tuple of lists of lists of + indices corresponding to the train, validation, and test splits of each fold. + .. important:: + validation may or may not be present + + Raises + ------ + ValueError + Requested split sizes tuple not of length 3 + ValueError + Innapropriate number of folds requested + ValueError + Unsupported split method requested + """ + if (num_splits := len(sizes)) != 3: + raise ValueError( + f"Specify sizes for train, validation, and test (got {num_splits} values)." + ) + # typically include a validation set + include_val = True + split_fun = train_val_test_split + mol_split_fun = train_val_test_split_molecules + # default sampling arguments for astartes sampler + astartes_kwargs = dict( + train_size=sizes[0], test_size=sizes[2], return_indices=True, random_state=seed + ) + # if no validation set, reassign the splitting functions + if sizes[1] == 0.0: + include_val = False + split_fun = train_test_split + mol_split_fun = train_test_split_molecules + else: + astartes_kwargs["val_size"] = sizes[1] + + n_datapoints = len(mols) + train, val, test = None, None, None + match SplitType.get(split): + case SplitType.CV_NO_VAL | SplitType.CV: + min_folds = 2 if SplitType.get(split) == SplitType.CV_NO_VAL else 3 + if not (min_folds <= num_folds <= n_datapoints): + raise ValueError( + f"invalid number of folds requested! got: {num_folds}, but expected between " + f"{min_folds} and {n_datapoints} (i.e., number of datapoints), inclusive, " + f"for split type: {repr(split)}" + ) + + # returns nested lists of indices + train, val, test = [], [], [] + random = np.random.default_rng(seed) + + indices = np.tile(np.arange(num_folds), 1 + n_datapoints // num_folds)[:n_datapoints] + random.shuffle(indices) + + for fold_idx in range(num_folds): + test_index = fold_idx + val_index = (fold_idx + 1) % num_folds + + if split != SplitType.CV_NO_VAL: + i_val = np.where(indices == val_index)[0] + i_test = np.where(indices == test_index)[0] + i_train = np.where((indices != val_index) & (indices != test_index))[0] + else: + i_val = [] + i_test = np.where(indices == test_index)[0] + i_train = np.where(indices != test_index)[0] + + train.append(i_train) + val.append(i_val) + test.append(i_test) + + case SplitType.SCAFFOLD_BALANCED: + mols_without_atommaps = [] + for mol in mols: + copied_mol = copy.deepcopy(mol) + for atom in copied_mol.GetAtoms(): + atom.SetAtomMapNum(0) + mols_without_atommaps.append(copied_mol) + result = mol_split_fun( + np.array(mols_without_atommaps), sampler="scaffold", **astartes_kwargs + ) + train, val, test = _unpack_astartes_result(result, include_val) + + # Use to constrain data with the same smiles go in the same split. + case SplitType.RANDOM_WITH_REPEATED_SMILES: + # get two arrays: one of all the smiles strings, one of just the unique + all_smiles = np.array([Chem.MolToSmiles(mol) for mol in mols]) + unique_smiles = np.unique(all_smiles) + + # save a mapping of smiles -> all the indices that it appeared at + smiles_indices = {} + for smiles in unique_smiles: + smiles_indices[smiles] = np.where(all_smiles == smiles)[0].tolist() + + # randomly split the unique smiles + result = split_fun(np.arange(len(unique_smiles)), sampler="random", **astartes_kwargs) + train_idxs, val_idxs, test_idxs = _unpack_astartes_result(result, include_val) + + # convert these to the 'actual' indices from the original list using the dict we made + train = sum((smiles_indices[unique_smiles[i]] for i in train_idxs), []) + val = sum((smiles_indices[unique_smiles[j]] for j in val_idxs), []) + test = sum((smiles_indices[unique_smiles[k]] for k in test_idxs), []) + + case SplitType.RANDOM: + result = split_fun(np.arange(n_datapoints), sampler="random", **astartes_kwargs) + train, val, test = _unpack_astartes_result(result, include_val) + + case SplitType.KENNARD_STONE: + result = mol_split_fun( + np.array(mols), + sampler="kennard_stone", + hopts=dict(metric="jaccard"), + fingerprint="morgan_fingerprint", + fprints_hopts=dict(n_bits=2048), + **astartes_kwargs, + ) + train, val, test = _unpack_astartes_result(result, include_val) + + case SplitType.KMEANS: + result = mol_split_fun( + np.array(mols), + sampler="kmeans", + hopts=dict(metric="jaccard"), + fingerprint="morgan_fingerprint", + fprints_hopts=dict(n_bits=2048), + **astartes_kwargs, + ) + train, val, test = _unpack_astartes_result(result, include_val) + + case _: + raise RuntimeError("Unreachable code reached!") + + return train, val, test + + +def _unpack_astartes_result( + result: tuple, include_val: bool +) -> tuple[list[list[int]], list[list[int]], list[list[int]]]: + """Helper function to partition input data based on output of astartes sampler + + Parameters + ----------- + result: tuple + Output from call to astartes containing the split indices + include_val: bool + True if a validation set is included, False otherwise. + + Returns + --------- + train: list[int] + val: list[int] + .. important:: + validation possibly empty + test: list[int] + """ + train_idxs, val_idxs, test_idxs = [], [], [] + # astartes returns a set of lists containing the data, clusters (if applicable) + # and indices (always last), so we pull out the indices + if include_val: + train_idxs, val_idxs, test_idxs = result[-3], result[-2], result[-1] + else: + train_idxs, test_idxs = result[-2], result[-1] + return list(train_idxs), list(val_idxs), list(test_idxs) + + +def split_data_by_indices( + data: Datapoints | MulticomponentDatapoints, + train_indices: Iterable[Iterable[int]] | Iterable[int] | None = None, + val_indices: Iterable[Iterable[int]] | Iterable[int] | None = None, + test_indices: Iterable[Iterable[int]] | Iterable[int] | None = None, +): + """Splits data into training, validation, and test groups based on split indices given.""" + + train_data = _splitter_helper(data, train_indices) if train_indices is not None else None + val_data = _splitter_helper(data, val_indices) if val_indices is not None else None + test_data = _splitter_helper(data, test_indices) if test_indices is not None else None + + return train_data, val_data, test_data + + +def _splitter_helper(data, indices): + nested_component = not isinstance(data[0], (MoleculeDatapoint, ReactionDatapoint)) + nested_split = isinstance(indices[0], Iterable) + + match (nested_component, nested_split): + case (False, False): + datapoints = data + idxs = indices + return [datapoints[idx] for idx in idxs] + case (False, True): + datapoints = data + idxss = indices + return [[datapoints[idx] for idx in idxs] for idxs in idxss] + case (True, False): + datapointss = data + idxs = indices + return [[datapoints[idx] for idx in idxs] for datapoints in datapointss] + case (True, True): + datapointss = data + idxss = indices + return [ + [[datapoints[idx] for idx in idxs] for datapoints in datapointss] for idxs in idxss + ] diff --git a/chemprop/data/utils.py b/chemprop/data/utils.py deleted file mode 100644 index 5561063f0..000000000 --- a/chemprop/data/utils.py +++ /dev/null @@ -1,768 +0,0 @@ -from collections import OrderedDict, defaultdict -import csv -from logging import Logger -import pickle -from random import Random -from typing import List, Set, Tuple, Union -import os - -from rdkit import Chem -import numpy as np -from tqdm import tqdm - -from .data import MoleculeDatapoint, MoleculeDataset, make_mols -from .scaffold import log_scaffold_stats, scaffold_split -from chemprop.args import PredictArgs, TrainArgs -from chemprop.features import load_features, load_valid_atom_or_bond_features, is_mol - -def get_header(path: str) -> List[str]: - """ - Returns the header of a data CSV file. - - :param path: Path to a CSV file. - :return: A list of strings containing the strings in the comma-separated header. - """ - with open(path) as f: - header = next(csv.reader(f)) - - return header - - -def preprocess_smiles_columns(path: str, - smiles_columns: Union[str, List[str]] = None, - number_of_molecules: int = 1) -> List[str]: - """ - Preprocesses the :code:`smiles_columns` variable to ensure that it is a list of column - headings corresponding to the columns in the data file holding SMILES. Assumes file has a header. - - :param path: Path to a CSV file. - :param smiles_columns: The names of the columns containing SMILES. - By default, uses the first :code:`number_of_molecules` columns. - :param number_of_molecules: The number of molecules with associated SMILES for each - data point. - :return: The preprocessed version of :code:`smiles_columns` which is guaranteed to be a list. - """ - - if smiles_columns is None: - if os.path.isfile(path): - columns = get_header(path) - smiles_columns = columns[:number_of_molecules] - else: - smiles_columns = [None]*number_of_molecules - else: - if not isinstance(smiles_columns,list): - smiles_columns=[smiles_columns] - if os.path.isfile(path): - columns = get_header(path) - if len(smiles_columns) != number_of_molecules: - raise ValueError('Length of smiles_columns must match number_of_molecules.') - if any([smiles not in columns for smiles in smiles_columns]): - raise ValueError('Provided smiles_columns do not match the header of data file.') - - return smiles_columns - - -def get_task_names(path: str, - smiles_columns: Union[str, List[str]] = None, - target_columns: List[str] = None, - ignore_columns: List[str] = None) -> List[str]: - """ - Gets the task names from a data CSV file. - - If :code:`target_columns` is provided, returns `target_columns`. - Otherwise, returns all columns except the :code:`smiles_columns` - (or the first column, if the :code:`smiles_columns` is None) and - the :code:`ignore_columns`. - - :param path: Path to a CSV file. - :param smiles_columns: The names of the columns containing SMILES. - By default, uses the first :code:`number_of_molecules` columns. - :param target_columns: Name of the columns containing target values. By default, uses all columns - except the :code:`smiles_columns` and the :code:`ignore_columns`. - :param ignore_columns: Name of the columns to ignore when :code:`target_columns` is not provided. - :return: A list of task names. - """ - if target_columns is not None: - return target_columns - - columns = get_header(path) - - if not isinstance(smiles_columns, list): - smiles_columns = preprocess_smiles_columns(path=path, smiles_columns=smiles_columns) - - ignore_columns = set(smiles_columns + ([] if ignore_columns is None else ignore_columns)) - - target_names = [column for column in columns if column not in ignore_columns] - - return target_names - - -def get_data_weights(path: str) -> List[float]: - """ - Returns the list of data weights for the loss function as stored in a CSV file. - - :param path: Path to a CSV file. - :return: A list of floats containing the data weights. - """ - weights = [] - with open(path) as f: - reader=csv.reader(f) - next(reader) #skip header row - for line in reader: - weights.append(float(line[0])) - # normalize the data weights - avg_weight=sum(weights)/len(weights) - weights = [w/avg_weight for w in weights] - if min(weights) < 0: - raise ValueError('Data weights must be non-negative for each datapoint.') - return weights - - -def get_smiles(path: str, - smiles_columns: Union[str, List[str]] = None, - number_of_molecules: int = 1, - header: bool = True, - flatten: bool = False - ) -> Union[List[str], List[List[str]]]: - """ - Returns the SMILES from a data CSV file. - - :param path: Path to a CSV file. - :param smiles_columns: A list of the names of the columns containing SMILES. - By default, uses the first :code:`number_of_molecules` columns. - :param number_of_molecules: The number of molecules for each data point. Not necessary if - the names of smiles columns are previously processed. - :param header: Whether the CSV file contains a header. - :param flatten: Whether to flatten the returned SMILES to a list instead of a list of lists. - :return: A list of SMILES or a list of lists of SMILES, depending on :code:`flatten`. - """ - if smiles_columns is not None and not header: - raise ValueError('If smiles_column is provided, the CSV file must have a header.') - - if not isinstance(smiles_columns, list) and header: - smiles_columns = preprocess_smiles_columns(path=path, smiles_columns=smiles_columns, number_of_molecules=number_of_molecules) - - with open(path) as f: - if header: - reader = csv.DictReader(f) - else: - reader = csv.reader(f) - smiles_columns = list(range(number_of_molecules)) - - smiles = [[row[c] for c in smiles_columns] for row in reader] - - if flatten: - smiles = [smile for smiles_list in smiles for smile in smiles_list] - - return smiles - - -def filter_invalid_smiles(data: MoleculeDataset) -> MoleculeDataset: - """ - Filters out invalid SMILES. - - :param data: A :class:`~chemprop.data.MoleculeDataset`. - :return: A :class:`~chemprop.data.MoleculeDataset` with only the valid molecules. - """ - return MoleculeDataset([datapoint for datapoint in tqdm(data) - if all(s != '' for s in datapoint.smiles) and all(m is not None for m in datapoint.mol) - and all(m.GetNumHeavyAtoms() > 0 for m in datapoint.mol if not isinstance(m, tuple)) - and all(m[0].GetNumHeavyAtoms() + m[1].GetNumHeavyAtoms() > 0 for m in datapoint.mol if isinstance(m, tuple))]) - - -def get_invalid_smiles_from_file(path: str = None, - smiles_columns: Union[str, List[str]] = None, - header: bool = True, - reaction: bool = False, - ) -> Union[List[str], List[List[str]]]: - """ - Returns the invalid SMILES from a data CSV file. - - :param path: Path to a CSV file. - :param smiles_columns: A list of the names of the columns containing SMILES. - By default, uses the first :code:`number_of_molecules` columns. - :param header: Whether the CSV file contains a header. - :param reaction: Boolean whether the SMILES strings are to be treated as a reaction. - :return: A list of lists of SMILES, for the invalid SMILES in the file. - """ - smiles = get_smiles(path=path, smiles_columns=smiles_columns, header=header) - - invalid_smiles = get_invalid_smiles_from_list(smiles=smiles, reaction=reaction) - - return invalid_smiles - - -def get_invalid_smiles_from_list(smiles: List[List[str]], reaction: bool = False) -> List[List[str]]: - """ - Returns the invalid SMILES from a list of lists of SMILES strings. - - :param smiles: A list of list of SMILES. - :param reaction: Boolean whether the SMILES strings are to be treated as a reaction. - :return: A list of lists of SMILES, for the invalid SMILES among the lists provided. - """ - invalid_smiles = [] - - # If the first SMILES in the column is a molecule, the remaining SMILES in the same column should all be a molecule. - # Similarly, if the first SMILES in the column is a reaction, the remaining SMILES in the same column should all - # correspond to reaction. Therefore, get `is_mol_list` only using the first element in smiles. - is_mol_list = [is_mol(s) for s in smiles[0]] - is_reaction_list = [True if not x and reaction else False for x in is_mol_list] - is_explicit_h_list = [False for x in is_mol_list] # set this to False as it is not needed for invalid SMILES check - is_adding_hs_list = [False for x in is_mol_list] # set this to False as it is not needed for invalid SMILES check - - for mol_smiles in smiles: - mols = make_mols(smiles=mol_smiles, reaction_list=is_reaction_list, keep_h_list=is_explicit_h_list, - add_h_list=is_adding_hs_list) - if any(s == '' for s in mol_smiles) or \ - any(m is None for m in mols) or \ - any(m.GetNumHeavyAtoms() == 0 for m in mols if not isinstance(m, tuple)) or \ - any(m[0].GetNumHeavyAtoms() + m[1].GetNumHeavyAtoms() == 0 for m in mols if isinstance(m, tuple)): - - invalid_smiles.append(mol_smiles) - - return invalid_smiles - - -def get_data(path: str, - smiles_columns: Union[str, List[str]] = None, - target_columns: List[str] = None, - ignore_columns: List[str] = None, - skip_invalid_smiles: bool = True, - args: Union[TrainArgs, PredictArgs] = None, - data_weights_path: str = None, - features_path: List[str] = None, - features_generator: List[str] = None, - phase_features_path: str = None, - atom_descriptors_path: str = None, - bond_features_path: str = None, - max_data_size: int = None, - store_row: bool = False, - logger: Logger = None, - loss_function: str = None, - skip_none_targets: bool = False) -> MoleculeDataset: - """ - Gets SMILES and target values from a CSV file. - - :param path: Path to a CSV file. - :param smiles_columns: The names of the columns containing SMILES. - By default, uses the first :code:`number_of_molecules` columns. - :param target_columns: Name of the columns containing target values. By default, uses all columns - except the :code:`smiles_column` and the :code:`ignore_columns`. - :param ignore_columns: Name of the columns to ignore when :code:`target_columns` is not provided. - :param skip_invalid_smiles: Whether to skip and filter out invalid smiles using :func:`filter_invalid_smiles`. - :param args: Arguments, either :class:`~chemprop.args.TrainArgs` or :class:`~chemprop.args.PredictArgs`. - :param data_weights_path: A path to a file containing weights for each molecule in the loss function. - :param features_path: A list of paths to files containing features. If provided, it is used - in place of :code:`args.features_path`. - :param features_generator: A list of features generators to use. If provided, it is used - in place of :code:`args.features_generator`. - :param phase_features_path: A path to a file containing phase features as applicable to spectra. - :param atom_descriptors_path: The path to the file containing the custom atom descriptors. - :param bond_features_path: The path to the file containing the custom bond features. - :param max_data_size: The maximum number of data points to load. - :param logger: A logger for recording output. - :param store_row: Whether to store the raw CSV row in each :class:`~chemprop.data.data.MoleculeDatapoint`. - :param skip_none_targets: Whether to skip targets that are all 'None'. This is mostly relevant when --target_columns - are passed in, so only a subset of tasks are examined. - :param loss_function: The loss function to be used in training. - :return: A :class:`~chemprop.data.MoleculeDataset` containing SMILES and target values along - with other info such as additional features when desired. - """ - debug = logger.debug if logger is not None else print - - if args is not None: - # Prefer explicit function arguments but default to args if not provided - smiles_columns = smiles_columns if smiles_columns is not None else args.smiles_columns - target_columns = target_columns if target_columns is not None else args.target_columns - ignore_columns = ignore_columns if ignore_columns is not None else args.ignore_columns - features_path = features_path if features_path is not None else args.features_path - features_generator = features_generator if features_generator is not None else args.features_generator - phase_features_path = phase_features_path if phase_features_path is not None else args.phase_features_path - atom_descriptors_path = atom_descriptors_path if atom_descriptors_path is not None \ - else args.atom_descriptors_path - bond_features_path = bond_features_path if bond_features_path is not None \ - else args.bond_features_path - max_data_size = max_data_size if max_data_size is not None else args.max_data_size - loss_function = loss_function if loss_function is not None else args.loss_function - - if not isinstance(smiles_columns, list): - smiles_columns = preprocess_smiles_columns(path=path, smiles_columns=smiles_columns) - - max_data_size = max_data_size or float('inf') - - # Load features - if features_path is not None: - features_data = [] - for feat_path in features_path: - features_data.append(load_features(feat_path)) # each is num_data x num_features - features_data = np.concatenate(features_data, axis=1) - else: - features_data = None - - if phase_features_path is not None: - phase_features = load_features(phase_features_path) - for d_phase in phase_features: - if not (d_phase.sum() == 1 and np.count_nonzero(d_phase) == 1): - raise ValueError('Phase features must be one-hot encoded.') - if features_data is not None: - features_data = np.concatenate((features_data,phase_features), axis=1) - else: # if there are no other molecular features, phase features become the only molecular features - features_data = np.array(phase_features) - else: - phase_features = None - - # Load data weights - if data_weights_path is not None: - data_weights = get_data_weights(data_weights_path) - else: - data_weights = None - - # By default, the targets columns are all the columns except the SMILES column - if target_columns is None: - target_columns = get_task_names( - path=path, - smiles_columns=smiles_columns, - target_columns=target_columns, - ignore_columns=ignore_columns, - ) - - # Find targets provided as inequalities - if loss_function == 'bounded_mse': - gt_targets, lt_targets = get_inequality_targets(path=path, target_columns=target_columns) - else: - gt_targets, lt_targets = None, None - - # Load data - with open(path) as f: - reader = csv.DictReader(f) - fieldnames = reader.fieldnames - if any([c not in fieldnames for c in smiles_columns]): - raise ValueError(f'Data file did not contain all provided smiles columns: {smiles_columns}. Data file field names are: {fieldnames}') - if any([c not in fieldnames for c in target_columns]): - raise ValueError(f'Data file did not contain all provided target columns: {target_columns}. Data file field names are: {fieldnames}') - - all_smiles, all_targets, all_rows, all_features, all_phase_features, all_weights, all_gt, all_lt = [], [], [], [], [], [], [], [] - for i, row in enumerate(tqdm(reader)): - smiles = [row[c] for c in smiles_columns] - - targets = [] - for column in target_columns: - value = row[column] - if value in ['','nan']: - targets.append(None) - elif '>' in value or '<' in value: - if loss_function == 'bounded_mse': - targets.append(float(value.strip('<>'))) - else: - raise ValueError('Inequality found in target data. To use inequality targets (> or <), the regression loss function bounded_mse must be used.') - else: - targets.append(float(value)) - - # Check whether all targets are None and skip if so - if skip_none_targets and all(x is None for x in targets): - continue - - all_smiles.append(smiles) - all_targets.append(targets) - - if features_data is not None: - all_features.append(features_data[i]) - - if phase_features is not None: - all_phase_features.append(phase_features[i]) - - if data_weights is not None: - all_weights.append(data_weights[i]) - - if gt_targets is not None: - all_gt.append(gt_targets[i]) - - if lt_targets is not None: - all_lt.append(lt_targets[i]) - - if store_row: - all_rows.append(row) - - if len(all_smiles) >= max_data_size: - break - - atom_features = None - atom_descriptors = None - if args is not None and args.atom_descriptors is not None: - try: - descriptors = load_valid_atom_or_bond_features(atom_descriptors_path, [x[0] for x in all_smiles]) - except Exception as e: - raise ValueError(f'Failed to load or validate custom atomic descriptors or features: {e}') - - if args.atom_descriptors == 'feature': - atom_features = descriptors - elif args.atom_descriptors == 'descriptor': - atom_descriptors = descriptors - - bond_features = None - if args is not None and args.bond_features_path is not None: - try: - bond_features = load_valid_atom_or_bond_features(bond_features_path, [x[0] for x in all_smiles]) - except Exception as e: - raise ValueError(f'Failed to load or validate custom bond features: {e}') - - data = MoleculeDataset([ - MoleculeDatapoint( - smiles=smiles, - targets=targets, - row=all_rows[i] if store_row else None, - data_weight=all_weights[i] if data_weights is not None else None, - gt_targets=all_gt[i] if gt_targets is not None else None, - lt_targets=all_lt[i] if lt_targets is not None else None, - features_generator=features_generator, - features=all_features[i] if features_data is not None else None, - phase_features=all_phase_features[i] if phase_features is not None else None, - atom_features=atom_features[i] if atom_features is not None else None, - atom_descriptors=atom_descriptors[i] if atom_descriptors is not None else None, - bond_features=bond_features[i] if bond_features is not None else None, - overwrite_default_atom_features=args.overwrite_default_atom_features if args is not None else False, - overwrite_default_bond_features=args.overwrite_default_bond_features if args is not None else False - ) for i, (smiles, targets) in tqdm(enumerate(zip(all_smiles, all_targets)), - total=len(all_smiles)) - ]) - - # Filter out invalid SMILES - if skip_invalid_smiles: - original_data_len = len(data) - data = filter_invalid_smiles(data) - - if len(data) < original_data_len: - debug(f'Warning: {original_data_len - len(data)} SMILES are invalid.') - - return data - - -def get_data_from_smiles(smiles: List[List[str]], - skip_invalid_smiles: bool = True, - logger: Logger = None, - features_generator: List[str] = None) -> MoleculeDataset: - """ - Converts a list of SMILES to a :class:`~chemprop.data.MoleculeDataset`. - - :param smiles: A list of lists of SMILES with length depending on the number of molecules. - :param skip_invalid_smiles: Whether to skip and filter out invalid smiles using :func:`filter_invalid_smiles` - :param logger: A logger for recording output. - :param features_generator: List of features generators. - :return: A :class:`~chemprop.data.MoleculeDataset` with all of the provided SMILES. - """ - debug = logger.debug if logger is not None else print - - data = MoleculeDataset([ - MoleculeDatapoint( - smiles=smile, - row=OrderedDict({'smiles': smile}), - features_generator=features_generator - ) for smile in smiles - ]) - - # Filter out invalid SMILES - if skip_invalid_smiles: - original_data_len = len(data) - data = filter_invalid_smiles(data) - - if len(data) < original_data_len: - debug(f'Warning: {original_data_len - len(data)} SMILES are invalid.') - - return data - - -def get_inequality_targets(path: str, target_columns: List[str] = None) -> List[str]: - """ - - """ - gt_targets = [] - lt_targets = [] - - with open(path) as f: - reader = csv.DictReader(f) - for line in reader: - values = [line[col] for col in target_columns] - gt_targets.append(['>' in val for val in values]) - lt_targets.append(['<' in val for val in values]) - if any(['<' in val and '>' in val for val in values]): - raise ValueError(f'A target value in csv file {path} contains both ">" and "<" symbols. Inequality targets must be on one edge and not express a range.') - - return gt_targets, lt_targets - - -def split_data(data: MoleculeDataset, - split_type: str = 'random', - sizes: Tuple[float, float, float] = (0.8, 0.1, 0.1), - key_molecule_index: int = 0, - seed: int = 0, - num_folds: int = 1, - args: TrainArgs = None, - logger: Logger = None) -> Tuple[MoleculeDataset, - MoleculeDataset, - MoleculeDataset]: - r""" - Splits data into training, validation, and test splits. - - :param data: A :class:`~chemprop.data.MoleculeDataset`. - :param split_type: Split type. - :param sizes: A length-3 tuple with the proportions of data in the train, validation, and test sets. - :param key_molecule_index: For data with multiple molecules, this sets which molecule will be considered during splitting. - :param seed: The random seed to use before shuffling data. - :param num_folds: Number of folds to create (only needed for "cv" split type). - :param args: A :class:`~chemprop.args.TrainArgs` object. - :param logger: A logger for recording output. - :return: A tuple of :class:`~chemprop.data.MoleculeDataset`\ s containing the train, - validation, and test splits of the data. - """ - if not (len(sizes) == 3 and np.isclose(sum(sizes), 1)): - raise ValueError(f"Invalid train/val/test splits! got: {sizes}") - - random = Random(seed) - - if args is not None: - folds_file, val_fold_index, test_fold_index = \ - args.folds_file, args.val_fold_index, args.test_fold_index - else: - folds_file = val_fold_index = test_fold_index = None - - if split_type == 'crossval': - index_set = args.crossval_index_sets[args.seed] - data_split = [] - for split in range(3): - split_indices = [] - for index in index_set[split]: - with open(os.path.join(args.crossval_index_dir, f'{index}.pkl'), 'rb') as rf: - split_indices.extend(pickle.load(rf)) - data_split.append([data[i] for i in split_indices]) - train, val, test = tuple(data_split) - return MoleculeDataset(train), MoleculeDataset(val), MoleculeDataset(test) - - elif split_type in {'cv', 'cv-no-test'}: - if num_folds <= 1 or num_folds > len(data): - raise ValueError('Number of folds for cross-validation must be between 2 and len(data), inclusive.') - - random = Random(0) - - indices = np.repeat(np.arange(num_folds), 1 + len(data) // num_folds)[:len(data)] - random.shuffle(indices) - test_index = seed % num_folds - val_index = (seed + 1) % num_folds - - train, val, test = [], [], [] - for d, index in zip(data, indices): - if index == test_index and split_type != 'cv-no-test': - test.append(d) - elif index == val_index: - val.append(d) - else: - train.append(d) - - return MoleculeDataset(train), MoleculeDataset(val), MoleculeDataset(test) - - elif split_type == 'index_predetermined': - split_indices = args.crossval_index_sets[args.seed] - - if len(split_indices) != 3: - raise ValueError('Split indices must have three splits: train, validation, and test') - - data_split = [] - for split in range(3): - data_split.append([data[i] for i in split_indices[split]]) - train, val, test = tuple(data_split) - return MoleculeDataset(train), MoleculeDataset(val), MoleculeDataset(test) - - elif split_type == 'predetermined': - if not val_fold_index and sizes[2] != 0: - raise ValueError('Test size must be zero since test set is created separately ' - 'and we want to put all other data in train and validation') - - if folds_file is None: - raise ValueError('arg "folds_file" can not be None!') - if test_fold_index is None: - raise ValueError('arg "test_fold_index" can not be None!') - - try: - with open(folds_file, 'rb') as f: - all_fold_indices = pickle.load(f) - except UnicodeDecodeError: - with open(folds_file, 'rb') as f: - all_fold_indices = pickle.load(f, encoding='latin1') # in case we're loading indices from python2 - - log_scaffold_stats(data, all_fold_indices, logger=logger) - - folds = [[data[i] for i in fold_indices] for fold_indices in all_fold_indices] - - test = folds[test_fold_index] - if val_fold_index is not None: - val = folds[val_fold_index] - - train_val = [] - for i in range(len(folds)): - if i != test_fold_index and (val_fold_index is None or i != val_fold_index): - train_val.extend(folds[i]) - - if val_fold_index is not None: - train = train_val - else: - random.shuffle(train_val) - train_size = int(sizes[0] * len(train_val)) - train = train_val[:train_size] - val = train_val[train_size:] - - return MoleculeDataset(train), MoleculeDataset(val), MoleculeDataset(test) - - elif split_type == 'scaffold_balanced': - return scaffold_split(data, sizes=sizes, balanced=True, key_molecule_index=key_molecule_index, seed=seed, logger=logger) - - elif split_type == 'random_with_repeated_smiles': # Use to constrain data with the same smiles go in the same split. - smiles_dict=defaultdict(set) - for i,smiles in enumerate(data.smiles()): - smiles_dict[smiles[key_molecule_index]].add(i) - index_sets=list(smiles_dict.values()) - random.seed(seed) - random.shuffle(index_sets) - train,val,test=[],[],[] - train_size = int(sizes[0] * len(data)) - val_size = int(sizes[1] * len(data)) - for index_set in index_sets: - if len(train)+len(index_set) <= train_size: - train += index_set - elif len(val) + len(index_set) <= val_size: - val += index_set - else: - test += index_set - train = [data[i] for i in train] - val = [data[i] for i in val] - test = [data[i] for i in test] - - return MoleculeDataset(train), MoleculeDataset(val), MoleculeDataset(test) - - elif split_type == 'random': - indices = list(range(len(data))) - random.shuffle(indices) - - train_size = int(sizes[0] * len(data)) - train_val_size = int((sizes[0] + sizes[1]) * len(data)) - - train = [data[i] for i in indices[:train_size]] - val = [data[i] for i in indices[train_size:train_val_size]] - test = [data[i] for i in indices[train_val_size:]] - - return MoleculeDataset(train), MoleculeDataset(val), MoleculeDataset(test) - - else: - raise ValueError(f'split_type "{split_type}" not supported.') - - -def get_class_sizes(data: MoleculeDataset, proportion: bool = True) -> List[List[float]]: - """ - Determines the proportions of the different classes in a classification dataset. - - :param data: A classification :class:`~chemprop.data.MoleculeDataset`. - :param proportion: Choice of whether to return proportions for class size or counts. - :return: A list of lists of class proportions. Each inner list contains the class proportions for a task. - """ - targets = data.targets() - - # Filter out Nones - valid_targets = [[] for _ in range(data.num_tasks())] - for i in range(len(targets)): - for task_num in range(len(targets[i])): - if targets[i][task_num] is not None: - valid_targets[task_num].append(targets[i][task_num]) - - class_sizes = [] - for task_targets in valid_targets: - if set(np.unique(task_targets)) > {0, 1}: - raise ValueError('Classification dataset must only contains 0s and 1s.') - if proportion: - try: - ones = np.count_nonzero(task_targets) / len(task_targets) - except ZeroDivisionError: - ones = float('nan') - print('Warning: class has no targets') - class_sizes.append([1 - ones, ones]) - else: # counts - ones = np.count_nonzero(task_targets) - class_sizes.append([len(task_targets) - ones, ones]) - - return class_sizes - - -# TODO: Validate multiclass dataset type. -def validate_dataset_type(data: MoleculeDataset, dataset_type: str) -> None: - """ - Validates the dataset type to ensure the data matches the provided type. - - :param data: A :class:`~chemprop.data.MoleculeDataset`. - :param dataset_type: The dataset type to check. - """ - target_set = {target for targets in data.targets() for target in targets} - {None} - classification_target_set = {0, 1} - - if dataset_type == 'classification' and not (target_set <= classification_target_set): - raise ValueError('Classification data targets must only be 0 or 1 (or None). ' - 'Please switch to regression.') - elif dataset_type == 'regression' and target_set <= classification_target_set: - raise ValueError('Regression data targets must be more than just 0 or 1 (or None). ' - 'Please switch to classification.') - - -def validate_data(data_path: str) -> Set[str]: - """ - Validates a data CSV file, returning a set of errors. - - :param data_path: Path to a data CSV file. - :return: A set of error messages. - """ - errors = set() - - header = get_header(data_path) - - with open(data_path) as f: - reader = csv.reader(f) - next(reader) # Skip header - - smiles, targets = [], [] - for line in reader: - smiles.append(line[0]) - targets.append(line[1:]) - - # Validate header - if len(header) == 0: - errors.add('Empty header') - elif len(header) < 2: - errors.add('Header must include task names.') - - mol = Chem.MolFromSmiles(header[0]) - if mol is not None: - errors.add('First row is a SMILES string instead of a header.') - - # Validate smiles - for smile in tqdm(smiles, total=len(smiles)): - mol = Chem.MolFromSmiles(smile) - if mol is None: - errors.add('Data includes an invalid SMILES.') - - # Validate targets - num_tasks_set = set(len(mol_targets) for mol_targets in targets) - if len(num_tasks_set) != 1: - errors.add('Inconsistent number of tasks for each molecule.') - - if len(num_tasks_set) == 1: - num_tasks = num_tasks_set.pop() - if num_tasks != len(header) - 1: - errors.add('Number of tasks for each molecule doesn\'t match number of tasks in header.') - - unique_targets = set(np.unique([target for mol_targets in targets for target in mol_targets])) - - if unique_targets <= {''}: - errors.add('All targets are missing.') - - for target in unique_targets - {''}: - try: - float(target) - except ValueError: - errors.add('Found a target which is not a number.') - - return errors diff --git a/chemprop/exceptions.py b/chemprop/exceptions.py new file mode 100644 index 000000000..61ecab7df --- /dev/null +++ b/chemprop/exceptions.py @@ -0,0 +1,12 @@ +from typing import Iterable + +from chemprop.utils import pretty_shape + + +class InvalidShapeError(ValueError): + def __init__(self, var_name: str, received: Iterable[int], expected: Iterable[int]): + message = ( + f"arg '{var_name}' has incorrect shape! " + f"got: `{pretty_shape(received)}`. expected: `{pretty_shape(expected)}`" + ) + super().__init__(message) diff --git a/chemprop/features/__init__.py b/chemprop/features/__init__.py deleted file mode 100644 index f09f3a26f..000000000 --- a/chemprop/features/__init__.py +++ /dev/null @@ -1,37 +0,0 @@ -from .features_generators import get_available_features_generators, get_features_generator, \ - morgan_binary_features_generator, morgan_counts_features_generator, rdkit_2d_features_generator, \ - rdkit_2d_normalized_features_generator, register_features_generator -from .featurization import atom_features, bond_features, BatchMolGraph, get_atom_fdim, get_bond_fdim, mol2graph, \ - MolGraph, onek_encoding_unk, set_extra_atom_fdim, set_extra_bond_fdim, set_reaction, set_explicit_h, \ - set_adding_hs, is_reaction, is_explicit_h, is_adding_hs, is_mol, reset_featurization_parameters -from .utils import load_features, save_features, load_valid_atom_or_bond_features - -__all__ = [ - 'get_available_features_generators', - 'get_features_generator', - 'morgan_binary_features_generator', - 'morgan_counts_features_generator', - 'rdkit_2d_features_generator', - 'rdkit_2d_normalized_features_generator', - 'atom_features', - 'bond_features', - 'BatchMolGraph', - 'get_atom_fdim', - 'set_extra_atom_fdim', - 'get_bond_fdim', - 'set_extra_bond_fdim', - 'set_explicit_h', - 'set_adding_hs', - 'set_reaction', - 'is_reaction', - 'is_explicit_h', - 'is_adding_hs', - 'is_mol', - 'mol2graph', - 'MolGraph', - 'onek_encoding_unk', - 'load_features', - 'save_features', - 'load_valid_atom_or_bond_features', - 'reset_featurization_parameters' -] diff --git a/chemprop/features/features_generators.py b/chemprop/features/features_generators.py deleted file mode 100644 index c929adb04..000000000 --- a/chemprop/features/features_generators.py +++ /dev/null @@ -1,155 +0,0 @@ -from typing import Callable, List, Union - -import numpy as np -from rdkit import Chem, DataStructs -from rdkit.Chem import AllChem - - -Molecule = Union[str, Chem.Mol] -FeaturesGenerator = Callable[[Molecule], np.ndarray] - - -FEATURES_GENERATOR_REGISTRY = {} - - -def register_features_generator(features_generator_name: str) -> Callable[[FeaturesGenerator], FeaturesGenerator]: - """ - Creates a decorator which registers a features generator in a global dictionary to enable access by name. - - :param features_generator_name: The name to use to access the features generator. - :return: A decorator which will add a features generator to the registry using the specified name. - """ - def decorator(features_generator: FeaturesGenerator) -> FeaturesGenerator: - FEATURES_GENERATOR_REGISTRY[features_generator_name] = features_generator - return features_generator - - return decorator - - -def get_features_generator(features_generator_name: str) -> FeaturesGenerator: - """ - Gets a registered features generator by name. - - :param features_generator_name: The name of the features generator. - :return: The desired features generator. - """ - if features_generator_name not in FEATURES_GENERATOR_REGISTRY: - raise ValueError(f'Features generator "{features_generator_name}" could not be found. ' - f'If this generator relies on rdkit features, you may need to install descriptastorus.') - - return FEATURES_GENERATOR_REGISTRY[features_generator_name] - - -def get_available_features_generators() -> List[str]: - """Returns a list of names of available features generators.""" - return list(FEATURES_GENERATOR_REGISTRY.keys()) - - -MORGAN_RADIUS = 2 -MORGAN_NUM_BITS = 2048 - - -@register_features_generator('morgan') -def morgan_binary_features_generator(mol: Molecule, - radius: int = MORGAN_RADIUS, - num_bits: int = MORGAN_NUM_BITS) -> np.ndarray: - """ - Generates a binary Morgan fingerprint for a molecule. - - :param mol: A molecule (i.e., either a SMILES or an RDKit molecule). - :param radius: Morgan fingerprint radius. - :param num_bits: Number of bits in Morgan fingerprint. - :return: A 1D numpy array containing the binary Morgan fingerprint. - """ - mol = Chem.MolFromSmiles(mol) if type(mol) == str else mol - features_vec = AllChem.GetMorganFingerprintAsBitVect(mol, radius, nBits=num_bits) - features = np.zeros((1,)) - DataStructs.ConvertToNumpyArray(features_vec, features) - - return features - - -@register_features_generator('morgan_count') -def morgan_counts_features_generator(mol: Molecule, - radius: int = MORGAN_RADIUS, - num_bits: int = MORGAN_NUM_BITS) -> np.ndarray: - """ - Generates a counts-based Morgan fingerprint for a molecule. - - :param mol: A molecule (i.e., either a SMILES or an RDKit molecule). - :param radius: Morgan fingerprint radius. - :param num_bits: Number of bits in Morgan fingerprint. - :return: A 1D numpy array containing the counts-based Morgan fingerprint. - """ - mol = Chem.MolFromSmiles(mol) if type(mol) == str else mol - features_vec = AllChem.GetHashedMorganFingerprint(mol, radius, nBits=num_bits) - features = np.zeros((1,)) - DataStructs.ConvertToNumpyArray(features_vec, features) - - return features - - -try: - from descriptastorus.descriptors import rdDescriptors, rdNormalizedDescriptors - - @register_features_generator('rdkit_2d') - def rdkit_2d_features_generator(mol: Molecule) -> np.ndarray: - """ - Generates RDKit 2D features for a molecule. - - :param mol: A molecule (i.e., either a SMILES or an RDKit molecule). - :return: A 1D numpy array containing the RDKit 2D features. - """ - smiles = Chem.MolToSmiles(mol, isomericSmiles=True) if type(mol) != str else mol - generator = rdDescriptors.RDKit2D() - features = generator.process(smiles)[1:] - - return features - - @register_features_generator('rdkit_2d_normalized') - def rdkit_2d_normalized_features_generator(mol: Molecule) -> np.ndarray: - """ - Generates RDKit 2D normalized features for a molecule. - - :param mol: A molecule (i.e., either a SMILES or an RDKit molecule). - :return: A 1D numpy array containing the RDKit 2D normalized features. - """ - smiles = Chem.MolToSmiles(mol, isomericSmiles=True) if type(mol) != str else mol - generator = rdNormalizedDescriptors.RDKit2DNormalized() - features = generator.process(smiles)[1:] - - return features -except ImportError: - @register_features_generator('rdkit_2d') - def rdkit_2d_features_generator(mol: Molecule) -> np.ndarray: - """Mock implementation raising an ImportError if descriptastorus cannot be imported.""" - raise ImportError('Failed to import descriptastorus. Please install descriptastorus ' - '(https://github.com/bp-kelley/descriptastorus) to use RDKit 2D features.') - - @register_features_generator('rdkit_2d_normalized') - def rdkit_2d_normalized_features_generator(mol: Molecule) -> np.ndarray: - """Mock implementation raising an ImportError if descriptastorus cannot be imported.""" - raise ImportError('Failed to import descriptastorus. Please install descriptastorus ' - '(https://github.com/bp-kelley/descriptastorus) to use RDKit 2D normalized features.') - - -""" -Custom features generator template. - -Note: The name you use to register the features generator is the name -you will specify on the command line when using the --features_generator flag. -Ex. python train.py ... --features_generator custom ... - -@register_features_generator('custom') -def custom_features_generator(mol: Molecule) -> np.ndarray: - # If you want to use the SMILES string - smiles = Chem.MolToSmiles(mol, isomericSmiles=True) if type(mol) != str else mol - - # If you want to use the RDKit molecule - mol = Chem.MolFromSmiles(mol) if type(mol) == str else mol - - # Replace this with code which generates features from the molecule - features = np.array([0, 0, 1]) - - return features -""" diff --git a/chemprop/features/featurization.py b/chemprop/features/featurization.py deleted file mode 100644 index bf4720fdb..000000000 --- a/chemprop/features/featurization.py +++ /dev/null @@ -1,653 +0,0 @@ -from typing import List, Tuple, Union -from itertools import zip_longest -import logging - -from rdkit import Chem -import torch -import numpy as np - -from chemprop.rdkit import make_mol - -class Featurization_parameters: - """ - A class holding molecule featurization parameters as attributes. - """ - def __init__(self) -> None: - - # Atom feature sizes - self.MAX_ATOMIC_NUM = 100 - self.ATOM_FEATURES = { - 'atomic_num': list(range(self.MAX_ATOMIC_NUM)), - 'degree': [0, 1, 2, 3, 4, 5], - 'formal_charge': [-1, -2, 1, 2, 0], - 'chiral_tag': [0, 1, 2, 3], - 'num_Hs': [0, 1, 2, 3, 4], - 'hybridization': [ - Chem.rdchem.HybridizationType.SP, - Chem.rdchem.HybridizationType.SP2, - Chem.rdchem.HybridizationType.SP3, - Chem.rdchem.HybridizationType.SP3D, - Chem.rdchem.HybridizationType.SP3D2 - ], - } - - # Distance feature sizes - self.PATH_DISTANCE_BINS = list(range(10)) - self.THREE_D_DISTANCE_MAX = 20 - self.THREE_D_DISTANCE_STEP = 1 - self.THREE_D_DISTANCE_BINS = list(range(0, self.THREE_D_DISTANCE_MAX + 1, self.THREE_D_DISTANCE_STEP)) - - # len(choices) + 1 to include room for uncommon values; + 2 at end for IsAromatic and mass - self.ATOM_FDIM = sum(len(choices) + 1 for choices in self.ATOM_FEATURES.values()) + 2 - self.EXTRA_ATOM_FDIM = 0 - self.BOND_FDIM = 14 - self.EXTRA_BOND_FDIM = 0 - self.REACTION_MODE = None - self.EXPLICIT_H = False - self.REACTION = False - self.ADDING_H = False - -# Create a global parameter object for reference throughout this module -PARAMS = Featurization_parameters() - - -def reset_featurization_parameters(logger: logging.Logger = None) -> None: - """ - Function resets feature parameter values to defaults by replacing the parameters instance. - """ - if logger is not None: - debug = logger.debug - else: - debug = print - debug('Setting molecule featurization parameters to default.') - global PARAMS - PARAMS = Featurization_parameters() - - -def get_atom_fdim(overwrite_default_atom: bool = False, is_reaction: bool = False) -> int: - """ - Gets the dimensionality of the atom feature vector. - - :param overwrite_default_atom: Whether to overwrite the default atom descriptors - :param is_reaction: Whether to add :code:`EXTRA_ATOM_FDIM` for reaction input when :code:`REACTION_MODE` is not None - :return: The dimensionality of the atom feature vector. - """ - if PARAMS.REACTION_MODE: - return (not overwrite_default_atom) * PARAMS.ATOM_FDIM + is_reaction * PARAMS.EXTRA_ATOM_FDIM - else: - return (not overwrite_default_atom) * PARAMS.ATOM_FDIM + PARAMS.EXTRA_ATOM_FDIM - - -def set_explicit_h(explicit_h: bool) -> None: - """ - Sets whether RDKit molecules will be constructed with explicit Hs. - - :param explicit_h: Boolean whether to keep explicit Hs from input. - """ - PARAMS.EXPLICIT_H = explicit_h - -def set_adding_hs(adding_hs: bool) -> None: - """ - Sets whether RDKit molecules will be constructed with adding the Hs to them. - - :param adding_hs: Boolean whether to add Hs to the molecule. - """ - PARAMS.ADDING_H = adding_hs - - -def set_reaction(reaction: bool, mode: str) -> None: - """ - Sets whether to use a reaction or molecule as input and adapts feature dimensions. - - :param reaction: Boolean whether to except reactions as input. - :param mode: Reaction mode to construct atom and bond feature vectors. - - """ - PARAMS.REACTION = reaction - if reaction: - PARAMS.EXTRA_ATOM_FDIM = PARAMS.ATOM_FDIM - PARAMS.MAX_ATOMIC_NUM - 1 - PARAMS.EXTRA_BOND_FDIM = PARAMS.BOND_FDIM - PARAMS.REACTION_MODE = mode - -def is_explicit_h(is_mol: bool = True) -> bool: - r"""Returns whether to retain explicit Hs (for reactions only)""" - if not is_mol: - return PARAMS.EXPLICIT_H - return False - - -def is_adding_hs(is_mol: bool = True) -> bool: - r"""Returns whether to add explicit Hs to the mol (not for reactions)""" - if is_mol: - return PARAMS.ADDING_H - return False - - -def is_reaction(is_mol: bool = True) -> bool: - r"""Returns whether to use reactions as input""" - if is_mol: - return False - if PARAMS.REACTION: #(and not is_mol, checked above) - return True - return False - - -def reaction_mode() -> str: - r"""Returns the reaction mode""" - return PARAMS.REACTION_MODE - - -def set_extra_atom_fdim(extra): - """Change the dimensionality of the atom feature vector.""" - PARAMS.EXTRA_ATOM_FDIM = extra - - -def get_bond_fdim(atom_messages: bool = False, - overwrite_default_bond: bool = False, - overwrite_default_atom: bool = False, - is_reaction: bool = False) -> int: - """ - Gets the dimensionality of the bond feature vector. - - :param atom_messages: Whether atom messages are being used. If atom messages are used, - then the bond feature vector only contains bond features. - Otherwise it contains both atom and bond features. - :param overwrite_default_bond: Whether to overwrite the default bond descriptors - :param overwrite_default_atom: Whether to overwrite the default atom descriptors - :param is_reaction: Whether to add :code:`EXTRA_BOND_FDIM` for reaction input when :code:`REACTION_MODE:` is not None - :return: The dimensionality of the bond feature vector. - """ - - if PARAMS.REACTION_MODE: - return (not overwrite_default_bond) * PARAMS.BOND_FDIM + is_reaction * PARAMS.EXTRA_BOND_FDIM + \ - (not atom_messages) * get_atom_fdim(overwrite_default_atom=overwrite_default_atom, is_reaction=is_reaction) - else: - return (not overwrite_default_bond) * PARAMS.BOND_FDIM + PARAMS.EXTRA_BOND_FDIM + \ - (not atom_messages) * get_atom_fdim(overwrite_default_atom=overwrite_default_atom, is_reaction=is_reaction) - - -def set_extra_bond_fdim(extra): - """Change the dimensionality of the bond feature vector.""" - PARAMS.EXTRA_BOND_FDIM = extra - - -def onek_encoding_unk(value: int, choices: List[int]) -> List[int]: - """ - Creates a one-hot encoding with an extra category for uncommon values. - - :param value: The value for which the encoding should be one. - :param choices: A list of possible values. - :return: A one-hot encoding of the :code:`value` in a list of length :code:`len(choices) + 1`. - If :code:`value` is not in :code:`choices`, then the final element in the encoding is 1. - """ - encoding = [0] * (len(choices) + 1) - index = choices.index(value) if value in choices else -1 - encoding[index] = 1 - - return encoding - - -def atom_features(atom: Chem.rdchem.Atom, functional_groups: List[int] = None) -> List[Union[bool, int, float]]: - """ - Builds a feature vector for an atom. - - :param atom: An RDKit atom. - :param functional_groups: A k-hot vector indicating the functional groups the atom belongs to. - :return: A list containing the atom features. - """ - if atom is None: - features = [0] * PARAMS.ATOM_FDIM - else: - features = onek_encoding_unk(atom.GetAtomicNum() - 1, PARAMS.ATOM_FEATURES['atomic_num']) + \ - onek_encoding_unk(atom.GetTotalDegree(), PARAMS.ATOM_FEATURES['degree']) + \ - onek_encoding_unk(atom.GetFormalCharge(), PARAMS.ATOM_FEATURES['formal_charge']) + \ - onek_encoding_unk(int(atom.GetChiralTag()), PARAMS.ATOM_FEATURES['chiral_tag']) + \ - onek_encoding_unk(int(atom.GetTotalNumHs()), PARAMS.ATOM_FEATURES['num_Hs']) + \ - onek_encoding_unk(int(atom.GetHybridization()), PARAMS.ATOM_FEATURES['hybridization']) + \ - [1 if atom.GetIsAromatic() else 0] + \ - [atom.GetMass() * 0.01] # scaled to about the same range as other features - if functional_groups is not None: - features += functional_groups - return features - - -def atom_features_zeros(atom: Chem.rdchem.Atom) -> List[Union[bool, int, float]]: - """ - Builds a feature vector for an atom containing only the atom number information. - - :param atom: An RDKit atom. - :return: A list containing the atom features. - """ - if atom is None: - features = [0] * PARAMS.ATOM_FDIM - else: - features = onek_encoding_unk(atom.GetAtomicNum() - 1, PARAMS.ATOM_FEATURES['atomic_num']) + \ - [0] * (PARAMS.ATOM_FDIM - PARAMS.MAX_ATOMIC_NUM - 1) #set other features to zero - return features - - -def bond_features(bond: Chem.rdchem.Bond) -> List[Union[bool, int, float]]: - """ - Builds a feature vector for a bond. - - :param bond: An RDKit bond. - :return: A list containing the bond features. - """ - if bond is None: - fbond = [1] + [0] * (PARAMS.BOND_FDIM - 1) - else: - bt = bond.GetBondType() - fbond = [ - 0, # bond is not None - bt == Chem.rdchem.BondType.SINGLE, - bt == Chem.rdchem.BondType.DOUBLE, - bt == Chem.rdchem.BondType.TRIPLE, - bt == Chem.rdchem.BondType.AROMATIC, - (bond.GetIsConjugated() if bt is not None else 0), - (bond.IsInRing() if bt is not None else 0) - ] - fbond += onek_encoding_unk(int(bond.GetStereo()), list(range(6))) - return fbond - - -def map_reac_to_prod(mol_reac: Chem.Mol, mol_prod: Chem.Mol): - """ - Build a dictionary of mapping atom indices in the reactants to the products. - - :param mol_reac: An RDKit molecule of the reactants. - :param mol_prod: An RDKit molecule of the products. - :return: A dictionary of corresponding reactant and product atom indices. - """ - only_prod_ids = [] - prod_map_to_id = {} - mapnos_reac = set([atom.GetAtomMapNum() for atom in mol_reac.GetAtoms()]) - for atom in mol_prod.GetAtoms(): - mapno = atom.GetAtomMapNum() - if mapno > 0: - prod_map_to_id[mapno] = atom.GetIdx() - if mapno not in mapnos_reac: - only_prod_ids.append(atom.GetIdx()) - else: - only_prod_ids.append(atom.GetIdx()) - only_reac_ids = [] - reac_id_to_prod_id = {} - for atom in mol_reac.GetAtoms(): - mapno = atom.GetAtomMapNum() - if mapno > 0: - try: - reac_id_to_prod_id[atom.GetIdx()] = prod_map_to_id[mapno] - except KeyError: - only_reac_ids.append(atom.GetIdx()) - else: - only_reac_ids.append(atom.GetIdx()) - return reac_id_to_prod_id, only_prod_ids, only_reac_ids - - -class MolGraph: - """ - A :class:`MolGraph` represents the graph structure and featurization of a single molecule. - - A MolGraph computes the following attributes: - - * :code:`n_atoms`: The number of atoms in the molecule. - * :code:`n_bonds`: The number of bonds in the molecule. - * :code:`f_atoms`: A mapping from an atom index to a list of atom features. - * :code:`f_bonds`: A mapping from a bond index to a list of bond features. - * :code:`a2b`: A mapping from an atom index to a list of incoming bond indices. - * :code:`b2a`: A mapping from a bond index to the index of the atom the bond originates from. - * :code:`b2revb`: A mapping from a bond index to the index of the reverse bond. - * :code:`overwrite_default_atom_features`: A boolean to overwrite default atom descriptors. - * :code:`overwrite_default_bond_features`: A boolean to overwrite default bond descriptors. - * :code:`is_mol`: A boolean whether the input is a molecule. - * :code:`is_reaction`: A boolean whether the molecule is a reaction. - * :code:`is_explicit_h`: A boolean whether to retain explicit Hs (for reaction mode) - * :code:`is_adding_hs`: A boolean whether to add explicit Hs (not for reaction mode) - * :code:`reaction_mode`: Reaction mode to construct atom and bond feature vectors - """ - - def __init__(self, mol: Union[str, Chem.Mol, Tuple[Chem.Mol, Chem.Mol]], - atom_features_extra: np.ndarray = None, - bond_features_extra: np.ndarray = None, - overwrite_default_atom_features: bool = False, - overwrite_default_bond_features: bool = False): - """ - :param mol: A SMILES or an RDKit molecule. - :param atom_features_extra: A list of 2D numpy array containing additional atom features to featurize the molecule - :param bond_features_extra: A list of 2D numpy array containing additional bond features to featurize the molecule - :param overwrite_default_atom_features: Boolean to overwrite default atom features by atom_features instead of concatenating - :param overwrite_default_bond_features: Boolean to overwrite default bond features by bond_features instead of concatenating - """ - self.is_mol = is_mol(mol) - self.is_reaction = is_reaction(self.is_mol) - self.is_explicit_h = is_explicit_h(self.is_mol) - self.is_adding_hs = is_adding_hs(self.is_mol) - self.reaction_mode = reaction_mode() - - # Convert SMILES to RDKit molecule if necessary - if type(mol) == str: - if self.is_reaction: - mol = (make_mol(mol.split(">")[0], self.is_explicit_h, self.is_adding_hs), make_mol(mol.split(">")[-1], self.is_explicit_h, self.is_adding_hs)) - else: - mol = make_mol(mol, self.is_explicit_h, self.is_adding_hs) - - self.n_atoms = 0 # number of atoms - self.n_bonds = 0 # number of bonds - self.f_atoms = [] # mapping from atom index to atom features - self.f_bonds = [] # mapping from bond index to concat(in_atom, bond) features - self.a2b = [] # mapping from atom index to incoming bond indices - self.b2a = [] # mapping from bond index to the index of the atom the bond is coming from - self.b2revb = [] # mapping from bond index to the index of the reverse bond - self.overwrite_default_atom_features = overwrite_default_atom_features - self.overwrite_default_bond_features = overwrite_default_bond_features - - if not self.is_reaction: - # Get atom features - self.f_atoms = [atom_features(atom) for atom in mol.GetAtoms()] - if atom_features_extra is not None: - if overwrite_default_atom_features: - self.f_atoms = [descs.tolist() for descs in atom_features_extra] - else: - self.f_atoms = [f_atoms + descs.tolist() for f_atoms, descs in zip(self.f_atoms, atom_features_extra)] - - self.n_atoms = len(self.f_atoms) - if atom_features_extra is not None and len(atom_features_extra) != self.n_atoms: - raise ValueError(f'The number of atoms in {Chem.MolToSmiles(mol)} is different from the length of ' - f'the extra atom features') - - # Initialize atom to bond mapping for each atom - for _ in range(self.n_atoms): - self.a2b.append([]) - - # Get bond features - for a1 in range(self.n_atoms): - for a2 in range(a1 + 1, self.n_atoms): - bond = mol.GetBondBetweenAtoms(a1, a2) - - if bond is None: - continue - - f_bond = bond_features(bond) - if bond_features_extra is not None: - descr = bond_features_extra[bond.GetIdx()].tolist() - if overwrite_default_bond_features: - f_bond = descr - else: - f_bond += descr - - self.f_bonds.append(self.f_atoms[a1] + f_bond) - self.f_bonds.append(self.f_atoms[a2] + f_bond) - - # Update index mappings - b1 = self.n_bonds - b2 = b1 + 1 - self.a2b[a2].append(b1) # b1 = a1 --> a2 - self.b2a.append(a1) - self.a2b[a1].append(b2) # b2 = a2 --> a1 - self.b2a.append(a2) - self.b2revb.append(b2) - self.b2revb.append(b1) - self.n_bonds += 2 - - if bond_features_extra is not None and len(bond_features_extra) != self.n_bonds / 2: - raise ValueError(f'The number of bonds in {Chem.MolToSmiles(mol)} is different from the length of ' - f'the extra bond features') - - else: # Reaction mode - if atom_features_extra is not None: - raise NotImplementedError('Extra atom features are currently not supported for reactions') - if bond_features_extra is not None: - raise NotImplementedError('Extra bond features are currently not supported for reactions') - - mol_reac = mol[0] - mol_prod = mol[1] - ri2pi, pio, rio = map_reac_to_prod(mol_reac, mol_prod) - - # Get atom features - if self.reaction_mode in ['reac_diff','prod_diff', 'reac_prod']: - #Reactant: regular atom features for each atom in the reactants, as well as zero features for atoms that are only in the products (indices in pio) - f_atoms_reac = [atom_features(atom) for atom in mol_reac.GetAtoms()] + [atom_features_zeros(mol_prod.GetAtomWithIdx(index)) for index in pio] - - #Product: regular atom features for each atom that is in both reactants and products (not in rio), other atom features zero, - #regular features for atoms that are only in the products (indices in pio) - f_atoms_prod = [atom_features(mol_prod.GetAtomWithIdx(ri2pi[atom.GetIdx()])) if atom.GetIdx() not in rio else - atom_features_zeros(atom) for atom in mol_reac.GetAtoms()] + [atom_features(mol_prod.GetAtomWithIdx(index)) for index in pio] - else: #balance - #Reactant: regular atom features for each atom in the reactants, copy features from product side for atoms that are only in the products (indices in pio) - f_atoms_reac = [atom_features(atom) for atom in mol_reac.GetAtoms()] + [atom_features(mol_prod.GetAtomWithIdx(index)) for index in pio] - - #Product: regular atom features for each atom that is in both reactants and products (not in rio), copy features from reactant side for - #other atoms, regular features for atoms that are only in the products (indices in pio) - f_atoms_prod = [atom_features(mol_prod.GetAtomWithIdx(ri2pi[atom.GetIdx()])) if atom.GetIdx() not in rio else - atom_features(atom) for atom in mol_reac.GetAtoms()] + [atom_features(mol_prod.GetAtomWithIdx(index)) for index in pio] - - if self.reaction_mode in ['reac_diff', 'prod_diff', 'reac_diff_balance', 'prod_diff_balance']: - f_atoms_diff = [list(map(lambda x, y: x - y, ii, jj)) for ii, jj in zip(f_atoms_prod, f_atoms_reac)] - if self.reaction_mode in ['reac_prod', 'reac_prod_balance']: - self.f_atoms = [x+y[PARAMS.MAX_ATOMIC_NUM+1:] for x,y in zip(f_atoms_reac, f_atoms_prod)] - elif self.reaction_mode in ['reac_diff', 'reac_diff_balance']: - self.f_atoms = [x+y[PARAMS.MAX_ATOMIC_NUM+1:] for x,y in zip(f_atoms_reac, f_atoms_diff)] - elif self.reaction_mode in ['prod_diff', 'prod_diff_balance']: - self.f_atoms = [x+y[PARAMS.MAX_ATOMIC_NUM+1:] for x,y in zip(f_atoms_prod, f_atoms_diff)] - self.n_atoms = len(self.f_atoms) - n_atoms_reac = mol_reac.GetNumAtoms() - - # Initialize atom to bond mapping for each atom - for _ in range(self.n_atoms): - self.a2b.append([]) - - # Get bond features - for a1 in range(self.n_atoms): - for a2 in range(a1 + 1, self.n_atoms): - if a1 >= n_atoms_reac and a2 >= n_atoms_reac: # Both atoms only in product - bond_prod = mol_prod.GetBondBetweenAtoms(pio[a1 - n_atoms_reac], pio[a2 - n_atoms_reac]) - if self.reaction_mode in ['reac_prod_balance', 'reac_diff_balance', 'prod_diff_balance']: - bond_reac = bond_prod - else: - bond_reac = None - elif a1 < n_atoms_reac and a2 >= n_atoms_reac: # One atom only in product - bond_reac = None - if a1 in ri2pi.keys(): - bond_prod = mol_prod.GetBondBetweenAtoms(ri2pi[a1], pio[a2 - n_atoms_reac]) - else: - bond_prod = None # Atom atom only in reactant, the other only in product - else: - bond_reac = mol_reac.GetBondBetweenAtoms(a1, a2) - if a1 in ri2pi.keys() and a2 in ri2pi.keys(): - bond_prod = mol_prod.GetBondBetweenAtoms(ri2pi[a1], ri2pi[a2]) #Both atoms in both reactant and product - else: - if self.reaction_mode in ['reac_prod_balance', 'reac_diff_balance', 'prod_diff_balance']: - if a1 in ri2pi.keys() or a2 in ri2pi.keys(): - bond_prod = None # One atom only in reactant - else: - bond_prod = bond_reac # Both atoms only in reactant - else: - bond_prod = None # One or both atoms only in reactant - - if bond_reac is None and bond_prod is None: - continue - - f_bond_reac = bond_features(bond_reac) - f_bond_prod = bond_features(bond_prod) - if self.reaction_mode in ['reac_diff', 'prod_diff', 'reac_diff_balance', 'prod_diff_balance']: - f_bond_diff = [y - x for x, y in zip(f_bond_reac, f_bond_prod)] - if self.reaction_mode in ['reac_prod', 'reac_prod_balance']: - f_bond = f_bond_reac + f_bond_prod - elif self.reaction_mode in ['reac_diff', 'reac_diff_balance']: - f_bond = f_bond_reac + f_bond_diff - elif self.reaction_mode in ['prod_diff', 'prod_diff_balance']: - f_bond = f_bond_prod + f_bond_diff - self.f_bonds.append(self.f_atoms[a1] + f_bond) - self.f_bonds.append(self.f_atoms[a2] + f_bond) - - # Update index mappings - b1 = self.n_bonds - b2 = b1 + 1 - self.a2b[a2].append(b1) # b1 = a1 --> a2 - self.b2a.append(a1) - self.a2b[a1].append(b2) # b2 = a2 --> a1 - self.b2a.append(a2) - self.b2revb.append(b2) - self.b2revb.append(b1) - self.n_bonds += 2 - -class BatchMolGraph: - """ - A :class:`BatchMolGraph` represents the graph structure and featurization of a batch of molecules. - - A BatchMolGraph contains the attributes of a :class:`MolGraph` plus: - - * :code:`atom_fdim`: The dimensionality of the atom feature vector. - * :code:`bond_fdim`: The dimensionality of the bond feature vector (technically the combined atom/bond features). - * :code:`a_scope`: A list of tuples indicating the start and end atom indices for each molecule. - * :code:`b_scope`: A list of tuples indicating the start and end bond indices for each molecule. - * :code:`max_num_bonds`: The maximum number of bonds neighboring an atom in this batch. - * :code:`b2b`: (Optional) A mapping from a bond index to incoming bond indices. - * :code:`a2a`: (Optional): A mapping from an atom index to neighboring atom indices. - """ - - def __init__(self, mol_graphs: List[MolGraph]): - r""" - :param mol_graphs: A list of :class:`MolGraph`\ s from which to construct the :class:`BatchMolGraph`. - """ - self.overwrite_default_atom_features = mol_graphs[0].overwrite_default_atom_features - self.overwrite_default_bond_features = mol_graphs[0].overwrite_default_bond_features - self.is_reaction = mol_graphs[0].is_reaction - self.atom_fdim = get_atom_fdim(overwrite_default_atom=self.overwrite_default_atom_features, - is_reaction=self.is_reaction) - self.bond_fdim = get_bond_fdim(overwrite_default_bond=self.overwrite_default_bond_features, - overwrite_default_atom=self.overwrite_default_atom_features, - is_reaction=self.is_reaction) - - # Start n_atoms and n_bonds at 1 b/c zero padding - self.n_atoms = 1 # number of atoms (start at 1 b/c need index 0 as padding) - self.n_bonds = 1 # number of bonds (start at 1 b/c need index 0 as padding) - self.a_scope = [] # list of tuples indicating (start_atom_index, num_atoms) for each molecule - self.b_scope = [] # list of tuples indicating (start_bond_index, num_bonds) for each molecule - - # All start with zero padding so that indexing with zero padding returns zeros - f_atoms = [[0] * self.atom_fdim] # atom features - f_bonds = [[0] * self.bond_fdim] # combined atom/bond features - a2b = [[]] # mapping from atom index to incoming bond indices - b2a = [0] # mapping from bond index to the index of the atom the bond is coming from - b2revb = [0] # mapping from bond index to the index of the reverse bond - for mol_graph in mol_graphs: - f_atoms.extend(mol_graph.f_atoms) - f_bonds.extend(mol_graph.f_bonds) - - for a in range(mol_graph.n_atoms): - a2b.append([b + self.n_bonds for b in mol_graph.a2b[a]]) - - for b in range(mol_graph.n_bonds): - b2a.append(self.n_atoms + mol_graph.b2a[b]) - b2revb.append(self.n_bonds + mol_graph.b2revb[b]) - - self.a_scope.append((self.n_atoms, mol_graph.n_atoms)) - self.b_scope.append((self.n_bonds, mol_graph.n_bonds)) - self.n_atoms += mol_graph.n_atoms - self.n_bonds += mol_graph.n_bonds - - self.max_num_bonds = max(1, max( - len(in_bonds) for in_bonds in a2b)) # max with 1 to fix a crash in rare case of all single-heavy-atom mols - - self.f_atoms = torch.FloatTensor(f_atoms) - self.f_bonds = torch.FloatTensor(f_bonds) - self.a2b = torch.LongTensor([a2b[a] + [0] * (self.max_num_bonds - len(a2b[a])) for a in range(self.n_atoms)]) - self.b2a = torch.LongTensor(b2a) - self.b2revb = torch.LongTensor(b2revb) - self.b2b = None # try to avoid computing b2b b/c O(n_atoms^3) - self.a2a = None # only needed if using atom messages - - def get_components(self, atom_messages: bool = False) -> Tuple[torch.FloatTensor, torch.FloatTensor, - torch.LongTensor, torch.LongTensor, torch.LongTensor, - List[Tuple[int, int]], List[Tuple[int, int]]]: - """ - Returns the components of the :class:`BatchMolGraph`. - - The returned components are, in order: - - * :code:`f_atoms` - * :code:`f_bonds` - * :code:`a2b` - * :code:`b2a` - * :code:`b2revb` - * :code:`a_scope` - * :code:`b_scope` - - :param atom_messages: Whether to use atom messages instead of bond messages. This changes the bond feature - vector to contain only bond features rather than both atom and bond features. - :return: A tuple containing PyTorch tensors with the atom features, bond features, graph structure, - and scope of the atoms and bonds (i.e., the indices of the molecules they belong to). - """ - if atom_messages: - f_bonds = self.f_bonds[:, -get_bond_fdim(atom_messages=atom_messages, - overwrite_default_atom=self.overwrite_default_atom_features, - overwrite_default_bond=self.overwrite_default_bond_features):] - else: - f_bonds = self.f_bonds - - return self.f_atoms, f_bonds, self.a2b, self.b2a, self.b2revb, self.a_scope, self.b_scope - - def get_b2b(self) -> torch.LongTensor: - """ - Computes (if necessary) and returns a mapping from each bond index to all the incoming bond indices. - - :return: A PyTorch tensor containing the mapping from each bond index to all the incoming bond indices. - """ - if self.b2b is None: - b2b = self.a2b[self.b2a] # num_bonds x max_num_bonds - # b2b includes reverse edge for each bond so need to mask out - revmask = (b2b != self.b2revb.unsqueeze(1).repeat(1, b2b.size(1))).long() # num_bonds x max_num_bonds - self.b2b = b2b * revmask - - return self.b2b - - def get_a2a(self) -> torch.LongTensor: - """ - Computes (if necessary) and returns a mapping from each atom index to all neighboring atom indices. - - :return: A PyTorch tensor containing the mapping from each atom index to all the neighboring atom indices. - """ - if self.a2a is None: - # b = a1 --> a2 - # a2b maps a2 to all incoming bonds b - # b2a maps each bond b to the atom it comes from a1 - # thus b2a[a2b] maps atom a2 to neighboring atoms a1 - self.a2a = self.b2a[self.a2b] # num_atoms x max_num_bonds - - return self.a2a - - -def mol2graph(mols: Union[List[str], List[Chem.Mol], List[Tuple[Chem.Mol, Chem.Mol]]], - atom_features_batch: List[np.array] = (None,), - bond_features_batch: List[np.array] = (None,), - overwrite_default_atom_features: bool = False, - overwrite_default_bond_features: bool = False - ) -> BatchMolGraph: - """ - Converts a list of SMILES or RDKit molecules to a :class:`BatchMolGraph` containing the batch of molecular graphs. - - :param mols: A list of SMILES or a list of RDKit molecules. - :param atom_features_batch: A list of 2D numpy array containing additional atom features to featurize the molecule - :param bond_features_batch: A list of 2D numpy array containing additional bond features to featurize the molecule - :param overwrite_default_atom_features: Boolean to overwrite default atom descriptors by atom_descriptors instead of concatenating - :param overwrite_default_bond_features: Boolean to overwrite default bond descriptors by bond_descriptors instead of concatenating - :return: A :class:`BatchMolGraph` containing the combined molecular graph for the molecules. - """ - return BatchMolGraph([MolGraph(mol, af, bf, - overwrite_default_atom_features=overwrite_default_atom_features, - overwrite_default_bond_features=overwrite_default_bond_features) - for mol, af, bf - in zip_longest(mols, atom_features_batch, bond_features_batch)]) - -def is_mol(mol: Union[str, Chem.Mol, Tuple[Chem.Mol, Chem.Mol]]) -> bool: - """Checks whether an input is a molecule or a reaction - - :param mol: str, RDKIT molecule or tuple of molecules - :return: Whether the supplied input corresponds to a single molecule - """ - - if isinstance(mol, str) and ">" not in mol: - return True - elif isinstance(mol, Chem.Mol): - return True - return False diff --git a/chemprop/features/utils.py b/chemprop/features/utils.py deleted file mode 100644 index 617af8623..000000000 --- a/chemprop/features/utils.py +++ /dev/null @@ -1,107 +0,0 @@ -import csv -import os -import pickle -from typing import List - -import numpy as np -import pandas as pd -from rdkit.Chem import PandasTools - - -def save_features(path: str, features: List[np.ndarray]) -> None: - """ - Saves features to a compressed :code:`.npz` file with array name "features". - - :param path: Path to a :code:`.npz` file where the features will be saved. - :param features: A list of 1D numpy arrays containing the features for molecules. - """ - np.savez_compressed(path, features=features) - - -def load_features(path: str) -> np.ndarray: - """ - Loads features saved in a variety of formats. - - Supported formats: - - * :code:`.npz` compressed (assumes features are saved with name "features") - * .npy - * :code:`.csv` / :code:`.txt` (assumes comma-separated features with a header and with one line per molecule) - * :code:`.pkl` / :code:`.pckl` / :code:`.pickle` containing a sparse numpy array - - .. note:: - - All formats assume that the SMILES loaded elsewhere in the code are in the same - order as the features loaded here. - - :param path: Path to a file containing features. - :return: A 2D numpy array of size :code:`(num_molecules, features_size)` containing the features. - """ - extension = os.path.splitext(path)[1] - - if extension == '.npz': - features = np.load(path)['features'] - elif extension == '.npy': - features = np.load(path) - elif extension in ['.csv', '.txt']: - with open(path) as f: - reader = csv.reader(f) - next(reader) # skip header - features = np.array([[float(value) for value in row] for row in reader]) - elif extension in ['.pkl', '.pckl', '.pickle']: - with open(path, 'rb') as f: - features = np.array([np.squeeze(np.array(feat.todense())) for feat in pickle.load(f)]) - else: - raise ValueError(f'Features path extension {extension} not supported.') - - return features - - -def load_valid_atom_or_bond_features(path: str, smiles: List[str]) -> List[np.ndarray]: - """ - Loads features saved in a variety of formats. - - Supported formats: - - * :code:`.npz` descriptors are saved as 2D array for each molecule in the order of that in the data.csv - * :code:`.pkl` / :code:`.pckl` / :code:`.pickle` containing a pandas dataframe with smiles as index and numpy array of descriptors as columns - * :code:'.sdf' containing all mol blocks with descriptors as entries - - :param path: Path to file containing atomwise features. - :return: A list of 2D array. - """ - - extension = os.path.splitext(path)[1] - - if extension == '.npz': - container = np.load(path) - features = [container[key] for key in container] - - elif extension in ['.pkl', '.pckl', '.pickle']: - features_df = pd.read_pickle(path) - if features_df.iloc[0, 0].ndim == 1: - features = features_df.apply(lambda x: np.stack(x.tolist(), axis=1), axis=1).tolist() - elif features_df.iloc[0, 0].ndim == 2: - features = features_df.apply(lambda x: np.concatenate(x.tolist(), axis=1), axis=1).tolist() - else: - raise ValueError(f'Atom/bond descriptors input {path} format not supported') - - elif extension == '.sdf': - features_df = PandasTools.LoadSDF(path).drop(['ID', 'ROMol'], axis=1).set_index('SMILES') - - features_df = features_df[~features_df.index.duplicated()] - - # locate atomic descriptors columns - features_df = features_df.iloc[:, features_df.iloc[0, :].apply(lambda x: isinstance(x, str) and ',' in x).to_list()] - features_df = features_df.reindex(smiles) - if features_df.isnull().any().any(): - raise ValueError('Invalid custom atomic descriptors file, Nan found in data') - - features_df = features_df.applymap(lambda x: np.array(x.replace('\r', '').replace('\n', '').split(',')).astype(float)) - - features = features_df.apply(lambda x: np.stack(x.tolist(), axis=1), axis=1).tolist() - - else: - raise ValueError(f'Extension "{extension}" is not supported.') - - return features diff --git a/chemprop/featurizers/__init__.py b/chemprop/featurizers/__init__.py new file mode 100644 index 000000000..6dc33b475 --- /dev/null +++ b/chemprop/featurizers/__init__.py @@ -0,0 +1,46 @@ +from .base import Featurizer, S, T, VectorFeaturizer, GraphFeaturizer +from .atom import MultiHotAtomFeaturizer, AtomFeatureMode, get_multi_hot_atom_featurizer +from .bond import MultiHotBondFeaturizer +from .molgraph import ( + MolGraphCacheFacade, + MolGraphCache, + MolGraphCacheOnTheFly, + SimpleMoleculeMolGraphFeaturizer, + CondensedGraphOfReactionFeaturizer, + CGRFeaturizer, + RxnMode, +) +from .molecule import ( + MorganFeaturizerMixin, + BinaryFeaturizerMixin, + CountFeaturizerMixin, + MorganBinaryFeaturizer, + MorganCountFeaturizer, + MoleculeFeaturizerRegistry, +) + +__all__ = [ + "Featurizer", + "S", + "T", + "VectorFeaturizer", + "GraphFeaturizer", + "MultiHotAtomFeaturizer", + "AtomFeatureMode", + "get_multi_hot_atom_featurizer", + "MultiHotBondFeaturizer", + "MolGraphCacheFacade", + "MolGraphCache", + "MolGraphCacheOnTheFly", + "SimpleMoleculeMolGraphFeaturizer", + "CondensedGraphOfReactionFeaturizer", + "CGRFeaturizer", + "RxnMode", + "MoleculeFeaturizer", + "MorganFeaturizerMixin", + "BinaryFeaturizerMixin", + "CountFeaturizerMixin", + "MorganBinaryFeaturizer", + "MorganCountFeaturizer", + "MoleculeFeaturizerRegistry", +] diff --git a/chemprop/featurizers/atom.py b/chemprop/featurizers/atom.py new file mode 100644 index 000000000..2098c1442 --- /dev/null +++ b/chemprop/featurizers/atom.py @@ -0,0 +1,222 @@ +from typing import Sequence +from enum import auto + +import numpy as np +from rdkit.Chem.rdchem import Atom, HybridizationType + +from chemprop.utils.utils import EnumMapping +from chemprop.featurizers.base import VectorFeaturizer + + +class MultiHotAtomFeaturizer(VectorFeaturizer[Atom]): + """A :class:`MultiHotAtomFeaturizer` uses a multi-hot encoding to featurize atoms. + + .. seealso:: + The class provides three default parameterization schemes: + + * :meth:`MultiHotAtomFeaturizer.v1` + * :meth:`MultiHotAtomFeaturizer.v2` + * :meth:`MultiHotAtomFeaturizer.organic` + + The generated atom features are ordered as follows: + * atomic number + * degree + * formal charge + * chiral tag + * number of hydrogens + * hybridization + * aromaticity + * mass + + .. important:: + Each feature, except for aromaticity and mass, includes a pad for unknown values. + + Parameters + ---------- + atomic_nums : Sequence[int] + the choices for atom type denoted by atomic number. Ex: ``[4, 5, 6]`` for C, N and O. + degrees : Sequence[int] + the choices for number of bonds an atom is engaged in. + formal_charges : Sequence[int] + the choices for integer electronic charge assigned to an atom. + chiral_tags : Sequence[int] + the choices for an atom's chiral tag. See :class:`rdkit.Chem.rdchem.ChiralType` for possible integer values. + num_Hs : Sequence[int] + the choices for number of bonded hydrogen atoms. + hybridizations : Sequence[int] + the choices for an atom’s hybridization type. See :class:`rdkit.Chem.rdchem.HybridizationType` for possible integer values. + """ + + def __init__( + self, + atomic_nums: Sequence[int], + degrees: Sequence[int], + formal_charges: Sequence[int], + chiral_tags: Sequence[int], + num_Hs: Sequence[int], + hybridizations: Sequence[int], + ): + self.atomic_nums = {j: i for i, j in enumerate(atomic_nums)} + self.degrees = {i: i for i in degrees} + self.formal_charges = {j: i for i, j in enumerate(formal_charges)} + self.chiral_tags = {i: i for i in chiral_tags} + self.num_Hs = {i: i for i in num_Hs} + self.hybridizations = {ht: i for i, ht in enumerate(hybridizations)} + + self._subfeats: list[dict] = [ + self.atomic_nums, + self.degrees, + self.formal_charges, + self.chiral_tags, + self.num_Hs, + self.hybridizations, + ] + subfeat_sizes = [ + 1 + len(self.atomic_nums), + 1 + len(self.degrees), + 1 + len(self.formal_charges), + 1 + len(self.chiral_tags), + 1 + len(self.num_Hs), + 1 + len(self.hybridizations), + 1, + 1, + ] + self.__size = sum(subfeat_sizes) + + def __len__(self) -> int: + return self.__size + + def __call__(self, a: Atom | None) -> np.ndarray: + x = np.zeros(self.__size) + + if a is None: + return x + + feats = [ + a.GetAtomicNum(), + a.GetTotalDegree(), + a.GetFormalCharge(), + int(a.GetChiralTag()), + int(a.GetTotalNumHs()), + a.GetHybridization(), + ] + i = 0 + for feat, choices in zip(feats, self._subfeats): + j = choices.get(feat, len(choices)) + x[i + j] = 1 + i += len(choices) + 1 + x[i] = int(a.GetIsAromatic()) + x[i + 1] = 0.01 * a.GetMass() + + return x + + def num_only(self, a: Atom) -> np.ndarray: + """featurize the atom by setting only the atomic number bit""" + x = np.zeros(len(self)) + + if a is None: + return x + + i = self.atomic_nums.get(a.GetAtomicNum(), len(self.atomic_nums)) + x[i] = 1 + + return x + + @classmethod + def v1(cls, max_atomic_num: int = 100): + """The original implementation used in Chemprop V1 [1]_, [2]_. + + Parameters + ---------- + max_atomic_num : int, default=100 + Include a bit for all atomic numbers in the interval :math:`[1, \mathtt{max_atomic_num}]` + + References + ----------- + .. [1] Yang, K.; Swanson, K.; Jin, W.; Coley, C.; Eiden, P.; Gao, H.; Guzman-Perez, A.; Hopper, T.; + Kelley, B.; Mathea, M.; Palmer, A. "Analyzing Learned Molecular Representations for Property Prediction." + J. Chem. Inf. Model. 2019, 59 (8), 3370–3388. https://doi.org/10.1021/acs.jcim.9b00237 + .. [2] Heid, E.; Greenman, K.P.; Chung, Y.; Li, S.C.; Graff, D.E.; Vermeire, F.H.; Wu, H.; Green, W.H.; McGill, + C.J. "Chemprop: A machine learning package for chemical property prediction." J. Chem. Inf. Model. 2024, + 64 (1), 9–17. https://doi.org/10.1021/acs.jcim.3c01250 + """ + + return cls( + atomic_nums=list(range(1, max_atomic_num + 1)), + degrees=list(range(6)), + formal_charges=[-1, -2, 1, 2, 0], + chiral_tags=list(range(4)), + num_Hs=list(range(5)), + hybridizations=[ + HybridizationType.SP, + HybridizationType.SP2, + HybridizationType.SP3, + HybridizationType.SP3D, + HybridizationType.SP3D2, + ], + ) + + @classmethod + def v2(cls): + """An implementation that includes an atom type bit for all elements in the first four rows of the periodic table plus iodine.""" + + return cls( + atomic_nums=list(range(1, 37)) + [53], + degrees=list(range(6)), + formal_charges=[-1, -2, 1, 2, 0], + chiral_tags=list(range(4)), + num_Hs=list(range(5)), + hybridizations=[ + HybridizationType.S, + HybridizationType.SP, + HybridizationType.SP2, + HybridizationType.SP2D, + HybridizationType.SP3, + HybridizationType.SP3D, + HybridizationType.SP3D2, + ], + ) + + @classmethod + def organic(cls): + r"""A specific parameterization intended for use with organic or drug-like molecules. + + This parameterization features: + 1. includes an atomic number bit only for H, B, C, N, O, F, Si, P, S, Cl, Br, and I atoms + 2. a hybridization bit for :math:`s, sp, sp^2` and :math:`sp^3` hybridizations. + """ + + return cls( + atomic_nums=[1, 5, 6, 7, 8, 9, 14, 15, 16, 17, 35, 53], + degrees=list(range(6)), + formal_charges=[-1, -2, 1, 2, 0], + chiral_tags=list(range(4)), + num_Hs=list(range(5)), + hybridizations=[ + HybridizationType.S, + HybridizationType.SP, + HybridizationType.SP2, + HybridizationType.SP3, + ], + ) + + +class AtomFeatureMode(EnumMapping): + """The mode of an atom is used for featurization into a `MolGraph`""" + + V1 = auto() + V2 = auto() + ORGANIC = auto() + + +def get_multi_hot_atom_featurizer(mode: str | AtomFeatureMode) -> MultiHotAtomFeaturizer: + """Build the corresponding multi-hot atom featurizer.""" + match AtomFeatureMode.get(mode): + case AtomFeatureMode.V1: + return MultiHotAtomFeaturizer.v1() + case AtomFeatureMode.V2: + return MultiHotAtomFeaturizer.v2() + case AtomFeatureMode.ORGANIC: + return MultiHotAtomFeaturizer.organic() + case _: + raise RuntimeError("unreachable code reached!") diff --git a/chemprop/featurizers/base.py b/chemprop/featurizers/base.py new file mode 100644 index 000000000..fd0ce8a45 --- /dev/null +++ b/chemprop/featurizers/base.py @@ -0,0 +1,30 @@ +from abc import abstractmethod +from collections.abc import Sized +from typing import Generic, TypeVar + +import numpy as np + +from chemprop.data.molgraph import MolGraph + +S = TypeVar("S") +T = TypeVar("T") + + +class Featurizer(Generic[S, T]): + """An :class:`Featurizer` featurizes inputs type ``S`` into outputs of + type ``T``.""" + + @abstractmethod + def __call__(self, input: S, *args, **kwargs) -> T: + """featurize an input""" + + +class VectorFeaturizer(Featurizer[S, np.ndarray], Sized): + ... + + +class GraphFeaturizer(Featurizer[S, MolGraph]): + @property + @abstractmethod + def shape(self) -> tuple[int, int]: + ... diff --git a/chemprop/featurizers/bond.py b/chemprop/featurizers/bond.py new file mode 100644 index 000000000..aaed42f0a --- /dev/null +++ b/chemprop/featurizers/bond.py @@ -0,0 +1,92 @@ +from typing import Sequence + +import numpy as np +from rdkit.Chem.rdchem import Bond, BondType + +from chemprop.featurizers.base import VectorFeaturizer + + +class MultiHotBondFeaturizer(VectorFeaturizer[Bond]): + """A :class:`MultiHotBondFeaturizer` feauturizes bonds based on the following attributes: + + * ``null``-ity (i.e., is the bond ``None``?) + * bond type + * conjugated? + * in ring? + * stereochemistry + + The feature vectors produced by this featurizer have the following (general) signature: + + +---------------------+-----------------+--------------+ + | slice [start, stop) | subfeature | unknown pad? | + +=====================+=================+==============+ + | 0-1 | null? | N | + +---------------------+-----------------+--------------+ + | 1-5 | bond type | N | + +---------------------+-----------------+--------------+ + | 5-6 | conjugated? | N | + +---------------------+-----------------+--------------+ + | 6-8 | in ring? | N | + +---------------------+-----------------+--------------+ + | 7-14 | stereochemistry | Y | + +---------------------+-----------------+--------------+ + + **NOTE**: the above signature only applies for the default arguments, as the bond type and + sterochemistry slices can increase in size depending on the input arguments. + + Parameters + ---------- + bond_types : Sequence[BondType] | None, default=[SINGLE, DOUBLE, TRIPLE, AROMATIC] + the known bond types + stereos : Sequence[int] | None, default=[0, 1, 2, 3, 4, 5] + the known bond stereochemistries. See [1]_ for more details + + References + ---------- + .. [1] https://www.rdkit.org/docs/source/rdkit.Chem.rdchem.html#rdkit.Chem.rdchem.BondStereo.values + """ + + def __init__( + self, bond_types: Sequence[BondType] | None = None, stereos: Sequence[int] | None = None + ): + self.bond_types = bond_types or [ + BondType.SINGLE, + BondType.DOUBLE, + BondType.TRIPLE, + BondType.AROMATIC, + ] + self.stereo = stereos or range(6) + + def __len__(self): + return 1 + len(self.bond_types) + 2 + (len(self.stereo) + 1) + + def __call__(self, b: Bond) -> np.ndarray: + x = np.zeros(len(self), int) + + if b is None: + x[0] = 1 + return x + + i = 1 + bond_type = b.GetBondType() + bt_bit, size = self.one_hot_index(bond_type, self.bond_types) + if bt_bit != size: + x[i + bt_bit] = 1 + i += size - 1 + + x[i] = int(b.GetIsConjugated()) + x[i + 1] = int(b.IsInRing()) + i += 2 + + stereo_bit, _ = self.one_hot_index(int(b.GetStereo()), self.stereo) + x[i + stereo_bit] = 1 + + return x + + @classmethod + def one_hot_index(cls, x, xs: Sequence) -> tuple[int, int]: + """Returns a tuple of the index of ``x`` in ``xs`` and ``len(xs) + 1`` if ``x`` is in ``xs``. + Otherwise, returns a tuple with ``len(xs)`` and ``len(xs) + 1``.""" + n = len(xs) + + return xs.index(x) if x in xs else n, n + 1 diff --git a/chemprop/featurizers/molecule.py b/chemprop/featurizers/molecule.py new file mode 100644 index 000000000..ad701feb2 --- /dev/null +++ b/chemprop/featurizers/molecule.py @@ -0,0 +1,43 @@ +import numpy as np +from rdkit import Chem +from rdkit.Chem import Mol +from rdkit.Chem.rdFingerprintGenerator import GetMorganGenerator + +from chemprop.featurizers.base import VectorFeaturizer +from chemprop.utils import ClassRegistry + +MoleculeFeaturizerRegistry = ClassRegistry[VectorFeaturizer[Mol]]() + + +class MorganFeaturizerMixin: + def __init__(self, radius: int = 2, length: int = 2048, include_chirality: bool = True): + if radius < 0: + raise ValueError(f"arg 'radius' must be >= 0! got: {radius}") + + self.length = length + self.F = GetMorganGenerator( + radius=radius, fpSize=length, includeChirality=include_chirality + ) + + def __len__(self) -> int: + return self.length + + +class BinaryFeaturizerMixin: + def __call__(self, mol: Chem.Mol) -> np.ndarray: + return self.F.GetFingerprintAsNumPy(mol) + + +class CountFeaturizerMixin: + def __call__(self, mol: Chem.Mol) -> np.ndarray: + return self.F.GetCountFingerprintAsNumPy(mol).astype(np.int32) + + +@MoleculeFeaturizerRegistry("morgan_binary") +class MorganBinaryFeaturizer(MorganFeaturizerMixin, BinaryFeaturizerMixin, VectorFeaturizer[Mol]): + pass + + +@MoleculeFeaturizerRegistry("morgan_count") +class MorganCountFeaturizer(MorganFeaturizerMixin, CountFeaturizerMixin, VectorFeaturizer[Mol]): + pass diff --git a/chemprop/featurizers/molgraph/__init__.py b/chemprop/featurizers/molgraph/__init__.py new file mode 100644 index 000000000..b5c44897f --- /dev/null +++ b/chemprop/featurizers/molgraph/__init__.py @@ -0,0 +1,13 @@ +from .cache import MolGraphCacheFacade, MolGraphCache, MolGraphCacheOnTheFly +from .molecule import SimpleMoleculeMolGraphFeaturizer +from .reaction import CondensedGraphOfReactionFeaturizer, CGRFeaturizer, RxnMode + +__all__ = [ + "MolGraphCacheFacade", + "MolGraphCache", + "MolGraphCacheOnTheFly", + "SimpleMoleculeMolGraphFeaturizer", + "CondensedGraphOfReactionFeaturizer", + "CGRFeaturizer", + "RxnMode", +] diff --git a/chemprop/featurizers/molgraph/cache.py b/chemprop/featurizers/molgraph/cache.py new file mode 100644 index 000000000..8f2ca32a4 --- /dev/null +++ b/chemprop/featurizers/molgraph/cache.py @@ -0,0 +1,89 @@ +from abc import abstractmethod +from collections.abc import Sequence +from typing import Generic, Iterable + +import numpy as np + +from chemprop.featurizers.base import S, Featurizer +from chemprop.data.molgraph import MolGraph + + +class MolGraphCacheFacade(Sequence[MolGraph], Generic[S]): + """ + A :class:`MolGraphCacheFacade` provided an interface for caching + :class:`~chemprop.data.molgraph.MolGraph`\s. + + .. note:: + This class only provides a facade for a cached dataset, but it _does not guarantee_ + whether the underlying data is truly cached. + + + Parameters + ---------- + inputs : Iterable[S] + The inputs to be featurized. + V_fs : Iterable[np.ndarray] + The node features for each input. + E_fs : Iterable[np.ndarray] + The edge features for each input. + featurizer : Featurizer[S, MolGraph] + The featurizer with which to generate the + :class:`~chemprop.data.molgraph.MolGraph`\s. + """ + + @abstractmethod + def __init__( + self, + inputs: Iterable[S], + V_fs: Iterable[np.ndarray], + E_fs: Iterable[np.ndarray], + featurizer: Featurizer[S, MolGraph], + ): + pass + + +class MolGraphCache(MolGraphCacheFacade): + """ + A :class:`MolGraphCache` precomputes the corresponding + :class:`~chemprop.data.molgraph.MolGraph`\s and caches them in memory. + """ + + def __init__( + self, + inputs: Iterable[S], + V_fs: Iterable[np.ndarray | None], + E_fs: Iterable[np.ndarray | None], + featurizer: Featurizer[S, MolGraph], + ): + self._mgs = [featurizer(input, V_f, E_f) for input, V_f, E_f in zip(inputs, V_fs, E_fs)] + + def __len__(self) -> int: + return len(self._mgs) + + def __getitem__(self, index: int) -> MolGraph: + return self._mgs[index] + + +class MolGraphCacheOnTheFly(MolGraphCacheFacade): + """ + A :class:`MolGraphCacheOnTheFly` computes the corresponding + :class:`~chemprop.data.molgraph.MolGraph`\s as they are requested. + """ + + def __init__( + self, + inputs: Iterable[S], + V_fs: Iterable[np.ndarray | None], + E_fs: Iterable[np.ndarray | None], + featurizer: Featurizer[S, MolGraph], + ): + self._inputs = list(inputs) + self._V_fs = list(V_fs) + self._E_fs = list(E_fs) + self._featurizer = featurizer + + def __len__(self) -> int: + return len(self._inputs) + + def __getitem__(self, index: int) -> MolGraph: + return self._featurizer(self._inputs[index], self._V_fs[index], self._E_fs[index]) diff --git a/chemprop/featurizers/molgraph/mixins.py b/chemprop/featurizers/molgraph/mixins.py new file mode 100644 index 000000000..7229df2dc --- /dev/null +++ b/chemprop/featurizers/molgraph/mixins.py @@ -0,0 +1,23 @@ +from dataclasses import dataclass, field + +from rdkit.Chem.rdchem import Atom, Bond + +from chemprop.featurizers.base import VectorFeaturizer +from chemprop.featurizers.atom import MultiHotAtomFeaturizer +from chemprop.featurizers.bond import MultiHotBondFeaturizer + + +@dataclass +class _MolGraphFeaturizerMixin: + atom_featurizer: VectorFeaturizer[Atom] = field(default_factory=MultiHotAtomFeaturizer.v2) + bond_featurizer: VectorFeaturizer[Bond] = field(default_factory=MultiHotBondFeaturizer) + + def __post_init__(self): + self.atom_fdim = len(self.atom_featurizer) + self.bond_fdim = len(self.bond_featurizer) + + @property + def shape(self) -> tuple[int, int]: + """the feature dimension of the atoms and bonds, respectively, of `MolGraph`s generated by + this featurizer""" + return self.atom_fdim, self.bond_fdim diff --git a/chemprop/featurizers/molgraph/molecule.py b/chemprop/featurizers/molgraph/molecule.py new file mode 100644 index 000000000..75943b590 --- /dev/null +++ b/chemprop/featurizers/molgraph/molecule.py @@ -0,0 +1,95 @@ +from dataclasses import InitVar, dataclass + +import numpy as np +from rdkit import Chem +from rdkit.Chem import Mol + +from chemprop.data.molgraph import MolGraph +from chemprop.featurizers.base import GraphFeaturizer +from chemprop.featurizers.molgraph.mixins import _MolGraphFeaturizerMixin + + +@dataclass +class SimpleMoleculeMolGraphFeaturizer(_MolGraphFeaturizerMixin, GraphFeaturizer[Mol]): + """A :class:`SimpleMoleculeMolGraphFeaturizer` is the default implementation of a + :class:`MoleculeMolGraphFeaturizer` + + Parameters + ---------- + atom_featurizer : AtomFeaturizer, default=MultiHotAtomFeaturizer() + the featurizer with which to calculate feature representations of the atoms in a given + molecule + bond_featurizer : BondFeaturizer, default=MultiHotBondFeaturizer() + the featurizer with which to calculate feature representations of the bonds in a given + molecule + extra_atom_fdim : int, default=0 + the dimension of the additional features that will be concatenated onto the calculated + features of each atom + extra_bond_fdim : int, default=0 + the dimension of the additional features that will be concatenated onto the calculated + features of each bond + """ + + extra_atom_fdim: InitVar[int] = 0 + extra_bond_fdim: InitVar[int] = 0 + + def __post_init__(self, extra_atom_fdim: int = 0, extra_bond_fdim: int = 0): + super().__post_init__() + + self.extra_atom_fdim = extra_atom_fdim + self.extra_bond_fdim = extra_bond_fdim + self.atom_fdim += self.extra_atom_fdim + self.bond_fdim += self.extra_bond_fdim + + def __call__( + self, + mol: Chem.Mol, + atom_features_extra: np.ndarray | None = None, + bond_features_extra: np.ndarray | None = None, + ) -> MolGraph: + n_atoms = mol.GetNumAtoms() + n_bonds = mol.GetNumBonds() + + if atom_features_extra is not None and len(atom_features_extra) != n_atoms: + raise ValueError( + "Input molecule must have same number of atoms as `len(atom_features_extra)`!" + f"got: {n_atoms} and {len(atom_features_extra)}, respectively" + ) + if bond_features_extra is not None and len(bond_features_extra) != n_bonds: + raise ValueError( + "Input molecule must have same number of bonds as `len(bond_features_extra)`!" + f"got: {n_bonds} and {len(bond_features_extra)}, respectively" + ) + + if n_atoms == 0: + V = np.zeros((1, self.atom_fdim), dtype=np.single) + else: + V = np.array([self.atom_featurizer(a) for a in mol.GetAtoms()], dtype=np.single) + E = np.empty((2 * n_bonds, self.bond_fdim)) + edge_index = [[], []] + + if atom_features_extra is not None: + V = np.hstack((V, atom_features_extra)) + + i = 0 + for u in range(n_atoms): + for v in range(u + 1, n_atoms): + bond = mol.GetBondBetweenAtoms(u, v) + if bond is None: + continue + + x_e = self.bond_featurizer(bond) + if bond_features_extra is not None: + x_e = np.concatenate((x_e, bond_features_extra[bond.GetIdx()]), dtype=np.single) + + E[i : i + 2] = x_e + + edge_index[0].extend([u, v]) + edge_index[1].extend([v, u]) + + i += 2 + + rev_edge_index = np.arange(len(E)).reshape(-1, 2)[:, ::-1].ravel() + edge_index = np.array(edge_index, int) + + return MolGraph(V, E, edge_index, rev_edge_index) diff --git a/chemprop/featurizers/molgraph/reaction.py b/chemprop/featurizers/molgraph/reaction.py new file mode 100644 index 000000000..0a2c890ab --- /dev/null +++ b/chemprop/featurizers/molgraph/reaction.py @@ -0,0 +1,333 @@ +from dataclasses import InitVar, dataclass +from enum import auto +from typing import Iterable, Sequence, TypeAlias +import warnings + +import numpy as np +from rdkit import Chem +from rdkit.Chem.rdchem import Bond, Mol +from chemprop.featurizers.base import GraphFeaturizer + +from chemprop.types import Rxn +from chemprop.data.molgraph import MolGraph +from chemprop.featurizers.molgraph.mixins import _MolGraphFeaturizerMixin +from chemprop.utils.utils import EnumMapping + + +class RxnMode(EnumMapping): + """The mode by which a reaction should be featurized into a `MolGraph`""" + + REAC_PROD = auto() + """concatenate the reactant features with the product features.""" + REAC_PROD_BALANCE = auto() + """concatenate the reactant features with the products feature and balances imbalanced + reactions""" + REAC_DIFF = auto() + """concatenates the reactant features with the difference in features between reactants and + products""" + REAC_DIFF_BALANCE = auto() + """concatenates the reactant features with the difference in features between reactants and + product and balances imbalanced reactions""" + PROD_DIFF = auto() + """concatenates the product features with the difference in features between reactants and + products""" + PROD_DIFF_BALANCE = auto() + """concatenates the product features with the difference in features between reactants and + products and balances imbalanced reactions""" + + +@dataclass +class CondensedGraphOfReactionFeaturizer(_MolGraphFeaturizerMixin, GraphFeaturizer[Rxn]): + """A :class:`CondensedGraphOfReactionFeaturizer` featurizes reactions using the condensed + reaction graph method utilized in [1]_ + + **NOTE**: This class *does not* accept a :class:`AtomFeaturizer` instance. This is because + it requries the :meth:`num_only()` method, which is only implemented in the concrete + :class:`AtomFeaturizer` class + + Parameters + ---------- + atom_featurizer : AtomFeaturizer, default=AtomFeaturizer() + the featurizer with which to calculate feature representations of the atoms in a given + molecule + bond_featurizer : BondFeaturizerBase, default=BondFeaturizer() + the featurizer with which to calculate feature representations of the bonds in a given + molecule + mode_ : Union[str, ReactionMode], default=ReactionMode.REAC_DIFF + the mode by which to featurize the reaction as either the string code or enum value + + References + ---------- + .. [1] Heid, E.; Green, W.H. "Machine Learning of Reaction Properties via Learned + Representations of the Condensed Graph of Reaction." J. Chem. Inf. Model. 2022, 62, + 2101-2110. https://doi.org/10.1021/acs.jcim.1c00975 + """ + + mode_: InitVar[str | RxnMode] = RxnMode.REAC_DIFF + + def __post_init__(self, mode_: str | RxnMode): + super().__post_init__() + + self.mode = mode_ + self.atom_fdim += len(self.atom_featurizer) - len(self.atom_featurizer.atomic_nums) - 1 + self.bond_fdim *= 2 + + @property + def mode(self) -> RxnMode: + return self.__mode + + @mode.setter + def mode(self, m: str | RxnMode): + self.__mode = RxnMode.get(m) + + def __call__( + self, + rxn: tuple[Chem.Mol, Chem.Mol], + atom_features_extra: np.ndarray | None = None, + bond_features_extra: np.ndarray | None = None, + ) -> MolGraph: + """Featurize the input reaction into a molecular graph + + Parameters + ---------- + rxn : Rxn + a 2-tuple of atom-mapped rdkit molecules, where the 0th element is the reactant and the + 1st element is the product + atom_features_extra : np.ndarray | None, default=None + *UNSUPPORTED* maintained only to maintain parity with the method signature of the + `MoleculeFeaturizer` + bond_features_extra : np.ndarray | None, default=None + *UNSUPPORTED* maintained only to maintain parity with the method signature of the + `MoleculeFeaturizer` + + Returns + ------- + MolGraph + the molecular graph of the reaction + """ + + if atom_features_extra is not None: + warnings.warn("'atom_features_extra' is currently unsupported for reactions") + if bond_features_extra is not None: + warnings.warn("'bond_features_extra' is currently unsupported for reactions") + + reac, pdt = rxn + r2p_idx_map, pdt_idxs, reac_idxs = self.map_reac_to_prod(reac, pdt) + + V = self._calc_node_feature_matrix(reac, pdt, r2p_idx_map, pdt_idxs, reac_idxs) + E = [] + edge_index = [[], []] + + n_atoms_tot = len(V) + n_atoms_reac = reac.GetNumAtoms() + + i = 0 + for u in range(n_atoms_tot): + for v in range(u + 1, n_atoms_tot): + b_reac, b_prod = self._get_bonds( + reac, pdt, r2p_idx_map, pdt_idxs, n_atoms_reac, u, v + ) + if b_reac is None and b_prod is None: + continue + + x_e = self._calc_edge_feature(b_reac, b_prod) + E.extend([x_e, x_e]) + edge_index[0].extend([u, v]) + edge_index[1].extend([v, u]) + + i += 2 + + E = np.array(E) + rev_edge_index = np.arange(len(E)).reshape(-1, 2)[:, ::-1].ravel() + edge_index = np.array(edge_index, int) + + return MolGraph(V, E, edge_index, rev_edge_index) + + def _calc_node_feature_matrix( + self, + rct: Mol, + pdt: Mol, + r2p_idx_map: dict[int, int], + pdt_idxs: Iterable[int], + reac_idxs: Iterable[int], + ) -> np.ndarray: + """Calculate the node feature matrix for the reaction""" + X_v_r1 = np.array([self.atom_featurizer(a) for a in rct.GetAtoms()]) + X_v_p2 = np.array([self.atom_featurizer(pdt.GetAtomWithIdx(i)) for i in pdt_idxs]) + X_v_p2 = X_v_p2.reshape(-1, X_v_r1.shape[1]) + + if self.mode in [RxnMode.REAC_DIFF, RxnMode.PROD_DIFF, RxnMode.REAC_PROD]: + # Reactant: + # (1) regular features for each atom in the reactants + # (2) zero features for each atom that's only in the products + X_v_r2 = [self.atom_featurizer.num_only(pdt.GetAtomWithIdx(i)) for i in pdt_idxs] + X_v_r2 = np.array(X_v_r2).reshape(-1, X_v_r1.shape[1]) + + # Product: + # (1) either (a) product-side features for each atom in both + # or (b) zero features for each atom only in the reatants + # (2) regular features for each atom only in the products + X_v_p1 = np.array( + [ + ( + self.atom_featurizer(pdt.GetAtomWithIdx(r2p_idx_map[a.GetIdx()])) + if a.GetIdx() not in reac_idxs + else self.atom_featurizer.num_only(a) + ) + for a in rct.GetAtoms() + ] + ) + else: + # Reactant: + # (1) regular features for each atom in the reactants + # (2) regular features for each atom only in the products + X_v_r2 = [self.atom_featurizer(pdt.GetAtomWithIdx(i)) for i in pdt_idxs] + X_v_r2 = np.array(X_v_r2).reshape(-1, X_v_r1.shape[1]) + + # Product: + # (1) either (a) product-side features for each atom in both + # or (b) reactant-side features for each atom only in the reatants + # (2) regular features for each atom only in the products + X_v_p1 = np.array( + [ + ( + self.atom_featurizer(pdt.GetAtomWithIdx(r2p_idx_map[a.GetIdx()])) + if a.GetIdx() not in reac_idxs + else self.atom_featurizer(a) + ) + for a in rct.GetAtoms() + ] + ) + + X_v_r = np.concatenate((X_v_r1, X_v_r2)) + X_v_p = np.concatenate((X_v_p1, X_v_p2)) + + m = min(len(X_v_r), len(X_v_p)) + + if self.mode in [RxnMode.REAC_PROD, RxnMode.REAC_PROD_BALANCE]: + X_v = np.hstack((X_v_r[:m], X_v_p[:m, len(self.atom_featurizer.atomic_nums) + 1 :])) + else: + X_v_d = X_v_p[:m] - X_v_r[:m] + if self.mode in [RxnMode.REAC_DIFF, RxnMode.REAC_DIFF_BALANCE]: + X_v = np.hstack((X_v_r[:m], X_v_d[:m, len(self.atom_featurizer.atomic_nums) + 1 :])) + else: + X_v = np.hstack((X_v_p[:m], X_v_d[:m, len(self.atom_featurizer.atomic_nums) + 1 :])) + + return X_v + + def _get_bonds( + self, + rct: Bond, + pdt: Bond, + ri2pj: dict[int, int], + pids: Sequence[int], + n_atoms_r: int, + u: int, + v: int, + ) -> tuple[Bond, Bond]: + """get the corresponding reactant- and product-side bond, respectively, betweeen atoms `u` and `v`""" + if u >= n_atoms_r and v >= n_atoms_r: + b_prod = pdt.GetBondBetweenAtoms(pids[u - n_atoms_r], pids[v - n_atoms_r]) + + if self.mode in [ + RxnMode.REAC_PROD_BALANCE, + RxnMode.REAC_DIFF_BALANCE, + RxnMode.PROD_DIFF_BALANCE, + ]: + b_reac = b_prod + else: + b_reac = None + elif u < n_atoms_r and v >= n_atoms_r: # One atom only in product + b_reac = None + + if u in ri2pj: + b_prod = pdt.GetBondBetweenAtoms(ri2pj[u], pids[v - n_atoms_r]) + else: # Atom atom only in reactant, the other only in product + b_prod = None + else: + b_reac = rct.GetBondBetweenAtoms(u, v) + + if u in ri2pj and v in ri2pj: # Both atoms in both reactant and product + b_prod = pdt.GetBondBetweenAtoms(ri2pj[u], ri2pj[v]) + elif self.mode in [ + RxnMode.REAC_PROD_BALANCE, + RxnMode.REAC_DIFF_BALANCE, + RxnMode.PROD_DIFF_BALANCE, + ]: + b_prod = None if (u in ri2pj or v in ri2pj) else b_reac + else: # One or both atoms only in reactant + b_prod = None + + return b_reac, b_prod + + def _calc_edge_feature(self, b_reac: Bond, b_pdt: Bond): + """Calculate the global features of the two bonds""" + x_e_r = self.bond_featurizer(b_reac) + x_e_p = self.bond_featurizer(b_pdt) + x_e_d = x_e_p - x_e_r + + if self.mode in [RxnMode.REAC_PROD, RxnMode.REAC_PROD_BALANCE]: + x_e = np.hstack((x_e_r, x_e_p)) + elif self.mode in [RxnMode.REAC_DIFF, RxnMode.REAC_DIFF_BALANCE]: + x_e = np.hstack((x_e_r, x_e_d)) + else: + x_e = np.hstack((x_e_p, x_e_d)) + + return x_e + + @classmethod + def map_reac_to_prod( + cls, reacs: Chem.Mol, pdts: Chem.Mol + ) -> tuple[dict[int, int], list[int], list[int]]: + """Map atom indices between corresponding atoms in the reactant and product molecules + + Parameters + ---------- + reacs : Chem.Mol + An RDKit molecule of the reactants + pdts : Chem.Mol + An RDKit molecule of the products + + Returns + ------- + ri2pi : dict[int, int] + A dictionary of corresponding atom indices from reactant atoms to product atoms + pdt_idxs : list[int] + atom indices of poduct atoms + rct_idxs : list[int] + atom indices of reactant atoms + """ + pdt_idxs = [] + mapno2pj = {} + reac_atommap_nums = {a.GetAtomMapNum() for a in reacs.GetAtoms()} + + for a in pdts.GetAtoms(): + map_num = a.GetAtomMapNum() + j = a.GetIdx() + + if map_num > 0: + mapno2pj[map_num] = j + if map_num not in reac_atommap_nums: + pdt_idxs.append(j) + else: + pdt_idxs.append(j) + + rct_idxs = [] + r2p_idx_map = {} + + for a in reacs.GetAtoms(): + map_num = a.GetAtomMapNum() + i = a.GetIdx() + + if map_num > 0: + try: + r2p_idx_map[i] = mapno2pj[map_num] + except KeyError: + rct_idxs.append(i) + else: + rct_idxs.append(i) + + return r2p_idx_map, pdt_idxs, rct_idxs + + +CGRFeaturizer: TypeAlias = CondensedGraphOfReactionFeaturizer diff --git a/chemprop/hyperopt_utils.py b/chemprop/hyperopt_utils.py deleted file mode 100644 index 5a8558a8a..000000000 --- a/chemprop/hyperopt_utils.py +++ /dev/null @@ -1,205 +0,0 @@ -from chemprop.args import HyperoptArgs -import os -import pickle -from typing import List, Dict -import csv -import json - -from hyperopt import Trials - -from chemprop.constants import HYPEROPT_SEED_FILE_NAME -from chemprop.utils import makedirs - -def merge_trials(trials: Trials, new_trials_data: List[Dict]) -> Trials: - """ - Merge a hyperopt trials object with the contents of another hyperopt trials object. - - :param trials: A hyperopt trials object containing trials data, organized into hierarchical dictionaries. - :param trials_data: The contents of a hyperopt trials object, `Trials.trials`. - :return: A hyperopt trials object, merged from the two inputs. - """ - max_tid = 0 - if len(trials.trials) > 0: - max_tid = max([trial['tid'] for trial in trials.trials]) - - for trial in new_trials_data: - tid = trial['tid'] + max_tid + 1 #trial id needs to be unique among this list of ids. - hyperopt_trial = Trials().new_trial_docs( - tids=[None], - specs=[None], - results=[None], - miscs=[None]) - hyperopt_trial[0] = trial - hyperopt_trial[0]['tid'] = tid - hyperopt_trial[0]['misc']['tid'] = tid - for key in hyperopt_trial[0]['misc']['idxs'].keys(): - hyperopt_trial[0]['misc']['idxs'][key] = [tid] - trials.insert_trial_docs(hyperopt_trial) - trials.refresh() - return trials - - -def load_trials(dir_path: str, previous_trials: Trials = None) -> Trials: - """ - Load in trials from each pickle file in the hyperopt checkpoint directory. - Checkpoints are newly loaded in at each iteration to allow for parallel entries - into the checkpoint folder by independent hyperoptimization instances. - - :param dir_path: Path to the directory containing hyperopt checkpoint files. - :param previous_trials: Any previously generated trials objects that the loaded trials will be merged with. - :return: A trials object containing the merged trials from all checkpoint files. - """ - - # List out all the pickle files in the hyperopt checkpoint directory - hyperopt_checkpoint_files = [os.path.join(dir_path, path) for path in os.listdir(dir_path) if '.pkl' in path] - - # Load hyperopt trials object from each file - loaded_trials = Trials() - if previous_trials is not None: - loaded_trials = merge_trials(loaded_trials, previous_trials.trials) - - for path in hyperopt_checkpoint_files: - with open(path,'rb') as f: - trial = pickle.load(f) - loaded_trials = merge_trials(loaded_trials, trial.trials) - - return loaded_trials - - -def save_trials(dir_path: str, trials: Trials, hyperopt_seed: int) -> None: - """ - Saves hyperopt trial data as a `.pkl` file. - - :param dir_path: Path to the directory containing hyperopt checkpoint files. - :param trials: A trials object containing information on a completed hyperopt iteration. - """ - new_fname = f'{hyperopt_seed}.pkl' - existing_files = os.listdir(dir_path) - if new_fname in existing_files: - raise ValueError(f'When saving trial with unique seed {hyperopt_seed}, found that a trial with this seed already exists.') - pickle.dump(trials, open(os.path.join(dir_path, new_fname), 'wb')) - - -def get_hyperopt_seed(seed: int, dir_path: str) -> int: - """ - Assigns a seed for hyperopt calculations. Each iteration will start with a different seed. - - :param seed: The initial attempted hyperopt seed. - :param dir_path: Path to the directory containing hyperopt checkpoint files. - :return: An integer for use as hyperopt random seed. - """ - - seed_path = os.path.join(dir_path,HYPEROPT_SEED_FILE_NAME) - - seeds = [] - if os.path.exists(seed_path): - with open(seed_path, 'r') as f: - seed_line = next(f) - seeds.extend(seed_line.split()) - else: - makedirs(seed_path, isfile=True) - - seeds = [int(sd) for sd in seeds] - - while seed in seeds: - seed += 1 - seeds.append(seed) - - write_line = " ".join(map(str, seeds)) + '\n' - - with open(seed_path, 'w') as f: - f.write(write_line) - - return seed - - -def load_manual_trials(manual_trials_dirs: List[str], param_keys: List[str], hyperopt_args: HyperoptArgs) -> Trials: - """ - Function for loading in manual training runs as trials for inclusion in hyperparameter search. - Trials must be consistent in all arguments with trials that would be generated in hyperparameter optimization. - - :param manual_trials_dirs: A list of paths to save directories for the manual trials, as would include test_scores.csv and args.json. - :param param_keys: A list of the parameters included in the hyperparameter optimization. - :param hyperopt_args: The arguments for the hyperparameter optimization job. - :return: A hyperopt trials object including all the loaded manual trials. - """ - matching_args = [ # manual trials must occupy the same space as the hyperparameter optimization search. This is a non-extensive list of arguments to check to see if they are consistent. - 'number_of_molecules', - 'aggregation', - 'num_folds', - 'ensemble_size', - 'max_lr', - 'init_lr', - 'final_lr', - 'activation', - 'metric', - 'bias', - 'epochs', - 'explicit_h', - 'reaction', - 'split_type', - 'warmup_epochs', - ] - - manual_trials_data = [] - for i, trial_dir in enumerate(manual_trials_dirs): - - # Extract trial data from test_scores.csv - with open(os.path.join(trial_dir, 'test_scores.csv')) as f: - reader=csv.reader(f) - next(reader) - read_line=next(reader) - mean_score = float(read_line[1]) - std_score = float(read_line[2]) - loss = (1 if hyperopt_args.minimize_score else -1) * mean_score - - # Extract argument data from args.json - with open(os.path.join(trial_dir, 'args.json')) as f: - trial_args = json.load(f) - - # Check for differences in manual trials and hyperopt space - if 'hidden_size' in param_keys: - if trial_args['hidden_size'] != trial_args['ffn_hidden_size']: - raise ValueError(f'The manual trial in {trial_dir} has a hidden_size {trial_args["hidden_size"]} ' - f'that does not match its ffn_hidden_size {trial_args["ffn_hidden_size"]}, as it would in hyperparameter search.') - for arg in matching_args: - if arg not in param_keys: - if getattr(hyperopt_args,arg) != trial_args[arg]: - raise ValueError(f'Manual trial {trial_dir} has different training argument {arg} than the hyperparameter optimization search trials.') - - # Construct data dict - param_dict = {key: trial_args[key] for key in param_keys} - vals_dict = {key: [param_dict[key]] for key in param_keys} - idxs_dict = {key: [i] for key in param_keys} - results_dict = { - 'loss': loss, - 'status': 'ok', - 'mean_score': mean_score, - 'std_score': std_score, - 'hyperparams': param_dict, - 'num_params': 0, - } - misc_dict = { - 'tid': i, - 'cmd': ('domain_attachment', 'FMinIter_Domain'), - 'workdir': None, - 'idxs': idxs_dict, - 'vals': vals_dict, - } - trial_data = { - 'state': 2, - 'tid': i, - 'spec': None, - 'result': results_dict, - 'misc': misc_dict, - 'exp_key': None, - 'owner': None, - 'version': 0, - 'book_time': None, - 'refresh_time': None, - } - manual_trials_data.append(trial_data) - - trials = Trials() - trials = merge_trials(trials=trials, new_trials_data=manual_trials_data) - return trials diff --git a/chemprop/hyperparameter_optimization.py b/chemprop/hyperparameter_optimization.py deleted file mode 100644 index 14db1bff9..000000000 --- a/chemprop/hyperparameter_optimization.py +++ /dev/null @@ -1,164 +0,0 @@ -"""Optimizes hyperparameters using Bayesian optimization.""" - -from copy import deepcopy -import json -from typing import Dict, Union -import os -from functools import partial - -from hyperopt import fmin, hp, tpe, Trials -import numpy as np - -from chemprop.args import HyperoptArgs -from chemprop.constants import HYPEROPT_LOGGER_NAME -from chemprop.models import MoleculeModel -from chemprop.nn_utils import param_count -from chemprop.train import cross_validate, run_training -from chemprop.utils import create_logger, makedirs, timeit -from chemprop.hyperopt_utils import merge_trials, load_trials, save_trials, get_hyperopt_seed, load_manual_trials - - -SPACE = { - 'hidden_size': hp.quniform('hidden_size', low=300, high=2400, q=100), - 'depth': hp.quniform('depth', low=2, high=6, q=1), - 'dropout': hp.quniform('dropout', low=0.0, high=0.4, q=0.05), - 'ffn_num_layers': hp.quniform('ffn_num_layers', low=1, high=3, q=1) -} -INT_KEYS = ['hidden_size', 'depth', 'ffn_num_layers'] - - -@timeit(logger_name=HYPEROPT_LOGGER_NAME) -def hyperopt(args: HyperoptArgs) -> None: - """ - Runs hyperparameter optimization on a Chemprop model. - - Hyperparameter optimization optimizes the following parameters: - - * :code:`hidden_size`: The hidden size of the neural network layers is selected from {300, 400, ..., 2400} - * :code:`depth`: The number of message passing iterations is selected from {2, 3, 4, 5, 6} - * :code:`dropout`: The dropout probability is selected from {0.0, 0.05, ..., 0.4} - * :code:`ffn_num_layers`: The number of feed-forward layers after message passing is selected from {1, 2, 3} - - The best set of hyperparameters is saved as a JSON file to :code:`args.config_save_path`. - - :param args: A :class:`~chemprop.args.HyperoptArgs` object containing arguments for hyperparameter - optimization in addition to all arguments needed for training. - """ - # Create logger - logger = create_logger(name=HYPEROPT_LOGGER_NAME, save_dir=args.log_dir, quiet=True) - - # Load in manual trials - if args.manual_trial_dirs is not None: - manual_trials = load_manual_trials(args.manual_trial_dirs, SPACE.keys(), args) - logger.info(f'{len(manual_trials)} manual trials included in hyperparameter search.') - else: - manual_trials = None - logger.info('No manual trials loaded as part of hyperparameter search') - - makedirs(args.hyperopt_checkpoint_dir) - - # Define hyperparameter optimization - def objective(hyperparams: Dict[str, Union[int, float]], seed: int) -> Dict: - # Convert hyperparams from float to int when necessary - for key in INT_KEYS: - hyperparams[key] = int(hyperparams[key]) - - # Copy args - hyper_args = deepcopy(args) - - # Update args with hyperparams - if args.save_dir is not None: - folder_name = '_'.join(f'{key}_{value}' for key, value in hyperparams.items()) - hyper_args.save_dir = os.path.join(hyper_args.save_dir, folder_name) - - for key, value in hyperparams.items(): - setattr(hyper_args, key, value) - - hyper_args.ffn_hidden_size = hyper_args.hidden_size - - # Cross validate - mean_score, std_score = cross_validate(args=hyper_args, train_func=run_training) - - # Record results - temp_model = MoleculeModel(hyper_args) - num_params = param_count(temp_model) - logger.info(f'Trial results with seed {seed}') - logger.info(hyperparams) - logger.info(f'num params: {num_params:,}') - logger.info(f'{mean_score} +/- {std_score} {hyper_args.metric}') - - # Deal with nan - if np.isnan(mean_score): - if hyper_args.dataset_type == 'classification': - mean_score = 0 - else: - raise ValueError('Can\'t handle nan score for non-classification dataset.') - - loss = (1 if hyper_args.minimize_score else -1) * mean_score - - return { - 'loss': loss, - 'status': 'ok', - 'mean_score': mean_score, - 'std_score': std_score, - 'hyperparams': hyperparams, - 'num_params': num_params, - 'seed': seed, - } - - # Iterate over a number of trials - for i in range(args.num_iters): - # run fmin and load trials in single steps to allow for parallel operation - trials = load_trials(dir_path=args.hyperopt_checkpoint_dir, previous_trials=manual_trials) - if len(trials) >= args.num_iters: - break - - # Set a unique random seed for each trial. Pass it into objective function for logging purposes. - hyperopt_seed = get_hyperopt_seed(seed=args.seed, dir_path=args.hyperopt_checkpoint_dir) - fmin_objective = partial(objective, seed=hyperopt_seed) - os.environ['HYPEROPT_FMIN_SEED'] = str(hyperopt_seed) # this environment variable changes the seed in fmin - - # Log the start of the trial - logger.info(f'Initiating trial with seed {hyperopt_seed}') - logger.info(f'Loaded {len(trials)} previous trials') - if len(trials) < args.startup_random_iters: - random_remaining = args.startup_random_iters - len(trials) - logger.info(f'Parameters assigned with random search, {random_remaining} random trials remaining') - else: - logger.info(f'Parameters assigned with TPE directed search') - - fmin( - fmin_objective, - SPACE, - algo=partial(tpe.suggest, n_startup_jobs=args.startup_random_iters), - max_evals=len(trials) + 1, - trials=trials, - ) - - # Create a trials object with only the last instance by merging the last data with an empty trials object - last_trial = merge_trials(Trials(), [trials.trials[-1]]) - save_trials(args.hyperopt_checkpoint_dir, last_trial, hyperopt_seed) - - # Report best result - all_trials = load_trials(dir_path=args.hyperopt_checkpoint_dir, previous_trials=manual_trials) - results = all_trials.results - results = [result for result in results if not np.isnan(result['mean_score'])] - best_result = min(results, key=lambda result: (1 if args.minimize_score else -1) * result['mean_score']) - logger.info(f'Best trial, with seed {best_result["seed"]}') - logger.info(best_result['hyperparams']) - logger.info(f'num params: {best_result["num_params"]:,}') - logger.info(f'{best_result["mean_score"]} +/- {best_result["std_score"]} {args.metric}') - - # Save best hyperparameter settings as JSON config file - makedirs(args.config_save_path, isfile=True) - - with open(args.config_save_path, 'w') as f: - json.dump(best_result['hyperparams'], f, indent=4, sort_keys=True) - - -def chemprop_hyperopt() -> None: - """Runs hyperparameter optimization for a Chemprop model. - - This is the entry point for the command line command :code:`chemprop_hyperopt`. - """ - hyperopt(args=HyperoptArgs().parse_args()) diff --git a/chemprop/interpret.py b/chemprop/interpret.py deleted file mode 100755 index 7883a62da..000000000 --- a/chemprop/interpret.py +++ /dev/null @@ -1,350 +0,0 @@ -import math -from typing import Callable, Dict, List, Set, Tuple - -import numpy as np -from rdkit import Chem - -from chemprop.args import InterpretArgs -from chemprop.data import get_data_from_smiles, get_header, get_smiles, MoleculeDataLoader, MoleculeDataset -from chemprop.train import predict -from chemprop.utils import load_args, load_checkpoint, load_scalers, timeit - - -MIN_ATOMS = 15 -C_PUCT = 10 - - -class ChempropModel: - """A :class:`ChempropModel` is a wrapper around a :class:`~chemprop.models.model.MoleculeModel` for interpretation.""" - - def __init__(self, args: InterpretArgs) -> None: - """ - :param args: A :class:`~chemprop.args.InterpretArgs` object containing arguments for interpretation. - """ - self.args = args - self.train_args = load_args(args.checkpoint_paths[0]) - - # If features were used during training, they must be used when predicting - if ((self.train_args.features_path is not None or self.train_args.features_generator is not None) - and args.features_generator is None): - raise ValueError('Features were used during training so they must be specified again during prediction ' - 'using the same type of features as before (with --features_generator ' - 'and using --no_features_scaling if applicable).') - - if self.train_args.atom_descriptors_size > 0 or self.train_args.atom_features_size > 0 or self.train_args.bond_features_size > 0: - raise NotImplementedError('The interpret function does not yet work with additional atom or bond features') - - self.scaler, self.features_scaler, self.atom_descriptor_scaler, self.bond_feature_scaler = load_scalers(args.checkpoint_paths[0]) - self.checkpoints = [load_checkpoint(checkpoint_path, device=args.device) for checkpoint_path in args.checkpoint_paths] - - def __call__(self, smiles: List[str], batch_size: int = 500) -> List[List[float]]: - """ - Makes predictions on a list of SMILES. - - :param smiles: A list of SMILES to make predictions on. - :param batch_size: The batch size. - :return: A list of lists of floats containing the predicted values. - """ - test_data = get_data_from_smiles(smiles=smiles, skip_invalid_smiles=False, features_generator=self.args.features_generator) - valid_indices = [i for i in range(len(test_data)) if test_data[i].mol is not None] - test_data = MoleculeDataset([test_data[i] for i in valid_indices]) - - if self.train_args.features_scaling: - test_data.normalize_features(self.features_scaler) - if self.train_args.atom_descriptor_scaling and self.args.atom_descriptors is not None: - test_data.normalize_features(self.atom_descriptor_scaler, scale_atom_descriptors=True) - if self.train_args.bond_feature_scaling and self.args.bond_features_size > 0: - test_data.normalize_features(self.bond_feature_scaler, scale_bond_features=True) - - test_data_loader = MoleculeDataLoader(dataset=test_data, batch_size=batch_size) - - sum_preds = [] - for model in self.checkpoints: - model_preds = predict( - model=model, - data_loader=test_data_loader, - scaler=self.scaler, - disable_progress_bar=True - ) - sum_preds.append(np.array(model_preds)) - - # Ensemble predictions - sum_preds = sum(sum_preds) - avg_preds = sum_preds / len(self.checkpoints) - - return avg_preds - - -class MCTSNode: - """A :class:`MCTSNode` represents a node in a Monte Carlo Tree Search.""" - - def __init__(self, smiles: str, atoms: List[int], W: float = 0, N: int = 0, P: float = 0) -> None: - """ - :param smiles: The SMILES for the substructure at this node. - :param atoms: A list of atom indices represented by this node. - :param W: The W value of this node. - :param N: The N value of this node. - :param P: The P value of this node. - """ - self.smiles = smiles - self.atoms = set(atoms) - self.children = [] - self.W = W - self.N = N - self.P = P - - def Q(self) -> float: - return self.W / self.N if self.N > 0 else 0 - - def U(self, n: int) -> float: - return C_PUCT * self.P * math.sqrt(n) / (1 + self.N) - - -def find_clusters(mol: Chem.Mol) -> Tuple[List[Tuple[int, ...]], List[List[int]]]: - """ - Finds clusters within the molecule. - - :param mol: An RDKit molecule. - :return: A tuple containing a list of atom tuples representing the clusters - and a list of lists of atoms in each cluster. - """ - n_atoms = mol.GetNumAtoms() - if n_atoms == 1: # special case - return [(0,)], [[0]] - - clusters = [] - for bond in mol.GetBonds(): - a1 = bond.GetBeginAtom().GetIdx() - a2 = bond.GetEndAtom().GetIdx() - if not bond.IsInRing(): - clusters.append((a1, a2)) - - ssr = [tuple(x) for x in Chem.GetSymmSSSR(mol)] - clusters.extend(ssr) - - atom_cls = [[] for _ in range(n_atoms)] - for i in range(len(clusters)): - for atom in clusters[i]: - atom_cls[atom].append(i) - - return clusters, atom_cls - - -def __extract_subgraph(mol: Chem.Mol, selected_atoms: Set[int]) -> Tuple[Chem.Mol, List[int]]: - """ - Extracts a subgraph from an RDKit molecule given a set of atom indices. - - :param mol: An RDKit molecule from which to extract a subgraph. - :param selected_atoms: The atoms which form the subgraph to be extracted. - :return: A tuple containing an RDKit molecule representing the subgraph - and a list of root atom indices from the selected indices. - """ - selected_atoms = set(selected_atoms) - roots = [] - for idx in selected_atoms: - atom = mol.GetAtomWithIdx(idx) - bad_neis = [y for y in atom.GetNeighbors() if y.GetIdx() not in selected_atoms] - if len(bad_neis) > 0: - roots.append(idx) - - new_mol = Chem.RWMol(mol) - - for atom_idx in roots: - atom = new_mol.GetAtomWithIdx(atom_idx) - atom.SetAtomMapNum(1) - aroma_bonds = [bond for bond in atom.GetBonds() if bond.GetBondType() == Chem.rdchem.BondType.AROMATIC] - aroma_bonds = [bond for bond in aroma_bonds if - bond.GetBeginAtom().GetIdx() in selected_atoms and bond.GetEndAtom().GetIdx() in selected_atoms] - if len(aroma_bonds) == 0: - atom.SetIsAromatic(False) - - remove_atoms = [atom.GetIdx() for atom in new_mol.GetAtoms() if atom.GetIdx() not in selected_atoms] - remove_atoms = sorted(remove_atoms, reverse=True) - for atom in remove_atoms: - new_mol.RemoveAtom(atom) - - return new_mol.GetMol(), roots - - -def extract_subgraph(smiles: str, selected_atoms: Set[int]) -> Tuple[str, List[int]]: - """ - Extracts a subgraph from a SMILES given a set of atom indices. - - :param smiles: A SMILES from which to extract a subgraph. - :param selected_atoms: The atoms which form the subgraph to be extracted. - :return: A tuple containing a SMILES representing the subgraph - and a list of root atom indices from the selected indices. - """ - # try with kekulization - mol = Chem.MolFromSmiles(smiles) - Chem.Kekulize(mol) - subgraph, roots = __extract_subgraph(mol, selected_atoms) - try: - subgraph = Chem.MolToSmiles(subgraph, kekuleSmiles=True) - subgraph = Chem.MolFromSmiles(subgraph) - except Exception: - subgraph = None - - mol = Chem.MolFromSmiles(smiles) # de-kekulize - if subgraph is not None and mol.HasSubstructMatch(subgraph): - return Chem.MolToSmiles(subgraph), roots - - # If fails, try without kekulization - subgraph, roots = __extract_subgraph(mol, selected_atoms) - subgraph = Chem.MolToSmiles(subgraph) - subgraph = Chem.MolFromSmiles(subgraph) - - if subgraph is not None: - return Chem.MolToSmiles(subgraph), roots - else: - return None, None - - -def mcts_rollout(node: MCTSNode, - state_map: Dict[str, MCTSNode], - orig_smiles: str, - clusters: List[Set[int]], - atom_cls: List[Set[int]], - nei_cls: List[Set[int]], - scoring_function: Callable[[List[str]], List[float]]) -> float: - """ - A Monte Carlo Tree Search rollout from a given :class:`MCTSNode`. - - :param node: The :class:`MCTSNode` from which to begin the rollout. - :param state_map: A mapping from SMILES to :class:`MCTSNode`. - :param orig_smiles: The original SMILES of the molecule. - :param clusters: Clusters of atoms. - :param atom_cls: Atom indices in the clusters. - :param nei_cls: Neighboring clusters. - :param scoring_function: A function for scoring subgraph SMILES using a Chemprop model. - :return: The score of this MCTS rollout. - """ - cur_atoms = node.atoms - if len(cur_atoms) <= MIN_ATOMS: - return node.P - - # Expand if this node has never been visited - if len(node.children) == 0: - cur_cls = set([i for i, x in enumerate(clusters) if x <= cur_atoms]) - for i in cur_cls: - leaf_atoms = [a for a in clusters[i] if len(atom_cls[a] & cur_cls) == 1] - if len(nei_cls[i] & cur_cls) == 1 or len(clusters[i]) == 2 and len(leaf_atoms) == 1: - new_atoms = cur_atoms - set(leaf_atoms) - new_smiles, _ = extract_subgraph(orig_smiles, new_atoms) - if new_smiles in state_map: - new_node = state_map[new_smiles] # merge identical states - else: - new_node = MCTSNode(new_smiles, new_atoms) - if new_smiles: - node.children.append(new_node) - - state_map[node.smiles] = node - if len(node.children) == 0: - return node.P # cannot find leaves - - scores = scoring_function([[x.smiles] for x in node.children]) - for child, score in zip(node.children, scores): - child.P = score - - sum_count = sum(c.N for c in node.children) - selected_node = max(node.children, key=lambda x: x.Q() + x.U(sum_count)) - v = mcts_rollout(selected_node, state_map, orig_smiles, clusters, atom_cls, nei_cls, scoring_function) - selected_node.W += v - selected_node.N += 1 - - return v - - -def mcts(smiles: str, - scoring_function: Callable[[List[str]], List[float]], - n_rollout: int, - max_atoms: int, - prop_delta: float) -> List[MCTSNode]: - """ - Runs the Monte Carlo Tree Search algorithm. - - :param smiles: The SMILES of the molecule to perform the search on. - :param scoring_function: A function for scoring subgraph SMILES using a Chemprop model. - :param n_rollout: THe number of MCTS rollouts to perform. - :param max_atoms: The maximum number of atoms allowed in an extracted rationale. - :param prop_delta: The minimum required property value for a satisfactory rationale. - :return: A list of rationales each represented by a :class:`MCTSNode`. - """ - - mol = Chem.MolFromSmiles(smiles) - if mol.GetNumAtoms() > 50: - n_rollout = 1 - - clusters, atom_cls = find_clusters(mol) - nei_cls = [0] * len(clusters) - for i, cls in enumerate(clusters): - nei_cls[i] = [nei for atom in cls for nei in atom_cls[atom]] - nei_cls[i] = set(nei_cls[i]) - {i} - clusters[i] = set(list(cls)) - for a in range(len(atom_cls)): - atom_cls[a] = set(atom_cls[a]) - - root = MCTSNode(smiles, set(range(mol.GetNumAtoms()))) - state_map = {smiles: root} - for _ in range(n_rollout): - mcts_rollout(root, state_map, smiles, clusters, atom_cls, nei_cls, scoring_function) - - rationales = [node for _, node in state_map.items() if len(node.atoms) <= max_atoms and node.P >= prop_delta] - - return rationales - -@timeit() -def interpret(args: InterpretArgs) -> None: - """ - Runs interpretation of a Chemprop model using the Monte Carlo Tree Search algorithm. - - :param args: A :class:`~chemprop.args.InterpretArgs` object containing arguments for interpretation. - """ - - if args.number_of_molecules != 1: - raise ValueError("Interpreting is currently only available for single-molecule models.") - - global C_PUCT, MIN_ATOMS - - chemprop_model = ChempropModel(args) - - def scoring_function(smiles: List[str]) -> List[float]: - return chemprop_model(smiles)[:, args.property_id - 1] - - C_PUCT = args.c_puct - MIN_ATOMS = args.min_atoms - - all_smiles = get_smiles(path=args.data_path, smiles_columns=args.smiles_columns) - header = get_header(path=args.data_path) - - property_name = header[args.property_id] if len(header) > args.property_id else 'score' - print(f'smiles,{property_name},rationale,rationale_score') - - for smiles in all_smiles: - score = scoring_function([smiles])[0] - if score > args.prop_delta: - rationales = mcts( - smiles=smiles[0], - scoring_function=scoring_function, - n_rollout=args.rollout, - max_atoms=args.max_atoms, - prop_delta=args.prop_delta - ) - else: - rationales = [] - - if len(rationales) == 0: - print(f'{smiles},{score:.3f},,') - else: - min_size = min(len(x.atoms) for x in rationales) - min_rationales = [x for x in rationales if len(x.atoms) == min_size] - rats = sorted(min_rationales, key=lambda x: x.P, reverse=True) - print(f'{smiles},{score:.3f},{rats[0].smiles},{rats[0].P:.3f}') - - -def chemprop_interpret() -> None: - """Runs interpretation of a Chemprop model. - - This is the entry point for the command line command :code:`chemprop_interpret`. - """ - interpret(args=InterpretArgs().parse_args()) diff --git a/chemprop/models/__init__.py b/chemprop/models/__init__.py index ae95e745f..4cc506a0b 100644 --- a/chemprop/models/__init__.py +++ b/chemprop/models/__init__.py @@ -1,8 +1,5 @@ -from .model import MoleculeModel -from .mpn import MPN, MPNEncoder +from .model import MPNN +from .multi import MulticomponentMPNN +from .utils import load_model, save_model -__all__ = [ - 'MoleculeModel', - 'MPN', - 'MPNEncoder' -] +__all__ = ["MPNN", "MulticomponentMPNN", "load_model", "save_model"] diff --git a/chemprop/models/model.py b/chemprop/models/model.py index 5a519eff1..e72be3aca 100644 --- a/chemprop/models/model.py +++ b/chemprop/models/model.py @@ -1,220 +1,261 @@ -from typing import List, Union, Tuple +from __future__ import annotations -import numpy as np -from rdkit import Chem -import torch -import torch.nn as nn - -from .mpn import MPN -from chemprop.args import TrainArgs -from chemprop.features import BatchMolGraph -from chemprop.nn_utils import get_activation_function, initialize_weights - - -class MoleculeModel(nn.Module): - """A :class:`MoleculeModel` is a model which contains a message passing network following by feed-forward layers.""" - - def __init__(self, args: TrainArgs): - """ - :param args: A :class:`~chemprop.args.TrainArgs` object containing model arguments. - """ - super(MoleculeModel, self).__init__() - - self.classification = args.dataset_type == 'classification' - self.multiclass = args.dataset_type == 'multiclass' - self.loss_function = args.loss_function - - if hasattr(args, 'train_class_sizes'): - self.train_class_sizes = args.train_class_sizes - else: - self.train_class_sizes = None - - # when using cross entropy losses, no sigmoid or softmax during training. But they are needed for mcc loss. - if self.classification or self.multiclass: - self.no_training_normalization = args.loss_function in ['cross_entropy', 'binary_cross_entropy'] - - self.output_size = args.num_tasks - if self.multiclass: - self.output_size *= args.multiclass_num_classes - if self.loss_function == 'mve': - self.output_size *= 2 # return means and variances - if self.loss_function == 'dirichlet' and self.classification: - self.output_size *= 2 # return dirichlet parameters for positive and negative class - if self.loss_function == 'evidential': - self.output_size *= 4 # return four evidential parameters: gamma, lambda, alpha, beta - - if self.classification: - self.sigmoid = nn.Sigmoid() - - if self.multiclass: - self.multiclass_softmax = nn.Softmax(dim=2) - - if self.loss_function in ['mve', 'evidential', 'dirichlet']: - self.softplus = nn.Softplus() +from typing import Iterable - self.create_encoder(args) - self.create_ffn(args) - - initialize_weights(self) - - def create_encoder(self, args: TrainArgs) -> None: - """ - Creates the message passing encoder for the model. - - :param args: A :class:`~chemprop.args.TrainArgs` object containing model arguments. - """ - self.encoder = MPN(args) - - if args.checkpoint_frzn is not None: - if args.freeze_first_only: # Freeze only the first encoder - for param in list(self.encoder.encoder.children())[0].parameters(): - param.requires_grad = False - else: # Freeze all encoders - for param in self.encoder.parameters(): - param.requires_grad = False - - def create_ffn(self, args: TrainArgs) -> None: - """ - Creates the feed-forward layers for the model. +from lightning import pytorch as pl +import torch +from torch import nn, Tensor, optim + +from chemprop.data import TrainingBatch, BatchMolGraph +from chemprop.nn.metrics import Metric +from chemprop.nn import MessagePassing, Aggregation, Predictor, LossFunction +from chemprop.schedulers import NoamLR +from chemprop.nn.transforms import ScaleTransform + + +class MPNN(pl.LightningModule): + r"""An :class:`MPNN` is a sequence of message passing layers, an aggregation routine, and a + predictor routine. + + The first two modules calculate learned fingerprints from an input molecule + reaction graph, and the final module takes these learned fingerprints as input to calculate a + final prediction. I.e., the following operation: + + .. math:: + \mathtt{MPNN}(\mathcal{G}) = + \mathtt{predictor}(\mathtt{agg}(\mathtt{message\_passing}(\mathcal{G}))) + + The full model is trained end-to-end. + + Parameters + ---------- + message_passing : MessagePassing + the message passing block to use to calculate learned fingerprints + agg : Aggregation + the aggregation operation to use during molecule-level predictor + predictor : Predictor + the function to use to calculate the final prediction + batch_norm : bool, default=True + if `True`, apply batch normalization to the output of the aggregation operation + metrics : Iterable[Metric] | None, default=None + the metrics to use to evaluate the model during training and evaluation + warmup_epochs : int, default=2 + the number of epochs to use for the learning rate warmup + init_lr : int, default=1e-4 + the initial learning rate + max_lr : float, default=1e-3 + the maximum learning rate + final_lr : float, default=1e-4 + the final learning rate + + Raises + ------ + ValueError + if the output dimension of the message passing block does not match the input dimension of + the predictor function + """ + + def __init__( + self, + message_passing: MessagePassing, + agg: Aggregation, + predictor: Predictor, + batch_norm: bool = True, + metrics: Iterable[Metric] | None = None, + warmup_epochs: int = 2, + init_lr: float = 1e-4, + max_lr: float = 1e-3, + final_lr: float = 1e-4, + X_d_transform: ScaleTransform | None = None, + ): + super().__init__() + + self.save_hyperparameters(ignore=["message_passing", "agg", "predictor"]) + self.hparams.update( + { + "message_passing": message_passing.hparams, + "agg": agg.hparams, + "predictor": predictor.hparams, + } + ) + + self.message_passing = message_passing + self.agg = agg + self.bn = nn.BatchNorm1d(self.message_passing.output_dim) if batch_norm else nn.Identity() + self.predictor = predictor + + self.X_d_transform = X_d_transform if X_d_transform is not None else nn.Identity() + + self.metrics = ( + [*metrics, self.criterion] + if metrics + else [self.predictor._T_default_metric(), self.criterion] + ) + + self.warmup_epochs = warmup_epochs + self.init_lr = init_lr + self.max_lr = max_lr + self.final_lr = final_lr + + @property + def output_dim(self) -> int: + return self.predictor.output_dim + + @property + def n_tasks(self) -> int: + return self.predictor.n_tasks + + @property + def n_targets(self) -> int: + return self.predictor.n_targets + + @property + def criterion(self) -> LossFunction: + return self.predictor.criterion + + def fingerprint( + self, bmg: BatchMolGraph, V_d: Tensor | None = None, X_d: Tensor | None = None + ) -> Tensor: + """the learned fingerprints for the input molecules""" + H_v = self.message_passing(bmg, V_d) + H = self.agg(H_v, bmg.batch) + H = self.bn(H) + + return H if X_d is None else torch.cat((H, self.X_d_transform(X_d)), 1) + + def encoding( + self, bmg: BatchMolGraph, V_d: Tensor | None = None, X_d: Tensor | None = None, i: int = -1 + ) -> Tensor: + """Calculate the :attr:`i`-th hidden representation""" + return self.predictor.encode(self.fingerprint(bmg, V_d, X_d), i) + + def forward( + self, bmg: BatchMolGraph, V_d: Tensor | None = None, X_d: Tensor | None = None + ) -> Tensor: + """Generate predictions for the input molecules/reactions""" + return self.predictor(self.fingerprint(bmg, V_d, X_d)) + + def training_step(self, batch: TrainingBatch, batch_idx): + bmg, V_d, X_d, targets, weights, lt_mask, gt_mask = batch + + mask = targets.isfinite() + targets = targets.nan_to_num(nan=0.0) + + Z = self.fingerprint(bmg, V_d, X_d) + preds = self.predictor.train_step(Z) + l = self.criterion(preds, targets, mask, weights, lt_mask, gt_mask) + + self.log("train_loss", l, prog_bar=True) + + return l + + def on_validation_model_eval(self) -> None: + self.eval() + self.predictor.output_transform.train() + + def validation_step(self, batch: TrainingBatch, batch_idx: int = 0): + losses = self._evaluate_batch(batch) + metric2loss = {f"val/{m.alias}": l for m, l in zip(self.metrics, losses)} + + self.log_dict(metric2loss, batch_size=len(batch[0])) + self.log("val_loss", losses[0], batch_size=len(batch[0]), prog_bar=True) + + def test_step(self, batch: TrainingBatch, batch_idx: int = 0): + losses = self._evaluate_batch(batch) + metric2loss = {f"batch_averaged_test/{m.alias}": l for m, l in zip(self.metrics, losses)} + + self.log_dict(metric2loss, batch_size=len(batch[0])) + + def _evaluate_batch(self, batch) -> list[Tensor]: + bmg, V_d, X_d, targets, _, lt_mask, gt_mask = batch + + mask = targets.isfinite() + targets = targets.nan_to_num(nan=0.0) + preds = self(bmg, V_d, X_d) + + return [ + metric(preds, targets, mask, None, lt_mask, gt_mask) for metric in self.metrics[:-1] + ] + + def predict_step(self, batch: TrainingBatch, batch_idx: int, dataloader_idx: int = 0) -> Tensor: + """Return the predictions of the input batch + + Parameters + ---------- + batch : TrainingBatch + the input batch + + Returns + ------- + Tensor + a tensor of varying shape depending on the task type: - :param args: A :class:`~chemprop.args.TrainArgs` object containing model arguments. - """ - self.multiclass = args.dataset_type == 'multiclass' - if self.multiclass: - self.num_classes = args.multiclass_num_classes - if args.features_only: - first_linear_dim = args.features_size - else: - if args.reaction_solvent: - first_linear_dim = args.hidden_size + args.hidden_size_solvent - else: - first_linear_dim = args.hidden_size * args.number_of_molecules - if args.use_input_features: - first_linear_dim += args.features_size - - if args.atom_descriptors == 'descriptor': - first_linear_dim += args.atom_descriptors_size - - dropout = nn.Dropout(args.dropout) - activation = get_activation_function(args.activation) - - # Create FFN layers - if args.ffn_num_layers == 1: - ffn = [ - dropout, - nn.Linear(first_linear_dim, self.output_size) - ] - else: - ffn = [ - dropout, - nn.Linear(first_linear_dim, args.ffn_hidden_size) - ] - for _ in range(args.ffn_num_layers - 2): - ffn.extend([ - activation, - dropout, - nn.Linear(args.ffn_hidden_size, args.ffn_hidden_size), - ]) - ffn.extend([ - activation, - dropout, - nn.Linear(args.ffn_hidden_size, self.output_size), - ]) - - # If spectra model, also include spectra activation - if args.dataset_type == 'spectra': - if args.spectra_activation == 'softplus': - spectra_activation = nn.Softplus() - else: # default exponential activation which must be made into a custom nn module - class nn_exp(torch.nn.Module): - def __init__(self): - super(nn_exp, self).__init__() - - def forward(self, x): - return torch.exp(x) - - spectra_activation = nn_exp() - ffn.append(spectra_activation) - - # Create FFN model - self.ffn = nn.Sequential(*ffn) - - if args.checkpoint_frzn is not None: - if args.frzn_ffn_layers > 0: - for param in list(self.ffn.parameters())[0:2 * args.frzn_ffn_layers]: # Freeze weights and bias for given number of layers - param.requires_grad = False - - def fingerprint(self, - batch: Union[List[List[str]], List[List[Chem.Mol]], List[List[Tuple[Chem.Mol, Chem.Mol]]], List[BatchMolGraph]], - features_batch: List[np.ndarray] = None, - atom_descriptors_batch: List[np.ndarray] = None, - atom_features_batch: List[np.ndarray] = None, - bond_features_batch: List[np.ndarray] = None, - fingerprint_type: str = 'MPN') -> torch.Tensor: - """ - Encodes the latent representations of the input molecules from intermediate stages of the model. - - :param batch: A list of list of SMILES, a list of list of RDKit molecules, or a - list of :class:`~chemprop.features.featurization.BatchMolGraph`. - The outer list or BatchMolGraph is of length :code:`num_molecules` (number of datapoints in batch), - the inner list is of length :code:`number_of_molecules` (number of molecules per datapoint). - :param features_batch: A list of numpy arrays containing additional features. - :param atom_descriptors_batch: A list of numpy arrays containing additional atom descriptors. - :param fingerprint_type: The choice of which type of latent representation to return as the molecular fingerprint. Currently - supported MPN for the output of the MPNN portion of the model or last_FFN for the input to the final readout layer. - :return: The latent fingerprint vectors. + * regression/binary classification: ``n x (t * s)``, where ``n`` is the number of input + molecules/reactions, ``t`` is the number of tasks, and ``s`` is the number of targets + per task. The final dimension is flattened, so that the targets for each task are + grouped. I.e., the first ``t`` elements are the first target for each task, the second + ``t`` elements the second target, etc. + * multiclass classification: ``n x t x c``, where ``c`` is the number of classes """ - if fingerprint_type == 'MPN': - return self.encoder(batch, features_batch, atom_descriptors_batch, - atom_features_batch, bond_features_batch) - elif fingerprint_type == 'last_FFN': - return self.ffn[:-1](self.encoder(batch, features_batch, atom_descriptors_batch, - atom_features_batch, bond_features_batch)) - else: - raise ValueError(f'Unsupported fingerprint type {fingerprint_type}.') - - def forward(self, - batch: Union[List[List[str]], List[List[Chem.Mol]], List[List[Tuple[Chem.Mol, Chem.Mol]]], List[BatchMolGraph]], - features_batch: List[np.ndarray] = None, - atom_descriptors_batch: List[np.ndarray] = None, - atom_features_batch: List[np.ndarray] = None, - bond_features_batch: List[np.ndarray] = None) -> torch.FloatTensor: - """ - Runs the :class:`MoleculeModel` on input. - - :param batch: A list of list of SMILES, a list of list of RDKit molecules, or a - list of :class:`~chemprop.features.featurization.BatchMolGraph`. - The outer list or BatchMolGraph is of length :code:`num_molecules` (number of datapoints in batch), - the inner list is of length :code:`number_of_molecules` (number of molecules per datapoint). - :param features_batch: A list of numpy arrays containing additional features. - :param atom_descriptors_batch: A list of numpy arrays containing additional atom descriptors. - :param atom_features_batch: A list of numpy arrays containing additional atom features. - :param bond_features_batch: A list of numpy arrays containing additional bond features. - :return: The output of the :class:`MoleculeModel`, containing a list of property predictions - """ - - output = self.ffn(self.encoder(batch, features_batch, atom_descriptors_batch, - atom_features_batch, bond_features_batch)) - - if self.classification and not (self.training and self.no_training_normalization) and self.loss_function != 'dirichlet': - output = self.sigmoid(output) - if self.multiclass: - output = output.reshape((output.shape[0], -1, self.num_classes)) # batch size x num targets x num classes per target - if not (self.training and self.no_training_normalization) and self.loss_function != 'dirichlet': - output = self.multiclass_softmax(output) # to get probabilities during evaluation, but not during training when using CrossEntropyLoss - - # Modify multi-input loss functions - if self.loss_function == 'mve': - means, variances = torch.split(output, output.shape[1] // 2, dim=1) - variances = self.softplus(variances) - output = torch.cat([means, variances], axis=1) - if self.loss_function == 'evidential': - means, lambdas, alphas, betas = torch.split(output, output.shape[1]//4, dim=1) - lambdas = self.softplus(lambdas) # + min_val - alphas = self.softplus(alphas) + 1 # + min_val # add 1 for numerical contraints of Gamma function - betas = self.softplus(betas) # + min_val - output = torch.cat([means, lambdas, alphas, betas], dim=1) - if self.loss_function == 'dirichlet': - output = nn.functional.softplus(output) + 1 - - return output + bmg, X_vd, X_d, *_ = batch + + return self(bmg, X_vd, X_d) + + def configure_optimizers(self): + opt = optim.Adam(self.parameters(), self.init_lr) + + lr_sched = NoamLR( + opt, + self.warmup_epochs, + self.trainer.max_epochs, + self.trainer.estimated_stepping_batches // self.trainer.max_epochs, + self.init_lr, + self.max_lr, + self.final_lr, + ) + lr_sched_config = { + "scheduler": lr_sched, + "interval": "step" if isinstance(lr_sched, NoamLR) else "batch", + } + + return {"optimizer": opt, "lr_scheduler": lr_sched_config} + + @classmethod + def load_submodules(cls, checkpoint_path, **kwargs): + hparams = torch.load(checkpoint_path)["hyper_parameters"] + + kwargs |= { + key: hparams[key].pop("cls")(**hparams[key]) + for key in ("message_passing", "agg", "predictor") + if key not in kwargs + } + return kwargs + + @classmethod + def load_from_checkpoint( + cls, checkpoint_path, map_location=None, hparams_file=None, strict=True, **kwargs + ) -> MPNN: + kwargs = cls.load_submodules(checkpoint_path, **kwargs) + return super().load_from_checkpoint( + checkpoint_path, map_location, hparams_file, strict, **kwargs + ) + + @classmethod + def load_from_file(cls, model_path, map_location=None, strict=True) -> MPNN: + d = torch.load(model_path, map_location=map_location) + + try: + hparams = d["hyper_parameters"] + state_dict = d["state_dict"] + except KeyError: + raise KeyError(f"Could not find hyper parameters and/or state dict in {model_path}. ") + + for key in ["message_passing", "agg", "predictor"]: + hparam_kwargs = hparams[key] + hparam_cls = hparam_kwargs.pop("cls") + hparams[key] = hparam_cls(**hparam_kwargs) + + model = cls(**hparams) + model.load_state_dict(state_dict, strict=strict) + + return model diff --git a/chemprop/models/mpn.py b/chemprop/models/mpn.py deleted file mode 100644 index 64f9be618..000000000 --- a/chemprop/models/mpn.py +++ /dev/null @@ -1,293 +0,0 @@ -from typing import List, Union, Tuple -from functools import reduce - -import numpy as np -from rdkit import Chem -import torch -import torch.nn as nn - -from chemprop.args import TrainArgs -from chemprop.features import BatchMolGraph, get_atom_fdim, get_bond_fdim, mol2graph -from chemprop.nn_utils import index_select_ND, get_activation_function - - -class MPNEncoder(nn.Module): - """An :class:`MPNEncoder` is a message passing neural network for encoding a molecule.""" - - def __init__(self, args: TrainArgs, atom_fdim: int, bond_fdim: int, hidden_size: int = None, - bias: bool = None, depth: int = None): - """ - :param args: A :class:`~chemprop.args.TrainArgs` object containing model arguments. - :param atom_fdim: Atom feature vector dimension. - :param bond_fdim: Bond feature vector dimension. - :param hidden_size: Hidden layers dimension - :param bias: Whether to add bias to linear layers - :param depth: Number of message passing steps - """ - super(MPNEncoder, self).__init__() - self.atom_fdim = atom_fdim - self.bond_fdim = bond_fdim - self.atom_messages = args.atom_messages - self.hidden_size = hidden_size or args.hidden_size - self.bias = bias or args.bias - self.depth = depth or args.depth - self.dropout = args.dropout - self.layers_per_message = 1 - self.undirected = args.undirected - self.device = args.device - self.aggregation = args.aggregation - self.aggregation_norm = args.aggregation_norm - - # Dropout - self.dropout_layer = nn.Dropout(p=self.dropout) - - # Activation - self.act_func = get_activation_function(args.activation) - - # Cached zeros - self.cached_zero_vector = nn.Parameter(torch.zeros(self.hidden_size), requires_grad=False) - - # Input - input_dim = self.atom_fdim if self.atom_messages else self.bond_fdim - self.W_i = nn.Linear(input_dim, self.hidden_size, bias=self.bias) - - if self.atom_messages: - w_h_input_size = self.hidden_size + self.bond_fdim - else: - w_h_input_size = self.hidden_size - - # Shared weight matrix across depths (default) - self.W_h = nn.Linear(w_h_input_size, self.hidden_size, bias=self.bias) - - self.W_o = nn.Linear(self.atom_fdim + self.hidden_size, self.hidden_size) - - # layer after concatenating the descriptors if args.atom_descriptors == descriptors - if args.atom_descriptors == 'descriptor': - self.atom_descriptors_size = args.atom_descriptors_size - self.atom_descriptors_layer = nn.Linear(self.hidden_size + self.atom_descriptors_size, - self.hidden_size + self.atom_descriptors_size,) - - def forward(self, - mol_graph: BatchMolGraph, - atom_descriptors_batch: List[np.ndarray] = None) -> torch.FloatTensor: - """ - Encodes a batch of molecular graphs. - - :param mol_graph: A :class:`~chemprop.features.featurization.BatchMolGraph` representing - a batch of molecular graphs. - :param atom_descriptors_batch: A list of numpy arrays containing additional atomic descriptors - :return: A PyTorch tensor of shape :code:`(num_molecules, hidden_size)` containing the encoding of each molecule. - """ - if atom_descriptors_batch is not None: - atom_descriptors_batch = [np.zeros([1, atom_descriptors_batch[0].shape[1]])] + atom_descriptors_batch # padding the first with 0 to match the atom_hiddens - atom_descriptors_batch = torch.from_numpy(np.concatenate(atom_descriptors_batch, axis=0)).float().to(self.device) - - f_atoms, f_bonds, a2b, b2a, b2revb, a_scope, b_scope = mol_graph.get_components(atom_messages=self.atom_messages) - f_atoms, f_bonds, a2b, b2a, b2revb = f_atoms.to(self.device), f_bonds.to(self.device), a2b.to(self.device), b2a.to(self.device), b2revb.to(self.device) - - if self.atom_messages: - a2a = mol_graph.get_a2a().to(self.device) - - # Input - if self.atom_messages: - input = self.W_i(f_atoms) # num_atoms x hidden_size - else: - input = self.W_i(f_bonds) # num_bonds x hidden_size - message = self.act_func(input) # num_bonds x hidden_size - - # Message passing - for depth in range(self.depth - 1): - if self.undirected: - message = (message + message[b2revb]) / 2 - - if self.atom_messages: - nei_a_message = index_select_ND(message, a2a) # num_atoms x max_num_bonds x hidden - nei_f_bonds = index_select_ND(f_bonds, a2b) # num_atoms x max_num_bonds x bond_fdim - nei_message = torch.cat((nei_a_message, nei_f_bonds), dim=2) # num_atoms x max_num_bonds x hidden + bond_fdim - message = nei_message.sum(dim=1) # num_atoms x hidden + bond_fdim - else: - # m(a1 -> a2) = [sum_{a0 \in nei(a1)} m(a0 -> a1)] - m(a2 -> a1) - # message a_message = sum(nei_a_message) rev_message - nei_a_message = index_select_ND(message, a2b) # num_atoms x max_num_bonds x hidden - a_message = nei_a_message.sum(dim=1) # num_atoms x hidden - rev_message = message[b2revb] # num_bonds x hidden - message = a_message[b2a] - rev_message # num_bonds x hidden - - message = self.W_h(message) - message = self.act_func(input + message) # num_bonds x hidden_size - message = self.dropout_layer(message) # num_bonds x hidden - - a2x = a2a if self.atom_messages else a2b - nei_a_message = index_select_ND(message, a2x) # num_atoms x max_num_bonds x hidden - a_message = nei_a_message.sum(dim=1) # num_atoms x hidden - a_input = torch.cat([f_atoms, a_message], dim=1) # num_atoms x (atom_fdim + hidden) - atom_hiddens = self.act_func(self.W_o(a_input)) # num_atoms x hidden - atom_hiddens = self.dropout_layer(atom_hiddens) # num_atoms x hidden - - # concatenate the atom descriptors - if atom_descriptors_batch is not None: - if len(atom_hiddens) != len(atom_descriptors_batch): - raise ValueError(f'The number of atoms is different from the length of the extra atom features') - - atom_hiddens = torch.cat([atom_hiddens, atom_descriptors_batch], dim=1) # num_atoms x (hidden + descriptor size) - atom_hiddens = self.atom_descriptors_layer(atom_hiddens) # num_atoms x (hidden + descriptor size) - atom_hiddens = self.dropout_layer(atom_hiddens) # num_atoms x (hidden + descriptor size) - - # Readout - mol_vecs = [] - for i, (a_start, a_size) in enumerate(a_scope): - if a_size == 0: - mol_vecs.append(self.cached_zero_vector) - else: - cur_hiddens = atom_hiddens.narrow(0, a_start, a_size) - mol_vec = cur_hiddens # (num_atoms, hidden_size) - if self.aggregation == 'mean': - mol_vec = mol_vec.sum(dim=0) / a_size - elif self.aggregation == 'sum': - mol_vec = mol_vec.sum(dim=0) - elif self.aggregation == 'norm': - mol_vec = mol_vec.sum(dim=0) / self.aggregation_norm - mol_vecs.append(mol_vec) - - mol_vecs = torch.stack(mol_vecs, dim=0) # (num_molecules, hidden_size) - - return mol_vecs # num_molecules x hidden - - -class MPN(nn.Module): - """An :class:`MPN` is a wrapper around :class:`MPNEncoder` which featurizes input as needed.""" - - def __init__(self, - args: TrainArgs, - atom_fdim: int = None, - bond_fdim: int = None): - """ - :param args: A :class:`~chemprop.args.TrainArgs` object containing model arguments. - :param atom_fdim: Atom feature vector dimension. - :param bond_fdim: Bond feature vector dimension. - """ - super(MPN, self).__init__() - self.reaction = args.reaction - self.reaction_solvent = args.reaction_solvent - self.atom_fdim = atom_fdim or get_atom_fdim(overwrite_default_atom=args.overwrite_default_atom_features, - is_reaction=(self.reaction or self.reaction_solvent)) - self.bond_fdim = bond_fdim or get_bond_fdim(overwrite_default_atom=args.overwrite_default_atom_features, - overwrite_default_bond=args.overwrite_default_bond_features, - atom_messages=args.atom_messages, - is_reaction=(self.reaction or self.reaction_solvent)) - self.features_only = args.features_only - self.use_input_features = args.use_input_features - self.device = args.device - self.atom_descriptors = args.atom_descriptors - self.overwrite_default_atom_features = args.overwrite_default_atom_features - self.overwrite_default_bond_features = args.overwrite_default_bond_features - - if self.features_only: - return - - if not self.reaction_solvent: - if args.mpn_shared: - self.encoder = nn.ModuleList([MPNEncoder(args, self.atom_fdim, self.bond_fdim)] * args.number_of_molecules) - else: - self.encoder = nn.ModuleList([MPNEncoder(args, self.atom_fdim, self.bond_fdim) - for _ in range(args.number_of_molecules)]) - else: - self.encoder = MPNEncoder(args, self.atom_fdim, self.bond_fdim) - # Set separate atom_fdim and bond_fdim for solvent molecules - self.atom_fdim_solvent = get_atom_fdim(overwrite_default_atom=args.overwrite_default_atom_features, - is_reaction=False) - self.bond_fdim_solvent = get_bond_fdim(overwrite_default_atom=args.overwrite_default_atom_features, - overwrite_default_bond=args.overwrite_default_bond_features, - atom_messages=args.atom_messages, - is_reaction=False) - self.encoder_solvent = MPNEncoder(args, self.atom_fdim_solvent, self.bond_fdim_solvent, - args.hidden_size_solvent, args.bias_solvent, args.depth_solvent) - - def forward(self, - batch: Union[List[List[str]], List[List[Chem.Mol]], List[List[Tuple[Chem.Mol, Chem.Mol]]], List[BatchMolGraph]], - features_batch: List[np.ndarray] = None, - atom_descriptors_batch: List[np.ndarray] = None, - atom_features_batch: List[np.ndarray] = None, - bond_features_batch: List[np.ndarray] = None) -> torch.FloatTensor: - """ - Encodes a batch of molecules. - - :param batch: A list of list of SMILES, a list of list of RDKit molecules, or a - list of :class:`~chemprop.features.featurization.BatchMolGraph`. - The outer list or BatchMolGraph is of length :code:`num_molecules` (number of datapoints in batch), - the inner list is of length :code:`number_of_molecules` (number of molecules per datapoint). - :param features_batch: A list of numpy arrays containing additional features. - :param atom_descriptors_batch: A list of numpy arrays containing additional atom descriptors. - :param atom_features_batch: A list of numpy arrays containing additional atom features. - :param bond_features_batch: A list of numpy arrays containing additional bond features. - :return: A PyTorch tensor of shape :code:`(num_molecules, hidden_size)` containing the encoding of each molecule. - """ - if type(batch[0]) != BatchMolGraph: - # Group first molecules, second molecules, etc for mol2graph - batch = [[mols[i] for mols in batch] for i in range(len(batch[0]))] - - # TODO: handle atom_descriptors_batch with multiple molecules per input - if self.atom_descriptors == 'feature': - if len(batch) > 1: - raise NotImplementedError('Atom/bond descriptors are currently only supported with one molecule ' - 'per input (i.e., number_of_molecules = 1).') - - batch = [ - mol2graph( - mols=b, - atom_features_batch=atom_features_batch, - bond_features_batch=bond_features_batch, - overwrite_default_atom_features=self.overwrite_default_atom_features, - overwrite_default_bond_features=self.overwrite_default_bond_features - ) - for b in batch - ] - elif bond_features_batch is not None: - if len(batch) > 1: - raise NotImplementedError('Atom/bond descriptors are currently only supported with one molecule ' - 'per input (i.e., number_of_molecules = 1).') - - batch = [ - mol2graph( - mols=b, - bond_features_batch=bond_features_batch, - overwrite_default_atom_features=self.overwrite_default_atom_features, - overwrite_default_bond_features=self.overwrite_default_bond_features - ) - for b in batch - ] - else: - batch = [mol2graph(b) for b in batch] - - if self.use_input_features: - features_batch = torch.from_numpy(np.stack(features_batch)).float().to(self.device) - - if self.features_only: - return features_batch - - if self.atom_descriptors == 'descriptor': - if len(batch) > 1: - raise NotImplementedError('Atom descriptors are currently only supported with one molecule ' - 'per input (i.e., number_of_molecules = 1).') - - encodings = [enc(ba, atom_descriptors_batch) for enc, ba in zip(self.encoder, batch)] - else: - if not self.reaction_solvent: - encodings = [enc(ba) for enc, ba in zip(self.encoder, batch)] - else: - encodings = [] - for ba in batch: - if ba.is_reaction: - encodings.append(self.encoder(ba)) - else: - encodings.append(self.encoder_solvent(ba)) - - output = reduce(lambda x, y: torch.cat((x, y), dim=1), encodings) - - if self.use_input_features: - if len(features_batch.shape) == 1: - features_batch = features_batch.view(1, -1) - - output = torch.cat([output, features_batch], dim=1) - - return output diff --git a/chemprop/models/multi.py b/chemprop/models/multi.py new file mode 100644 index 000000000..5d7f0d944 --- /dev/null +++ b/chemprop/models/multi.py @@ -0,0 +1,92 @@ +from typing import Iterable + +import torch +from torch import Tensor + +from chemprop.data import BatchMolGraph +from chemprop.nn import MulticomponentMessagePassing, Aggregation, Predictor +from chemprop.models.model import MPNN +from chemprop.nn.metrics import Metric +from chemprop.nn.transforms import ScaleTransform + + +class MulticomponentMPNN(MPNN): + def __init__( + self, + message_passing: MulticomponentMessagePassing, + agg: Aggregation, + predictor: Predictor, + batch_norm: bool = True, + metrics: Iterable[Metric] | None = None, + warmup_epochs: int = 2, + init_lr: float = 1e-4, + max_lr: float = 1e-3, + final_lr: float = 1e-4, + X_d_transform: ScaleTransform | None = None, + ): + super().__init__( + message_passing, + agg, + predictor, + batch_norm, + metrics, + warmup_epochs, + init_lr, + max_lr, + final_lr, + X_d_transform, + ) + self.message_passing: MulticomponentMessagePassing + + def fingerprint( + self, + bmgs: Iterable[BatchMolGraph], + V_ds: Iterable[Tensor | None], + X_d: Tensor | None = None, + ) -> Tensor: + H_vs: list[Tensor] = self.message_passing(bmgs, V_ds) + Hs = [self.agg(H_v, bmg.batch) for H_v, bmg in zip(H_vs, bmgs)] + H = torch.cat(Hs, 1) + H = self.bn(H) + + return H if X_d is None else torch.cat((H, self.X_d_transform(X_d)), 1) + + @classmethod + def load_submodules(cls, checkpoint_path, **kwargs): + hparams = torch.load(checkpoint_path)["hyper_parameters"] + + hparams["message_passing"]["blocks"] = [ + block_hparams.pop("cls")(**block_hparams) + for block_hparams in hparams["message_passing"]["blocks"] + ] + kwargs |= { + key: hparams[key].pop("cls")(**hparams[key]) + for key in ("message_passing", "agg", "predictor") + if key not in kwargs + } + return kwargs + + @classmethod + def load_from_file(cls, model_path, map_location=None, strict=True) -> MPNN: + d = torch.load(model_path, map_location=map_location) + + try: + hparams = d["hyper_parameters"] + state_dict = d["state_dict"] + except KeyError: + raise KeyError(f"Could not find hyper parameters and/or state dict in {model_path}. ") + + for key in ["message_passing", "agg", "predictor"]: + hparam_kwargs = hparams[key] + if key == "message_passing": + hparam_kwargs["blocks"] = [ + block_hparams.pop("cls")(**block_hparams) + for block_hparams in hparam_kwargs["blocks"] + ] + hparam_cls = hparam_kwargs.pop("cls") + hparams[key] = hparam_cls(**hparam_kwargs) + + model = cls(**hparams) + model.load_state_dict(state_dict, strict=strict) + + return model diff --git a/chemprop/models/utils.py b/chemprop/models/utils.py new file mode 100644 index 000000000..469f497b3 --- /dev/null +++ b/chemprop/models/utils.py @@ -0,0 +1,18 @@ +from os import PathLike +import torch + +from chemprop.models.model import MPNN +from chemprop.models.multi import MulticomponentMPNN + + +def save_model(path: PathLike, model: MPNN) -> None: + torch.save({"hyper_parameters": model.hparams, "state_dict": model.state_dict()}, path) + + +def load_model(path: PathLike, multicomponent: bool) -> MPNN: + if multicomponent: + model = MulticomponentMPNN.load_from_file(path) + else: + model = MPNN.load_from_file(path) + + return model diff --git a/chemprop/nn/__init__.py b/chemprop/nn/__init__.py new file mode 100644 index 000000000..e8ed2c733 --- /dev/null +++ b/chemprop/nn/__init__.py @@ -0,0 +1,133 @@ +from .agg import ( + Aggregation, + AggregationRegistry, + MeanAggregation, + SumAggregation, + NormAggregation, + AttentiveAggregation, +) +from .loss import ( + LossFunction, + LossFunctionRegistry, + MSELoss, + BoundedMSELoss, + MVELoss, + EvidentialLoss, + BCELoss, + CrossEntropyLoss, + MccMixin, + BinaryMCCLoss, + MulticlassMCCLoss, + DirichletMixin, + BinaryDirichletLoss, + MulticlassDirichletLoss, + SIDLoss, + WassersteinLoss, +) +from .metrics import ( + Metric, + MetricRegistry, + ThresholdedMixin, + MAEMetric, + MSEMetric, + RMSEMetric, + BoundedMixin, + BoundedMAEMetric, + BoundedMSEMetric, + BoundedRMSEMetric, + R2Metric, + BinaryAUROCMetric, + BinaryAUPRCMetric, + BinaryAccuracyMetric, + BinaryF1Metric, + BCEMetric, + CrossEntropyMetric, + BinaryMCCMetric, + MulticlassMCCMetric, + SIDMetric, + WassersteinMetric, +) +from .message_passing import ( + MessagePassing, + AtomMessagePassing, + BondMessagePassing, + MulticomponentMessagePassing, +) +from .predictors import ( + Predictor, + PredictorRegistry, + RegressionFFN, + MveFFN, + EvidentialFFN, + BinaryClassificationFFNBase, + BinaryClassificationFFN, + BinaryDirichletFFN, + MulticlassClassificationFFN, + MulticlassDirichletFFN, + SpectralFFN, +) +from .utils import Activation +from .transforms import UnscaleTransform + +__all__ = [ + "Aggregation", + "AggregationRegistry", + "MeanAggregation", + "SumAggregation", + "NormAggregation", + "AttentiveAggregation", + "LossFunction", + "LossFunctionRegistry", + "MSELoss", + "BoundedMSELoss", + "MVELoss", + "EvidentialLoss", + "BCELoss", + "CrossEntropyLoss", + "MccMixin", + "BinaryMCCLoss", + "MulticlassMCCLoss", + "DirichletMixin", + "BinaryDirichletLoss", + "MulticlassDirichletLoss", + "SIDLoss", + "WassersteinLoss", + "Metric", + "MetricRegistry", + "ThresholdedMixin", + "MAEMetric", + "MSEMetric", + "RMSEMetric", + "BoundedMixin", + "BoundedMAEMetric", + "BoundedMSEMetric", + "BoundedRMSEMetric", + "R2Metric", + "BinaryAUROCMetric", + "BinaryAUPRCMetric", + "BinaryAccuracyMetric", + "BinaryF1Metric", + "BCEMetric", + "CrossEntropyMetric", + "BinaryMCCMetric", + "MulticlassMCCMetric", + "SIDMetric", + "WassersteinMetric", + "MessagePassing", + "AtomMessagePassing", + "BondMessagePassing", + "MulticomponentMessagePassing", + "Predictor", + "PredictorRegistry", + "RegressionFFN", + "MveFFN", + "EvidentialFFN", + "BinaryClassificationFFNBase", + "BinaryClassificationFFN", + "BinaryDirichletFFN", + "MulticlassClassificationFFN", + "MulticlassDirichletFFN", + "SpectralFFN", + "Activation", + "UnscaleTransform", +] diff --git a/chemprop/nn/agg.py b/chemprop/nn/agg.py new file mode 100644 index 000000000..d11c36df3 --- /dev/null +++ b/chemprop/nn/agg.py @@ -0,0 +1,132 @@ +from abc import abstractmethod +import torch +from torch import Tensor, nn + +from chemprop.utils import ClassRegistry +from chemprop.nn.hparams import HasHParams + + +__all__ = [ + "Aggregation", + "AggregationRegistry", + "MeanAggregation", + "SumAggregation", + "NormAggregation", + "AttentiveAggregation", +] + + +class Aggregation(nn.Module, HasHParams): + """An :class:`Aggregation` aggregates the node-level representations of a batch of graphs into + a batch of graph-level representations + + .. note:: + this class is abstract and cannot be instantiated. + + See also + -------- + :class:`~chemprop.v2.models.modules.agg.MeanAggregation` + :class:`~chemprop.v2.models.modules.agg.SumAggregation` + :class:`~chemprop.v2.models.modules.agg.NormAggregation` + """ + + def __init__(self, dim: int = 0, *args, **kwargs): + super().__init__() + + self.dim = dim + self.hparams = {"dim": dim, "cls": self.__class__} + + @abstractmethod + def forward(self, H: Tensor, batch: Tensor) -> Tensor: + """Aggregate the graph-level representations of a batch of graphs into their respective + global representations + + NOTE: it is possible for a graph to have 0 nodes. In this case, the representation will be + a zero vector of length `d` in the final output. + + Parameters + ---------- + H : Tensor + a tensor of shape ``V x d`` containing the batched node-level representations of ``b`` + graphs + batch : Tensor + a tensor of shape ``V`` containing the index of the graph a given vertex corresponds to + + Returns + ------- + Tensor + a tensor of shape ``b x d`` containing the graph-level representations + """ + + +AggregationRegistry = ClassRegistry[Aggregation]() + + +@AggregationRegistry.register("mean") +class MeanAggregation(Aggregation): + r"""Average the graph-level representation: + + .. math:: + \mathbf h = \frac{1}{|V|} \sum_{v \in V} \mathbf h_v + """ + + def forward(self, H: Tensor, batch: Tensor) -> Tensor: + index_torch = batch.unsqueeze(1).repeat(1, H.shape[1]) + dim_size = batch.max().int() + 1 + return torch.zeros(dim_size, H.shape[1], dtype=H.dtype, device=H.device).scatter_reduce_( + self.dim, index_torch, H, reduce="mean", include_self=False + ) + + +@AggregationRegistry.register("sum") +class SumAggregation(Aggregation): + r"""Sum the graph-level representation: + + .. math:: + \mathbf h = \sum_{v \in V} \mathbf h_v + + """ + + def forward(self, H: Tensor, batch: Tensor) -> Tensor: + index_torch = batch.unsqueeze(1).repeat(1, H.shape[1]) + dim_size = batch.max().int() + 1 + return torch.zeros(dim_size, H.shape[1], dtype=H.dtype, device=H.device).scatter_reduce_( + self.dim, index_torch, H, reduce="sum", include_self=False + ) + + +@AggregationRegistry.register("norm") +class NormAggregation(SumAggregation): + r"""Sum the graph-level representation and divide by a normalization constant: + + .. math:: + \mathbf h = \frac{1}{c} \sum_{v \in V} \mathbf h_v + """ + + def __init__(self, dim: int = 0, *args, norm: float = 100.0, **kwargs): + super().__init__(dim, **kwargs) + + self.norm = norm + self.hparams["norm"] = norm + + def forward(self, H: Tensor, batch: Tensor) -> Tensor: + return super().forward(H, batch) / self.norm + + +class AttentiveAggregation(Aggregation): + def __init__(self, dim: int = 0, *args, output_size: int, **kwargs): + super().__init__(dim, *args, **kwargs) + + self.W = nn.Linear(output_size, 1) + + def forward(self, H: Tensor, batch: Tensor) -> Tensor: + dim_size = batch.max().int() + 1 + attention_logits = self.W(H).exp() + Z = torch.zeros(dim_size, 1, dtype=H.dtype, device=H.device).scatter_reduce_( + self.dim, batch.unsqueeze(1), attention_logits, reduce="sum", include_self=False + ) + alphas = attention_logits / Z[batch] + index_torch = batch.unsqueeze(1).repeat(1, H.shape[1]) + return torch.zeros(dim_size, H.shape[1], dtype=H.dtype, device=H.device).scatter_reduce_( + self.dim, index_torch, alphas * H, reduce="sum", include_self=False + ) diff --git a/chemprop/nn/ffn.py b/chemprop/nn/ffn.py new file mode 100644 index 000000000..3d69a5d55 --- /dev/null +++ b/chemprop/nn/ffn.py @@ -0,0 +1,63 @@ +from abc import abstractmethod + +from torch import nn, Tensor + +from chemprop.nn.utils import get_activation_function + + +class FFN(nn.Module): + r"""A :class:`FFN` is a differentiable function + :math:`f_\theta : \mathbb R^i \mapsto \mathbb R^o`""" + + input_dim: int + output_dim: int + + @abstractmethod + def forward(self, X: Tensor) -> Tensor: + pass + + +class MLP(nn.Sequential, FFN): + r"""An :class:`MLP` is an FFN that implements the following function: + + .. math:: + \mathbf h_0 &= \mathbf W_0 \mathbf x \,+ \mathbf b_{0} \\ + \mathbf h_l &= \mathbf W_l \left( \mathtt{dropout} \left( \sigma ( \,\mathbf h_{l-1}\, ) \right) \right) + \mathbf b_l\\ + + where :math:`\mathbf x` is the input tensor, :math:`\mathbf W_l` and :math:`\mathbf b_l` + are the learned weight matrix and bias, respectively, of the :math:`l`-th layer, + :math:`\mathbf h_l` is the hidden representation after layer :math:`l`, and :math:`\sigma` + is the activation function. + """ + + @classmethod + def build( + cls, + input_dim: int, + output_dim: int, + hidden_dim: int = 300, + n_layers: int = 1, + dropout: float = 0.0, + activation: str = "relu", + ): + dropout = nn.Dropout(dropout) + act = get_activation_function(activation) + dims = [input_dim] + [hidden_dim] * n_layers + [output_dim] + blocks = [nn.Sequential(nn.Linear(dims[0], dims[1]))] + if len(dims) > 2: + blocks.extend( + [ + nn.Sequential(act, dropout, nn.Linear(d1, d2)) + for d1, d2 in zip(dims[1:-1], dims[2:]) + ] + ) + + return cls(*blocks) + + @property + def input_dim(self) -> int: + return self[0][-1].in_features + + @property + def output_dim(self) -> int: + return self[-1][-1].out_features diff --git a/chemprop/nn/hparams.py b/chemprop/nn/hparams.py new file mode 100644 index 000000000..5cf5f5e1f --- /dev/null +++ b/chemprop/nn/hparams.py @@ -0,0 +1,38 @@ +from typing import Protocol, Type, TypedDict + + +class HParamsDict(TypedDict): + """A dictionary containing a module's class and it's hyperparameters + + Using this type should essentially allow for initializing a module via:: + + module = hparams.pop('cls')(**hparams) + """ + + cls: Type + + +class HasHParams(Protocol): + """:class:`HasHParams` is a protocol for clases which possess an :attr:`hparams` attribute which is a dictionary containing the object's class and arguments required to initialize it. + + That is, any object which implements :class:`HasHParams` should be able to be initialized via:: + + class Foo(HasHParams): + def __init__(self, *args, **kwargs): + ... + + foo1 = Foo(...) + foo1_cls = foo1.hparams['cls'] + foo1_kwargs = {k: v for k, v in foo1.hparams.items() if k != "cls"} + foo2 = foo1_cls(**foo1_kwargs) + # code to compare foo1 and foo2 goes here and they should be equal + """ + + hparams: HParamsDict + + +def from_hparams(hparams: HParamsDict): + cls = hparams["cls"] + kwargs = {k: v for k, v in hparams.items() if k != "cls"} + + return cls(**kwargs) diff --git a/chemprop/nn/loss.py b/chemprop/nn/loss.py new file mode 100644 index 000000000..069fdabcc --- /dev/null +++ b/chemprop/nn/loss.py @@ -0,0 +1,344 @@ +from abc import abstractmethod +import torch +from torch import Tensor, nn +from torch.nn import functional as F +from numpy.typing import ArrayLike + +from chemprop.utils import ClassRegistry + + +__all__ = [ + "LossFunction", + "LossFunctionRegistry", + "MSELoss", + "BoundedMSELoss", + "MVELoss", + "EvidentialLoss", + "BCELoss", + "CrossEntropyLoss", + "MccMixin", + "BinaryMCCLoss", + "MulticlassMCCLoss", + "DirichletMixin", + "BinaryDirichletLoss", + "MulticlassDirichletLoss", + "SIDLoss", + "WassersteinLoss", +] + + +class LossFunction(nn.Module): + def __init__(self, task_weights: ArrayLike = 1.0): + """ + Parameters + ---------- + task_weights : ArrayLike, default=1.0 + the per-task weights of shape `t` or `1 x t`. Defaults to all tasks having a weight of 1. + """ + super().__init__() + task_weights = torch.as_tensor(task_weights, dtype=torch.float).view(1, -1) + self.register_buffer("task_weights", task_weights) + + def forward( + self, + preds: Tensor, + targets: Tensor, + mask: Tensor, + weights: Tensor, + lt_mask: Tensor, + gt_mask: Tensor, + ): + """Calculate the mean loss function value given predicted and target values + + Parameters + ---------- + preds : Tensor + a tensor of shape `b x (t * s)` (regression), `b x t` (binary classification), or + `b x t x c` (multiclass classification) containing the predictions, where `b` is the + batch size, `t` is the number of tasks to predict, `s` is the number of + targets to predict for each task, and `c` is the number of classes. + targets : Tensor + a float tensor of shape `b x t` containing the target values + mask : Tensor + a boolean tensor of shape `b x t` indicating whether the given prediction should be + included in the loss calculation + weights : Tensor + a tensor of shape `b` or `b x 1` containing the per-sample weight + lt_mask: Tensor + gt_mask: Tensor + + Returns + ------- + Tensor + a scalar containing the fully reduced loss + """ + L = self._calc_unreduced_loss(preds, targets, mask, weights, lt_mask, gt_mask) + L = L * weights.view(-1, 1) * self.task_weights.view(1, -1) * mask + + return L.sum() / mask.sum() + + @abstractmethod + def _calc_unreduced_loss(self, preds, targets, mask, weights, lt_mask, gt_mask) -> Tensor: + """Calculate a tensor of shape `b x t` containing the unreduced loss values.""" + + def extra_repr(self) -> str: + return f"task_weights={self.task_weights.tolist()}" + + +LossFunctionRegistry = ClassRegistry[LossFunction]() + + +@LossFunctionRegistry.register("mse") +class MSELoss(LossFunction): + def _calc_unreduced_loss(self, preds: Tensor, targets: Tensor, *args) -> Tensor: + return F.mse_loss(preds, targets, reduction="none") + + +@LossFunctionRegistry.register("bounded-mse") +class BoundedMSELoss(MSELoss): + def _calc_unreduced_loss( + self, preds: Tensor, targets: Tensor, mask, weights, lt_mask: Tensor, gt_mask: Tensor + ) -> Tensor: + preds = torch.where((preds < targets) & lt_mask, targets, preds) + preds = torch.where((preds > targets) & gt_mask, targets, preds) + + return super()._calc_unreduced_loss(preds, targets) + + +@LossFunctionRegistry.register("mve") +class MVELoss(LossFunction): + """Calculate the loss using Eq. 9 from [nix1994]_ + + References + ---------- + .. [nix1994] Nix, D. A.; Weigend, A. S. "Estimating the mean and variance of the target + probability distribution." Proceedings of 1994 IEEE International Conference on Neural + Networks, 1994 https://doi.org/10.1109/icnn.1994.374138 + """ + + def _calc_unreduced_loss(self, preds: Tensor, targets: Tensor, *args) -> Tensor: + mean, var = torch.chunk(preds, 2, 1) + + L_sos = (mean - targets) ** 2 / (2 * var) + L_kl = (2 * torch.pi * var).log() / 2 + + return L_sos + L_kl + + +@LossFunctionRegistry.register("evidential") +class EvidentialLoss(LossFunction): + """Calculate the loss using Eqs. 8, 9, and 10 from [amini2020]_ + + References + ---------- + .. [amini2020] Amini, A; Schwarting, W.; Soleimany, A.; Rus, D.; + "Deep Evidential Regression" Advances in Neural Information Processing Systems;2020; Vol.33. + https://proceedings.neurips.cc/paper_files/paper/2020/file/aab085461de182608ee9f607f3f7d18f-Paper.pdf + .. [soleimany2021] Soleimany, A.P.; Amini, A.; Goldman, S.; Rus, D.; Bhatia, S.N.; Coley, C.W.; + "Evidential Deep Learning for Guided Molecular Property Prediction and Discovery." ACS + Cent. Sci. 2021, 7, 8, 1356-1367. https://doi.org/10.1021/acscentsci.1c00546 + """ + + def __init__(self, task_weights: Tensor | None = None, v_kl: float = 0.2, eps: float = 1e-8): + super().__init__(task_weights) + self.v_kl = v_kl + self.eps = eps + + def _calc_unreduced_loss(self, preds: Tensor, targets: Tensor, *args) -> Tensor: + mean, v, alpha, beta = torch.chunk(preds, 4, 1) + + residuals = targets - mean + twoBlambda = 2 * beta * (1 + v) + + L_nll = ( + 0.5 * (torch.pi / v).log() + - alpha * twoBlambda.log() + + (alpha + 0.5) * torch.log(v * residuals**2 + twoBlambda) + + torch.lgamma(alpha) + - torch.lgamma(alpha + 0.5) + ) + + L_reg = (2 * v + alpha) * residuals.abs() + + return L_nll + self.v_kl * (L_reg - self.eps) + + def extra_repr(self) -> str: + parent_repr = super().extra_repr() + return parent_repr + f", v_kl={self.v_kl}, eps={self.eps}" + + +@LossFunctionRegistry.register("bce") +class BCELoss(LossFunction): + def _calc_unreduced_loss(self, preds: Tensor, targets: Tensor, *args) -> Tensor: + return F.binary_cross_entropy_with_logits(preds, targets, reduction="none") + + +@LossFunctionRegistry.register("ce") +class CrossEntropyLoss(LossFunction): + def _calc_unreduced_loss(self, preds: Tensor, targets: Tensor, *args) -> Tensor: + preds = preds.transpose(1, 2) + targets = targets.long() + + return F.cross_entropy(preds, targets, reduction="none") + + +class MccMixin: + """Calculate a soft Matthews correlation coefficient ([mccWiki]_) loss for multiclass + classification based on the implementataion of [mccSklearn]_ + + References + ---------- + .. [mccWiki] https://en.wikipedia.org/wiki/Phi_coefficient#Multiclass_case + .. [mccSklearn] https://scikit-learn.org/stable/modules/generated/sklearn.metrics.matthews_corrcoef.html + """ + + def __call__(self, preds: Tensor, targets: Tensor, mask: Tensor, weights: Tensor, *args): + if not (0 <= preds.min() and preds.max() <= 1): # assume logits + preds = preds.softmax(2) + + L = self._calc_unreduced_loss(preds, targets.long(), mask, weights, *args) + L = L * self.task_weights + + return L.mean() + + +@LossFunctionRegistry.register("binary-mcc") +class BinaryMCCLoss(LossFunction, MccMixin): + def _calc_unreduced_loss(self, preds, targets, mask, weights, *args) -> Tensor: + TP = (targets * preds * weights * mask).sum(0, keepdim=True) + FP = ((1 - targets) * preds * weights * mask).sum(0, keepdim=True) + TN = ((1 - targets) * (1 - preds) * weights * mask).sum(0, keepdim=True) + FN = (targets * (1 - preds) * weights * mask).sum(0, keepdim=True) + + MCC = (TP * TN - FP * FN) / ((TP + FP) * (TP + FN) * (TN + FP) * (TN + FN)).sqrt() + + return 1 - MCC + + +@LossFunctionRegistry.register("multiclass-mcc") +class MulticlassMCCLoss(LossFunction, MccMixin): + def _calc_unreduced_loss(self, preds, targets, mask, weights, *args) -> Tensor: + device = preds.device + + C = preds.shape[2] + bin_targets = torch.eye(C, device=device)[targets] + bin_preds = torch.eye(C, device=device)[preds.argmax(-1)] + masked_data_weights = weights.unsqueeze(2) * mask.unsqueeze(2) + + p = (bin_preds * masked_data_weights).sum(0) + t = (bin_targets * masked_data_weights).sum(0) + c = (bin_preds * bin_targets * masked_data_weights).sum() + s = (preds * masked_data_weights).sum() + s2 = s.square() + + # the `einsum` calls amount to calculating the batched dot product + cov_ytyp = c * s - torch.einsum("ij,ij->i", p, t).sum() + cov_ypyp = s2 - torch.einsum("ij,ij->i", p, p).sum() + cov_ytyt = s2 - torch.einsum("ij,ij->i", t, t).sum() + + x = cov_ypyp * cov_ytyt + MCC = torch.tensor(0.0, device=device) if x == 0 else cov_ytyp / x.sqrt() + + return 1 - MCC + + +class DirichletMixin: + """Uses the loss function from [sensoy2018]_ based on the implementation at [sensoyGithub]_ + + References + ---------- + .. [sensoy2018] Sensoy, M.; Kaplan, L.; Kandemir, M. "Evidential deep learning to quantify + classification uncertainty." NeurIPS, 2018, 31. https://doi.org/10.48550/arXiv.1806.01768 + .. [sensoyGithub] https://muratsensoy.github.io/uncertainty.html#Define-the-loss-function + """ + + def __init__(self, task_weights: Tensor | None = None, v_kl: float = 0.2): + super().__init__(task_weights) + self.v_kl = v_kl + + def _calc_unreduced_loss(self, preds, targets, *args) -> Tensor: + S = preds.sum(-1, keepdim=True) + p = preds / S + + A = (targets - p).square().sum(-1, keepdim=True) + B = ((p * (1 - p)) / (S + 1)).sum(-1, keepdim=True) + + L_mse = A + B + + alpha = targets + (1 - targets) * preds + beta = torch.ones_like(alpha) + S_alpha = alpha.sum(-1, keepdim=True) + S_beta = beta.sum(-1, keepdim=True) + + ln_alpha = S_alpha.lgamma() - alpha.lgamma().sum(-1, keepdim=True) + ln_beta = beta.lgamma().sum(-1, keepdim=True) - S_beta.lgamma() + + dg0 = torch.digamma(alpha) + dg1 = torch.digamma(S_alpha) + + L_kl = ln_alpha + ln_beta + torch.sum((alpha - beta) * (dg0 - dg1), -1, keepdim=True) + + return (L_mse + self.v_kl * L_kl).mean(-1) + + def extra_repr(self) -> str: + return f"v_kl={self.v_kl}" + + +@LossFunctionRegistry.register("binary-dirichlet") +class BinaryDirichletLoss(DirichletMixin, LossFunction): + def _calc_unreduced_loss(self, preds: Tensor, targets: Tensor, *args) -> Tensor: + N_CLASSES = 2 + n_tasks = targets.shape[1] + preds = preds.reshape(len(preds), n_tasks, N_CLASSES) + y_one_hot = torch.eye(N_CLASSES, device=preds.device)[targets.long()] + + return super()._calc_unreduced_loss(preds, y_one_hot, *args) + + +@LossFunctionRegistry.register("multiclass-dirichlet") +class MulticlassDirichletLoss(DirichletMixin, LossFunction): + def _calc_unreduced_loss(self, preds: Tensor, targets: Tensor, mask: Tensor, *args) -> Tensor: + y_one_hot = torch.eye(preds.shape[2], device=preds.device)[targets.long()] + + return super()._calc_unreduced_loss(preds, y_one_hot, mask) + + +@LossFunctionRegistry.register("sid") +class SIDLoss(LossFunction): + def __init__(self, task_weights: Tensor | None = None, threshold: float | None = None): + super().__init__(task_weights) + + self.threshold = threshold + + def _calc_unreduced_loss(self, preds: Tensor, targets: Tensor, mask: Tensor, *args) -> Tensor: + if self.threshold is not None: + preds = preds.clamp(min=self.threshold) + + preds_norm = preds / (preds * mask).sum(1, keepdim=True) + + targets = targets.masked_fill(~mask, 1) + preds_norm = preds_norm.masked_fill(~mask, 1) + + return (preds_norm / targets).log() * preds_norm + (targets / preds_norm).log() * targets + + def extra_repr(self) -> str: + return f"threshold={self.threshold}" + + +@LossFunctionRegistry.register(["earthmovers", "wasserstein"]) +class WassersteinLoss(LossFunction): + def __init__(self, task_weights: Tensor | None = None, threshold: float | None = None): + super().__init__(task_weights) + + self.threshold = threshold + + def _calc_unreduced_loss(self, preds: Tensor, targets: Tensor, mask: Tensor, *args) -> Tensor: + if self.threshold is not None: + preds = preds.clamp(min=self.threshold) + + preds_norm = preds / (preds * mask).sum(1, keepdim=True) + + return (targets.cumsum(1) - preds_norm.cumsum(1)).abs() + + def extra_repr(self) -> str: + return f"threshold={self.threshold}" diff --git a/chemprop/nn/message_passing/__init__.py b/chemprop/nn/message_passing/__init__.py new file mode 100644 index 000000000..e07ec4599 --- /dev/null +++ b/chemprop/nn/message_passing/__init__.py @@ -0,0 +1,10 @@ +from .proto import MessagePassing +from .base import AtomMessagePassing, BondMessagePassing +from .multi import MulticomponentMessagePassing + +__all__ = [ + "MessagePassing", + "AtomMessagePassing", + "BondMessagePassing", + "MulticomponentMessagePassing", +] diff --git a/chemprop/nn/message_passing/base.py b/chemprop/nn/message_passing/base.py new file mode 100644 index 000000000..7f828ec66 --- /dev/null +++ b/chemprop/nn/message_passing/base.py @@ -0,0 +1,311 @@ +from abc import abstractmethod + +from lightning.pytorch.core.mixins import HyperparametersMixin +import torch +from torch import Tensor, nn + +from chemprop.conf import DEFAULT_ATOM_FDIM, DEFAULT_BOND_FDIM, DEFAULT_HIDDEN_DIM +from chemprop.exceptions import InvalidShapeError +from chemprop.data import BatchMolGraph +from chemprop.nn.utils import Activation, get_activation_function +from chemprop.nn.message_passing.proto import MessagePassing +from chemprop.nn.transforms import ScaleTransform, GraphTransform + + +class _MessagePassingBase(MessagePassing, HyperparametersMixin): + """The base message-passing block for atom- and bond-based message-passing schemes + + NOTE: this class is an abstract base class and cannot be instantiated + + Parameters + ---------- + d_v : int, default=DEFAULT_ATOM_FDIM + the feature dimension of the vertices + d_e : int, default=DEFAULT_BOND_FDIM + the feature dimension of the edges + d_h : int, default=DEFAULT_HIDDEN_DIM + the hidden dimension during message passing + bias : bool, defuault=False + if `True`, add a bias term to the learned weight matrices + depth : int, default=3 + the number of message passing iterations + undirected : bool, default=False + if `True`, pass messages on undirected edges + dropout : float, default=0.0 + the dropout probability + activation : str, default="relu" + the activation function to use + d_vd : int | None, default=None + the dimension of additional vertex descriptors that will be concatenated to the hidden features before readout + + See also + -------- + * :class:`AtomMessagePassing` + + * :class:`BondMessagePassing` + """ + + def __init__( + self, + d_v: int = DEFAULT_ATOM_FDIM, + d_e: int = DEFAULT_BOND_FDIM, + d_h: int = DEFAULT_HIDDEN_DIM, + bias: bool = False, + depth: int = 3, + dropout: float = 0.0, + activation: str | Activation = Activation.RELU, + undirected: bool = False, + d_vd: int | None = None, + V_d_transform: ScaleTransform | None = None, + graph_transform: GraphTransform | None = None, + # layers_per_message: int = 1, + ): + super().__init__() + self.save_hyperparameters() + self.hparams["cls"] = self.__class__ + + self.W_i, self.W_h, self.W_o, self.W_d = self.setup(d_v, d_e, d_h, d_vd, bias) + self.depth = depth + self.undirected = undirected + self.dropout = nn.Dropout(dropout) + self.tau = get_activation_function(activation) + self.V_d_transform = V_d_transform if V_d_transform is not None else nn.Identity() + self.graph_transform = graph_transform if graph_transform is not None else nn.Identity() + + @property + def output_dim(self) -> int: + return self.W_d.out_features if self.W_d is not None else self.W_o.out_features + + @abstractmethod + def setup( + self, + d_v: int = DEFAULT_ATOM_FDIM, + d_e: int = DEFAULT_BOND_FDIM, + d_h: int = DEFAULT_HIDDEN_DIM, + d_vd: int | None = None, + bias: bool = False, + ) -> tuple[nn.Module, nn.Module, nn.Module, nn.Module | None]: + """setup the weight matrices used in the message passing update functions + + Parameters + ---------- + d_v : int + the vertex feature dimension + d_e : int + the edge feature dimension + d_h : int, default=300 + the hidden dimension during message passing + d_vd : int | None, default=None + the dimension of additional vertex descriptors that will be concatenated to the hidden + features before readout, if any + bias: bool, default=False + whether to add a learned bias to the matrices + + Returns + ------- + W_i, W_h, W_o, W_d : tuple[nn.Module, nn.Module, nn.Module, nn.Module | None] + the input, hidden, output, and descriptor weight matrices, respectively, used in the + message passing update functions. The descriptor weight matrix is `None` if no vertex + dimension is supplied + """ + + @abstractmethod + def initialize(self, bmg: BatchMolGraph) -> Tensor: + """initialize the message passing scheme by calculating initial matrix of hidden features""" + + @abstractmethod + def message(self, H_t: Tensor, bmg: BatchMolGraph): + """Calculate the message matrix""" + + def update(self, M_t, H_0): + """Calcualte the updated hidden for each edge""" + H_t = self.W_h(M_t) + H_t = self.tau(H_0 + H_t) + H_t = self.dropout(H_t) + + return H_t + + def finalize(self, M: Tensor, V: Tensor, V_d: Tensor | None) -> Tensor: + r"""Finalize message passing by (1) concatenating the final message ``M`` and the original + vertex features ``V`` and (2) if provided, further concatenating additional vertex + descriptors ``V_d``. + + This function implements the following operation: + + .. math:: + H &= \mathtt{dropout} \left( \tau(\mathbf{W}_o(V \mathbin\Vert M)) \right) \\ + H &= \mathtt{dropout} \left( \tau(\mathbf{W}_d(H \mathbin\Vert V_d)) \right), + + where :math:`\tau` is the activation function, :math:`\Vert` is the concatenation operator, + :math:`\mathbf{W}_o` and :math:`\mathbf{W}_d` are learned weight matrices, :math:`M` is + the message matrix, :math:`V` is the original vertex feature matrix, and :math:`V_d` is an + optional vertex descriptor matrix. + + Parameters + ---------- + M : Tensor + a tensor of shape ``V x d_h`` containing the message vector of each vertex + V : Tensor + a tensor of shape ``V x d_v`` containing the original vertex features + V_d : Tensor | None + an optional tensor of shape ``V x d_vd`` containing additional vertex descriptors + + Returns + ------- + Tensor + a tensor of shape ``V x (d_h + d_v [+ d_vd])`` containing the final hidden + representations + + Raises + ------ + InvalidShapeError + if ``V_d`` is not of shape ``b x d_vd``, where ``b`` is the batch size and ``d_vd`` is + the vertex descriptor dimension + """ + H = self.W_o(torch.cat((V, M), dim=1)) # V x d_o + H = self.tau(H) + H = self.dropout(H) + + if V_d is not None: + V_d = self.V_d_transform(V_d) + try: + H = self.W_d(torch.cat((H, V_d), dim=1)) # V x (d_o + d_vd) + H = self.dropout(H) + except RuntimeError: + raise InvalidShapeError("V_d", V_d.shape, [len(H), self.W_d.in_features]) + + return H + + def forward(self, bmg: BatchMolGraph, V_d: Tensor | None = None) -> Tensor: + """Encode a batch of molecular graphs. + + Parameters + ---------- + bmg: BatchMolGraph + a batch of :class:`BatchMolGraph`s to encode + V_d : Tensor | None, default=None + an optional tensor of shape ``V x d_vd`` containing additional descriptors for each atom + in the batch. These will be concatenated to the learned atomic descriptors and + transformed before the readout phase. + + Returns + ------- + Tensor + a tensor of shape ``V x d_h`` or ``V x (d_h + d_vd)`` containing the encoding of each + molecule in the batch, depending on whether additional atom descriptors were provided + """ + bmg = self.graph_transform(bmg) + H_0 = self.initialize(bmg) + + H = self.tau(H_0) + for _ in range(1, self.depth): + if self.undirected: + H = (H + H[bmg.rev_edge_index]) / 2 + + M = self.message(H, bmg) + H = self.update(M, H_0) + + index_torch = bmg.edge_index[1].unsqueeze(1).repeat(1, H.shape[1]) + M = torch.zeros(len(bmg.V), H.shape[1], dtype=H.dtype, device=H.device).scatter_reduce_( + 0, index_torch, H, reduce="sum", include_self=False + ) + return self.finalize(M, bmg.V, V_d) + + +class BondMessagePassing(_MessagePassingBase): + r"""A :class:`BondMessagePassing` encodes a batch of molecular graphs by passing messages along + directed bonds. + + It implements the following operation: + + .. math:: + + h_{vw}^{(0)} &= \tau \left( \mathbf W_i(e_{vw}) \right) \\ + m_{vw}^{(t)} &= \sum_{u \in \mathcal N(v)\setminus w} h_{uv}^{(t-1)} \\ + h_{vw}^{(t)} &= \tau \left(h_v^{(0)} + \mathbf W_h m_{vw}^{(t-1)} \right) \\ + m_v^{(T)} &= \sum_{w \in \mathcal N(v)} h_w^{(T-1)} \\ + h_v^{(T)} &= \tau \left (\mathbf W_o \left( x_v \mathbin\Vert m_{v}^{(T)} \right) \right), + + where :math:`\tau` is the activation function; :math:`\mathbf W_i`, :math:`\mathbf W_h`, and + :math:`\mathbf W_o` are learned weight matrices; :math:`e_{vw}` is the feature vector of the + bond between atoms :math:`v` and :math:`w`; :math:`x_v` is the feature vector of atom :math:`v`; + :math:`h_{vw}^{(t)}` is the hidden representation of the bond :math:`v \rightarrow w` at + iteration :math:`t`; :math:`m_{vw}^{(t)}` is the message received by the bond :math:`v + \to w` at iteration :math:`t`; and :math:`t \in \{1, \dots, T-1\}` is the number of + message passing iterations. + """ + + def setup( + self, + d_v: int = DEFAULT_ATOM_FDIM, + d_e: int = DEFAULT_BOND_FDIM, + d_h: int = DEFAULT_HIDDEN_DIM, + d_vd: int | None = None, + bias: bool = False, + ): + W_i = nn.Linear(d_v + d_e, d_h, bias) + W_h = nn.Linear(d_h, d_h, bias) + W_o = nn.Linear(d_v + d_h, d_h) + W_d = nn.Linear(d_h + d_vd, d_h + d_vd) if d_vd is not None else None + + return W_i, W_h, W_o, W_d + + def initialize(self, bmg: BatchMolGraph) -> Tensor: + return self.W_i(torch.cat([bmg.V[bmg.edge_index[0]], bmg.E], dim=1)) + + def message(self, H: Tensor, bmg: BatchMolGraph) -> Tensor: + index_torch = bmg.edge_index[1].unsqueeze(1).repeat(1, H.shape[1]) + M_all = torch.zeros(len(bmg.V), H.shape[1], dtype=H.dtype, device=H.device).scatter_reduce_( + 0, index_torch, H, reduce="sum", include_self=False + )[bmg.edge_index[0]] + M_rev = H[bmg.rev_edge_index] + + return M_all - M_rev + + +class AtomMessagePassing(_MessagePassingBase): + r"""A :class:`AtomMessagePassing` encodes a batch of molecular graphs by passing messages along + atoms. + + It implements the following operation: + + .. math:: + + h_v^{(0)} &= \tau \left( \mathbf{W}_i(x_v) \right) \\ + m_v^{(t)} &= \sum_{u \in \mathcal{N}(v)} h_u^{(t-1)} \mathbin\Vert e_{uv} \\ + h_v^{(t)} &= \tau\left(h_v^{(0)} + \mathbf{W}_h m_v^{(t-1)}\right) \\ + m_v^{(T)} &= \sum_{w \in \mathcal{N}(v)} h_w^{(T-1)} \\ + h_v^{(T)} &= \tau \left (\mathbf{W}_o \left( x_v \mathbin\Vert m_{v}^{(T)} \right) \right), + + where :math:`\tau` is the activation function; :math:`\mathbf{W}_i`, :math:`\mathbf{W}_h`, and + :math:`\mathbf{W}_o` are learned weight matrices; :math:`e_{vw}` is the feature vector of the + bond between atoms :math:`v` and :math:`w`; :math:`x_v` is the feature vector of atom :math:`v`; + :math:`h_v^{(t)}` is the hidden representation of atom :math:`v` at iteration :math:`t`; + :math:`m_v^{(t)}` is the message received by atom :math:`v` at iteration :math:`t`; and + :math:`t \in \{1, \dots, T\}` is the number of message passing iterations. + """ + + def setup( + self, + d_v: int = DEFAULT_ATOM_FDIM, + d_e: int = DEFAULT_BOND_FDIM, + d_h: int = DEFAULT_HIDDEN_DIM, + d_vd: int | None = None, + bias: bool = False, + ): + W_i = nn.Linear(d_v, d_h, bias) + W_h = nn.Linear(d_e + d_h, d_h, bias) + W_o = nn.Linear(d_v + d_h, d_h) + W_d = nn.Linear(d_h + d_vd, d_h + d_vd) if d_vd is not None else None + + return W_i, W_h, W_o, W_d + + def initialize(self, bmg: BatchMolGraph) -> Tensor: + return self.W_i(bmg.V[bmg.edge_index[0]]) + + def message(self, H: Tensor, bmg: BatchMolGraph): + H = torch.cat((H, bmg.E), dim=1) + index_torch = bmg.edge_index[1].unsqueeze(1).repeat(1, H.shape[1]) + return torch.zeros(len(bmg.V), H.shape[1], dtype=H.dtype, device=H.device).scatter_reduce_( + 0, index_torch, H, reduce="sum", include_self=False + )[bmg.edge_index[0]] diff --git a/chemprop/nn/message_passing/multi.py b/chemprop/nn/message_passing/multi.py new file mode 100644 index 000000000..5cd1b8c07 --- /dev/null +++ b/chemprop/nn/message_passing/multi.py @@ -0,0 +1,78 @@ +from typing import Iterable, Sequence +import warnings + +from torch import Tensor, nn + +from chemprop.data import BatchMolGraph +from chemprop.nn.message_passing.proto import MessagePassing +from chemprop.nn.hparams import HasHParams + + +class MulticomponentMessagePassing(nn.Module, HasHParams): + """A `MulticomponentMessagePassing` performs message-passing on each individual input in a + multicomponent input then concatenates the representation of each input to construct a + global representation + + Parameters + ---------- + blocks : Sequence[MessagePassing] + the invidual message-passing blocks for each input + n_components : int + the number of components in each input + shared : bool, default=False + whether one block will be shared among all components in an input. If not, a separate + block will be learned for each component. + """ + + def __init__(self, blocks: Sequence[MessagePassing], n_components: int, shared: bool = False): + super().__init__() + self.hparams = { + "cls": self.__class__, + "blocks": [block.hparams for block in blocks], + "n_components": n_components, + "shared": shared, + } + + if len(blocks) == 0: + raise ValueError("arg 'blocks' was empty!") + if shared and len(blocks) > 1: + warnings.warn( + "More than 1 block was supplied but 'shared' was True! Using only the 0th block..." + ) + elif not shared and len(blocks) != n_components: + raise ValueError( + "arg 'n_components' must be equal to `len(blocks)` if 'shared' is False! " + f"got: {n_components} and {len(blocks)}, respectively." + ) + + self.n_components = n_components + self.shared = shared + self.blocks = nn.ModuleList([blocks[0]] * self.n_components if shared else blocks) + + def __len__(self) -> int: + return len(self.blocks) + + @property + def output_dim(self) -> int: + d_o = sum(block.output_dim for block in self.blocks) + + return d_o + + def forward(self, bmgs: Iterable[BatchMolGraph], V_ds: Iterable[Tensor | None]) -> list[Tensor]: + """Encode the multicomponent inputs + + Parameters + ---------- + bmgs : Iterable[BatchMolGraph] + V_ds : Iterable[Tensor | None] + + Returns + ------- + list[Tensor] + a list of tensors of shape `V x d_i` containing the respective encodings of the `i`\th + component, where `d_i` is the output dimension of the `i`\th encoder + """ + if V_ds is None: + return [block(bmg) for block, bmg in zip(self.blocks, bmgs)] + else: + return [block(bmg, V_d) for block, bmg, V_d in zip(self.blocks, bmgs, V_ds)] diff --git a/chemprop/nn/message_passing/proto.py b/chemprop/nn/message_passing/proto.py new file mode 100644 index 000000000..4c86106b9 --- /dev/null +++ b/chemprop/nn/message_passing/proto.py @@ -0,0 +1,35 @@ +from abc import abstractmethod + +from torch import nn, Tensor + +from chemprop.data import BatchMolGraph +from chemprop.nn.hparams import HasHParams + + +class MessagePassing(nn.Module, HasHParams): + """A :class:`MessagePassing` module encodes a batch of molecular graphs + using message passing to learn vertex-level hidden representations.""" + + input_dim: int + output_dim: int + + @abstractmethod + def forward(self, bmg: BatchMolGraph, V_d: Tensor | None = None) -> Tensor: + """Encode a batch of molecular graphs. + + Parameters + ---------- + bmg: BatchMolGraph + the batch of :class:`~chemprop.featurizers.molgraph.MolGraph`\s to encode + V_d : Tensor | None, default=None + an optional tensor of shape `V x d_vd` containing additional descriptors for each atom + in the batch. These will be concatenated to the learned atomic descriptors and + transformed before the readout phase. + + Returns + ------- + Tensor + a tensor of shape `V x d_h` or `V x (d_h + d_vd)` containing the hidden representation + of each vertex in the batch of graphs. The feature dimension depends on whether + additional atom descriptors were provided + """ diff --git a/chemprop/nn/metrics.py b/chemprop/nn/metrics.py new file mode 100644 index 000000000..a8077d570 --- /dev/null +++ b/chemprop/nn/metrics.py @@ -0,0 +1,209 @@ +from abc import abstractmethod +from dataclasses import dataclass + +import torch +from torch import Tensor +from torchmetrics import functional as F +from torchmetrics.utilities.compute import auc + +from chemprop.utils.registry import ClassRegistry +from chemprop.nn.loss import ( + BCELoss, + BinaryMCCLoss, + CrossEntropyLoss, + LossFunction, + MSELoss, + MulticlassMCCLoss, + SIDLoss, + WassersteinLoss, +) + +__all__ = [ + "Metric", + "MetricRegistry", + "ThresholdedMixin", + "MAEMetric", + "MSEMetric", + "RMSEMetric", + "BoundedMixin", + "BoundedMAEMetric", + "BoundedMSEMetric", + "BoundedRMSEMetric", + "R2Metric", + "BinaryAUROCMetric", + "BinaryAUPRCMetric", + "BinaryAccuracyMetric", + "BinaryF1Metric", + "BCEMetric", + "CrossEntropyMetric", + "BinaryMCCMetric", + "MulticlassMCCMetric", + "SIDMetric", + "WassersteinMetric", +] + + +class Metric(LossFunction): + """ + Parameters + ---------- + task_weights : ArrayLike = 1.0 + .. important:: + Ignored. Maintained for compatibility with :class:`~chemprop.nn.loss.LossFunction` + """ + + minimize: bool = True + + def forward( + self, + preds: Tensor, + targets: Tensor, + mask: Tensor, + weights: Tensor, + lt_mask: Tensor, + gt_mask: Tensor, + ): + return self._calc_unreduced_loss(preds, targets, mask, lt_mask, gt_mask)[mask].mean() + + @abstractmethod + def _calc_unreduced_loss(self, preds, targets, mask, lt_mask, gt_mask) -> Tensor: + pass + + +MetricRegistry = ClassRegistry[Metric]() + + +@dataclass +class ThresholdedMixin: + threshold: float | None = 0.5 + + def extra_repr(self) -> str: + return f"threshold={self.threshold}" + + +@MetricRegistry.register("mae") +class MAEMetric(Metric): + def _calc_unreduced_loss(self, preds, targets, *args) -> Tensor: + return (preds - targets).abs() + + +@MetricRegistry.register("mse") +class MSEMetric(MSELoss, Metric): + pass + + +@MetricRegistry.register("rmse") +class RMSEMetric(MSEMetric): + def forward( + self, + preds: Tensor, + targets: Tensor, + mask: Tensor, + weights: Tensor, + lt_mask: Tensor, + gt_mask: Tensor, + ): + squared_errors = super()._calc_unreduced_loss(preds, targets, mask, lt_mask, gt_mask) + + return squared_errors[mask].mean().sqrt() + + +class BoundedMixin: + def _calc_unreduced_loss(self, preds, targets, mask, lt_mask, gt_mask) -> Tensor: + preds = torch.where((preds < targets) & lt_mask, targets, preds) + preds = torch.where((preds > targets) & gt_mask, targets, preds) + + return super()._calc_unreduced_loss(preds, targets, mask, lt_mask, gt_mask) + + +@MetricRegistry.register("bounded-mae") +class BoundedMAEMetric(MAEMetric, BoundedMixin): + pass + + +@MetricRegistry.register("bounded-mse") +class BoundedMSEMetric(MSEMetric, BoundedMixin): + pass + + +@MetricRegistry.register("bounded-rmse") +class BoundedRMSEMetric(RMSEMetric, BoundedMixin): + pass + + +@MetricRegistry.register("r2") +class R2Metric(Metric): + minimize = False + + def forward(self, preds: Tensor, targets: Tensor, mask: Tensor, *args, **kwargs): + return F.r2_score(preds[mask], targets[mask]) + + +@MetricRegistry.register("roc") +class BinaryAUROCMetric(Metric): + minimize = False + + def forward(self, preds: Tensor, targets: Tensor, mask: Tensor, *args, **kwargs): + return self._calc_unreduced_loss(preds, targets, mask) + + def _calc_unreduced_loss(self, preds, targets, mask, *args) -> Tensor: + return F.auroc(preds[mask], targets[mask].long(), task="binary") + + +@MetricRegistry.register("prc") +class BinaryAUPRCMetric(Metric): + minimize = False + + def forward(self, preds: Tensor, targets: Tensor, *args, **kwargs): + p, r, _ = F.precision_recall_curve(preds, targets.long(), task="binary") + return auc(r, p) + + +@MetricRegistry.register("accuracy") +class BinaryAccuracyMetric(Metric, ThresholdedMixin): + minimize = False + + def forward(self, preds: Tensor, targets: Tensor, mask: Tensor, *args, **kwargs): + return F.accuracy( + preds[mask], targets[mask].long(), threshold=self.threshold, task="binary" + ) + + +@MetricRegistry.register("f1") +class BinaryF1Metric(Metric, ThresholdedMixin): + minimize = False + + def forward(self, preds: Tensor, targets: Tensor, mask: Tensor, *args, **kwargs): + return F.f1_score( + preds[mask], targets[mask].long(), threshold=self.threshold, task="binary" + ) + + +@MetricRegistry.register("bce") +class BCEMetric(BCELoss, Metric): + pass + + +@MetricRegistry.register("ce") +class CrossEntropyMetric(CrossEntropyLoss, Metric): + pass + + +@MetricRegistry.register("binary-mcc") +class BinaryMCCMetric(BinaryMCCLoss, Metric): + pass + + +@MetricRegistry.register("multiclass-mcc") +class MulticlassMCCMetric(MulticlassMCCLoss, Metric): + pass + + +@MetricRegistry.register("sid") +class SIDMetric(SIDLoss, Metric): + pass + + +@MetricRegistry.register("wasserstein") +class WassersteinMetric(WassersteinLoss, Metric): + pass diff --git a/chemprop/nn/predictors.py b/chemprop/nn/predictors.py new file mode 100644 index 000000000..ed077989f --- /dev/null +++ b/chemprop/nn/predictors.py @@ -0,0 +1,349 @@ +from abc import abstractmethod + +from lightning.pytorch.core.mixins import HyperparametersMixin +import torch +from torch import nn, Tensor +from torch.nn import functional as F + +from chemprop.nn.loss import ( + BCELoss, + BinaryDirichletLoss, + CrossEntropyLoss, + EvidentialLoss, + LossFunction, + MSELoss, + MVELoss, + MulticlassDirichletLoss, + SIDLoss, +) +from chemprop.nn.metrics import BinaryAUROCMetric, CrossEntropyMetric, MSEMetric, Metric, SIDMetric +from chemprop.nn.ffn import MLP +from chemprop.nn.transforms import UnscaleTransform + +from chemprop.nn.hparams import HasHParams +from chemprop.conf import DEFAULT_HIDDEN_DIM +from chemprop.utils import ClassRegistry, Factory + +__all__ = [ + "Predictor", + "PredictorRegistry", + "RegressionFFN", + "MveFFN", + "EvidentialFFN", + "BinaryClassificationFFNBase", + "BinaryClassificationFFN", + "BinaryDirichletFFN", + "MulticlassClassificationFFN", + "MulticlassDirichletFFN", + "SpectralFFN", +] + + +class Predictor(nn.Module, HasHParams): + r"""A :class:`Predictor` is a protocol that defines a differentiable function + :math:`f` : \mathbb R^d \mapsto \mathbb R^o""" + + input_dim: int + """the input dimension""" + output_dim: int + """the output dimension""" + n_tasks: int + """the number of tasks `t` to predict for each input""" + n_targets: int + """the number of targets `s` to predict for each task `t`""" + criterion: LossFunction + """the loss function to use for training""" + task_weights: Tensor + """the weights to apply to each task when calculating the loss""" + output_transform: UnscaleTransform + """the transform to apply to the output of the predictor""" + + @abstractmethod + def forward(self, Z: Tensor) -> Tensor: + pass + + @abstractmethod + def train_step(self, Z: Tensor) -> Tensor: + pass + + @abstractmethod + def encode(self, Z: Tensor, i: int) -> Tensor: + """Calculate the :attr:`i`-th hidden representation + + Parameters + ---------- + Z : Tensor + a tensor of shape ``n x d`` containing the input data to encode, where ``d`` is the + input dimensionality. + i : int + The stop index of slice of the MLP used to encode the input. That is, use all + layers in the MLP _up to_ :attr:`i` (i.e., ``MLP[:i]``). This can be any integer + value, and the behavior of this function is dependent on the underlying list + slicing behavior. For example: + + * ``i=0``: use a 0-layer MLP (i.e., a no-op) + * ``i=1``: use only the first block + * ``i=-1``: use _up to_ the final block + + Returns + ------- + Tensor + a tensor of shape ``n x h`` containing the :attr:`i`-th hidden representation, where + ``h`` is the number of neurons in the :attr:`i`-th hidden layer. + """ + pass + + +PredictorRegistry = ClassRegistry[Predictor]() + + +class _FFNPredictorBase(Predictor, HyperparametersMixin): + """A :class:`_FFNPredictorBase` is the base class for all :class:`Predictor`\s that use an + underlying :class:`SimpleFFN` to map the learned fingerprint to the desired output. + """ + + _T_default_criterion: LossFunction + _T_default_metric: Metric + + def __init__( + self, + n_tasks: int = 1, + input_dim: int = DEFAULT_HIDDEN_DIM, + hidden_dim: int = 300, + n_layers: int = 1, + dropout: float = 0.0, + activation: str = "relu", + criterion: LossFunction | None = None, + task_weights: Tensor | None = None, + threshold: float | None = None, + output_transform: UnscaleTransform | None = None, + ): + super().__init__() + self.save_hyperparameters() + self.hparams["cls"] = self.__class__ + + self.ffn = MLP.build( + input_dim, n_tasks * self.n_targets, hidden_dim, n_layers, dropout, activation + ) + task_weights = torch.ones(n_tasks) if task_weights is None else task_weights + self.criterion = criterion or Factory.build( + self._T_default_criterion, task_weights=task_weights, threshold=threshold + ) + + self.output_transform = output_transform if output_transform is not None else nn.Identity() + + self.output_transform = output_transform if output_transform is not None else nn.Identity() + + @property + def input_dim(self) -> int: + return self.ffn.input_dim + + @property + def output_dim(self) -> int: + return self.ffn.output_dim + + @property + def n_tasks(self) -> int: + return self.output_dim // self.n_targets + + def forward(self, Z: Tensor) -> Tensor: + return self.output_transform(self.ffn(Z)) + + def encode(self, Z: Tensor, i: int) -> Tensor: + return self.ffn[:i](Z) + + +@PredictorRegistry.register("regression") +class RegressionFFN(_FFNPredictorBase): + n_targets = 1 + _T_default_criterion = MSELoss + _T_default_metric = MSEMetric + + def train_step(self, Z: Tensor) -> Tensor: + return super().forward(Z) + + +@PredictorRegistry.register("regression-mve") +class MveFFN(RegressionFFN): + n_targets = 2 + _T_default_criterion = MVELoss + + def forward(self, Z: Tensor) -> Tensor: + Y = super().forward(Z) + mean, var = torch.chunk(Y, self.n_targets, 1) + + mean = self.scale * mean + self.loc + var = var * self.scale**2 + + return torch.cat((mean, var), 1) + + def train_step(self, Z: Tensor) -> Tensor: + Y = super().forward(Z) + mean, var = torch.chunk(Y, self.n_targets, 1) + var = F.softplus(var) + + return torch.cat((mean, var), 1) + + +@PredictorRegistry.register("regression-evidential") +class EvidentialFFN(RegressionFFN): + n_targets = 4 + _T_default_criterion = EvidentialLoss + + def forward(self, Z: Tensor) -> Tensor: + Y = super().forward(Z) + mean, v, alpha, beta = torch.chunk(Y, self.n_targets, 1) + + mean = self.scale * mean + self.loc + v = v * self.scale**2 + + return torch.cat((mean, v, alpha, beta), 1) + + def train_step(self, Z: Tensor) -> Tensor: + Y = super().forward(Z) + mean, v, alpha, beta = torch.chunk(Y, self.n_targets, 1) + + v = F.softplus(v) + alpha = F.softplus(alpha) + 1 + beta = F.softplus(beta) + + return torch.cat((mean, v, alpha, beta), 1) + + +class BinaryClassificationFFNBase(_FFNPredictorBase): + pass + + +@PredictorRegistry.register("classification") +class BinaryClassificationFFN(BinaryClassificationFFNBase): + n_targets = 1 + _T_default_criterion = BCELoss + _T_default_metric = BinaryAUROCMetric + + def forward(self, Z: Tensor) -> Tensor: + Y = super().forward(Z) + + return Y.sigmoid() + + def train_step(self, Z: Tensor) -> Tensor: + return super().forward(Z) + + +@PredictorRegistry.register("classification-dirichlet") +class BinaryDirichletFFN(BinaryClassificationFFNBase): + n_targets = 2 + _T_default_criterion = BinaryDirichletLoss + _T_default_metric = BinaryAUROCMetric + + def forward(self, Z: Tensor) -> Tensor: + Y = super().forward(Z) + alpha, beta = torch.chunk(Y, 2, 1) + + return beta / (alpha + beta) + + def train_step(self, Z: Tensor) -> Tensor: + Y = super().forward(Z) + + F.softplus(Y) + 1 + + +@PredictorRegistry.register("multiclass") +class MulticlassClassificationFFN(_FFNPredictorBase): + n_targets = 1 + _T_default_criterion = CrossEntropyLoss + _T_default_metric = CrossEntropyMetric + + def __init__( + self, + n_classes: int, + n_tasks: int = 1, + input_dim: int = DEFAULT_HIDDEN_DIM, + hidden_dim: int = 300, + n_layers: int = 1, + dropout: float = 0.0, + activation: str = "relu", + criterion: LossFunction | None = None, + task_weights: Tensor | None = None, + threshold: float | None = None, + output_transform: UnscaleTransform | None = None, + ): + super().__init__( + n_tasks * n_classes, + input_dim, + hidden_dim, + n_layers, + dropout, + activation, + criterion, + task_weights, + threshold, + output_transform, + ) + + self.n_classes = n_classes + + def forward(self, Z: Tensor) -> Tensor: + Y = super().forward(Z) + Y = Y.reshape(Y.shape[0], -1, self.n_classes) + + return Y.softmax(-1) + + def train_step(self, Z: Tensor) -> Tensor: + return super().forward(Z).reshape(Z.shape[0], -1, self.n_classes) + + +@PredictorRegistry.register("multiclass-dirichlet") +class MulticlassDirichletFFN(MulticlassClassificationFFN): + _T_default_criterion = MulticlassDirichletLoss + _T_default_metric = CrossEntropyMetric + + def forward(self, Z: Tensor) -> Tensor: + Y = super().forward(Z).reshape(len(Z), -1, self.n_classes) + + Y = Y.softmax(-1) + Y = F.softplus(Y) + 1 + + alpha = Y + Y = Y / Y.sum(-1, keepdim=True) + + return torch.cat((Y, alpha), 1) + + def train_step(self, Z: Tensor) -> Tensor: + Y = super().forward(Z).reshape(len(Z), -1, self.n_classes) + + return F.softplus(Y) + 1 + + +class _Exp(nn.Module): + def forward(self, X: Tensor): + return X.exp() + + +@PredictorRegistry.register("spectral") +class SpectralFFN(_FFNPredictorBase): + n_targets = 1 + _T_default_criterion = SIDLoss + _T_default_metric = SIDMetric + + def __init__(self, *args, spectral_activation: str | None = "softplus", **kwargs): + super().__init__(*args, **kwargs) + + match spectral_activation: + case "exp": + spectral_activation = _Exp() + case "softplus" | None: + spectral_activation = nn.Softplus() + case _: + raise ValueError( + f"Unknown spectral activation: {spectral_activation}. " + "Expected one of 'exp', 'softplus' or None." + ) + + self.ffn.add_module("spectral_activation", spectral_activation) + + def forward(self, Z: Tensor) -> Tensor: + Y = super().forward(Z) + Y = self.ffn.spectral_activation(Y) + return Y / Y.sum(1, keepdim=True) + + train_step = forward diff --git a/chemprop/nn/transforms.py b/chemprop/nn/transforms.py new file mode 100644 index 000000000..b602fa8fe --- /dev/null +++ b/chemprop/nn/transforms.py @@ -0,0 +1,59 @@ +import torch +from numpy.typing import ArrayLike +from sklearn.preprocessing import StandardScaler +from torch import Tensor, nn + +from chemprop.data.collate import BatchMolGraph + + +class _ScaleTransformMixin(nn.Module): + def __init__(self, mean: ArrayLike, scale: ArrayLike, pad: int = 0): + super().__init__() + + mean = torch.cat([torch.zeros(pad), torch.tensor(mean, dtype=torch.float)]) + scale = torch.cat([torch.ones(pad), torch.tensor(scale, dtype=torch.float)]) + + if mean.shape != scale.shape: + raise ValueError( + f"uneven shapes for 'mean' and 'scale'! got: mean={mean.shape}, scale={scale.shape}" + ) + + self.register_buffer("mean", mean.unsqueeze(0)) + self.register_buffer("scale", scale.unsqueeze(0)) + + @classmethod + def from_standard_scaler(cls, scaler: StandardScaler, pad: int = 0): + return cls(scaler.mean_, scaler.scale_, pad=pad) + + +class ScaleTransform(_ScaleTransformMixin): + def forward(self, X: Tensor) -> Tensor: + if self.training: + return X + + return (X - self.mean) / self.scale + + +class UnscaleTransform(_ScaleTransformMixin): + def forward(self, X: Tensor) -> Tensor: + if self.training: + return X + + return X * self.scale + self.mean + + +class GraphTransform(nn.Module): + def __init__(self, V_transform: ScaleTransform, E_transform: ScaleTransform): + super().__init__() + + self.V_transform = V_transform + self.E_transform = E_transform + + def forward(self, bmg: BatchMolGraph) -> BatchMolGraph: + if self.training: + return bmg + + bmg.V = self.V_transform(bmg.V) + bmg.E = self.E_transform(bmg.E) + + return bmg diff --git a/chemprop/nn/utils.py b/chemprop/nn/utils.py new file mode 100644 index 000000000..740422d16 --- /dev/null +++ b/chemprop/nn/utils.py @@ -0,0 +1,45 @@ +from enum import auto +from torch import nn + +from chemprop.utils.utils import EnumMapping + + +class Activation(EnumMapping): + RELU = auto() + LEAKYRELU = auto() + PRELU = auto() + TANH = auto() + SELU = auto() + ELU = auto() + + +def get_activation_function(activation: str | Activation) -> nn.Module: + """Gets an activation function module given the name of the activation. + + See :class:`~chemprop.v2.models.utils.Activation` for available activations. + + Parameters + ---------- + activation : str | Activation + The name of the activation function. + + Returns + ------- + nn.Module + The activation function module. + """ + match Activation.get(activation): + case Activation.RELU: + return nn.ReLU() + case Activation.LEAKYRELU: + return nn.LeakyReLU(0.1) + case Activation.PRELU: + return nn.PReLU() + case Activation.TANH: + return nn.Tanh() + case Activation.SELU: + return nn.SELU() + case Activation.ELU: + return nn.ELU() + case _: + raise RuntimeError("unreachable code reached!") diff --git a/chemprop/nn_utils.py b/chemprop/nn_utils.py deleted file mode 100644 index d7f017e94..000000000 --- a/chemprop/nn_utils.py +++ /dev/null @@ -1,218 +0,0 @@ -import math -from typing import List, Union - -import numpy as np -import torch -import torch.nn as nn -from torch.optim import Optimizer -from torch.optim.lr_scheduler import _LRScheduler - - -def compute_pnorm(model: nn.Module) -> float: - """ - Computes the norm of the parameters of a model. - - :param model: A PyTorch model. - :return: The norm of the parameters of the model. - """ - return math.sqrt(sum([p.norm().item() ** 2 for p in model.parameters()])) - - -def compute_gnorm(model: nn.Module) -> float: - """ - Computes the norm of the gradients of a model. - - :param model: A PyTorch model. - :return: The norm of the gradients of the model. - """ - return math.sqrt(sum([p.grad.norm().item() ** 2 for p in model.parameters() if p.grad is not None])) - - -def param_count(model: nn.Module) -> int: - """ - Determines number of trainable parameters. - - :param model: An PyTorch model. - :return: The number of trainable parameters in the model. - """ - return sum(param.numel() for param in model.parameters() if param.requires_grad) - - -def param_count_all(model: nn.Module) -> int: - """ - Determines number of trainable parameters. - - :param model: An PyTorch model. - :return: The number of trainable parameters in the model. - """ - return sum(param.numel() for param in model.parameters()) - - -def index_select_ND(source: torch.Tensor, index: torch.Tensor) -> torch.Tensor: - """ - Selects the message features from source corresponding to the atom or bond indices in :code:`index`. - - :param source: A tensor of shape :code:`(num_bonds, hidden_size)` containing message features. - :param index: A tensor of shape :code:`(num_atoms/num_bonds, max_num_bonds)` containing the atom or bond - indices to select from :code:`source`. - :return: A tensor of shape :code:`(num_atoms/num_bonds, max_num_bonds, hidden_size)` containing the message - features corresponding to the atoms/bonds specified in index. - """ - index_size = index.size() # (num_atoms/num_bonds, max_num_bonds) - suffix_dim = source.size()[1:] # (hidden_size,) - final_size = index_size + suffix_dim # (num_atoms/num_bonds, max_num_bonds, hidden_size) - - target = source.index_select(dim=0, index=index.view(-1)) # (num_atoms/num_bonds * max_num_bonds, hidden_size) - target = target.view(final_size) # (num_atoms/num_bonds, max_num_bonds, hidden_size) - - return target - - -def get_activation_function(activation: str) -> nn.Module: - """ - Gets an activation function module given the name of the activation. - - Supports: - - * :code:`ReLU` - * :code:`LeakyReLU` - * :code:`PReLU` - * :code:`tanh` - * :code:`SELU` - * :code:`ELU` - - :param activation: The name of the activation function. - :return: The activation function module. - """ - if activation == 'ReLU': - return nn.ReLU() - elif activation == 'LeakyReLU': - return nn.LeakyReLU(0.1) - elif activation == 'PReLU': - return nn.PReLU() - elif activation == 'tanh': - return nn.Tanh() - elif activation == 'SELU': - return nn.SELU() - elif activation == 'ELU': - return nn.ELU() - else: - raise ValueError(f'Activation "{activation}" not supported.') - - -def initialize_weights(model: nn.Module) -> None: - """ - Initializes the weights of a model in place. - - :param model: An PyTorch model. - """ - for param in model.parameters(): - if param.dim() == 1: - nn.init.constant_(param, 0) - else: - nn.init.xavier_normal_(param) - - -class NoamLR(_LRScheduler): - """ - Noam learning rate scheduler with piecewise linear increase and exponential decay. - - The learning rate increases linearly from init_lr to max_lr over the course of - the first warmup_steps (where :code:`warmup_steps = warmup_epochs * steps_per_epoch`). - Then the learning rate decreases exponentially from :code:`max_lr` to :code:`final_lr` over the - course of the remaining :code:`total_steps - warmup_steps` (where :code:`total_steps = - total_epochs * steps_per_epoch`). This is roughly based on the learning rate - schedule from `Attention is All You Need `_, section 5.3. - """ - def __init__(self, - optimizer: Optimizer, - warmup_epochs: List[Union[float, int]], - total_epochs: List[int], - steps_per_epoch: int, - init_lr: List[float], - max_lr: List[float], - final_lr: List[float]): - """ - :param optimizer: A PyTorch optimizer. - :param warmup_epochs: The number of epochs during which to linearly increase the learning rate. - :param total_epochs: The total number of epochs. - :param steps_per_epoch: The number of steps (batches) per epoch. - :param init_lr: The initial learning rate. - :param max_lr: The maximum learning rate (achieved after :code:`warmup_epochs`). - :param final_lr: The final learning rate (achieved after :code:`total_epochs`). - """ - if not ( - len(optimizer.param_groups) == len(warmup_epochs) == len(total_epochs) - == len(init_lr) == len(max_lr) == len(final_lr) - ): - raise ValueError( - "Number of param groups must match the number of epochs and learning rates! " - f"got: len(optimizer.param_groups)= {len(optimizer.param_groups)}, " - f"len(warmup_epochs)= {len(warmup_epochs)}, " - f"len(total_epochs)= {len(total_epochs)}, " - f"len(init_lr)= {len(init_lr)}, " - f"len(max_lr)= {len(max_lr)}, " - f"len(final_lr)= {len(final_lr)}" - ) - - self.num_lrs = len(optimizer.param_groups) - - self.optimizer = optimizer - self.warmup_epochs = np.array(warmup_epochs) - self.total_epochs = np.array(total_epochs) - self.steps_per_epoch = steps_per_epoch - self.init_lr = np.array(init_lr) - self.max_lr = np.array(max_lr) - self.final_lr = np.array(final_lr) - - self.current_step = 0 - self.lr = init_lr - self.warmup_steps = (self.warmup_epochs * self.steps_per_epoch).astype(int) - self.total_steps = self.total_epochs * self.steps_per_epoch - self.linear_increment = (self.max_lr - self.init_lr) / self.warmup_steps - - self.exponential_gamma = (self.final_lr / self.max_lr) ** (1 / (self.total_steps - self.warmup_steps)) - - super(NoamLR, self).__init__(optimizer) - - def get_lr(self) -> List[float]: - """ - Gets a list of the current learning rates. - - :return: A list of the current learning rates. - """ - return list(self.lr) - - def step(self, current_step: int = None): - """ - Updates the learning rate by taking a step. - - :param current_step: Optionally specify what step to set the learning rate to. - If None, :code:`current_step = self.current_step + 1`. - """ - if current_step is not None: - self.current_step = current_step - else: - self.current_step += 1 - - for i in range(self.num_lrs): - if self.current_step <= self.warmup_steps[i]: - self.lr[i] = self.init_lr[i] + self.current_step * self.linear_increment[i] - elif self.current_step <= self.total_steps[i]: - self.lr[i] = self.max_lr[i] * (self.exponential_gamma[i] ** (self.current_step - self.warmup_steps[i])) - else: # theoretically this case should never be reached since training should stop at total_steps - self.lr[i] = self.final_lr[i] - - self.optimizer.param_groups[i]['lr'] = self.lr[i] - - -def activate_dropout(module: nn.Module, dropout_prob: float): - """ - Set p of dropout layers and set to train mode during inference for uncertainty estimation. - - :param model: A :class:`~chemprop.models.model.MoleculeModel`. - :param dropout_prob: A float on (0,1) indicating the dropout probability. - """ - if isinstance(module, nn.Dropout): - module.p = dropout_prob - module.train() diff --git a/chemprop/py.typed b/chemprop/py.typed deleted file mode 100644 index 1242d4327..000000000 --- a/chemprop/py.typed +++ /dev/null @@ -1 +0,0 @@ -# Marker file for PEP 561. diff --git a/chemprop/rdkit.py b/chemprop/rdkit.py deleted file mode 100644 index bf0451e82..000000000 --- a/chemprop/rdkit.py +++ /dev/null @@ -1,18 +0,0 @@ -from rdkit import Chem - -def make_mol(s: str, keep_h: bool, add_h: bool): - """ - Builds an RDKit molecule from a SMILES string. - - :param s: SMILES string. - :param keep_h: Boolean whether to keep hydrogens in the input smiles. This does not add hydrogens, it only keeps them if they are specified. - :return: RDKit molecule. - """ - if keep_h: - mol = Chem.MolFromSmiles(s, sanitize = False) - Chem.SanitizeMol(mol, sanitizeOps = Chem.SanitizeFlags.SANITIZE_ALL^Chem.SanitizeFlags.SANITIZE_ADJUSTHS) - else: - mol = Chem.MolFromSmiles(s) - if add_h: - mol = Chem.AddHs(mol) - return mol diff --git a/chemprop/schedulers.py b/chemprop/schedulers.py new file mode 100644 index 000000000..08e20ef46 --- /dev/null +++ b/chemprop/schedulers.py @@ -0,0 +1,127 @@ +import numpy as np +from numpy.typing import ArrayLike +from torch.optim import Optimizer +from torch.optim.lr_scheduler import LRScheduler + + +class NoamLR(LRScheduler): + r"""A Noam learning rate scheduler schedules the learning rate with a piecewise linear followed + by an exponential decay. + + The learning rate increases linearly from ``init_lr`` to ``max_lr`` over the course of + the first warmup_steps then decreases exponentially to ``final_lr`` over the course of the + remaining ``total_steps - warmup_steps`` (where ``total_steps = total_epochs * steps_per_epoch``). This is roughly based on the learning rate schedule from [1]_, section 5.3. + + Formally, the learning rate schedule is defined as: + + .. math:: + \mathtt{lr}(i) &= + \begin{cases} + \mathtt{init\_lr} + \delta \cdot i &\text{if } i < \mathtt{warmup\_steps} \\ + \mathtt{max\_lr} \cdot \left( \frac{\mathtt{final\_lr}}{\mathtt{max\_lr}} \right)^{\gamma(i)} &\text{otherwise} \\ + \end{cases} + \\ + \delta &\mathrel{:=} + \frac{\mathtt{max\_lr} - \mathtt{init\_lr}}{\mathtt{warmup\_steps}} \\ + \gamma(i) &\mathrel{:=} + \frac{i - \mathtt{warmup\_steps}}{\mathtt{total\_steps} - \mathtt{warmup\_steps}} + + + Parameters + ----------- + optimizer : Optimizer + A PyTorch optimizer. + warmup_epochs : ArrayLike + The number of epochs during which to linearly increase the learning rate. + total_epochs : int + The total number of epochs. + steps_per_epoch : int + The number of steps (batches) per epoch. + init_lr : ArrayLike + The initial learning rate. + max_lr : ArrayLike + The maximum learning rate (achieved after ``warmup_epochs``). + final_lr : ArrayLike + The final learning rate (achieved after ``total_epochs``). + + References + ---------- + .. [1] Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A.N., Kaiser, Ł. and Polosukhin, I. "Attention is all you need." Advances in neural information processing systems, 2017, 30. https://arxiv.org/abs/1706.03762 + """ + + def __init__( + self, + optimizer: Optimizer, + warmup_epochs: ArrayLike, + total_epochs: int, + steps_per_epoch: int, + init_lrs: ArrayLike, + max_lrs: ArrayLike, + final_lrs: ArrayLike, + ): + self.num_lrs = len(optimizer.param_groups) + warmup_epochs = np.atleast_1d(warmup_epochs) + init_lrs = np.atleast_1d(init_lrs) + max_lrs = np.atleast_1d(max_lrs) + self.final_lrs = np.atleast_1d(final_lrs) + + if not ( + self.num_lrs + == len(warmup_epochs) + == len(init_lrs) + == len(max_lrs) + == len(self.final_lrs) + ): + raise ValueError( + "Number of param groups must match number of: " + "'warmup_epochs', 'init_lr', 'max_lr', 'final_lr'! " + f"got: {len(self.optimizer.param_groups)} param groups, " + f"{len(init_lrs)} init_lr, " + f"{len(max_lrs)} max_lr, " + f"{len(self.final_lrs)} final_lr" + ) + + self.current_step = 0 + self.lrs = init_lrs + + warmup_steps = (warmup_epochs * steps_per_epoch).astype(int) + total_steps = total_epochs * steps_per_epoch + cooldown_steps = total_steps - warmup_steps + + deltas = (max_lrs - init_lrs) / warmup_steps + gammas = (self.final_lrs / max_lrs) ** (1 / cooldown_steps) + + self.scheds = [] + for i in range(self.num_lrs): + warmup = init_lrs[i] + np.arange(warmup_steps[i]) * deltas[i] + cooldown = max_lrs[i] * (gammas[i] ** np.arange(cooldown_steps[i])) + self.scheds.append(np.concatenate((warmup, cooldown))) + self.scheds = np.array(self.scheds) + + super(NoamLR, self).__init__(optimizer) + + def __len__(self) -> int: + """the number of steps in the learning rate schedule""" + return self.scheds.shape[1] + + def get_lr(self) -> np.ndarray: + """Get a list of the current learning rates""" + return self.lrs + + def step(self, step: int | None = None): + """Step the learning rate + + Parameters + ---------- + step : int | None, default=None + What step to set the learning rate to. If ``None``, use ``self.current_step + 1``. + """ + self.current_step = step if step is not None else self.current_step + 1 + + for i in range(self.num_lrs): + if self.current_step < len(self): + self.lrs[i] = self.scheds[i][self.current_step] + else: + self.lrs[i] = self.final_lrs[i] + + self.optimizer.param_groups[i]["lr"] = self.lrs[i] diff --git a/chemprop/sklearn_predict.py b/chemprop/sklearn_predict.py deleted file mode 100644 index 38d4b3bb3..000000000 --- a/chemprop/sklearn_predict.py +++ /dev/null @@ -1,82 +0,0 @@ -import csv -import pickle - -import numpy as np -from tqdm import tqdm - -from chemprop.args import SklearnPredictArgs, SklearnTrainArgs -from chemprop.data import get_data -from chemprop.features import get_features_generator -from chemprop.sklearn_train import predict -from chemprop.utils import makedirs, timeit - - -@timeit() -def predict_sklearn(args: SklearnPredictArgs) -> None: - """ - Loads data and a trained scikit-learn model and uses the model to make predictions on the data. - - :param args: A :class:`~chemprop.args.SklearnPredictArgs` object containing arguments for - loading data, loading a trained scikit-learn model, and making predictions with the model. - """ - print('Loading data') - data = get_data(path=args.test_path, - smiles_columns=args.smiles_columns, - target_columns=[], - ignore_columns=[], - store_row=True) - - print('Loading training arguments') - with open(args.checkpoint_paths[0], 'rb') as f: - model = pickle.load(f) - train_args: SklearnTrainArgs = SklearnTrainArgs().from_dict(model.train_args, skip_unsettable=True) - - print('Computing morgan fingerprints') - morgan_fingerprint = get_features_generator('morgan') - for datapoint in tqdm(data, total=len(data)): - for s in datapoint.smiles: - datapoint.extend_features(morgan_fingerprint(mol=s, radius=train_args.radius, num_bits=train_args.num_bits)) - - print(f'Predicting with an ensemble of {len(args.checkpoint_paths)} models') - sum_preds = np.zeros((len(data), train_args.num_tasks)) - - for checkpoint_path in tqdm(args.checkpoint_paths, total=len(args.checkpoint_paths)): - with open(checkpoint_path, 'rb') as f: - model = pickle.load(f) - - model_preds = predict( - model=model, - model_type=train_args.model_type, - dataset_type=train_args.dataset_type, - features=data.features() - ) - sum_preds += np.array(model_preds) - - # Ensemble predictions - avg_preds = sum_preds / len(args.checkpoint_paths) - avg_preds = avg_preds.tolist() - - print(f'Saving predictions to {args.preds_path}') - # assert len(data) == len(avg_preds) #TODO: address with unit test later - makedirs(args.preds_path, isfile=True) - - # Copy predictions over to data - for datapoint, preds in zip(data, avg_preds): - for pred_name, pred in zip(train_args.task_names, preds): - datapoint.row[pred_name] = pred - - # Save - with open(args.preds_path, 'w') as f: - writer = csv.DictWriter(f, fieldnames=data[0].row.keys()) - writer.writeheader() - - for datapoint in data: - writer.writerow(datapoint.row) - - -def sklearn_predict() -> None: - """Parses scikit-learn predicting arguments and runs prediction using a trained scikit-learn model. - - This is the entry point for the command line command :code:`sklearn_predict`. - """ - predict_sklearn(args=SklearnPredictArgs().parse_args()) diff --git a/chemprop/sklearn_train.py b/chemprop/sklearn_train.py deleted file mode 100644 index 02330fe5d..000000000 --- a/chemprop/sklearn_train.py +++ /dev/null @@ -1,363 +0,0 @@ -from logging import Logger -import os -import pickle -from typing import Dict, List, Union -from copy import deepcopy - -import numpy as np -from sklearn.ensemble import RandomForestClassifier, RandomForestRegressor -from sklearn.svm import SVC, SVR -from sklearn.linear_model import SGDClassifier, SGDRegressor -from tqdm import trange, tqdm - -from chemprop.args import SklearnTrainArgs -from chemprop.data import MoleculeDataset, split_data, get_task_names, get_data -from chemprop.features import get_features_generator -from chemprop.train import cross_validate, evaluate_predictions -from chemprop.utils import save_smiles_splits - - -def predict(model: Union[RandomForestRegressor, RandomForestClassifier, SVR, SVC], - model_type: str, - dataset_type: str, - features: List[np.ndarray]) -> List[List[float]]: - """ - Predicts using a scikit-learn model. - - :param model: The trained scikit-learn model to make predictions with. - :param model_type: The type of model. - :param dataset_type: The type of dataset. - :param features: The data features used as input for the model. - :return: A list of lists of floats containing the predicted values. - """ - if dataset_type == 'regression': - preds = model.predict(features) - - if len(preds.shape) == 1: - preds = [[pred] for pred in preds] - elif dataset_type == 'classification': - if model_type == 'random_forest': - preds = model.predict_proba(features) - - if type(preds) == list: - # Multiple tasks - num_tasks, num_preds = len(preds), len(preds[0]) - preds = [[preds[i][j, 1] for i in range(num_tasks)] for j in range(num_preds)] - else: - # One task - preds = [[preds[i, 1]] for i in range(len(preds))] - elif model_type == 'svm': - preds = model.decision_function(features) - preds = [[pred] for pred in preds] - else: - raise ValueError(f'Model type "{model_type}" not supported') - else: - raise ValueError(f'Dataset type "{dataset_type}" not supported') - - return preds - -def impute_sklearn(model: Union[RandomForestRegressor, RandomForestClassifier, SVR, SVC], - train_data: MoleculeDataset, - args: SklearnTrainArgs, - logger: Logger = None, - threshold: float = 0.5) -> List[float]: - """ - Trains a single-task scikit-learn model, meaning a separate model is trained for each task. - - This is necessary if some tasks have None (unknown) values. - - :param model: The scikit-learn model to train. - :param train_data: The training data. - :param args: A :class:`~chemprop.args.SklearnTrainArgs` object containing arguments for - training the scikit-learn model. - :param logger: A logger to record output. - :param theshold: Threshold for classification tasks. - :return: A list of list of target values. - """ - num_tasks = train_data.num_tasks() - new_targets=deepcopy(train_data.targets()) - - if logger is not None: - debug = logger.debug - else: - debug = print - - debug('Imputation') - - for task_num in trange(num_tasks): - impute_train_features = [features for features, targets in zip(train_data.features(), train_data.targets()) if targets[task_num] is None] - if len(impute_train_features) > 0: - train_features, train_targets = zip(*[(features, targets[task_num]) - for features, targets in zip(train_data.features(), train_data.targets()) - if targets[task_num] is not None]) - if args.impute_mode == 'single_task': - model.fit(train_features, train_targets) - impute_train_preds = predict( - model=model, - model_type=args.model_type, - dataset_type=args.dataset_type, - features=impute_train_features - ) - impute_train_preds = [pred[0] for pred in impute_train_preds] - elif args.impute_mode == 'median' and args.dataset_type == 'regression': - impute_train_preds = [np.median(train_targets)] * len(new_targets) - elif args.impute_mode == 'mean' and args.dataset_type == 'regression': - impute_train_preds = [np.mean(train_targets)] * len(new_targets) - elif args.impute_mode == 'frequent' and args.dataset_type == 'classification': - impute_train_preds = [np.argmax(np.bincount(train_targets))] * len(new_targets) - elif args.impute_mode == 'linear' and args.dataset_type == 'regression': - reg = SGDRegressor(alpha=0.01).fit(train_features, train_targets) - impute_train_preds = reg.predict(impute_train_features) - elif args.impute_mode == 'linear' and args.dataset_type == 'classification': - cls = SGDClassifier().fit(train_features, train_targets) - impute_train_preds = cls.predict(impute_train_features) - else: - raise ValueError("Invalid combination of imputation mode and dataset type.") - - #Replace targets - ctr = 0 - for i in range(len(new_targets)): - if new_targets[i][task_num] is None: - value = impute_train_preds[ctr] - if args.dataset_type == 'classification': - value = int(value > threshold) - new_targets[i][task_num] = value - ctr += 1 - - return new_targets - - -def single_task_sklearn(model: Union[RandomForestRegressor, RandomForestClassifier, SVR, SVC], - train_data: MoleculeDataset, - test_data: MoleculeDataset, - metrics: List[str], - args: SklearnTrainArgs, - logger: Logger = None) -> List[float]: - """ - Trains a single-task scikit-learn model, meaning a separate model is trained for each task. - - This is necessary if some tasks have None (unknown) values. - - :param model: The scikit-learn model to train. - :param train_data: The training data. - :param test_data: The test data. - :param metrics: A list of names of metric functions. - :param args: A :class:`~chemprop.args.SklearnTrainArgs` object containing arguments for - training the scikit-learn model. - :param logger: A logger to record output. - :return: A dictionary mapping each metric in :code:`metrics` to a list of values for each task. - """ - scores = {} - num_tasks = train_data.num_tasks() - for task_num in trange(num_tasks): - # Only get features and targets for molecules where target is not None - train_features, train_targets = zip(*[(features, targets[task_num]) - for features, targets in zip(train_data.features(), train_data.targets()) - if targets[task_num] is not None]) - test_features, test_targets = zip(*[(features, targets[task_num]) - for features, targets in zip(test_data.features(), test_data.targets()) - if targets[task_num] is not None]) - - model.fit(train_features, train_targets) - - test_preds = predict( - model=model, - model_type=args.model_type, - dataset_type=args.dataset_type, - features=test_features - ) - test_targets = [[target] for target in test_targets] - - score = evaluate_predictions( - preds=test_preds, - targets=test_targets, - num_tasks=1, - metrics=metrics, - dataset_type=args.dataset_type, - logger=logger - ) - for metric in metrics: - if metric not in scores: - scores[metric] = [] - scores[metric].append(score[metric][0]) - - return scores - - -def multi_task_sklearn(model: Union[RandomForestRegressor, RandomForestClassifier, SVR, SVC], - train_data: MoleculeDataset, - test_data: MoleculeDataset, - metrics: List[str], - args: SklearnTrainArgs, - logger: Logger = None) -> Dict[str, List[float]]: - """ - Trains a multi-task scikit-learn model, meaning one model is trained simultaneously on all tasks. - - This is only possible if none of the tasks have None (unknown) values. - - :param model: The scikit-learn model to train. - :param train_data: The training data. - :param test_data: The test data. - :param metrics: A list of names of metric functions. - :param args: A :class:`~chemprop.args.SklearnTrainArgs` object containing arguments for - training the scikit-learn model. - :param logger: A logger to record output. - :return: A dictionary mapping each metric in :code:`metrics` to a list of values for each task. - """ - num_tasks = train_data.num_tasks() - - train_targets = train_data.targets() - - if args.impute_mode: - train_targets = impute_sklearn(model=model, - train_data=train_data, - args=args, - logger=logger) - elif any(None in sublist for sublist in train_targets): - raise ValueError("Missing target values not tolerated for multi-task sklearn models." - "Use either --single_task to train multiple single-task models or impute" - " targets via --impute_mode .") - - if train_data.num_tasks() == 1: - train_targets = [targets[0] for targets in train_targets] - - # Train - model.fit(train_data.features(), train_targets) - - # Save model - with open(os.path.join(args.save_dir, 'model.pkl'), 'wb') as f: - pickle.dump(model, f) - - test_preds = predict( - model=model, - model_type=args.model_type, - dataset_type=args.dataset_type, - features=test_data.features() - ) - - scores = evaluate_predictions( - preds=test_preds, - targets=test_data.targets(), - num_tasks=num_tasks, - metrics=metrics, - dataset_type=args.dataset_type, - logger=logger - ) - - return scores - - -def run_sklearn(args: SklearnTrainArgs, - data: MoleculeDataset, - logger: Logger = None) -> Dict[str, List[float]]: - """ - Loads data, trains a scikit-learn model, and returns test scores for the model checkpoint with the highest validation score. - - :param args: A :class:`~chemprop.args.SklearnTrainArgs` object containing arguments for - loading data and training the scikit-learn model. - :param data: A :class:`~chemprop.data.MoleculeDataset` containing the data. - :param logger: A logger to record output. - :return: A dictionary mapping each metric in :code:`metrics` to a list of values for each task. - """ - if logger is not None: - debug, info = logger.debug, logger.info - else: - debug = info = print - - debug('Loading data') - data = get_data(path=args.data_path, - smiles_columns=args.smiles_columns, - target_columns=args.target_columns) - args.task_names = get_task_names(path=args.data_path, - smiles_columns=args.smiles_columns, - target_columns=args.target_columns, - ignore_columns=args.ignore_columns) - - if args.model_type == 'svm' and data.num_tasks() != 1: - raise ValueError(f'SVM can only handle single-task data but found {data.num_tasks()} tasks') - - debug(f'Splitting data with seed {args.seed}') - # Need to have val set so that train and test sets are the same as when doing MPN - train_data, _, test_data = split_data( - data=data, - split_type=args.split_type, - seed=args.seed, - sizes=args.split_sizes, - num_folds=args.num_folds, - args=args - ) - - if args.save_smiles_splits: - save_smiles_splits( - data_path=args.data_path, - save_dir=args.save_dir, - task_names=args.task_names, - features_path=args.features_path, - train_data=train_data, - test_data=test_data, - smiles_columns=args.smiles_columns, - ) - - debug(f'Total size = {len(data):,} | train size = {len(train_data):,} | test size = {len(test_data):,}') - - debug('Computing morgan fingerprints') - morgan_fingerprint = get_features_generator('morgan') - for dataset in [train_data, test_data]: - for datapoint in tqdm(dataset, total=len(dataset)): - for s in datapoint.smiles: - datapoint.extend_features(morgan_fingerprint(mol=s, radius=args.radius, num_bits=args.num_bits)) - - debug('Building model') - if args.dataset_type == 'regression': - if args.model_type == 'random_forest': - model = RandomForestRegressor(n_estimators=args.num_trees, n_jobs=-1, random_state=args.seed) - elif args.model_type == 'svm': - model = SVR() - else: - raise ValueError(f'Model type "{args.model_type}" not supported') - elif args.dataset_type == 'classification': - if args.model_type == 'random_forest': - model = RandomForestClassifier(n_estimators=args.num_trees, n_jobs=-1, class_weight=args.class_weight, random_state=args.seed) - elif args.model_type == 'svm': - model = SVC() - else: - raise ValueError(f'Model type "{args.model_type}" not supported') - else: - raise ValueError(f'Dataset type "{args.dataset_type}" not supported') - - debug(model) - - model.train_args = args.as_dict() - - debug('Training') - if args.single_task: - scores = single_task_sklearn( - model=model, - train_data=train_data, - test_data=test_data, - metrics=args.metrics, - args=args, - logger=logger - ) - else: - scores = multi_task_sklearn( - model=model, - train_data=train_data, - test_data=test_data, - metrics=args.metrics, - args=args, - logger=logger - ) - - for metric in args.metrics: - info(f'Test {metric} = {np.nanmean(scores[metric])}') - - return scores - - -def sklearn_train() -> None: - """Parses scikit-learn training arguments and trains a scikit-learn model. - - This is the entry point for the command line command :code:`sklearn_train`. - """ - cross_validate(args=SklearnTrainArgs().parse_args(), train_func=run_sklearn) diff --git a/chemprop/spectra_utils.py b/chemprop/spectra_utils.py deleted file mode 100644 index ab92a9052..000000000 --- a/chemprop/spectra_utils.py +++ /dev/null @@ -1,110 +0,0 @@ -from typing import List -import csv - -from tqdm import trange -import numpy as np - - -def normalize_spectra(spectra: List[List[float]], phase_features: List[List[float]] = None, phase_mask: List[List[float]] = None, batch_size: int = 50, excluded_sub_value: float = None, threshold: float = None) -> List[List[float]]: - """ - Function takes in spectra and normalize them to sum values to 1. If provided with phase mask information, will remove excluded spectrum regions. - - :param spectra: Input spectra with shape (num_spectra, spectrum_length). - :param phase_features: The collection phase of spectrum with shape (num_spectra, num_phases). - :param phase_mask: A mask array showing where in each phase feature to include in predictions and training with shape (num_phases, spectrum_length) - :param batch_size: The size of batches to carry out the normalization operation in. - :param exlcuded_sub_value: Excluded values are replaced with this object, usually None or nan. - :param threshold: Spectra values below threshold are replaced with threshold to remove negative or zero values. - :return: List form array of spectra with shape (num_spectra, spectrum length) with exlcuded values converted to nan. - """ - normalized_spectra = [] - phase_exclusion = phase_mask is not None and phase_features is not None - if phase_exclusion: - phase_mask = np.array(phase_mask) - - num_iters, iter_step = len(spectra), batch_size - - for i in trange(0, num_iters, iter_step): - # prepare batch - batch_spectra = spectra[i:i + iter_step] - batch_mask = np.array([[x is not None for x in b] for b in batch_spectra]) - batch_spectra = np.array([[0 if x is None else x for x in b] for b in batch_spectra]) - if phase_exclusion: - batch_phases = phase_features[i:i + iter_step] - batch_phases = np.array(batch_phases) - - # exclude mask and apply threshold - if threshold is not None: - batch_spectra[batch_spectra < threshold] = threshold - if phase_exclusion: - batch_phase_mask = np.matmul(batch_phases, phase_mask).astype('bool') - batch_mask = ~(~batch_mask + ~batch_phase_mask) # mask shows True only if both components true - batch_spectra[~batch_mask] = 0 - - # normalize to sum to 1 - sum_spectra = np.sum(batch_spectra, axis=1, keepdims=True) - batch_spectra = batch_spectra / sum_spectra - - # Collect vectors and revert excluded values to None - batch_spectra = batch_spectra.astype('object') - batch_spectra[~batch_mask] = excluded_sub_value - batch_spectra = batch_spectra.tolist() - normalized_spectra.extend(batch_spectra) - - return normalized_spectra - - -def roundrobin_sid(spectra: np.ndarray, threshold: float = None) -> List[float]: - """ - Takes a block of input spectra and makes a pairwise comparison between each of the input spectra for a given molecule, - returning a list of the spectral informations divergences. To be used evaluating the variation between an ensemble of model spectrum predictions. - - :spectra: A 3D array containing each of the spectra to be compared. Shape of (num_spectra, spectrum_length, ensemble_size) - :threshold: SID calculation requires positive values in each position, this value is used to replace any zero or negative values. - :return: A list of average pairwise SID len (num_spectra) - """ - ensemble_size=spectra.shape[2] - spectrum_size=spectra.shape[1] - - ensemble_sids=[] - - for i in range(len(spectra)): - spectrum = spectra[i] - nan_mask=np.isnan(spectrum[:,0]) - if threshold is not None: - spectrum[spectrum < threshold] = threshold - spectrum[nan_mask,:]=1 - ensemble_head = np.zeros([spectrum_size,0]) - ensemble_tail = np.zeros([spectrum_size,0]) - for j in range(ensemble_size-1): - ensemble_tail = np.concatenate((ensemble_tail,spectrum[:,j+1:]),axis=1) - ensemble_head = np.concatenate((ensemble_head,spectrum[:,:-j-1]),axis=1) - loss = ensemble_head * np.log(ensemble_head / ensemble_tail) + ensemble_tail * np.log(ensemble_tail / ensemble_head) - loss[nan_mask,:]=0 - loss = np.sum(loss,axis=0) - loss = np.mean(loss) - ensemble_sids.append(loss) - return ensemble_sids - - -def load_phase_mask(path: str) -> List[List[int]]: - """ - Loads in a matrix used to mark sections of spectra as untrainable due to interference caused by particular phases. - Ignore those spectra regions in training and prediciton. - - :param path: Path to a csv file containing the phase mask in shape (num_phases, spectrum_length) with 1s indicating inclusion and 0s indicating exclusion. - :return: A list form array of the phase mask. - """ - if path is None: - return None - - data = [] - with open(path,'r') as rf: - r=csv.reader(rf) - next(r) - for line in r: - if any([x not in ['0','1'] for x in line[1:]]): - raise ValueError('Phase mask must contain only 0s and 1s, with 0s indicating exclusion regions.') - data_line = [int(x) for x in line[1:]] - data.append(data_line) - return data diff --git a/chemprop/train/__init__.py b/chemprop/train/__init__.py deleted file mode 100644 index ceb9d1003..000000000 --- a/chemprop/train/__init__.py +++ /dev/null @@ -1,47 +0,0 @@ -from .metrics import get_metric_func, prc_auc, bce, rmse, bounded_mse, bounded_mae, \ - bounded_rmse, accuracy, f1_metric, mcc_metric, sid_metric, wasserstein_metric -from .loss_functions import get_loss_func, bounded_mse_loss, \ - mcc_class_loss, mcc_multiclass_loss, sid_loss, wasserstein_loss -from .cross_validate import chemprop_train, cross_validate, TRAIN_LOGGER_NAME -from .evaluate import evaluate, evaluate_predictions -from .make_predictions import chemprop_predict, make_predictions, load_model, set_features, load_data, predict_and_save -from .molecule_fingerprint import chemprop_fingerprint, model_fingerprint -from .predict import predict -from .run_training import run_training -from .train import train - -__all__ = [ - 'chemprop_train', - 'cross_validate', - 'TRAIN_LOGGER_NAME', - 'evaluate', - 'evaluate_predictions', - 'chemprop_predict', - 'chemprop_fingerprint', - 'make_predictions', - 'load_model', - 'set_features', - 'load_data', - 'predict_and_save', - 'predict', - 'run_training', - 'train', - 'get_metric_func', - 'prc_auc', - 'bce', - 'rmse', - 'bounded_mse', - 'bounded_mae', - 'bounded_rmse', - 'accuracy', - 'f1_metric', - 'mcc_metric', - 'sid_metric', - 'wasserstein_metric', - 'get_loss_func', - 'bounded_mse_loss', - 'mcc_class_loss', - 'mcc_multiclass_loss', - 'sid_loss', - 'wasserstein_loss' -] diff --git a/chemprop/train/cross_validate.py b/chemprop/train/cross_validate.py deleted file mode 100644 index b21c27396..000000000 --- a/chemprop/train/cross_validate.py +++ /dev/null @@ -1,193 +0,0 @@ -from collections import defaultdict -import csv -import json -from logging import Logger -import os -import sys -from typing import Callable, Dict, List, Tuple -import subprocess -import numpy as np -import pandas as pd - -from .run_training import run_training -from chemprop.args import TrainArgs -from chemprop.constants import TEST_SCORES_FILE_NAME, TRAIN_LOGGER_NAME -from chemprop.data import get_data, get_task_names, MoleculeDataset, validate_dataset_type -from chemprop.utils import create_logger, makedirs, timeit -from chemprop.features import set_extra_atom_fdim, set_extra_bond_fdim, set_explicit_h, set_adding_hs, set_reaction, reset_featurization_parameters - - -@timeit(logger_name=TRAIN_LOGGER_NAME) -def cross_validate(args: TrainArgs, - train_func: Callable[[TrainArgs, MoleculeDataset, Logger], Dict[str, List[float]]] - ) -> Tuple[float, float]: - """ - Runs k-fold cross-validation. - - For each of k splits (folds) of the data, trains and tests a model on that split - and aggregates the performance across folds. - - :param args: A :class:`~chemprop.args.TrainArgs` object containing arguments for - loading data and training the Chemprop model. - :param train_func: Function which runs training. - :return: A tuple containing the mean and standard deviation performance across folds. - """ - logger = create_logger(name=TRAIN_LOGGER_NAME, save_dir=args.save_dir, quiet=args.quiet) - if logger is not None: - debug, info = logger.debug, logger.info - else: - debug = info = print - - # Initialize relevant variables - init_seed = args.seed - save_dir = args.save_dir - args.task_names = get_task_names(path=args.data_path, smiles_columns=args.smiles_columns, - target_columns=args.target_columns, ignore_columns=args.ignore_columns) - - # Print command line - debug('Command line') - debug(f'python {" ".join(sys.argv)}') - - # Print args - debug('Args') - debug(args) - - # Save args - makedirs(args.save_dir) - try: - args.save(os.path.join(args.save_dir, 'args.json')) - except subprocess.CalledProcessError: - debug('Could not write the reproducibility section of the arguments to file, thus omitting this section.') - args.save(os.path.join(args.save_dir, 'args.json'), with_reproducibility=False) - - #set explicit H option and reaction option - reset_featurization_parameters(logger=logger) - set_explicit_h(args.explicit_h) - set_adding_hs(args.adding_h) - if args.reaction: - set_reaction(args.reaction, args.reaction_mode) - elif args.reaction_solvent: - set_reaction(True, args.reaction_mode) - - # Get data - debug('Loading data') - data = get_data( - path=args.data_path, - args=args, - logger=logger, - skip_none_targets=True, - data_weights_path=args.data_weights_path - ) - validate_dataset_type(data, dataset_type=args.dataset_type) - args.features_size = data.features_size() - - if args.atom_descriptors == 'descriptor': - args.atom_descriptors_size = data.atom_descriptors_size() - args.ffn_hidden_size += args.atom_descriptors_size - elif args.atom_descriptors == 'feature': - args.atom_features_size = data.atom_features_size() - set_extra_atom_fdim(args.atom_features_size) - if args.bond_features_path is not None: - args.bond_features_size = data.bond_features_size() - set_extra_bond_fdim(args.bond_features_size) - - debug(f'Number of tasks = {args.num_tasks}') - - if args.target_weights is not None and len(args.target_weights) != args.num_tasks: - raise ValueError('The number of provided target weights must match the number and order of the prediction tasks') - - # Run training on different random seeds for each fold - all_scores = defaultdict(list) - for fold_num in range(args.num_folds): - info(f'Fold {fold_num}') - args.seed = init_seed + fold_num - args.save_dir = os.path.join(save_dir, f'fold_{fold_num}') - makedirs(args.save_dir) - data.reset_features_and_targets() - - # If resuming experiment, load results from trained models - test_scores_path = os.path.join(args.save_dir, 'test_scores.json') - if args.resume_experiment and os.path.exists(test_scores_path): - print('Loading scores') - with open(test_scores_path) as f: - model_scores = json.load(f) - # Otherwise, train the models - else: - model_scores = train_func(args, data, logger) - - for metric, scores in model_scores.items(): - all_scores[metric].append(scores) - all_scores = dict(all_scores) - - # Convert scores to numpy arrays - for metric, scores in all_scores.items(): - all_scores[metric] = np.array(scores) - - # Report results - info(f'{args.num_folds}-fold cross validation') - - # Report scores for each fold - for fold_num in range(args.num_folds): - for metric, scores in all_scores.items(): - info(f'\tSeed {init_seed + fold_num} ==> test {metric} = {np.nanmean(scores[fold_num]):.6f}') - - if args.show_individual_scores: - for task_name, score in zip(args.task_names, scores[fold_num]): - info(f'\t\tSeed {init_seed + fold_num} ==> test {task_name} {metric} = {score:.6f}') - - # Report scores across folds - for metric, scores in all_scores.items(): - avg_scores = np.nanmean(scores, axis=1) # average score for each model across tasks - mean_score, std_score = np.nanmean(avg_scores), np.nanstd(avg_scores) - info(f'Overall test {metric} = {mean_score:.6f} +/- {std_score:.6f}') - - if args.show_individual_scores: - for task_num, task_name in enumerate(args.task_names): - info(f'\tOverall test {task_name} {metric} = ' - f'{np.nanmean(scores[:, task_num]):.6f} +/- {np.nanstd(scores[:, task_num]):.6f}') - - # Save scores - with open(os.path.join(save_dir, TEST_SCORES_FILE_NAME), 'w') as f: - writer = csv.writer(f) - - header = ['Task'] - for metric in args.metrics: - header += [f'Mean {metric}', f'Standard deviation {metric}'] + \ - [f'Fold {i} {metric}' for i in range(args.num_folds)] - writer.writerow(header) - - if args.dataset_type == 'spectra': # spectra data type has only one score to report - row = ['spectra'] - for metric, scores in all_scores.items(): - task_scores = scores[:,0] - mean, std = np.nanmean(task_scores), np.nanstd(task_scores) - row += [mean, std] + task_scores.tolist() - writer.writerow(row) - else: # all other data types, separate scores by task - for task_num, task_name in enumerate(args.task_names): - row = [task_name] - for metric, scores in all_scores.items(): - task_scores = scores[:, task_num] - mean, std = np.nanmean(task_scores), np.nanstd(task_scores) - row += [mean, std] + task_scores.tolist() - writer.writerow(row) - - # Determine mean and std score of main metric - avg_scores = np.nanmean(all_scores[args.metric], axis=1) - mean_score, std_score = np.nanmean(avg_scores), np.nanstd(avg_scores) - - # Optionally merge and save test preds - if args.save_preds: - all_preds = pd.concat([pd.read_csv(os.path.join(save_dir, f'fold_{fold_num}', 'test_preds.csv')) - for fold_num in range(args.num_folds)]) - all_preds.to_csv(os.path.join(save_dir, 'test_preds.csv'), index=False) - - return mean_score, std_score - - -def chemprop_train() -> None: - """Parses Chemprop training arguments and trains (cross-validates) a Chemprop model. - - This is the entry point for the command line command :code:`chemprop_train`. - """ - cross_validate(args=TrainArgs().parse_args(), train_func=run_training) diff --git a/chemprop/train/evaluate.py b/chemprop/train/evaluate.py deleted file mode 100644 index c7feca1f5..000000000 --- a/chemprop/train/evaluate.py +++ /dev/null @@ -1,134 +0,0 @@ -from collections import defaultdict -import logging -from typing import Dict, List - -from .predict import predict -from chemprop.data import MoleculeDataLoader, StandardScaler -from chemprop.models import MoleculeModel -from chemprop.train import get_metric_func - - -def evaluate_predictions(preds: List[List[float]], - targets: List[List[float]], - num_tasks: int, - metrics: List[str], - dataset_type: str, - gt_targets: List[List[bool]] = None, - lt_targets: List[List[bool]] = None, - logger: logging.Logger = None) -> Dict[str, List[float]]: - """ - Evaluates predictions using a metric function after filtering out invalid targets. - - :param preds: A list of lists of shape :code:`(data_size, num_tasks)` with model predictions. - :param targets: A list of lists of shape :code:`(data_size, num_tasks)` with targets. - :param num_tasks: Number of tasks. - :param metrics: A list of names of metric functions. - :param dataset_type: Dataset type. - :param gt_targets: A list of lists of booleans indicating whether the target is an inequality rather than a single value. - :param lt_targets: A list of lists of booleans indicating whether the target is an inequality rather than a single value. - :param logger: A logger to record output. - :return: A dictionary mapping each metric in :code:`metrics` to a list of values for each task. - """ - info = logger.info if logger is not None else print - - metric_to_func = {metric: get_metric_func(metric) for metric in metrics} - - if len(preds) == 0: - return {metric: [float('nan')] * num_tasks for metric in metrics} - - # Filter out empty targets for most data types, excluding dataset_type spectra - # valid_preds and valid_targets have shape (num_tasks, data_size) - if dataset_type != 'spectra': - valid_preds = [[] for _ in range(num_tasks)] - valid_targets = [[] for _ in range(num_tasks)] - for i in range(num_tasks): - for j in range(len(preds)): - if targets[j][i] is not None: # Skip those without targets - valid_preds[i].append(preds[j][i]) - valid_targets[i].append(targets[j][i]) - - # Compute metric. Spectra loss calculated for all tasks together, others calculated for tasks individually. - results = defaultdict(list) - if dataset_type == 'spectra': - for metric, metric_func in metric_to_func.items(): - results[metric].append(metric_func(preds, targets)) - else: - for i in range(num_tasks): - # # Skip if all targets or preds are identical, otherwise we'll crash during classification - if dataset_type == 'classification': - nan = False - if all(target == 0 for target in valid_targets[i]) or all(target == 1 for target in valid_targets[i]): - nan = True - info('Warning: Found a task with targets all 0s or all 1s') - if all(pred == 0 for pred in valid_preds[i]) or all(pred == 1 for pred in valid_preds[i]): - nan = True - info('Warning: Found a task with predictions all 0s or all 1s') - - if nan: - for metric in metrics: - results[metric].append(float('nan')) - continue - - if len(valid_targets[i]) == 0: - continue - - for metric, metric_func in metric_to_func.items(): - if dataset_type == 'multiclass' and metric == 'cross_entropy': - results[metric].append(metric_func(valid_targets[i], valid_preds[i], - labels=list(range(len(valid_preds[i][0]))))) - elif metric in ['bounded_rmse', 'bounded_mse', 'bounded_mae']: - results[metric].append(metric_func(valid_targets[i], valid_preds[i], gt_targets[i], lt_targets[i])) - else: - results[metric].append(metric_func(valid_targets[i], valid_preds[i])) - - results = dict(results) - - return results - - -def evaluate(model: MoleculeModel, - data_loader: MoleculeDataLoader, - num_tasks: int, - metrics: List[str], - dataset_type: str, - scaler: StandardScaler = None, - logger: logging.Logger = None) -> Dict[str, List[float]]: - """ - Evaluates an ensemble of models on a dataset by making predictions and then evaluating the predictions. - - :param model: A :class:`~chemprop.models.model.MoleculeModel`. - :param data_loader: A :class:`~chemprop.data.data.MoleculeDataLoader`. - :param num_tasks: Number of tasks. - :param metrics: A list of names of metric functions. - :param dataset_type: Dataset type. - :param scaler: A :class:`~chemprop.features.scaler.StandardScaler` object fit on the training targets. - :param logger: A logger to record output. - :return: A dictionary mapping each metric in :code:`metrics` to a list of values for each task. - - """ - # Inequality targets only need for evaluation of certain regression metrics - if any(m in metrics for m in ['bounded_rmse', 'bounded_mse', 'bounded_mae']): - gt_targets = data_loader.gt_targets - lt_targets = data_loader.lt_targets - else: - gt_targets = None - lt_targets = None - - preds = predict( - model=model, - data_loader=data_loader, - scaler=scaler - ) - - results = evaluate_predictions( - preds=preds, - targets=data_loader.targets, - num_tasks=num_tasks, - metrics=metrics, - dataset_type=dataset_type, - logger=logger, - gt_targets=gt_targets, - lt_targets=lt_targets, - ) - - return results diff --git a/chemprop/train/loss_functions.py b/chemprop/train/loss_functions.py deleted file mode 100644 index eaadf0eac..000000000 --- a/chemprop/train/loss_functions.py +++ /dev/null @@ -1,373 +0,0 @@ -from typing import Callable - -import torch -import torch.nn as nn -import numpy as np - -from chemprop.args import TrainArgs - - -def get_loss_func(args: TrainArgs) -> Callable: - """ - Gets the loss function corresponding to a given dataset type. - - :param args: Arguments containing the dataset type ("classification", "regression", or "multiclass"). - :return: A PyTorch loss function. - """ - - # Nested dictionary of the form {dataset_type: {loss_function: loss_function callable}} - supported_loss_functions = { - "regression": { - "mse": nn.MSELoss(reduction="none"), - "bounded_mse": bounded_mse_loss, - "mve": normal_mve, - "evidential": evidential_loss, - }, - "classification": { - "binary_cross_entropy": nn.BCEWithLogitsLoss(reduction="none"), - "mcc": mcc_class_loss, - "dirichlet": dirichlet_class_loss, - }, - "multiclass": { - "cross_entropy": nn.CrossEntropyLoss(reduction="none"), - "mcc": mcc_multiclass_loss, - "dirichlet": dirichlet_multiclass_loss, - }, - "spectra": { - "sid": sid_loss, - "wasserstein": wasserstein_loss, - }, - } - - # Error if no loss function supported - if args.dataset_type not in supported_loss_functions.keys(): - raise ValueError(f'Dataset type "{args.dataset_type}" not supported.') - - # Return loss function if it is represented in the supported_loss_functions dictionary - loss_function_choices = supported_loss_functions.get(args.dataset_type, dict()) - loss_function = loss_function_choices.get(args.loss_function) - - if loss_function is not None: - return loss_function - - else: - raise ValueError( - f'Loss function "{args.loss_function}" not supported with dataset type {args.dataset_type}. \ - Available options for that dataset type are {loss_function_choices.keys()}.' - ) - - -def bounded_mse_loss( - predictions: torch.tensor, - targets: torch.tensor, - less_than_target: torch.tensor, - greater_than_target: torch.tensor, -) -> torch.tensor: - """ - Loss function for use with regression when some targets are presented as inequalities. - - :param predictions: Model predictions with shape(batch_size, tasks). - :param targets: Target values with shape(batch_size, tasks). - :param less_than_target: A tensor with boolean values indicating whether the target is a less-than inequality. - :param greater_than_target: A tensor with boolean values indicating whether the target is a greater-than inequality. - :return: A tensor containing loss values of shape(batch_size, tasks). - """ - predictions = torch.where( - torch.logical_and(predictions < targets, less_than_target), targets, predictions - ) - - predictions = torch.where( - torch.logical_and(predictions > targets, greater_than_target), - targets, - predictions, - ) - - return nn.functional.mse_loss(predictions, targets, reduction="none") - - -def mcc_class_loss( - predictions: torch.tensor, - targets: torch.tensor, - data_weights: torch.tensor, - mask: torch.tensor, -) -> torch.tensor: - """ - A classification loss using a soft version of the Matthews Correlation Coefficient. - - :param predictions: Model predictions with shape(batch_size, tasks). - :param targets: Target values with shape(batch_size, tasks). - :param data_weights: A tensor with float values indicating how heavily to weight each datapoint in training with shape(batch_size, 1) - :param mask: A tensor with boolean values indicating whether the loss for this prediction is considered in the gradient descent with shape(batch_size, tasks). - :return: A tensor containing loss values of shape(tasks). - """ - # shape(batch, tasks) - # (TP*TN-FP*FN)/sqrt((TP+FP)*(TP+FN)*(TN+FP)*(TN+FN)) - TP = torch.sum(targets * predictions * data_weights * mask, axis=0) - FP = torch.sum((1 - targets) * predictions * data_weights * mask, axis=0) - FN = torch.sum(targets * (1 - predictions) * data_weights * mask, axis=0) - TN = torch.sum((1 - targets) * (1 - predictions) * data_weights * mask, axis=0) - loss = 1 - ( - (TP * TN - FP * FN) / torch.sqrt((TP + FP) * (TP + FN) * (TN + FP) * (TN + FN)) - ) - return loss - - -def mcc_multiclass_loss( - predictions: torch.tensor, - targets: torch.tensor, - data_weights: torch.tensor, - mask: torch.tensor, -) -> torch.tensor: - """ - A multiclass loss using a soft version of the Matthews Correlation Coefficient. Multiclass definition follows the version in sklearn documentation. - - :param predictions: Model predictions with shape(batch_size, classes). - :param targets: Target values with shape(batch_size). - :param data_weights: A tensor with float values indicating how heavily to weight each datapoint in training with shape(batch_size, 1) - :param mask: A tensor with boolean values indicating whether the loss for this prediction is considered in the gradient descent with shape(batch_size). - :return: A tensor value for the loss. - """ - # targets shape (batch) - # preds shape(batch, classes) - torch_device = predictions.device - mask = mask.unsqueeze(1) - bin_targets = torch.zeros_like(predictions, device=torch_device) - bin_targets[torch.arange(predictions.shape[0]), targets] = 1 - c = torch.sum(predictions * bin_targets * data_weights * mask) - s = torch.sum(predictions * data_weights * mask) - pt = torch.sum( - torch.sum(predictions * data_weights * mask, axis=0) - * torch.sum(bin_targets * data_weights * mask, axis=0) - ) - p2 = torch.sum(torch.sum(predictions * data_weights * mask, axis=0) ** 2) - t2 = torch.sum(torch.sum(bin_targets * data_weights * mask, axis=0) ** 2) - loss = 1 - (c * s - pt) / torch.sqrt((s ** 2 - p2) * (s ** 2 - t2)) - return loss - - -def sid_loss( - model_spectra: torch.tensor, - target_spectra: torch.tensor, - mask: torch.tensor, - threshold: float = None, -) -> torch.tensor: - """ - Loss function for use with spectra data type. - - :param model_spectra: The predicted spectra output from a model with shape (batch_size,spectrum_length). - :param target_spectra: The target spectra with shape (batch_size,spectrum_length). Values must be normalized so that each spectrum sums to 1. - :param mask: Tensor with boolean indications of where the spectrum output should not be excluded with shape (batch_size,spectrum_length). - :param threshold: Loss function requires that values are positive and nonzero. Values below the threshold will be replaced with the threshold value. - :return: A tensor containing loss values for the batch with shape (batch_size,spectrum_length). - """ - # Move new tensors to torch device - torch_device = model_spectra.device - - # Normalize the model spectra before comparison - zero_sub = torch.zeros_like(model_spectra, device=torch_device) - one_sub = torch.ones_like(model_spectra, device=torch_device) - if threshold is not None: - threshold_sub = torch.full(model_spectra.shape, threshold, device=torch_device) - model_spectra = torch.where( - model_spectra < threshold, threshold_sub, model_spectra - ) - model_spectra = torch.where(mask, model_spectra, zero_sub) - sum_model_spectra = torch.sum(model_spectra, axis=1, keepdim=True) - model_spectra = torch.div(model_spectra, sum_model_spectra) - - # Calculate loss value - target_spectra = torch.where(mask, target_spectra, one_sub) - model_spectra = torch.where( - mask, model_spectra, one_sub - ) # losses in excluded regions will be zero because log(1/1) = 0. - loss = torch.mul( - torch.log(torch.div(model_spectra, target_spectra)), model_spectra - ) + torch.mul(torch.log(torch.div(target_spectra, model_spectra)), target_spectra) - - return loss - - -def wasserstein_loss( - model_spectra: torch.tensor, - target_spectra: torch.tensor, - mask: torch.tensor, - threshold: float = None, -) -> torch.tensor: - """ - Loss function for use with spectra data type. This loss assumes that values are evenly spaced. - - :param model_spectra: The predicted spectra output from a model with shape (batch_size,spectrum_length). - :param target_spectra: The target spectra with shape (batch_size,spectrum_length). Values must be normalized so that each spectrum sums to 1. - :param mask: Tensor with boolian indications of where the spectrum output should not be excluded with shape (batch_size,spectrum_length). - :param threshold: Loss function requires that values are positive and nonzero. Values below the threshold will be replaced with the threshold value. - :return: A tensor containing loss values for the batch with shape (batch_size,spectrum_length). - """ - # Move new tensors to torch device - torch_device = model_spectra.device - - # Normalize the model spectra before comparison - zero_sub = torch.zeros_like(model_spectra, device=torch_device) - if threshold is not None: - threshold_sub = torch.full(model_spectra.shape, threshold, device=torch_device) - model_spectra = torch.where( - model_spectra < threshold, threshold_sub, model_spectra - ) - model_spectra = torch.where(mask, model_spectra, zero_sub) - sum_model_spectra = torch.sum(model_spectra, axis=1, keepdim=True) - model_spectra = torch.div(model_spectra, sum_model_spectra) - - # Calculate loss value - target_cum = torch.cumsum(target_spectra, axis=1) - model_cum = torch.cumsum(model_spectra, axis=1) - loss = torch.abs(target_cum - model_cum) - - return loss - - -def normal_mve(pred_values, targets): - """ - Use the negative log likelihood function of a normal distribution as a loss function used for making - simultaneous predictions of the mean and error distribution variance simultaneously. - - :param pred_values: Combined predictions of means and variances of shape(data, tasks*2). - Means are first in dimension 1, followed by variances. - :return: A tensor loss value. - """ - # Unpack combined prediction values - pred_means, pred_var = torch.split(pred_values, pred_values.shape[1] // 2, dim=1) - - return torch.log(2 * np.pi * pred_var) / 2 + (pred_means - targets) ** 2 / ( - 2 * pred_var - ) - - -# evidential classification -def dirichlet_class_loss(alphas, target_labels, lam=0): - """ - Use Evidential Learning Dirichlet loss from Sensoy et al in classification datasets. - :param alphas: Predicted parameters for Dirichlet in shape(datapoints, tasks*2). - Negative class first then positive class in dimension 1. - :param target_labels: Digital labels to predict in shape(datapoints, tasks). - :lambda: coefficient to weight KL term - - :return: Loss - """ - torch_device = alphas.device - num_tasks = target_labels.shape[1] - num_classes = 2 - alphas = torch.reshape(alphas, (alphas.shape[0], num_tasks, num_classes)) - - y_one_hot = torch.eye(num_classes, device=torch_device)[target_labels.long()] - - return dirichlet_common_loss(alphas=alphas, y_one_hot=y_one_hot, lam=lam) - - -def dirichlet_multiclass_loss(alphas, target_labels, lam=0): - """ - Use Evidential Learning Dirichlet loss from Sensoy et al for multiclass datasets. - :param alphas: Predicted parameters for Dirichlet in shape(datapoints, task, classes). - :param target_labels: Digital labels to predict in shape(datapoints, tasks). - :lambda: coefficient to weight KL term - - :return: Loss - """ - torch_device = alphas.device - num_classes = alphas.shape[2] - - y_one_hot = torch.eye(num_classes, device=torch_device)[target_labels.long()] - - return dirichlet_common_loss(alphas=alphas, y_one_hot=y_one_hot, lam=lam) - - -def dirichlet_common_loss(alphas, y_one_hot, lam=0): - """ - Use Evidential Learning Dirichlet loss from Sensoy et al. This function follows - after the classification and multiclass specific functions that reshape the - alpha inputs and create one-hot targets. - - :param alphas: Predicted parameters for Dirichlet in shape(datapoints, task, classes). - :param y_one_hot: Digital labels to predict in shape(datapoints, tasks, classes). - :lambda: coefficient to weight KL term - - :return: Loss - """ - # SOS term - S = torch.sum(alphas, dim=-1, keepdim=True) - p = alphas / S - A = torch.sum((y_one_hot - p)**2, dim=-1, keepdim=True) - B = torch.sum((p * (1 - p)) / (S + 1), dim=-1, keepdim=True) - SOS = A + B - - alpha_hat = y_one_hot + (1 - y_one_hot) * alphas - - beta = torch.ones_like(alpha_hat) - S_alpha = torch.sum(alpha_hat, dim=-1, keepdim=True) - S_beta = torch.sum(beta, dim=-1, keepdim=True) - - ln_alpha = torch.lgamma(S_alpha) - torch.sum( - torch.lgamma(alpha_hat), dim=-1, keepdim=True - ) - ln_beta = torch.sum(torch.lgamma(beta), dim=-1, keepdim=True) - torch.lgamma( - S_beta - ) - - # digamma terms - dg_alpha = torch.digamma(alpha_hat) - dg_S_alpha = torch.digamma(S_alpha) - - # KL - KL = ( - ln_alpha - + ln_beta - + torch.sum((alpha_hat - beta) * (dg_alpha - dg_S_alpha), dim=-1, keepdim=True) - ) - - KL = lam * KL - - # loss = torch.mean(SOS + KL) - loss = SOS + KL - loss = torch.mean(loss, dim=-1) - return loss - - -# updated evidential regression loss (evidential_loss_new from Amini repo) -def evidential_loss(pred_values, targets, lam=0, epsilon=1e-8): - """ - Use Deep Evidential Regression negative log likelihood loss + evidential - regularizer - - :param pred_values: Combined prediction values for mu, v, alpha, and beta parameters in shape(data, tasks*4). - Order in dimension 1 is mu, v, alpha, beta. - :mu: pred mean parameter for NIG - :v: pred lam parameter for NIG - :alpha: predicted parameter for NIG - :beta: Predicted parmaeter for NIG - :targets: Outputs to predict - - :return: Loss - """ - # Unpack combined prediction values - mu, v, alpha, beta = torch.split(pred_values, pred_values.shape[1] // 4, dim=1) - - # Calculate NLL loss - twoBlambda = 2 * beta * (1 + v) - nll = ( - 0.5 * torch.log(np.pi / v) - - alpha * torch.log(twoBlambda) - + (alpha + 0.5) * torch.log(v * (targets - mu) ** 2 + twoBlambda) - + torch.lgamma(alpha) - - torch.lgamma(alpha + 0.5) - ) - - L_NLL = nll # torch.mean(nll, dim=-1) - - # Calculate regularizer based on absolute error of prediction - error = torch.abs((targets - mu)) - reg = error * (2 * v + alpha) - L_REG = reg # torch.mean(reg, dim=-1) - - # Loss = L_NLL + L_REG - # TODO If we want to optimize the dual- of the objective use the line below: - loss = L_NLL + lam * (L_REG - epsilon) - - return loss diff --git a/chemprop/train/make_predictions.py b/chemprop/train/make_predictions.py deleted file mode 100644 index 74563476e..000000000 --- a/chemprop/train/make_predictions.py +++ /dev/null @@ -1,497 +0,0 @@ -from collections import OrderedDict -import csv -from typing import List, Optional, Union, Tuple - -import numpy as np - -from chemprop.args import PredictArgs, TrainArgs -from chemprop.data import get_data, get_data_from_smiles, MoleculeDataLoader, MoleculeDataset, StandardScaler -from chemprop.utils import load_args, load_checkpoint, load_scalers, makedirs, timeit, update_prediction_args -from chemprop.features import set_extra_atom_fdim, set_extra_bond_fdim, set_reaction, set_explicit_h, set_adding_hs, reset_featurization_parameters -from chemprop.models import MoleculeModel -from chemprop.uncertainty import UncertaintyCalibrator, build_uncertainty_calibrator, UncertaintyEstimator, build_uncertainty_evaluator - - -def load_model(args: PredictArgs, generator: bool = False): - """ - Function to load a model or ensemble of models from file. If generator is True, a generator of the respective model and scaler - objects is returned (memory efficient), else the full list (holding all models in memory, necessary for preloading). - - :param args: A :class:`~chemprop.args.PredictArgs` object containing arguments for - loading data and a model and making predictions. - :param generator: A boolean to return a generator instead of a list of models and scalers. - :return: A tuple of updated prediction arguments, training arguments, a list or generator object of models, a list or - generator object of scalers, the number of tasks and their respective names. - """ - print('Loading training args') - train_args = load_args(args.checkpoint_paths[0]) - num_tasks, task_names = train_args.num_tasks, train_args.task_names - - update_prediction_args(predict_args=args, train_args=train_args) - args: Union[PredictArgs, TrainArgs] - - # Load model and scalers - models = ( - load_checkpoint(checkpoint_path, device=args.device) for checkpoint_path in args.checkpoint_paths - ) - scalers = ( - load_scalers(checkpoint_path) for checkpoint_path in args.checkpoint_paths - ) - if not generator: - models = list(models) - scalers = list(scalers) - - return args, train_args, models, scalers, num_tasks, task_names - - -def load_data(args: PredictArgs, smiles: List[List[str]]): - """ - Function to load data from a list of smiles or a file. - - :param args: A :class:`~chemprop.args.PredictArgs` object containing arguments for - loading data and a model and making predictions. - :param smiles: A list of list of smiles, or None if data is to be read from file - :return: A tuple of a :class:`~chemprop.data.MoleculeDataset` containing all datapoints, a :class:`~chemprop.data.MoleculeDataset` containing only valid datapoints, - a :class:`~chemprop.data.MoleculeDataLoader` and a dictionary mapping full to valid indices. - """ - print("Loading data") - if smiles is not None: - full_data = get_data_from_smiles( - smiles=smiles, - skip_invalid_smiles=False, - features_generator=args.features_generator, - ) - else: - full_data = get_data( - path=args.test_path, - smiles_columns=args.smiles_columns, - target_columns=[], - ignore_columns=[], - skip_invalid_smiles=False, - args=args, - store_row=not args.drop_extra_columns, - ) - - print("Validating SMILES") - full_to_valid_indices = {} - valid_index = 0 - for full_index in range(len(full_data)): - if all(mol is not None for mol in full_data[full_index].mol): - full_to_valid_indices[full_index] = valid_index - valid_index += 1 - - test_data = MoleculeDataset( - [full_data[i] for i in sorted(full_to_valid_indices.keys())] - ) - - print(f"Test size = {len(test_data):,}") - - # Create data loader - test_data_loader = MoleculeDataLoader( - dataset=test_data, batch_size=args.batch_size, num_workers=args.num_workers - ) - - return full_data, test_data, test_data_loader, full_to_valid_indices - - -def set_features(args: PredictArgs, train_args: TrainArgs): - """ - Function to set extra options. - - :param args: A :class:`~chemprop.args.PredictArgs` object containing arguments for - loading data and a model and making predictions. - :param train_args: A :class:`~chemprop.args.TrainArgs` object containing arguments for training the model. - """ - reset_featurization_parameters() - - if args.atom_descriptors == "feature": - set_extra_atom_fdim(train_args.atom_features_size) - - if args.bond_features_path is not None: - set_extra_bond_fdim(train_args.bond_features_size) - - # set explicit H option and reaction option - set_explicit_h(train_args.explicit_h) - set_adding_hs(args.adding_h) - if train_args.reaction: - set_reaction(train_args.reaction, train_args.reaction_mode) - elif train_args.reaction_solvent: - set_reaction(True, train_args.reaction_mode) - - -def predict_and_save( - args: PredictArgs, - train_args: TrainArgs, - test_data: MoleculeDataset, - task_names: List[str], - num_tasks: int, - test_data_loader: MoleculeDataLoader, - full_data: MoleculeDataset, - full_to_valid_indices: dict, - models: List[MoleculeModel], - scalers: List[List[StandardScaler]], - num_models: int, - calibrator: UncertaintyCalibrator = None, - return_invalid_smiles: bool = False, - save_results: bool = True, -): - """ - Function to predict with a model and save the predictions to file. - - :param args: A :class:`~chemprop.args.PredictArgs` object containing arguments for - loading data and a model and making predictions. - :param train_args: A :class:`~chemprop.args.TrainArgs` object containing arguments for training the model. - :param test_data: A :class:`~chemprop.data.MoleculeDataset` containing valid datapoints. - :param task_names: A list of task names. - :param num_tasks: Number of tasks. - :param test_data_loader: A :class:`~chemprop.data.MoleculeDataLoader` to load the test data. - :param full_data: A :class:`~chemprop.data.MoleculeDataset` containing all (valid and invalid) datapoints. - :param full_to_valid_indices: A dictionary dictionary mapping full to valid indices. - :param models: A list or generator object of :class:`~chemprop.models.MoleculeModel`\ s. - :param scalers: A list or generator object of :class:`~chemprop.features.scaler.StandardScaler` objects. - :param num_models: The number of models included in the models and scalers input. - :param calibrator: A :class: `~chemprop.uncertainty.UncertaintyCalibrator` object, for use in calibrating uncertainty predictions. - :param return_invalid_smiles: Whether to return predictions of "Invalid SMILES" for invalid SMILES, otherwise will skip them in returned predictions. - :param save_results: Whether to save the predictions in a csv. Function returns the predictions regardless. - :return: A list of lists of target predictions. - """ - estimator = UncertaintyEstimator( - test_data=test_data, - test_data_loader=test_data_loader, - uncertainty_method=args.uncertainty_method, - models=models, - scalers=scalers, - num_models=num_models, - dataset_type=args.dataset_type, - loss_function=args.loss_function, - uncertainty_dropout_p=args.uncertainty_dropout_p, - dropout_sampling_size=args.dropout_sampling_size, - individual_ensemble_predictions=args.individual_ensemble_predictions, - spectra_phase_mask=getattr(train_args, "spectra_phase_mask", None), - ) - - preds, unc = estimator.calculate_uncertainty( - calibrator=calibrator - ) # preds and unc are lists of shape(data,tasks) - - if args.individual_ensemble_predictions: - individual_preds = ( - estimator.individual_predictions() - ) # shape(data, tasks, ensemble) or (data, tasks, classes, ensemble) - - if args.evaluation_methods is not None: - - evaluation_data = get_data( - path=args.test_path, - smiles_columns=args.smiles_columns, - target_columns=task_names, - features_path=args.features_path, - features_generator=args.features_generator, - phase_features_path=args.phase_features_path, - atom_descriptors_path=args.atom_descriptors_path, - bond_features_path=args.bond_features_path, - max_data_size=args.max_data_size, - loss_function=args.loss_function, - ) - - evaluators = [] - for evaluation_method in args.evaluation_methods: - evaluator = build_uncertainty_evaluator( - evaluation_method=evaluation_method, - calibration_method=args.calibration_method, - uncertainty_method=args.uncertainty_method, - dataset_type=args.dataset_type, - loss_function=args.loss_function, - calibrator=calibrator, - ) - evaluators.append(evaluator) - else: - evaluators = None - - if evaluators is not None: - evaluations = [] - print(f"Evaluating uncertainty for tasks {task_names}") - for evaluator in evaluators: - evaluation = evaluator.evaluate( - targets=evaluation_data.targets(), preds=preds, uncertainties=unc - ) - evaluations.append(evaluation) - print( - f"Using evaluation method {evaluator.evaluation_method}: {evaluation}" - ) - else: - evaluations = None - - # Save results - if save_results: - print(f"Saving predictions to {args.preds_path}") - assert len(test_data) == len(preds) - assert len(test_data) == len(unc) - - makedirs(args.preds_path, isfile=True) - - # Set multiclass column names, update num_tasks definitions - if args.dataset_type == "multiclass": - original_task_names = task_names - task_names = [ - f"{name}_class_{i}" - for name in task_names - for i in range(args.multiclass_num_classes) - ] - num_tasks = num_tasks * args.multiclass_num_classes - if args.uncertainty_method == "spectra_roundrobin": - num_unc_tasks = 1 - else: - num_unc_tasks = num_tasks - - # Copy predictions over to full_data - for full_index, datapoint in enumerate(full_data): - valid_index = full_to_valid_indices.get(full_index, None) - if valid_index is not None: - d_preds = preds[valid_index] - d_unc = unc[valid_index] - if args.individual_ensemble_predictions: - ind_preds = individual_preds[valid_index] - else: - d_preds = ["Invalid SMILES"] * num_tasks - d_unc = ["Invalid SMILES"] * num_unc_tasks - if args.individual_ensemble_predictions: - ind_preds = [["Invalid SMILES"] * len(args.checkpoint_paths)] * num_tasks - # Reshape multiclass to merge task and class dimension, with updated num_tasks - if args.dataset_type == "multiclass": - d_preds = np.array(d_preds).reshape((num_tasks)) - d_unc = np.array(d_unc).reshape((num_unc_tasks)) - if args.individual_ensemble_predictions: - ind_preds = ind_preds.reshape( - (num_tasks, len(args.checkpoint_paths)) - ) - - # If extra columns have been dropped, add back in SMILES columns - if args.drop_extra_columns: - datapoint.row = OrderedDict() - - smiles_columns = args.smiles_columns - - for column, smiles in zip(smiles_columns, datapoint.smiles): - datapoint.row[column] = smiles - - # Add predictions columns - if args.uncertainty_method == "spectra_roundrobin": - unc_names = [estimator.label] - else: - unc_names = [name + f"_{estimator.label}" for name in task_names] - - for pred_name, unc_name, pred, un in zip( - task_names, unc_names, d_preds, d_unc - ): - datapoint.row[pred_name] = pred - if args.uncertainty_method is not None: - datapoint.row[unc_name] = un - if args.individual_ensemble_predictions: - for pred_name, model_preds in zip(task_names, ind_preds): - for idx, pred in enumerate(model_preds): - datapoint.row[pred_name + f"_model_{idx}"] = pred - - # Save - with open(args.preds_path, "w") as f: - writer = csv.DictWriter(f, fieldnames=full_data[0].row.keys()) - writer.writeheader() - for datapoint in full_data: - writer.writerow(datapoint.row) - - if evaluations is not None and args.evaluation_scores_path is not None: - print(f"Saving uncertainty evaluations to {args.evaluation_scores_path}") - if args.dataset_type == "multiclass": - task_names = original_task_names - with open(args.evaluation_scores_path, "w") as f: - writer = csv.writer(f) - writer.writerow(["evaluation_method"] + task_names) - for i, evaluation_method in enumerate(args.evaluation_methods): - writer.writerow([evaluation_method] + evaluations[i]) - - if return_invalid_smiles: - full_preds = [] - full_unc = [] - for full_index in range(len(full_data)): - valid_index = full_to_valid_indices.get(full_index, None) - if valid_index is not None: - pred = preds[valid_index] - un = unc[valid_index] - else: - pred = ["Invalid SMILES"] * num_tasks - un = ["Invalid SMILES"] * num_unc_tasks - full_preds.append(pred) - full_unc.append(un) - return full_preds, full_unc - else: - return preds, unc - - -@timeit() -def make_predictions( - args: PredictArgs, - smiles: List[List[str]] = None, - model_objects: Tuple[ - PredictArgs, - TrainArgs, - List[MoleculeModel], - List[StandardScaler], - int, - List[str], - ] = None, - calibrator: UncertaintyCalibrator = None, - return_invalid_smiles: bool = True, - return_index_dict: bool = False, - return_uncertainty: bool = False, -) -> List[List[Optional[float]]]: - """ - Loads data and a trained model and uses the model to make predictions on the data. - - If SMILES are provided, then makes predictions on smiles. - Otherwise makes predictions on :code:`args.test_data`. - - :param args: A :class:`~chemprop.args.PredictArgs` object containing arguments for - loading data and a model and making predictions. - :param smiles: List of list of SMILES to make predictions on. - :param model_objects: Tuple of output of load_model function which can be called separately outside this function. Preloaded model objects should have - used the non-generator option for load_model if the objects are to be used multiple times or are intended to be used for calibration as well. - :param calibrator: A :class: `~chemprop.uncertainty.UncertaintyCalibrator` object, for use in calibrating uncertainty predictions. - Can be preloaded and provided as a function input or constructed within the function from arguments. The models and scalers used - to initiate the calibrator must be lists instead of generators if the same calibrator is to be used multiple times or - if the same models and scalers objects are also part of the provided model_objects input. - :param return_invalid_smiles: Whether to return predictions of "Invalid SMILES" for invalid SMILES, otherwise will skip them in returned predictions. - :param return_index_dict: Whether to return the prediction results as a dictionary keyed from the initial data indexes. - :param return_uncertainty: Whether to return uncertainty predictions alongside the model value predictions. - :return: A list of lists of target predictions. If returning uncertainty, a tuple containing first prediction values then uncertainty estimates. - """ - if model_objects: - ( - args, - train_args, - models, - scalers, - num_tasks, - task_names, - ) = model_objects - else: - ( - args, - train_args, - models, - scalers, - num_tasks, - task_names, - ) = load_model(args, generator=True) - - num_models = len(args.checkpoint_paths) - - set_features(args, train_args) - - # Note: to get the invalid SMILES for your data, use the get_invalid_smiles_from_file or get_invalid_smiles_from_list functions from data/utils.py - full_data, test_data, test_data_loader, full_to_valid_indices = load_data( - args, smiles - ) - - if args.uncertainty_method is None and (args.calibration_method is not None or args.evaluation_methods is not None): - if args.dataset_type in ['classification', 'multiclass']: - args.uncertainty_method = 'classification' - else: - raise ValueError('Cannot calibrate or evaluate uncertainty without selection of an uncertainty method.') - - - if calibrator is None and args.calibration_path is not None: - - calibration_data = get_data( - path=args.calibration_path, - smiles_columns=args.smiles_columns, - target_columns=task_names, - features_path=args.calibration_features_path, - features_generator=args.features_generator, - phase_features_path=args.calibration_phase_features_path, - atom_descriptors_path=args.calibration_atom_descriptors_path, - bond_features_path=args.calibration_bond_features_path, - max_data_size=args.max_data_size, - loss_function=args.loss_function, - ) - - calibration_data_loader = MoleculeDataLoader( - dataset=calibration_data, - batch_size=args.batch_size, - num_workers=args.num_workers, - ) - - if isinstance(models, List) and isinstance(scalers, List): - calibration_models = models - calibration_scalers = scalers - else: - calibration_model_objects = load_model(args, generator=True) - calibration_models = calibration_model_objects[2] - calibration_scalers = calibration_model_objects[3] - - calibrator = build_uncertainty_calibrator( - calibration_method=args.calibration_method, - uncertainty_method=args.uncertainty_method, - interval_percentile=args.calibration_interval_percentile, - regression_calibrator_metric=args.regression_calibrator_metric, - calibration_data=calibration_data, - calibration_data_loader=calibration_data_loader, - models=calibration_models, - scalers=calibration_scalers, - num_models=num_models, - dataset_type=args.dataset_type, - loss_function=args.loss_function, - uncertainty_dropout_p=args.uncertainty_dropout_p, - dropout_sampling_size=args.dropout_sampling_size, - spectra_phase_mask=getattr(train_args, "spectra_phase_mask", None), - ) - - # Edge case if empty list of smiles is provided - if len(test_data) == 0: - preds = [None] * len(full_data) - unc = [None] * len(full_data) - else: - preds, unc = predict_and_save( - args=args, - train_args=train_args, - test_data=test_data, - task_names=task_names, - num_tasks=num_tasks, - test_data_loader=test_data_loader, - full_data=full_data, - full_to_valid_indices=full_to_valid_indices, - models=models, - scalers=scalers, - num_models=num_models, - calibrator=calibrator, - return_invalid_smiles=return_invalid_smiles, - ) - - if return_index_dict: - preds_dict = {} - unc_dict = {} - for i in range(len(full_data)): - if return_invalid_smiles: - preds_dict[i] = preds[i] - unc_dict[i] = unc[i] - else: - valid_index = full_to_valid_indices.get(i, None) - if valid_index is not None: - preds_dict[i] = preds[valid_index] - unc_dict[i] = unc[valid_index] - if return_uncertainty: - return preds_dict, unc_dict - else: - return preds_dict - else: - if return_uncertainty: - return preds, unc - else: - return preds - - -def chemprop_predict() -> None: - """Parses Chemprop predicting arguments and runs prediction using a trained Chemprop model. - - This is the entry point for the command line command :code:`chemprop_predict`. - """ - make_predictions(args=PredictArgs().parse_args()) diff --git a/chemprop/train/metrics.py b/chemprop/train/metrics.py deleted file mode 100644 index a7f02c2bc..000000000 --- a/chemprop/train/metrics.py +++ /dev/null @@ -1,342 +0,0 @@ -from typing import List, Callable, Union - -from tqdm import trange -import torch -import numpy as np -import torch.nn as nn - -from sklearn.metrics import auc, mean_absolute_error, mean_squared_error, precision_recall_curve, r2_score,\ - roc_auc_score, accuracy_score, log_loss, f1_score, matthews_corrcoef - - -def get_metric_func(metric: str) -> Callable[[Union[List[int], List[float]], List[float]], float]: - r""" - Gets the metric function corresponding to a given metric name. - - Supports: - - * :code:`auc`: Area under the receiver operating characteristic curve - * :code:`prc-auc`: Area under the precision recall curve - * :code:`rmse`: Root mean squared error - * :code:`mse`: Mean squared error - * :code:`mae`: Mean absolute error - * :code:`r2`: Coefficient of determination R\ :superscript:`2` - * :code:`accuracy`: Accuracy (using a threshold to binarize predictions) - * :code:`cross_entropy`: Cross entropy - * :code:`binary_cross_entropy`: Binary cross entropy - * :code:`sid`: Spectral information divergence - * :code:`wasserstein`: Wasserstein loss for spectra - - :param metric: Metric name. - :return: A metric function which takes as arguments a list of targets and a list of predictions and returns. - """ - if metric == 'auc': - return roc_auc_score - - if metric == 'prc-auc': - return prc_auc - - if metric == 'rmse': - return rmse - - if metric == 'mse': - return mean_squared_error - - if metric == 'mae': - return mean_absolute_error - - if metric == 'bounded_rmse': - return bounded_rmse - - if metric == 'bounded_mse': - return bounded_mse - - if metric == 'bounded_mae': - return bounded_mae - - if metric == 'r2': - return r2_score - - if metric == 'accuracy': - return accuracy - - if metric == 'cross_entropy': - return log_loss - - if metric == 'f1': - return f1_metric - - if metric == 'mcc': - return mcc_metric - - if metric == 'binary_cross_entropy': - return bce - - if metric == 'sid': - return sid_metric - - if metric == 'wasserstein': - return wasserstein_metric - - raise ValueError(f'Metric "{metric}" not supported.') - - -def prc_auc(targets: List[int], preds: List[float]) -> float: - """ - Computes the area under the precision-recall curve. - - :param targets: A list of binary targets. - :param preds: A list of prediction probabilities. - :return: The computed prc-auc. - """ - precision, recall, _ = precision_recall_curve(targets, preds) - return auc(recall, precision) - - -def bce(targets: List[int], preds: List[float]) -> float: - """ - Computes the binary cross entropy loss. - - :param targets: A list of binary targets. - :param preds: A list of prediction probabilities. - :return: The computed binary cross entropy. - """ - # Don't use logits because the sigmoid is added in all places except training itself - bce_func = nn.BCELoss(reduction='mean') - loss = bce_func(target=torch.Tensor(targets), input=torch.Tensor(preds)).item() - - return loss - - -def rmse(targets: List[float], preds: List[float]) -> float: - """ - Computes the root mean squared error. - - :param targets: A list of targets. - :param preds: A list of predictions. - :return: The computed rmse. - """ - return mean_squared_error(targets, preds, squared=False) - - -def bounded_rmse(targets: List[float], preds: List[float], gt_targets: List[bool] = None, lt_targets: List[bool] = None) -> float: - """ - Computes the root mean squared error, considering targets with inequalities. - - :param targets: A list of targets. - :param preds: A list of predictions. - :param gt_targets: A list of booleans indicating whether the target is a >target inequality. - :param lt_targets: A list of booleans indicating whether the target is a float: - """ - Computes the mean squared error, considering targets with inequalities. - - :param targets: A list of targets. - :param preds: A list of predictions. - :param gt_targets: A list of booleans indicating whether the target is a >target inequality. - :param lt_targets: A list of booleans indicating whether the target is a float: - """ - Computes the mean absolute error, considering targets with inequalities. - - :param targets: A list of targets. - :param preds: A list of predictions. - :param gt_targets: A list of booleans indicating whether the target is a >target inequality. - :param lt_targets: A list of booleans indicating whether the target is a float: - """ - Computes the accuracy of a binary prediction task using a given threshold for generating hard predictions. - - Alternatively, computes accuracy for a multiclass prediction task by picking the largest probability. - - :param targets: A list of binary targets. - :param preds: A list of prediction probabilities. - :param threshold: The threshold above which a prediction is a 1 and below which (inclusive) a prediction is a 0. - :return: The computed accuracy. - """ - if type(preds[0]) == list: # multiclass - hard_preds = [p.index(max(p)) for p in preds] - else: - hard_preds = [1 if p > threshold else 0 for p in preds] # binary prediction - - return accuracy_score(targets, hard_preds) - - -def f1_metric(targets: List[int], preds: Union[List[float], List[List[float]]], threshold: float = 0.5) -> float: - """ - Computes the f1 score of a binary prediction task using a given threshold for generating hard predictions. - - Will calculate for a multiclass prediction task by picking the largest probability. - - :param targets: A list of binary targets. - :param preds: A list of prediction probabilities. - :param threshold: The threshold above which a prediction is a 1 and below which (inclusive) a prediction is a 0. - :return: The computed f1 score. - """ - if type(preds[0]) == list: # multiclass - hard_preds = [p.index(max(p)) for p in preds] - score = f1_score(targets, hard_preds, average='micro') - else: # binary prediction - hard_preds = [1 if p > threshold else 0 for p in preds] - score = f1_score(targets, hard_preds) - - return score - - -def mcc_metric(targets: List[int], preds: Union[List[float], List[List[float]]], threshold: float = 0.5) -> float: - """ - Computes the Matthews Correlation Coefficient of a binary prediction task using a given threshold for generating hard predictions. - - Will calculate for a multiclass prediction task by picking the largest probability. - - :param targets: A list of binary targets. - :param preds: A list of prediction probabilities. - :param threshold: The threshold above which a prediction is a 1 and below which (inclusive) a prediction is a 0. - :return: The computed accuracy. - """ - if type(preds[0]) == list: # multiclass - hard_preds = [p.index(max(p)) for p in preds] - else: - hard_preds = [1 if p > threshold else 0 for p in preds] # binary prediction - - return matthews_corrcoef(targets, hard_preds) - - -def sid_metric(model_spectra: List[List[float]], target_spectra: List[List[float]], threshold: float = None, batch_size: int = 50) -> float: - """ - Metric function for use with spectra data type. - - :param model_spectra: The predicted spectra output from a model with shape (num_data, spectrum_length). - :param target_spectra: The target spectra with shape (num_data, spectrum_length). Values must be normalized so that each spectrum sums to 1. - Excluded values in target spectra will have a value of None. - :param threshold: Function requires that values are positive and nonzero. Values below the threshold will be replaced with the threshold value. - :param batch_size: Batch size for calculating metric. - :return: The average SID value for the predicted spectra. - """ - losses = [] - num_iters, iter_step = len(model_spectra), batch_size - - for i in trange(0, num_iters, iter_step): - - # Create batches - batch_preds = model_spectra[i:i + iter_step] - batch_preds = np.array(batch_preds) - batch_targets = target_spectra[i:i + iter_step] - batch_mask = np.array([[x is not None for x in b] for b in batch_targets]) - batch_targets = np.array([[1 if x is None else x for x in b] for b in batch_targets]) - - # Normalize the model spectra before comparison - if threshold is not None: - batch_preds[batch_preds < threshold] = threshold - batch_preds[~batch_mask] = 0 - sum_preds = np.sum(batch_preds, axis=1, keepdims=True) - batch_preds = batch_preds / sum_preds - - # Calculate loss value - batch_preds[~batch_mask] = 1 # losses in excluded regions will be zero because log(1/1) = 0. - loss = batch_preds * np.log(batch_preds / batch_targets) + batch_targets * np.log(batch_targets / batch_preds) - loss = np.sum(loss, axis=1) - - # Gather batches - loss = loss.tolist() - losses.extend(loss) - - loss = np.mean(loss) - - return loss - - -def wasserstein_metric(model_spectra: List[List[float]], target_spectra: List[List[float]], threshold: float = None, batch_size: int = 50) -> float: - """ - Metric function for use with spectra data type. This metric assumes that values are evenly spaced. - - :param model_spectra: The predicted spectra output from a model with shape (num_data, spectrum_length). - :param target_spectra: The target spectra with shape (num_data, spectrum_length). Values must be normalized so that each spectrum sums to 1. - Excluded values in target spectra will have value None. - :param threshold: Function requires that values are positive and nonzero. Values below the threshold will be replaced with the threshold value. - :param batch_size: Batch size for calculating metric. - :return: The average wasserstein loss value for the predicted spectra. - """ - losses = [] - num_iters, iter_step = len(model_spectra), batch_size - - for i in trange(0, num_iters, iter_step): - - # Create batches - batch_preds = model_spectra[i:i + iter_step] - batch_preds = np.array(batch_preds) - batch_targets = target_spectra[i:i + iter_step] - batch_mask = np.array([[x is not None for x in b] for b in batch_targets]) - batch_targets = np.array([[0 if x is None else x for x in b] for b in batch_targets]) - - # Normalize the model spectra before comparison - if threshold is not None: - batch_preds[batch_preds < threshold] = threshold - batch_preds[~batch_mask] = 0 - sum_preds = np.sum(batch_preds, axis=1, keepdims=True) - batch_preds = batch_preds / sum_preds - - # Calculate loss value - target_cum = np.cumsum(batch_targets,axis=1) - preds_cum = np.cumsum(batch_preds,axis=1) - loss = np.abs(target_cum - preds_cum) - loss = np.sum(loss, axis=1) - - # Gather batches - loss = loss.tolist() - losses.extend(loss) - - loss = np.mean(loss) - - return loss diff --git a/chemprop/train/molecule_fingerprint.py b/chemprop/train/molecule_fingerprint.py deleted file mode 100644 index 33dd12c05..000000000 --- a/chemprop/train/molecule_fingerprint.py +++ /dev/null @@ -1,216 +0,0 @@ -import csv -from typing import List, Optional, Union - -import torch -import numpy as np -from tqdm import tqdm - -from chemprop.args import FingerprintArgs, TrainArgs -from chemprop.data import get_data, get_data_from_smiles, MoleculeDataLoader, MoleculeDataset -from chemprop.utils import load_args, load_checkpoint, makedirs, timeit, load_scalers, update_prediction_args -from chemprop.data import MoleculeDataLoader, MoleculeDataset -from chemprop.features import set_reaction, set_explicit_h, set_adding_hs, reset_featurization_parameters, set_extra_atom_fdim, set_extra_bond_fdim -from chemprop.models import MoleculeModel - -@timeit() -def molecule_fingerprint(args: FingerprintArgs, smiles: List[List[str]] = None) -> List[List[Optional[float]]]: - """ - Loads data and a trained model and uses the model to encode fingerprint vectors for the data. - - :param args: A :class:`~chemprop.args.PredictArgs` object containing arguments for - loading data and a model and making predictions. - :param smiles: List of list of SMILES to make predictions on. - :return: A list of fingerprint vectors (list of floats) - """ - - print('Loading training args') - train_args = load_args(args.checkpoint_paths[0]) - - # Update args with training arguments - if args.fingerprint_type == 'MPN': # only need to supply input features if using FFN latent representation and if model calls for them. - validate_feature_sources = False - else: - validate_feature_sources = True - update_prediction_args(predict_args=args, train_args=train_args, validate_feature_sources=validate_feature_sources) - args: Union[FingerprintArgs, TrainArgs] - - #set explicit H option and reaction option - reset_featurization_parameters() - if args.atom_descriptors == 'feature': - set_extra_atom_fdim(train_args.atom_features_size) - - if args.bond_features_path is not None: - set_extra_bond_fdim(train_args.bond_features_size) - - set_explicit_h(train_args.explicit_h) - set_adding_hs(args.adding_h) - if train_args.reaction: - set_reaction(train_args.reaction, train_args.reaction_mode) - elif train_args.reaction_solvent: - set_reaction(True, train_args.reaction_mode) - - print('Loading data') - if smiles is not None: - full_data = get_data_from_smiles( - smiles=smiles, - skip_invalid_smiles=False, - features_generator=args.features_generator - ) - else: - full_data = get_data(path=args.test_path, smiles_columns=args.smiles_columns, target_columns=[], ignore_columns=[], skip_invalid_smiles=False, - args=args, store_row=True) - - print('Validating SMILES') - full_to_valid_indices = {} - valid_index = 0 - for full_index in range(len(full_data)): - if all(mol is not None for mol in full_data[full_index].mol): - full_to_valid_indices[full_index] = valid_index - valid_index += 1 - - test_data = MoleculeDataset([full_data[i] for i in sorted(full_to_valid_indices.keys())]) - - # Edge case if empty list of smiles is provided - if len(test_data) == 0: - return [None] * len(full_data) - - print(f'Test size = {len(test_data):,}') - - # Create data loader - test_data_loader = MoleculeDataLoader( - dataset=test_data, - batch_size=args.batch_size, - num_workers=args.num_workers - ) - - # Set fingerprint size - if args.fingerprint_type == 'MPN': - if args.atom_descriptors == "descriptor": # special case when we have 'descriptor' extra dimensions need to be added - total_fp_size = (args.hidden_size + test_data.atom_descriptors_size()) * args.number_of_molecules - else: - if args.reaction_solvent: - total_fp_size = args.hidden_size + args.hidden_size_solvent - else: - total_fp_size = args.hidden_size * args.number_of_molecules - if args.features_only: - raise ValueError('With features_only models, there is no latent MPN representation. Use last_FFN fingerprint type instead.') - elif args.fingerprint_type == 'last_FFN': - if args.ffn_num_layers != 1: - total_fp_size = args.ffn_hidden_size - else: - raise ValueError('With a ffn_num_layers of 1, there is no latent FFN representation. Use MPN fingerprint type instead.') - else: - raise ValueError(f'Fingerprint type {args.fingerprint_type} not supported') - all_fingerprints = np.zeros((len(test_data), total_fp_size, len(args.checkpoint_paths))) - - # Load model - print(f'Encoding smiles into a fingerprint vector from {len(args.checkpoint_paths)} models.') - - for index, checkpoint_path in enumerate(tqdm(args.checkpoint_paths, total=len(args.checkpoint_paths))): - model = load_checkpoint(checkpoint_path, device=args.device) - scaler, features_scaler, atom_descriptor_scaler, bond_feature_scaler = load_scalers(args.checkpoint_paths[index]) - - # Normalize features - if args.features_scaling or train_args.atom_descriptor_scaling or train_args.bond_feature_scaling: - test_data.reset_features_and_targets() - if args.features_scaling: - test_data.normalize_features(features_scaler) - if train_args.atom_descriptor_scaling and args.atom_descriptors is not None: - test_data.normalize_features(atom_descriptor_scaler, scale_atom_descriptors=True) - if train_args.bond_feature_scaling and args.bond_features_size > 0: - test_data.normalize_features(bond_feature_scaler, scale_bond_features=True) - - # Make fingerprints - model_fp = model_fingerprint( - model=model, - data_loader=test_data_loader, - fingerprint_type=args.fingerprint_type - ) - if args.fingerprint_type == 'MPN' and (args.features_path is not None or args.features_generator): # truncate any features from MPN fingerprint - model_fp = np.array(model_fp)[:,:total_fp_size] - all_fingerprints[:,:,index] = model_fp - - # Save predictions - print(f'Saving predictions to {args.preds_path}') - # assert len(test_data) == len(all_fingerprints) #TODO: add unit test for this - makedirs(args.preds_path, isfile=True) - - # Set column names - fingerprint_columns = [] - if args.fingerprint_type == 'MPN': - if len(args.checkpoint_paths) == 1: - for j in range(total_fp_size//args.number_of_molecules): - for k in range(args.number_of_molecules): - fingerprint_columns.append(f'fp_{j}_mol_{k}') - else: - for j in range(total_fp_size//args.number_of_molecules): - for i in range(len(args.checkpoint_paths)): - for k in range(args.number_of_molecules): - fingerprint_columns.append(f'fp_{j}_mol_{k}_model_{i}') - - else: # args == 'last_FNN' - if len(args.checkpoint_paths) == 1: - for j in range(total_fp_size): - fingerprint_columns.append(f'fp_{j}') - else: - for j in range(total_fp_size): - for i in range(len(args.checkpoint_paths)): - fingerprint_columns.append(f'fp_{j}_model_{i}') - - # Copy predictions over to full_data - for full_index, datapoint in enumerate(full_data): - valid_index = full_to_valid_indices.get(full_index, None) - preds = all_fingerprints[valid_index].reshape((len(args.checkpoint_paths) * total_fp_size)) if valid_index is not None else ['Invalid SMILES'] * len(args.checkpoint_paths) * total_fp_size - - for i in range(len(fingerprint_columns)): - datapoint.row[fingerprint_columns[i]] = preds[i] - - # Write predictions - with open(args.preds_path, 'w') as f: - writer = csv.DictWriter(f, fieldnames=args.smiles_columns+fingerprint_columns,extrasaction='ignore') - writer.writeheader() - for datapoint in full_data: - writer.writerow(datapoint.row) - - return all_fingerprints - -def model_fingerprint(model: MoleculeModel, - data_loader: MoleculeDataLoader, - fingerprint_type: str = 'MPN', - disable_progress_bar: bool = False) -> List[List[float]]: - """ - Encodes the provided molecules into the latent fingerprint vectors, according to the provided model. - - :param model: A :class:`~chemprop.models.model.MoleculeModel`. - :param data_loader: A :class:`~chemprop.data.data.MoleculeDataLoader`. - :param disable_progress_bar: Whether to disable the progress bar. - :return: A list of fingerprint vector lists. - """ - model.eval() - - fingerprints = [] - - for batch in tqdm(data_loader, disable=disable_progress_bar, leave=False): - # Prepare batch - batch: MoleculeDataset - mol_batch, features_batch, atom_descriptors_batch, atom_features_batch, bond_features_batch = \ - batch.batch_graph(), batch.features(), batch.atom_descriptors(), batch.atom_features(), batch.bond_features() - - # Make predictions - with torch.no_grad(): - batch_fp = model.fingerprint(mol_batch, features_batch, atom_descriptors_batch, - atom_features_batch, bond_features_batch, fingerprint_type) - - # Collect vectors - batch_fp = batch_fp.data.cpu().tolist() - - fingerprints.extend(batch_fp) - - return fingerprints - -def chemprop_fingerprint() -> None: - """ - Parses Chemprop predicting arguments and returns the latent representation vectors for - provided molecules, according to a previously trained model. - """ - molecule_fingerprint(args=FingerprintArgs().parse_args()) diff --git a/chemprop/train/predict.py b/chemprop/train/predict.py deleted file mode 100644 index faec40b52..000000000 --- a/chemprop/train/predict.py +++ /dev/null @@ -1,113 +0,0 @@ -from typing import List - -import torch -from tqdm import tqdm -import numpy as np - -from chemprop.data import MoleculeDataLoader, MoleculeDataset, StandardScaler -from chemprop.models import MoleculeModel -from chemprop.nn_utils import activate_dropout - - -def predict( - model: MoleculeModel, - data_loader: MoleculeDataLoader, - disable_progress_bar: bool = False, - scaler: StandardScaler = None, - return_unc_parameters: bool = False, - dropout_prob: float = 0.0, -) -> List[List[float]]: - """ - Makes predictions on a dataset using an ensemble of models. - - :param model: A :class:`~chemprop.models.model.MoleculeModel`. - :param data_loader: A :class:`~chemprop.data.data.MoleculeDataLoader`. - :param disable_progress_bar: Whether to disable the progress bar. - :param scaler: A :class:`~chemprop.features.scaler.StandardScaler` object fit on the training targets. - :param return_unc_parameters: A bool indicating whether additional uncertainty parameters would be returned alongside the mean predictions. - :param dropout_prob: For use during uncertainty prediction only. The propout probability used in generating a dropout ensemble. - :return: A list of lists of predictions. The outer list is molecules while the inner list is tasks. If returning uncertainty parameters as well, - it is a tuple of lists of lists, of a length depending on how many uncertainty parameters are appropriate for the loss function. - """ - model.eval() - - # Activate dropout layers to work during inference for uncertainty estimation - if dropout_prob > 0.0: - def activate_dropout_(model): - return activate_dropout(model, dropout_prob) - model.apply(activate_dropout_) - - preds = [] - - var, lambdas, alphas, betas = [], [], [], [] # only used if returning uncertainty parameters - - for batch in tqdm(data_loader, disable=disable_progress_bar, leave=False): - # Prepare batch - batch: MoleculeDataset - mol_batch = batch.batch_graph() - features_batch = batch.features() - atom_descriptors_batch = batch.atom_descriptors() - atom_features_batch = batch.atom_features() - bond_features_batch = batch.bond_features() - - # Make predictions - with torch.no_grad(): - batch_preds = model( - mol_batch, - features_batch, - atom_descriptors_batch, - atom_features_batch, - bond_features_batch, - ) - - batch_preds = batch_preds.data.cpu().numpy() - - if model.loss_function == "mve": - batch_preds, batch_var = np.split(batch_preds, 2, axis=1) - elif model.loss_function == "dirichlet": - if model.classification: - batch_alphas = np.reshape( - batch_preds, [batch_preds.shape[0], batch_preds.shape[1] // 2, 2] - ) - batch_preds = batch_alphas[:, :, 1] / np.sum( - batch_alphas, axis=2 - ) # shape(data, tasks, 2) - elif model.multiclass: - batch_alphas = batch_preds - batch_preds = batch_preds / np.sum( - batch_alphas, axis=2, keepdims=True - ) # shape(data, tasks, num_classes) - elif model.loss_function == 'evidential': # regression - batch_preds, batch_lambdas, batch_alphas, batch_betas = np.split( - batch_preds, 4, axis=1 - ) - - # Inverse scale if regression - if scaler is not None: - batch_preds = scaler.inverse_transform(batch_preds) - if model.loss_function == "mve": - batch_var = batch_var * scaler.stds ** 2 - elif model.loss_function == "evidential": - batch_betas = batch_betas * scaler.stds ** 2 - - # Collect vectors - batch_preds = batch_preds.tolist() - preds.extend(batch_preds) - if model.loss_function == "mve": - var.extend(batch_var.tolist()) - elif model.loss_function == "dirichlet" and model.classification: - alphas.extend(batch_alphas.tolist()) - elif model.loss_function == "evidential": # regression - lambdas.extend(batch_lambdas.tolist()) - alphas.extend(batch_alphas.tolist()) - betas.extend(batch_betas.tolist()) - - if return_unc_parameters: - if model.loss_function == "mve": - return preds, var - elif model.loss_function == "dirichlet": - return preds, alphas - elif model.loss_function == "evidential": - return preds, lambdas, alphas, betas - - return preds diff --git a/chemprop/train/run_training.py b/chemprop/train/run_training.py deleted file mode 100644 index 0151a77ef..000000000 --- a/chemprop/train/run_training.py +++ /dev/null @@ -1,378 +0,0 @@ -import json -from logging import Logger -import os -from typing import Dict, List - -import numpy as np -import pandas as pd -from tensorboardX import SummaryWriter -import torch -from tqdm import trange -from torch.optim.lr_scheduler import ExponentialLR - -from .evaluate import evaluate, evaluate_predictions -from .predict import predict -from .train import train -from .loss_functions import get_loss_func -from chemprop.spectra_utils import normalize_spectra, load_phase_mask -from chemprop.args import TrainArgs -from chemprop.constants import MODEL_FILE_NAME -from chemprop.data import get_class_sizes, get_data, MoleculeDataLoader, MoleculeDataset, set_cache_graph, split_data -from chemprop.models import MoleculeModel -from chemprop.nn_utils import param_count, param_count_all -from chemprop.utils import build_optimizer, build_lr_scheduler, load_checkpoint, makedirs, \ - save_checkpoint, save_smiles_splits, load_frzn_model - - -def run_training(args: TrainArgs, - data: MoleculeDataset, - logger: Logger = None) -> Dict[str, List[float]]: - """ - Loads data, trains a Chemprop model, and returns test scores for the model checkpoint with the highest validation score. - - :param args: A :class:`~chemprop.args.TrainArgs` object containing arguments for - loading data and training the Chemprop model. - :param data: A :class:`~chemprop.data.MoleculeDataset` containing the data. - :param logger: A logger to record output. - :return: A dictionary mapping each metric in :code:`args.metrics` to a list of values for each task. - - """ - if logger is not None: - debug, info = logger.debug, logger.info - else: - debug = info = print - - # Set pytorch seed for random initial weights - torch.manual_seed(args.pytorch_seed) - - # Split data - debug(f'Splitting data with seed {args.seed}') - if args.separate_test_path: - test_data = get_data(path=args.separate_test_path, - args=args, - features_path=args.separate_test_features_path, - atom_descriptors_path=args.separate_test_atom_descriptors_path, - bond_features_path=args.separate_test_bond_features_path, - phase_features_path=args.separate_test_phase_features_path, - smiles_columns=args.smiles_columns, - loss_function=args.loss_function, - logger=logger) - if args.separate_val_path: - val_data = get_data(path=args.separate_val_path, - args=args, - features_path=args.separate_val_features_path, - atom_descriptors_path=args.separate_val_atom_descriptors_path, - bond_features_path=args.separate_val_bond_features_path, - phase_features_path=args.separate_val_phase_features_path, - smiles_columns = args.smiles_columns, - loss_function=args.loss_function, - logger=logger) - - if args.separate_val_path and args.separate_test_path: - train_data = data - elif args.separate_val_path: - train_data, _, test_data = split_data(data=data, - split_type=args.split_type, - sizes=args.split_sizes, - key_molecule_index=args.split_key_molecule, - seed=args.seed, - num_folds=args.num_folds, - args=args, - logger=logger) - elif args.separate_test_path: - train_data, val_data, _ = split_data(data=data, - split_type=args.split_type, - sizes=args.split_sizes, - key_molecule_index=args.split_key_molecule, - seed=args.seed, - num_folds=args.num_folds, - args=args, - logger=logger) - else: - train_data, val_data, test_data = split_data(data=data, - split_type=args.split_type, - sizes=args.split_sizes, - key_molecule_index=args.split_key_molecule, - seed=args.seed, - num_folds=args.num_folds, - args=args, - logger=logger) - - if args.dataset_type == 'classification': - class_sizes = get_class_sizes(data) - debug('Class sizes') - for i, task_class_sizes in enumerate(class_sizes): - debug(f'{args.task_names[i]} ' - f'{", ".join(f"{cls}: {size * 100:.2f}%" for cls, size in enumerate(task_class_sizes))}') - train_class_sizes = get_class_sizes(train_data, proportion=False) - args.train_class_sizes = train_class_sizes - - if args.save_smiles_splits: - save_smiles_splits( - data_path=args.data_path, - save_dir=args.save_dir, - task_names=args.task_names, - features_path=args.features_path, - train_data=train_data, - val_data=val_data, - test_data=test_data, - smiles_columns=args.smiles_columns, - logger=logger, - ) - - if args.features_scaling: - features_scaler = train_data.normalize_features(replace_nan_token=0) - val_data.normalize_features(features_scaler) - test_data.normalize_features(features_scaler) - else: - features_scaler = None - - if args.atom_descriptor_scaling and args.atom_descriptors is not None: - atom_descriptor_scaler = train_data.normalize_features(replace_nan_token=0, scale_atom_descriptors=True) - val_data.normalize_features(atom_descriptor_scaler, scale_atom_descriptors=True) - test_data.normalize_features(atom_descriptor_scaler, scale_atom_descriptors=True) - else: - atom_descriptor_scaler = None - - if args.bond_feature_scaling and args.bond_features_size > 0: - bond_feature_scaler = train_data.normalize_features(replace_nan_token=0, scale_bond_features=True) - val_data.normalize_features(bond_feature_scaler, scale_bond_features=True) - test_data.normalize_features(bond_feature_scaler, scale_bond_features=True) - else: - bond_feature_scaler = None - - args.train_data_size = len(train_data) - - debug(f'Total size = {len(data):,} | ' - f'train size = {len(train_data):,} | val size = {len(val_data):,} | test size = {len(test_data):,}') - - # Initialize scaler and scale training targets by subtracting mean and dividing standard deviation (regression only) - if args.dataset_type == 'regression': - debug('Fitting scaler') - scaler = train_data.normalize_targets() - args.spectra_phase_mask = None - elif args.dataset_type == 'spectra': - debug('Normalizing spectra and excluding spectra regions based on phase') - args.spectra_phase_mask = load_phase_mask(args.spectra_phase_mask_path) - for dataset in [train_data, test_data, val_data]: - data_targets = normalize_spectra( - spectra=dataset.targets(), - phase_features=dataset.phase_features(), - phase_mask=args.spectra_phase_mask, - excluded_sub_value=None, - threshold=args.spectra_target_floor, - ) - dataset.set_targets(data_targets) - scaler = None - else: - args.spectra_phase_mask = None - scaler = None - - # Get loss function - loss_func = get_loss_func(args) - - # Set up test set evaluation - test_smiles, test_targets = test_data.smiles(), test_data.targets() - if args.dataset_type == 'multiclass': - sum_test_preds = np.zeros((len(test_smiles), args.num_tasks, args.multiclass_num_classes)) - else: - sum_test_preds = np.zeros((len(test_smiles), args.num_tasks)) - - # Automatically determine whether to cache - if len(data) <= args.cache_cutoff: - set_cache_graph(True) - num_workers = 0 - else: - set_cache_graph(False) - num_workers = args.num_workers - - # Create data loaders - train_data_loader = MoleculeDataLoader( - dataset=train_data, - batch_size=args.batch_size, - num_workers=num_workers, - class_balance=args.class_balance, - shuffle=True, - seed=args.seed - ) - val_data_loader = MoleculeDataLoader( - dataset=val_data, - batch_size=args.batch_size, - num_workers=num_workers - ) - test_data_loader = MoleculeDataLoader( - dataset=test_data, - batch_size=args.batch_size, - num_workers=num_workers - ) - - if args.class_balance: - debug(f'With class_balance, effective train size = {train_data_loader.iter_size:,}') - - # Train ensemble of models - for model_idx in range(args.ensemble_size): - # Tensorboard writer - save_dir = os.path.join(args.save_dir, f'model_{model_idx}') - makedirs(save_dir) - try: - writer = SummaryWriter(log_dir=save_dir) - except: - writer = SummaryWriter(logdir=save_dir) - - # Load/build model - if args.checkpoint_paths is not None: - debug(f'Loading model {model_idx} from {args.checkpoint_paths[model_idx]}') - model = load_checkpoint(args.checkpoint_paths[model_idx], logger=logger) - else: - debug(f'Building model {model_idx}') - model = MoleculeModel(args) - - # Optionally, overwrite weights: - if args.checkpoint_frzn is not None: - debug(f'Loading and freezing parameters from {args.checkpoint_frzn}.') - model = load_frzn_model(model=model,path=args.checkpoint_frzn, current_args=args, logger=logger) - - debug(model) - - if args.checkpoint_frzn is not None: - debug(f'Number of unfrozen parameters = {param_count(model):,}') - debug(f'Total number of parameters = {param_count_all(model):,}') - else: - debug(f'Number of parameters = {param_count_all(model):,}') - - if args.cuda: - debug('Moving model to cuda') - model = model.to(args.device) - - # Ensure that model is saved in correct location for evaluation if 0 epochs - save_checkpoint(os.path.join(save_dir, MODEL_FILE_NAME), model, scaler, - features_scaler, atom_descriptor_scaler, bond_feature_scaler, args) - - # Optimizers - optimizer = build_optimizer(model, args) - - # Learning rate schedulers - scheduler = build_lr_scheduler(optimizer, args) - - # Run training - best_score = float('inf') if args.minimize_score else -float('inf') - best_epoch, n_iter = 0, 0 - for epoch in trange(args.epochs): - debug(f'Epoch {epoch}') - n_iter = train( - model=model, - data_loader=train_data_loader, - loss_func=loss_func, - optimizer=optimizer, - scheduler=scheduler, - args=args, - n_iter=n_iter, - logger=logger, - writer=writer - ) - if isinstance(scheduler, ExponentialLR): - scheduler.step() - val_scores = evaluate( - model=model, - data_loader=val_data_loader, - num_tasks=args.num_tasks, - metrics=args.metrics, - dataset_type=args.dataset_type, - scaler=scaler, - logger=logger - ) - - for metric, scores in val_scores.items(): - # Average validation score - avg_val_score = np.nanmean(scores) - debug(f'Validation {metric} = {avg_val_score:.6f}') - writer.add_scalar(f'validation_{metric}', avg_val_score, n_iter) - - if args.show_individual_scores: - # Individual validation scores - for task_name, val_score in zip(args.task_names, scores): - debug(f'Validation {task_name} {metric} = {val_score:.6f}') - writer.add_scalar(f'validation_{task_name}_{metric}', val_score, n_iter) - - # Save model checkpoint if improved validation score - avg_val_score = np.nanmean(val_scores[args.metric]) - if args.minimize_score and avg_val_score < best_score or \ - not args.minimize_score and avg_val_score > best_score: - best_score, best_epoch = avg_val_score, epoch - save_checkpoint(os.path.join(save_dir, MODEL_FILE_NAME), model, scaler, features_scaler, - atom_descriptor_scaler, bond_feature_scaler, args) - - # Evaluate on test set using model with best validation score - info(f'Model {model_idx} best validation {args.metric} = {best_score:.6f} on epoch {best_epoch}') - model = load_checkpoint(os.path.join(save_dir, MODEL_FILE_NAME), device=args.device, logger=logger) - - test_preds = predict( - model=model, - data_loader=test_data_loader, - scaler=scaler - ) - test_scores = evaluate_predictions( - preds=test_preds, - targets=test_targets, - num_tasks=args.num_tasks, - metrics=args.metrics, - dataset_type=args.dataset_type, - gt_targets=test_data.gt_targets(), - lt_targets=test_data.lt_targets(), - logger=logger - ) - - if len(test_preds) != 0: - sum_test_preds += np.array(test_preds) - - # Average test score - for metric, scores in test_scores.items(): - avg_test_score = np.nanmean(scores) - info(f'Model {model_idx} test {metric} = {avg_test_score:.6f}') - writer.add_scalar(f'test_{metric}', avg_test_score, 0) - - if args.show_individual_scores and args.dataset_type != 'spectra': - # Individual test scores - for task_name, test_score in zip(args.task_names, scores): - info(f'Model {model_idx} test {task_name} {metric} = {test_score:.6f}') - writer.add_scalar(f'test_{task_name}_{metric}', test_score, n_iter) - writer.close() - - # Evaluate ensemble on test set - avg_test_preds = (sum_test_preds / args.ensemble_size).tolist() - - ensemble_scores = evaluate_predictions( - preds=avg_test_preds, - targets=test_targets, - num_tasks=args.num_tasks, - metrics=args.metrics, - dataset_type=args.dataset_type, - gt_targets=test_data.gt_targets(), - lt_targets=test_data.lt_targets(), - logger=logger - ) - - for metric, scores in ensemble_scores.items(): - # Average ensemble score - avg_ensemble_test_score = np.nanmean(scores) - info(f'Ensemble test {metric} = {avg_ensemble_test_score:.6f}') - - # Individual ensemble scores - if args.show_individual_scores: - for task_name, ensemble_score in zip(args.task_names, scores): - info(f'Ensemble test {task_name} {metric} = {ensemble_score:.6f}') - - # Save scores - with open(os.path.join(args.save_dir, 'test_scores.json'), 'w') as f: - json.dump(ensemble_scores, f, indent=4, sort_keys=True) - - # Optionally save test preds - if args.save_preds: - test_preds_dataframe = pd.DataFrame(data={'smiles': test_data.smiles()}) - - for i, task_name in enumerate(args.task_names): - test_preds_dataframe[task_name] = [pred[i] for pred in avg_test_preds] - - test_preds_dataframe.to_csv(os.path.join(args.save_dir, 'test_preds.csv'), index=False) - - return ensemble_scores diff --git a/chemprop/train/train.py b/chemprop/train/train.py deleted file mode 100644 index 2343deaec..000000000 --- a/chemprop/train/train.py +++ /dev/null @@ -1,144 +0,0 @@ -import logging -from typing import Callable - -from tensorboardX import SummaryWriter -import torch -import torch.nn as nn -from torch.optim import Optimizer -from torch.optim.lr_scheduler import _LRScheduler -from tqdm import tqdm - -from chemprop.args import TrainArgs -from chemprop.data import MoleculeDataLoader, MoleculeDataset -from chemprop.models import MoleculeModel -from chemprop.nn_utils import compute_gnorm, compute_pnorm, NoamLR - - -def train(model: MoleculeModel, - data_loader: MoleculeDataLoader, - loss_func: Callable, - optimizer: Optimizer, - scheduler: _LRScheduler, - args: TrainArgs, - n_iter: int = 0, - logger: logging.Logger = None, - writer: SummaryWriter = None) -> int: - """ - Trains a model for an epoch. - - :param model: A :class:`~chemprop.models.model.MoleculeModel`. - :param data_loader: A :class:`~chemprop.data.data.MoleculeDataLoader`. - :param loss_func: Loss function. - :param optimizer: An optimizer. - :param scheduler: A learning rate scheduler. - :param args: A :class:`~chemprop.args.TrainArgs` object containing arguments for training the model. - :param n_iter: The number of iterations (training examples) trained on so far. - :param logger: A logger for recording output. - :param writer: A tensorboardX SummaryWriter. - :return: The total number of iterations (training examples) trained on so far. - """ - debug = logger.debug if logger is not None else print - - model.train() - loss_sum = iter_count = 0 - - for batch in tqdm(data_loader, total=len(data_loader), leave=False): - # Prepare batch - batch: MoleculeDataset - mol_batch, features_batch, target_batch, atom_descriptors_batch, atom_features_batch, bond_features_batch, data_weights_batch = \ - batch.batch_graph(), batch.features(), batch.targets(), batch.atom_descriptors(), \ - batch.atom_features(), batch.bond_features(), batch.data_weights() - - mask = torch.tensor([[x is not None for x in tb] for tb in target_batch], dtype=torch.bool) # shape(batch, tasks) - targets = torch.tensor([[0 if x is None else x for x in tb] for tb in target_batch]) # shape(batch, tasks) - - if args.target_weights is not None: - target_weights = torch.tensor(args.target_weights).unsqueeze(0) # shape(1,tasks) - else: - target_weights = torch.ones(targets.shape[1]).unsqueeze(0) - data_weights = torch.tensor(data_weights_batch).unsqueeze(1) # shape(batch,1) - - if args.loss_function == 'bounded_mse': - lt_target_batch = batch.lt_targets() # shape(batch, tasks) - gt_target_batch = batch.gt_targets() # shape(batch, tasks) - lt_target_batch = torch.tensor(lt_target_batch) - gt_target_batch = torch.tensor(gt_target_batch) - - # Run model - model.zero_grad() - preds = model(mol_batch, features_batch, atom_descriptors_batch, atom_features_batch, bond_features_batch) - - # Move tensors to correct device - torch_device = preds.device - mask = mask.to(torch_device) - targets = targets.to(torch_device) - target_weights = target_weights.to(torch_device) - data_weights = data_weights.to(torch_device) - if args.loss_function == 'bounded_mse': - lt_target_batch = lt_target_batch.to(torch_device) - gt_target_batch = gt_target_batch.to(torch_device) - - # Calculate losses - if args.loss_function == 'mcc' and args.dataset_type == 'classification': - loss = loss_func(preds, targets, data_weights, mask) *target_weights.squeeze(0) - elif args.loss_function == 'mcc': # multiclass dataset type - targets = targets.long() - target_losses = [] - for target_index in range(preds.size(1)): - target_loss = loss_func(preds[:, target_index, :], targets[:, target_index], data_weights, mask[:, target_index]).unsqueeze(0) - target_losses.append(target_loss) - loss = torch.cat(target_losses).to(torch_device) * target_weights.squeeze(0) - elif args.dataset_type == 'multiclass': - targets = targets.long() - if args.loss_function == 'dirichlet': - loss = loss_func(preds, targets, args.evidential_regularization) * target_weights * data_weights * mask - else: - target_losses = [] - for target_index in range(preds.size(1)): - target_loss = loss_func(preds[:, target_index, :], targets[:, target_index]).unsqueeze(1) - target_losses.append(target_loss) - loss = torch.cat(target_losses, dim=1).to(torch_device) * target_weights * data_weights * mask - elif args.dataset_type == 'spectra': - loss = loss_func(preds, targets, mask) * target_weights * data_weights * mask - elif args.loss_function == 'bounded_mse': - loss = loss_func(preds, targets, lt_target_batch, gt_target_batch) * target_weights * data_weights * mask - elif args.loss_function == 'evidential': - loss = loss_func(preds, targets, args.evidential_regularization) * target_weights * data_weights * mask - elif args.loss_function == 'dirichlet': # classification - loss = loss_func(preds, targets, args.evidential_regularization) * target_weights * data_weights * mask - else: - loss = loss_func(preds, targets) * target_weights * data_weights * mask - loss = loss.sum() / mask.sum() - - loss_sum += loss.item() - iter_count += 1 - - loss.backward() - if args.grad_clip: - nn.utils.clip_grad_norm_(model.parameters(), args.grad_clip) - optimizer.step() - - if isinstance(scheduler, NoamLR): - scheduler.step() - - n_iter += len(batch) - - # Log and/or add to tensorboard - if (n_iter // args.batch_size) % args.log_frequency == 0: - lrs = scheduler.get_lr() - pnorm = compute_pnorm(model) - gnorm = compute_gnorm(model) - loss_avg = loss_sum / iter_count - loss_sum = iter_count = 0 - - lrs_str = ', '.join(f'lr_{i} = {lr:.4e}' for i, lr in enumerate(lrs)) - debug(f'Loss = {loss_avg:.4e}, PNorm = {pnorm:.4f}, GNorm = {gnorm:.4f}, {lrs_str}') - - if writer is not None: - writer.add_scalar('train_loss', loss_avg, n_iter) - writer.add_scalar('param_norm', pnorm, n_iter) - writer.add_scalar('gradient_norm', gnorm, n_iter) - for i, lr in enumerate(lrs): - writer.add_scalar(f'learning_rate_{i}', lr, n_iter) - - return n_iter diff --git a/chemprop/types.py b/chemprop/types.py new file mode 100644 index 000000000..f3bc5d2aa --- /dev/null +++ b/chemprop/types.py @@ -0,0 +1,3 @@ +from rdkit.Chem import Mol + +Rxn = tuple[Mol, Mol] diff --git a/chemprop/uncertainty/__init__.py b/chemprop/uncertainty/__init__.py deleted file mode 100644 index 5a631d1fd..000000000 --- a/chemprop/uncertainty/__init__.py +++ /dev/null @@ -1,14 +0,0 @@ -from .uncertainty_estimator import UncertaintyEstimator -from .uncertainty_calibrator import build_uncertainty_calibrator, UncertaintyCalibrator -from .uncertainty_predictor import build_uncertainty_predictor, UncertaintyPredictor -from .uncertainty_evaluator import build_uncertainty_evaluator, UncertaintyEvaluator - -__all__ = [ - 'UncertaintyEstimator', - 'build_uncertainty_calibrator', - 'UncertaintyCalibrator', - 'build_uncertainty_predictor', - 'UncertaintyPredictor', - 'build_uncertainty_evaluator', - 'UncertaintyEvaluator' -] diff --git a/chemprop/uncertainty/uncertainty_calibrator.py b/chemprop/uncertainty/uncertainty_calibrator.py deleted file mode 100644 index 5b163df47..000000000 --- a/chemprop/uncertainty/uncertainty_calibrator.py +++ /dev/null @@ -1,710 +0,0 @@ -from abc import ABC, abstractmethod -from typing import Iterator, List - -import numpy as np -from chemprop.data.data import MoleculeDataLoader -from scipy.special import erfinv, softmax, logit, expit -from scipy.optimize import least_squares, fmin -from scipy.stats import t -from sklearn.isotonic import IsotonicRegression - -from chemprop.data import MoleculeDataset, StandardScaler -from chemprop.models import MoleculeModel -from chemprop.uncertainty.uncertainty_predictor import build_uncertainty_predictor, UncertaintyPredictor - - -class UncertaintyCalibrator(ABC): - """ - Uncertainty calibrator class. Subclasses for each uncertainty calibration - method. Subclasses should override the calibrate and apply functions for - implemented metrics. - """ - - def __init__( - self, - uncertainty_method: str, - interval_percentile: int, - regression_calibrator_metric: str, - calibration_data: MoleculeDataset, - calibration_data_loader: MoleculeDataLoader, - models: Iterator[MoleculeModel], - scalers: Iterator[StandardScaler], - num_models: int, - dataset_type: str, - loss_function: str, - uncertainty_dropout_p: float, - dropout_sampling_size: int, - spectra_phase_mask: List[List[bool]], - ): - self.calibration_data = calibration_data - self.calibration_data_loader = calibration_data_loader - self.regression_calibrator_metric = regression_calibrator_metric - self.interval_percentile = interval_percentile - self.dataset_type = dataset_type - self.uncertainty_method = uncertainty_method - self.loss_function = loss_function - self.num_models = num_models - - self.raise_argument_errors() - - self.calibration_predictor = build_uncertainty_predictor( - test_data=calibration_data, - test_data_loader=calibration_data_loader, - models=models, - scalers=scalers, - num_models=num_models, - dataset_type=dataset_type, - loss_function=loss_function, - uncertainty_method=uncertainty_method, - uncertainty_dropout_p=uncertainty_dropout_p, - dropout_sampling_size=dropout_sampling_size, - individual_ensemble_predictions=False, - spectra_phase_mask=spectra_phase_mask, - ) - - self.calibrate() - - @property - @abstractmethod - def label(self): - """ - The string in saved results indicating the uncertainty method used. - """ - - def raise_argument_errors(self): - """ - Raise errors for incompatibilities between dataset type and uncertainty method, or similar. - """ - if self.dataset_type == "spectra": - raise NotImplementedError( - "No uncertainty calibrators are implemented for the spectra dataset type." - ) - if self.uncertainty_method in ['ensemble', 'dropout'] and self.dataset_type in ['classification', 'multiclass']: - raise NotImplementedError( - 'Though ensemble and dropout uncertainty methods are available for classification \ - multiclass dataset types, their outputs are not confidences and are not \ - compatible with any implemented calibration methods for classification.' - ) - - @abstractmethod - def calibrate(self): - """ - Fit calibration method for the calibration data. - """ - - @abstractmethod - def apply_calibration(self, uncal_predictor: UncertaintyPredictor): - """ - Take in predictions and uncertainty parameters from a model and apply the calibration method using fitted parameters. - """ - - @abstractmethod - def nll( - self, - preds: List[List[float]], - unc: List[List[float]], - targets: List[List[float]], - ): - """ - Takes in calibrated predictions and uncertainty parameters and returns the log probability density of that result. - """ - - -class ZScalingCalibrator(UncertaintyCalibrator): - """ - A class that calibrates regression uncertainty models by applying - a scaling value to the uncalibrated standard deviation, fitted by minimizing the - negative log likelihood of a normal distribution around each prediction - with scaling given by the uncalibrated variance. Method is described - in https://arxiv.org/abs/1905.11659. - """ - @property - def label(self): - if self.regression_calibrator_metric == "stdev": - label = f"{self.uncertainty_method}_zscaling_stdev" - else: # interval - label = f"{self.uncertainty_method}_zscaling_{self.interval_percentile}interval" - return label - - def raise_argument_errors(self): - super().raise_argument_errors() - if self.dataset_type != "regression": - raise ValueError( - "Z Score Scaling is only compatible with regression datasets." - ) - - def calibrate(self): - uncal_preds = np.array( - self.calibration_predictor.get_uncal_preds() - ) # shape(data, tasks) - uncal_vars = np.array(self.calibration_predictor.get_uncal_vars()) - targets = np.array(self.calibration_data.targets()) - errors = uncal_preds - targets - zscore_preds = errors / np.sqrt(uncal_vars) - - def objective(scaler_values: np.ndarray): - scaled_vars = uncal_vars * np.expand_dims(scaler_values, axis=0) ** 2 - nll = np.log(2 * np.pi * scaled_vars) / 2 \ - + (errors) ** 2 / (2 * scaled_vars) - nll = np.sum(nll, axis=0) - return nll - - initial_guess = np.std(zscore_preds, axis=0, keepdims=False) - sol = least_squares(objective, initial_guess) - stdev_scaling = sol.x - if self.regression_calibrator_metric == "stdev": - self.scaling = stdev_scaling - else: # interval - interval_scaling = ( - stdev_scaling * erfinv(self.interval_percentile / 100) * np.sqrt(2) - ) - self.scaling = interval_scaling - - def apply_calibration(self, uncal_predictor: UncertaintyPredictor): - uncal_preds = np.array(uncal_predictor.get_uncal_preds()) - uncal_vars = np.array(uncal_predictor.get_uncal_vars()) - cal_stdev = np.sqrt(uncal_vars) * np.expand_dims(self.scaling, axis=0) - return uncal_preds.tolist(), cal_stdev.tolist() - - def nll( - self, - preds: List[List[float]], - unc: List[List[float]], - targets: List[List[float]], - ): - unc_var = np.square(unc) - preds = np.array(preds) - targets = np.array(targets) - return ( - np.log(2 * np.pi * unc_var) / 2 - + (preds - targets) ** 2 / (2 * unc_var) - ) - - -class TScalingCalibrator(UncertaintyCalibrator): - """ - A class that calibrates regression uncertainty models using a variation of the - ZScaling method. Instead, this method assumes that error is dominated by - variance error as represented by the variance of the ensemble predictions. - The scaling value is obtained by minimizing the negative log likelihood - of the t distribution, including reductio term due to the number of ensemble models sampled. - """ - @property - def label(self): - if self.regression_calibrator_metric == "stdev": - label = f"{self.uncertainty_method}_tscaling_stdev" - else: # interval - label = f"{self.uncertainty_method}_tscaling_{self.interval_percentile}interval" - return label - - def raise_argument_errors(self): - super().raise_argument_errors() - if self.dataset_type != "regression": - raise ValueError( - "T Score Scaling is only compatible with regression datasets." - ) - if self.uncertainty_method == "dropout": - raise ValueError( - "T scaling not enabled with dropout variance uncertainty method." - ) - if self.num_models == 1: - raise ValueError("T scaling is intended for use with ensemble models.") - - def calibrate(self): - uncal_preds = np.array( - self.calibration_predictor.get_uncal_preds() - ) # shape(data, tasks) - uncal_vars = np.array(self.calibration_predictor.get_uncal_vars()) - std_error_of_mean = np.sqrt( - uncal_vars / (self.num_models - 1) - ) # reduced for number of samples and include Bessel's correction - targets = np.array(self.calibration_data.targets()) - errors = uncal_preds - targets - tscore_preds = errors / std_error_of_mean - - def objective(scaler_values: np.ndarray): - scaled_std = std_error_of_mean * np.expand_dims(scaler_values, axis=0) - likelihood = t.pdf( - x=errors, df=self.num_models - 1, scale=scaled_std - ) # scipy t distribution pdf - nll = -1 * np.sum(np.log(likelihood), axis=0) - return nll - - initial_guess = np.std(tscore_preds, axis=0, keepdims=False) - sol = least_squares(objective, initial_guess) - stdev_scaling = sol.x - if self.regression_calibrator_metric == "stdev": - self.scaling = stdev_scaling - else: # interval - interval_scaling = stdev_scaling * t.ppf( - (self.interval_percentile / 100 + 1) / 2, df=self.num_models - 1 - ) - self.scaling = interval_scaling - - def apply_calibration(self, uncal_predictor: UncertaintyPredictor): - uncal_preds = np.array(uncal_predictor.get_uncal_preds()) - uncal_vars = np.array(uncal_predictor.get_uncal_vars()) - cal_stdev = np.sqrt(uncal_vars / (self.num_models - 1)) * np.expand_dims( - self.scaling, axis=0 - ) - return uncal_preds.tolist(), cal_stdev.tolist() - - def nll( - self, - preds: List[List[float]], - unc: List[List[float]], - targets: List[List[float]], - ): - return -1 * t.logpdf( - x=np.array(preds) - np.array(targets), scale=unc, df=self.num_models - 1 - ) - - -class ZelikmanCalibrator(UncertaintyCalibrator): - """ - A calibrator for regression datasets that does not depend on a particular probability - function form. Designed to be used with interval output. Uses the "CRUDE" method as - described in https://arxiv.org/abs/2005.12496. As implemented here, the interval - bounds are constrained to be symmetrical, though this is not required in the source method. - The probability density to be used for NLL evaluator for the zelikman interval method is - approximated here as a histogram function. - """ - @property - def label(self): - if self.regression_calibrator_metric == "stdev": - label = f"{self.uncertainty_method}_zelikman_stdev" - else: - label = f"{self.uncertainty_method}_zelikman_{self.interval_percentile}interval" - return label - - def raise_argument_errors(self): - super().raise_argument_errors() - if self.dataset_type != "regression": - raise ValueError( - "Crude Scaling is only compatible with regression datasets." - ) - - def calibrate(self): - uncal_preds = np.array( - self.calibration_predictor.get_uncal_preds() - ) # shape(data, tasks) - uncal_vars = np.array(self.calibration_predictor.get_uncal_vars()) - targets = np.array(self.calibration_data.targets()) - abs_zscore_preds = np.abs(uncal_preds - targets) / np.sqrt(uncal_vars) - if self.regression_calibrator_metric == "interval": - interval_scaling = np.percentile( - abs_zscore_preds, self.interval_percentile, axis=0 - ) - self.scaling = interval_scaling - else: - symmetric_z = np.concatenate( - [abs_zscore_preds, -1 * abs_zscore_preds], axis=0 - ) - std_scaling = np.std(symmetric_z, axis=0) - self.scaling = std_scaling - # histogram parameters for nll calculation - self.num_tasks = targets.shape[1] - self.histogram_parameters = [] - for i in range(self.num_tasks): - h_params = np.histogram( - abs_zscore_preds[:, i], bins='auto', density=True - ) - self.histogram_parameters.append(h_params) - - def apply_calibration(self, uncal_predictor: UncertaintyPredictor): - uncal_preds = np.array(uncal_predictor.get_uncal_preds()) - uncal_vars = np.array(uncal_predictor.get_uncal_vars()) - cal_stdev = np.sqrt(uncal_vars) * np.expand_dims(self.scaling, axis=0) - return uncal_preds.tolist(), cal_stdev.tolist() - - def nll( - self, - preds: List[List[float]], - unc: List[List[float]], - targets: List[List[float]], - ): - preds = np.array(preds) - unc = np.array(unc) - targets = np.array(targets) - nll = np.zeros_like(preds) - for i in range(self.num_tasks): - task_preds = preds[:, i] - task_targets = targets[:, i] - task_stdev = unc[:, i] / self.scaling[i] - task_abs_z = np.abs(task_preds - task_targets) / task_stdev - bin_edges = self.histogram_parameters[i][1] - bin_magnitudes = self.histogram_parameters[i][0] - bin_magnitudes = np.insert( - bin_magnitudes, [0, len(bin_magnitudes)], 0 - ) - pred_bins = np.searchsorted(bin_edges, task_abs_z) - # magnitude adjusted by stdev scale of the distribution and symmetry assumption - task_likelihood = bin_magnitudes[pred_bins] / task_stdev / 2 - nll[:, i] = -1 * np.log(task_likelihood) - return nll - - -class MVEWeightingCalibrator(UncertaintyCalibrator): - """ - A method of calibration for models that have ensembles of individual models that - make variance predictions. Minimizes the negative log likelihood for the - predictions versus the targets by applying a weighted average across the - variance predictions of the ensemble. Discussed in https://doi.org/10.1186/s13321-021-00551-x. - """ - @property - def label(self): - if self.regression_calibrator_metric == "stdev": - label = f"{self.uncertainty_method}_mve_weighting_stdev" - else: # interval - label = f"{self.uncertainty_method}_mve_weighting_{self.interval_percentile}interval" - return label - - def raise_argument_errors(self): - super().raise_argument_errors() - if self.dataset_type != "regression": - raise ValueError( - f"MVE Weighting is only compatible with regression datasets! got: {self.dataset_type}" - ) - if self.loss_function not in ["mve", "evidential"]: - raise ValueError( - "MVE Weighting calibration can only be carried out with MVE or Evidential loss function models." - ) - - def calibrate(self): - uncal_preds = np.array( - self.calibration_predictor.get_uncal_preds() - ) # shape(data, tasks) - individual_vars = np.array( - self.calibration_predictor.get_individual_vars() - ) # shape(models, data, tasks) - targets = np.array(self.calibration_data.targets()) - errors = uncal_preds - targets - - def objective(scaler_values: np.ndarray): - scaler_values = np.reshape(softmax(scaler_values), [-1, 1, 1]) - scaled_vars = np.sum( - individual_vars * scaler_values, axis=0, keepdims=False - ) - nll = np.log(2 * np.pi * scaled_vars) / 2 + (errors) ** 2 / ( - 2 * scaled_vars - ) - nll = np.sum(nll, axis=0) - return nll - - initial_guess = np.ones_like(self.num_models) - sol = fmin(objective, initial_guess) - self.var_weighting = softmax(sol) - if self.regression_calibrator_metric == "stdev": - self.scaling = 1 - else: # interval - self.scaling = erfinv(self.interval_percentile / 100) * np.sqrt(2) - - def apply_calibration(self, uncal_predictor: UncertaintyPredictor): - uncal_preds = np.array(uncal_predictor.get_uncal_preds()) - uncal_individual_vars = np.array(uncal_predictor.get_individual_vars()) - weighted_vars = np.sum( - uncal_individual_vars * np.reshape(self.var_weighting, [-1, 1, 1]), - axis=0, - keepdims=False, - ) - weighted_stdev = np.sqrt(weighted_vars) * self.scaling - return uncal_preds.tolist(), weighted_stdev.tolist() - - def nll( - self, - preds: List[List[float]], - unc: List[List[float]], - targets: List[List[float]], - ): - preds = np.array(preds) - targets = np.array(targets) - unc_var = np.square(unc) - return np.log(2 * np.pi * unc_var) / 2 \ - + (preds - targets) ** 2 / (2 * unc_var) - - -class PlattCalibrator(UncertaintyCalibrator): - """ - A calibration method for classification datasets based on the Platt scaling algorithm. - As discussed in https://arxiv.org/abs/1706.04599. - """ - @property - def label(self): - return f"{self.uncertainty_method}_platt_confidence" - - def raise_argument_errors(self): - super().raise_argument_errors() - if self.dataset_type != "classification": - raise ValueError( - "Platt scaling is only implemented for classification dataset types." - ) - - def calibrate(self): - uncal_preds = np.array( - self.calibration_predictor.get_uncal_preds() - ) # shape(data, tasks) - targets = np.array(self.calibration_data.targets()) - num_tasks = targets.shape[1] - # If train class sizes are available, set Bayes corrected calibration targets - if self.calibration_predictor.train_class_sizes is not None: - class_size_correction = True - train_class_sizes = np.sum( - self.calibration_predictor.train_class_sizes, axis=0 - ) # shape(tasks, 2) - negative_target = 1 / (train_class_sizes[:, 0] + 2) - positive_target = (train_class_sizes[:, 1] + 1) / ( - train_class_sizes[:, 1] + 2 - ) - print( - "Platt scaling for calibration uses Bayesian correction against training set overfitting, " - f"replacing calibration targets [0,1] with adjusted values." - ) - else: - class_size_correction = False - print( - "Class sizes used in training models unavailable in checkpoints before Chemprop v1.5.0. " - "No Bayesian correction perfomed as part of class scaling." - ) - - platt_parameters = [] - for i in range(num_tasks): - task_targets = targets[:, i] - task_preds = uncal_preds[:, i] - if class_size_correction: - task_targets[task_targets == 0] = negative_target[i] - task_targets[task_targets == 1] = positive_target[i] - print( - f"Platt Bayesian correction for task {i} in calibration replacing [0,1] targets with {[negative_target[i], positive_target[i]]}" - ) - - def objective(parameters: np.ndarray): - a = parameters[0] - b = parameters[1] - scaled_preds = expit(a * logit(task_preds) + b) - nll = -1 * np.sum( - task_targets * np.log(scaled_preds) - + (1 - task_targets) * np.log(1 - scaled_preds) - ) - return nll - - initial_guess = [1, 0] - sol = fmin(objective, initial_guess) - platt_parameters.append(sol) - - platt_parameters = np.array(platt_parameters) # shape(task, 2) - self.platt_a = platt_parameters[:, 0] - self.platt_b = platt_parameters[:, 1] - - def apply_calibration(self, uncal_predictor: UncertaintyPredictor): - uncal_preds = np.array(uncal_predictor.get_uncal_preds()) # shape(data, task) - cal_preds = expit( - np.expand_dims(self.platt_a, axis=0) * logit(uncal_preds) - + np.expand_dims(self.platt_b, axis=0) - ) - return uncal_preds.tolist(), cal_preds.tolist() - - def nll(self, preds: List[List[float]], unc: List[List[float]], targets: List[List[float]]): - targets = np.array(targets) - unc = np.array(unc) - likelihood = unc * targets + (1 - unc) * (1 - targets) - nll = -1 * np.log(likelihood) - return nll - - -class IsotonicCalibrator(UncertaintyCalibrator): - """ - A calibration method for classification datasets based on the isotonic regression algorithm. - In effect, the method transforms incoming uncalibrated confidences using a histogram-like - function where the range of each transforming bin and its magnitude is learned. - As discussed in https://arxiv.org/abs/1706.04599. - """ - @property - def label(self): - return f"{self.uncertainty_method}_isotonic_confidence" - - def raise_argument_errors(self): - super().raise_argument_errors() - if self.dataset_type != "classification": - raise ValueError( - "Isotonic Regression is only implemented for classification dataset types." - ) - - def calibrate(self): - uncal_preds = np.array( - self.calibration_predictor.get_uncal_preds() - ) # shape(data, tasks) - targets = np.array(self.calibration_data.targets()) - num_tasks = targets.shape[1] - - isotonic_models = [] - for i in range(num_tasks): - task_targets = targets[:, i] - task_preds = uncal_preds[:, i] - - isotonic_model = IsotonicRegression(y_min=0, y_max=1, out_of_bounds="clip") - isotonic_model.fit(task_preds, task_targets) - isotonic_models.append(isotonic_model) - - self.isotonic_models = isotonic_models - - def apply_calibration(self, uncal_predictor: UncertaintyPredictor): - uncal_preds = np.array(uncal_predictor.get_uncal_preds()) # shape(data, task) - transpose_cal_preds = [] - for i, iso_model in enumerate(self.isotonic_models): - task_preds = uncal_preds[:, i] - task_cal = iso_model.predict(task_preds) - transpose_cal_preds.append(task_cal) - cal_preds = np.transpose(transpose_cal_preds) - return uncal_preds.tolist(), cal_preds.tolist() - - def nll(self, preds: List[List[float]], unc: List[List[float]], targets: List[List[float]]): - targets = np.array(targets) - unc = np.array(unc) - likelihood = unc * targets + (1 - unc) * (1 - targets) - nll = -1 * np.log(likelihood) - return nll - - -class IsotonicMulticlassCalibrator(UncertaintyCalibrator): - """ - A multiclass method for classification datasets based on the isotonic regression algorithm. - In effect, the method transforms incoming uncalibrated confidences using a histogram-like - function where the range of each transforming bin and its magnitude is learned. Uses a - one-against-all aggregation scheme for convertering between binary and multiclass classifiers. - As discussed in https://arxiv.org/abs/1706.04599. - """ - @property - def label(self): - return f"{self.uncertainty_method}_isotonic_confidence" - - def raise_argument_errors(self): - super().raise_argument_errors() - if self.dataset_type != "multiclass": - raise ValueError( - "Isotonic Multiclass Regression is only implemented for multiclass dataset types." - ) - - def calibrate(self): - uncal_preds = np.array( - self.calibration_predictor.get_uncal_preds() - ) # shape(data, tasks, num_classes) - targets = np.array(self.calibration_data.targets()) # shape(data, tasks) - self.num_tasks = targets.shape[1] - self.num_classes = uncal_preds.shape[2] - - isotonic_models = [] - for i in range(self.num_tasks): - isotonic_models.append([]) - task_targets = targets[:, i] # shape(data) - for j in range(self.num_classes): - class_preds = uncal_preds[:, i, j] # shape(data) - positive_class_targets = task_targets == j - - class_targets = np.ones_like(class_preds) - class_targets[positive_class_targets] = 1 - class_targets[~positive_class_targets] = 0 - - isotonic_model = IsotonicRegression( - y_min=0, y_max=1, out_of_bounds="clip" - ) - isotonic_model.fit(class_preds, class_targets) - isotonic_models[i].append(isotonic_model) - - self.isotonic_models = isotonic_models # shape(tasks, classes) - - def apply_calibration(self, uncal_predictor: UncertaintyPredictor): - uncal_preds = np.array( - uncal_predictor.get_uncal_preds() - ) # shape(data, task, class) - transpose_cal_preds = [] - for i in range(self.num_tasks): - transpose_cal_preds.append([]) - for j in range(self.num_classes): - class_preds = uncal_preds[:, i, j] - class_cal = self.isotonic_models[i][j].predict(class_preds) - transpose_cal_preds[i].append(class_cal) # shape (task, class, data) - cal_preds = np.transpose( - transpose_cal_preds, [2, 0, 1] - ) # shape(data, task, class) - cal_preds = cal_preds / np.sum(cal_preds, axis=2, keepdims=True) - return uncal_preds.tolist(), cal_preds.tolist() - - def nll(self, preds: List[List[float]], unc: List[List[float]], targets: List[List[float]]): - targets = np.array(targets, dtype=int) # shape(data, tasks) - unc = np.array(unc) - preds = np.array(preds) - nll = np.zeros_like(targets) - for i in range(targets.shape[1]): - task_preds = unc[:, i] - task_targets = targets[:, i] # shape(data) - bin_targets = np.zeros_like(preds[:, 0, :]) # shape(data, classes) - bin_targets[np.arange(targets.shape[0]), task_targets] = 1 - task_likelihood = np.sum(bin_targets * task_preds, axis=1) - task_nll = -1 * np.log(task_likelihood) - nll[:, i] = task_nll - return nll - - -def build_uncertainty_calibrator( - calibration_method: str, - uncertainty_method: str, - regression_calibrator_metric: str, - interval_percentile: int, - calibration_data: MoleculeDataset, - calibration_data_loader: MoleculeDataLoader, - models: Iterator[MoleculeModel], - scalers: Iterator[StandardScaler], - num_models: int, - dataset_type: str, - loss_function: str, - uncertainty_dropout_p: float, - dropout_sampling_size: int, - spectra_phase_mask: List[List[bool]], -) -> UncertaintyCalibrator: - """ - Function that chooses the subclass of :class: `UncertaintyCalibrator` - based on the provided arguments and returns that class. - """ - if calibration_method is None: - if dataset_type == "regression": - if regression_calibrator_metric == "stdev": - calibration_method = "zscaling" - else: - calibration_method = "zelikman_interval" - if dataset_type in ["classification", "multiclass"]: - calibration_method == "isotonic" - - supported_calibrators = { - "zscaling": ZScalingCalibrator, - "tscaling": TScalingCalibrator, - "zelikman_interval": ZelikmanCalibrator, - "mve_weighting": MVEWeightingCalibrator, - "platt": PlattCalibrator, - "isotonic": IsotonicCalibrator - if dataset_type == "classification" - else IsotonicMulticlassCalibrator, - } - - calibrator_class = supported_calibrators.get(calibration_method, None) - - if calibrator_class is None: - raise NotImplementedError( - f"Calibrator type {calibration_method} is not currently supported. Avalable options are: {list(supported_calibrators.keys())}" - ) - else: - calibrator = calibrator_class( - uncertainty_method=uncertainty_method, - regression_calibrator_metric=regression_calibrator_metric, - interval_percentile=interval_percentile, - calibration_data=calibration_data, - calibration_data_loader=calibration_data_loader, - models=models, - scalers=scalers, - num_models=num_models, - dataset_type=dataset_type, - loss_function=loss_function, - uncertainty_dropout_p=uncertainty_dropout_p, - dropout_sampling_size=dropout_sampling_size, - spectra_phase_mask=spectra_phase_mask, - ) - return calibrator diff --git a/chemprop/uncertainty/uncertainty_estimator.py b/chemprop/uncertainty/uncertainty_estimator.py deleted file mode 100644 index 30b865ba9..000000000 --- a/chemprop/uncertainty/uncertainty_estimator.py +++ /dev/null @@ -1,65 +0,0 @@ -from typing import Iterator, List - -from chemprop.data import MoleculeDataset, StandardScaler -from chemprop.data.data import MoleculeDataLoader -from chemprop.models import MoleculeModel -from chemprop.uncertainty.uncertainty_calibrator import UncertaintyCalibrator -from chemprop.uncertainty.uncertainty_predictor import build_uncertainty_predictor - - -class UncertaintyEstimator: - def __init__( - self, - test_data: MoleculeDataset, - test_data_loader: MoleculeDataLoader, - models: Iterator[MoleculeModel], - scalers: Iterator[StandardScaler], - num_models: int, - uncertainty_method: str, - dataset_type: str, - loss_function: str, - uncertainty_dropout_p: float, - dropout_sampling_size: int, - individual_ensemble_predictions: bool, - spectra_phase_mask: List[List[bool]], - ): - self.uncertainty_method = uncertainty_method - - self.predictor = build_uncertainty_predictor( - test_data=test_data, - test_data_loader=test_data_loader, - models=models, - scalers=scalers, - num_models=num_models, - uncertainty_method=uncertainty_method, - dataset_type=dataset_type, - loss_function=loss_function, - uncertainty_dropout_p=uncertainty_dropout_p, - dropout_sampling_size=dropout_sampling_size, - individual_ensemble_predictions=individual_ensemble_predictions, - spectra_phase_mask=spectra_phase_mask, - ) - self.label = self.predictor.label - - def calculate_uncertainty(self, calibrator: UncertaintyCalibrator = None): - """ - Return values for the prediction and uncertainty metric. - If a calibrator is provided, returns a calibrated metric of the type specified. - """ - - if calibrator is not None: - self.label = calibrator.label - cal_preds, cal_unc = calibrator.apply_calibration( - uncal_predictor=self.predictor - ) - return cal_preds, cal_unc - else: - uncal_preds = self.predictor.get_uncal_preds() - uncal_output = self.predictor.get_uncal_output() - return uncal_preds, uncal_output - - def individual_predictions(self): - """ - Return separate predictions made by each individual model in an ensemble of models. - """ - return self.predictor.get_individual_preds() diff --git a/chemprop/uncertainty/uncertainty_evaluator.py b/chemprop/uncertainty/uncertainty_evaluator.py deleted file mode 100644 index b48235d0a..000000000 --- a/chemprop/uncertainty/uncertainty_evaluator.py +++ /dev/null @@ -1,410 +0,0 @@ -from abc import ABC, abstractmethod -from typing import List - -import numpy as np -from scipy.stats import t, spearmanr -from scipy.special import erfinv - -from chemprop.uncertainty.uncertainty_calibrator import UncertaintyCalibrator -from chemprop.train import evaluate_predictions - - -class UncertaintyEvaluator(ABC): - """ - A class for evaluating the effectiveness of uncertainty estimates with metrics. - """ - - def __init__( - self, - evaluation_method: str, - calibration_method: str, - uncertainty_method: str, - dataset_type: str, - loss_function: str, - calibrator: UncertaintyCalibrator, - ): - self.evaluation_method = evaluation_method - self.calibration_method = calibration_method - self.uncertainty_method = uncertainty_method - self.dataset_type = dataset_type - self.loss_function = loss_function - self.calibrator = calibrator - - self.raise_argument_errors() - - def raise_argument_errors(self): - """ - Raise errors for incompatibilities between dataset type and uncertainty method, or similar. - """ - if self.dataset_type == "spectra": - raise NotImplementedError( - "No uncertainty evaluators implemented for spectra dataset type." - ) - if self.uncertainty_method in ['ensemble', 'dropout'] and self.dataset_type in ['classification', 'multiclass']: - raise NotImplementedError( - 'Though ensemble and dropout uncertainty methods are available for classification \ - multiclass dataset types, their outputs are not confidences and are not \ - compatible with any implemented evaluation methods for classification.' - ) - - @abstractmethod - def evaluate( - self, - targets: List[List[float]], - preds: List[List[float]], - uncertainties: List[List[float]], - ) -> List[float]: - """ - Evaluate the performance of uncertainty predictions against the model target values. - - :param targets: The target values for prediction. - :param preds: The prediction values of a model on the test set. - :param uncertainties: The estimated uncertainty values, either calibrated or uncalibrated, of a model on the test set. - :return: A list of metric values for each model task. - """ - - -class MetricEvaluator(UncertaintyEvaluator): - """ - A class for evaluating confidence estimates of classification and multiclass datasets using builtin evaluation metrics. - """ - - def evaluate( - self, - targets: List[List[float]], - preds: List[List[float]], - uncertainties: List[List[float]], - ): - return evaluate_predictions( - preds=uncertainties, - targets=targets, - num_tasks=np.array(targets).shape[1], - metrics=[self.evaluation_method], - dataset_type=self.dataset_type, - )[self.evaluation_method] - - -class NLLRegressionEvaluator(UncertaintyEvaluator): - """ - A class for evaluating regression uncertainty values using the mean negative-log-likelihood - of the actual targets given the probability distributions estimated by the model. - """ - - def raise_argument_errors(self): - super().raise_argument_errors() - if self.dataset_type != "regression": - raise ValueError( - "NLL Regression Evaluator is only for regression dataset types." - ) - - def evaluate( - self, - targets: List[List[float]], - preds: List[List[float]], - uncertainties: List[List[float]], - ): - if self.calibrator is None: # uncalibrated regression uncertainties are variances - uncertainties = np.array(uncertainties) - preds = np.array(preds) - targets = np.array(targets) - nll = np.log(2 * np.pi * uncertainties) / 2 \ - + (preds - targets) ** 2 / (2 * uncertainties) - return np.mean(nll, axis=0).tolist() - else: - nll = self.calibrator.nll( - preds=preds, unc=uncertainties, targets=targets - ) # shape(data, task) - return np.mean(nll, axis=0).tolist() - - -class NLLClassEvaluator(UncertaintyEvaluator): - """ - A class for evaluating classification uncertainty values using the mean negative-log-likelihood - of the actual targets given the probabilities assigned to them by the model. - """ - - def raise_argument_errors(self): - super().raise_argument_errors() - if self.dataset_type != "classification": - raise ValueError( - "NLL Classification Evaluator is only for classification dataset types." - ) - - def evaluate( - self, - targets: List[List[float]], - preds: List[List[float]], - uncertainties: List[List[float]], - ): - targets = np.array(targets) - uncertainties = np.array(uncertainties) - likelihood = uncertainties * targets + (1 - uncertainties) * (1 - targets) - nll = -1 * np.log(likelihood) - return np.mean(nll, axis=0).tolist() - - -class NLLMultiEvaluator(UncertaintyEvaluator): - """ - A class for evaluating multiclass uncertainty values using the mean negative-log-likelihood - of the actual targets given the probabilities assigned to them by the model. - """ - - def raise_argument_errors(self): - super().raise_argument_errors() - if self.dataset_type != "multiclass": - raise ValueError( - "NLL Multiclass Evaluator is only for multiclass dataset types." - ) - - def evaluate( - self, - targets: List[List[float]], - preds: List[List[float]], - uncertainties: List[List[float]], - ): - targets = np.array(targets, dtype=int) # shape(data, tasks) - uncertainties = np.array(uncertainties) - preds = np.array(preds) - nll = np.zeros_like(targets) - for i in range(targets.shape[1]): - task_preds = uncertainties[:, i] - task_targets = targets[:, i] # shape(data) - bin_targets = np.zeros_like(preds[:, 0, :]) # shape(data, classes) - bin_targets[np.arange(targets.shape[0]), task_targets] = 1 - task_likelihood = np.sum(bin_targets * task_preds, axis=1) - task_nll = -1 * np.log(task_likelihood) - nll[:, i] = task_nll - return np.mean(nll, axis=0).tolist() - - -class CalibrationAreaEvaluator(UncertaintyEvaluator): - """ - A class for evaluating regression uncertainty values based on how they deviate from perfect - calibration on an observed-probability versus expected-probability plot. - """ - - def raise_argument_errors(self): - super().raise_argument_errors() - if self.dataset_type != "regression": - raise NotImplementedError( - f"Miscalibration area is only implemented for regression dataset types." - ) - - def evaluate( - self, - targets: List[List[float]], - preds: List[List[float]], - uncertainties: List[List[float]], - ): - targets = np.array(targets) # shape(data, tasks) - uncertainties = np.array(uncertainties) - preds = np.array(preds) - abs_error = np.abs(preds - targets) # shape(data, tasks) - - fractions = np.zeros([preds.shape[1], 101]) # shape(tasks, 101) - fractions[:, 100] = 1 - - if self.calibrator is not None: - # using 101 bin edges, hardcoded - original_metric = self.calibrator.regression_calibrator_metric - original_scaling = self.calibrator.scaling - original_interval = self.calibrator.interval_percentile - - for i in range(1, 100): - self.calibrator.regression_calibrator_metric = "interval" - self.calibrator.interval_percentile = i - self.calibrator.calibrate() - bin_scaling = self.calibrator.scaling - bin_unc = ( - uncertainties - / np.expand_dims(original_scaling, axis=0) - * np.expand_dims(bin_scaling, axis=0) - ) # shape(data, tasks) - bin_fraction = np.mean(bin_unc >= abs_error, axis=0) - fractions[:, i] = bin_fraction - - self.calibrator.regression_calibrator_metric = original_metric - self.calibrator.scaling = original_scaling - self.calibrator.interval_percentile = original_interval - - else: # uncertainties are uncalibrated variances - std = np.sqrt(uncertainties) - for i in range(1, 100): - bin_scaling = erfinv(i / 100) * np.sqrt(2) - bin_unc = std * bin_scaling - bin_fraction = np.mean(bin_unc >= abs_error, axis=0) - fractions[:, i] = bin_fraction - # trapezoid rule - auce = np.sum( - 0.01 * np.abs(fractions - np.expand_dims(np.arange(101) / 100, axis=0)), - axis=1, - ) - return auce.tolist() - - -class ExpectedNormalizedErrorEvaluator(UncertaintyEvaluator): - """ - A class that evaluates uncertainty performance by binning together clusters of predictions - and comparing the average predicted variance of the clusters against the RMSE of the cluster. - Method discussed in https://doi.org/10.1021/acs.jcim.9b00975. - """ - - def raise_argument_errors(self): - super().raise_argument_errors() - if self.dataset_type != "regression": - raise ValueError( - f"Expected normalized error is only appropriate for regression dataset types." - ) - - def evaluate( - self, - targets: List[List[float]], - preds: List[List[float]], - uncertainties: List[List[float]], - ): - targets = np.array(targets) # shape(data, tasks) - uncertainties = np.array(uncertainties) - preds = np.array(preds) - abs_error = np.abs(preds - targets) # shape(data, tasks) - - sort_record = np.rec.fromarrays([uncertainties, abs_error], names="i, j") - sort_record.sort(axis=0) - uncertainties = sort_record["i"] - abs_error = sort_record["j"] - - # get stdev scaling - if self.calibrator is not None: - original_metric = self.calibrator.regression_calibrator_metric - original_scaling = self.calibrator.scaling - - # 100 bins - split_unc = np.array_split( - uncertainties, 100, axis=0 - ) # shape(list100, data, tasks) - split_error = np.array_split(abs_error, 100, axis=0) - - mean_vars = np.zeros([preds.shape[1], 100]) # shape(tasks, 100) - rmses = np.zeros_like(mean_vars) - - for i in range(100): - if self.calibrator is None: # starts as a variance - mean_vars[:, i] = np.mean(split_unc[i], axis=0) - rmses[:, i] = np.sqrt(np.mean(np.square(split_error[i]), axis=0)) - elif self.calibration_method == "tscaling": # convert back to sample stdev - bin_unc = split_unc[i] / np.expand_dims(original_scaling, axis=0) - bin_var = t.var(df=self.calibrator.num_models - 1, scale=bin_unc) - mean_vars[:, i] = np.mean(bin_var, axis=0) - rmses[:, i] = np.sqrt(np.mean(np.square(split_error[i]), axis=0)) - else: - self.calibrator.regression_calibrator_metric = "stdev" - self.calibrator.calibrate() - - stdev_scaling = self.calibrator.scaling - - self.calibrator.regression_calibrator_metric = original_metric - self.calibrator.scaling = original_scaling - - bin_unc = split_unc[i] - bin_unc = ( - bin_unc - / np.expand_dims(original_scaling, axis=0) - * np.expand_dims(stdev_scaling, axis=0) - ) # convert from interval to stdev as needed - mean_vars[:, i] = np.mean(np.square(bin_unc), axis=0) - rmses[:, i] = np.sqrt(np.mean(np.square(split_error[i]), axis=0)) - ence = np.mean(np.abs(mean_vars - rmses) / mean_vars, axis=1) - return ence.tolist() - - -class SpearmanEvaluator(UncertaintyEvaluator): - """ - Class evaluating uncertainty performance using the spearman rank correlation. Method produces - better scores (closer to 1 in the [-1, 1] range) when the uncertainty values are predictive - of the ranking of prediciton errors. - """ - - def raise_argument_errors(self): - super().raise_argument_errors() - if self.dataset_type != "regression": - raise ValueError( - f"Spearman rank correlation is only appropriate for regression dataset types." - ) - - def evaluate( - self, - targets: List[List[float]], - preds: List[List[float]], - uncertainties: List[List[float]], - ): - targets = np.array(targets) # shape(data, tasks) - uncertainties = np.array(uncertainties) - preds = np.array(preds) - abs_error = np.abs(preds - targets) # shape(data, tasks) - - num_tasks = targets.shape[1] - spearman_coeffs = [] - for i in range(num_tasks): - spmn = spearmanr(uncertainties[:, i], abs_error[:, i]).correlation - spearman_coeffs.append(spmn) - return spearman_coeffs - - -def build_uncertainty_evaluator( - evaluation_method: str, - calibration_method: str, - uncertainty_method: str, - dataset_type: str, - loss_function: str, - calibrator: UncertaintyCalibrator, -) -> UncertaintyEvaluator: - """ - Function that chooses and returns the appropriate :class: `UncertaintyEvaluator` subclass - for the provided arguments. - """ - supported_evaluators = { - "nll": { - "regression": NLLRegressionEvaluator, - "classification": NLLClassEvaluator, - "multiclass": NLLMultiEvaluator, - "spectra": None, - }[dataset_type], - "miscalibration_area": CalibrationAreaEvaluator, - "ence": ExpectedNormalizedErrorEvaluator, - "spearman": SpearmanEvaluator, - } - - classification_metrics = [ - "auc", - "prc-auc", - "accuracy", - "binary_cross_entropy", - "f1", - "mcc", - ] - multiclass_metrics = [ - "cross_entropy", - "accuracy", - "f1", - "mcc" - ] - if dataset_type == "classification" and evaluation_method in classification_metrics: - evaluator_class = MetricEvaluator - elif dataset_type == "multiclass" and evaluation_method in multiclass_metrics: - evaluator_class = MetricEvaluator - else: - evaluator_class = supported_evaluators.get(evaluation_method, None) - - if evaluator_class is None: - raise NotImplementedError( - f"Evaluator type {evaluation_method} is not supported. Avalable options are all calibration/multiclass metrics and {list(supported_evaluators.keys())}" - ) - else: - evaluator = evaluator_class( - evaluation_method=evaluation_method, - calibration_method=calibration_method, - uncertainty_method=uncertainty_method, - dataset_type=dataset_type, - loss_function=loss_function, - calibrator=calibrator, - ) - return evaluator diff --git a/chemprop/uncertainty/uncertainty_predictor.py b/chemprop/uncertainty/uncertainty_predictor.py deleted file mode 100644 index 315e71686..000000000 --- a/chemprop/uncertainty/uncertainty_predictor.py +++ /dev/null @@ -1,842 +0,0 @@ -from abc import ABC, abstractmethod -from typing import Iterator, List - -import numpy as np -from tqdm import tqdm - -from chemprop.data import MoleculeDataset, StandardScaler, MoleculeDataLoader -from chemprop.models import MoleculeModel -from chemprop.train.predict import predict -from chemprop.spectra_utils import normalize_spectra, roundrobin_sid - - -class UncertaintyPredictor(ABC): - """ - A class for making model predictions and associated predictions of - prediction uncertainty according to the chosen uncertainty method. - """ - def __init__( - self, - test_data: MoleculeDataset, - test_data_loader: MoleculeDataLoader, - models: Iterator[MoleculeModel], - scalers: Iterator[StandardScaler], - num_models: int, - dataset_type: str, - loss_function: str, - uncertainty_dropout_p: float, - dropout_sampling_size: int, - individual_ensemble_predictions: bool = False, - spectra_phase_mask: List[List[bool]] = None, - ): - self.test_data = test_data - self.models = models - self.scalers = scalers - self.dataset_type = dataset_type - self.loss_function = loss_function - self.uncal_preds = None - self.uncal_vars = None - self.uncal_confidence = None - self.individual_vars = None - self.num_models = num_models - self.uncertainty_dropout_p = uncertainty_dropout_p - self.dropout_sampling_size = dropout_sampling_size - self.individual_ensemble_predictions = individual_ensemble_predictions - self.spectra_phase_mask = spectra_phase_mask - self.train_class_sizes = None - - self.raise_argument_errors() - self.test_data_loader = test_data_loader - self.calculate_predictions() - - @property - @abstractmethod - def label(self): - """ - The string in saved results indicating the uncertainty method used. - """ - - def raise_argument_errors(self): - """ - Raise errors for incompatible dataset types or uncertainty methods, etc. - """ - - @abstractmethod - def calculate_predictions(self): - """ - Calculate the uncalibrated predictions and store them as attributes - """ - - def get_uncal_preds(self): - """ - Return the predicted values for the test data. - """ - return self.uncal_preds - - def get_uncal_vars(self): - """ - Return the uncalibrated variances for the test data - """ - return self.uncal_vars - - def get_uncal_confidence(self): - """ - Return the uncalibrated confidences for the test data - """ - return self.uncal_confidence - - def get_individual_vars(self): - """ - Return the variances predicted by each individual model in an ensemble. - """ - return self.individual_vars - - def get_individual_preds(self): - """ - Return the value predicted by each individual model in an ensemble. - """ - return self.individual_preds - - @abstractmethod - def get_uncal_output(self): - """ - Return the uncalibrated uncertainty outputs for the test data - """ - - -class NoUncertaintyPredictor(UncertaintyPredictor): - """ - Class that is used for predictions when no uncertainty method is selected. - Model value predictions are made as normal but uncertainty output only returns "nan". - """ - @property - def label(self): - return "no_uncertainty_method" - - def calculate_predictions(self): - for i, (model, scaler_list) in enumerate( - tqdm(zip(self.models, self.scalers), total=self.num_models) - ): - ( - scaler, - features_scaler, - atom_descriptor_scaler, - bond_feature_scaler, - ) = scaler_list - if ( - features_scaler is not None - or atom_descriptor_scaler is not None - or bond_feature_scaler is not None - ): - self.test_data.reset_features_and_targets() - if features_scaler is not None: - self.test_data.normalize_features(features_scaler) - if atom_descriptor_scaler is not None: - self.test_data.normalize_features( - atom_descriptor_scaler, scale_atom_descriptors=True - ) - if bond_feature_scaler is not None: - self.test_data.normalize_features( - bond_feature_scaler, scale_bond_features=True - ) - - preds = predict( - model=model, - data_loader=self.test_data_loader, - scaler=scaler, - return_unc_parameters=False, - ) - if self.dataset_type == "spectra": - preds = normalize_spectra( - spectra=preds, - phase_features=self.test_data.phase_features(), - phase_mask=self.spectra_phase_mask, - excluded_sub_value=float("nan"), - ) - if i == 0: - sum_preds = np.array(preds) - if self.individual_ensemble_predictions: - individual_preds = np.expand_dims(np.array(preds), axis=-1) - else: - sum_preds += np.array(preds) - if self.individual_ensemble_predictions: - individual_preds = np.append(individual_preds, np.expand_dims(preds, axis=-1), axis=-1) - - self.uncal_preds = (sum_preds / self.num_models).tolist() - uncal_vars = np.zeros_like(sum_preds) - uncal_vars[:] = np.nan - self.uncal_vars = uncal_vars - if self.individual_ensemble_predictions: - self.individual_preds = individual_preds.tolist() - - def get_uncal_output(self): - return self.uncal_vars - - -class RoundRobinSpectraPredictor(UncertaintyPredictor): - """ - A class predicting uncertainty for spectra outputs from an ensemble of models. Output is - the average SID calculated pairwise between each of the individual spectrum predictions. - """ - @property - def label(self): - return "roundrobin_sid" - - def raise_argument_errors(self): - super().raise_argument_errors() - if self.num_models == 1: - raise ValueError( - "Roundrobin uncertainty is only available when multiple models are provided." - ) - - def calculate_predictions(self): - for i, (model, scaler_list) in enumerate( - tqdm(zip(self.models, self.scalers), total=self.num_models) - ): - ( - scaler, - features_scaler, - atom_descriptor_scaler, - bond_feature_scaler, - ) = scaler_list - if ( - features_scaler is not None - or atom_descriptor_scaler is not None - or bond_feature_scaler is not None - ): - self.test_data.reset_features_and_targets() - if features_scaler is not None: - self.test_data.normalize_features(features_scaler) - if atom_descriptor_scaler is not None: - self.test_data.normalize_features( - atom_descriptor_scaler, scale_atom_descriptors=True - ) - if bond_feature_scaler is not None: - self.test_data.normalize_features( - bond_feature_scaler, scale_bond_features=True - ) - - preds = predict( - model=model, - data_loader=self.test_data_loader, - scaler=scaler, - return_unc_parameters=False, - ) - if self.dataset_type == "spectra": - preds = normalize_spectra( - spectra=preds, - phase_features=self.test_data.phase_features(), - phase_mask=self.spectra_phase_mask, - excluded_sub_value=float("nan"), - ) - if i == 0: - sum_preds = np.array(preds) - individual_preds = np.expand_dims(np.array(preds), axis=-1) - else: - sum_preds += np.array(preds) - individual_preds = np.append( - individual_preds, np.expand_dims(preds, axis=-1), axis=-1 - ) # shape(data, tasks, ensemble) - - self.uncal_preds = (sum_preds / self.num_models).tolist() - self.uncal_sid = roundrobin_sid(individual_preds) # shape(data) - if self.individual_ensemble_predictions: - self.individual_preds = individual_preds.tolist() - - def get_uncal_output(self): - return self.uncal_sid - - -class MVEPredictor(UncertaintyPredictor): - """ - Class that uses the variance output of the mve loss function (aka heteroscedastic loss) - as a prediction uncertainty. - """ - @property - def label(self): - return"mve_uncal_var" - - def raise_argument_errors(self): - super().raise_argument_errors() - if self.loss_function != "mve": - raise ValueError( - "In order to use mve uncertainty, trained models must have used mve loss function." - ) - - def calculate_predictions(self): - for i, (model, scaler_list) in enumerate( - tqdm(zip(self.models, self.scalers), total=self.num_models) - ): - ( - scaler, - features_scaler, - atom_descriptor_scaler, - bond_feature_scaler, - ) = scaler_list - if ( - features_scaler is not None - or atom_descriptor_scaler is not None - or bond_feature_scaler is not None - ): - self.test_data.reset_features_and_targets() - if features_scaler is not None: - self.test_data.normalize_features(features_scaler) - if atom_descriptor_scaler is not None: - self.test_data.normalize_features( - atom_descriptor_scaler, scale_atom_descriptors=True - ) - if bond_feature_scaler is not None: - self.test_data.normalize_features( - bond_feature_scaler, scale_bond_features=True - ) - - preds, var = predict( - model=model, - data_loader=self.test_data_loader, - scaler=scaler, - return_unc_parameters=True, - ) - if i == 0: - sum_preds = np.array(preds) - sum_squared = np.square(preds) - sum_vars = np.array(var) - individual_vars = [var] - if self.individual_ensemble_predictions: - individual_preds = np.expand_dims(np.array(preds), axis=-1) - else: - sum_preds += np.array(preds) - sum_squared += np.square(preds) - sum_vars += np.array(var) - individual_vars.append(var) - if self.individual_ensemble_predictions: - individual_preds = np.append(individual_preds, np.expand_dims(preds, axis=-1), axis=-1) - - uncal_preds = sum_preds / self.num_models - uncal_vars = (sum_vars + sum_squared) / self.num_models \ - - np.square(sum_preds / self.num_models) - self.uncal_preds, self.uncal_vars = uncal_preds.tolist(), uncal_vars.tolist() - self.individual_vars = individual_vars - if self.individual_ensemble_predictions: - self.individual_preds = individual_preds.tolist() - - def get_uncal_output(self): - return self.uncal_vars - - -class EvidentialTotalPredictor(UncertaintyPredictor): - """ - Uses the evidential loss function to calculate total uncertainty variance from - ancilliary loss function outputs. As presented in https://doi.org/10.1021/acscentsci.1c00546. - """ - @property - def label(self): - return "evidential_total_uncal_var" - - def raise_argument_errors(self): - super().raise_argument_errors() - if self.loss_function != "evidential": - raise ValueError( - "In order to use evidential uncertainty, trained models must have used evidential regression loss function." - ) - if self.dataset_type != "regression": - raise ValueError( - "Evidential total uncertainty is only compatible with regression dataset types." - ) - - def calculate_predictions(self): - for i, (model, scaler_list) in enumerate( - tqdm(zip(self.models, self.scalers), total=self.num_models) - ): - ( - scaler, - features_scaler, - atom_descriptor_scaler, - bond_feature_scaler, - ) = scaler_list - if ( - features_scaler is not None - or atom_descriptor_scaler is not None - or bond_feature_scaler is not None - ): - self.test_data.reset_features_and_targets() - if features_scaler is not None: - self.test_data.normalize_features(features_scaler) - if atom_descriptor_scaler is not None: - self.test_data.normalize_features( - atom_descriptor_scaler, scale_atom_descriptors=True - ) - if bond_feature_scaler is not None: - self.test_data.normalize_features( - bond_feature_scaler, scale_bond_features=True - ) - - preds, lambdas, alphas, betas = predict( - model=model, - data_loader=self.test_data_loader, - scaler=scaler, - return_unc_parameters=True, - ) - var = ( - np.array(betas) - * (1 + 1 / np.array(lambdas)) - / (np.array(alphas) - 1) - ) - if i == 0: - sum_preds = np.array(preds) - sum_squared = np.square(preds) - sum_vars = np.array(var) - individual_vars = [var] - if self.individual_ensemble_predictions: - individual_preds = np.expand_dims(np.array(preds), axis=-1) - else: - sum_preds += np.array(preds) - sum_squared += np.square(preds) - sum_vars += np.array(var) - individual_vars.append(var) - if self.individual_ensemble_predictions: - individual_preds = np.append(individual_preds, np.expand_dims(preds, axis=-1), axis=-1) - - uncal_preds = sum_preds / self.num_models - uncal_vars = (sum_vars + sum_squared) / self.num_models \ - - np.square(sum_preds / self.num_models) - self.uncal_preds, self.uncal_vars = uncal_preds.tolist(), uncal_vars.tolist() - self.individual_vars = individual_vars - if self.individual_ensemble_predictions: - self.individual_preds = individual_preds.tolist() - - def get_uncal_output(self): - return self.uncal_vars - - -class EvidentialAleatoricPredictor(UncertaintyPredictor): - """ - Uses the evidential loss function to calculate aleatoric uncertainty variance from - ancilliary loss function outputs. As presented in https://doi.org/10.1021/acscentsci.1c00546. - """ - @property - def label(self): - return "evidential_aleatoric_uncal_var" - - def raise_argument_errors(self): - super().raise_argument_errors() - if self.loss_function != "evidential": - raise ValueError( - "In order to use evidential uncertainty, trained models must have used evidential regression loss function." - ) - if self.dataset_type != "regression": - raise ValueError( - "Evidential aleatoric uncertainty is only compatible with regression dataset types." - ) - - def calculate_predictions(self): - for i, (model, scaler_list) in enumerate( - tqdm(zip(self.models, self.scalers), total=self.num_models) - ): - ( - scaler, - features_scaler, - atom_descriptor_scaler, - bond_feature_scaler, - ) = scaler_list - if ( - features_scaler is not None - or atom_descriptor_scaler is not None - or bond_feature_scaler is not None - ): - self.test_data.reset_features_and_targets() - if features_scaler is not None: - self.test_data.normalize_features(features_scaler) - if atom_descriptor_scaler is not None: - self.test_data.normalize_features( - atom_descriptor_scaler, scale_atom_descriptors=True - ) - if bond_feature_scaler is not None: - self.test_data.normalize_features( - bond_feature_scaler, scale_bond_features=True - ) - - preds, lambdas, alphas, betas = predict( - model=model, - data_loader=self.test_data_loader, - scaler=scaler, - return_unc_parameters=True, - ) - var = np.array(betas) / (np.array(alphas) - 1) - if i == 0: - sum_preds = np.array(preds) - sum_squared = np.square(preds) - sum_vars = np.array(var) - individual_vars = [var] - if self.individual_ensemble_predictions: - individual_preds = np.expand_dims(np.array(preds), axis=-1) - else: - sum_preds += np.array(preds) - sum_squared += np.square(preds) - sum_vars += np.array(var) - individual_vars.append(var) - if self.individual_ensemble_predictions: - individual_preds = np.append(individual_preds, np.expand_dims(preds, axis=-1), axis=-1) - - uncal_preds = sum_preds / self.num_models - uncal_vars = (sum_vars + sum_squared) / self.num_models \ - - np.square(sum_preds / self.num_models) - self.uncal_preds, self.uncal_vars = uncal_preds.tolist(), uncal_vars.tolist() - self.individual_vars = individual_vars - if self.individual_ensemble_predictions: - self.individual_preds = individual_preds.tolist() - - def get_uncal_output(self): - return self.uncal_vars - - -class EvidentialEpistemicPredictor(UncertaintyPredictor): - """ - Uses the evidential loss function to calculate epistemic uncertainty variance from - ancilliary loss function outputs. As presented in https://doi.org/10.1021/acscentsci.1c00546. - """ - @property - def label(self): - return "evidential_epistemic_uncal_var" - - def raise_argument_errors(self): - super().raise_argument_errors() - if self.loss_function != "evidential": - raise ValueError( - "In order to use evidential uncertainty, trained models must have used evidential regression loss function." - ) - if self.dataset_type != "regression": - raise ValueError( - "Evidential epistemic uncertainty is only compatible with regression dataset types." - ) - - def calculate_predictions(self): - for i, (model, scaler_list) in enumerate( - tqdm(zip(self.models, self.scalers), total=self.num_models) - ): - ( - scaler, - features_scaler, - atom_descriptor_scaler, - bond_feature_scaler, - ) = scaler_list - if ( - features_scaler is not None - or atom_descriptor_scaler is not None - or bond_feature_scaler is not None - ): - self.test_data.reset_features_and_targets() - if features_scaler is not None: - self.test_data.normalize_features(features_scaler) - if atom_descriptor_scaler is not None: - self.test_data.normalize_features( - atom_descriptor_scaler, scale_atom_descriptors=True - ) - if bond_feature_scaler is not None: - self.test_data.normalize_features( - bond_feature_scaler, scale_bond_features=True - ) - - preds, lambdas, alphas, betas = predict( - model=model, - data_loader=self.test_data_loader, - scaler=scaler, - return_unc_parameters=True, - ) - var = np.array(betas) / (np.array(lambdas) * (np.array(alphas) - 1)) - if i == 0: - sum_preds = np.array(preds) - sum_squared = np.square(preds) - sum_vars = np.array(var) - individual_vars = [var] - if self.individual_ensemble_predictions: - individual_preds = np.expand_dims(np.array(preds), axis=-1) - else: - sum_preds += np.array(preds) - sum_squared += np.square(preds) - sum_vars += np.array(var) - individual_vars.append(var) - if self.individual_ensemble_predictions: - individual_preds = np.append(individual_preds, np.expand_dims(preds, axis=-1), axis=-1) - - uncal_preds = sum_preds / self.num_models - uncal_vars = (sum_vars + sum_squared) / self.num_models \ - - np.square(sum_preds / self.num_models) - self.uncal_preds, self.uncal_vars = uncal_preds.tolist(), uncal_vars.tolist() - self.individual_vars = individual_vars - if self.individual_ensemble_predictions: - self.individual_preds = individual_preds.tolist() - - def get_uncal_output(self): - return self.uncal_vars - - -class EnsemblePredictor(UncertaintyPredictor): - """ - Class that predicts uncertainty for predictions based on the variance in predictions among - an ensemble's submodels. - """ - @property - def label(self): - return "ensemble_uncal_var" - - def raise_argument_errors(self): - super().raise_argument_errors() - if self.num_models == 1: - raise ValueError( - "Ensemble method for uncertainty is only available when multiple models are provided." - ) - - def calculate_predictions(self): - for i, (model, scaler_list) in enumerate( - tqdm(zip(self.models, self.scalers), total=self.num_models) - ): - ( - scaler, - features_scaler, - atom_descriptor_scaler, - bond_feature_scaler, - ) = scaler_list - if ( - features_scaler is not None - or atom_descriptor_scaler is not None - or bond_feature_scaler is not None - ): - self.test_data.reset_features_and_targets() - if features_scaler is not None: - self.test_data.normalize_features(features_scaler) - if atom_descriptor_scaler is not None: - self.test_data.normalize_features( - atom_descriptor_scaler, scale_atom_descriptors=True - ) - if bond_feature_scaler is not None: - self.test_data.normalize_features( - bond_feature_scaler, scale_bond_features=True - ) - preds = predict( - model=model, - data_loader=self.test_data_loader, - scaler=scaler, - return_unc_parameters=False, - ) - if self.dataset_type == "spectra": - preds = normalize_spectra( - spectra=preds, - phase_features=self.test_data.phase_features(), - phase_mask=self.spectra_phase_mask, - excluded_sub_value=float("nan"), - ) - if i == 0: - sum_preds = np.array(preds) - sum_squared = np.square(preds) - if self.individual_ensemble_predictions: - individual_preds = np.expand_dims(np.array(preds), axis=-1) - if model.train_class_sizes is not None: - self.train_class_sizes = [model.train_class_sizes] - else: - sum_preds += np.array(preds) - sum_squared += np.square(preds) - if self.individual_ensemble_predictions: - individual_preds = np.append(individual_preds, np.expand_dims(preds, axis=-1), axis=-1) - if model.train_class_sizes is not None: - self.train_class_sizes.append(model.train_class_sizes) - - uncal_preds = sum_preds / self.num_models - uncal_vars = sum_squared / self.num_models \ - - np.square(sum_preds) / self.num_models ** 2 - self.uncal_preds, self.uncal_vars = uncal_preds.tolist(), uncal_vars.tolist() - if self.individual_ensemble_predictions: - self.individual_preds = individual_preds.tolist() - - def get_uncal_output(self): - return self.uncal_vars - - -class DropoutPredictor(UncertaintyPredictor): - """ - Class that creates an artificial ensemble of models by applying monte carlo dropout to the loaded - model parameters. Predicts uncertainty for predictions based on the variance in predictions among - an ensemble's submodels. - """ - @property - def label(self): - return "dropout_uncal_var" - - def raise_argument_errors(self): - super().raise_argument_errors() - if self.num_models > 1: - raise ValueError( - "Dropout method for uncertainty should be used for a single model rather than an ensemble." - ) - - def calculate_predictions(self): - model = next(self.models) - ( - scaler, - features_scaler, - atom_descriptor_scaler, - bond_feature_scaler, - ) = next(self.scalers) - if ( - features_scaler is not None - or atom_descriptor_scaler is not None - or bond_feature_scaler is not None - ): - self.test_data.reset_features_and_targets() - if features_scaler is not None: - self.test_data.normalize_features(features_scaler) - if atom_descriptor_scaler is not None: - self.test_data.normalize_features( - atom_descriptor_scaler, scale_atom_descriptors=True - ) - if bond_feature_scaler is not None: - self.test_data.normalize_features( - bond_feature_scaler, scale_bond_features=True - ) - for i in range(self.dropout_sampling_size): - preds = predict( - model=model, - data_loader=self.test_data_loader, - scaler=scaler, - return_unc_parameters=False, - dropout_prob=self.uncertainty_dropout_p, - ) - if i == 0: - sum_preds = np.array(preds) - sum_squared = np.square(preds) - else: - sum_preds += np.array(preds) - sum_squared += np.square(preds) - - uncal_preds = sum_preds / self.dropout_sampling_size - uncal_vars = sum_squared / self.dropout_sampling_size \ - - np.square(sum_preds) / self.dropout_sampling_size ** 2 - self.uncal_preds, self.uncal_vars = uncal_preds.tolist(), uncal_vars.tolist() - - def get_uncal_output(self): - return self.uncal_vars - - -class ClassPredictor(UncertaintyPredictor): - """ - Class uses the [0,1] range of results from classification or multiclass models - as the indicator of confidence. Used for classification and multiclass dataset types. - """ - - @property - def label(self): - return "classification_uncal_confidence" - - def raise_argument_errors(self): - super().raise_argument_errors() - if self.dataset_type not in ["classification", "multiclass"]: - raise ValueError( - "Classification output uncertainty method must be used with dataset types classification or multiclass." - ) - - def calculate_predictions(self): - for i, (model, scaler_list) in enumerate( - tqdm(zip(self.models, self.scalers), total=self.num_models) - ): - ( - scaler, - features_scaler, - atom_descriptor_scaler, - bond_feature_scaler, - ) = scaler_list - if ( - features_scaler is not None - or atom_descriptor_scaler is not None - or bond_feature_scaler is not None - ): - self.test_data.reset_features_and_targets() - if features_scaler is not None: - self.test_data.normalize_features(features_scaler) - if atom_descriptor_scaler is not None: - self.test_data.normalize_features( - atom_descriptor_scaler, scale_atom_descriptors=True - ) - if bond_feature_scaler is not None: - self.test_data.normalize_features( - bond_feature_scaler, scale_bond_features=True - ) - - preds = predict( - model=model, - data_loader=self.test_data_loader, - scaler=scaler, - return_unc_parameters=False, - ) - if i == 0: - sum_preds = np.array(preds) - if self.individual_ensemble_predictions: - individual_preds = np.expand_dims(np.array(preds), axis=-1) - if model.train_class_sizes is not None: - self.train_class_sizes = [model.train_class_sizes] - else: - sum_preds += np.array(preds) - if self.individual_ensemble_predictions: - individual_preds = np.append(individual_preds, np.expand_dims(preds, axis=-1), axis=-1) - if model.train_class_sizes is not None: - self.train_class_sizes.append(model.train_class_sizes) - - self.uncal_preds = (sum_preds / self.num_models).tolist() - self.uncal_confidence = self.uncal_preds - if self.individual_ensemble_predictions: - self.individual_preds = individual_preds.tolist() - - def get_uncal_output(self): - return self.uncal_confidence - - -def build_uncertainty_predictor( - uncertainty_method: str, - test_data: MoleculeDataset, - test_data_loader: MoleculeDataLoader, - models: Iterator[MoleculeModel], - scalers: Iterator[StandardScaler], - num_models: int, - dataset_type: str, - loss_function: str, - uncertainty_dropout_p: float, - dropout_sampling_size: int, - individual_ensemble_predictions: bool, - spectra_phase_mask: List[List[bool]], -) -> UncertaintyPredictor: - """ - Function that chooses and returns the appropriate :class: `UncertaintyPredictor` subclass - for the provided arguments. - """ - - supported_predictors = { - None: NoUncertaintyPredictor, - "mve": MVEPredictor, - "ensemble": EnsemblePredictor, - "classification": ClassPredictor, - "evidential_total": EvidentialTotalPredictor, - "evidential_epistemic": EvidentialEpistemicPredictor, - "evidential_aleatoric": EvidentialAleatoricPredictor, - "dropout": DropoutPredictor, - "spectra_roundrobin": RoundRobinSpectraPredictor, - } - - predictor_class = supported_predictors.get(uncertainty_method, None) - - if predictor_class is None: - raise NotImplementedError( - f"Uncertainty predictor type {uncertainty_method} is not currently supported. Avalable options are: {list(supported_predictors.keys())}" - ) - else: - predictor = predictor_class( - test_data=test_data, - test_data_loader=test_data_loader, - models=models, - scalers=scalers, - num_models=num_models, - dataset_type=dataset_type, - loss_function=loss_function, - uncertainty_dropout_p=uncertainty_dropout_p, - dropout_sampling_size=dropout_sampling_size, - individual_ensemble_predictions=individual_ensemble_predictions, - spectra_phase_mask=spectra_phase_mask, - ) - return predictor diff --git a/chemprop/utils.py b/chemprop/utils.py deleted file mode 100644 index 3cc3c3b1a..000000000 --- a/chemprop/utils.py +++ /dev/null @@ -1,770 +0,0 @@ -from argparse import Namespace -import csv -from datetime import timedelta -from functools import wraps -import logging -import os -import pickle -import re -from time import time -from typing import Any, Callable, List, Tuple -import collections - -import torch -import torch.nn as nn -from torch.optim import Adam, Optimizer -from torch.optim.lr_scheduler import _LRScheduler -from tqdm import tqdm - -from chemprop.args import PredictArgs, TrainArgs, FingerprintArgs -from chemprop.data import StandardScaler, MoleculeDataset, preprocess_smiles_columns, get_task_names -from chemprop.models import MoleculeModel -from chemprop.nn_utils import NoamLR - - -def makedirs(path: str, isfile: bool = False) -> None: - """ - Creates a directory given a path to either a directory or file. - - If a directory is provided, creates that directory. If a file is provided (i.e. :code:`isfile == True`), - creates the parent directory for that file. - - :param path: Path to a directory or file. - :param isfile: Whether the provided path is a directory or file. - """ - if isfile: - path = os.path.dirname(path) - if path != "": - os.makedirs(path, exist_ok=True) - - -def save_checkpoint( - path: str, - model: MoleculeModel, - scaler: StandardScaler = None, - features_scaler: StandardScaler = None, - atom_descriptor_scaler: StandardScaler = None, - bond_feature_scaler: StandardScaler = None, - args: TrainArgs = None, -) -> None: - """ - Saves a model checkpoint. - - :param model: A :class:`~chemprop.models.model.MoleculeModel`. - :param scaler: A :class:`~chemprop.data.scaler.StandardScaler` fitted on the data. - :param features_scaler: A :class:`~chemprop.data.scaler.StandardScaler` fitted on the features. - :param atom_descriptor_scaler: A :class:`~chemprop.data.scaler.StandardScaler` fitted on the atom descriptors. - :param bond_feature_scaler: A :class:`~chemprop.data.scaler.StandardScaler` fitted on the bond_fetaures. - :param args: The :class:`~chemprop.args.TrainArgs` object containing the arguments the model was trained with. - :param path: Path where checkpoint will be saved. - """ - # Convert args to namespace for backwards compatibility - if args is not None: - args = Namespace(**args.as_dict()) - - data_scaler = {"means": scaler.means, "stds": scaler.stds} if scaler is not None else None - if features_scaler is not None: - features_scaler = {"means": features_scaler.means, "stds": features_scaler.stds} - if atom_descriptor_scaler is not None: - atom_descriptor_scaler = { - "means": atom_descriptor_scaler.means, - "stds": atom_descriptor_scaler.stds, - } - if bond_feature_scaler is not None: - bond_feature_scaler = {"means": bond_feature_scaler.means, "stds": bond_feature_scaler.stds} - - state = { - "args": args, - "state_dict": model.state_dict(), - "data_scaler": data_scaler, - "features_scaler": features_scaler, - "atom_descriptor_scaler": atom_descriptor_scaler, - "bond_feature_scaler": bond_feature_scaler, - } - torch.save(state, path) - - -def load_checkpoint( - path: str, device: torch.device = None, logger: logging.Logger = None -) -> MoleculeModel: - """ - Loads a model checkpoint. - - :param path: Path where checkpoint is saved. - :param device: Device where the model will be moved. - :param logger: A logger for recording output. - :return: The loaded :class:`~chemprop.models.model.MoleculeModel`. - """ - if logger is not None: - debug, info = logger.debug, logger.info - else: - debug = info = print - - # Load model and args - state = torch.load(path, map_location=lambda storage, loc: storage) - args = TrainArgs() - args.from_dict(vars(state["args"]), skip_unsettable=True) - loaded_state_dict = state["state_dict"] - - if device is not None: - args.device = device - - # Build model - model = MoleculeModel(args) - model_state_dict = model.state_dict() - - # Skip missing parameters and parameters of mismatched size - pretrained_state_dict = {} - for loaded_param_name in loaded_state_dict.keys(): - # Backward compatibility for parameter names - if re.match(r"(encoder\.encoder\.)([Wc])", loaded_param_name) and not args.reaction_solvent: - param_name = loaded_param_name.replace("encoder.encoder", "encoder.encoder.0") - else: - param_name = loaded_param_name - - # Load pretrained parameter, skipping unmatched parameters - if param_name not in model_state_dict: - info( - f'Warning: Pretrained parameter "{loaded_param_name}" cannot be found in model parameters.' - ) - elif model_state_dict[param_name].shape != loaded_state_dict[loaded_param_name].shape: - info( - f'Warning: Pretrained parameter "{loaded_param_name}" ' - f"of shape {loaded_state_dict[loaded_param_name].shape} does not match corresponding " - f"model parameter of shape {model_state_dict[param_name].shape}." - ) - else: - debug(f'Loading pretrained parameter "{loaded_param_name}".') - pretrained_state_dict[param_name] = loaded_state_dict[loaded_param_name] - - # Load pretrained weights - model_state_dict.update(pretrained_state_dict) - model.load_state_dict(model_state_dict) - - if args.cuda: - debug("Moving model to cuda") - model = model.to(args.device) - - return model - - -def overwrite_state_dict( - loaded_param_name: str, - model_param_name: str, - loaded_state_dict: collections.OrderedDict, - model_state_dict: collections.OrderedDict, - logger: logging.Logger = None, -) -> collections.OrderedDict: - """ - Overwrites a given parameter in the current model with the loaded model. - :param loaded_param_name: name of parameter in checkpoint model. - :param model_param_name: name of parameter in current model. - :param loaded_state_dict: state_dict for checkpoint model. - :param model_state_dict: state_dict for current model. - :param logger: A logger. - :return: The updated state_dict for the current model. - """ - debug = logger.debug if logger is not None else print - - if model_param_name not in model_state_dict: - debug(f'Pretrained parameter "{model_param_name}" cannot be found in model parameters.') - - elif model_state_dict[model_param_name].shape != loaded_state_dict[loaded_param_name].shape: - debug( - f'Pretrained parameter "{loaded_param_name}" ' - f"of shape {loaded_state_dict[loaded_param_name].shape} does not match corresponding " - f"model parameter of shape {model_state_dict[model_param_name].shape}." - ) - - else: - debug(f'Loading pretrained parameter "{model_param_name}".') - model_state_dict[model_param_name] = loaded_state_dict[loaded_param_name] - - return model_state_dict - - -def load_frzn_model( - model: torch.nn, - path: str, - current_args: Namespace = None, - cuda: bool = None, - logger: logging.Logger = None, -) -> MoleculeModel: - """ - Loads a model checkpoint. - :param path: Path where checkpoint is saved. - :param current_args: The current arguments. Replaces the arguments loaded from the checkpoint if provided. - :param cuda: Whether to move model to cuda. - :param logger: A logger. - :return: The loaded MoleculeModel. - """ - debug = logger.debug if logger is not None else print - - loaded_mpnn_model = torch.load(path, map_location=lambda storage, loc: storage) - loaded_state_dict = loaded_mpnn_model["state_dict"] - loaded_args = loaded_mpnn_model["args"] - - model_state_dict = model.state_dict() - - if loaded_args.number_of_molecules == 1 and current_args.number_of_molecules == 1: - encoder_param_names = [ - "encoder.encoder.0.W_i.weight", - "encoder.encoder.0.W_h.weight", - "encoder.encoder.0.W_o.weight", - "encoder.encoder.0.W_o.bias", - ] - if current_args.checkpoint_frzn is not None: - # Freeze the MPNN - for param_name in encoder_param_names: - model_state_dict = overwrite_state_dict( - param_name, param_name, loaded_state_dict, model_state_dict - ) - - if current_args.frzn_ffn_layers > 0: - ffn_param_names = [ - [f"ffn.{i*3+1}.weight", f"ffn.{i*3+1}.bias"] - for i in range(current_args.frzn_ffn_layers) - ] - ffn_param_names = [item for sublist in ffn_param_names for item in sublist] - - # Freeze MPNN and FFN layers - for param_name in encoder_param_names + ffn_param_names: - model_state_dict = overwrite_state_dict( - param_name, param_name, loaded_state_dict, model_state_dict - ) - - if current_args.freeze_first_only: - debug( - "WARNING: --freeze_first_only flag cannot be used with number_of_molecules=1 (flag is ignored)" - ) - - elif loaded_args.number_of_molecules == 1 and current_args.number_of_molecules > 1: - # TODO(degraff): these two `if`-blocks can be condensed into one - if ( - current_args.checkpoint_frzn is not None - and current_args.freeze_first_only - and current_args.frzn_ffn_layers <= 0 - ): # Only freeze first MPNN - encoder_param_names = [ - "encoder.encoder.0.W_i.weight", - "encoder.encoder.0.W_h.weight", - "encoder.encoder.0.W_o.weight", - "encoder.encoder.0.W_o.bias", - ] - for param_name in encoder_param_names: - model_state_dict = overwrite_state_dict( - param_name, param_name, loaded_state_dict, model_state_dict - ) - if ( - current_args.checkpoint_frzn is not None - and not current_args.freeze_first_only - and current_args.frzn_ffn_layers <= 0 - ): # Duplicate encoder from frozen checkpoint and overwrite all encoders - loaded_encoder_param_names = [ - "encoder.encoder.0.W_i.weight", - "encoder.encoder.0.W_h.weight", - "encoder.encoder.0.W_o.weight", - "encoder.encoder.0.W_o.bias", - ] * current_args.number_of_molecules - - model_encoder_param_names = [ - [ - ( - f"encoder.encoder.{mol_num}.W_i.weight", - f"encoder.encoder.{mol_num}.W_h.weight", - f"encoder.encoder.{mol_num}.W_o.weight", - f"encoder.encoder.{mol_num}.W_o.bias", - ) - ] - for mol_num in range(current_args.number_of_molecules) - ] - model_encoder_param_names = [ - item for sublist in model_encoder_param_names for item in sublist - ] - - for loaded_param_name, model_param_name in zip( - loaded_encoder_param_names, model_encoder_param_names - ): - model_state_dict = overwrite_state_dict( - loaded_param_name, model_param_name, loaded_state_dict, model_state_dict - ) - - if current_args.frzn_ffn_layers > 0: - raise ValueError( - f"Number of molecules from checkpoint_frzn ({loaded_args.number_of_molecules}) " - f"must equal current number of molecules ({current_args.number_of_molecules})!" - ) - - elif loaded_args.number_of_molecules > 1 and current_args.number_of_molecules > 1: - if loaded_args.number_of_molecules != current_args.number_of_molecules: - raise ValueError( - f"Number of molecules in checkpoint_frzn ({loaded_args.number_of_molecules}) " - f"must either match current model ({current_args.number_of_molecules}) or equal 1." - ) - - if current_args.freeze_first_only: - raise ValueError( - f"Number of molecules in checkpoint_frzn ({loaded_args.number_of_molecules}) " - "must be equal to 1 for freeze_first_only to be used!" - ) - - if (current_args.checkpoint_frzn is not None) & (not (current_args.frzn_ffn_layers > 0)): - encoder_param_names = [ - [ - ( - f"encoder.encoder.{mol_num}.W_i.weight", - f"encoder.encoder.{mol_num}.W_h.weight", - f"encoder.encoder.{mol_num}.W_o.weight", - f"encoder.encoder.{mol_num}.W_o.bias", - ) - ] - for mol_num in range(current_args.number_of_molecules) - ] - encoder_param_names = [item for sublist in encoder_param_names for item in sublist] - - for param_name in encoder_param_names: - model_state_dict = overwrite_state_dict( - param_name, param_name, loaded_state_dict, model_state_dict - ) - - if current_args.frzn_ffn_layers > 0: - encoder_param_names = [ - [ - ( - f"encoder.encoder.{mol_num}.W_i.weight", - f"encoder.encoder.{mol_num}.W_h.weight", - f"encoder.encoder.{mol_num}.W_o.weight", - f"encoder.encoder.{mol_num}.W_o.bias", - ) - ] - for mol_num in range(current_args.number_of_molecules) - ] - encoder_param_names = [item for sublist in encoder_param_names for item in sublist] - ffn_param_names = [ - [f"ffn.{i+3+1}.weight", f"ffn.{i+3+1}.bias"] - for i in range(current_args.frzn_ffn_layers) - ] - ffn_param_names = [item for sublist in ffn_param_names for item in sublist] - - for param_name in encoder_param_names + ffn_param_names: - model_state_dict = overwrite_state_dict( - param_name, param_name, loaded_state_dict, model_state_dict - ) - - if current_args.frzn_ffn_layers >= current_args.ffn_num_layers: - raise ValueError( - f"Number of frozen FFN layers ({current_args.frzn_ffn_layers}) " - f"must be less than the number of FFN layers ({current_args.ffn_num_layers})!" - ) - - # Load pretrained weights - model.load_state_dict(model_state_dict) - - return model - - -def load_scalers( - path: str, -) -> Tuple[StandardScaler, StandardScaler, StandardScaler, StandardScaler]: - """ - Loads the scalers a model was trained with. - - :param path: Path where model checkpoint is saved. - :return: A tuple with the data :class:`~chemprop.data.scaler.StandardScaler` - and features :class:`~chemprop.data.scaler.StandardScaler`. - """ - state = torch.load(path, map_location=lambda storage, loc: storage) - - if state["data_scaler"] is not None: - scaler = StandardScaler(state["data_scaler"]["means"], state["data_scaler"]["stds"]) - else: - scaler = None - - if state["features_scaler"] is not None: - features_scaler = StandardScaler( - state["features_scaler"]["means"], state["features_scaler"]["stds"], replace_nan_token=0 - ) - else: - features_scaler = None - - if "atom_descriptor_scaler" in state.keys() and state["atom_descriptor_scaler"] is not None: - atom_descriptor_scaler = StandardScaler( - state["atom_descriptor_scaler"]["means"], - state["atom_descriptor_scaler"]["stds"], - replace_nan_token=0, - ) - else: - atom_descriptor_scaler = None - - if "bond_feature_scaler" in state.keys() and state["bond_feature_scaler"] is not None: - bond_feature_scaler = StandardScaler( - state["bond_feature_scaler"]["means"], - state["bond_feature_scaler"]["stds"], - replace_nan_token=0, - ) - else: - bond_feature_scaler = None - - return scaler, features_scaler, atom_descriptor_scaler, bond_feature_scaler - - -def load_args(path: str) -> TrainArgs: - """ - Loads the arguments a model was trained with. - - :param path: Path where model checkpoint is saved. - :return: The :class:`~chemprop.args.TrainArgs` object that the model was trained with. - """ - args = TrainArgs() - args.from_dict( - vars(torch.load(path, map_location=lambda storage, loc: storage)["args"]), - skip_unsettable=True, - ) - - return args - - -def load_task_names(path: str) -> List[str]: - """ - Loads the task names a model was trained with. - - :param path: Path where model checkpoint is saved. - :return: A list of the task names that the model was trained with. - """ - return load_args(path).task_names - - -def build_optimizer(model: nn.Module, args: TrainArgs) -> Optimizer: - """ - Builds a PyTorch Optimizer. - - :param model: The model to optimize. - :param args: A :class:`~chemprop.args.TrainArgs` object containing optimizer arguments. - :return: An initialized Optimizer. - """ - params = [{"params": model.parameters(), "lr": args.init_lr, "weight_decay": 0}] - - return Adam(params) - - -def build_lr_scheduler( - optimizer: Optimizer, args: TrainArgs, total_epochs: List[int] = None -) -> _LRScheduler: - """ - Builds a PyTorch learning rate scheduler. - - :param optimizer: The Optimizer whose learning rate will be scheduled. - :param args: A :class:`~chemprop.args.TrainArgs` object containing learning rate arguments. - :param total_epochs: The total number of epochs for which the model will be run. - :return: An initialized learning rate scheduler. - """ - # Learning rate scheduler - return NoamLR( - optimizer=optimizer, - warmup_epochs=[args.warmup_epochs], - total_epochs=total_epochs or [args.epochs] * args.num_lrs, - steps_per_epoch=args.train_data_size // args.batch_size, - init_lr=[args.init_lr], - max_lr=[args.max_lr], - final_lr=[args.final_lr], - ) - - -def create_logger(name: str, save_dir: str = None, quiet: bool = False) -> logging.Logger: - """ - Creates a logger with a stream handler and two file handlers. - - If a logger with that name already exists, simply returns that logger. - Otherwise, creates a new logger with a stream handler and two file handlers. - - The stream handler prints to the screen depending on the value of :code:`quiet`. - One file handler (:code:`verbose.log`) saves all logs, the other (:code:`quiet.log`) only saves important info. - - :param name: The name of the logger. - :param save_dir: The directory in which to save the logs. - :param quiet: Whether the stream handler should be quiet (i.e., print only important info). - :return: The logger. - """ - - if name in logging.root.manager.loggerDict: - return logging.getLogger(name) - - logger = logging.getLogger(name) - - logger.setLevel(logging.DEBUG) - logger.propagate = False - - # Set logger depending on desired verbosity - ch = logging.StreamHandler() - if quiet: - ch.setLevel(logging.INFO) - else: - ch.setLevel(logging.DEBUG) - logger.addHandler(ch) - - if save_dir is not None: - makedirs(save_dir) - - fh_v = logging.FileHandler(os.path.join(save_dir, "verbose.log")) - fh_v.setLevel(logging.DEBUG) - fh_q = logging.FileHandler(os.path.join(save_dir, "quiet.log")) - fh_q.setLevel(logging.INFO) - - logger.addHandler(fh_v) - logger.addHandler(fh_q) - - return logger - - -def timeit(logger_name: str = None) -> Callable[[Callable], Callable]: - """ - Creates a decorator which wraps a function with a timer that prints the elapsed time. - - :param logger_name: The name of the logger used to record output. If None, uses :code:`print` instead. - :return: A decorator which wraps a function with a timer that prints the elapsed time. - """ - - def timeit_decorator(func: Callable) -> Callable: - """ - A decorator which wraps a function with a timer that prints the elapsed time. - - :param func: The function to wrap with the timer. - :return: The function wrapped with the timer. - """ - - @wraps(func) - def wrap(*args, **kwargs) -> Any: - start_time = time() - result = func(*args, **kwargs) - delta = timedelta(seconds=round(time() - start_time)) - info = logging.getLogger(logger_name).info if logger_name is not None else print - info(f"Elapsed time = {delta}") - - return result - - return wrap - - return timeit_decorator - - -def save_smiles_splits( - data_path: str, - save_dir: str, - task_names: List[str] = None, - features_path: List[str] = None, - train_data: MoleculeDataset = None, - val_data: MoleculeDataset = None, - test_data: MoleculeDataset = None, - logger: logging.Logger = None, - smiles_columns: List[str] = None, -) -> None: - """ - Saves a csv file with train/val/test splits of target data and additional features. - Also saves indices of train/val/test split as a pickle file. Pickle file does not support repeated entries - with the same SMILES or entries entered from a path other than the main data path, such as a separate test path. - - :param data_path: Path to data CSV file. - :param save_dir: Path where pickle files will be saved. - :param task_names: List of target names for the model as from the function get_task_names(). - If not provided, will use datafile header entries. - :param features_path: List of path(s) to files with additional molecule features. - :param train_data: Train :class:`~chemprop.data.data.MoleculeDataset`. - :param val_data: Validation :class:`~chemprop.data.data.MoleculeDataset`. - :param test_data: Test :class:`~chemprop.data.data.MoleculeDataset`. - :param smiles_columns: The name of the column containing SMILES. By default, uses the first column. - :param logger: A logger for recording output. - """ - makedirs(save_dir) - - info = logger.info if logger is not None else print - save_split_indices = True - - if not isinstance(smiles_columns, list): - smiles_columns = preprocess_smiles_columns(path=data_path, smiles_columns=smiles_columns) - - with open(data_path) as f: - reader = csv.DictReader(f) - - indices_by_smiles = {} - for i, row in enumerate(tqdm(reader)): - smiles = tuple([row[column] for column in smiles_columns]) - if smiles in indices_by_smiles: - save_split_indices = False - info( - "Warning: Repeated SMILES found in data, pickle file of split indices cannot distinguish entries and will not be generated." - ) - break - indices_by_smiles[smiles] = i - - if task_names is None: - task_names = get_task_names(path=data_path, smiles_columns=smiles_columns) - - features_header = [] - if features_path is not None: - for feat_path in features_path: - with open(feat_path, "r") as f: - reader = csv.reader(f) - feat_header = next(reader) - features_header.extend(feat_header) - - all_split_indices = [] - for dataset, name in [(train_data, "train"), (val_data, "val"), (test_data, "test")]: - if dataset is None: - continue - - with open(os.path.join(save_dir, f"{name}_smiles.csv"), "w") as f: - writer = csv.writer(f) - if smiles_columns[0] == "": - writer.writerow(["smiles"]) - else: - writer.writerow(smiles_columns) - for smiles in dataset.smiles(): - writer.writerow(smiles) - - with open(os.path.join(save_dir, f"{name}_full.csv"), "w") as f: - writer = csv.writer(f) - writer.writerow(smiles_columns + task_names) - dataset_targets = dataset.targets() - for i, smiles in enumerate(dataset.smiles()): - writer.writerow(smiles + dataset_targets[i]) - - if features_path is not None: - dataset_features = dataset.features() - with open(os.path.join(save_dir, f"{name}_features.csv"), "w") as f: - writer = csv.writer(f) - writer.writerow(features_header) - writer.writerows(dataset_features) - - if save_split_indices: - split_indices = [] - for smiles in dataset.smiles(): - index = indices_by_smiles.get(tuple(smiles)) - if index is None: - save_split_indices = False - info( - f"Warning: SMILES string in {name} could not be found in data file, and " - "likely came from a secondary data file. The pickle file of split indices " - "can only indicate indices for a single file and will not be generated." - ) - break - split_indices.append(index) - else: - split_indices.sort() - all_split_indices.append(split_indices) - - if name == "train": - data_weights = dataset.data_weights() - if any([w != 1 for w in data_weights]): - with open(os.path.join(save_dir, f"{name}_weights.csv"), "w") as f: - writer = csv.writer(f) - writer.writerow(["data weights"]) - for weight in data_weights: - writer.writerow([weight]) - - if save_split_indices: - with open(os.path.join(save_dir, "split_indices.pckl"), "wb") as f: - pickle.dump(all_split_indices, f) - - -def update_prediction_args( - predict_args: PredictArgs, - train_args: TrainArgs, - missing_to_defaults: bool = True, - validate_feature_sources: bool = True, -) -> None: - """ - Updates prediction arguments with training arguments loaded from a checkpoint file. - If an argument is present in both, the prediction argument will be used. - - Also raises errors for situations where the prediction arguments and training arguments - are different but must match for proper function. - - :param predict_args: The :class:`~chemprop.args.PredictArgs` object containing the arguments to use for making predictions. - :param train_args: The :class:`~chemprop.args.TrainArgs` object containing the arguments used to train the model previously. - :param missing_to_defaults: Whether to replace missing training arguments with the current defaults for :class: `~chemprop.args.TrainArgs`. - This is used for backwards compatibility. - :param validate_feature_sources: Indicates whether the feature sources (from path or generator) are checked for consistency between - the training and prediction arguments. This is not necessary for fingerprint generation, where molecule features are not used. - """ - for key, value in vars(train_args).items(): - if not hasattr(predict_args, key): - setattr(predict_args, key, value) - - if missing_to_defaults: - # If a default argument would cause different behavior than occurred in legacy checkpoints before the argument existed, - # then that argument must be included in the `override_defaults` dictionary to force the legacy behavior. - override_defaults = { - "bond_features_scaling": False, - "no_bond_features_scaling": True, - "atom_descriptors_scaling": False, - "no_atom_descriptors_scaling": True, - } - default_train_args = TrainArgs().parse_args( - ["--data_path", None, "--dataset_type", str(train_args.dataset_type)] - ) - for key, value in vars(default_train_args).items(): - if not hasattr(predict_args, key): - setattr(predict_args, key, override_defaults.get(key, value)) - - # Same number of molecules must be used in training as in making predictions - if train_args.number_of_molecules != predict_args.number_of_molecules and not ( - isinstance(predict_args, FingerprintArgs) - and predict_args.fingerprint_type == "MPN" - and predict_args.mpn_shared - and predict_args.number_of_molecules == 1 - ): - raise ValueError( - "A different number of molecules was used in training " - "model than is specified for prediction. This is only supported for models with shared MPN networks" - f"and a fingerprint type of MPN. {train_args.number_of_molecules} smiles fields must be provided." - ) - - # If atom-descriptors were used during training, they must be used when predicting and vice-versa - if train_args.atom_descriptors != predict_args.atom_descriptors: - raise ValueError( - "The use of atom descriptors is inconsistent between training and prediction. If atom descriptors " - " were used during training, they must be specified again during prediction using the same type of " - " descriptors as before. If they were not used during training, they cannot be specified during prediction." - ) - - # If bond features were used during training, they must be used when predicting and vice-versa - if (train_args.bond_features_path is None) != (predict_args.bond_features_path is None): - raise ValueError( - "The use of bond descriptors is different between training and prediction. If you used bond " - "descriptors for training, please specify a path to new bond descriptors for prediction." - ) - - # if atom or bond features were scaled, the same must be done during prediction - if train_args.features_scaling != predict_args.features_scaling: - raise ValueError( - "If scaling of the additional features was done during training, the " - "same must be done during prediction." - ) - - # If atom descriptors were used during training, they must be used when predicting and vice-versa - if train_args.atom_descriptors != predict_args.atom_descriptors: - raise ValueError( - "The use of atom descriptors is inconsistent between training and prediction. " - "If atom descriptors were used during training, they must be specified again " - "during prediction using the same type of descriptors as before. " - "If they were not used during training, they cannot be specified during prediction." - ) - - # If bond features were used during training, they must be used when predicting and vice-versa - if (train_args.bond_features_path is None) != (predict_args.bond_features_path is None): - raise ValueError( - "The use of bond descriptors is different between training and prediction. If you used bond" - "descriptors for training, please specify a path to new bond descriptors for prediction." - ) - - # If features were used during training, they must be used when predicting - if validate_feature_sources: - if ((train_args.features_path is None) != (predict_args.features_path is None)) or ( - (train_args.features_generator is None) != (predict_args.features_generator is None) - ): - raise ValueError( - "Features were used during training so they must be specified again during " - "prediction using the same type of features as before " - "(with either --features_generator or --features_path " - "and using --no_features_scaling if applicable)." - ) diff --git a/chemprop/utils/__init__.py b/chemprop/utils/__init__.py new file mode 100644 index 000000000..0ef5dbaf5 --- /dev/null +++ b/chemprop/utils/__init__.py @@ -0,0 +1,4 @@ +from .registry import ClassRegistry, Factory +from .utils import EnumMapping, make_mol, pretty_shape + +__all__ = ["ClassRegistry", "Factory", "EnumMapping", "make_mol", "pretty_shape"] diff --git a/chemprop/utils/registry.py b/chemprop/utils/registry.py new file mode 100644 index 000000000..a4c362d7e --- /dev/null +++ b/chemprop/utils/registry.py @@ -0,0 +1,46 @@ +import inspect +from typing import Any, Iterable, Type, TypeVar + +T = TypeVar("T") + + +class ClassRegistry(dict[str, Type[T]]): + def register(self, alias: Any | Iterable[Any] | None = None): + def decorator(cls): + if alias is None: + keys = [cls.__name__.lower()] + elif isinstance(alias, str): + keys = [alias] + else: + keys = alias + + cls.alias = keys[0] + for k in keys: + self[k] = cls + + return cls + + return decorator + + __call__ = register + + def __repr__(self) -> str: # pragma: no cover + return f"{self.__class__.__name__}: {super().__repr__()}" + + def __str__(self) -> str: # pragma: no cover + INDENT = 4 + items = [f"{' ' * INDENT}{repr(k)}: {repr(v)}" for k, v in self.items()] + + return "\n".join([f"{self.__class__.__name__} {'{'}", ",\n".join(items), "}"]) + + +class Factory: + @classmethod + def build(cls, clz_T: Type[T], *args, **kwargs) -> T: + if not inspect.isclass(clz_T): + raise TypeError(f"Expected a class type! got: {type(clz_T)}") + + sig = inspect.signature(clz_T) + kwargs = {k: v for k, v in kwargs.items() if k in sig.parameters.keys()} + + return clz_T(*args, **kwargs) diff --git a/chemprop/utils/utils.py b/chemprop/utils/utils.py new file mode 100644 index 000000000..4efd503b0 --- /dev/null +++ b/chemprop/utils/utils.py @@ -0,0 +1,74 @@ +from __future__ import annotations + +from enum import StrEnum +from typing import Iterable, Iterator + +from rdkit import Chem + + +class EnumMapping(StrEnum): + @classmethod + def get(cls, name: str | EnumMapping) -> EnumMapping: + if isinstance(name, cls): + return name + + try: + return cls[name.upper()] + except KeyError: + raise KeyError( + f"Unsupported {cls.__name__} member! got: '{name}'. expected one of: {cls.keys()}" + ) + + @classmethod + def keys(cls) -> Iterator[str]: + return (e.name for e in cls) + + @classmethod + def values(cls) -> Iterator[str]: + return (e.value for e in cls) + + @classmethod + def items(cls) -> Iterator[tuple[str, str]]: + return zip(cls.keys(), cls.values()) + + +def make_mol(smi: str, keep_h: bool, add_h: bool) -> Chem.Mol: + """build an RDKit molecule from a SMILES string. + + Parameters + ---------- + smi : str + a SMILES string. + keep_h : bool + whether to keep hydrogens in the input smiles. This does not add hydrogens, it only keeps them if they are specified + add_h : bool + whether to add hydrogens to the molecule + + Returns + ------- + Chem.Mol + the RDKit molecule. + """ + if keep_h: + mol = Chem.MolFromSmiles(smi, sanitize=False) + Chem.SanitizeMol( + mol, sanitizeOps=Chem.SanitizeFlags.SANITIZE_ALL ^ Chem.SanitizeFlags.SANITIZE_ADJUSTHS + ) + else: + mol = Chem.MolFromSmiles(smi) + + return Chem.AddHs(mol) if add_h else mol + + +def pretty_shape(shape: Iterable[int]) -> str: + """Make a pretty string from an input shape + + Example + -------- + >>> X = np.random.rand(10, 4) + >>> X.shape + (10, 4) + >>> pretty_shape(X.shape) + '10 x 4' + """ + return " x ".join(map(str, shape)) diff --git a/chemprop/utils/v1_to_v2.py b/chemprop/utils/v1_to_v2.py new file mode 100644 index 000000000..1b00f13a1 --- /dev/null +++ b/chemprop/utils/v1_to_v2.py @@ -0,0 +1,151 @@ +from os import PathLike + +from lightning.pytorch import __version__ +from lightning.pytorch.utilities.parsing import AttributeDict +import torch + +from chemprop.nn.metrics import MetricRegistry +from chemprop.nn.agg import AggregationRegistry +from chemprop.nn.predictors import PredictorRegistry +from chemprop.nn.loss import LossFunctionRegistry +from chemprop.nn.message_passing import AtomMessagePassing, BondMessagePassing +from chemprop.utils import Factory +from chemprop.nn.transforms import UnscaleTransform + + +def convert_state_dict_v1_to_v2(model_v1_dict: dict) -> dict: + """Converts v1 model dictionary to a v2 state dictionary""" + + state_dict_v2 = {} + args_v1 = model_v1_dict["args"] + + state_dict_v1 = model_v1_dict["state_dict"] + state_dict_v2["message_passing.W_i.weight"] = state_dict_v1["encoder.encoder.0.W_i.weight"] + state_dict_v2["message_passing.W_h.weight"] = state_dict_v1["encoder.encoder.0.W_h.weight"] + state_dict_v2["message_passing.W_o.weight"] = state_dict_v1["encoder.encoder.0.W_o.weight"] + state_dict_v2["message_passing.W_o.bias"] = state_dict_v1["encoder.encoder.0.W_o.bias"] + + for i in range(args_v1.ffn_num_layers): + suffix = 0 if i == 0 else 2 + state_dict_v2[f"predictor.ffn.{i}.{suffix}.weight"] = state_dict_v1[ + f"readout.{i*3+1}.weight" + ] + state_dict_v2[f"predictor.ffn.{i}.{suffix}.bias"] = state_dict_v1[f"readout.{i*3+1}.bias"] + + if args_v1.dataset_type == "regression": + state_dict_v2["predictor.output_transform.mean"] = torch.tensor( + model_v1_dict["data_scaler"]["means"], dtype=torch.float32 + ).unsqueeze(0) + state_dict_v2["predictor.output_transform.scale"] = torch.tensor( + model_v1_dict["data_scaler"]["stds"], dtype=torch.float32 + ).unsqueeze(0) + + if args_v1.target_weights is not None: + task_weights = torch.tensor(args_v1.target_weights).unsqueeze(0) + else: + task_weights = torch.ones(args_v1.num_tasks).unsqueeze(0) + + state_dict_v2["predictor.criterion.task_weights"] = task_weights + + return state_dict_v2 + + +def convert_hyper_parameters_v1_to_v2(model_v1_dict: dict) -> dict: + """Converts v1 model dictionary to v2 hyper_parameters dictionary""" + hyper_parameters_v2 = {} + + args_v1 = model_v1_dict["args"] + hyper_parameters_v2["batch_norm"] = False + hyper_parameters_v2["metrics"] = [Factory.build(MetricRegistry[args_v1.metric])] + hyper_parameters_v2["warmup_epochs"] = args_v1.warmup_epochs + hyper_parameters_v2["init_lr"] = args_v1.init_lr + hyper_parameters_v2["max_lr"] = args_v1.max_lr + hyper_parameters_v2["final_lr"] = args_v1.final_lr + + # convert the message passing block + W_i_shape = model_v1_dict["state_dict"]["encoder.encoder.0.W_i.weight"].shape + W_h_shape = model_v1_dict["state_dict"]["encoder.encoder.0.W_h.weight"].shape + W_o_shape = model_v1_dict["state_dict"]["encoder.encoder.0.W_o.weight"].shape + + d_h = W_i_shape[0] + d_v = W_o_shape[1] - d_h + d_e = W_h_shape[1] - d_h if args_v1.atom_messages else W_i_shape[1] - d_v + + hyper_parameters_v2["message_passing"] = AttributeDict( + { + "activation": args_v1.activation, + "bias": args_v1.bias, + "cls": BondMessagePassing if not args_v1.atom_messages else AtomMessagePassing, + "d_e": d_e, # the feature dimension of the edges + "d_h": args_v1.hidden_size, # dimension of the hidden layer + "d_v": d_v, # the feature dimension of the vertices + "d_vd": None, # ``d_vd`` is the number of additional features that will be concatenated to atom-level features *after* message passing + "depth": args_v1.depth, + "dropout": args_v1.dropout, + "undirected": args_v1.undirected, + } + ) + + # convert the aggregation block + hyper_parameters_v2["agg"] = { + "dim": 0, # in v1, the aggregation is always done on the atom features + "cls": AggregationRegistry[args_v1.aggregation], + } + if args_v1.aggregation == "norm": + hyper_parameters_v2["agg"]["norm"] = args_v1.aggregation_norm + + # convert the predictor block + if args_v1.target_weights is not None: + task_weights = torch.tensor(args_v1.target_weights).unsqueeze(0) + else: + task_weights = torch.ones(args_v1.num_tasks).unsqueeze(0) + + hyper_parameters_v2["predictor"] = AttributeDict( + { + "activation": args_v1.activation, + "cls": PredictorRegistry[args_v1.dataset_type], + "criterion": Factory.build( + LossFunctionRegistry[args_v1.loss_function], task_weights=task_weights + ), + "task_weights": None, + "dropout": args_v1.dropout, + "hidden_dim": args_v1.ffn_hidden_size, + "input_dim": args_v1.hidden_size, + "n_layers": args_v1.ffn_num_layers - 1, + "n_tasks": args_v1.num_tasks, + } + ) + + if args_v1.dataset_type == "regression": + hyper_parameters_v2["predictor"]["output_transform"] = UnscaleTransform( + model_v1_dict["data_scaler"]["means"], model_v1_dict["data_scaler"]["stds"] + ) + + return hyper_parameters_v2 + + +def convert_model_dict_v1_to_v2(model_v1_dict: dict) -> dict: + """Converts a v1 model dictionary from a loaded .pt file to a v2 model dictionary""" + + model_v2_dict = {} + + model_v2_dict["epoch"] = None + model_v2_dict["global_step"] = None + model_v2_dict["pytorch-lightning_version"] = __version__ + model_v2_dict["state_dict"] = convert_state_dict_v1_to_v2(model_v1_dict) + model_v2_dict["loops"] = None + model_v2_dict["callbacks"] = None + model_v2_dict["optimizer_states"] = None + model_v2_dict["lr_schedulers"] = None + model_v2_dict["hparams_name"] = "kwargs" + model_v2_dict["hyper_parameters"] = convert_hyper_parameters_v1_to_v2(model_v1_dict) + + return model_v2_dict + + +def convert_model_file_v1_to_v2(model_v1_file: PathLike, model_v2_file: PathLike) -> None: + """Converts a v1 model .pt file to a v2 model .ckpt file""" + + model_v1_dict = torch.load(model_v1_file) + model_v2_dict = convert_model_dict_v1_to_v2(model_v1_dict) + torch.save(model_v2_dict, model_v2_file) diff --git a/chemprop/web/__init__.py b/chemprop/web/__init__.py deleted file mode 100644 index fca384e5d..000000000 --- a/chemprop/web/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from chemprop.web.run import chemprop_web diff --git a/chemprop/web/app/__init__.py b/chemprop/web/app/__init__.py deleted file mode 100644 index 913e94378..000000000 --- a/chemprop/web/app/__init__.py +++ /dev/null @@ -1,17 +0,0 @@ -"""Runs the web interface version of chemprop, allowing for training and predicting in a web browser.""" -import os - -from flask import Flask - -from chemprop.web.utils import set_root_folder - - -app = Flask(__name__) -app.config.from_object('chemprop.web.config') -set_root_folder( - app=app, - root_folder=os.path.dirname(os.path.dirname(os.path.realpath(__file__))), - create_folders=False -) - -from chemprop.web.app import views diff --git a/chemprop/web/app/db.py b/chemprop/web/app/db.py deleted file mode 100644 index e1fdafdf4..000000000 --- a/chemprop/web/app/db.py +++ /dev/null @@ -1,287 +0,0 @@ -"""Defines a number of database helper functions.""" - -import os -import shutil -import sqlite3 -from typing import Any, Dict, List, Optional, Tuple, Union - -from flask import current_app, Flask, g - -from chemprop.web.app import app - - -DB_PATH = 'chemprop.sqlite3' - - -def init_app(app: Flask): - global DB_PATH - - app.teardown_appcontext(close_db) - DB_PATH = app.config['DB_PATH'] - - -def init_db(): - """ - Initializes the database by running schema.sql. - This will wipe existing tables and the corresponding files. - """ - shutil.rmtree(app.config['DATA_FOLDER']) - os.makedirs(app.config['DATA_FOLDER']) - - shutil.rmtree(app.config['CHECKPOINT_FOLDER']) - os.makedirs(app.config['CHECKPOINT_FOLDER']) - - db = get_db() - - with current_app.open_resource('schema.sql') as f: - db.executescript(f.read().decode('utf8')) - - -def get_db(): - """ - Connects to the database. - Returns a database object that can be queried. - """ - if 'db' not in g: - g.db = sqlite3.connect( - DB_PATH, - detect_types=sqlite3.PARSE_DECLTYPES - ) - g.db.row_factory = sqlite3.Row - - return g.db - - -def query_db(query: str, args: Tuple[Any] = (), one: bool = False) -> Union[Optional[sqlite3.Row], List[sqlite3.Row]]: - """ - Helper function to allow for easy queries. - - :param query: The query to be executed. - :param args: The arguments to be passed into the query. - :param one: Whether the query should return all results or just the first. - :return The results of the query. - """ - cur = get_db().execute(query, args) - rv = cur.fetchall() - cur.close() - return (rv[0] if rv else None) if one else rv - - -def close_db(e: Optional[Any] = None): - """ - Closes the connection to the database. Called after every request. - - :param e: Error object from last call. - """ - db = g.pop('db', None) - - if db is not None: - db.close() - - -# Table Specific Functions -def get_all_users() -> Dict[int, Dict[str, Any]]: - """ - Returns all users. - - :return A dictionary of users with their ids as keys. - """ - rows = query_db("SELECT * FROM user") - - return {row['id']: {"username": row['username'], "preferences": row['preferences']} for row in rows} if rows else {} - - -def insert_user(username: str) -> Tuple[int, str]: - """ - Inserts a new user. If the desired username is already taken, - appends integers incrementally until an open name is found. - - :param username: The desired username for the new user. - :return A tuple containing the id and name of the new user. - """ - db = get_db() - - new_user_id = None - count = 0 - while new_user_id is None: - temp_name = username - - if count != 0: - temp_name += str(count) - try: - cur = db.execute('INSERT INTO user (username) VALUES (?)', [temp_name]) - new_user_id = cur.lastrowid - except sqlite3.IntegrityError: - count += 1 - - db.commit() - cur.close() - - return new_user_id, temp_name - - -def get_ckpts(user_id: int) -> List[sqlite3.Row]: - """ - Returns the checkpoints associated with the given user. - If no user_id is provided, return the checkpoints associated - with the default user. - - :param user_id: The id of the user whose checkpoints are returned. - :return A list of checkpoints. - """ - if not user_id: - user_id = app.config['DEFAULT_USER_ID'] - - return query_db(f'SELECT * FROM ckpt WHERE associated_user = {user_id}') - - -def insert_ckpt(ckpt_name: str, - associated_user: str, - model_class: str, - num_epochs: int, - ensemble_size: int, - training_size: int) -> Tuple[int, str]: - """ - Inserts a new checkpoint. If the desired name is already taken, - appends integers incrementally until an open name is found. - - :param ckpt_name: The desired name for the new checkpoint. - :param associated_user: The user that should be associated with the new checkpoint. - :param model_class: The class of the new checkpoint. - :param num_epochs: The number of epochs the new checkpoint will run for. - :param ensemble_size: The number of models included in the ensemble. - :param training_size: The number of molecules used for training. - :return A tuple containing the id and name of the new checkpoint. - """ - db = get_db() - - new_ckpt_id = None - count = 0 - while new_ckpt_id is None: - temp_name = ckpt_name - - if count != 0: - temp_name += str(count) - try: - cur = db.execute('INSERT INTO ckpt ' - '(ckpt_name, associated_user, class, epochs, ensemble_size, training_size) ' - 'VALUES (?, ?, ?, ?, ?, ?)', - [temp_name, associated_user, model_class, num_epochs, ensemble_size, training_size]) - new_ckpt_id = cur.lastrowid - except sqlite3.IntegrityError: - count += 1 - continue - - db.commit() - cur.close() - - return new_ckpt_id, temp_name - - -def delete_ckpt(ckpt_id: int): - """ - Removes the checkpoint with the specified id from the database, - associated model columns, and the corresponding files. - - :param ckpt_id: The id of the checkpoint to be deleted. - """ - rows = query_db(f'SELECT * FROM model WHERE associated_ckpt = {ckpt_id}') - - for row in rows: - os.remove(os.path.join(app.config['CHECKPOINT_FOLDER'], f'{row["id"]}.pt')) - - db = get_db() - cur = db.cursor() - db.execute(f'DELETE FROM ckpt WHERE id = {ckpt_id}') - db.execute(f'DELETE FROM model WHERE associated_ckpt = {ckpt_id}') - db.commit() - cur.close() - - -def get_models(ckpt_id: int) -> List[sqlite3.Row]: - """ - Returns the models associated with the given ckpt. - - :param ckpt_id: The id of the ckpt whose component models are returned. - :return A list of models. - """ - return query_db(f'SELECT * FROM model WHERE associated_ckpt = {ckpt_id}') - - -def insert_model(ckpt_id: int) -> str: - """ - Inserts a new model. - - :param ckpt_id: The id of the checkpoint this model should be associated with. - :return: The id of the new model. - """ - db = get_db() - cur = db.execute('INSERT INTO model (associated_ckpt) VALUES (?)', [ckpt_id]) - new_model_id = cur.lastrowid - db.commit() - cur.close() - - return new_model_id - - -def get_datasets(user_id: int) -> List[sqlite3.Row]: - """ - Returns the datasets associated with the given user. - If no user_id is provided, return the datasets associated - with the default user. - - :param user_id: The id of the user whose datasets are returned. - :return A list of datasets. - """ - if not user_id: - user_id = app.config['DEFAULT_USER_ID'] - - return query_db(f'SELECT * FROM dataset WHERE associated_user = {user_id}') - - -def insert_dataset(dataset_name: str, - associated_user: str, - dataset_class: str) -> Tuple[int, str]: - """ - Inserts a new dataset. If the desired name is already taken, - appends integers incrementally until an open name is found. - - :param dataset_name: The desired name for the new dataset. - :param associated_user: The user to be associated with the new dataset. - :param dataset_class: The class of the new dataset. - :return A tuple containing the id and name of the new dataset. - """ - db = get_db() - - new_dataset_id = None - count = 0 - while new_dataset_id is None: - temp_name = dataset_name - - if count != 0: - temp_name += str(count) - try: - cur = db.execute('INSERT INTO dataset (dataset_name, associated_user, class) VALUES (?, ?, ?)', - [temp_name, associated_user, dataset_class]) - new_dataset_id = cur.lastrowid - except sqlite3.IntegrityError: - count += 1 - continue - - db.commit() - cur.close() - - return new_dataset_id, temp_name - - -def delete_dataset(dataset_id: int): - """ - Removes the dataset with the specified id from the database, - and deletes the corresponding file. - - :param dataset_id: The id of the dataset to be deleted. - """ - db = get_db() - cur = db.execute(f'DELETE FROM dataset WHERE id = {dataset_id}') - db.commit() - cur.close() diff --git a/chemprop/web/app/schema.sql b/chemprop/web/app/schema.sql deleted file mode 100644 index aafb549a7..000000000 --- a/chemprop/web/app/schema.sql +++ /dev/null @@ -1,43 +0,0 @@ -DROP TABLE IF EXISTS user; -DROP TABLE IF EXISTS ckpt; -DROP TABLE IF EXISTS model; -DROP TABLE IF EXISTS dataset; - -CREATE TABLE user ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - username TEXT UNIQUE NOT NULL, - preferences JSON -); - -CREATE TABLE ckpt ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - ckpt_name TEXT NOT NULL, - associated_user INTEGER NOT NULL, - created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - class TEXT NOT NULL, - stats JSON, - epochs INTEGER NOT NULL DEFAULT 30, - ensemble_size INTEGER NOT NULL, - training_size INTEGER NOT NULL, - completed BOOLEAN NOT NULL DEFAULT 0, - FOREIGN KEY (associated_user) REFERENCES user (id), - CONSTRAINT uq_ckpt_names UNIQUE(ckpt_name, associated_user) -); - -CREATE TABLE model ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - associated_ckpt INTEGER NOT NULL, - FOREIGN KEY (associated_ckpt) REFERENCES ckpt (id) -); - -CREATE TABLE dataset ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - dataset_name TEXT NOT NULL, - associated_user INTEGER NOT NULL, - created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - class TEXT NOT NULL, - FOREIGN KEY (associated_user) REFERENCES user (id), - CONSTRAINT uq_dataset_names UNIQUE(dataset_name, associated_user) -); - -INSERT INTO user (username) VALUES ("DEFAULT") \ No newline at end of file diff --git a/chemprop/web/app/static/images/message_passing.png b/chemprop/web/app/static/images/message_passing.png deleted file mode 100644 index 81d2ba517..000000000 Binary files a/chemprop/web/app/static/images/message_passing.png and /dev/null differ diff --git a/chemprop/web/app/static/images/web_predict.png b/chemprop/web/app/static/images/web_predict.png deleted file mode 100644 index a747d0992..000000000 Binary files a/chemprop/web/app/static/images/web_predict.png and /dev/null differ diff --git a/chemprop/web/app/static/images/web_train.png b/chemprop/web/app/static/images/web_train.png deleted file mode 100644 index 600f1735e..000000000 Binary files a/chemprop/web/app/static/images/web_train.png and /dev/null differ diff --git a/chemprop/web/app/static/jsme/.directory b/chemprop/web/app/static/jsme/.directory deleted file mode 100644 index 5f3810a46..000000000 --- a/chemprop/web/app/static/jsme/.directory +++ /dev/null @@ -1,5 +0,0 @@ -[Dolphin] -SortOrder=1 -Timestamp=2015,5,31,16,7,38 -Version=3 -ViewMode=1 diff --git a/chemprop/web/app/static/jsme/JME_to_JSME.html b/chemprop/web/app/static/jsme/JME_to_JSME.html deleted file mode 100644 index 72e7cf63b..000000000 --- a/chemprop/web/app/static/jsme/JME_to_JSME.html +++ /dev/null @@ -1,31 +0,0 @@ - - -JME to JSME migration. Part 1 - - - - -

JME to JSME migration

-
- You have to enable JavaScript in your browser to use JSME ! -
-The variable name "jme" refers to the applet document.jme . - -
- The applet can also be accessed via document.jsapplets[0]. - -

- -JSME in depict mode: -
-You have to enable JavaScript on your machine ! - - - - You have to enable JavaScript in your browser to use JSME ! - - -
- - - \ No newline at end of file diff --git a/chemprop/web/app/static/jsme/JME_to_JSME_simple.html b/chemprop/web/app/static/jsme/JME_to_JSME_simple.html deleted file mode 100644 index 6d91d1a28..000000000 --- a/chemprop/web/app/static/jsme/JME_to_JSME_simple.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - JME Example - - - -
- You have to enable JavaScript in your browser to use JSME ! -
- - \ No newline at end of file diff --git a/chemprop/web/app/static/jsme/JSME.html b/chemprop/web/app/static/jsme/JSME.html deleted file mode 100644 index c40cb6fce..000000000 --- a/chemprop/web/app/static/jsme/JSME.html +++ /dev/null @@ -1,180 +0,0 @@ - - - - - - - - - -JSME demo page - - - - - - - - - - - - - - - - -

JSME demo page

- - - - - -
- - - - - - - - - - - - -
Set options:
- - - -
- -

- - - - - - - - - -
Import predefined - chemical structure to applet:
- - -
- -

-

- - - - - - - - - - - - - - -
Export chemical - structure from applet:
- - - - - -
-
-

- -

- See also description - of the JME API. -

- - - - - diff --git a/chemprop/web/app/static/jsme/JSME_SVG.html b/chemprop/web/app/static/jsme/JSME_SVG.html deleted file mode 100644 index dbbbfd93d..000000000 --- a/chemprop/web/app/static/jsme/JSME_SVG.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - -
- - -
- - - - - diff --git a/chemprop/web/app/static/jsme/JSME_atom_highlight_demo.html b/chemprop/web/app/static/jsme/JSME_atom_highlight_demo.html deleted file mode 100644 index 68214c170..000000000 --- a/chemprop/web/app/static/jsme/JSME_atom_highlight_demo.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -

JSME atom highlight

- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- Atom highlighted by mouse over: -
- Atom colors: - - -
- - -

Atom background color

-There are 6 predefined pastel colors available: numbered 1 to 6. The color specification is character string containing a comma separated list of atom number and color index.
-Example: 1,2 : color atom #1 with color # 2
-Example: 1,2,10,4 : color atom #1 with color # 2 and color atom #10 with color #4
- -

Bond background color

-API not implemented yet. - - -

API

-

-Note: All atom and molecule indices start at 1. -

- -

-public void setAtomToHighLight(int molIndex, int atomIndex)
-The hightlight is temporary. -

- -

-public void setNotifyAtomHighLightChangeJSfunction(String notifyAtomHighLightJSfunction)
-Receive a notification when JSME detects a mouse over one atom. The argument is the name of a JavaScript function that receives two arguments: the molecule index and the atom index.
-To cancel, set the argument to null. -

- - -

-public void setAtomBackgroundColors(int molIndex, String atomAndColorCSV)
-atomAndColorCSV must be an integer between 0 and 6. 0 means no background color. -

- -

-public void resetAtomColors(int molIndex) -

- - - - - diff --git a/chemprop/web/app/static/jsme/JSME_autoresize.html b/chemprop/web/app/static/jsme/JSME_autoresize.html deleted file mode 100644 index 5e9b7193a..000000000 --- a/chemprop/web/app/static/jsme/JSME_autoresize.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - -

Resize the window and the applet should resize accordingly. Does not work with IE678 and Opera 12.

-
- - - - - \ No newline at end of file diff --git a/chemprop/web/app/static/jsme/JSME_callback_and_star.html b/chemprop/web/app/static/jsme/JSME_callback_and_star.html deleted file mode 100644 index 2aebfd7f8..000000000 --- a/chemprop/web/app/static/jsme/JSME_callback_and_star.html +++ /dev/null @@ -1,129 +0,0 @@ - - - -Structure modified and atom mark demo - - - - - - - -

Structure modified and atom mark demo

-

-Draw a structure, click on the star icon of the editor and click on one or more atoms -

-
- -
-After structure changed event: -
- -
- - - - - - - - - - -
Import predefined chemical structure to applet:
- - - - - - - - - - - -
- -
- - - - - - - - -
Set options:
- - - - -
-
- -
- - - - diff --git a/chemprop/web/app/static/jsme/JSME_chemical_resolver_demo.html b/chemprop/web/app/static/jsme/JSME_chemical_resolver_demo.html deleted file mode 100644 index 9041f279c..000000000 --- a/chemprop/web/app/static/jsme/JSME_chemical_resolver_demo.html +++ /dev/null @@ -1,202 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

JSME + Chemical Identifier Resolver demo

-

Compound to name

-The name of the molecule in the editor is fetched from the NCI web service (https://cactus.nci.nih.gov/chemical/structure) after the structure in the editor has changed.
- - - -

Pasting any chemical structure representation

- - -Paste operation accepts molecule name, Inchi, smiles ... and is using the same service. - -
Note: the JQuery Ajax calls are not working on IE. -
-
Examples: -
-
benazepril -
c1ccccc1O -
4-[(4-methylpiperazin-1-yl)methyl]-N-(4-methyl-3-{[4-(pyridin-3-yl)pyrimidin-2-yl]amino}phenyl)benzamide -
50-78-2 -
PCZOHLXUXFIOCF-BXMDZJJMSA-N -
- - - - - -
- - - - - - - - - - diff --git a/chemprop/web/app/static/jsme/JSME_depict.html b/chemprop/web/app/static/jsme/JSME_depict.html deleted file mode 100644 index 848213c63..000000000 --- a/chemprop/web/app/static/jsme/JSME_depict.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - - - -

Depict mode with setNotifyAtomHighLightChangeJSfunction

-
-
- Atom highlighted by mouse over: -
-
-
- - - -
- - - - diff --git a/chemprop/web/app/static/jsme/JSME_depict_action.html b/chemprop/web/app/static/jsme/JSME_depict_action.html deleted file mode 100644 index 46a716731..000000000 --- a/chemprop/web/app/static/jsme/JSME_depict_action.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - -

Depict mode with setNotifyAtomHighLightChangeJSfunction and the star option enabled

-
-
- Atom highlighted by mouse over: -
-
- - - - diff --git a/chemprop/web/app/static/jsme/JSME_depict_action_callback.html b/chemprop/web/app/static/jsme/JSME_depict_action_callback.html deleted file mode 100644 index 702530b76..000000000 --- a/chemprop/web/app/static/jsme/JSME_depict_action_callback.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - -

Depict mode with the callback "AtomHighLight" and the star option enabled

-
-
- Atom highlighted by mouse over: - Bond highlighted by mouse over: -
- Atom clicked: - Bond clicked: -
-
- Event: - - - - diff --git a/chemprop/web/app/static/jsme/JSME_depict_edit_toggle.html b/chemprop/web/app/static/jsme/JSME_depict_edit_toggle.html deleted file mode 100644 index 4a473d059..000000000 --- a/chemprop/web/app/static/jsme/JSME_depict_edit_toggle.html +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - -

Toggle depict - edit

-This example shows how to switch back and forth between depict and edit mode. -
-
- - Draw a chemical structure.
- Please click on the area below to edit the structure. -
-
-
- - - - - - - - - \ No newline at end of file diff --git a/chemprop/web/app/static/jsme/JSME_depict_smiles.html b/chemprop/web/app/static/jsme/JSME_depict_smiles.html deleted file mode 100644 index 3641488ba..000000000 --- a/chemprop/web/app/static/jsme/JSME_depict_smiles.html +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - -

-JSME in depict mode initialized with a SMILES -

- -SMILES conversion and 2D coordinates computation are performed by the Open Source Chemistry Library OpenChemLib - - - -

Taxol

- Width changes when the browser window changes, the molecule is rescaled to fit if needed - -
- - - -
- - - - - - diff --git a/chemprop/web/app/static/jsme/JSME_dnd_demo.html b/chemprop/web/app/static/jsme/JSME_dnd_demo.html deleted file mode 100644 index 9be89d83f..000000000 --- a/chemprop/web/app/static/jsme/JSME_dnd_demo.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - -

JSME drag and drop

-If drag and drop is supported by your browser, an icon will be displayed at the bottom right of the editor. - - - - -
-
- -

Testing the DnD capabilities of JSME:

-
    -
  1. Draw a structure on the top editor
  2. -
  3. Drag it out and drop it on the surface of the bottom editor
  4. -
  5. Drag it out and drop it on your computer local file system to save it (does not work in Windows)
  6. -
  7. Drag it out and drop it on the window of another program, e.g. text editor
  8. -
  9. Drag a MOL or SDF file from your computer local file system and drop it on to the bottom or top editor -
- -Does not work yet on iPad 4 and Android devices. - - - - - - - \ No newline at end of file diff --git a/chemprop/web/app/static/jsme/JSME_editor_plus_SVG.html b/chemprop/web/app/static/jsme/JSME_editor_plus_SVG.html deleted file mode 100644 index 843472b72..000000000 --- a/chemprop/web/app/static/jsme/JSME_editor_plus_SVG.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - -
- - -
- - - - - diff --git a/chemprop/web/app/static/jsme/JSME_hidden.html b/chemprop/web/app/static/jsme/JSME_hidden.html deleted file mode 100644 index a67f551cf..000000000 --- a/chemprop/web/app/static/jsme/JSME_hidden.html +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - -

JSME in a hidden div

- -

The size is fixed (defined in px)

- - - -
-
-
-
- -
-
-
-

The size is dynamic (defined in %)

-Note: jsmeApplet2.repaint() must be called after displaying. -
- - - -
-
-
-
- - - diff --git a/chemprop/web/app/static/jsme/JSME_minimal.html b/chemprop/web/app/static/jsme/JSME_minimal.html deleted file mode 100644 index 9359b9e16..000000000 --- a/chemprop/web/app/static/jsme/JSME_minimal.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - -
- - - - diff --git a/chemprop/web/app/static/jsme/JSME_minimal2.html b/chemprop/web/app/static/jsme/JSME_minimal2.html deleted file mode 100644 index 524234d7a..000000000 --- a/chemprop/web/app/static/jsme/JSME_minimal2.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - -
- - - - - diff --git a/chemprop/web/app/static/jsme/JSME_minimal3.html b/chemprop/web/app/static/jsme/JSME_minimal3.html deleted file mode 100644 index 1f10178b2..000000000 --- a/chemprop/web/app/static/jsme/JSME_minimal3.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - -
- - - - - diff --git a/chemprop/web/app/static/jsme/JSME_parent_and_metabolites.html b/chemprop/web/app/static/jsme/JSME_parent_and_metabolites.html deleted file mode 100644 index c66f5c89d..000000000 --- a/chemprop/web/app/static/jsme/JSME_parent_and_metabolites.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Metabolism Database - Structure Input using JSME

-

This is an example showing how to use JSME templates

- - - - - - - - - - - - - - - - - - -
Structure of ParentStructure of Metabolite
-
-
-
-
- Add group (required anchor atom): - - - - - -
-

- How to add your own template

-Templates may be easily added using the JavaScript call jsme.setTemplate('jme string') where the jme string is the JME string of your template. The JME string may be generated for example here. The atom that should act as a connection point (root) of the template should by marked by :1 (for example the oxygen serving as root should have atomic symbol O:1). -
-For more information check also the HTML source of this page - - - diff --git a/chemprop/web/app/static/jsme/JSME_resize.html b/chemprop/web/app/static/jsme/JSME_resize.html deleted file mode 100644 index b262c84a6..000000000 --- a/chemprop/web/app/static/jsme/JSME_resize.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - -

- - - - - - - - \ No newline at end of file diff --git a/chemprop/web/app/static/jsme/JSME_smiles_atom_highlight.html b/chemprop/web/app/static/jsme/JSME_smiles_atom_highlight.html deleted file mode 100644 index 3b5f6255e..000000000 --- a/chemprop/web/app/static/jsme/JSME_smiles_atom_highlight.html +++ /dev/null @@ -1,52 +0,0 @@ - - - -SMILES Hilight demo - - - - - - - -

SMILES Highlight demo

-

-Draw a structure, click on the star icon of the editor and click on one or more atoms -

-
-
-Canonical SMILES -
-
-SMILES: - - - - diff --git a/chemprop/web/app/static/jsme/JSME_template.html b/chemprop/web/app/static/jsme/JSME_template.html deleted file mode 100644 index b889c9097..000000000 --- a/chemprop/web/app/static/jsme/JSME_template.html +++ /dev/null @@ -1,62 +0,0 @@ - - - -JME template creation - - - - - -

This page shows how to create custom templates for JSME

- -To create a template, one has to: -
    -
  1. draw a chemical structure
  2. -
  3. mark the connection atom using the blue circle
  4. -
  5. save the template as JME string (button "get JME string")
  6. -
-

-The atom that should act as a connection point (root) of the template should by marked by :1 (for example the oxygen serving as root should have atomic symbol O:1). -

-

- -You have to enable JavaScript in your browser to use JSME!
- - - - - - -
-
- -To use a predefined template: -
    -
  1. draw a chemical structure
  2. -
  3. input a name
  4. -
  5. Click on "set template"
  6. -
  7. Click on one atom of the chemical structure to attach the template, or alternatively use the NEW button and click elsewhere in the drawing area
  8. -
-
-Template name:
- -

-

-See this page for real example. - - - \ No newline at end of file diff --git a/chemprop/web/app/static/jsme/JSME_test.html b/chemprop/web/app/static/jsme/JSME_test.html deleted file mode 100644 index 7e9d8c2a3..000000000 --- a/chemprop/web/app/static/jsme/JSME_test.html +++ /dev/null @@ -1,373 +0,0 @@ - - - - - - - - - - - JSME test page - - - - - - - - - - - - - - - -

- Your web browser must have JavaScript enabled - in order for this application to display correctly. -
- -

JSME test page

- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - -
- - - -
Drawing area line width: - - -
Drawing area font size: - - -
Drawing area scale: - - - -
Non drawing area scale: - - - -
- -

-
-
- -

- - - - - -

-

- -
- Turning AA on and off does not work with IE 9 & 10 (it is always on). -
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Set options:
- - - - -
- Customize the help URL: - - -
- Display a message in the bottom bar: - - -
- Customize the InChIKey search base URL: - - - -
- Customize the InChIKey search using a custom function. In this example, the search function is replaced by opening a simple alert. - - -
- Reset InChIKey search to its default function. - - -
- -

-

- - - - - - - - - - - -
Import predefined chemical structure to applet:
- - - - - - - - -
- -

-

- - - - - - - - - - - - - - - -
Export chemical structure from applet:
- - - - - - - -
- -
- - - - - - - - - - -
Import chemical structure from text area above to applet:
- - - - - -
- - -

- - - -

Known issues

-IE9 64 bits in IE8 compatibility mode cannot display lines correctly - - - - - diff --git a/chemprop/web/app/static/jsme/api_javadoc/allclasses-frame.html b/chemprop/web/app/static/jsme/api_javadoc/allclasses-frame.html deleted file mode 100644 index 2f33407da..000000000 --- a/chemprop/web/app/static/jsme/api_javadoc/allclasses-frame.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - -All Classes - - - - - -

All Classes

-
- -
- - diff --git a/chemprop/web/app/static/jsme/api_javadoc/allclasses-noframe.html b/chemprop/web/app/static/jsme/api_javadoc/allclasses-noframe.html deleted file mode 100644 index 13f483b5e..000000000 --- a/chemprop/web/app/static/jsme/api_javadoc/allclasses-noframe.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - -All Classes - - - - - -

All Classes

-
- -
- - diff --git a/chemprop/web/app/static/jsme/api_javadoc/constant-values.html b/chemprop/web/app/static/jsme/api_javadoc/constant-values.html deleted file mode 100644 index 9857f5c49..000000000 --- a/chemprop/web/app/static/jsme/api_javadoc/constant-values.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - -Constant Field Values - - - - - - - - - - - -
-

Constant Field Values

-

Contents

-
- - - - - - diff --git a/chemprop/web/app/static/jsme/api_javadoc/deprecated-list.html b/chemprop/web/app/static/jsme/api_javadoc/deprecated-list.html deleted file mode 100644 index cc594603c..000000000 --- a/chemprop/web/app/static/jsme/api_javadoc/deprecated-list.html +++ /dev/null @@ -1,160 +0,0 @@ - - - - - -Deprecated List - - - - - - - - -
- - - - - - - -
- - -
-

Deprecated API

-

Contents

- -
- - -
- - - - - - - -
- - - - diff --git a/chemprop/web/app/static/jsme/api_javadoc/export/client/JSME.html b/chemprop/web/app/static/jsme/api_javadoc/export/client/JSME.html deleted file mode 100644 index 9f8b3647e..000000000 --- a/chemprop/web/app/static/jsme/api_javadoc/export/client/JSME.html +++ /dev/null @@ -1,1785 +0,0 @@ - - - - - -JSME - - - - - - - - - - - - -
-
export.client
-

Class JSME

-
-
-
    -
  • java.lang.Object
  • -
  • -
      -
    • export.client.JSME
    • -
    -
  • -
-
-
    -
  • -
    -
    -
    public class JSME
    -extends java.lang.Object
    -
  • -
-
-
-
    -
  • - -
      -
    • - - -

      Constructor Summary

      - - - - - - - - - - - - - - - - - -
      Constructors 
      Constructor and Description
      JSME(java.lang.String htmlId) 
      JSME(java.lang.String htmlId, - JavaScriptObject parameterJso) 
      JSME(java.lang.String htmlId, - java.lang.String width, - java.lang.String height) 
      JSME(java.lang.String htmlId, - java.lang.String width, - java.lang.String height, - JavaScriptObject parameterJso) 
      -
    • -
    - -
      -
    • - - -

      Method Summary

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods 
      Modifier and TypeMethod and Description
      voidaddClickHandler(JsClosureJsme jsEventHandler) -
      Add a click handler to a JSME instance.
      -
      voidaddMouseDownHandler(JsClosureJsme jsEventHandler) -
      Add a mouse down handler to a JSME instance.
      -
      voidaddMouseOutHandler(JsClosureJsme jsEventHandler) -
      Add a mouse out handler to a JSME instance.
      -
      voidaddMouseOverHandler(JsClosureJsme jsEventHandler) -
      Add a mouse over handler to a JSME instance.
      -
      voidalert(java.lang.String message) -
      Display an alert box with the look and feel of JSME
      -
      voidclear() -
      Same effect as clicking on the clear icon: clear the molecular drawing area
      -
      voiddeferredRepaint() -
      Repaint the applet after the browser event loop returns.
      -
      java.lang.String[]getAlldefinedCallBackNames() -
      Return an array containing all possible callback names.
      -
      JsArrayStringgetAllGraphicsString() -
      Returns all graphics representations used in the applet, either a SVG or a VML string - This is an advanced feature.
      -
      JavaScriptObjectgetCallBack(java.lang.String callbackName) -
      Generic callback
      -
      intgetCreationIndex() -
      The JSME class keeps tract of the number of instance that have been created.
      -
      java.lang.StringgetHelpURL() 
      doublegetMenuScale() 
      booleangetMolecularAreaAntiAlias() -
      Return the antialias setting for the molecular drawing area
      -
      java.lang.StringgetMolecularAreaGraphicsString() -
      Returns the graphics representation used in the molecular area, either a SVG or a VML string - This is an advanced feature.
      -
      floatgetMolecularAreaLineWidth() 
      doublegetMolecularAreaScale() 
      java.lang.StringgetNotifyStructuralChangeJSfunction() -
      Deprecated. 
      -
      intgetOffsetHeight() -
      Gets the object's offset height in pixels.
      -
      JsArrayIntegergetOffsetSize() -
      Gets the object's offset width and height in pixels.
      -
      intgetOffsetWidth() -
      Gets the object's offset width in pixels.
      -
      com.google.gwt.user.client.ElementgetParentContainer() -
      Return the parent DOM element that contains myself.
      -
      java.lang.StringgetPasteLabel() - -
      java.lang.StringgetPrePasteJSfunction() 
      java.lang.StringgetWebSearchInchiKeyBaseUrl() 
      voidinitializationError(java.lang.String message) 
      booleanisDepictMode() 
      booleanisVisible() -
      Returns whether the given element is visible in a way consistent with - setVisible(boolean).
      -
      java.lang.StringjmeFile() 
      java.lang.StringmolFile(boolean isV3000) 
      java.lang.StringnonisomericSmiles() 
      voidoptions(java.lang.String options) -
      options is a comma separated value list - same as original JME
      -
      booleanread_MOL_SDF_RXN(java.lang.String s) -
      Read a molecular structure encoded in MOL or SDF format, or a reaction encoded in RXN format.
      -
      voidreadGenericMolecularInput(java.lang.String s) 
      voidreadMolecule(java.lang.String s) -
      Read a molecular structure encoded in JME format
      -
      voidreadMolFile(java.lang.String s) -
      Read a molecular structure encoded in MOL format, or a reaction encoded in RXN format
      -
      voidrepaint() -
      Redraw the whole applet if it is visible
      -
      static intreplaceAllAppletsByJSME() -
      Scan the DOM for DIV's containing an attribute code="JME.class" and install a running JSME.
      -
      static intreplaceAllAppletsByJSME(JsClosure jsFunctionWithJsmeInstanceArg) -
      Scan the DOM for DIV's containing an attribute code="JME.class" and install a running JSME.
      -
      voidreset() 
      voidresetAtomColors(int molIndex) -
      Reset background colors
      -
      voidsetAction(int action) -
      select one of the menu action without having to click on the menu.
      -
      voidsetAfterDepictEditToggleEventHandler(JsClosureJsme jsEventHandler) 
      voidsetAfterPasteCallback(JavaScriptObject callbackFunction) -
      Deprecated. 
      -
      voidsetAfterStructureModifiedCallback(JavaScriptObject callbackFunction) -
      Deprecated. 
      -
      voidsetAntialias(boolean onOff) -
      Set globally antialias
      -
      voidsetAtomBackgroundColors(int molIndex, - java.lang.String atomAndColorCSV) 
      voidsetAtomMolecularAreaFontSize(float fs) 
      voidsetAtomToHighLight(int molIndex, - int atomIndex) 
      voidsetBeforePasteCallback(JavaScriptObject callbackFunction) -
      Deprecated. 
      -
      voidsetCallBack(java.lang.String callbackName, - JavaScriptObject callbackFunction) -
      Generic call back.
      -
      voidsetHeight(java.lang.String width) -
      Sets the object's height.
      -
      voidsetHelpURL(java.lang.String url) -
      set the url to display the JSME help page.
      -
      voidsetMenuScale(double scale) 
      voidsetMolecularAreaAntiAlias(boolean molecularAreaAntiAlias) -
      Set antialias for the molecular drawing area
      -
      voidsetMolecularAreaLineWidth(float molecularAreaLineWidth) -
      Line width in pixel
      -
      voidsetMolecularAreaScale(double scale) 
      voidsetNotifyAtomHighLightChangeJSfunction(java.lang.String notifyAtomHighLightJSfunction) -
      Deprecated. 
      -
      voidsetNotifyStructuralChangeJSfunction(java.lang.String notifyStructuralChangeJSfunction) -
      Deprecated. 
      -
      voidsetPasteLabel(java.lang.String pasteLabel) -
      Set the label of the context popup menu for pasting string, instead of using the default label.
      -
      voidsetPrePasteJSfunction(java.lang.String prePasteJSfunction) -
      Deprecated. 
      -
      voidsetSize(int width, - int height) -
      Sets the object's size.
      -
      voidsetSize(int width, - int height, - boolean resizeParent) -
      Sets the object's size.
      -
      voidsetSize(java.lang.String width, - java.lang.String height) -
      Sets the object's size.
      -
      voidsetSize(java.lang.String width, - java.lang.String height, - boolean resizeParent) -
      Sets the object's size.
      -
      voidsetSubstituent(java.lang.String s) -
      Select the next FG to be used.
      -
      voidsetTemplate(java.lang.String templateAsJmeMol, - java.lang.String templateName) -
      Provide a template, a molecular fragment with one marked atom, in JME format.
      -
      voidsetVisible(boolean visible) -
      Shows or hides the given element.
      -
      voidsetWebSearchInchiKeyBaseUrl(java.lang.String webSearchInchiKeyBaseUrl) -
      Set the base url for inchi key search.
      -
      voidsetWidth(java.lang.String width) -
      Sets the object's width.
      -
      voidshowInfo(java.lang.String message) -
      Display a message in the bottom bar.
      -
      java.lang.Stringsmiles() 
      -
        -
      • - - -

        Methods inherited from class java.lang.Object

        -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • -
      -
    • -
    -
  • -
-
-
-
    -
  • - -
      -
    • - - -

      Constructor Detail

      - - - -
        -
      • -

        JSME

        -
        public JSME(java.lang.String htmlId,
        -            java.lang.String width,
        -            java.lang.String height)
        -
      • -
      - - - -
        -
      • -

        JSME

        -
        public JSME(java.lang.String htmlId)
        -
      • -
      - - - -
        -
      • -

        JSME

        -
        public JSME(java.lang.String htmlId,
        -            java.lang.String width,
        -            java.lang.String height,
        -            JavaScriptObject parameterJso)
        -
      • -
      - - - -
        -
      • -

        JSME

        -
        public JSME(java.lang.String htmlId,
        -            JavaScriptObject parameterJso)
        -
        -
        Parameters:
        -
        htmlId -
        -
        parameterJso -
        -
        -
      • -
      -
    • -
    - -
      -
    • - - -

      Method Detail

      - - - -
        -
      • -

        getAllGraphicsString

        -
        public JsArrayString getAllGraphicsString()
        -
        Returns all graphics representations used in the applet, either a SVG or a VML string - This is an advanced feature.
        -
        -
        Returns:
        -
        an array of strings that can be used in a DOM element innerHTML
        -
        -
      • -
      - - - -
        -
      • -

        getMolecularAreaGraphicsString

        -
        public java.lang.String getMolecularAreaGraphicsString()
        -
        Returns the graphics representation used in the molecular area, either a SVG or a VML string - This is an advanced feature.
        -
        -
        Returns:
        -
        a string that can be used in a DOM element innerHTML
        -
        -
      • -
      - - - - - - - -
        -
      • -

        setWebSearchInchiKeyBaseUrl

        -
        public void setWebSearchInchiKeyBaseUrl(java.lang.String webSearchInchiKeyBaseUrl)
        -
        Set the base url for inchi key search. For instance: "http://www.google.com/search?q="
        -
        -
        Parameters:
        -
        webSearchInchiKeyBaseUrl: - the web search InchiKey base Url to set - Note: alternatively, one can replace the web search by a custom function call. - See setCallBack(String,JavaScriptObject) - To find the inchi key search callback name, see getAlldefinedCallBackNames() - See also see getWebSearchInchiKeyBaseUrl()
        -
        -
      • -
      - - - -
        -
      • -

        getMolecularAreaScale

        -
        public double getMolecularAreaScale()
        -
        -
        Returns:
        -
        the scale of the molecular area
        -
        -
      • -
      - - - -
        -
      • -

        setMolecularAreaScale

        -
        public void setMolecularAreaScale(double scale)
        -
      • -
      - - - -
        -
      • -

        getMenuScale

        -
        public double getMenuScale()
        -
      • -
      - - - -
        -
      • -

        setMenuScale

        -
        public void setMenuScale(double scale)
        -
      • -
      - - - -
        -
      • -

        getCreationIndex

        -
        public int getCreationIndex()
        -
        The JSME class keeps tract of the number of instance that have been created. Each instance has a copy of its creation count, which can be used as a index. - The first instance has an index equal to 0.
        -
        -
        Returns:
        -
        the creation index.
        -
        -
      • -
      - - - -
        -
      • -

        getParentContainer

        -
        public com.google.gwt.user.client.Element getParentContainer()
        -
        Return the parent DOM element that contains myself. This is equivalent to using document.getElementById("id") where "id" is the id of the element that was used to create the JSME instance.
        -
      • -
      - - - -
        -
      • -

        initializationError

        -
        public void initializationError(java.lang.String message)
        -
      • -
      - - - -
        -
      • -

        setAntialias

        -
        public void setAntialias(boolean onOff)
        -
        Set globally antialias
        -
        -
        Parameters:
        -
        onOff -
        -
        -
      • -
      - - - -
        -
      • -

        options

        -
        public void options(java.lang.String options)
        -
        options is a comma separated value list - same as original JME
        -
        -
        Parameters:
        -
        options -
        -
        -
      • -
      - - - -
        -
      • -

        readMolecule

        -
        public void readMolecule(java.lang.String s)
        -
        Read a molecular structure encoded in JME format
        -
        -
        Parameters:
        -
        s -
        -
        -
      • -
      - - - -
        -
      • -

        readMolFile

        -
        public void readMolFile(java.lang.String s)
        -
        Read a molecular structure encoded in MOL format, or a reaction encoded in RXN format
        -
        -
        Parameters:
        -
        molecule -
        -
        -
      • -
      - - - -
        -
      • -

        read_MOL_SDF_RXN

        -
        public boolean read_MOL_SDF_RXN(java.lang.String s)
        -
        Read a molecular structure encoded in MOL or SDF format, or a reaction encoded in RXN format. - If the input is a SDF with more than one structure, then all SDF entries will be stored in the internal SDF buffer. - Return true if successful or false otherwise. - TODO: fix bug with paste event - infinite recursion
        -
        -
        Parameters:
        -
        s -
        -
        Returns:
        -
        success
        -
        -
      • -
      - - - -
        -
      • -

        readGenericMolecularInput

        -
        public void readGenericMolecularInput(java.lang.String s)
        -
      • -
      - - - -
        -
      • -

        molFile

        -
        public java.lang.String molFile(boolean isV3000)
        -
        -
        Parameters:
        -
        isV3000 -
        -
        Returns:
        -
        the MOL or the RXN
        -
        -
      • -
      - - - -
        -
      • -

        smiles

        -
        public java.lang.String smiles()
        -
        -
        Returns:
        -
        the smiles
        -
        -
      • -
      - - - -
        -
      • -

        nonisomericSmiles

        -
        public java.lang.String nonisomericSmiles()
        -
        -
        Returns:
        -
        non isomeric smiles
        -
        -
      • -
      - - - -
        -
      • -

        jmeFile

        -
        public java.lang.String jmeFile()
        -
      • -
      - - - -
        -
      • -

        reset

        -
        public void reset()
        -
      • -
      - - - -
        -
      • -

        clear

        -
        public void clear()
        -
        Same effect as clicking on the clear icon: clear the molecular drawing area
        -
      • -
      - - - -
        -
      • -

        setTemplate

        -
        public void setTemplate(java.lang.String templateAsJmeMol,
        -                        java.lang.String templateName)
        -
        Provide a template, a molecular fragment with one marked atom, in JME format.
        -
        -
        Parameters:
        -
        templateAsJmeMol -
        -
        templateName -
        -
        -
      • -
      - - - -
        -
      • -

        setSubstituent

        -
        public void setSubstituent(java.lang.String s)
        -
        Select the next FG to be used. Deprecated because of the FG popup menu.
        -
        -
        Parameters:
        -
        s -
        -
        -
      • -
      - - - -
        -
      • -

        repaint

        -
        public void repaint()
        -
        Redraw the whole applet if it is visible
        -
      • -
      - - - -
        -
      • -

        deferredRepaint

        -
        public void deferredRepaint()
        -
        Repaint the applet after the browser event loop returns. - TODO: this is not an applet.repaint() but a rerendering of all graphics objects - See also export.client.Utils.runAfterBrowserEventLoopReturns
        -
      • -
      - - - -
        -
      • -

        getHelpURL

        -
        public java.lang.String getHelpURL()
        -
        -
        Returns:
        -
        the url used to display JSME help page
        -
        -
      • -
      - - - -
        -
      • -

        setHelpURL

        -
        public void setHelpURL(java.lang.String url)
        -
        set the url to display the JSME help page. This method can be used to redefine the standard help page.
        -
        -
        Parameters:
        -
        url -
        -
        -
      • -
      - - - -
        -
      • -

        alert

        -
        public void alert(java.lang.String message)
        -
        Display an alert box with the look and feel of JSME
        -
        -
        Parameters:
        -
        message -
        -
        -
      • -
      - - - -
        -
      • -

        showInfo

        -
        public void showInfo(java.lang.String message)
        -
        Display a message in the bottom bar. Can be used to display e.g.the name or the MW of the compound in the editor.
        -
        -
        Parameters:
        -
        message -
        -
        -
      • -
      - - - -
        -
      • -

        getNotifyStructuralChangeJSfunction

        -
        @Deprecated
        -public java.lang.String getNotifyStructuralChangeJSfunction()
        -
        Deprecated. 
        -
        -
        Returns:
        -
        the notifyStructuralChangeJSfunction
        -
        -
      • -
      - - - -
        -
      • -

        setNotifyStructuralChangeJSfunction

        -
        @Deprecated
        -public void setNotifyStructuralChangeJSfunction(java.lang.String notifyStructuralChangeJSfunction)
        -
        Deprecated. 
        -
        Specify a JS function that will be called each time the molecular structure in the editor has been changed. - This method is deprecated. Use the setAfterStructureModifiedCallback(JavaScriptObject) method instead.
        -
        -
        Parameters:
        -
        notifyStructuralChangeJSfunction - the name of the JavaScript function - This method is deprecated. Use setCallBack(String,JavaScriptObject) instead.
        -
        -
      • -
      - - - -
        -
      • -

        setAfterStructureModifiedCallback

        -
        @Deprecated
        -public void setAfterStructureModifiedCallback(JavaScriptObject callbackFunction)
        -
        Deprecated. 
        -
        Specify a JS function that will be called each time the molecular structure in the editor has been changed. - The argument of the function will be a JSMEevent object that contains the fields: src (the jsme instance), the action, the atom index, the bond index and molecule index. - Not all events have been mapped to a JSMEevent yet - action is then null.
        -
        -
        Parameters:
        -
        callbackFunction, - a Javascript function - not the name of the function - - - This method is deprecated. Use setCallBack(String,JavaScriptObject) instead.
        -
        -
      • -
      - - - -
        -
      • -

        setCallBack

        -
        public void setCallBack(java.lang.String callbackName,
        -                        JavaScriptObject callbackFunction)
        -
        Generic call back. The callback function is a JavaScript function that receives an instance of JSMEevent. - See getAlldefinedCallBackNames() for all predefined callback names.
        -
        -
        Parameters:
        -
        callbackName -
        -
        callbackFunction -
        -
        -
      • -
      - - - -
        -
      • -

        getCallBack

        -
        public JavaScriptObject getCallBack(java.lang.String callbackName)
        -
        Generic callback
        -
        -
        Parameters:
        -
        callbackName -
        -
        Returns:
        -
        the JavaScript function (can be null)
        -
        -
      • -
      - - - -
        -
      • -

        getAlldefinedCallBackNames

        -
        public java.lang.String[] getAlldefinedCallBackNames()
        -
        Return an array containing all possible callback names.
        -
      • -
      - - - -
        -
      • -

        setAtomToHighLight

        -
        public void setAtomToHighLight(int molIndex,
        -                               int atomIndex)
        -
      • -
      - - - -
        -
      • -

        setNotifyAtomHighLightChangeJSfunction

        -
        @Deprecated
        -public void setNotifyAtomHighLightChangeJSfunction(java.lang.String notifyAtomHighLightJSfunction)
        -
        Deprecated. 
        -
        Specify a JS function that will be called each time the mouse pointer touches an atom. - When the cursor leaves the atom, the atom index sent is 0. - The argument is the name of a JavaScript function that receives two arguments: the molecule index and the atom index. - To cancel, set the argument to null. - Note valid atom indices are > 0. - - This method is deprecated. Use setCallBack(String,JavaScriptObject) instead.
        -
        -
        Parameters:
        -
        notifyAtomHighLightJSfunction - must be a string
        -
        -
      • -
      - - - -
        -
      • -

        setAfterPasteCallback

        -
        @Deprecated
        -public void setAfterPasteCallback(JavaScriptObject callbackFunction)
        -
        Deprecated. 
        -
        Specify a JavaScript function that will be called after a successful paste operation. - Unlike the setNotify* methods that have a string as an argument, this method requires a function. - - Example: - jsmeApplet.setAfterPasteCallBack(function(jsmeEvent, pasteContent) { - console.log(jsmeEvent.src..smiles()); - console.log(pasteContent); - }); - - - - This method might be removed in the future . Not supported by the pure Java applet JME.
        -
        -
        Parameters:
        -
        callbackFunction - with two arguments, the jsme instance and the content that was pasted. - - This method is deprecated. Use setCallBack(String,JavaScriptObject) instead.
        -
        -
      • -
      - - - -
        -
      • -

        setBeforePasteCallback

        -
        @Deprecated
        -public void setBeforePasteCallback(JavaScriptObject callbackFunction)
        -
        Deprecated. 
        -
        Specify a JavaScript function that will be called before a paste operation. - Unlike the setNotify* methods that have a string as an argument, this method requires a function. - - Example: - jsmeApplet.setBeforePasteCallBack(function(jsmeEvent, pasteContent) { - console.log(jsmeEvent.src.smiles()); - console.log(pasteContent); - }); - Note that the paste operation into JSME is not performed. - See the example shown in the file JSME_chemical_resolver_demo.html - - It is not supported by the pure Java applet JME.
        -
        -
        Parameters:
        -
        callbackFunction - with two arguments, the jsme instance and the content that was pasted. - This method is deprecated. Use setCallBack(String,JavaScriptObject) instead.
        -
        -
      • -
      - - - -
        -
      • -

        setAtomBackgroundColors

        -
        public void setAtomBackgroundColors(int molIndex,
        -                                    java.lang.String atomAndColorCSV)
        -
        -
        Parameters:
        -
        molIndex -
        -
        atomAndColorCSV - : at,c,at,c,at,c, ... at: atom index; c: color index
        -
        -
      • -
      - - - -
        -
      • -

        resetAtomColors

        -
        public void resetAtomColors(int molIndex)
        -
        Reset background colors
        -
        -
        Parameters:
        -
        molIndex -
        -
        -
      • -
      - - - -
        -
      • -

        getPrePasteJSfunction

        -
        public java.lang.String getPrePasteJSfunction()
        -
        -
        Returns:
        -
        See Also:
        -
        setPrePasteJSfunction
        -
        -
      • -
      - - - -
        -
      • -

        setPrePasteJSfunction

        -
        @Deprecated
        -public void setPrePasteJSfunction(java.lang.String prePasteJSfunction)
        -
        Deprecated. 
        -
        Set a JS function that will be called before the paste is performed. This function will receive one argument: a string that a represent a molecular structure. - The return value of the function is a string. - Purpose: convert a name or a SMILES or an InchI into a MOL.
        -
        -
        Parameters:
        -
        prePasteJSfunction - This method is deprecated. Use setCallBack(String,JavaScriptObject) instead.
        -
        -
      • -
      - - - -
        -
      • -

        getPasteLabel

        -
        public java.lang.String getPasteLabel()
        - -
        -
        Returns:
        -
        the currently used label.
        -
        -
      • -
      - - - -
        -
      • -

        setPasteLabel

        -
        public void setPasteLabel(java.lang.String pasteLabel)
        -
        Set the label of the context popup menu for pasting string, instead of using the default label. - Purpose: This function can be used in case the paste action is customized with a callback function. - See setPrePasteJSfunction(String)
        -
        -
        Parameters:
        -
        pasteLabel -
        -
        -
      • -
      - - - -
        -
      • -

        getMolecularAreaLineWidth

        -
        public float getMolecularAreaLineWidth()
        -
        -
        Returns:
        -
        line width in pixel
        -
        -
      • -
      - - - -
        -
      • -

        setMolecularAreaLineWidth

        -
        public void setMolecularAreaLineWidth(float molecularAreaLineWidth)
        -
        Line width in pixel
        -
        -
        Parameters:
        -
        molecularAreaLineWidth -
        -
        -
      • -
      - - - -
        -
      • -

        setAtomMolecularAreaFontSize

        -
        public void setAtomMolecularAreaFontSize(float fs)
        -
      • -
      - - - -
        -
      • -

        getMolecularAreaAntiAlias

        -
        public boolean getMolecularAreaAntiAlias()
        -
        Return the antialias setting for the molecular drawing area
        -
      • -
      - - - -
        -
      • -

        setMolecularAreaAntiAlias

        -
        public void setMolecularAreaAntiAlias(boolean molecularAreaAntiAlias)
        -
        Set antialias for the molecular drawing area
        -
        -
        Parameters:
        -
        molecularAreaAntiAlias -
        -
        -
      • -
      - - - -
        -
      • -

        setSize

        -
        public void setSize(java.lang.String width,
        -                    java.lang.String height)
        -
        Sets the object's size. This size does not include decorations such as - border, margin, and padding. - - Setting the height to "100%" does not work.
        -
        -
        Parameters:
        -
        width - the applet's new width, in CSS units (e.g. "10px", "1em", "100%")
        -
        height - the applet's new height, in CSS units (e.g. "10px", "1em")
        -
        -
      • -
      - - - -
        -
      • -

        setSize

        -
        public void setSize(int width,
        -                    int height)
        -
        Sets the object's size. This size does not include decorations such as - border, margin, and padding. - - Setting the height to "100%" does not work.
        -
        -
        Parameters:
        -
        width - the applet's new width, in pixels
        -
        height - the applet's new height, in pixels
        -
        -
      • -
      - - - -
        -
      • -

        setSize

        -
        public void setSize(java.lang.String width,
        -                    java.lang.String height,
        -                    boolean resizeParent)
        -
        Sets the object's size. This size does not include decorations such as - border, margin, and padding. - - Setting the height to "100%" does not work. - - if resizeParent is true, then the parent HTML container (e.g. a DIV) in which the applet resides will - be resized as well
        -
        -
        Parameters:
        -
        width - the applet's new width, in CSS units (e.g. "10px", "1em", "100%")
        -
        height - the applet's new height, in CSS units (e.g. "10px", "1em")
        -
        -
      • -
      - - - -
        -
      • -

        setSize

        -
        public void setSize(int width,
        -                    int height,
        -                    boolean resizeParent)
        -
        Sets the object's size. This size does not include decorations such as - border, margin, and padding. - - Setting the height to "100%" does not work. - - if resizeParent is true, then the parent HTML container (e.g. a DIV) in which the applet resides will - be resized as well
        -
        -
        Parameters:
        -
        width - the object's new width, in pixels
        -
        height - the object's new height, in pixels
        -
        -
      • -
      - - - -
        -
      • -

        setWidth

        -
        public void setWidth(java.lang.String width)
        -
        Sets the object's width. This width does not include decorations such as - border, margin, and padding.
        -
        -
        Parameters:
        -
        width - the object's new width, in CSS units (e.g. "10px", "1em")
        -
        -
      • -
      - - - -
        -
      • -

        setHeight

        -
        public void setHeight(java.lang.String width)
        -
        Sets the object's height. This height does not include decorations such as - border, margin, and padding.
        -
        -
        Parameters:
        -
        height - the object's new height, in CSS units (e.g. "10px", "1em")
        -
        -
      • -
      - - - -
        -
      • -

        getOffsetSize

        -
        public JsArrayInteger getOffsetSize()
        -
        Gets the object's offset width and height in pixels. This is the total width (height) of the object, including decorations such - as border and padding, but not margin.
        -
        -
        Returns:
        -
        an array of size 2 containing the width and height
        -
        -
      • -
      - - - -
        -
      • -

        getOffsetWidth

        -
        public int getOffsetWidth()
        -
        Gets the object's offset width in pixels. This is the total width of the object, including decorations such - as border and padding, but not margin.
        -
      • -
      - - - -
        -
      • -

        getOffsetHeight

        -
        public int getOffsetHeight()
        -
        Gets the object's offset height in pixels. This is the total height of the object, including decorations such - as border and padding, but not margin.
        -
      • -
      - - - -
        -
      • -

        setVisible

        -
        public void setVisible(boolean visible)
        -
        Shows or hides the given element. Also updates the "aria-hidden" attribute. - -

        - Warning: implemented with a heuristic based on the "display" style: - clears the "display" style to its default value if visible is true, - else forces the style to "none". If the "display" style is set to "none" - via CSS style sheets, the element remains invisible after a call to - setVisible(true). -

        -
      • -
      - - - -
        -
      • -

        isVisible

        -
        public boolean isVisible()
        -
        Returns whether the given element is visible in a way consistent with - setVisible(boolean). - -

        - Warning: implemented with a heuristic. The value returned takes into - account only the "display" style, ignoring CSS and Aria roles, thus may not - accurately reflect whether the element is actually visible in the browser. -

        -
      • -
      - - - -
        -
      • -

        replaceAllAppletsByJSME

        -
        public static int replaceAllAppletsByJSME()
        -
        Scan the DOM for DIV's containing an attribute code="JME.class" and install a running JSME.
        -
        -
        Returns:
        -
        the number of JSME installed.
        -
        -
      • -
      - - - -
        -
      • -

        replaceAllAppletsByJSME

        -
        public static int replaceAllAppletsByJSME(JsClosure jsFunctionWithJsmeInstanceArg)
        -
        Scan the DOM for DIV's containing an attribute code="JME.class" and install a running JSME. Call the argument when done. - See also getCreationIndex.
        -
        -
        Parameters:
        -
        jsFunction: - a function defined in JavaScript such as : function(eachJsmeInstance){alert("JSME created. Creation index: "+ eachJsmeInstance.getCreationIndex() )};
        -
        Returns:
        -
        the number of new JSME installed.
        -
        -
      • -
      - - - -
        -
      • -

        addClickHandler

        -
        public void addClickHandler(JsClosureJsme jsEventHandler)
        -
        Add a click handler to a JSME instance. The argument is a JavaScript function with two arguments: - - the JSME instance that received the click event. - - the mouse event - Example: - document.JSME.addClickHandler(function(jsme, evt) { - alert("My smiles is: " + jsme.smiles()); - }); - Purpose: intercept a click event on JSME in depict mode.
        -
        -
        Parameters:
        -
        jsEventHandler: - a JavaScript function with two arguments.
        -
        -
      • -
      - - - -
        -
      • -

        addMouseDownHandler

        -
        public void addMouseDownHandler(JsClosureJsme jsEventHandler)
        -
        Add a mouse down handler to a JSME instance. The argument is a JavaScript function with two arguments: - - the JSME instance that received the click event. - - the mouse event - Example: - document.JSME.addMouseDownHandler(function(jsme, evt) { - alert("My smiles is: " + jsme.smiles()); - }); - Purpose: intercept a click event on JSME in depict mode.
        -
        -
        Parameters:
        -
        jsEventHandler: - a JavaScript function with two arguments.
        -
        -
      • -
      - - - -
        -
      • -

        addMouseOverHandler

        -
        public void addMouseOverHandler(JsClosureJsme jsEventHandler)
        -
        Add a mouse over handler to a JSME instance. The argument is a JavaScript function with two arguments: - - the JSME instance that received the event. - - the mouse event - Example: - document.JSME.addMouseOverHandler(function(jsme, evt) { - console.log("My smiles is: " + jsme.smiles()); - }); - Purpose: intercept a mouse event on JSME in depict mode.
        -
        -
        Parameters:
        -
        jsEventHandler: - a JavaScript function with two arguments.
        -
        -
      • -
      - - - -
        -
      • -

        addMouseOutHandler

        -
        public void addMouseOutHandler(JsClosureJsme jsEventHandler)
        -
        Add a mouse out handler to a JSME instance. The argument is a JavaScript function with two arguments: - - the JSME instance that received the event. - - the mouse event - Example: - document.JSME.addMouseOutHandler(function(jsme, evt) { - console.log("My smiles is: " + jsme.smiles()); - }); - Purpose: intercept a mouse event on JSME in depict mode.
        -
        -
        Parameters:
        -
        jsEventHandler: - a JavaScript function with two arguments.
        -
        -
      • -
      - - - -
        -
      • -

        setAfterDepictEditToggleEventHandler

        -
        public void setAfterDepictEditToggleEventHandler(JsClosureJsme jsEventHandler)
        -
      • -
      - - - -
        -
      • -

        setAction

        -
        public void setAction(int action)
        -
        select one of the menu action without having to click on the menu. - Purpose: enable some action in depict mode, e.g. the atom selection with the star option. - Example : 105 is the code for ACTION_MARK. - In theory, it is possible to program a new menu interface for JSME using all action codes.
        -
        -
        Parameters:
        -
        action -
        -
        -
      • -
      - - - -
        -
      • -

        isDepictMode

        -
        public boolean isDepictMode()
        -
        -
        Returns:
        -
        true if the editor is in depict mode
        -
        -
      • -
      -
    • -
    -
  • -
-
-
- - - - - - - diff --git a/chemprop/web/app/static/jsme/api_javadoc/export/client/Utils.html b/chemprop/web/app/static/jsme/api_javadoc/export/client/Utils.html deleted file mode 100644 index e0c1be588..000000000 --- a/chemprop/web/app/static/jsme/api_javadoc/export/client/Utils.html +++ /dev/null @@ -1,323 +0,0 @@ - - - - - -Utils - - - - - - - - - - - - -
-
export.client
-

Class Utils

-
-
-
    -
  • java.lang.Object
  • -
  • -
      -
    • export.client.Utils
    • -
    -
  • -
-
-
    -
  • -
    -
    -
    public class Utils
    -extends java.lang.Object
    -
  • -
-
-
-
    -
  • - -
      -
    • - - -

      Constructor Summary

      - - - - - - - - -
      Constructors 
      Constructor and Description
      Utils() 
      -
    • -
    - -
      -
    • - - -

      Method Summary

      - - - - - - - - - - - - - - - - - - -
      All Methods Static Methods Concrete Methods 
      Modifier and TypeMethod and Description
      static voidrunAfterBrowserEventLoopReturns(JavaScriptObject jsFunction) -
      Run some Javascript code after the browser event loop returns.
      -
      static voidrunAfterFixedDelay(JavaScriptObject jsFunction, - int delayMS) -
      Run some Javascript code after the browser event loop returns.
      -
      static voidsafeLog(java.lang.String msg) -
      console.log tested on Chrome with success On IE: the console is not - available unless debugger is on: causes an exception.
      -
      -
        -
      • - - -

        Methods inherited from class java.lang.Object

        -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • -
      -
    • -
    -
  • -
-
-
-
    -
  • - -
      -
    • - - -

      Constructor Detail

      - - - -
        -
      • -

        Utils

        -
        public Utils()
        -
      • -
      -
    • -
    - -
      -
    • - - -

      Method Detail

      - - - -
        -
      • -

        runAfterBrowserEventLoopReturns

        -
        public static void runAfterBrowserEventLoopReturns(JavaScriptObject jsFunction)
        -
        Run some Javascript code after the browser event loop returns. Example: - JSApplet.Utils.runAfterBrowserEventLoopReturns(myFunction);
        -
        -
        Parameters:
        -
        jsFunction - : a function defined in JavaScript such as : - function(){alert("DOM update finished")};
        -
        -
      • -
      - - - -
        -
      • -

        runAfterFixedDelay

        -
        public static void runAfterFixedDelay(JavaScriptObject jsFunction,
        -                                      int delayMS)
        -
        Run some Javascript code after the browser event loop returns. Example: - JSApplet.Utils.runAfterBrowserEventLoopReturns(myFunction);
        -
        -
        Parameters:
        -
        jsFunction - : a function defined in JavaScript such as : - function(){alert("DOM update finished")};
        -
        -
      • -
      - - - -
        -
      • -

        safeLog

        -
        public static void safeLog(java.lang.String msg)
        -
        console.log tested on Chrome with success On IE: the console is not - available unless debugger is on: causes an exception. This method - catches the exception and ignores it.
        -
        -
        Parameters:
        -
        msg -
        -
        -
      • -
      -
    • -
    -
  • -
-
-
- - - - - - - diff --git a/chemprop/web/app/static/jsme/api_javadoc/export/client/package-frame.html b/chemprop/web/app/static/jsme/api_javadoc/export/client/package-frame.html deleted file mode 100644 index d9f1e6e23..000000000 --- a/chemprop/web/app/static/jsme/api_javadoc/export/client/package-frame.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - -export.client - - - - - -

export.client

-
-

Classes

- -
- - diff --git a/chemprop/web/app/static/jsme/api_javadoc/export/client/package-summary.html b/chemprop/web/app/static/jsme/api_javadoc/export/client/package-summary.html deleted file mode 100644 index 377fbdc4f..000000000 --- a/chemprop/web/app/static/jsme/api_javadoc/export/client/package-summary.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - -export.client - - - - - - - - - - - -
-

Package export.client

-
-
-
    -
  • - - - - - - - - - - - - - - - - -
    Class Summary 
    ClassDescription
    JSME 
    Utils 
    -
  • -
-
- - - - - - diff --git a/chemprop/web/app/static/jsme/api_javadoc/export/client/package-tree.html b/chemprop/web/app/static/jsme/api_javadoc/export/client/package-tree.html deleted file mode 100644 index 4693e671d..000000000 --- a/chemprop/web/app/static/jsme/api_javadoc/export/client/package-tree.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - -export.client Class Hierarchy - - - - - - - - - - - -
-

Hierarchy For Package export.client

-
-
-

Class Hierarchy

-
    -
  • java.lang.Object - -
  • -
-
- - - - - - diff --git a/chemprop/web/app/static/jsme/api_javadoc/help-doc.html b/chemprop/web/app/static/jsme/api_javadoc/help-doc.html deleted file mode 100644 index d404e3347..000000000 --- a/chemprop/web/app/static/jsme/api_javadoc/help-doc.html +++ /dev/null @@ -1,217 +0,0 @@ - - - - - -API Help - - - - - - - - - - - -
-

How This API Document Is Organized

-
This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.
-
-
-
    -
  • -

    Package

    -

    Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain six categories:

    -
      -
    • Interfaces (italic)
    • -
    • Classes
    • -
    • Enums
    • -
    • Exceptions
    • -
    • Errors
    • -
    • Annotation Types
    • -
    -
  • -
  • -

    Class/Interface

    -

    Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

    -
      -
    • Class inheritance diagram
    • -
    • Direct Subclasses
    • -
    • All Known Subinterfaces
    • -
    • All Known Implementing Classes
    • -
    • Class/interface declaration
    • -
    • Class/interface description
    • -
    -
      -
    • Nested Class Summary
    • -
    • Field Summary
    • -
    • Constructor Summary
    • -
    • Method Summary
    • -
    -
      -
    • Field Detail
    • -
    • Constructor Detail
    • -
    • Method Detail
    • -
    -

    Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

    -
  • -
  • -

    Annotation Type

    -

    Each annotation type has its own separate page with the following sections:

    -
      -
    • Annotation Type declaration
    • -
    • Annotation Type description
    • -
    • Required Element Summary
    • -
    • Optional Element Summary
    • -
    • Element Detail
    • -
    -
  • -
  • -

    Enum

    -

    Each enum has its own separate page with the following sections:

    -
      -
    • Enum declaration
    • -
    • Enum description
    • -
    • Enum Constant Summary
    • -
    • Enum Constant Detail
    • -
    -
  • -
  • -

    Tree (Class Hierarchy)

    -

    There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.

    -
      -
    • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
    • -
    • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
    • -
    -
  • -
  • -

    Deprecated API

    -

    The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.

    -
  • -
  • -

    Index

    -

    The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.

    -
  • -
  • -

    Prev/Next

    -

    These links take you to the next or previous class, interface, package, or related page.

    -
  • -
  • -

    Frames/No Frames

    -

    These links show and hide the HTML frames. All pages are available with or without frames.

    -
  • -
  • -

    All Classes

    -

    The All Classes link shows all classes and interfaces except non-static nested types.

    -
  • -
  • -

    Serialized Form

    -

    Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.

    -
  • -
  • -

    Constant Field Values

    -

    The Constant Field Values page lists the static final fields and their values.

    -
  • -
-This help file applies to API documentation generated using the standard doclet.
- - - - - - diff --git a/chemprop/web/app/static/jsme/api_javadoc/index-all.html b/chemprop/web/app/static/jsme/api_javadoc/index-all.html deleted file mode 100644 index c3bd9e5e4..000000000 --- a/chemprop/web/app/static/jsme/api_javadoc/index-all.html +++ /dev/null @@ -1,475 +0,0 @@ - - - - - -Index - - - - - - - - - - - -
A C D E G I J M N O R S U  - - -

A

-
-
addClickHandler(JsClosureJsme) - Method in class export.client.JSME
-
-
Add a click handler to a JSME instance.
-
-
addMouseDownHandler(JsClosureJsme) - Method in class export.client.JSME
-
-
Add a mouse down handler to a JSME instance.
-
-
addMouseOutHandler(JsClosureJsme) - Method in class export.client.JSME
-
-
Add a mouse out handler to a JSME instance.
-
-
addMouseOverHandler(JsClosureJsme) - Method in class export.client.JSME
-
-
Add a mouse over handler to a JSME instance.
-
-
alert(String) - Method in class export.client.JSME
-
-
Display an alert box with the look and feel of JSME
-
-
- - - -

C

-
-
clear() - Method in class export.client.JSME
-
-
Same effect as clicking on the clear icon: clear the molecular drawing area
-
-
- - - -

D

-
-
deferredRepaint() - Method in class export.client.JSME
-
-
Repaint the applet after the browser event loop returns.
-
-
- - - -

E

-
-
export.client - package export.client
-
 
-
- - - -

G

-
-
getAlldefinedCallBackNames() - Method in class export.client.JSME
-
-
Return an array containing all possible callback names.
-
-
getAllGraphicsString() - Method in class export.client.JSME
-
-
Returns all graphics representations used in the applet, either a SVG or a VML string - This is an advanced feature.
-
-
getCallBack(String) - Method in class export.client.JSME
-
-
Generic callback
-
-
getCreationIndex() - Method in class export.client.JSME
-
-
The JSME class keeps tract of the number of instance that have been created.
-
-
getHelpURL() - Method in class export.client.JSME
-
 
-
getMenuScale() - Method in class export.client.JSME
-
 
-
getMolecularAreaAntiAlias() - Method in class export.client.JSME
-
-
Return the antialias setting for the molecular drawing area
-
-
getMolecularAreaGraphicsString() - Method in class export.client.JSME
-
-
Returns the graphics representation used in the molecular area, either a SVG or a VML string - This is an advanced feature.
-
-
getMolecularAreaLineWidth() - Method in class export.client.JSME
-
 
-
getMolecularAreaScale() - Method in class export.client.JSME
-
 
-
getNotifyStructuralChangeJSfunction() - Method in class export.client.JSME
-
-
Deprecated.
-
-
getOffsetHeight() - Method in class export.client.JSME
-
-
Gets the object's offset height in pixels.
-
-
getOffsetSize() - Method in class export.client.JSME
-
-
Gets the object's offset width and height in pixels.
-
-
getOffsetWidth() - Method in class export.client.JSME
-
-
Gets the object's offset width in pixels.
-
-
getParentContainer() - Method in class export.client.JSME
-
-
Return the parent DOM element that contains myself.
-
-
getPasteLabel() - Method in class export.client.JSME
-
- -
-
getPrePasteJSfunction() - Method in class export.client.JSME
-
 
-
getWebSearchInchiKeyBaseUrl() - Method in class export.client.JSME
-
 
-
- - - -

I

-
-
initializationError(String) - Method in class export.client.JSME
-
 
-
isDepictMode() - Method in class export.client.JSME
-
 
-
isVisible() - Method in class export.client.JSME
-
-
Returns whether the given element is visible in a way consistent with - JSME.setVisible(boolean).
-
-
- - - -

J

-
-
jmeFile() - Method in class export.client.JSME
-
 
-
JSME - Class in export.client
-
 
-
JSME(String, String, String) - Constructor for class export.client.JSME
-
 
-
JSME(String) - Constructor for class export.client.JSME
-
 
-
JSME(String, String, String, JavaScriptObject) - Constructor for class export.client.JSME
-
 
-
JSME(String, JavaScriptObject) - Constructor for class export.client.JSME
-
 
-
- - - -

M

-
-
molFile(boolean) - Method in class export.client.JSME
-
 
-
- - - -

N

-
-
nonisomericSmiles() - Method in class export.client.JSME
-
 
-
- - - -

O

-
-
options(String) - Method in class export.client.JSME
-
-
options is a comma separated value list - same as original JME
-
-
- - - -

R

-
-
read_MOL_SDF_RXN(String) - Method in class export.client.JSME
-
-
Read a molecular structure encoded in MOL or SDF format, or a reaction encoded in RXN format.
-
-
readGenericMolecularInput(String) - Method in class export.client.JSME
-
 
-
readMolecule(String) - Method in class export.client.JSME
-
-
Read a molecular structure encoded in JME format
-
-
readMolFile(String) - Method in class export.client.JSME
-
-
Read a molecular structure encoded in MOL format, or a reaction encoded in RXN format
-
-
repaint() - Method in class export.client.JSME
-
-
Redraw the whole applet if it is visible
-
-
replaceAllAppletsByJSME() - Static method in class export.client.JSME
-
-
Scan the DOM for DIV's containing an attribute code="JME.class" and install a running JSME.
-
-
replaceAllAppletsByJSME(JsClosure) - Static method in class export.client.JSME
-
-
Scan the DOM for DIV's containing an attribute code="JME.class" and install a running JSME.
-
-
reset() - Method in class export.client.JSME
-
 
-
resetAtomColors(int) - Method in class export.client.JSME
-
-
Reset background colors
-
-
runAfterBrowserEventLoopReturns(JavaScriptObject) - Static method in class export.client.Utils
-
-
Run some Javascript code after the browser event loop returns.
-
-
runAfterFixedDelay(JavaScriptObject, int) - Static method in class export.client.Utils
-
-
Run some Javascript code after the browser event loop returns.
-
-
- - - -

S

-
-
safeLog(String) - Static method in class export.client.Utils
-
-
console.log tested on Chrome with success On IE: the console is not - available unless debugger is on: causes an exception.
-
-
setAction(int) - Method in class export.client.JSME
-
-
select one of the menu action without having to click on the menu.
-
-
setAfterDepictEditToggleEventHandler(JsClosureJsme) - Method in class export.client.JSME
-
 
-
setAfterPasteCallback(JavaScriptObject) - Method in class export.client.JSME
-
-
Deprecated.
-
-
setAfterStructureModifiedCallback(JavaScriptObject) - Method in class export.client.JSME
-
-
Deprecated.
-
-
setAntialias(boolean) - Method in class export.client.JSME
-
-
Set globally antialias
-
-
setAtomBackgroundColors(int, String) - Method in class export.client.JSME
-
 
-
setAtomMolecularAreaFontSize(float) - Method in class export.client.JSME
-
 
-
setAtomToHighLight(int, int) - Method in class export.client.JSME
-
 
-
setBeforePasteCallback(JavaScriptObject) - Method in class export.client.JSME
-
-
Deprecated.
-
-
setCallBack(String, JavaScriptObject) - Method in class export.client.JSME
-
-
Generic call back.
-
-
setHeight(String) - Method in class export.client.JSME
-
-
Sets the object's height.
-
-
setHelpURL(String) - Method in class export.client.JSME
-
-
set the url to display the JSME help page.
-
-
setMenuScale(double) - Method in class export.client.JSME
-
 
-
setMolecularAreaAntiAlias(boolean) - Method in class export.client.JSME
-
-
Set antialias for the molecular drawing area
-
-
setMolecularAreaLineWidth(float) - Method in class export.client.JSME
-
-
Line width in pixel
-
-
setMolecularAreaScale(double) - Method in class export.client.JSME
-
 
-
setNotifyAtomHighLightChangeJSfunction(String) - Method in class export.client.JSME
-
-
Deprecated.
-
-
setNotifyStructuralChangeJSfunction(String) - Method in class export.client.JSME
-
-
Deprecated.
-
-
setPasteLabel(String) - Method in class export.client.JSME
-
-
Set the label of the context popup menu for pasting string, instead of using the default label.
-
-
setPrePasteJSfunction(String) - Method in class export.client.JSME
-
-
Deprecated.
-
-
setSize(String, String) - Method in class export.client.JSME
-
-
Sets the object's size.
-
-
setSize(int, int) - Method in class export.client.JSME
-
-
Sets the object's size.
-
-
setSize(String, String, boolean) - Method in class export.client.JSME
-
-
Sets the object's size.
-
-
setSize(int, int, boolean) - Method in class export.client.JSME
-
-
Sets the object's size.
-
-
setSubstituent(String) - Method in class export.client.JSME
-
-
Select the next FG to be used.
-
-
setTemplate(String, String) - Method in class export.client.JSME
-
-
Provide a template, a molecular fragment with one marked atom, in JME format.
-
-
setVisible(boolean) - Method in class export.client.JSME
-
-
Shows or hides the given element.
-
-
setWebSearchInchiKeyBaseUrl(String) - Method in class export.client.JSME
-
-
Set the base url for inchi key search.
-
-
setWidth(String) - Method in class export.client.JSME
-
-
Sets the object's width.
-
-
showInfo(String) - Method in class export.client.JSME
-
-
Display a message in the bottom bar.
-
-
smiles() - Method in class export.client.JSME
-
 
-
- - - -

U

-
-
Utils - Class in export.client
-
 
-
Utils() - Constructor for class export.client.Utils
-
 
-
-A C D E G I J M N O R S U 
- - - - - - diff --git a/chemprop/web/app/static/jsme/api_javadoc/index.html b/chemprop/web/app/static/jsme/api_javadoc/index.html deleted file mode 100644 index a79b0725a..000000000 --- a/chemprop/web/app/static/jsme/api_javadoc/index.html +++ /dev/null @@ -1,71 +0,0 @@ - - - - - -Generated Documentation (Untitled) - - - - - - -<noscript> -<div>JavaScript is disabled on your browser.</div> -</noscript> -<h2>Frame Alert</h2> -<p>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. Link to <a href="export/client/package-summary.html">Non-frame version</a>.</p> - - - diff --git a/chemprop/web/app/static/jsme/api_javadoc/overview-tree.html b/chemprop/web/app/static/jsme/api_javadoc/overview-tree.html deleted file mode 100644 index 74dcab918..000000000 --- a/chemprop/web/app/static/jsme/api_javadoc/overview-tree.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - -Class Hierarchy - - - - - - - - - - - -
-

Hierarchy For All Packages

-Package Hierarchies: - -
-
-

Class Hierarchy

-
    -
  • java.lang.Object - -
  • -
-
- - - - - - diff --git a/chemprop/web/app/static/jsme/api_javadoc/package-list b/chemprop/web/app/static/jsme/api_javadoc/package-list deleted file mode 100644 index 39d2419de..000000000 --- a/chemprop/web/app/static/jsme/api_javadoc/package-list +++ /dev/null @@ -1 +0,0 @@ -export.client diff --git a/chemprop/web/app/static/jsme/api_javadoc/script.js b/chemprop/web/app/static/jsme/api_javadoc/script.js deleted file mode 100644 index b34635693..000000000 --- a/chemprop/web/app/static/jsme/api_javadoc/script.js +++ /dev/null @@ -1,30 +0,0 @@ -function show(type) -{ - count = 0; - for (var key in methods) { - var row = document.getElementById(key); - if ((methods[key] & type) != 0) { - row.style.display = ''; - row.className = (count++ % 2) ? rowColor : altColor; - } - else - row.style.display = 'none'; - } - updateTabs(type); -} - -function updateTabs(type) -{ - for (var value in tabs) { - var sNode = document.getElementById(tabs[value][0]); - var spanNode = sNode.firstChild; - if (value == type) { - sNode.className = activeTableTab; - spanNode.innerHTML = tabs[value][1]; - } - else { - sNode.className = tableTab; - spanNode.innerHTML = "" + tabs[value][1] + ""; - } - } -} diff --git a/chemprop/web/app/static/jsme/api_javadoc/stylesheet.css b/chemprop/web/app/static/jsme/api_javadoc/stylesheet.css deleted file mode 100644 index 98055b22d..000000000 --- a/chemprop/web/app/static/jsme/api_javadoc/stylesheet.css +++ /dev/null @@ -1,574 +0,0 @@ -/* Javadoc style sheet */ -/* -Overall document style -*/ - -@import url('resources/fonts/dejavu.css'); - -body { - background-color:#ffffff; - color:#353833; - font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; - font-size:14px; - margin:0; -} -a:link, a:visited { - text-decoration:none; - color:#4A6782; -} -a:hover, a:focus { - text-decoration:none; - color:#bb7a2a; -} -a:active { - text-decoration:none; - color:#4A6782; -} -a[name] { - color:#353833; -} -a[name]:hover { - text-decoration:none; - color:#353833; -} -pre { - font-family:'DejaVu Sans Mono', monospace; - font-size:14px; -} -h1 { - font-size:20px; -} -h2 { - font-size:18px; -} -h3 { - font-size:16px; - font-style:italic; -} -h4 { - font-size:13px; -} -h5 { - font-size:12px; -} -h6 { - font-size:11px; -} -ul { - list-style-type:disc; -} -code, tt { - font-family:'DejaVu Sans Mono', monospace; - font-size:14px; - padding-top:4px; - margin-top:8px; - line-height:1.4em; -} -dt code { - font-family:'DejaVu Sans Mono', monospace; - font-size:14px; - padding-top:4px; -} -table tr td dt code { - font-family:'DejaVu Sans Mono', monospace; - font-size:14px; - vertical-align:top; - padding-top:4px; -} -sup { - font-size:8px; -} -/* -Document title and Copyright styles -*/ -.clear { - clear:both; - height:0px; - overflow:hidden; -} -.aboutLanguage { - float:right; - padding:0px 21px; - font-size:11px; - z-index:200; - margin-top:-9px; -} -.legalCopy { - margin-left:.5em; -} -.bar a, .bar a:link, .bar a:visited, .bar a:active { - color:#FFFFFF; - text-decoration:none; -} -.bar a:hover, .bar a:focus { - color:#bb7a2a; -} -.tab { - background-color:#0066FF; - color:#ffffff; - padding:8px; - width:5em; - font-weight:bold; -} -/* -Navigation bar styles -*/ -.bar { - background-color:#4D7A97; - color:#FFFFFF; - padding:.8em .5em .4em .8em; - height:auto;/*height:1.8em;*/ - font-size:11px; - margin:0; -} -.topNav { - background-color:#4D7A97; - color:#FFFFFF; - float:left; - padding:0; - width:100%; - clear:right; - height:2.8em; - padding-top:10px; - overflow:hidden; - font-size:12px; -} -.bottomNav { - margin-top:10px; - background-color:#4D7A97; - color:#FFFFFF; - float:left; - padding:0; - width:100%; - clear:right; - height:2.8em; - padding-top:10px; - overflow:hidden; - font-size:12px; -} -.subNav { - background-color:#dee3e9; - float:left; - width:100%; - overflow:hidden; - font-size:12px; -} -.subNav div { - clear:left; - float:left; - padding:0 0 5px 6px; - text-transform:uppercase; -} -ul.navList, ul.subNavList { - float:left; - margin:0 25px 0 0; - padding:0; -} -ul.navList li{ - list-style:none; - float:left; - padding: 5px 6px; - text-transform:uppercase; -} -ul.subNavList li{ - list-style:none; - float:left; -} -.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { - color:#FFFFFF; - text-decoration:none; - text-transform:uppercase; -} -.topNav a:hover, .bottomNav a:hover { - text-decoration:none; - color:#bb7a2a; - text-transform:uppercase; -} -.navBarCell1Rev { - background-color:#F8981D; - color:#253441; - margin: auto 5px; -} -.skipNav { - position:absolute; - top:auto; - left:-9999px; - overflow:hidden; -} -/* -Page header and footer styles -*/ -.header, .footer { - clear:both; - margin:0 20px; - padding:5px 0 0 0; -} -.indexHeader { - margin:10px; - position:relative; -} -.indexHeader span{ - margin-right:15px; -} -.indexHeader h1 { - font-size:13px; -} -.title { - color:#2c4557; - margin:10px 0; -} -.subTitle { - margin:5px 0 0 0; -} -.header ul { - margin:0 0 15px 0; - padding:0; -} -.footer ul { - margin:20px 0 5px 0; -} -.header ul li, .footer ul li { - list-style:none; - font-size:13px; -} -/* -Heading styles -*/ -div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { - background-color:#dee3e9; - border:1px solid #d0d9e0; - margin:0 0 6px -8px; - padding:7px 5px; -} -ul.blockList ul.blockList ul.blockList li.blockList h3 { - background-color:#dee3e9; - border:1px solid #d0d9e0; - margin:0 0 6px -8px; - padding:7px 5px; -} -ul.blockList ul.blockList li.blockList h3 { - padding:0; - margin:15px 0; -} -ul.blockList li.blockList h2 { - padding:0px 0 20px 0; -} -/* -Page layout container styles -*/ -.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer { - clear:both; - padding:10px 20px; - position:relative; -} -.indexContainer { - margin:10px; - position:relative; - font-size:12px; -} -.indexContainer h2 { - font-size:13px; - padding:0 0 3px 0; -} -.indexContainer ul { - margin:0; - padding:0; -} -.indexContainer ul li { - list-style:none; - padding-top:2px; -} -.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { - font-size:12px; - font-weight:bold; - margin:10px 0 0 0; - color:#4E4E4E; -} -.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { - margin:5px 0 10px 0px; - font-size:14px; - font-family:'DejaVu Sans Mono',monospace; -} -.serializedFormContainer dl.nameValue dt { - margin-left:1px; - font-size:1.1em; - display:inline; - font-weight:bold; -} -.serializedFormContainer dl.nameValue dd { - margin:0 0 0 1px; - font-size:1.1em; - display:inline; -} -/* -List styles -*/ -ul.horizontal li { - display:inline; - font-size:0.9em; -} -ul.inheritance { - margin:0; - padding:0; -} -ul.inheritance li { - display:inline; - list-style:none; -} -ul.inheritance li ul.inheritance { - margin-left:15px; - padding-left:15px; - padding-top:1px; -} -ul.blockList, ul.blockListLast { - margin:10px 0 10px 0; - padding:0; -} -ul.blockList li.blockList, ul.blockListLast li.blockList { - list-style:none; - margin-bottom:15px; - line-height:1.4; -} -ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { - padding:0px 20px 5px 10px; - border:1px solid #ededed; - background-color:#f8f8f8; -} -ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { - padding:0 0 5px 8px; - background-color:#ffffff; - border:none; -} -ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { - margin-left:0; - padding-left:0; - padding-bottom:15px; - border:none; -} -ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { - list-style:none; - border-bottom:none; - padding-bottom:0; -} -table tr td dl, table tr td dl dt, table tr td dl dd { - margin-top:0; - margin-bottom:1px; -} -/* -Table styles -*/ -.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary { - width:100%; - border-left:1px solid #EEE; - border-right:1px solid #EEE; - border-bottom:1px solid #EEE; -} -.overviewSummary, .memberSummary { - padding:0px; -} -.overviewSummary caption, .memberSummary caption, .typeSummary caption, -.useSummary caption, .constantsSummary caption, .deprecatedSummary caption { - position:relative; - text-align:left; - background-repeat:no-repeat; - color:#253441; - font-weight:bold; - clear:none; - overflow:hidden; - padding:0px; - padding-top:10px; - padding-left:1px; - margin:0px; - white-space:pre; -} -.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link, -.useSummary caption a:link, .constantsSummary caption a:link, .deprecatedSummary caption a:link, -.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover, -.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover, -.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active, -.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active, -.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited, -.useSummary caption a:visited, .constantsSummary caption a:visited, .deprecatedSummary caption a:visited { - color:#FFFFFF; -} -.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span, -.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span { - white-space:nowrap; - padding-top:5px; - padding-left:12px; - padding-right:12px; - padding-bottom:7px; - display:inline-block; - float:left; - background-color:#F8981D; - border: none; - height:16px; -} -.memberSummary caption span.activeTableTab span { - white-space:nowrap; - padding-top:5px; - padding-left:12px; - padding-right:12px; - margin-right:3px; - display:inline-block; - float:left; - background-color:#F8981D; - height:16px; -} -.memberSummary caption span.tableTab span { - white-space:nowrap; - padding-top:5px; - padding-left:12px; - padding-right:12px; - margin-right:3px; - display:inline-block; - float:left; - background-color:#4D7A97; - height:16px; -} -.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab { - padding-top:0px; - padding-left:0px; - padding-right:0px; - background-image:none; - float:none; - display:inline; -} -.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd, -.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd { - display:none; - width:5px; - position:relative; - float:left; - background-color:#F8981D; -} -.memberSummary .activeTableTab .tabEnd { - display:none; - width:5px; - margin-right:3px; - position:relative; - float:left; - background-color:#F8981D; -} -.memberSummary .tableTab .tabEnd { - display:none; - width:5px; - margin-right:3px; - position:relative; - background-color:#4D7A97; - float:left; - -} -.overviewSummary td, .memberSummary td, .typeSummary td, -.useSummary td, .constantsSummary td, .deprecatedSummary td { - text-align:left; - padding:0px 0px 12px 10px; -} -th.colOne, th.colFirst, th.colLast, .useSummary th, .constantsSummary th, -td.colOne, td.colFirst, td.colLast, .useSummary td, .constantsSummary td{ - vertical-align:top; - padding-right:0px; - padding-top:8px; - padding-bottom:3px; -} -th.colFirst, th.colLast, th.colOne, .constantsSummary th { - background:#dee3e9; - text-align:left; - padding:8px 3px 3px 7px; -} -td.colFirst, th.colFirst { - white-space:nowrap; - font-size:13px; -} -td.colLast, th.colLast { - font-size:13px; -} -td.colOne, th.colOne { - font-size:13px; -} -.overviewSummary td.colFirst, .overviewSummary th.colFirst, -.useSummary td.colFirst, .useSummary th.colFirst, -.overviewSummary td.colOne, .overviewSummary th.colOne, -.memberSummary td.colFirst, .memberSummary th.colFirst, -.memberSummary td.colOne, .memberSummary th.colOne, -.typeSummary td.colFirst{ - width:25%; - vertical-align:top; -} -td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover { - font-weight:bold; -} -.tableSubHeadingColor { - background-color:#EEEEFF; -} -.altColor { - background-color:#FFFFFF; -} -.rowColor { - background-color:#EEEEEF; -} -/* -Content styles -*/ -.description pre { - margin-top:0; -} -.deprecatedContent { - margin:0; - padding:10px 0; -} -.docSummary { - padding:0; -} - -ul.blockList ul.blockList ul.blockList li.blockList h3 { - font-style:normal; -} - -div.block { - font-size:14px; - font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; -} - -td.colLast div { - padding-top:0px; -} - - -td.colLast a { - padding-bottom:3px; -} -/* -Formatting effect styles -*/ -.sourceLineNo { - color:green; - padding:0 30px 0 0; -} -h1.hidden { - visibility:hidden; - overflow:hidden; - font-size:10px; -} -.block { - display:block; - margin:3px 10px 2px 0px; - color:#474747; -} -.deprecatedLabel, .descfrmTypeLabel, .memberNameLabel, .memberNameLink, -.overrideSpecifyLabel, .packageHierarchyLabel, .paramLabel, .returnLabel, -.seeLabel, .simpleTagLabel, .throwsLabel, .typeNameLabel, .typeNameLink { - font-weight:bold; -} -.deprecationComment, .emphasizedPhrase, .interfaceName { - font-style:italic; -} - -div.block div.block span.deprecationComment, div.block div.block span.emphasizedPhrase, -div.block div.block span.interfaceName { - font-style:normal; -} - -div.contentContainer ul.blockList li.blockList h2{ - padding-bottom:0px; -} diff --git a/chemprop/web/app/static/jsme/bootstrap.css b/chemprop/web/app/static/jsme/bootstrap.css deleted file mode 100644 index 21f2ebd28..000000000 --- a/chemprop/web/app/static/jsme/bootstrap.css +++ /dev/null @@ -1,12 +0,0 @@ -/*! - * Bootstrap v3.3.2 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */ - - - -img { - vertical-align: middle; -} - diff --git a/chemprop/web/app/static/jsme/bootstrap.html b/chemprop/web/app/static/jsme/bootstrap.html deleted file mode 100644 index bfacd1452..000000000 --- a/chemprop/web/app/static/jsme/bootstrap.html +++ /dev/null @@ -1,48 +0,0 @@ - - - -Structure modified and atom mark demo - - - - - - - - - -

Structure modified and atom mark demo

-

-Draw a structure, click on the star icon of the editor and click on one or more atoms -

-
- -
- - - - diff --git a/chemprop/web/app/static/jsme/doc.css b/chemprop/web/app/static/jsme/doc.css deleted file mode 100644 index 26a1edf3a..000000000 --- a/chemprop/web/app/static/jsme/doc.css +++ /dev/null @@ -1,27 +0,0 @@ - - - -div.example_code { - background-color: #F6F4F0; - border: 1px solid #D4D4D4; - font-family: "courier new"; - font-size: 90%; - padding: 5px; - width: 98%; - border-style:solid; - border-color:white; - border-width:15px; - width: 90%; -} -div.example_code_jsme { - background-color: #F6F4F8; - border: 1px solid #D4D4D4; - font-family: "courier new"; - font-size: 90%; - padding: 5px; - border-style:solid; - border-color:white; - border-width:15px; - width: 90%; -} - diff --git a/chemprop/web/app/static/jsme/doc.html b/chemprop/web/app/static/jsme/doc.html deleted file mode 100644 index 50ed45977..000000000 --- a/chemprop/web/app/static/jsme/doc.html +++ /dev/null @@ -1,393 +0,0 @@ - - - - - - -Installation of the JSME molecule editor - - - -

Installation of the JSME molecule editor

- -

Introduction

-This document describes how to embed JSME into a web page.
-The first section describes how to migrate pages that use the JME Java applet.
-The second part shows how to install JSME using JavaScript. - -

Migration from JME to JSME

- The HTML pages that use the "applet" tag can easily adapted thanks to the provided JavaScript code. Pages that use other methods to embed a Java applet, - using the "object" or the "embed" tags are presently not supported. -

HTML modification for pages using the "applet" tags

- Many websites still use the JME Java applet. Migrating an HTML page - from JME to JSME is basically a two steps process: -
-
    -
  • Include the JSME javascript code
  • -
  • Rename the java APPLET tag to DIV tag
  • -
- - Example of simple html page with a Java JME applet: -
-
-<html>
-<head>
- <title>JME Example</title>
-</head>
-
-<body>
- <applet code="JME.class" name="JME" archive="JME.jar" width="360" height="315" id="JME">
- You have to enable Java and JavaScript in your browser to use JME!
- </applet>
-</body>
-</html>
-
-
-The same page after migration to JSME: - - -
- -<html>
-<head>
- <script type="text/javascript" language="javascript" src="jsme/jsme.nocache.js"></script>
- - <title>JME Example</title>
-</head>
-
-<body>
- <div code="JME.class" name="JME" archive="JME.jar" width="360" height="315" id="JME">
- You have to enable JavaScript in your browser to use JSME! - </div>
-</body>
-</html>
- -
-
-
-This example page can be tested in your browser: JME_to_JSME_simple.html
-
-

Important warning

-Due to an Internet Explorer bug, the id of any DIV element may never be "JSME". -

-Here is an example for which some older versions of Internet Explorer will fail:
-
- <div id="JSME" "code="JME.class" name="JME" archive="JME.jar" width="360" height="315" id="JME">
- You have to enable JavaScript on your machine ! - </div>
-
- -

Accessing the applet variable in the JavaScript code

- -Java applets can be accessed in the JavaScript code in three different ways:
- -
    -
  • document.JME using a variable name
  • -
  • document.applets[0] using the applet array
  • -
  • document.getElementById("JME")> using the applet id
  • - -
-
-With JSME, the equivalent JavaScript applet can be accessed in the JavaScript code in two different ways:
- -
    -
  • document.JME using a variable name (identical to Java applets)
  • -
  • document.jsapplets[0] using the jsapplets array (different to Java applets)
  • -
-
-The third method is not supported. -

-If your HTML page uses the document.applets to access the JME applets, then all occurences of document.applets will need to be replaced by document.jsapplets. -

- -
-Example:
-
- <div code="JME.class" name="JME1" archive="JME.jar" width="360" height="315" id="JME">
- You have to enable JavaScript on your machine ! - </div>
- <div code="JME.class" name="JME2" archive="JME.jar" width="360" height="315" id="JME">
- You have to enable JavaScript on your machine ! - </div>>
-
-
-The code to access them using the variable name and the jsapplets array is shown below: -
- <input type="button" value="Get smiles via document.JME1" onclick="alert(document.JME1.smiles());">
- <input type="button" value="Get smiles via document.jsapplets[1]" onclick="alert(document.jsapplets[1].smiles());"> -
- -
- -

Timing issue with the initialization of the JavaScript applet using body.onload()

-Java applets can be initialized using some JavaScript code after the page has finished loading. Unfortunately, the "body.onload()" method -that is usually used for this purpose cannot be used with JSME because some JSME instances might not be ready when the body.onload method is called.
-To solve this problem, the JSME initialization can call a function named "jsmeOnLoad" that contains custom initialization code.
-
-Example of simple html code with a "body.onload()" for the Java applet JME:
-
-<body onLoad="loadJmeFile();loadMolFile();"> -
- -
-Example of simple html code with an empty "body.onload()" and a "jsmeOnLoad" function for JSME:
-
-<script>
-function jsmeOnLoad() {
-    loadJmeFile();loadMolFile();
-}
-</script>
-
-<body onLoad="">
-
- - -

Example of JME to JSME pages

- - -

Implementation note

-After being loaded, the JSME JavaScript code scans the HTML page looking for all DIV elements have a code attribute as code="JME.class". -The JavaScript code that performs this task is available as a function named replaceAllAppletsByJSME(). -For more information about this function, see the API section. - - - - - -

Installation of JSME using JavaScript code

- -To install JSME in a web page requires three items: -
    -
  • include the JSME JavaScript code
  • -
  • define a function named jsmeOnLoad that will create a JSME instance
  • -
  • define a HTML element where the created jsme will be placed
  • - -
-
-<html>
-
-<head>
- -<script type="text/javascript" language="javascript" src="jsme/jsme.nocache.js"></script>
-
- -
- -<script>
- //this function will be called after the JavaScriptApplet code has been loaded.
-    function jsmeOnLoad() {
-        jsmeApplet = new JSApplet.JSME("jsme_container", "380px", "340px");
-   }
-</script>
-
-</head>
- -<body>
-<div id="jsme_container"></div>
-
-</body>
-</html>
- -
- -The HTML code above can be tested here.
-
The use of a the "jsmeOnLoad" function is necessary only if a JSME instance needs to be available immediately after the HTML page has been loaded. For more information, see the timing issue defined above. -

-The example code above is minimalist, it is actually not very useful because it does not show how to use the JavaScript variable "jsmeApplet" that was created.
-Here is a new example with a button that displays the SMILES of the molecule drawn in the editor:
- -
-<html>
-
-<head>
- -<script type="text/javascript" language="javascript" src="jsme/jsme.nocache.js"></script>
- - -
- -<script>
- //this function will be called after the JavaScriptApplet code has been loaded.
-    function jsmeOnLoad() {
-        jsmeApplet = new JSApplet.JSME("jsme_container", "380px", "340px");
-   }
-</script>
- -</head>
- -<body>
-<div id="jsme_container"></div>
-
-<button type="button" onclick="alert(jsmeApplet.smiles())">Show SMILES</button>
-</body>
-</html>
- -
- -The HTML code above can be tested here. - -

-The function used to created a new JSME instance can accept a third argument. The purpose of this optional argument is to set options to customize the look and behavior of JSME: - -
-<html>
-
-<head>
- -<script type="text/javascript" language="javascript" src="jsme/jsme.nocache.js"></script>
- - -
- -<script>
- //this function will be called after the JavaScriptApplet code has been loaded.
-    function jsmeOnLoad() {
-        jsmeApplet = new JSApplet.JSME("jsme_container", "380px", "340px", {
-            "options" : "oldlook,star"
-            }
); -
-</script>
- -</head>
- -<body>
-<div id="jsme_container"></div>
-
-<button type="button" onclick="alert(jsmeApplet.smiles())">Show SMILES</button>
-</body>
-</html>
- -
-
-The HTML code above can be tested here.
- -

JSME API

-The API of JSME includes the API of the java applet JME plus new functions and methods. A summary of the API is presently available as a JavaDoc file.
-
- -

JSME options

- -

Several options are available to customize the look and behavior of JSME.

- - Recognized keywords are :

- - - -xbutton, noxbutton - show / hide the X button (default is xbutton)
-rbutton, norbutton - show / hide the R button (to mark connection of substituent with the main scaffold)
- -atommovebutton, noatommovebutton - show / hide the atom move button (default is noatommovebutton)
-hydrogens, nohydrogens - display / hide hydrogens on heteroatom labels (default is hydrogens)
-keephs, removehs - remove hydrogens when reading a molecule with explicit hydrogens (default is keephs). This option can be used to remove hydrogens when pasting a structure with explicit hydrogens comning from e.g. the Pubchem database
-keephs, removehsc - remove hydrogens bounded to C when reading a molecule with explicit hydrogens (default is keephs). This option can be used to remove hydrogens when pasting a structure with explicit hydrogens comning from e.g. the Pubchem database
-query, noquery - enable / disable query features (default is noquery). In query mode, a SMARTS is generated when a smiles is requested.
autoez, noautoez - automatic generation of SMILES with E,Z stereochemistry (default is autoez)
-canonize,nocanonize - SMILES canonicalization and detection of aromaticity supressed (default is canonize)
-stereo,nostereo - stereochemistry not considered when creating SMILES (default is stereo)
-reaction, noreaction - enable / disable reaction input
-multipart, nomultipart - possibility to enter multipart structures (default multipart)
-addnewpart, noaddnewpart when reading or pasting a new molecule, add it to the existing molecules or replace them (used only if option multipart is set)
- -polarnitro, nopolarnitro - prevent automatic conversion of nitro (and similar) groups into nonpolar form (default is nopolarnitro)
-number / autonumber - possibility to number (mark) atoms
-star, nostar - possibility to highlight an atom (default is nostar). All highlighted atoms will have an atom number equal to 1. The atom numbers are included in the exported SMILES and MOL.
-depict, nodepict - the applet will appear without editing buttons, this is used for structure display only (default nodepict)
-depictaction, nodepictaction - allow structure editing in depict mode
-toggle, notoggle - allow to switch automatically between editing and depict mode (default is notoggle)
- - - -paste, nopaste - enabling and disabling the paste action including drop of a MOL/RXN on the applet., can be used together with the depict option to have a read only depiction
-border, noborder (used together with the depict option) - displays a border around depicted molecule (default is noborder)
-newlook, oldlook - turn on/off the old Java based JME look (default is newlook)
- -exportinchi, noexportinchi - enable / disable the menu item forInChI export (http://www.inchi-trust.org/)
-exportinchikey, noexportinchikey - enable / disable the menu item for InChI key export (http://www.inchi-trust.org/)
-exportinchiauxinfo, noexportinchiauxinfo - enable / disable the menu item for InChI auxinfo export (http://www.inchi-trust.org/)
-searchinchiKey, nosearchinchiKey - enable / disable the menu item to search InChI key on the web (http://www.inchi-trust.org/)
- -useopenchemlib, nouseopenchemlib - use the OpenChemLib library (https://github.com/Actelion/openchemlib) for SMILES conversion, 2D coordinates computation and SVG export
-exportSVG, noexportSVG - enable / disable the menu item for SVG export (useopenchemlib must be set))
-useOclidcode, nouseOclidcode - enable / disable the menu item for OCL export (useopenchemlib must be set))
- - -zoom, nozoom - turn on/off zooming of the molecular drawing area
-showdraganddropsymbolindepictmode, noshowdraganddropsymbolindepictmode show or hide the drag and drop symbol (blue triangle) in depict mode
- - -atombg - atom background color - see the demo JSME_atom_highlight_demo.html for an example
-depictbg - background color for the depict mode in hex format - no test yet
-
-
-The option of a JMSE instance can be setup during its creation or afterwards using the options() method. See the JSME API section. - - -

JSME Callbacks

-

Introduction

-JSME provides a callback mechanism where JavaScript functions are called before or after a specific event has happened in JSME. One of the most useful callback is the "AfterStructureModified" that allows the creation of interactive HTML pages that track any structure change, for instance to compute and display of a 3D structure. -The JavaScript functions are defined in the HTML page and set using the "setCallBack()" method. This method needs two arguments, a callback name and a JavaScript function. - -

Example

-
-
-
-function showSmiles(jsmeEvent) {
-	var jsme = jsmeEvent.src;
-	var smiles = jsme.smiles();
-	alert(smiles);
-}
-
-jsmeApplet.setCallBack("AfterStructureModified", showSmiles);
-
-
-
-
-
-

The JSME event variable

-Each callback function received one argument: a JSMEevent object. This object contains several fields that may or may be not defined according the event type. The fields of JSMEevent are: - -
    -
  • src: the JSME instance that triggered the event. This variable can be useful if the HTML page contains several instances of JSME.
  • -
  • action: usually the callback name
  • -
  • atom: 0 or the atom index affected by the event
  • -
  • bond: 0 or the bond index affected by the event
  • -
  • molecule: 0 or the molecule index affected by the event
  • -
  • argument: null or some meaningful data (e.g. a InchiResult object)
  • -
- -

Predefined callback names

-

BeforePaste

-

AfterPaste

-

AfterStructureModified

-

AtomHighlight

-

BondHighlight

-

AtomClicked

-

BondClicked

-

InchiKeySearch

- - -The JSME callback system is work in progress. - -

The InchiResult variable

-InchiResult objects are generated by the Javascript InChI computation implemented in JSME. The fields of InchiResult are: -
    -
  • inchi
  • -
  • key
  • -
  • auxinfo
  • -
  • warning
  • -
  • error
  • -
- - -
- - - \ No newline at end of file diff --git a/chemprop/web/app/static/jsme/index.html b/chemprop/web/app/static/jsme/index.html deleted file mode 100644 index 11ea90adc..000000000 --- a/chemprop/web/app/static/jsme/index.html +++ /dev/null @@ -1,58 +0,0 @@ - - - - -JSME Molecule Editor - - -

JSME Molecule Editor Distribution

- -This distribution contains 3 directories:
-
    -
  • jsme - the actual JSME code - every file in the directory is a JavaScript code optimized for specific browser
  • -
  • api_javadoc - the JSME API - please note that although the JSME is in JavaScript, the documentation was generated automatically and therefore follows the Java conventions, anyway it should provide sufficient information to call low-level JSME functions
  • -
  • jme_examples - examples of usage of JSME using the JME to JSME migration
  • - -
-

-Files contained in the current directory should help you to implement JSME easily:

- -doc.html provides basic information about JSME implementation into web page - start with this document
-

- -

-Example pages:
-

-

-And some other files:
-

-

-If you are using the JSME cite please the following article:
-B. Bienfait and P. Ertl, JSME: a free molecule editor in JavaScript, J. Cheminformatics 5:24 (2013) -

-Happy molecule editing! - diff --git a/chemprop/web/app/static/jsme/jme_examples/jme_example1.html b/chemprop/web/app/static/jsme/jme_examples/jme_example1.html deleted file mode 100644 index 88b2495c5..000000000 --- a/chemprop/web/app/static/jsme/jme_examples/jme_example1.html +++ /dev/null @@ -1,143 +0,0 @@ - - -JME Example 1 - - - - - - - -

-

-

Example of Java - JavaScript communication and data export / - import

- -

- - - - - -
- - - - - - - -
-
You have to enable Java and JavaScritpt on - your machine !
-
JME - Help
-
-
-

-

- smiles

-

- jme string
- -

- mol file
- -

- -       -

- -   -

-   -

-
-
- -

- -       -
- -

- - - - - - - - - - - - - - -
- Keyboard shortcuts -
bonds -,=,#rings 3..8, Ph is 1, furyl 0atoms C,N,O,P,S,F,L,B,I,Hgroups t - tert.butyl, ft - CF3, y - - nitro, a - COOH, z - SO3H
d - deleteEsc - return to the standard - state (C, single bond)
molecule may by moved by - "dragging" free space and rotated by pressing concurrently also - the shift key
-

-

- - diff --git a/chemprop/web/app/static/jsme/jme_examples/jme_example2.html b/chemprop/web/app/static/jsme/jme_examples/jme_example2.html deleted file mode 100644 index 0c6615ddf..000000000 --- a/chemprop/web/app/static/jsme/jme_examples/jme_example2.html +++ /dev/null @@ -1,51 +0,0 @@ - - -JME Example 2 - - - - - -

Example of Structure Input

- -
-Press the Draw Molecule button, draw molecule and then press Submit Molecule button in the editor window.

- -   - -   - -

- -

-

- - - diff --git a/chemprop/web/app/static/jsme/jme_examples/jme_example3.html b/chemprop/web/app/static/jsme/jme_examples/jme_example3.html deleted file mode 100644 index 0a2c3b5de..000000000 --- a/chemprop/web/app/static/jsme/jme_examples/jme_example3.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - -JME Example3 - - - -

Loading molecules to and from JME

-
- - - - - -
-
- JME - Editor courtesy of Peter Ertl, Novartis -

- Active molecule window #    -

- -

-

- - - - - - - - - - - - -
- -
- - - -
-
- - -
- -
- -
-
- - \ No newline at end of file diff --git a/chemprop/web/app/static/jsme/jme_examples/jme_example4.html b/chemprop/web/app/static/jsme/jme_examples/jme_example4.html deleted file mode 100644 index ccf9ce907..000000000 --- a/chemprop/web/app/static/jsme/jme_examples/jme_example4.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - -JME Example 4 - - - - - -

-

Adding additional functionality to JME by JavaScript

- Capabilities of JME may be enhanced by adding relatively simple - JavaScript code to the page containing JME. -
-

Substituent menu

- This option allows fast and convenient creation of common organic - substituents. Check the JavaScript code in this page to see how the - substituent menu should be implemented. -

-

Molecule persistency

- Several users asked for a "persistent molecule" in the JME Editor. That - means that when they visit another page and then come back, the JME - should remember the molecule recently edited. It is relatively easy to - implement this feature. It requires just to add two JavaScript - functions to the page (saveJMECookie and read JMECookie), as shown in - the source of this page. Additionally, respective event handlers must - be added into the page BODY tag. -
Whenever the HTML page with the editor is abandoned, the - actual molecule is stored into a so called "cookie" (a small piece of - persistent information associated with this particular web page) and - when the page is revisited (even after several weeks), the molecule is - automatically restored. -

-

- - - - - -
 
-
You have to enable Java in your - browser.
- - - - - -
JME - Editor courtesy of Peter Ertl, NovartisJME help
-
- - \ No newline at end of file diff --git a/chemprop/web/app/static/jsme/jme_examples/jme_window.html b/chemprop/web/app/static/jsme/jme_examples/jme_window.html deleted file mode 100644 index 9bd0b5f83..000000000 --- a/chemprop/web/app/static/jsme/jme_examples/jme_window.html +++ /dev/null @@ -1,44 +0,0 @@ - - -JME Molecular Editor - - - - - - - - -
- -
You have to enable Java and JavaScritpt on your - machine !
-
-       -
-
- - \ No newline at end of file diff --git a/chemprop/web/app/static/jsme/jsme/222ADBFEC322C2723C6ED2C4FB31B217.cache.js b/chemprop/web/app/static/jsme/jsme/222ADBFEC322C2723C6ED2C4FB31B217.cache.js deleted file mode 100644 index 3911785bd..000000000 --- a/chemprop/web/app/static/jsme/jsme/222ADBFEC322C2723C6ED2C4FB31B217.cache.js +++ /dev/null @@ -1 +0,0 @@ -jsme.onScriptDownloaded(['var $wnd = $wnd || window.parent;var __gwtModuleFunction = $wnd.jsme;var $sendStats = __gwtModuleFunction.__sendStats;$sendStats(\'moduleStartup\', \'moduleEvalStart\');var $gwt_version = "2.5.1";var $strongName = \'222ADBFEC322C2723C6ED2C4FB31B217\';var $doc = $wnd.document;function __gwtStartLoadingFragment(frag) {var fragFile = \'deferredjs/\' + $strongName + \'/\' + frag + \'.cache.js\';return __gwtModuleFunction.__startLoadingFragment(fragFile);}function __gwtInstallCode(code) {return __gwtModuleFunction.__installRunAsyncCode(code);}var $stats = $wnd.__gwtStatsEvent ? function(a) {return $wnd.__gwtStatsEvent(a);} : null;var $sessionId = $wnd.__gwtStatsSessionId ? $wnd.__gwtStatsSessionId : null;var m="",ba="\\n",ea="\\n\\n",fa=" ",ha=" \\t\\n\\r\\u000c",ia=" ",ja=" 0 0",ka=" 0 0 0",la=" 0 0 0 0 0 0 0",ma=" 0 0 0 0 0999 ",na=" : ",ra=" !",sa=" *",ta=" 0 0 ",ua=" : ",va=" CFG=",wa=" CHG=",Ca=" Molecular Editor by Peter Ertl and Bruno Bienfait",Ea=" Use Page Up/Down for SDF access (",Fa=" V3000",Ha=" [ATOMS=(",Ia=" border=\'0\'><\/gwt:clipper>",Ka=" depict",La=" exceptions caught: ",Ma=" failed with status 404(Script Tag Failure - no status available)",Oa=" failed with text ",Pa=\' filled="false" strokecolor="\',\nUa=\' filled="true" stroked="false" fillcolor="\',Va=" height=",$a=" initOrResize: true ",ab=" is not supported",bb=" new molecularAreaScale = ",cb=" not found.",jb=" of ",lb=" or ",mb=" or OCL ID code",nb=" out of range",rb=" scale: ",vb=\' strokeweight="\',wb=" sun.boot.class.path",xb=" xsize=",yb=" ysize=",zb="!",Db=\'"\',Eb=\'" \',Fb=\'" endangle="\',Ib=\'" strokecolor="\',Kb=\'" style="top:\',Lb=\'" to="\',Rb=\'" width=\',Sb=\'", Using "100%".\',Tb="\\">",We="/>\\n",Xe="0",Ye="0.0px",Ze="0px",$e="1",af="100%",bf="123",cf="144.0pt",df="144.0px",ef="2",ff="2.5.0",gf="2147483647",hf="3",jf="3.0.0",kf="4",lf="4841BDE9DC293BA35F7762B4D8EFD236.cache.png",mf="5",nf="6",sf="7",tf="72.0px",vf="8",wf="9",xf="96E40B969193BD74B8A621486920E79C.cache.js",yf="9p",zf=":",Af=": ",Bf=":moduleBase",Cf=";",Df="; ",Ef=";\'>",Ff="<",Lf="<\/chemical:x-mdl-molfile",Mf="<\/div><\/body><\/html>",Nf="<\/span>",\nOf="
\',Sf="",Xf="?",Yf="@",cg="@@",dg="A",eg="A JavaScript function name is expected, not a the function itself",fg="A6DBDE07E3A8F66E8959A4F32505E16B.cache.png",\ngg="API",hg="AfterStructureModified",ig="Ag",jg="Al",kg="All rights reserved.",lg="Apr",mg="Are you trying to draw an hedgehog ?",ng="AtomClicked",og="AtomHighlight",pg="Au",qg="Aug",rg="Auto atom map molecule",sg="B",tg="Ba",ug="BackgroundImageCache",vg="Bad stereoinfo on allene !",yg="BeforePaste",Bg="BondClicked",Cg="BondHighlight",Dg="Bottom",Eg="Br",Fg="C",Gg="CSS1Compat",Hg="Ca",Ig="Can\'t find exported method for given arguments: ",Jg="Cannot add a handler with a null type",Kg="Cannot add a null handler",\nLg="Cannot fire null event",Mg="Cannot redo. Index is out of range.",Ng="Cannot set a new parent without first clearing the old parent",Og="Cannot undo. Index is out of range.",Pg="Caused by: ",Qg="Cd",Sg="Center",Wg="Change atom map",Yg="Character out of range: ",Zg="Charge change not possible on ",$g="Charge change not possible on multibonded ",ah="Charge change not possible on multibonded N or P !",bh="Charge change not possible on the halogen !",ch="Charge change not possible on this boron !",\ndh="Charge change not possible on this carbon !",eh="Chiral flag is set",fh="Cl",gh="Class$",hh="Clear canvas",ih="Color parameter outside of expected range",jh="Content",kh="Copy as ",oh="Copy as InChI",ph="Copy as InChI auxinfo",qh="Copy as InChI key",rh="Copy as OCL ID code",sh="Copy as Scalar Vector Graphics",th="Copy selected (blue) molecule to the other side of the reaction",uh="Copying the agent not possible !",vh="Copyright (c) 2017, Novartis Institutes for BioMedical Research Inc. and Bruno Bienfait.",\nwh="Cs",xh="Cu",yh="DF7764EEC1903CD03C9545B354D8D8E4.cache.png",zh="DOMMouseScroll",Ah="Dec",Bh="Default",Ch="Delete all atom map molecule",Dh="Delete hydrogens",Eh="Delete selected molecule (red)",Fh="Dialog",Gh="Download of ",Hh="ERROR - ",Ih="ERROR - cannot add aromatic spiro ring !",Jh="ERROR - invalid mol index: ",Kh="ERROR - problems in reading/processing MOL input",Lh="ERROR - problems in reading/processing molecule !",Mh="ERROR - spiro ring not possible here !",Oh="ERROR - strange reaction !",\nPh="ERROR - strange reaction - fixing !",Qh="ERROR: ",Rh="ERROR: Possible problem with your *.gwt.xml module file.\\nThe compile time user.agent value (ie6) does not match the runtime user.agent value (",Sh="Error in C3H stereospecification !",Xh="Error in C4 stereospecification !",Yh="Error in C4 stereospecification ! 2/0r",Zh="Error in stereoprocessing ! - t30",$h="Exception caught: ",ai="F",bi="FG",ci="Feb",di=\'For input string: "\',ei="Fr",fi="Fri",gi="GUI",hi="GWT",ii="Ga",ji="H",ki="H.1,2,3.He.3,4.Li.6,7.Be.9.B.10,11.C.12,13,14.N.14,15.O.16,17,18.F.19.Ne.20,21,22.Na.23.Mg.24,25,26.Al.27.Si.28,29,30.P.31.S.32,33,34,36.Cl.35,37.Ar.36,38,40.K.39,40,41.Ca.40,42,43,44,46,48.Sc.45.Ti.46,47,48,49,50.V.50,51.Cr.50,52,53,54.Mn.55.Fe.54,56,57,58.Co.59.Ni.58,60,61,62,64.Cu.63,65.Zn.64,66,67,68,70.Ga.69,71.Ge.70,72,73,74,76.As.75.Se.74,76,77,78,80,82.Br.79,81.Kr.78,80,82,83,84,86.Rb.85,87.Sr.84,86,87,88.Y.90.Zr.90,91,92,94,96.Nb.93.Mo.92,94,95,96,97,98,100.Tc.99.Ru.96,98,99,100,101,102,104.Rh.103.Pd.102,104,105,106,108,110.Ag.107,109.Cd.106,108,110,111,112,113,114,116.In.113,115.Sn.112,114,115,116,117,118,119,120,122,124.Sb.121,123.Te.120,122,123,124,125,126,128,130.I.127.Xe.124,126,128,129,130,131,132,134,136.Cs.133.Ba.130,132,134,135,136,137,138.La.138,139.Ce.136,138,140,142.Pr.141.Nd.142,143,144,145,146,148,150.Pm.145.Sm.144,147,148,149,150,152,154.Eu.151,153.Gd.152,154,155,156,157,158,160.Tb.159.Dy.156,158,160,161,162,163,164.Ho.165.Er.162,164,166,167,168,170.Tm.169.Yb.168,170,171,172,173,174,176.Lu.175,176.Hf.174,176,177,178,179,180.Ta.180,181.W.180,182,183,184,186.Re.185,187.Os.184,186,187,188,189,190,192.Ir.191,193.Pt.190,192,194,195,196,198.Au.197.Hg.197,198,199,200,201,202,204.Tl.203,205.Pb.204,206,207,208.Bi.209.Po.209.At.210.Rn.222.Fr.223.Ra.226.Ac.227.Th.232.Pa.231.U.234,235,238.Np.237.Pu.244.Am.243.Cm.247.Bk.247.Cf.251.Es.254.Fm.257.Md.258.No.255.Lr.256.Ku.261",\nli="HTML{margin:0 !important;border:none !important;}.dragdrop-handle{cursor:move;user-select:none;-khtml-user-select:none;-moz-user-select:none;}.GBVTBU-BB{zoom:1;}.dragdrop-dragging{zoom:normal;}.GBVTBU-BI{border:1px dashed #1e90ff;margin:0 !important;zoom:1;z-index:100;}.dragdrop-flow-panel-positioner{color:#1e90ff;display:inline;text-align:center;vertical-align:middle;}.dragdrop-proxy{background-color:#7af;}.dragdrop-selected,.dragdrop-dragging,.dragdrop-proxy{filter:alpha(opacity \\\\= 30);opacity:0.3;}.dragdrop-movable-panel{z-index:200;margin:0 !important;border:none !important;}",\nmi="Helvetica",ni="I",oi="IFRAME",pi="INPUT",qi="ISO-8859-1",ri="ISO-LATIN-1",si="InChI=",ti="InchiKeySearch",ui="Incorrect URL: ",vi="Index: ",wi="Inner",xi="Install of ",yi="Internal index set to null.",zi="Invalid JME string",Ai="Invalid V2000 molfile",Bi="Invalid callback name: ",Ci="JME",Ei="JME\\n\\n",Fi="JME 2017-02-26 ",Gi="JME.class",Hi="JSApplet.Inchi.",Ii="JSApplet.JSME",Ji="JSApplet.Utils",Ki="JSME",Li=\'JSME initialization error: Due to an Internet Explorer bug, HTML id argument can not be "JSME".\',\nMi="JSME initialization error: HTML id ",Ni="JSME initialization error: HTML id argument is null.",Oi=\'JSME installation warning: invalid size or not specified size of DOM element: "\',Pi="Jan",Qi="JavaScript",Ri="Jul",Si="Jun",Ti="K",Ui="Left",Vi="Li",Wi="M APO",Xi="M CHG",Yi="M CHG 1",Zi="M END",$i="M END\\n",aj="M ISO",bj="M ISO 1",cj="M V30 ",dj="M V30 BEGIN ATOM\\n",ej="M V30 BEGIN BOND\\n",fj="M V30 BEGIN COLLECTION",gj="M V30 BEGIN CTAB",hj="M V30 COUNTS ",ij="M V30 END ATOM\\n",\njj="M V30 END BOND\\n",kj="M V30 END COLLECTION\\n",lj="M V30 END CTAB\\n",mj="MDLV30/STEABS",oj="MDLV30/STERAC",pj="MDLV30/STEREL",qj="MOL",rj="MOL n. ",sj="MOL or SDF",tj="MOUSE_CLICKED",uj="MOUSE_DRAGGED",vj="MOUSE_ENTERED",wj="MOUSE_EXITED",xj="MOUSE_MOVED",yj="MOUSE_PRESSED",zj="MOUSE_RELEASED",Aj="MOUSE_WHEEL",Bj="Mar",Cj="Maximum allowed bond order is 3 !",Dj="May",Ej="Metallic ",Fj="Mg",Gj="Middle",Hj="Missing message: awt.133",Ij="Missing message: awt.151",Jj="Missing message: awt.70",Kj=\n"Mon",Lj="Move one atom",Mj="Must call next() before remove().",Nj="N",Oj="NA",Pj="NEW",Qj="Na",Rj="Next ring will be added as spiro",Sj="Ni",Tj="No Chiral flag",Uj="No more molecules in SDF buffer",Vj="No more redo",Wj="No more undo",Xj="Not known group!",Yj="Not possible connection !",Zj="Not unique E/Z geometry !",$j="Nov",ak="Null widget handle. If you are creating a composite, ensure that initWidget() has been called.",bk="O",ck="Oct",dk="P",ek="PARAM",fk="PASTE",gk="Paste ",hk="Popup",ik="Q",\njk="Q ",kk="R",nk="RXN",ok="Rb",pk="Reading ",qk="Removal of substituent not possible.",rk="Right",sk="S",tk="SDFstack",uk="SMILES",vk="SMIRKS",wk="Sat",xk="Se",yk="Search chemical structure (through InChIKey)",zk="Select substituent",Ak="Sep",Ck="Set molecule Chiral flag",Dk="Should only call onAttach when the widget is detached from the browser\'s document",Ek="Should only call onDetach when the widget is attached to the browser\'s document",Fk="Si",Gk="SimplePanel can only contain one child widget",\nHk="Sr",Ik="Stereomarking allowed only on single and double bonds!",Jk="Stereomarking meaningless on this bond !",Kk="String index out of range: ",Lk="Structure pasted. ",Mk="Style names cannot be empty",Nk="Sun",Ok="Text",Pk="This widget\'s parent does not implement HasWidgets",Qk="Thu",Rk="Top",Sk="Tue",Tk="UTF-8",Uk="Unset molecule chiral flag",Vk="Use X button to change charge on the X atom !",Wk="V1",Xk="V2",Yk="V2000",Zk="V3000",$k=\'Warning: the global function "jsmeOnLoad" is not defined.\\n If you have defined it, there might be a syntax error in your javascript code.\',\nal="Wed",bl="Widget must be a child of this panel.",cl="Windows NT",dl="X",el="You are too focused on chains, enough of it for now !",fl="Zn",gl="[",hl="[JavaScriptObject]",il="[object Array]",jl="\\\\",kl=\'\\\\"\',ll="\\\\$\\\\$\\\\$\\\\$\\r?\\n?",ml="\\\\.",nl="\\\\:",ol="\\\\\\\\",pl="\\\\\\\\n",ql="\\\\b",rl="\\\\bno",sl="\\\\f",tl="\\\\n",ul="\\\\r",vl="\\\\s+",wl="\\\\t",xl="\\\\u0000",yl="\\\\u0001",zl="\\\\u0002",Al="\\\\u0003",Bl="\\\\u0004",Cl="\\\\u0005",Dl="\\\\u0006",El="\\\\u0007",Fl="\\\\u000B",Jl="\\\\u000E",Kl="\\\\u000F",Ll="\\\\u0010",Ml="\\\\u0011",\nNl="\\\\u0012",Ol="\\\\u0013",Pl="\\\\u0014",Ql="\\\\u0015",Rl="\\\\u0016",Sl="\\\\u0017",Tl="\\\\u0018",Ul="\\\\u0019",Vl="\\\\u001A",Wl="\\\\u001B",Xl="\\\\u001C",Zl="\\\\u001D",$l="\\\\u001E",am="\\\\u001F",bm="\\\\u00ad",cm="\\\\u0600",dm="\\\\u0601",em="\\\\u0602",fm="\\\\u0603",gm="\\\\u06dd",hm="\\\\u070f",im="\\\\u17b4",jm="\\\\u17b5",km="\\\\u200b",lm="\\\\u200c",mm="\\\\u200d",nm="\\\\u200e",om="\\\\u200f",pm="\\\\u2028",qm="\\\\u2029",rm="\\\\u202a",sm="\\\\u202b",tm="\\\\u202c",um="\\\\u202d",vm="\\\\u202e",wm="\\\\u2060",xm="\\\\u2061",ym="\\\\u2062",zm="\\\\u2063",\nAm="\\\\u2064",Bm="\\\\u206a",Cm="\\\\u206b",Dm="\\\\u206c",Em="\\\\u206d",Fm="\\\\u206e",Gm="\\\\u206f",Hm="\\\\ufeff",Im="\\\\ufff9",Jm="\\\\ufffa",Km="\\\\ufffb",Lm="]",Mm="^(\\\\d+)([A-Z][a-z]?)(\\\\b.*)",Nm="^(\\\\d+)?\\\\s*([A-Z][a-z]?)\\\\s*(?:(?:(\\\\d+)([+-]))|((?:\\\\++)|(?:-+)))?([^:+-]+?([,;#!])?[^:+-]+?)?(?::(\\\\d+))?$",Om="^[A-Z]{14}\\\\-[A-Z]{10}\\\\-[A-Z]$",Pm="^[a-z0-9@+\\\\-\\\\[\\\\]\\\\(\\\\)\\\\\\\\\\\\/%=#$:>\\\\.]+$",Qm="_",Rm="__gwtDevModeHook:",Sm="__gwt_dispatchDblClickEvent_",Tm="__gwt_dispatchEvent_",Um="__gwt_dispatchUnhandledEvent_",\nVm="__gwt_historyFrame",Wm="__gwt_historyToken",Xm="__gwtex_wrap",Ym="__local_ff",Zm="_blank",$m="a",an="abs",bn="absolute",cn="addAtom",dn="addAtomQuery",en="addBond",fn="addChain",gn="addGroup",hn="addNewPart",jn="addRing",kn="addRingBond",ln="addTemplate",mn="alert",nn="alertdialog",on="align",pn="alignMolecules Depict: molecularAreaScale=",qn="alpha(opacity=0)",rn="antialias",sn="application",tn="ar",un="arc",vn=\'arc startangle="\',wn="archive",xn="aria-activedescendant",yn="aria-hidden",zn="array",\nAn="article",Bn="atombg",Cn="atomcolors",Dn="atommovebutton",En="auto",Fn="autoRetry=",Gn="autoez",Hn="autonumber",In="background:url(",Jn="bad hex encoding",Kn="banner",Ln="baseline",Mn="begin",Nn="behavior:url(#default#VML); position:absolute; antialias:",On="black",Pn="block",Qn="blue",Rn="blur",Sn="body",Vn="bolder",Wn="boolean",Xn="border",Yn="bottom",Zn="browser.version",$n="button",ao="c",bo="canonize",co="cellPadding",eo="cellSpacing",fo="center",go="change",ho="changeChiral",io="changeManyAtomMap",\njo="chargeAtom0",ko="check option ",lo="checkbox",mo="chemical:x-mdl-molfile",no="className",oo="clear",po="clear.cache.gif",qo=\'clear.cache.gif"\\\' style="\',ro="click",so="click marked atom to delete mark",to="client",uo="clip",vo="code",wo="codebase",xo="colSpan",yo="color:",zo="columnheader",Ao="com.allen_sauer.gwt.dnd.client.util.DragEntryPoint",Bo="com.google.gwt.user.client.DocumentModeAsserter",Co="com.google.gwt.useragent.client.UserAgentAsserter",Do="combobox",Eo="complementary",Fo="complete",\nGo="contenteditable",Ho="contentinfo",Io="contextmenu",Jo="copy",Ko="css is null",Lo="dblclick",Mo="definition",No="delAtom",Oo="delBond",Po="delBondGroup",Qo="deleteAtom",Ro="deleteAtomMaps",So="deleteHydrogens",To="depict",Uo="depictaction",Vo="depictbg",Wo="depictcgi",Xo="dialog",Yo="directory",Zo="display",$o="div",ap="divide by zero",bp="document",cp="download",dp="drag out MOL or RXN file",ep="drawInfo: ",fp="drawMolecularArea ",gp="drawMolecularArea mustReDrawMolecularArea=",hp="end_gesture",\nip="error",jp="export.client.JSME_export",kp="exportInchi",lp="exportInchiAuxInfo",mp="exportInchiKey",np="exportSVG",op="fa",pp="false",qp="filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'",rp="flavor = ",sp="focus",tp="font-family:",up="font-size:",vp="font-style:italic;",wp="font-weight:bolder;",xp="fontFamily",yp="fontSize",zp="fontStyle",Ap="fontWeight",Bp="form",Cp="function",Dp=\'function __gwt_initWindowCloseHandler(beforeunload, unload) {\\n var wnd = window\\n , oldOnBeforeUnload = wnd.onbeforeunload\\n , oldOnUnload = wnd.onunload;\\n \\n wnd.onbeforeunload = function(evt) {\\n var ret, oldRet;\\n try {\\n ret = beforeunload();\\n } finally {\\n oldRet = oldOnBeforeUnload && oldOnBeforeUnload(evt);\\n }\\n // Avoid returning null as IE6 will coerce it into a string.\\n // Ensure that "" gets returned properly.\\n if (ret != null) {\\n return ret;\\n }\\n if (oldRet != null) {\\n return oldRet;\\n }\\n // returns undefined.\\n };\\n \\n wnd.onunload = function(evt) {\\n try {\\n unload();\\n } finally {\\n oldOnUnload && oldOnUnload(evt);\\n wnd.onresize = null;\\n wnd.onscroll = null;\\n wnd.onbeforeunload = null;\\n wnd.onunload = null;\\n }\\n };\\n \\n // Remove the reference once we\\\'ve initialize the handler\\n wnd.__gwt_initWindowCloseHandler = undefined;\\n}\\n\',\nEp="function __gwt_initWindowResizeHandler(resize) {\\n var wnd = window, oldOnResize = wnd.onresize;\\n \\n wnd.onresize = function(evt) {\\n try {\\n resize();\\n } finally {\\n oldOnResize && oldOnResize(evt);\\n }\\n };\\n \\n // Remove the reference once we\'ve initialize the handler\\n wnd.__gwt_initWindowResizeHandler = undefined;\\n}\\n",Fp="g",Gp="gecko",Hp="gecko1_8",Ip="gesturechange",Jp="gestureend",Kp="gesturestart",Lp="google",Mp="green",Np="grid",Op="gridcell",Pp="group",\nQp="gwt-DecoratedPopupPanel",Rp="gwt-DecoratorPanel",Sp="gwt-Image",Tp="gwt-MenuBar",Up="gwt-MenuBarPopup",Vp="gwt-MenuItem",Wp="gwt-MenuItemSeparator",Xp="gwt-PopupPanel",Yp="gwt-TextBox",Zp="gwt-uid-",$p="head",aq="heading",bq="height",cq="height:",dq="hidden",eq="hideFocus",fq="hspace",gq="html is null",hq="http.proxyPort",iq="http://",jq="https",kq="https://",lq="hydrogens",mq="i",nq="id",oq="ie6",pq="ie8",qq="ie9",rq="iframe",sq="img",tq="incorrect port: ",uq="info: ",vq="inline",wq="is_touch_supported",\nxq="italic",yq="iw",zq="j",Aq="java.endorsed.dirs",Bq="java.runtime.version",Cq="java.specification.name",Dq="java.specification.version",Eq="java.vendor",Fq="java.version",Gq="java.vm.name",Hq="java.vm.specification.vendor",Iq="javascript:\'\'",Jq="jme",Kq="jmeh",Lq="jsa-resetDiv",Mq="jsa-resetTable",Nq="keephs",Oq="keydown",Pq="keypress",Qq="keyup",Rq="left",Sq="leftoversDownload",Tq="line",Uq=\'line from="\',Vq="link",Wq="list",Xq="listbox",Yq="listitem",Zq="load",$q="loaded",ar="log",br="losecapture",\ncr="m",dr="main",er="manualRetry=",fr="margin",gr="marginBottom",hr="markAtom",ir="markBond",jr="marquee",kr="math",lr="menu",mr="menuPopup",nr="menuSeparatorInner",or="menubar",pr="menuitem",qr="menuitemcheckbox",rr="menuitemradio",sr="middle",tr="mix",ur="moduleStartup",vr="mol",wr="monospace",xr="mousedown",yr="mousemove",zr="mouseout",Ar="mouseover",Br="mouseup",Cr="mousewheel",Dr="msie",Er="multipart",Fr="must be non-negative",Gr="n",Hr="name",Ir="navigation",Jr="newlook",Kr="no",Lr="nocenter",\nMr="nodepict",Nr="none",Or="note",Pr="notify_structural_change_js_function",Qr="nowrap",Rr="null",Sr="number",Tr="o",Ur="object",Vr="offsetHeight",Wr="offsetWidth",Xr="oldlook",Yr="onModuleLoadStart",Zr="onblur",$r="onclick",as="oncontextmenu",bs="ondblclick",cs="onerror() called.",ds="onfocus",es="onkeydown",fs="onkeypress",gs="onkeyup",hs="onload",is="onmousedown",js="onmousemove",ks="onmouseup",ls="onmousewheel",ms="ontouchstart",ns="opera",os="option",ps="options",qs="or",rs="os.encoding",ss=\n"os.name",ts="os.name.applet",us="outline",vs="oval",ws=\'oval style="position:absolute;left:\',xs="overflow",ys="overflow: hidden; width: ",zs="p",aaa="package.restrict.access.sun",As="padding",Bs="paste",baa="path.separator.applet",caa="polarnitro",daa="polyline",eaa=\'polyline points="\',Cs="popupContent",Ds="position",Es="presentation",Fs="progressbar",Gs="px",Hs="px ",Is=\'px"\',faa=\'px" \',gaa=\'px"+\',haa="px)",Js="px,",Ks="px, ",Ls="px;",iaa="px; border: none",jaa="px; height: ",kaa="px; margin-top: ",\nlaa="px; padding: 0px; zoom: 1",Ms="px;height:",maa="px;left:",Ns="px;top:",Os="px;width:",naa="query",Ps="radio",Qs="radiogroup",oaa="radix ",paa="rbutton",qaa="reaction",raa="reactionCopy",saa="readJME",Rs="readMolFile",taa="readRXNFile",uaa="rect",Ss=\'rect style="position:absolute;left:\',vaa="rect(",Ts="rect(0px, 0px, 0px, 0px)",waa="rect(auto, auto, auto, auto)",xaa="red",Us="redo",Vs="region",yaa="relative",zaa="removehs",Aaa="removehsc",Baa="reset",Caa="return function() { w.__gwt_dispatchDblClickEvent_",\nDaa="return function() { w.__gwt_dispatchEvent_",Ws="return function() { w.__gwt_dispatchUnhandledEvent_",Eaa="return;",Xs="rgb(",Ys="right",Zs="role",$s="rotation",Faa="roundrect",at="row",bt="rowgroup",ct="rowheader",dt="rtl",Gaa="runAsync",et="runAsyncCallback",ft="s",Haa="safari",Iaa="sans-serif",gt="scale100",ht="script",Jaa="scroll",it="scrollbar",jt="se",kt="search",Kaa="searchInchiKey",lt="separator",mt="serif",nt="setAtom",ot="setBondDouble",pt="setBondSingle",Laa="setBondStereo",qt="setBondTriple",\nMaa="setQueryBond",Naa="showDragAndDropSymbolInDepictMode",Oaa="showan",rt="slider",Paa="smiles",st="span",tt="spinbutton",Qaa="star",Raa="startup",ut="status",Saa="stereo",vt="string",wt="subMenuIcon-selected",Taa="sun.java.launcher",Uaa="sun.management.compiler",xt="tab",yt="table",zt="tablist",At="tabpanel",Bt="tbody",Ct="td",Dt="text",Vaa="text/javascript",Et="textAlign",Ft="textbox",Waa="this.__popup.currentStyle.zIndex",Gt="timer",Ht="title",Xaa="toggle",It="toolbar",Jt="tooltip",Kt="top",Yaa=\n"touch",Lt="touchcancel",Mt="touchend",Nt="touchmove",Ot="touchstart",Pt="tr",Qt="tree",Rt="treegrid",St="treeitem",Tt="true",Zaa="unMarkAtom",$aa="unMarkBond",Ut="undo",aba="unknown",Vt="unknown protocol(",Wt="unknown type",bba="update() in depict mode: oldMolecularAreaScale = ",cba="update(): ",dba="ur",eba="uri is null",Xt="urn:schemas-microsoft-com:vml",fba="useOclIDCode",gba="useopenchemlib",hba="user.language",iba="user.name",jba="user.timezone",Yt="value",Zt="verticalAlign",$t="visibility",\nau="visible",kba="vspace",bu="w",lba="webkit",mba="white",nba="white-space:nowrap;",cu="whiteSpace",du="width",oba="width:",eu="x",pba="xbutton",qba="yes",fu="zIndex",gu="zoom",hu="{",iu="|",rba="|>",_,ju={l:4194303,m:4194303,h:1048575},ku={l:0,m:0,h:0},lu={l:1,m:0,h:0},mu={l:2,m:0,h:0},sba={l:3,m:0,h:0},nu={l:4,m:0,h:0},ou={l:8,m:0,h:0},tba={l:10,m:0,h:0},pu={l:16,m:0,h:0},qu={l:32,m:0,h:0},ru={l:64,m:0,h:0},su={l:128,m:0,h:0},tu={l:256,m:0,h:0},uba={l:512,m:0,h:0},uu={l:1024,m:0,h:0},vu={l:2048,\nm:0,h:0},wu={l:8192,m:0,h:0},vba={l:16384,m:0,h:0},wba={l:32768,m:0,h:0},xu={l:65536,m:0,h:0},xba={l:131072,m:0,h:0},yba={l:262144,m:0,h:0},yu={l:524288,m:0,h:0},zu={},Au={25:1},q={88:1,92:1,103:1},Bu={74:1,83:1},Cu={35:1},Du={20:1,21:1,88:1,93:1,95:1},Eu={66:1,88:1},Fu={32:1,88:1},Gu={87:1,88:1,92:1,103:1},Hu={26:1,28:1,36:1,41:1,44:1,48:1,50:1},Iu={52:1,88:1,96:1,104:1,105:1},Ju={49:1,88:1,93:1,95:1},Ku={59:1,60:1,66:1,80:1,88:1},Lu={63:1,88:1},u={86:1,88:1,92:1},Mu={88:1,107:1},Nu={107:1},Ou={2:1,\n88:1,92:1},Pu={26:1,28:1,36:1,41:1,42:1,44:1,48:1,50:1},Qu={28:1},Ru={26:1,28:1,36:1,40:1,41:1,42:1,44:1,48:1,50:1},Su={91:1},Tu={88:1,92:1,108:1},Uu={21:1,24:1,88:1,93:1,95:1},Vu={88:1,92:1},Wu={27:1,51:1},Xu={132:1},Yu={111:1},Zu={88:1,96:1,104:1,105:1},$u={23:1,88:1,93:1,95:1},av={79:1,92:1},bv={17:1},cv={3:1,88:1,92:1},dv={},ev={108:1},fv={109:1},gv={53:1,88:1,92:1},hv={21:1,22:1,88:1,93:1,95:1},iv={59:1,66:1,80:1,88:1},jv={18:1},kv={41:1,48:1},lv={88:1},mv={88:1,96:1,105:1},nv={88:1,92:1,107:1},\nov={34:1},pv={54:1,59:1,60:1,66:1,74:1,75:1,80:1,83:1,88:1};function w(a,b,c){var d=zu[a];d&&!d.cZ?_=d.prototype:(!d&&(d=zu[a]=function(){}),_=d.prototype=0>b?{}:new zu[b],_.cM=c);for(var e=3;e=a.t+a.n;if(a.p&&!d)return d=(b-a.t)/a.n,a.td((1+Math.cos(3.141592653589793+3.141592653589793*d))/2),a.o&&a.r==c;if(!a.p&&b>=a.t&&(a.p=!0,a.sd(),!(a.o&&a.r==c)))return!1;return d?(a.o=!1,a.p=!1,a.rd(),!1):!0}w(58,1,{});_.qd=function(){this.u&&this.rd()};\n_.rd=function(){this.td((1+Math.cos(6.283185307179586))/2)};_.sd=function(){this.td((1+Math.cos(3.141592653589793))/2)};_.n=-1;_.o=!1;_.p=!1;_.q=null;_.r=-1;_.s=null;_.t=-1;_.u=!1;function Rv(a,b){if(zba(a.a,b)){var c=a.a,d=a.a.s,e;e=new Sv(d,a.a.k);Tv(d.a,e);1==d.a.c&&Uv(d.b,16);c.q=e}else a.a.q=null}function Vv(a){this.a=a}w(59,1,{},Vv);_.a=null;w(60,1,{});w(61,1,{13:1});function Wv(){Wv=x;Xv=new Yv}w(62,60,{});var Xv=null;function Yv(){this.a=new Zv;this.b=new $v(this)}w(63,62,{},Yv);\nfunction aw(){aw=x;bw=new Zv;var a=new cw;dw();ew(fw?fw:fw=new gw,a)}function Ov(a){a.b?$wnd.clearInterval(a.c):$wnd.clearTimeout(a.c);Nv(bw,a)}function Uv(a,b){if(0>b)throw new hw(Fr);a.b?$wnd.clearInterval(a.c):$wnd.clearTimeout(a.c);Nv(bw,a);a.b=!1;a.c=Aba(a,b);Tv(bw,a)}function Aba(a,b){return $wnd.setTimeout(B(function(){a.ud()}),b)}w(65,1,{});_.ud=function(){this.b||Nv(bw,this);this.vd()};_.b=!1;_.c=0;var bw;function $v(a){aw();this.a=a}w(64,65,{},$v);\n_.vd=function(){var a=this.a,b,c,d,e,f;b=C(Bba,q,14,a.a.c,0);b=iw(a.a,b);c=new jw;for(e=0,f=b.length;eQv()-d.a;){e=!1;for(f=0;f1E3*parseInt(a[1])+parseInt(a[2])){lA=!0;break a}lA=!1}kA=!0}return lA}var lA=!1,kA=!1;function mA(){var a=$doc;!a.gwt_uid&&(a.gwt_uid=1);return Zp+a.gwt_uid++}\nfunction nA(){var a=$doc;return(J(a.compatMode,Gg)?a.documentElement:a.body).clientLeft}function oA(){var a=$doc;return(J(a.compatMode,Gg)?a.documentElement:a.body).clientTop}function pA(){var a=$doc;return(J(a.compatMode,Gg)?a.documentElement:a.body).clientHeight}function qA(){var a=$doc;return(J(a.compatMode,Gg)?a.documentElement:a.body).clientWidth}function rA(a){return hA(J(a.compatMode,Gg)?a.documentElement:a.body)}\nfunction sA(a){return(J(a.compatMode,Gg)?a.documentElement:a.body).scrollTop||0}function tA(){tA=x;try{$doc.execCommand(ug,!1,!0)}catch(a){}}\nfunction uA(a,b,c){function d(a){var d=b.__kids;b.__cleanup();window.setTimeout(function(){for(var a=0;a=d&&0=b&&(c=1301+d));BC(a,c)}a=!0}a&&bA(this.a)};_.Gd=function(){return oC};var oC;function CC(){CC=x;DC=new NB(xr,new EC)}function EC(){}w(266,247,Au,EC);_.Dd=function(a){a.ld(this)};_.Gd=function(){return DC};var DC;function FC(){FC=x;GC=new NB(yr,new HC)}function HC(){}w(267,247,Au,HC);_.Dd=function(a){a.md(this)};\n_.Gd=function(){return GC};var GC;function IC(){IC=x;JC=new NB(zr,new KC)}function KC(){}w(268,247,Au,KC);_.Dd=function(a){a.nd(this)};_.Gd=function(){return JC};var JC;function LC(){LC=x;MC=new NB(Ar,new NC)}function NC(){}w(269,247,Au,NC);_.Dd=function(a){var b;b=this.a;Jz((Gz(),Hz),new OC(a,a.b,b))};_.Gd=function(){return MC};var MC;function PC(){PC=x;QC=new NB(Br,new RC)}function RC(){}w(270,247,Au,RC);_.Dd=function(a){a.od(this)};_.Gd=function(){return QC};var QC;\nfunction SC(){SC=x;TC=new NB(Cr,new UC);new NB(zh,new UC)}function UC(){}w(271,247,Au,UC);_.Dd=function(a){var b,c,d,e,f;b=Math.round(-this.a.wheelDelta/40)||0;b=new VC(a.a.i,RB(this),SB(this),b);f=0;for(c=WC(a.a.i.Pc,C(Pba,q,75,0,0)),d=0,e=c.length;da.qI&&(c.tM==x||c.cM&&c.cM[1])&&(!c.cM||!c.cM[-a.qI]))throw new dE;}return a[b]=c}w(301,1,{},VD);_.qI=0;\nfunction ZD(){ZD=x;$D=[];aE=[];var a=new VD,b=$D,c=aE,d=0,e,f;for(f in a)if(e=a[f])b[d]=f,c[d]=e,++d}var $D,aE;function H(a,b){return null!=a&&a.cM&&!!a.cM[b]}function Sy(a){return null!=a&&a.tM!=x&&!(a.cM&&a.cM[1])}function Vy(a){return a.tM==x||a.cM&&!!a.cM[1]}function eE(a){return null==a?null:a}function fA(a){return~~Math.max(Math.min(a,2147483647),-2147483648)}var fE=-1;\nfunction gE(){var a;$stats&&hE(Co);a=navigator.userAgent.toLowerCase();if(-1!=a.indexOf(ns))a=ns;else if(-1!=a.indexOf(lba))a=Haa;else if(-1!=a.indexOf(Dr)&&9<=$doc.documentMode)a=qq;else if(-1!=a.indexOf(Dr)&&8<=$doc.documentMode)a=pq;else{var b;var c=/msie ([0-9]+)\\.([0-9]+)/.exec(a);c&&3==c.length&&(b=6E3<=1E3*parseInt(c[1])+parseInt(c[2]));a=b?oq:-1!=a.indexOf(Gp)?Hp:aba}J(oq,a)||$wnd.alert(Rh+a+td);$stats&&hE(Bo);b=$doc.compatMode;a=y(iE,q,1,[Gg]);for(c=0;cd)$doc.createStyleSheet().cssText=a;else{f=2147483647;e=-1;for(b=0;b>22&4194303,0>a?1048575:0)}function qE(a){return pE(a.l,a.m,a.h)}function pE(a,b,c){return _=new rE,_.l=a,_.m=b,_.h=c,_}\nfunction Sba(a,b){var c,d,e,f,g;if(0==b.l&&0==b.m&&0==b.h)throw new sE;if(0==a.l&&0==a.m&&0==a.h)return tE=pE(0,0,0),pE(0,0,0);if(524288==b.h&&0==b.m&&0==b.l)return c=a,524288==c.h&&0==c.m&&0==c.l?(tE=pE(0,0,0),c=qE((uE(),vE))):(tE=pE(c.l,c.m,c.h),c=pE(0,0,0)),c;g=!1;0!=b.h>>19&&(b=wE(b),g=!0);e=b.l;0!=(e&e-1)?f=-1:(d=b.m,0!=(d&d-1)?f=-1:(c=b.h,f=0!=(c&c-1)||0==c&&0==d&&0==e?-1:0==c&&0==d&&0!=e?xE(e):0==c&&0!=d&&0==e?xE(d)+22:0!=c&&0==d&&0==e?xE(c)+44:-1));c=d=e=!1;if(524288==a.h&&0==a.m&&0==a.l)if(e=\nd=!0,-1==f)a=qE((uE(),yE)),c=!0,g=!g;else return c=zE(a,f),g&&AE(c),tE=pE(0,0,0),c;else 0!=a.h>>19&&(e=!0,a=wE(a),c=!0,g=!g);if(-1!=f){c=a;d=f;f=g;g=e;e=zE(c,d);f&&AE(e);var h;22>=d?(f=c.l&(1<=d?(f=c.l,h=c.m&(1<r?j=\n!1:(n=j.l-f.l,o=j.m-f.m+(n>>22),r+=o>>22,0>r?j=!1:(j.l=n&4194303,j.m=o&4194303,j.h=r&1048575,j=!0));if(j&&(22>l?h.l|=1<l?h.m|=1<>>1;f.m=j>>>1|(n&1)<<21;f.l=o>>>1|(j&1)<<21;--l}g&&AE(h);e?(tE=wE(c),d&&(tE=EE(tE,(uE(),vE)))):tE=pE(c.l,c.m,c.h);return h}function AE(a){var b,c,d;b=~a.l+1&4194303;c=~a.m+(0==b?1:0)&4194303;d=~a.h+(0==b&&0==c?1:0)&1048575;a.l=b;a.m=c;a.h=d}\nfunction CE(a){var b;b=FE(a.h);return 32==b?(b=FE(a.m),32==b?FE(a.l)+32:b+20-10):b-12}var tE=null;function GE(a,b){return a.l==b.l&&a.m==b.m&&a.h==b.h}function L(a){var b,c,d;if(isNaN(a))return uE(),HE;if(-9223372036854775E3>a)return uE(),IE;if(9223372036854775E3<=a)return uE(),yE;d=!1;0>a&&(d=!0,a=-a);c=0;17592186044416<=a&&(c=fA(a/17592186044416),a-=17592186044416*c);b=0;4194304<=a&&(b=fA(a/4194304),a-=4194304*b);a=fA(a);b=pE(a,b,c);d&&AE(b);return b}\nfunction JE(a){var b,c;return-129a?(b=a+128,null==KE&&(KE=C(Tba,q,30,256,0)),c=KE[b],!c&&(c=KE[b]=oE(a)),c):oE(a)}function LE(a){var b=ku,c,d;c=a.h>>19;d=b.h>>19;return 0==c?0!=d||a.h>b.h||a.h==b.h&&a.m>b.m||a.h==b.h&&a.m==b.m&&a.l>b.l:!(0==d||a.h>19;d=b.h>>19;return 0==c?0!=d||a.h>b.h||a.h==b.h&&a.m>b.m||a.h==b.h&&a.m==b.m&&a.l>=b.l:!(0==d||a.h>13|(a.m&15)<<9;e=a.m>>4&8191;f=a.m>>17|(a.h&255)<<5;g=(a.h&1048320)>>8;h=b.l&8191;j=b.l>>13|(b.m&15)<<9;l=b.m>>4&8191;n=b.m>>17|(b.h&255)<<5;o=(b.h&1048320)>>8;r=c*h;z=d*h;t=e*h;v=f*h;g*=h;0!=j&&(z+=c*j,t+=d*j,v+=e*j,g+=f*j);0!=l&&(t+=c*l,v+=d*l,g+=e*l);0!=n&&(v+=c*n,g+=d*n);0!=o&&(g+=c*o);c=(r&4194303)+((z&511)<<13);r=(r>>22)+(z>>9)+((t&262143)<<4)+((v&31)<<17)+(c>>22);t=(t>>18)+(v>>5)+((g&4095)<<8)+(r>>22);return pE(c&4194303,r&\n4194303,t&1048575)}function wE(a){var b,c;b=~a.l+1&4194303;c=~a.m+(0==b?1:0)&4194303;return pE(b,c,~a.h+(0==b&&0==c?1:0)&1048575)}function DE(a,b){var c,d,e,b=b&63;22>b?(c=a.l<>22-b,e=a.h<>22-b):44>b?(c=0,d=a.l<>44-b):(d=c=0,e=a.l<b?(e=c>>b,d=a.m>>b|c<<22-b,c=a.l>>b|a.m<<22-b):44>b?(e=d?1048575:0,d=c>>b-22,c=a.m>>b-22|c<<44-b):(e=d?1048575:0,d=d?4194303:0,c>>=b-44);return pE(c&4194303,d&4194303,e&1048575)}function EE(a,b){var c,d;c=a.l-b.l;d=a.m-b.m+(c>>22);return pE(c&4194303,d&4194303,a.h-b.h+(d>>22)&1048575)}function Q(a){return a.l|a.m<<22}\nfunction NE(a){var b,c,d;if(0==a.l&&0==a.m&&0==a.h)return Xe;if(524288==a.h&&0==a.m&&0==a.l)return fe;if(0!=a.h>>19)return ee+NE(wE(a));for(c=m;!(0==a.l&&0==a.m&&0==a.h);){b=JE(1E9);a=Sba(a,b);b=m+Q(tE);if(!(0==a.l&&0==a.m&&0==a.h))for(d=9-b.length;0=a.children.length?a.appendChild(b):a.insertBefore(b,a.children[c])}\nfunction ZF(a,b){var c=(a.__eventBits||0)^b;a.__eventBits=b;c&&(c&1&&(a.onclick=b&1?UF:null),c&3&&(a.ondblclick=b&3?VF:null),c&4&&(a.onmousedown=b&4?UF:null),c&8&&(a.onmouseup=b&8?UF:null),c&16&&(a.onmouseover=b&16?UF:null),c&32&&(a.onmouseout=b&32?UF:null),c&64&&(a.onmousemove=b&64?UF:null),c&128&&(a.onkeydown=b&128?UF:null),c&256&&(a.onkeypress=b&256?UF:null),c&512&&(a.onkeyup=b&512?UF:null),c&1024&&(a.onchange=b&1024?UF:null),c&2048&&(a.onfocus=b&2048?UF:null),c&4096&&(a.onblur=b&4096?UF:null),\nc&8192&&(a.onlosecapture=b&8192?UF:null),c&16384&&(a.onscroll=b&16384?UF:null),c&32768&&(a.nodeName==oi?b&32768?a.attachEvent(hs,XF):a.detachEvent(hs,XF):a.onload=b&32768?WF:null),c&65536&&(a.onerror=b&65536?UF:null),c&131072&&(a.onmousewheel=b&131072?UF:null),c&262144&&(a.oncontextmenu=b&262144?UF:null),c&524288&&(a.onpaste=b&524288?UF:null))}function TF(){for(var a=!1,b=0;b<$wnd.__gwt_globalEventArray.length;b++)!$wnd.__gwt_globalEventArray[b]()&&(a=!0);return!a}var VF=null,UF=null,XF=null,WF=null;\nw(356,1,Qu);_.$d=function(a){return decodeURI(a.replace("%23",Wb))};_._d=function(a){return encodeURI(a).replace(Wb,"%23")};_.Sd=function(a){BD(this.c,a)};_.ae=$F;_.be=function(a){a=null==a?m:a;if(!J(a,null==BF?m:BF))BF=a,this.ae(a),tD&&(a=new sD,BD(this.c,a))};var BF=m;function Vba(a){var b=B(function(){$wnd.setTimeout(b,250);if(!a.ce()){var c=AF();if(0d||d>a.p.c)throw new HG;b.ob==a&&(f=a.we(b),fd||d>=c.c)throw new HG;for(--c.c;dg&&l.charAt(g)==ee&&0==l.indexOf(f)&&\n(e[h]=d+l.substring(g))}c.className=e.join(fa)}VG(this,this.T);$G(this);bG(Zz(this.pb),Cs,!1);bG(this.T.b,b+jh,!0)}w(368,369,Pu);_.oe=function(){qG(this.T)};_.pe=function(){tG(this.T)};_.De=function(){return this.T.jb};_.ye=function(){return new XG(this.T)};_.ve=function(a){return this.T.ve(a)};_.Ee=function(a){VG(this.T,a);$G(this)};_.T=null;w(367,368,Pu);_.se=zG;function iH(){iH=x;jH=new kH(0,(eH(),fH));lH=new kH(1,mH);nH=new kH(2,oH);pH=y($ba,q,37,[jH,lH,nH])}\nfunction kH(a,b){this.b=a;this.a=b}w(371,194,{37:1,88:1,93:1,95:1},kH);_.a=null;var pH,jH,lH,nH;function qH(){qH=x;rH=y(iE,q,1,[Kt,sr,Yn])}function hH(a){var b;qH();var c,d;c=this.pb=aA(yt);this.c=aA(Bt);lF(c,this.c);c[eo]=0;for(c=c[co]=0;cc&&(c=a.i.c-1),c==b){d=CF(a.i,b);break}else if(d=CF(a.i,c),d.b)break;cI(a,d)}}w(407,365,Hu);_.Yd=function(a){jI(this,a)};_.se=function(){this.j&&YG(this.j,!1);tG(this)};_.Ke=function(a,b){nI(this,a,b)};_.d=!1;_.e=null;_.f=!1;_.j=null;_.k=null;_.n=null;_.o=!1;function dI(a){this.a=a}\nw(408,1,{},dI);_.pd=function(){pI(this.a)};_.a=null;function qI(a){this.a=a}w(409,1,{},qI);_.Hd=function(){cI(this.a,null)};_.a=null;function eI(a,b){this.a=a;this.b=b;cH.call(this,!0,mr);VG(this.T,this.b.d);$G(this);this.fb=!0;this.b.d.fi()}w(410,368,Pu,eI);_.Ud=function(a){var b,c;if(!a.a)switch(QF(a.d.type)){case 4:c=a.d.srcElement;b=this.b.c.pb;if(dA(b,c)){a.a=!0;break}a.a&&cI(this.a,null)}};_.a=null;_.b=null;function fI(a,b){this.a=a;this.b=b}w(411,1,{},fI);_.a=null;_.b=null;\nfunction rI(){rI=x;sI=$moduleBase+yh}var sI,tI=null;function uI(){uI=x;rI();tI=new PE((gF(),new fF((SD(),sI))),5,9)}function vI(a,b){if(b){var c=fG(a.pb)+Fe;bG(a.ie(),c,!1)}else c=fG(a.pb)+Fe,bG(a.ie(),c,!0);a.b=b}function wI(a,b){this.pb=aA(Ct);var c=fG(this.pb)+Ge;bG(this.ie(),c,!1);this.pb.innerText=a||m;this.pb[no]=Vp;c=mA();this.pb.setAttribute(nq,c);ex();this.pb.setAttribute(Zs,Lx.a);this.a=b}w(414,366,{41:1,45:1,48:1},wI);_.a=null;_.b=!0;_.c=null;_.d=null;\nfunction xI(){var a;this.pb=aA(Ct);this.pb[no]=Wp;a=aA($o);lF(this.pb,a);a[no]=nr}w(415,366,kv,xI);function yI(){var a,b,c,d,e;b=null.fi();e=qA();d=pA();b[Zo]=(xA(),Nr);b[du]=0+(RA(),Gs);b[bq]=Ze;c=$doc;c=(J(c.compatMode,Gg)?c.documentElement:c.body).scrollWidth||0;a=$doc;a=(J(a.compatMode,Gg)?a.documentElement:a.body).scrollHeight||0;b[du]=(c>e?c:e)+Gs;b[bq]=(a>d?a:d)+Gs;b[Zo]=Pn}function dH(){}w(416,1,{},dH);_.Qd=function(){yI()};function zI(a){this.a=a}w(417,1,{},zI);\n_.Ud=function(a){var b=this.a,c,d;if(a.a||!b.fb&&a.b)b.db&&(a.a=!0);else if(b.Ud(a),!a.a){d=a.d;c=d.srcElement;var e;try{e=!!c&&!!c.nodeType}catch(f){e=!1}(c=e&&c&&1==c.nodeType?dA(b.pb,c):!1)&&(a.b=!0);b.db&&(a.a=!0);switch(QF(d.type)){case 4:case 1048576:if(pF){a.b=!0;break}if(!c&&b.V){b.Ge(!0);break}break;case 8:case 64:case 1:case 2:case 4194304:if(pF){a.b=!0;break}break;case 2048:d=d.srcElement,b.db&&!c&&d&&(d.blur&&d!=$doc.body&&d.blur(),a.a=!0)}}};_.a=null;function AI(a){this.a=a}\nw(418,1,{},AI);_.a=null;function eH(){eH=x;fH=new BI(0);mH=new BI(1);oH=new BI(2);CI=y(bca,q,46,[fH,mH,oH])}function BI(a){this.b=a}w(419,194,{46:1,88:1,93:1,95:1},BI);var CI,fH,mH,oH;function DI(a){a.j?a.a.bb&&($doc.body.appendChild(a.a.Z),EI(a.a.Z),a.f=FF(a.a.$),yI(),a.b=!0):a.b&&($doc.body.removeChild(a.a.Z),FI(a.a.Z),GI(a.f.a),a.f=null,a.b=!1)}function HI(a){a.j||(DI(a),a.c||(vG(),OG(II(null),a.a)),FI(a.a.pb));a.a.pb.style[uo]=waa;a.a.pb.style[xs]=au}\nfunction JI(a,b){var c,d,e,f,g,h;a.j||(b=1-b);c=f=e=g=0;d=fA(b*a.d);h=fA(b*a.e);switch(a.a.U.b){case 2:f=a.e;c=d;break;case 0:g=a.d-d>>1;e=a.e-h>>1;f=e+h;c=g+d;break;case 1:SD(),f=h,c=d}a.a.pb.style[uo]=vaa+g+Ks+f+Ks+c+Ks+e+haa}\nfunction ZG(a,b,c){a.c=c;Mv(a);a.i&&(Ov(a.i),a.i=null,HI(a));a.a.hb=b;var d=a.a;d.eb&&(GI(d.eb.a),d.eb=null);d._&&(GI(d._.a),d._=null);if(d.hb){d.eb=qF(new zI(d));var e;e=new AI(d);xF();e=yF?uD(yF.c,(!tD&&(tD=new gw),tD),e):null;d._=e}c=!c&&a.a.ab;a.a.U!=(eH(),fH)&&!b&&(c=!1);a.j=b;c?b?(DI(a),a.a.pb.style[Ds]=bn,-1!=a.a.ib&&a.a.He(a.a.cb,a.a.ib),a.a.pb.style[uo]=Ts,vG(),b=II(null),EG(b,a.a,b.pb),EI(a.a.pb),a.i=new KI(a),Uv(a.i,1)):Pv(a,200):(DI(a),a.j?(a.a.pb.style[Ds]=bn,-1!=a.a.ib&&a.a.He(a.a.cb,\na.a.ib),vG(),b=II(null),EG(b,a.a,b.pb),EI(a.a.pb)):(a.c||(vG(),OG(II(null),a.a)),FI(a.a.pb)),a.a.pb.style[xs]=au)}function gH(a){var b=(Wv(),Xv);this.k=new Vv(this);this.s=b;this.a=a}w(420,58,{},gH);_.rd=function(){HI(this)};_.sd=function(){this.d=Vz(this.a.pb,Vr);this.e=Vz(this.a.pb,Wr);this.a.pb.style[xs]=dq;JI(this,(1+Math.cos(3.141592653589793))/2)};_.td=function(a){JI(this,a)};_.a=null;_.b=!1;_.c=!1;_.d=0;_.e=-1;_.f=null;_.i=null;_.j=!1;function KI(a){aw();this.a=a}w(421,65,{},KI);\n_.vd=function(){this.a.i=null;Pv(this.a,200)};_.a=null;function mF(){mF=x;cca()}function nF(a){return a.__gwt_resolve?a.__gwt_resolve():a}function cca(){function a(){}a.prototype={className:m,clientHeight:0,clientWidth:0,dir:m,getAttribute:function(a){return this[a]},href:m,id:m,lang:m,nodeType:1,removeAttribute:function(a){this[a]=void 0},setAttribute:function(a,c){this[a]=c},src:m,style:{},title:m};$wnd.GwtPotentialElementShim=a}function vG(){vG=x;LI=new MI;NI=new Hy;wG=new DD}\nfunction OI(a){this.p=new SG(this);this.pb=a;qG(this)}function II(a){vG();var b,c;c=MD(NI,a);b=null;if(null!=a&&!(b=$doc.getElementById(a)))return null;if(c&&(!b||c.pb==b))return c;if(0==NI.d){var d=new PI;dw();ew(fw?fw:fw=new gw,d);SD()}!b?c=new QI:c=new OI(b);D(NI,a,c);ED(wG,c);return c}w(423,362,Pu,OI);var LI,NI,wG;function MI(){}w(424,1,{},MI);_.Je=function(a){a.qe()&&a.se()};function PI(){}w(425,1,{},PI);_.Od=function(){vG();try{AG(wG,LI)}finally{RI(wG.a),RI(NI)}};\nfunction QI(){OI.call(this,$doc.body)}w(426,423,Pu,QI);_.Be=function(a,b,c){b-=nA();c-=oA();QG(a,b,c)};function XG(a){this.c=a;this.a=!!this.c.jb}w(427,1,{},XG);_.Vd=WE;_.Wd=function(){if(!this.a||!this.c.jb)throw new KG;this.a=!1;return this.b=this.c.jb};_.Xd=function(){this.b&&this.c.ve(this.b)};_.b=null;_.c=null;function SI(a,b){a.pb[Yt]=null!=b?b:m}w(430,380,Hu);_.Yd=function(a){0!=(QF(a.type)&896)?sG(this,a):sG(this,a)};_.te=yG;function TI(){TI=x;UI()}w(429,430,Hu);\nfunction VI(){TI();var a=Yz(Dt);!kF&&(kF=new jF);!iF&&(iF=new hF);this.pb=a;SD();this.pb[no]=Yp}w(431,429,Hu,VI);function UI(){UI=x;WI=new XI;YI=new ZI;$I=new aJ;bJ=new cJ;dJ=y(dca,q,49,[WI,YI,$I,bJ])}w(432,194,Ju);var dJ,WI,YI,$I,bJ;function XI(){this.b=0}w(433,432,Ju,XI);function ZI(){this.b=1}w(434,432,Ju,ZI);function aJ(){this.b=2}w(435,432,Ju,aJ);function cJ(){this.b=3}w(436,432,Ju,cJ);function JG(a,b){var c;for(c=0;cc||c>a.c)throw new HG;if(a.c==a.a.length){e=C(eJ,q,50,2*a.a.length,0);for(d=0;dc;--d)sz(a.a,d,a.a[d-1]);sz(a.a,c,b)}function SG(a){this.b=a;this.a=C(eJ,q,50,4,0)}w(438,1,{},SG);_.ye=function(){return new LG(this)};_.a=null;_.b=null;_.c=0;function fJ(a){if(a.a>=a.b.c)throw new KG;return a.b.a[++a.a]}function gJ(a){if(0>a.a||a.a>=a.b.c)throw new hJ;a.b.b.ve(a.b.a[a.a--])}function LG(a){this.b=a}w(439,1,{},LG);\n_.Vd=function(){return this.aa)throw new hw(Hj);this.e=a;this.a=2;this.c=0;this.d=10;this.b=0}w(467,1,{55:1},vK);_.eQ=function(a){return a===this?!0:H(a,55)?a.e==this.e&&a.a==this.a&&a.c==this.c&&a.d==this.d&&a.b==this.b:!1};\n_.hC=function(){var a;a=new wK;a.a=31*a.a+fA((new xK(this.e)).a);a.a=31*a.a+this.a;a.a=31*a.a+this.c;a.a=31*a.a+fA((new xK(this.d)).a);return a.a};_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;function yK(){yK=x;zK=AK=new wv(255,255,255);BK=new wv(192,192,192);CK=new wv(128,128,128);DK=new wv(64,64,64);EK=FK=new wv(0,0,0);GK=HK=new wv(255,0,0);new wv(255,175,175);IK=new wv(255,200,0);JK=new wv(255,255,0);new wv(0,255,0);KK=new wv(255,0,255);LK=new wv(0,255,255);MK=NK=new wv(0,0,255)}\nfunction OK(a){var b,c;c=a.d>>16&255;b=a.d&255;a=a.d>>8&255;if(0==c&&0==b&&0==a)return new wv(3,3,3);3>c&&0!=c?c=3:(c=fA(c/0.7),c=255b&&0!=b?b=3:(b=fA(b/0.7),b=255a&&0!=a?a=3:(a=fA(a/0.7),a=255>16&255)),fA(0.7*(a.d>>8&255)),fA(0.7*(a.d&255)))}function QK(a,b){return H(b,58)?b.d==a.d:!1}function wv(a,b,c){yK();if((a&255)!=a||(b&255)!=b||(c&255)!=c)throw new hw(ih);this.d=c|b<<8|a<<16|-16777216}\nw(473,1,{58:1,67:1,70:1},wv);_.eQ=function(a){return QK(this,a)};_.hC=RK;_.tS=function(){return SK.d+"[r="+(this.d>>16&255)+",g="+(this.d>>8&255)+",b="+(this.d&255)+Lm};_.a=0;_.b=null;_.c=null;_.d=0;var EK,MK,GK,zK,FK,NK,LK,DK,CK,BK,KK,IK,HK,AK,JK;function NJ(){NJ=x;OJ=new TK(!0);UK=new DD;ED(UK,tn);ED(UK,op);ED(UK,yq);ED(UK,dba)}function TK(a){this.a=a}w(474,1,lv,TK);_.a=!1;var OJ,UK;w(478,1,{76:1,92:1});function VK(){EJ.call(this,0,0)}function EJ(a,b){this.b=a;this.a=b}\nfunction GJ(a){EJ.call(this,a.b,a.a)}w(477,478,{61:1,76:1,88:1,92:1},VK,EJ,GJ);_.eQ=function(a){return a===this?!0:H(a,61)?a.b==this.b&&a.a==this.a:!1};_.hC=function(){var a;a=new wK;a.a=31*a.a+this.b;a.a=31*a.a+this.a;return a.a};_.tS=function(){return WK.d+"[width="+this.b+",height="+this.a+Lm};_.a=0;_.b=0;function sC(a,b,c){this.f=a;this.c=b;this.e=this.d=this.j=this.i=0;this.b=c}w(479,1,lv,sC,function(a,b,c,d){this.f=a;this.c=b;this.j=this.i=0;this.d=c;this.e=d;this.b=null});\n_.tf=function(){return 0!=(this.e&4)};_.uf=function(){return 0!=(this.e&1)};_.tS=function(){var a;return this.cZ.d+"[id="+this.c+",x="+this.i+",y="+this.j+(0!=this.d?",key="+this.d+(a=m,this.uf()&&(a+=",shift"),0!=(this.e&2)&&(a+=",control"),this.tf()&&(a+=",meta"),a):m)+",target="+this.f+(null!=this.b?",arg="+this.b:m)+Lm};_.b=null;_.c=0;_.d=0;_.e=0;_.f=null;_.i=0;_.j=0;function XK(a){var b,c;for(c=b=0;cb.b&&(YK(this,l,b.b-(n-this.c),g.b,o,j,h),l.qg(),n=f,o+=j+this.d,j=0),e=!1,sz(l.b,l.c++,c),n+=a.b+this.c,j=kw(j,a.a);YK(this,l,b.b-(n-this.c),g.b,o,\nj,h)}};_.qf=function(a){this.b=cL(a.Fc);return 0==XK(this)?UJ(a,new EJ(10,10)):UJ(a,$K(this,!1))};_.rf=function(a){this.b=cL(a.Fc);return 0==XK(this)?UJ(a,new EJ(10,10)):UJ(a,$K(this,!0))};_.sf=$F;_.tS=function(){var a;switch(this.a){case 0:a=Rq;break;case 2:a=Ys;break;case 1:a=fo;break;case 4:a="trailing";break;default:a="leading"}return fca.d+"[hgap="+this.c+",vgap="+this.d+",align="+a+Lm};_.a=0;_.b=null;_.c=0;_.d=0;function fL(){fL=x;gL=new hL(Fh,0,12)}\nfunction hL(a,b,c){fL();this.a=null!=a?a:Bh;this.b=0<=c?c:0;this.c=0==(b&-4)?b:0}w(481,1,{62:1,88:1},hL);_.a=null;_.b=0;_.c=0;var gL;w(482,1,Lu);_.tS=function(){return gca.d+"[font="+this.b+"ascent="+iL(jL,this.b).a+", descent="+iL(jL,this.b).b+", height="+iL(jL,this.b).c+Lm};_.b=null;w(484,1,{});_.tS=function(){return"Graphics"};w(485,484,{});function hJ(){}function rG(a){this.f=a}w(488,136,Zu,hJ,rG);function AJ(){this.f=Ij}w(487,488,Zu,AJ);w(489,1,{});\nfunction QJ(a,b,c,d){this.d=a;this.b=b;this.a=c;this.c=d}w(490,1,{64:1,88:1,92:1},QJ);_.eQ=function(a){return a===this?!0:H(a,64)?a.b==this.b&&a.a==this.a&&a.c==this.c&&a.d==this.d:!1};_.hC=function(){var a;a=31+this.d;a=31*a+this.b;a=31*a+this.a;return a=31*a+this.c};_.tS=function(){return hca.d+"[left="+this.b+",top="+this.d+",right="+this.c+",bottom="+this.a+Lm};_.a=0;_.b=0;_.c=0;_.d=0;w(494,1,lv);_.cf=function(){return this.j};_.tS=TJ;_.j=null;_.k=null;\nfunction kL(a){var b;b=a.j+Xd+a.f;a.e||(b+=Rd);null!=a.c&&(b+=Qd+a.c);return b}function lL(a,b){a.e=b;vI(a.i.a,b)}function mL(a){this.n=(KJ(),KJ(),LJ);var b;var c;b=this.cZ.d;-1!=gG(b,hG(36))?b=null:(c=this.n.b.d++,b=jG(b,uJ(b,hG(46))+1)+m+c);this.j=b;this.d=new tK;this.f=a;this.e=!0;this.i=new nL(this)}w(493,494,lv,mL);_.cf=function(){return kL(this)};_.c=null;_.e=!1;_.f=null;_.i=null;w(492,493,Eu);_.cf=function(){return kL(this)+(this.b?",tearOff":m)};_.b=!1;w(496,1,{77:1});\n_.eQ=function(a){return a===this?!0:H(a,77)?this.vf()==a.vf()&&this.wf()==a.wf():!1};_.hC=function(){var a;a=new wK;oL(a,this.vf());oL(a,this.wf());return a.a};function zJ(){this.b=this.a=0}function pL(a,b){this.a=a;this.b=b}w(495,496,{68:1,77:1,88:1},zJ,pL);_.eQ=function(a){return a===this?!0:H(a,68)?this.a==a.a&&this.b==a.b:!1};_.vf=WE;_.wf=tH;_.tS=function(){return ica.d+"[x="+this.a+",y="+this.b+Lm};_.a=0;_.b=0;\nfunction qL(a,b){if(!b)throw new vD(Jj);var c=a.a;if(J(b.f,ee)){var c=c.a.a,d=new xI,e=c.c.c;if(0>e||e>c.c.c)throw new HG;c.o&&(d.pb[xo]=2);aI(c,e,d.pb);rL(c.c,e,d)}else{var e=c.a,d=e.a,c=b.i.a,e=e.a.c.c,f,g;if(0>e||e>d.c.c)throw new HG;rL(d.c,e,c);for(f=g=0;f=this.k?0!=(this.j&16)?(this.d=1,501==this.k&&(this.j|=1024)):0!=(this.j&8)?(this.d=2,501==this.k&&(this.j|=2048)):0!=(this.j&4)&&(this.d=3,501==this.k&&(this.j|=4096)):(0!=(this.j&16)&&(this.j|=1024),0!=(this.j&8)&&(this.j|=\n2048),0!=(this.j&4)&&(this.j|=4096));else if(0!=(this.j&16320))if(this.j&=-64,0!=(this.j&64)&&(this.j|=1),0!=(this.j&128)&&(this.j|=2),0!=(this.j&256)&&(this.j|=4),0!=(this.j&512)&&(this.j|=8),0!=(this.j&8192)&&(this.j|=32),500<=this.k&&502>=this.k)switch(this.d){case 1:this.j|=16;break;case 2:this.j|=8;break;case 3:this.j|=4}else 0!=(this.j&1024)&&(this.j|=16),0!=(this.j&2048)&&(this.j|=8),0!=(this.j&4096)&&(this.j|=4);this.b=0;this.a=1;this.c=d}w(520,519,lv,VC);\n_.cf=function(){var a,b;a=ZL(this);switch(this.b){case 0:b="WHEEL_UNIT_SCROLL";break;case 1:b="WHEEL_BLOCK_SCROLL";break;default:b=Wt}return a+=",scrollType="+b+",scrollAmount="+this.a+",wheelRotation="+this.c};_.a=0;_.b=0;_.c=0;w(529,1,{});function UL(a){if(null==a)throw new aM;}w(530,529,{},UL);\nfunction bM(){bM=x;cM={};cM[Eq]=Lp;cM[aaa]=Tt;cM[Taa]=Oj;cM[Uaa]=Lp;cM[ss]=Oj;cM[wb]=Oj;cM[baa]=Oj;cM[Hq]=Lp;cM[Bq]=Oj;cM[hq]=Oj;cM[iba]=Oj;cM[hba]=Oj;cM[ts]=Oj;cM[Zn]=Oj;cM[Fq]=Oj;cM[jba]=Oj;cM[Aq]=Oj;cM[Cq]=hi;cM[Dq]=ff;cM[Gq]=Qi;!XC&&(XC=new eD);XC.a?cM[wq]=qba:cM[wq]=null}var cM;w(534,137,mv);function dM(){}function eM(a){this.f=a}w(533,534,{82:1,88:1,96:1,105:1},dM,eM);function fM(){fM=x;gM=new hM}\nfunction iM(a){fM();var b,c,d;if(null==a)throw new dM;a=iG(a);try{d=gG(a,hG(58))}catch(e){e=Az(e);if(H(e,100))throw new eM(My(e));throw e;}c=gG(a,hG(91));if(0<=d&&(-1==c||d=b||65<=b&&90>=b;for(c=1;b&&c=b||65<=b&&90>=b||48<=b&&57>=b||43==b||45==b||46==b;if(b){c=this.f;jM();var f,g,h;h=c.length;b=new kM;for(g=0;g=f?lM(b,f+32&65535):Rz(b.a,String.fromCharCode(f));\nthis.f=Uz(b.a)}else this.f=null,d=-1}if(null==this.f)throw new eM(ui+a);if(!this.k&&(this.k=MD(gM,this.f),this.k||(this.k=(KJ(),new mM))&&D(gM,this.f,this.k),!this.k))throw new eM(ui+a);try{c=a;var j=++d,l=a.length,n,o,r,t,z,v,E,s,F,P,M,$,da,Z,ca,Hb,aa,sb,Mb,K,Ja;if(ll){if(-2147483647>=l&&(j>=c.length||0>j)||!(0>j||j>=c.length)&&c.indexOf(Te,j)==j&&-1==nM(c,hG(47),j+2))throw new oM(l);}else{M=c.substr(j,l-j);l-=j;v=0;E=this.c;$=this.e;sb=this.j;t=this.d;ca=this.i;n=this.a;Ja=this.n;Mb=nM(M,\nhG(35),0);if(0==M.indexOf(Te)&&0!=M.indexOf(Ue)){F=2;$=-1;v=nM(M,hG(47),2);aa=nM(M,hG(63),2);-1!=aa&&(-1==v||v>aa)&&(v=aa);-1==v&&(v=l,t=m);s=v;-1!=Mb&&Mbr+1?(o=M.charCodeAt(r+1),58==o?da=r+1:da=-1):da=-1}catch(Ub){if(Ub=Az(Ub),!H(Ub,96))throw Ub;}-1==da||da>v?E=M.substr(F,s-F):(E=M.substr(F,da-F),Z=M.substr(da+1,s-(da+1)),0==Z.length?$=-1:\n$=pM(Z,10))}-1v&&(null==t?t=m:J(t,m)?t=Se:t.indexOf(Se),P=uJ(t,hG(47))+1,0==P?t=M.substr(v,z-v):t=t.substr(0,P-0)+M.substr(v,z-v)));null==t&&(t=m);null==E&&(E=m);d=E;var N;N=t;null!=ca&&!J(ca,m)&&(null!=t?N=t+Xf+ca:N=Xf+ca);null==\nthis.f&&(this.f=this.f);this.c=d;this.b=N;this.e=$;this.j=sb;var za;null!=this.c&&0this.e)throw new eM(tq+this.e);\n}w(535,1,lv,iM);_.tS=function(){return!this.k?Vt+this.f+ud+this.c+this.b:qM(this)};_.a=null;_.b=null;_.c=null;_.d=null;_.e=-1;_.f=null;_.i=null;_.j=null;_.k=null;_.n=null;var gM;function qM(a){var b,c;b=new SE;Ly(b,a.f);Rz(b.a,zf);c=a.a;null!=c&&0=a.i)break;c=EM(a,c);++b}return b}function FM(a,b){var c;for(c=0;c=a.i)throw new BM;b=a.a;a.a=EM(a,a.a);return $L(a.n,b,a.a)}function EM(a,b){var c,d;for(d=b;da.f||!FM(a,c))break;d+=65536<=c?2:1}else{c=a.n.charCodeAt(d);if(c>a.f||0>gG(a.c,hG(c)))break;++d}return d}function IM(a){JM.call(this,a,ha,!1)}function KM(a){JM.call(this,a,Jd,!1)}\nfunction JM(a,b,c){this.a=0;this.j=-1;this.d=!1;this.n=a;this.i=a.length;this.c=b;this.k=c;var d;if(null==this.c)this.f=0;else{for(c=b=d=0;c=a&&(a=HM(this.c,c,this.c.length),this.e=!0),d=a;++a)0=a;++a)b=kk,33=j||b>a.Sb||c>a.Sb))){l=C(SN,gv,-1,99,1);h=o=n=0;for(g=b;g<=c;++g)f=TN(a.zb[g]),n+=f.c,o+=f.d,f.d>h&&(h=f.d),l[g]=f.c,2==d&&(l[g]=f.d);a.J&&(n+=25*(j+1),o+=25*(j+1),h+=25);j=g=1;a.J?r=UN(a):r=VN(a);f=fA(r.b);r=fA(r.a);1==d||3==d?f=~~((f-48)/2):2==d&&(r=~~(r/2));n>=f&&(g=f/n);h>=r&&(j=r/h);h=0;a.J&&(a.xb=gd)switch(gO(b,(yK(),FK)),f){case 101:gO(b,JK);kO(b,j+3,g+3,a.mb-6,a.mb-6);gO(b,FK);e=g+3;h=a.mb-6;c=\na.mb-6;d=b.a;f=Q(L(R((j+3)*S)));e=Q(L(R(e*S)));h=Q(L(R(h*S)));c=Q(L(R(c*S)));d.o&&(lO(d,!1),mO(d,nO(d,f,e,h,c)));oO(b,j+6,g+6,a.mb-12,a.mb-12);pO(b.a,Q(L(R((j+9)*(qO(),S)))),Q(L(R((g+9)*S))),Q(L(R(2*S))),Q(L(R(4*S))));hO(b,j+a.mb-10,g+9,2,4);0.04>Math.random()&&(gO(b,HK),pO(b.a,Q(L(R((j+10)*S))),Q(L(R((g+18)*S))),Q(L(R(4*S))),Q(L(R(4*S)))));0.96=e;++e)if(bn&&(gO(g,(hN(),pN)[n]),kO(g,f.b[s].q-12,f.b[s].r-12,24,24));for(s=1;s<=f.q;++s)l=f.c[s].i,o=f.c[s].j,0!=f.b[l].c&&\nf.b[l].c==f.b[o].c&&(gO(g,(hN(),pN)[f.b[l].c]),v=f.b[o].q-f.b[l].q,h=f.b[o].r-f.b[l].r,z=Math.sqrt(v*v+h*h),1>z&&(z=1),h/=z,z=v/z,v=9*h,t=9*z,n=JO(4),r=JO(4),n[0]=f.b[l].q+v,r[0]=f.b[l].r-t,n[1]=f.b[o].q+v,r[1]=f.b[o].r-t,n[2]=f.b[o].q-v,r[2]=f.b[o].r+t,n[3]=f.b[l].q-v,r[3]=f.b[l].r+t,vO(g,n,r,4))}for(s=1;s<=f.q;++s){gO(g,(yK(),EK));t=f.c[s];l=t.i;o=t.j;1==f.i&&0!=f.b[l].c&&f.b[l].c==f.b[o].c&&gO(g,(hN(),pN)[f.b[l].c]);if(3==t.f||4==t.f)n=l,l=o,o=n;n=f.b[l].q;r=f.b[l].r;M=f.b[o].q;P=f.b[o].r;if(1!=\nt.c||0!=t.f)v=M-n,h=P-r,z=Math.sqrt(v*v+h*h),1>z&&(z=1),h/=z,z=v/z;switch(t.c){case 2:10<=t.f&&gO(g,KK);v=2*h;t=2*z;sO(g.a,Q(L(R((n+v)*(qO(),S)))),Q(L(R((r-t)*S))),Q(L(R((M+v)*S))),Q(L(R((P-t)*S))));sO(g.a,Q(L(R((n-v)*S))),Q(L(R((r+t)*S))),Q(L(R((M-v)*S))),Q(L(R((P+t)*S))));gO(g,FK);break;case 3:sO(g.a,Q(L(R(n*(qO(),S)))),Q(L(R(r*S))),Q(L(R(M*S))),Q(L(R(P*S))));l=3*h;o=3*z;sO(g.a,Q(L(R((n+l)*S))),Q(L(R((r-o)*S))),Q(L(R((M+l)*S))),Q(L(R((P-o)*S))));sO(g.a,Q(L(R((n-l)*S))),Q(L(R((r+o)*S))),Q(L(R((M-\nl)*S))),Q(L(R((P+o)*S))));break;case 9:case 0:for(o=0;10>o;++o)l=n-(n-M)/10*o,E=r-(r-P)/10*o,sO(g.a,Q(L(R(l*(qO(),S)))),Q(L(R(E*S))),Q(L(R(l*S))),Q(L(R(E*S))));KO(g,f.k.v);o=LO(f.k.w);t=t.d;l=Xf;null!=t&&(l=t);t=BL(f.k.w,l);t=(n+M)/2-t/2;P=(r+P)/2+~~(o/2)-1;gO(g,KK);MO(g.a,l,Q(L(R(t*(qO(),S)))),Q(L(R(P*S))));gO(g,FK);break;default:if(1==t.f||3==t.f)v=3*h,t=3*z,E=JO(3),j=JO(3),E[0]=M+v,j[0]=P-t,E[1]=n,j[1]=r,E[2]=M-v,j[2]=P+t,vO(g,E,j,3);else if(2==t.f||4==t.f){v=3*h;t=3*z;for(o=0;10>o;++o)l=n-(n-\nM)/10*o,E=r-(r-P)/10*o,j=o/10,sO(g.a,Q(L(R((l+v*j)*(qO(),S)))),Q(L(R((E-t*j)*S))),Q(L(R((l-v*j)*S))),Q(L(R((E+t*j)*S))))}else sO(g.a,Q(L(R(n*(qO(),S)))),Q(L(R(r*S))),Q(L(R(M*S))),Q(L(R(P*S))))}}z=JO(f.p+1);h=JO(f.p+1);for(s=1;s<=f.q;++s)l=f.c[s].i,o=f.c[s].j,n=f.b[l].q,r=f.b[o].q,++h[l],++h[o],z[l]=z[l]/h[l]+r/h[l],z[o]=z[o]/h[o]+n/h[o];KO(g,f.k.v);o=LO(f.k.w);M=JO(f.p+1);r=JO(f.p+1);n=C(qca,q,120,f.p+1,0);for(s=1;s<=f.p;++s)l=NO(f,s),(null==l||1>l.length)&&(l=Dd),j=f.b[s],3==f.b[s].a&&0PO(z[s]-f.b[s].q)&&(v=!1),2PO(z[s]-f.b[s].q)&&(P=!0),t=l,E=m,f.k.oc&&(F=f.b[s].i,0z&&(z=1),h/=z,z=v/z,v=4*h,t=4*z,E=JO(5),j=JO(5),E[0]=f.b[l].q+v,E[1]=f.b[o].q+v,j[0]=f.b[l].r-t,j[1]=f.b[o].r-t,E[3]=f.b[l].q-v,E[2]=f.b[o].q-v,j[3]=f.b[l].r+t,j[2]=f.b[o].r+t,E[4]=E[0],j[4]=j[0],106!=f.k.k&&SO(g,E,j,5),106==f.k.k&&TO(f,f.c[f.w].i,f.c[f.w].j))){h=0;for(s=1;s<=f.p;++s)0~~(f.p/2))for(s=1;s<=f.p;++s)0e;++e)if(d=a.zb[e])0b&&(b=c);return b}\nfunction dP(a,b,c,d){var e=qN?350:170,f,g,h,j;eP(d);b=fP(a,b);c=fP(a,c);h=e;for(g=1;g<=a.Sb;++g){j=new gP(e);f=a.zb[g];for(var l=b,n=c,o=j,r=void 0,t=void 0,z=void 0,v=void 0,E=r=r=r=v=r=void 0,s=void 0,F=void 0,P=t=z=r=r=void 0,M=void 0,$=void 0,E=0,F=o.a,s=1;s<=f.q;++s)r=hP(l,n,f.c[s].a,f.c[s].b),rz+F||(r=M*r+$*v,0>r||(z=Math.sqrt(z),t=Math.sqrt(t),r/=z*t,1<=r||(r=1.5707963267948966-Math.acos(r),r=t*Math.cos(r),r*=r,r=a.yb||0>=a.ub)&&(!a.M&&(a.M=hK(a)),iP(a,a.M));b=new jP;b.b=a.yb;b.a=a.ub;return b}function VN(a){var b;b=UN(a);b.b/=a.xb;b.a/=a.xb;return b}function FO(a,b){a.b.a.a=b/S;return a.b}\nfunction kP(a,b,c,d){var e,f;if(!b||lP(b)){if((e=0=e;++e)b=JP(h,d);e=oP(pM(iG(b.substr(0,3)),10)).a;g=oP(pM(iG(b.substr(3,3)),10)).a;JP(h,d);for(b=1;b<=e+g;++b){for(f=m;!(j=JP(h,d),null==j||J(j,fc));)f+=j+d;a.zb[++a.Sb]=new KP(a,f)}a.xb=1;RN(a,1,e,1,!1);RN(a,e+1,e+g,3,!1);d=taa}else{(a.J||a.Vb)&&(a.dc=!1);a.ob=new KP(a,b);if(!a.ob||0==a.ob.p)return!a.ob&&(tC(a,Kh),a.bf(a.Ec.d)),!!a.ob;d=(a.dc||a.Fb)&&a.p||a.Mb;null!=a.t&&\na.ob&&LP(a.ob,a.t,!0);null!=a.u&&a.ob&&LP(a.ob,a.u,!1);d||(a.Sb=0,a.xb=1);h=MP(a.ob);if(1>=h||a.J)a.zb[++a.Sb]=a.ob;else{a.Fb=!0;for(b=1;b<=h;++b)a.zb[++a.Sb]=new NP(a,a.ob,b)}d?a.o=a.Sb:a.o=1;a.ob=a.zb[a.o];a.J?RN(a,1,1,0,!0):RN(a,1,h,0,!d);d=Rs}OP(a);null!=d&&(uP(a.r,gg),a.r&&aO(cz(a.r,d),0,0,0),a.hc=!0);a.Ib=!0;c&&a.bf(a.Ec.d);return!0}function tC(a,b){null==b&&(b=m);a.Gb=!0;a.X=b;a.gg(uq+b)}\nfunction IO(a,b){var c;c=Math.round(b);100>c&&(!rN[c]&&(rN[c]=new hL(mi,0,c)),!sN[c]&&sz(sN,c,wJ(rN[c])),a.v=rN[c],a.w=sN[c])}function lP(a){var b;if(!a)return!1;b=a.tf();a=0!=(a.e&2);return b||a}function UO(a,b){return(a.mb+(a.Lb?1:0))*b}function zO(a,b){var c,d;d=-1;for(c=0;c=b)switch(a.Kb=!0,a.Hb=!0,tC(a,m),b){case 102:ZN(a,!0);rP(a,102);qP(a,102);d=!0;break;case 110:a.Ib=!0;a.k=c;a.pb.a!=a.pb.b&&a.pb.a.b!=a.pb.b?a.q&&(++a.Sb,a.o=a.Sb,a.q=!1):tC(a,Wj);if(!(a.pb.a!=a.pb.b&&a.pb.a.b!=a.pb.b))break;PP(a,QP(a.pb));a.r&&aO(cz(a.r,Ut),0,0,0);a.hc=!0;a.hc=!1;a.Ib=!0;break;case 111:a.k=c;if(a.pb.a.c)a.q&&(++a.Sb,a.o=a.Sb,a.q=!1);else{tC(a,Vj);break}if(!a.pb.a.c)break;e=a.pb;if(!e.a.c)throw new rG(Mg);\nif(!e.a.c)throw new rG(yi);e.a=e.a.c;PP(a,e.a.a);a.r&&aO(cz(a.r,Us),0,0,0);a.hc=!0;a.hc=!1;a.Ib=!0;break;case 214:kP(a,null,a.R.a,a.R.b);a.k=c;break;case 151:case 152:case 154:case 153:e=null;a.k=c;switch(b){case 152:e=RP(a.jc);break;case 151:e=SP(a.jc);break;case 154:e=a.jc;e.a=e.c;e=RP(e);break;case 153:e=a.jc,e.a=-1,e=SP(e)}null==e?tC(a,Uj):(bO(a),a.Vb=!0,TP(a,e,!1),a.Vb=!1,J(a.X,m)&&(tC(a,rj+(a.jc.a+1)+jb+a.jc.c),d=!0,a.r&&aO(cz(a.r,tk),0,0,0),a.hc=!0,a.hc=!1));break;case 101:vz(4,new UP(a));\na.k=c;break;case 107:vz(2,new VP(a));break;case 114:vz(3,new WP(a));a.k=c;break;case 103:a.Mb=!0;a.k=c;break;case 105:a.A&&a.Bb&&(a.Bb=!1,XP(a.ob),a.Ib=!0,a.r&&aO(cz(a.r,Hn),0,0,0),d=a.hc=!0,a.k=c);a.I=1;break;case 109:a.k=c;e=YP(a.ob);if(2==e){tC(a,uh);break}d=TN(a.ob);a.Ib=!0;a.ob=new wN(a.ob);d=fA((a.M.b-a.mb)/2-d.a);for(e=1;e<=a.ob.p;++e)XN(a.ob.b[e],2*d/a.xb,0/a.xb);a.zb[++a.Sb]=a.ob;a.o=a.Sb;a.r&&aO(cz(a.r,raa),0,0,0);d=a.hc=!0;rP(a,109);qP(a,109);break;case 104:d=xN(a);break;case 213:a.k=c;\nif(!a.S){var f,g,h,j,l;l=new sL;for(f=a.U,g=0,h=f.length;g=b&&(a.n=33+(b-1301)),0=a.k)a.cb=2,cQ(a.ob),d=!0,MN(a,kn,a.o,0,a.ob.w);else if(202==a.k||203==a.k||204==a.k)if(0=g;++g){f=0;for(c=1;c<=a.Sb;++c)YP(a.zb[c])==g&&(h[g][++f]=c);h[g][0]=f}e+=rc;e+=fQ(h[1][0],3)+fQ(h[3][0],3)+ba;for(c=1;c<=h[1][0];++c)e+=gc+gQ(a.zb[h[1][c]],d,b);for(c=1;c<=h[3][0];++c)e+=gc+gQ(a.zb[h[3][c]],d,b)}else{1f&&(f=e.b[b].r),e.b[b].qb;++b)sz(g.b,g.c++,null),sz(f.b,f.c++,null);for(b=1;b<=e.p;++b)j=e.b[b].b,null==j||0==j.length||(J(j,an)?Tv(c,new oK(b)):0==j.indexOf(tr)?(j=pM(jG(j,3),10),l=null,f.c>j&&(l=(ZK(j,f.c),f.b[j])),null==l?h=new Zv:h=l,Tv(h,new oK(b)),eL(f,j,h)):0==j.indexOf(qs)&&(j=pM(jG(j,2),10),l=null,g.c>j&&(l=(ZK(j,g.c),g.b[j])),null==l?h=new Zv:h=l,Tv(h,new oK(b)),eL(g,j,h)));d+=lQ(mj,c);if(0a.M.a-Q(L(R(a.mb*a.nb))))return!1;var b=\na.Cc,f=a.Dc,g,h,j,l;l=0;if(0>b||0>f||f>a.ub||b>a.yb)b=0;else if(1==a.Sb)b=a.o;else{b=fP(a,b);f=fP(a,f);j=1.7976931348623157E308;for(h=1;h<=a.Sb;++h){g=a.zb[h];for(var n=void 0,o=void 0,r=void 0,o=1.7976931348623157E308,n=1;n<=g.p;++n)r=hP(b,f,g.b[n].q,g.b[n].r),r=a.k)a.cb=2,cQ(a.ob),zN(a,jn,a.ob.v);else if(230==a.k)a.cb=3,zN(a,ln,a.ob.v);else if(233<=a.k&&262>a.k)pQ(a.ob,!1),\nzN(a,gn,a.ob.v),a.cb=3;else if(107==a.k){if(a.bc.b)return!0;bQ(a.ob,a.ob.v,Wz(a.bc.e.Tc.a.pb,Yt));a.ob.j=!0;zN(a,dn,a.ob.v)}else if(105==a.k)(c=qQ(a.ob))?zN(a,hr,a.ob.v):zN(a,Zaa,a.ob.v);else if(113!=a.k)if(300c.length&&(c=dl),bQ(a.ob,a.ob.v,c)),zN(a,nt+a.n,a.ob.v)}else e=!1}else if(0d&&(d=b);if(0==d)break;yN(c,d);c.a[d]=0}BN(a.ob);MN(a,Po,a.o,0,a.ob.w);a.ob.w=0}else if(201==a.k)rQ(a.ob,a.ob.w),MN(a,Laa,a.o,0,a.ob.w);else if(202==a.k||205==a.k)1==a.ob.c[a.ob.w].c&&0==a.ob.c[a.ob.w].f?(a.ob.c[a.ob.w].c=2,MN(a,ot,a.o,0,a.ob.w)):(a.ob.c[a.ob.w].c=1,a.ob.c[a.ob.w].f=0,MN(a,pt,a.o,0,a.ob.w)),a.ob.c[a.ob.w].f=0;else if(203==a.k)a.ob.c[a.ob.w].c=2,a.ob.c[a.ob.w].f=0,BN(a.ob),MN(a,\not,a.o,0,a.ob.w);else if(204==a.k)a.ob.c[a.ob.w].c=3,a.ob.c[a.ob.w].f=0,BN(a.ob),MN(a,qt,a.o,0,a.ob.w);else if(206<=a.k&&229>=a.k)a.cb=2,cQ(a.ob),MN(a,kn,a.o,0,a.ob.w),BN(a.ob);else if(107==a.k){if(!a.bc.b)return!0;c=Wz(a.bc.e.Tc.a.pb,Yt);a.ob.c[a.ob.w].c=9;a.ob.c[a.ob.w].d=c;MN(a,Maa,a.o,0,a.ob.w)}else 105==a.k?(c=a.ob,b=a.ob.w,c.k.gb=!0,c.k.sc?(c.i=-1,d=c.c[b].i,b=c.c[b].j,f=c.b[d].c,h=c.b[b].c,j=4,f==h&&0=a.k)return!1;++a.Sb;a.o=a.Sb;a.zb[a.Sb]=new $N(a);a.ob=a.zb[a.Sb];a.eb.c=a.o;202<=a.k&&204>=a.k||205==a.k?(sQ(a.ob,null),a.ob.q=0,tQ(a.ob,1,c/a.xb,d/a.xb),a.ob.v=1,a.ob.x=1,a.cb=1,b=a.ob,dQ(b,b.v,0),205==a.k?(tQ(a.ob,2,(c+21.65)/a.xb,(d-12.5)/a.xb),a.ob.e[0]=1,a.ob.e[1]=2,a.ob.r=1,MN(a,fn,a.o,0,a.ob.w)):MN(a,en,a.o,0,a.ob.w)):206<=a.k&&229>=a.k?(a.ob.z=fP(a,c),a.ob.A=fP(a,d),a.cb=2,cQ(a.ob),a.r&&aO(cz(a.r,jn),0,0,0),a.hc=!0):300c.length&&(c=dl),bQ(a.ob,1,c)),zN(a,cn,a.ob.v)):230==a.k?(DP(a,null,!0),a.r&&aO(cz(a.r,ln),0,0,0),a.hc=!0):233<=a.k&&262>a.k?(sQ(a.ob,null),a.ob.q=0,tQ(a.ob,1,c/a.xb,d/a.xb),a.ob.v=1,pQ(a.ob,!0),a.r&&aO(cz(a.r,gn),0,0,0),a.hc=!0):bM()}else e=!1;e&&uQ(a)}return a.Ab=e}\nfunction vQ(a,b,c,d){var e,f,g,h;bM();if(!a.Db||wQ(b))return!0;a.Gb=!1;c-=Q(L(R(UO(a,a.nb))));d-=Q(L(R(VO(a,a.nb))));f=fP(a,c-a.Cc);g=fP(a,d-a.Dc);e=fP(a,c);h=fP(a,d);if(2==a.cb||3==a.cb||9==a.cb)return!0;if(1==a.cb){f=!1;a.zb[a.eb.c].v=0;--a.ob.p;g=c;var b=d,j=a.Nb;0>g||0>b||b>a.ub||g>a.yb?eP(j):dP(a,g,b,j);++a.ob.p;if(0g&&(g=1);b/=g;j/=g;n=g/2/Math.tan(0.5235987755982988);o=e-f.b[l].q;r=h-f.b[l].r;l=-g/2+o*j+r*b;b=r*j-o*b;if(0>l)if(1f.b[2].r-f.b[1].r&&0h-f.b[1].r&&\n(f.b[2].r=f.b[1].r-g/2),0>f.b[2].q-f.b[1].q&&0e-f.b[1].q&&(f.b[2].q=f.b[1].q-0.866*g);else{if(2==f.b[f.e[0]].j&&(n=f.b[f.e[0]].p[1],n==f.e[1]&&(n=f.b[f.e[0]].p[2]),j=f.b[f.e[0]].q-f.b[n].q,b=f.b[f.e[0]].r-f.b[n].r,g=Math.sqrt(j*j+b*b),1>g&&(g=1),b/=g,j/=g,o=e-f.b[n].q,r=h-f.b[n].r,e=r*j-o*b,o=f.b[f.e[1]].q-f.b[n].q,r=f.b[f.e[1]].r-f.b[n].r,h=r*j-o*b,0h||0>e&&0=b?0-b:b)>e){++f.r;if(100g&&(g=1),tQ(f,f.p,f.b[f.x].q+25*(j/g),f.b[f.x].r+25*(b/g))}a.B=!0}else if(113==a.k&&0c||0>d||d>a.ub||c>a.yb)&&5!=a.cb))e=VN(a),h=a.ob,j=TN(h),b=j.a,j=j.b,0>f&&be.b||0>g&&je.a||AQ(h,f,g),a.cb=5;EN(a,!1);a.Ib=!0;aP(a);a.Cc=c;a.Dc=d;return!0}\nfunction pP(a,b,c,d){var e,f;if(!a.J||a.Zf().a||a.$f().a||a.K)if(f=!1,e=AO(a,c,d),e!=a.Cb&&(f|=rP(a,a.Cb),f|=qP(a,e),a.Cb=e),!lP(b)){c-=Q(L(R(UO(a,a.nb))));d-=Q(L(R(VO(a,a.nb))));b=c;c=a.Nb;0>b||0>d||d>a.ub||b>a.yb?eP(c):dP(a,b,d,c);113==e&&0d.b[e].j&&(GQ(d,null),b=d.e[d.r-1],d.c[d.q].i=e,d.c[d.q].j=b,HQ(d.b[e],b),HQ(d.b[e],b)),yN(d,d.p)),d.u=!1,a.hc=!0;else if(0!=a.eb.c&&a.o!=a.eb.c){yN(a.ob,a.ob.p);b=a.ob.x;c=a.eb.a+a.ob.p;e=a.zb[a.eb.c];d=new hQ(a,y(IQ,q,119,[null,a.ob,e]),2);d.b[0]=new JQ;KQ(d,b,c,1);b=C(IQ,\nq,119,a.zb.length,0);for(f=0,c=0;fd.c[b].c?(++d.c[b].c,d.c[b].f=0):tC(d.k,Cj)):6==d.b[e].j?(--d.q,MQ(d,d.x),tC(d.k,Yj)):(d.c[d.q].j=e,MQ(d,d.x),b=d.x,HQ(d.b[e],b),HQ(d.b[b],e),NQ(d.c[d.q],d.b)));YN(a.ob);a.B&&(d=a.pb,d.a!=d.b&&d.a.b!=d.b&&(e=d.a.c,QP(d),d.a.c=e),MN(a,en,a.o,0,a.ob.w),a.B=!1);d=!0}else 5==a.cb&&(YN(a.ob),\nd=a.hc=!0);0=b&&0==c||b==c&&a.o==a.Zb)return-1;0>=b&&0Vb))for(;wc=pb[fd]*pb[fd];)0==wc%pb[fd]?eb=!1:++fd;if(eb){I[++Yb]=JE(wc);if(Yb>=Vb)break;Yctc&&(tc=0),0>Y&&(Y=0),Fd=28*tc+Y));Qc=0;0!=G.b[T].n&&(-2>G.b[T].n?Qc=1:-2==G.b[T].n?Qc=2:-1==G.b[T].n?Qc=3:1==G.b[T].n?Qc=4:2==G.b[T].n?Qc=5:2Bb&&(Bb=10-Bb));Ec=126;db=ie;db+=126*G.b[T].i;Ec*=7;db+=Qc*Ec;Ec*=7;0!=Bb&&(db+=Bb*Ec);Ec*=7;db+=Fd*Ec;Ec*=783;db+=G.b[T].j*Ec;O[T]=JE(db)}for(ga=0;!WQ(G,Sa,O);){Da=!1;for(T=1;T<=G.p;++T)Sa[T]!=ob[T]&&(ob[T]=Sa[T],Da=!0);if(Da){for(T=1;T<=G.p;++T){O[T]=lu;for(Aa=1;Aa<=G.b[T].j;++Aa)O[T]=ME(O[T],I[Sa[G.b[T].p[Aa]]])}ga=\n0}else if(0G.c[T].j&&(Nb=G.c[T].i,G.c[T].i=G.c[T].j,G.c[T].j=Nb,1==G.c[T].f?G.c[T].f=3:2==G.c[T].f?G.c[T].f=4:3==G.c[T].f?G.c[T].f=1:4==G.c[T].f&&(G.c[T].f=2));for(T=1;To.a[v])&&P!=qa[v]){mc=!0;for(Ja=1;Ja<=za;++Ja)if(ca[Ja]==v&&Hb[Ja]==P||ca[Ja]==P&&Hb[Ja]==v){mc=!1;break}mc&&(++za,ca[za]=v,Hb[za]=P)}}else Z[++N]=P;if(0==N){if(Ab==o.p)break;v=da[tb--]}else if(1==N)qa[Z[1]]=v,v=Z[1],o.a[v]=++Ab;else{da[++tb]=v;s=0;for(aa=1;aa<=N;++aa)if($=LQ(o,Z[aa],v),!Mb[$]){s=Z[aa];break}if(0==s)for(aa=1;aa<=N;++aa)if($=LQ(o,Z[aa],v),2==o.d[$]||3==o.d[$]){s=\nZ[aa];break}0==s&&(s=Z[1]);qa[s]=v;v=s;o.a[s]=++Ab}}qa=JO(o.p+1);z=JO(o.p+1);$c=[];dd=[];F=Ab=tb=0;for(aa=1;aa<=o.p;++aa)if(1==o.a[aa]){v=aa;break}b:for(;;){0Cb.b[Na].j||4Qa.b[Rc].j||3Gc[fb]&&(ce=nc,nc=fb,fb=ce);Xa=nc;0==nc&&(Xa=fb,Me=!0);for(kc=1;kc<=Qa.b[Rc].j;++kc)zd=Qa.b[Rc].p[kc],zd!=Qb[zc-1]&&(0==ke?ke=zd:le=zd);0Gc[le]&&(ce=ke,ke=le,le=ce);Ad=ke;0==ke&&(Ad=le,Td=!0);of=0of+je?-(of+je):of+je)||0!=vc||0!=md?tC(Qa.k,vg):(Hc=Qa.b[Qb[zc-1]].q-Qa.b[Rc].q,V=Qa.b[Qb[zc-1]].r-Qa.b[Rc].r,\noc=Math.sqrt(Hc*Hc+V*V),0.001>oc&&(oc=0.001),0<(Qa.b[Ad].r-Qa.b[Qb[zc-1]].r)*(Hc/oc)-(Qa.b[Ad].q-Qa.b[Qb[zc-1]].q)*(V/oc)?hd[Pb]=1:hd[Pb]=-1,Me&&(hd[Pb]*=-1),Td&&(hd[Pb]*=-1),Xa==nc&&0>of&&(hd[Pb]*=-1),Xa==fb&&0>je&&(hd[Pb]*=-1),Gc[Xa]>Gc[Ad]&&(hd[Pb]*=-1))}}else c:{var qb=Cb,Ac=Na,Ne=gd,Oe=void 0,lc=void 0,Jc=void 0,Bc=void 0,gb=void 0,$b=void 0,de=void 0,xe=void 0,Bd=void 0,Sc=void 0,Ba=void 0,hb=void 0,Hd=void 0,Cd=void 0,Kc=void 0,Za=void 0,me=void 0,hb=JO(4),Cd=JO(4),Gf=qb,nd=Ac,Zf=kb,$f=Ld,\nHf=ic,Pe=be,wg=Ta,Gb=hb,id=void 0,Id=void 0,pf=void 0,xg=void 0,Rg=void 0,If=void 0,If=-1;0<$f[nd]&&(Gb[++If]=$f[nd]);for(Id=1;Id<=wg;++Id)Hf[Id]==nd&&(Gb[++If]=Pe[Id]),Pe[Id]==nd&&(Gb[++If]=Hf[Id]);for(Id=If+1;Idgb;++gb)0>=hb[gb]||(Oe=LQ(qb,Ac,hb[gb]),Cd[gb]=$Q(qb,Oe,Ac),0Cd[gb]?(++de,Bc=hb[gb],$b=hb[gb]):xe=hb[gb]);Bd=Sc+de;Za=JO(4);Kc=0;if(3==qb.b[Ac].j){if(1==Sc&&1==de||3==Bd&&0gb;++gb)Oe=LQ(qb,Ac,Ba[gb]),lc[gb]=$Q(qb,Oe,Ac);if(4==Bd){if(0==Sc||0==de){tC(qb.k,Xh);break c}if(1==Sc||1==de)Za[0]=Ba[0],Za[1]=Ba[3],Za[2]=Ba[2],Za[3]=Ba[1],Kc=lc[0];else{for(gb=0;4>gb;++gb)-1==lc[gb]&&(lc[gb]=0);Bd=2}}else if(3==Bd)if(3==Sc||3==de)Za[0]=Ba[0],Za[1]=Ba[3],Za[2]=Ba[2],Za[3]=Ba[1],0gb;++gb)lc[gb]==Jc&&(lc[gb]=0);Bd=2}if(2==Bd)if(1==Sc&&1==de)Ba[1]==Bc?\n(Ba[1]=Ba[2],Ba[2]=Ba[3]):Ba[2]==Bc&&(Ba[2]=Ba[3]),Za[0]=me,Za[1]=Bc,Za[2]=Ba[2],Za[3]=Ba[1],Kc=1;else{if(lc[0]==lc[1]||lc[1]==lc[2]){tC(qb.k,Yh);break c}0!=lc[0]?(Za[0]=Ba[0],Za[1]=Ba[2],Za[2]=Ba[1],Za[3]=Ba[3]):(Za[0]=Ba[1],Za[1]=Ba[3],Za[2]=Ba[2],Za[3]=Ba[0]);1=Kf&&(Md=!0,ya=(hN(),oN)[Kf]);Md&&(0!=Ud?ya=gl+Ud+ya:ya=gl+ya,1==Nh[qf]?ya+=Yf:-1==Nh[qf]&&(ya+=cg),1==bg?ya+=ji:1od?-od:od)&&(ya+=0>od?-od:od)),ne&&(ya+=zf+ib),ya+=Lm);Ky(Jb.a,ya);for(K=1;K<=za;++K)if(ca[K]==v||Hb[K]==v)E=Hb[K],E==v&&(E=ca[K]),M[v]c;++c)(d=b.d[c])?a.zb[c]=new wN(d):a.zb[c]=null;0b||b>a.Sb?(tC(a,Jh+b),a.bf(a.Ec.d),null):a.zb[b]}function OP(a){var b,c,d;b=NN(a);for(d=1;d<=a.Sb;++d)c=a.zb[d],c.o=b}function iR(a,b){b!=a.nb&&(a.nb=b,a.jg(),a.bf(a.Ec.d))}function jR(a,b){var c,d,e;if(b!=a.xb){c=VN(a);a.xb=b;d=VN(a);e=Q(L(R((d.b-d.c)/2-(c.b-c.c)/2)));d=Q(L(R((d.a-d.d)/2-(c.a-c.d)/2)));for(c=1;c<=a.Sb;++c)AQ(a.zb[c],e,d),YN(a.zb[c]);a.Ib=!0;a.bf(a.Ec.d)}}\nfunction QN(a,b){var c;c=-1;J(b,zk)?(c=202,b=m):J(b,qe)?c=235:J(b,re)?c=240:J(b,pe)?c=260:J(b,ve)?c=261:J(b,Be)?c=241:J(b,ue)?c=233:J(b,te)?c=236:J(b,se)?c=237:J(b,Ae)?c=234:J(b,ze)?c=243:J(b,De)?c=252:J(b,we)?c=244:J(b,Ee)?c=239:J(b,Ce)?c=251:J(b,oe)?c=242:J(b,ge)?c=245:J(b,he)&&(c=238);0=a.mb-1)for(g=f.b.b;j>=a.mb-1&&1b&&(b=1),a.fb=dO(a,a.fb,Q(L(R(UO(a,a.nb)))),b),a.W=dO(a,a.W,a.yb+Q(L(R((a.Lb?1:3)*a.nb))),Q(L(R(a.mb*a.nb)))),a.fc=dO(a,a.fc,Q(L(R((a.Lb?1:3)*a.nb))),a.ub)));EO(a);if(!a.J){var d;a.gg(ep+a.Gb+na+a.X);a.Gb&&(null==a.X&&\n(a.X=m),d=FO(a.W,a.nb),c=a.M.b/a.nb-(a.mb+(a.Lb?1:0)),b=a.mb,gO(d,jN),pO(d.a,Q(L(R(0*(qO(),S)))),Q(L(R(0*S))),Q(L(R(c*S))),Q(L(R(b*S)))),a.Lb?(gO(d,(yK(),DK)),tO(d.a,Q(L(R(-10*S))),Q(L(R(0*S))),Q(L(R((c-1+10)*S))),Q(L(R((b-1)*S))))):(gO(d,kN),rO(d,0,0,c-(a.Lb?1:3)+1,0),gO(d,PK(jN)),sO(d.a,Q(L(R(0*S))),Q(L(R((b-1)*S))),Q(L(R((c-1)*S))),Q(L(R((b-1)*S)))),sO(d.a,Q(L(R((c-1)*S))),Q(L(R(0*S))),Q(L(R((c-1)*S))),Q(L(R((b-1)*S))))),KO(d,a.lb),gO(d,(yK(),FK)),-1!=a.X.toLowerCase().indexOf(ip)&&gO(d,HK),RO(d,\na.X,10,15),a.J||DO(a,d,c,b,1),b=Q(L(R(UO(a,a.nb)))),c=a.M.a-Q(L(R(a.mb*a.nb))),WO(a.Ec,a.W.a,b,c));var e;if(a.Kb){b=FO(a.wc,a.nb);d=a.M.b/a.nb;c=2*a.mb+(a.Lb?1:0);gO(b,jN);pO(b.a,Q(L(R(0*(qO(),S)))),Q(L(R(0*S))),Q(L(R(d*S))),Q(L(R(c*S))));a.Lb?(gO(b,(yK(),DK)),e=14*(a.mb+(a.Lb?1:0)),tO(b.a,Q(L(R(e*S))),Q(L(R(0*S))),Q(L(R((d-e-1)*S))),Q(L(R((c-1)*S))))):(gO(b,PK(jN)),sO(b.a,Q(L(R((d-1)*S))),Q(L(R(0*S))),Q(L(R((d-1)*S))),Q(L(R((c-1)*S)))),sO(b.a,Q(L(R(0*S))),Q(L(R((c-1)*S))),Q(L(R((d-1)*S))),Q(L(R((c-\n1)*S)))),gO(b,kN),sO(b.a,Q(L(R(0*S))),Q(L(R(0*S))),Q(L(R((d-1)*S))),Q(L(R(0*S)))));d=a.k;233<=a.k&&262>=a.k&&(a.k=213);for(c=1;14>=c;++c)fO(a,b,c,1),fO(a,b,c,2);a.k=d;WO(a.Ec,a.wc.a,0,0)}var f;if(a.Hb){b=FO(a.fb,a.nb);d=a.mb+(a.Lb?1:0);c=(a.M.a-Q(L(R(VO(a,a.nb)))))/a.nb;f=c-a.mb;gO(b,jN);pO(b.a,Q(L(R(0*(qO(),S)))),Q(L(R(0*S))),Q(L(R(d*S))),Q(L(R(c*S))));a.Lb?(gO(b,(yK(),DK)),e=BO*(a.mb+(a.Lb?1:0))+3,f>e&&(rO(b,0,e,a.mb-1,e),sO(b.a,Q(L(R(0*S))),Q(L(R(e*S))),Q(L(R(0*S))),Q(L(R((c-1)*S)))),rO(b,a.mb-\n1,e,a.mb-1,f),rO(b,a.mb-1,f,d,f))):(gO(b,kN),sO(b.a,Q(L(R(0*S))),Q(L(R(0*S))),Q(L(R(0*S))),Q(L(R((c-1)*S)))),rO(b,0,BO*a.mb,c-1,BO*a.mb),gO(b,PK(jN)),sO(b.a,Q(L(R((d-1)*S))),Q(L(R(0*S))),Q(L(R((d-1)*S))),Q(L(R((f+1)*S)))));sO(b.a,Q(L(R(0*S))),Q(L(R((c-1)*S))),Q(L(R(d*S))),Q(L(R((c-1)*S))));for(c=3;c<=BO+2;++c)fO(a,b,1,c);b=Q(L(R(VO(a,a.nb))));WO(a.Ec,a.fb.a,0,b)}a.Jb&&(d=FO(a.fc,a.nb),c=a.Lb?1:3,b=(a.M.a-Q(L(R(VO(a,a.nb))))-Q(L(R(a.mb*a.nb))))/a.nb,a.Lb?(gO(d,(yK(),DK)),pO(d.a,Q(L(R(0*(qO(),S)))),\nQ(L(R(0*S))),Q(L(R(c*S))),Q(L(R(b*S))))):(gO(d,PK(jN)),sO(d.a,Q(L(R((c-1)*(qO(),S)))),Q(L(R(0*S))),Q(L(R((c-1)*S))),Q(L(R(b*S)))),gO(d,jN),sO(d.a,Q(L(R((c-2)*S))),Q(L(R(0*S))),Q(L(R((c-2)*S))),Q(L(R(b*S)))),gO(d,kN),sO(d.a,Q(L(R((c-3)*S))),Q(L(R(0*S))),Q(L(R((c-3)*S))),Q(L(R(b*S))))),b=a.M.b-Q(L(R((a.Lb?1:3)*a.nb))),c=Q(L(R(VO(a,a.nb)))),WO(a.Ec,a.fc.a,b,c))}}\nfunction AC(a,b){a.A?0==b&&(a.I=-1,tC(a,so),aP(a)):(a.gb?a.I=b:-1a.I?a.I=10*a.I+b:a.I=b,a.gb=!1,0==a.I?(a.I=-1,tC(a,so)):tC(a,a.I+fa),aP(a))}function iP(a,b){var c,d;d=b.b;c=b.a;a.J||(d-=Q(L(R(UO(a,a.nb))))+Q(L(R((a.Lb?1:3)*a.nb))),c-=Q(L(R(VO(a,a.nb))))+Q(L(R(a.mb*a.nb))));1>d&&(d=1);1>c&&(c=1);a.yb=fA(d);a.ub=fA(c)}function tN(a){hN();return 14<=a&&20>=a?1:21<=a&&28>=a?2:29<=a&&31>=a?3:0}w(558,456,pv);_.zf=function(a){DN(this,a)};_.Yf=mR;_.Zf=function(){return JN(),null!=this.Pb?KN:LN};\n_.$f=function(){return JN(),JN(),LN};_._f=$F;_.ag=function(a,b,c){return dK(this,b,c)};_.bg=$F;_.cg=function(){bM()};_.dg=bL;_.eg=nR;_.fg=bL;_.gg=function(){bM()};_.hg=function(){return vC(this,!0,!1)};\n_.Af=function(a){var b,c;if(this.s)if(c=a.c,b=a.f,a=a.i,c=(100+2*c)/100,this.J||!(bthis.M.a-Q(L(R(this.mb*this.nb)))||b>this.M.b-Q(L(R((this.Lb?1:3)*this.nb))))){if(b=this.xb*c,b>this.xb&&10>=b||b=b&&iR(this,b)};_.bf=function(){lR(this)};\n_.ig=function(a){this.Tb&&(null!=a&&0j&&(j=0);h=new RR(g,h,j,M);SR(h);Tv(g.k,h);mca(f,M.pb);lca(f,g.pb)}else RM(Mi+a+cb)}function rca(){return lE(null)}function sca(a){return lE(a)}w(562,1,Xu,JR,LR,MR,KR);_.lg=function(a){oG(this.d,new TR(this,a),(TB(),TB(),UB))};_.mg=function(a){oG(this.d,new UR(this,a),(CC(),CC(),DC))};_.ng=function(a){oG(this.d,new VR(this,a),(IC(),IC(),JC))};_.og=function(a){oG(this.d,new WR(this,a),(LC(),LC(),MC))};_.pg=function(a){vz(2,new XR(this.b,a))};_.qg=function(){ZN(this.b,!0)};\n_.rg=function(){Jz((Gz(),Hz),new YR(this))};_.sg=function(){var a,b,c;c=[];for(b=new GD(this.d.a);b.ba&&(b.x=a,IO(b,a),$O(b))};_._g=function(a,b){var c=this.b,d;d=hR(c,a);1>b||b>d.p?(tC(c,"ERROR - invalid atom index: "+b),aP(c)):(d.v=b,uQ(c))};_.ah=function(a){tR(this.b,yg,a)};_.bh=function(a,b){tR(this.b,a,b)};_.le=function(a){cG(this.d,a);IR(this)};_.ch=function(a){this.b.V=a};_.dh=function(a){iR(this.b,a)};_.eh=function(a){var b=this.b;b.tb=a;$O(b)};\n_.fh=function(a){var b=this.b;b.wb=a;$O(b)};_.gh=function(a){jR(this.b,a)};_.hh=function(a){this.b.Pb=a};_.ih=function(a){this.b.Qb=a};_.jh=function(a){var b=this.b;b.Wb=a;b.F=cO(b,!1)};_.kh=function(a){this.b.Yb=a};_.lh=function(a,b){dG(this.d,a,b);IR(this)};_.mh=function(a,b,c){c&&dG(this.c,a,b);dG(this.d,a,b);IR(this)};_.nh=function(a,b){eG(this.d,a,b);IR(this)};_.oh=function(a,b,c){c&&eG(this.c,a,b);eG(this.d,a,b);IR(this)};_.ph=function(a){QN(this.b,a)};\n_.qh=function(a,b){var c=this.b,d;c.q=!1;d=c.sc;c.sc=!1;c.uc=new eR(c,a);c.sc=d;c.k=253;tC(c,b);aP(c)};_.me=function(a){kG(this.c.pb,a)};_.rh=function(a){this.b.i=a};_.ne=function(a){this.d.pb.style[du]=a;IR(this)};_.sh=function(a){zQ(this.b,a)};_.th=function(){return uN(this.b)};_.a=-1;_.b=null;_.c=null;_.d=null;var NR=0;function YR(a){this.a=a}w(563,1,{},YR);_.pd=function(){var a,b;for(b=new GD(this.a.d.a);b.b=a.c.length)return!1;c=a.c[a.b];g=cA(c,du);b=cA(c,bq);f=cA(c,Hr);e=cA(c,nq);var h,j,l;l={};for(d=0;d=d&&b=a;return c?65536+((d&1023)<<10)+(e&1023):d}function xS(a,b){return 2>b||36b?b:10)?a-48:97<=a&&aa?-a:a):a}\nfunction AS(a,b){var c;c=new yS;c.d=gh+(BS(0!=a?-a:0)?zS(0!=a?-a:0):m+Xy(c));CS(0!=a?-a:0)&&DS(0!=a?-a:0,c);c.b=4;c.a=b;return c}function U(a){var b;b=new yS;b.d=gh+(BS(a)?zS(a):m+Xy(b));CS(a)&&DS(a,b);return b}function ES(a,b){var c;c=new yS;c.d=gh+(BS(a)?zS(a):m+Xy(c));CS(a)&&DS(a,c);c.b=b?8:0;return c}function FS(){var a;a=new yS;a.d=gh+(BS(0)?zS(0):m+Xy(a));CS(0)&&DS(0,a);a.b=2;return a}function GS(a){var b;b=new yS;b.d=gh+(BS(a)?zS(a):m+Xy(b));CS(a)&&DS(a,b);b.b=1;return b}\nfunction CS(a){return typeof a==Sr&&0b||36c||2147483647a)return 0;if(0==a)return 32;b=-(a>>16)>>16&16;c=16-b;a>>=b;b=a-256>>16&8;c+=b;a<<=b;b=a-4096>>16&4;c+=b;a<<=b;b=a-16384>>16&2;c+=b;a=a<>14;return c+2-(a&~(a>>1))}function xE(a){var b,c;if(0==a)return 32;c=0;for(b=1;0==(b&a);b<<=1)++c;return c}function sv(a){var b,c,d;b=C(NS,Vu,-1,8,1);c=(OS(),PS);d=7;if(0<=a)for(;15>=4;else for(;0>=4;b[d]=c[a&15];return QS(b,d,8)}\nfunction oP(a){var b,c;return-129a?(b=a+128,c=(RS(),SS)[b],!c&&(c=SS[b]=new oK(a)),c):new oK(a)}w(599,596,{88:1,93:1,99:1,101:1},oK);_.eQ=function(a){return H(a,99)&&a.a==this.a};_.hC=WE;_.tS=MS;_.a=0;function RS(){RS=x;SS=C(CQ,q,99,256,0)}var SS;function PO(a){return 0>=a?0-a:a}function QO(a){return 0>a?-a:a}function kw(a,b){return a>b?a:b}function R(a){return Math.round(a)}function TS(a){return Math.sqrt(a)}function aM(){}function vD(a){this.f=a}\nw(603,136,{88:1,96:1,100:1,104:1,105:1},aM,vD);function OS(){OS=x;PS=y(NS,Vu,-1,[48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122])}var PS;function JS(a){this.f=a}w(605,598,{88:1,96:1,98:1,102:1,104:1,105:1},JS);function wS(a,b){return a.charCodeAt(b)}function US(a,b){return-1!=a.lastIndexOf(b)&&a.lastIndexOf(b)==a.length-b.length}function J(a,b){return!H(b,1)?!1:""+a==b}function gG(a,b){return a.indexOf(b)}\nfunction nM(a,b,c){return a.indexOf(b,c)}function uJ(a,b){return a.lastIndexOf(b)}function FR(a,b,c){var d;for(d=0;0<=(d=c.indexOf(jl,d));)36==c.charCodeAt(d+1)?c=c.substr(0,d-0)+dc+jG(c,++d):c=c.substr(0,d-0)+jG(c,++d);return a.replace(RegExp(b,Fp),c)}\nfunction VS(a,b){for(var c=RegExp(b,Fp),d=[],e=0,f=a,g=null;;){var h=c.exec(f);if(null==h||f==m){d[e]=f;break}else d[e]=f.substring(0,h.index),f=f.substring(h.index+h[0].length,f.length),c.lastIndex=0,g==f&&(d[e]=f.substring(0,1),f=f.substring(1)),g=f,e++}if(0fa&&a[a.length-1]>fa?a:a.replace(/^(\\s*)/,m).replace(/\\s*$/,m)}function QS(a,b,c){a=a.slice(b,c);return String.fromCharCode.apply(null,a)}\nfunction vca(a,b,c){if(128>c)return a[b]=(c&127)<<24>>24,1;if(2048>c)return a[b++]=(c>>6&31|192)<<24>>24,a[b]=(c&63|128)<<24>>24,2;if(65536>c)return a[b++]=(c>>12&15|224)<<24>>24,a[b++]=(c>>6&63|128)<<24>>24,a[b]=(c&63|128)<<24>>24,3;if(2097152>c)return a[b++]=(c>>18&7|240)<<24>>24,a[b++]=(c>>12&63|128)<<24>>24,a[b++]=(c>>6&63|128)<<24>>24,a[b]=(c&63|128)<<24>>24,4;if(67108864>c)return a[b++]=(c>>24&3|248)<<24>>24,a[b++]=(c>>18&63|128)<<24>>24,a[b++]=(c>>12&63|128)<<24>>24,a[b++]=(c>>6&63|128)<<24>>\n24,a[b]=(c&63|128)<<24>>24,5;throw new hw(Yg+c);}function hG(a){var b;return 65536<=a?(b=56320+(a-65536&1023)&65535,String.fromCharCode(55296+(a-65536>>10&1023)&65535)+String.fromCharCode(b)):String.fromCharCode(a&65535)}function WS(a){var b,c,d,e,f;e=a.length;for(d=b=0;dc?++b:2048>c?b+=2:65536>c?b+=3:2097152>c?b+=4:67108864>c&&(b+=5);b=C(XS,cv,-1,b,1);for(d=f=0;da||a>=b)&&nT(a,b)}function nT(a,b){throw new uS(vi+a+Nd+b);}w(621,614,Nu);_.Ah=function(){throw new vM("Add not supported on this list");};\n_.uh=function(a){this.Ah(this.Tf(),a);return!0};_.eQ=function(a){return wca(this,a)};_.hC=function(){var a,b,c;b=1;for(a=this.ye();a.Vd();)c=a.Wd(),b=31*b+(null==c?0:Wy(c)),b=~~b;return b};_.ye=function(){return new GD(this)};_.Ch=function(){return this.Dh(0)};_.Dh=function(a){return new oT(this,a)};_.Eh=function(){throw new vM("Remove not supported on this list");};function mT(a){return a.b=a.d.Tf())throw new KG;return a.d.Bh(a.c=a.b++)}\nfunction jT(a){if(0>a.c)throw new hJ;a.d.Eh(a.c);a.b=a.c;a.c=-1}function GD(a){this.d=a}w(622,1,{},GD);_.Vd=function(){return mT(this)};_.Wd=function(){return HD(this)};_.Xd=function(){jT(this)};_.b=0;_.c=-1;_.d=null;function oT(a,b){var c;this.d=this.a=a;c=a.Tf();(0>b||b>c)&&nT(b,c);this.b=b}w(623,622,{},oT);_.Fh=function(){return 0=this.b)throw new KG;return this.a.Bh(this.c=--this.b)};_.a=null;function pT(a){a=new gT(a.b.a);return new qT(a)}\nfunction rT(a,b){this.a=a;this.b=b}w(624,616,Yu,rT);_.vh=sT;_.ye=function(){return pT(this)};_.Tf=function(){return this.b.a.d};_.a=null;_.b=null;function qT(a){this.a=a}w(625,1,{},qT);_.Vd=function(){return mT(this.a.a)};_.Wd=function(){return(this.a.b=HD(this.a.a)).xh()};_.Xd=function(){iT(this.a)};_.a=null;function tT(a){a.b=C(uT,q,0,0,0)}function rL(a,b,c){(0>b||b>a.c)&&nT(b,a.c);a.b.splice(b,0,c);++a.c}function Tv(a,b){sz(a.b,a.c++,b);return!0}function CF(a,b){ZK(b,a.c);return a.b[b]}\nfunction oI(a,b){for(var c=0;ca.c&&sz(b,a.c,null);return b}function Zv(){tT(this)}function dL(a){tT(this);this.b.length=a}\nfunction sK(a){tT(this);a=WD(a.b,a.c);Array.prototype.splice.apply(this.b,[0,0].concat(a));this.c=this.b.length}w(629,621,nv,Zv,dL,sK);_.Ah=function(a,b){rL(this,a,b)};_.uh=function(a){return Tv(this,a)};_.qg=function(){this.b=C(uT,q,0,0,0);this.c=0};_.vh=function(a){return-1!=oI(this,a)};_.Bh=function(a){return CF(this,a)};_.Qf=function(){return 0==this.c};_.Eh=function(a){return vT(this,a)};_.wh=function(a){return Nv(this,a)};_.Tf=ZB;_.c=0;function PD(){PD=x;QD=new wT}var QD;function wT(){}\nw(632,621,Mu,wT);_.vh=nR;_.Bh=function(){throw new HG;};_.Tf=function(){return 0};function xT(){this.a=new Date}function yT(a){return 10>a?Xe+a:m+a}w(635,1,{88:1,92:1,93:1,106:1},xT);_.eQ=function(a){return H(a,106)&&GE(L(this.a.getTime()),L(a.a.getTime()))};\n_.hC=function(){var a;a=L(this.a.getTime());var b,c,d,e;c=32;d=a.h&1048575;22>c?(e=d>>>c,b=a.m>>c|d<<22-c,c=a.l>>c|a.m<<22-c):44>c?(e=0,b=d>>>c-22,c=a.m>>c-22|a.h<<44-c):(b=e=0,c=d>>>c-44);b=pE(c&4194303,b&4194303,e&1048575);a=pE(a.l^b.l,a.m^b.m,a.h^b.h);return Q(a)};\n_.tS=function(){var a,b;b=-this.a.getTimezoneOffset();a=(0<=b?Ed:m)+~~(b/60);b=10>(0>b?-b:b)%60?Xe+(0>b?-b:b)%60:m+(0>b?-b:b)%60;return(zT(),AT)[this.a.getDay()]+fa+BT[this.a.getMonth()]+fa+yT(this.a.getDate())+fa+yT(this.a.getHours())+zf+yT(this.a.getMinutes())+zf+yT(this.a.getSeconds())+" GMT"+a+b+fa+this.a.getFullYear()};_.a=null;function zT(){zT=x;AT=y(iE,q,1,[Nk,Kj,Sk,al,Qk,fi,wk]);BT=y(iE,q,1,[Pi,ci,Bj,lg,Dj,Si,Ri,qg,Ak,ck,$j,Ah])}var AT,BT;function ED(a,b){return null==D(a.a,b,a)}\nfunction DD(){this.a=new Hy}w(637,616,{88:1,92:1,111:1},DD);_.uh=function(a){return ED(this,a)};_.vh=sT;_.Qf=function(){return 0==this.a.d};_.ye=function(){return pT(new rT(this.a,new AM(this.a)))};_.wh=function(a){return null!=OD(this.a,a)};_.Tf=hT;_.tS=function(){return eT(new rT(this.a,new AM(this.a)))};_.a=null;function sM(a,b){this.a=a;this.b=b}w(641,619,fv,sM);_.xh=WE;_.yh=tH;_.zh=function(a){var b;b=this.b;this.b=a;return b};_.a=null;_.b=null;function KG(){}\nw(642,136,{88:1,96:1,104:1,105:1,110:1},KG);function CT(a){var b,c;b=a.b;c=a.d.length;if(ba.j&&(++a.j,a.p[a.j]=b)}\nfunction KT(a){var b;b=new JQ;b.f=a.f;b.d=a.d;b.q=a.q;b.r=a.r;b.s=a.s;b.n=a.n;b.e=a.e;b.p=a.p.slice();b.j=a.j;b.c=a.c;b.a=a.a;b.b=a.b;b.i=a.i;b.o=a.o;b.k=a.k;return b}function jQ(a){return-99199!=a.f?a.f:0}function LT(a){return 4<=a.o&&2==a.j}function XN(a,b,c){a.q+=b;a.r+=c}function ON(a){var b;b=-99199!=a.f;a.f=-99199;return b}function JQ(){IT();this.p=JO(7)}w(662,1,{114:1},JQ);_.a=3;_.b=null;_.c=0;_.d=0;_.e=null;_.f=-99199;_.i=0;_.j=0;_.k=0;_.n=0;_.o=0;_.q=0;_.r=0;_.s=0;var JT;\nfunction VQ(a,b){var c;c=MT(a);return 0=this.j?this.b=iG(a):this.b=a;c=new FT(XT,this.b);this.d=c.b.a.test(c.a);do if(4a.indexOf(zq)&&((this.e=0=f.length)e=0;else{for(h=0,j=f.length;hn&&(n=0.001);r=g/n;e=f/n;l=JO(4);for(h=0;4>h;++h)d[h]==c||0>=d[h]||(0==l[1]?l[1]=d[h]:0==l[2]?l[2]=d[h]:0==l[3]&&(l[3]=d[h]));o=JO(4);d=JO(4);for(h=1;3>=h;++h)3==h&&0==l[3]||(f=(a.b[l[h]].q-a.b[b].q)*e+(a.b[l[h]].r-a.b[b].r)*r,g=(a.b[l[h]].r-a.b[b].r)*e-(a.b[l[h]].q-a.b[b].q)*r,n=Math.sqrt(f*f+g*g),0.001>n&&(n=0.001),o[h]=g/n,d[h]=f/n);a=xU(o[1],d[1],o[2],d[2]);0b?(j[1]=l[1],j[2]=l[3],j[3]=l[2]):0>a&&0d?(j[1]=l[2],j[2]=l[3],j[3]=l[1]):0>d&&0b&&0>a&&(j[1]=l[3],j[2]=l[2],j[3]=l[1])):0j&&(j=0.001);g/=j;f/=j;l=j+25*Math.cos(1.0471975511965976);n=25*Math.sin(1.0471975511965976);h=LQ(a,b,d);if(3==a.c[h].c||204==a.k.k||1!=a.c[h].c&&(203==a.k.k||204==a.k.k)||a.n)l=j+25,n=0;0n?n=-n:0>c&&0j&&(j=0.001),tQ(a,a.p,a.b[b].q+25*f/j,a.b[b].r+25*g/j),0==yQ(a,a.p,1,a.p)||h==a.b[b].j);++h);break;default:return--a.p,tC(a.k,mg),a.k.cb=9,!1}b=KQ(a,a.v,a.p,1);203==a.k.k&&(b.c=2);204==a.k.k&&(b.c=3);201==a.k.k&&rQ(a,a.q);a.z=\na.b[a.p].q;a.A=a.b[a.p].r;return e}function lQ(a,b){var c,d;if(!b||0==b.c)return m;d=m;d+=fj+(hN(),ba);d+=cj+a+Ha+b.c;for(c=new GD(b);c.bj&&(j=0.001);1>PO((a.b[b].r-a.b[e].r)*(g/j)+(a.b[b].q-a.b[e].q)*(h/j))?(g=a.b[b].q-a.b[e].q,h=a.b[b].r-a.b[e].r,j=Math.sqrt(g*g+h*h),0.001>j&&(j=0.001),b=h/j,g/=j,d[0]=a.b[e].q+j*g-c*b,d[1]=a.b[e].r+c*g+j*b):(g=(a.b[e].q+a.b[f].q)/2,e=(a.b[e].r+a.b[f].r)/2,g=a.b[b].q-g,h=a.b[b].r-e,j=Math.sqrt(g*g+h*h),0.001>j&&(j=0.001),d[0]=a.b[b].q+c*g/j,d[1]=a.b[b].r+c*h/j)}\nfunction cQ(a){var b,c,d,e,f,g,h,j,l,n,o,r,t,z;n=-1;j=6;switch(a.k.k){case 206:j=3;break;case 207:j=4;break;case 208:case 221:case 223:j=5;break;case 210:case 209:j=6;break;case 211:j=7;break;case 212:j=8;break;case 229:j=9}f=6.283185307179586/j;l=TS(312.5/(1-Math.cos(f)));if(0a.b[a.v].j)EU(a,j,f,l);else if(!a.k.Bb&&!a.k.rc)n=a.v,dQ(a,a.v,0),a.v=a.p,EU(a,j,f,l);else{a.k.rc=!1;if(209==a.k.k||221==a.k.k||223==a.k.k){tC(a.k,Ih);a.k.cb=9;return}for(d=1;d<=a.b[a.v].j;++d)if(b=a.c[LQ(a,a.v,a.b[a.v].p[d])].c,\n2o&&(o=0.001);g/=o;e/=o;for(d=1;d<=j;++d)h=sQ(a,null),r=f*d+1.5707963267948966,xQ(h,b[0]+l*(Math.sin(r)*e-Math.cos(r)*g),b[1]+l*(Math.cos(r)*e+Math.sin(r)*g))}else if(0o&&(o=0.001);g/=o;e/=o;h=o/2;r=l*Math.sin(0.5*(3.141592653589793-f));o=1;0<(a.b[d].r-a.b[b].r)*e-(a.b[d].q-a.b[b].q)*g&&(r=-r,o=0);t=a.b[b].q+h*e-r*g;z=a.b[b].r+r*e+h*g;for(d=1;d<=j;++d)h=sQ(a,null),r=f*(d+0.5)+3.141592653589793*o,xQ(h,t+l*(Math.sin(r)*e-Math.cos(r)*g),z+l*(Math.cos(r)*e+Math.sin(r)*g)),1==o?(d==j&&xQ(h,a.b[b].q,a.b[b].r),d==j-1&&xQ(h,a.b[c].q,a.b[c].r)):(d==j-1&&xQ(h,a.b[b].q,a.b[b].r),d==j&&xQ(h,a.b[c].q,a.b[c].r))}else{b=\n0.5;6==j&&(b=0);for(d=1;d<=j;++d)h=sQ(a,null),r=f*(d-b),xQ(h,a.z+l*Math.sin(r),a.A+l*Math.cos(r))}b=j;l=0;for(f=1;f<=b;++f)GQ(a,null),l=a.p-b+f,a.b[l].j=2,a.c[a.q].i=l,a.c[a.q].j=l+1;a.c[a.q].j=a.p-b+1;if(209==a.k.k){if(a.c[a.q-4].c=2,a.c[a.q-2].c=2,a.c[a.q].c=2,0e&&ed;--f)if(0g&&(g=0.001),e/=g,f/=g);l=a.b[a.v].q+d*f;n=a.b[a.v].r+d*e;for(g=1;g<=b;++g)h=sQ(a,null),j=c*g-1.5707963267948966,xQ(h,l+d*(Math.sin(j)*f-Math.cos(j)*e),n+d*(Math.cos(j)*f+Math.sin(j)*e))}function DU(a,b){var c,d;0==b&&(b=a.p);for(c=a.p;c>a.p-b;--c)d=yQ(a,c,1,a.p),0!=d&&XN(a.b[c],6,6)}\nfunction LQ(a,b,c){var d,e,f;for(e=1;e<=a.q;++e)if(d=a.c[e],f=d.i,d=d.j,f==b&&d==c||f==c&&d==b)return e;return 0}function mP(a){var b;for(b=1;b<=a.q;++b)if(1==a.c[b].c&&0=c||0>=d?a.s=!0:(b=TN(a),c=c/2-b.a,b=d/2-b.b,a.k.Ob||AQ(a,c,b),YN(a))}\nfunction ZP(a,b,c){var d,e,f;if(1==c)return a.b[b].n+=1,!0;if(-1==c)return a.b[b].n+=-1,!0;e=a.b[b].n;f=a.b[b].i;d=a.b[b].o;-1==d&&0==c&&(0==a.b[b].n?a.b[b].n=1:1==a.b[b].n?a.b[b].n=-1:-1==a.b[b].n&&(a.b[b].n=0));switch(a.b[b].a){case 1:0==d&&(0==a.b[b].n?a.b[b].n=1:1==a.b[b].n?a.b[b].n=-1:a.b[b].n=0);break;case 2:2d&&(0==a.b[b].n?a.b[b].n=-1:-1==a.b[b].n?a.b[b].n=1:1==a.b[b].n&&(a.b[b].n=0));break;case 4:case 7:3<\nd?tC(a.k,ah):3==d&&0==a.b[b].n?a.b[b].n=1:3==d&&1==a.b[b].n?a.b[b].n=0:3>d&&0==a.b[b].n?a.b[b].n=1:3>d&&1==a.b[b].n?a.b[b].n=-1:3>d&&-1==a.b[b].n&&(a.b[b].n=0);break;case 5:case 8:case 13:2d&&0==a.b[b].n?a.b[b].n=-1:2>d&&-1==a.b[b].n?a.b[b].n=1:2>d&&1==a.b[b].n&&(a.b[b].n=0);break;case 9:case 10:case 11:case 12:0==d&&0==a.b[b].n?a.b[b].n=-1:0==d&&-1==a.b[b].n?a.b[b].n=0:tC(a.k,bh);break;case 32:tC(a.k,\nVk)}if(0e&&eb?e=2:0>a&&0>b?e=3:0>a&&0<=b&&(e=4);0<=c&&0<=d?f=1:0<=c&&0>d?f=2:0>c&&0>d?f=3:0>c&&0<=d&&(f=4);if(ef)return-1;switch(e){case 1:case 4:return ac?1:-1}return 0}function XQ(a){FU(a);YN(a);YQ(a)}\nfunction TN(a){var b,c,d,e,f,g;b=new ST;f=9999;d=-9999;g=9999;e=-9999;for(c=1;c<=a.p;++c)a.b[c].qd&&(d=a.b[c].q),a.b[c].re&&(e=a.b[c].r);b.a=f+(d-f)/2;b.b=g+(e-g)/2;b.c=d-f;b.d=e-g;25>b.c&&(b.c=25);25>b.d&&(b.d=25);return b}function CU(a,b,c){var d,e;e=0;for(d=1;d<=a.p;++d)d>=b&&d<=c||0!=yQ(a,d,b,c)&&++e;return e}function KQ(a,b,c,d){var e;e=GQ(a,null);HQ(a.b[b],c);HQ(a.b[c],b);e.i=b;e.j=c;NQ(e,a.b);e.c=d;return e}\nfunction sQ(a,b){++a.p;b?a.b[a.p]=KT(b):a.b[a.p]=new JQ;return a.b[a.p]}function OO(a,b,c,d,e,f){var g;g=a.b[b].q-c/2;f||(g-=d-c);a=a.b[b].r-~~(e/2);return new GU(g-1-2,a-2,d+1+4,e+4)}function GQ(a,b){var c;++a.q;c=new QT;b&&RT(c,b);return a.c[a.q]=c}\nfunction gQ(a,b,c){var d,e,f,g,h,c=iQ(a,b,c,!1);e=-1.7976931348623157E308;d=1.7976931348623157E308;for(b=1;b<=a.p;++b)a.b[b].r>e&&(e=a.b[b].r),a.b[b].qa.b[b].n?f=4-a.b[b].n:0>a.b[b].n&&-4=g&&(h=g)),\ng=fQ(h,2)+fQ(f,3)+la,f=RQ(a,b),g+=fQ(f,3),c+=g+ja+(hN(),ba);for(b=1;b<=a.q;++b)d=a.c[b],g=e=d.c,1==a.c[b].c?g=1:2==a.c[b].c&&(g=2),f=fQ(d.i,3)+fQ(d.j,3),h=0,1==e&&1==d.f?h=1:1==e&&2==d.f&&(h=6),1==e&&3==d.f&&(h=1,f=fQ(d.j,3)+fQ(d.i,3)),1==e&&4==d.f&&(h=6,f=fQ(d.j,3)+fQ(d.i,3)),c+=f+fQ(g,3)+fQ(h,3)+ka+(hN(),ba);for(b=1;b<=a.p;++b)0!=a.b[b].n&&(c+=Yi+fQ(b,4)+fQ(a.b[b].n,4)+(hN(),ba)),0!=a.b[b].d&&(c+=bj+fQ(b,4)+fQ(a.b[b].d,4)+(hN(),ba));return c+=Zi+(hN(),ba)}\nfunction yN(a,b){var c,d,e,f,g,h,j;g=j=0;for(h=1;h<=a.q;++h)e=a.c[h],c=e.i,d=e.j,c!=b&&d!=b?(++j,f=a.c[j],RT(f,e),f.i=c,c>b&&--f.i,f.j=d,d>b&&--f.j):g+=e.c;a.q=j;for(h=b;hb&&--c,a.b[h].p[++d]=c);a.b[h].j=d}}\nfunction AN(a,b){var c,d,e,f;c=a.c[b].i;d=a.c[b].j;for(e=b;ea.b[b].a&&0==a.b[d].d){if(0!=(-99199!=a.b[d].f?a.b[d].f:0))continue a;b=LQ(a,d,b);if(1==a.c[b].c&&(0==a.c[b].f||!a.k.tc))yN(a,d),c=!0}return c}function HU(a,b){var c,d,e,f,g;g=y(A,u,-1,[0,0]);for(e=1,f=0;e<=a.b[b].j;++e)c=a.b[b].p[e],d=LQ(a,b,c),2!=a.c[d].c&&(g[f++]=c);return g}\nfunction FU(a){var b,c,d;for(d=1;d<=a.p;++d)a.b[d].j=0;for(d=1;d<=a.q;++d)b=a.c[d].i,c=a.c[d].j,HQ(a.b[b],c),HQ(a.b[c],b)}\nfunction UQ(a,b,c){var d,e,f,g,h,j,l,n,o;a.d=JO(a.q+1);o=[];for(j=1;j<=a.p;++j){o[j]=!1;b[j]=!1;a:{d=void 0;for(d=1;d<=a.b[j].j;++d)if(c[LQ(a,j,a.b[j].p[d])]){d=!0;break a}d=!1}if(d&&!(3d&&(d=c);return d}\nfunction NO(a,b){var c;c=(hN(),oN)[a.b[b].a];32==a.b[b].a&&(c=a.b[b].e);return c}function MQ(a,b){a.b[b].j+=-1}function TO(a,b,c){var d,e,f,g,h;h=1;a.a=JO(a.p+1);for(e=a.a[b]=1;e<=a.b[b].j;++e)d=a.b[b].p[e],d!=c&&(a.a[d]=++h);for(g=!1;;){for(d=1;d<=a.p;++d){g=!1;if(0~~(c/2)+24?3:2}function HN(a,b){var c,d,e,f,g,h,j;c=TN(a);d=c.a;e=c.b;g=Math.sin(3.141592653589793*b/180);c=Math.cos(3.141592653589793*b/180);for(f=1;f<=a.p;++f)h=a.b[f].q*c+a.b[f].r*g,j=-a.b[f].q*g+a.b[f].r*c,xQ(a.b[f],h,j);c=TN(a);AQ(a,d-c.a,e-c.b)}\nfunction PQ(a){var b,c,d,e,f;e=f=0;for(d=1;d<=a.q;++d)b=a.b[a.c[d].i].q-a.b[a.c[d].j].q,c=a.b[a.c[d].i].r-a.b[a.c[d].j].r,f+=Math.sqrt(b*b+c*c);0=g;++g)if(J(f,(hN(),oN)[g])){f=g;break b}f=32}aQ(a,b,f);32==a.b[b].a&&(a.b[b].e=d);c+=\nfa;d=0;0=e&&(d=e-48));32==a.b[b].a&&(a.b[b].i=d)}}}function LP(a,b,c){var d,e;a.i=1;c&&(a.i=-1);b=new KM(b);try{for(;b.j=DM(b,b.a),b.jc||6a.b[c].j&&2>a.b[d].j)e.f=0,tC(a.k,Jk);else switch(e.f){case 0:a.b[d].j<=a.b[c].j?e.f=1:e.f=3;break;case 1:e.f=2;break;case 2:2h||3c[b]&&(j=f,f=b,b=j);j=HU(a,f);h=j[0];l=j[1];e=0;n=!1;0c[l]&&(j=h,h=l,l=j);j=LQ(a,f,h);0!=d[j]?e=h:1==a.c[j].c&&5!=a.d[j]&&(e=h);0==e&&0c[f]&&(n=!0);j=HU(a,b);l=j[0];g=j[1];h=0;0g&&(g=0.001),j/=g,g=l/g,l=(a.b[e].r-a.b[f].r)*g-(a.b[e].q-a.b[f].q)*j,t=(a.b[h].r-a.b[f].r)*g-(a.b[h].q-a.b[f].q)*j,2>(0>=l?0-l:l)||2>(0>=t?0-t:t))tC(a.k,Zj);else{g=LQ(a,e,f);h=LQ(a,h,b);\nr=1;if(0==d[g]){for(o=1;o<=a.b[e].j;++o)if(b=a.b[e].p[o],b!=f&&(j=LQ(a,e,b),0!=d[j])){c[b]>c[e]?r=-d[j]:r=d[j];break}d[g]=r}0==d[h]&&(0l&&0>t?d[h]=-d[g]:d[h]=d[g],n&&(d[h]=-d[h]))}}}function $Q(a,b,c){var d;d=a.c[b].f;return 1>d||4g?e.i=3-g-c.b[d].n:4==g?(c.b[d].n=-1,e.i=0):5g?0c.b[d].n?e.i=2-g-c.b[d].n:e.i=4-g:(c.b[d].n=g-4,e.i=4-g+c.b[d].n);break;case 4:case 7:3>g?e.i=3-g+c.b[d].n:3==g?0>c.b[d].n?(c.b[d].n=0,e.i=0):0c.b[d].n?(c.b[d].n=0,e.i=0):0g?e.i=2-g+c.b[d].n:2==g?0>c.b[d].n?(c.b[d].n=0,e.i=0):0f;)if(0e.i&&(e.i=0)}}}function $N(a){uU(this);this.b[0]=new JQ;this.t=this.q=this.p=0;this.k=a}\nfunction KP(a,b){var c,d,e,f,g,h,j,l,n;$N.call(this,a);if(null!=b&&(f=m,l=IP(b),null!=l)){n=new JM(b,l,!0);for(g=1;4>=g;++g)f=JP(n,l);e=oP(pM(iG(f.substr(0,3)),10)).a;j=oP(pM(iG(f.substr(3,3)),10)).a;g=0;try{g=oP(pM(iG(f.substr(14,1)),10)).a}catch(o){if(o=Az(o),!H(o,96))throw o;}IN(this,(JN(),1==g?KN:LN));for(g=1;g<=e;++g){d=sQ(this,null);f=JP(n,l);d.q=(new KS(HS(iG(f.substr(0,10))))).a;d.r=-(new KS(HS(iG(f.substr(10,10))))).a;d=34;34>f.length&&(d=f.length);d=iG(f.substr(31,d-31));bQ(this,g,d);62<=\nf.length&&(h=iG(f.substr(60,3)),0=h))){var r=void 0,r=MT(d);d=0d&&(d=0);this.b[g].d=d}if(39<=f.length&&(h=iG(f.substr(37,2)),0=h))){f=0;switch(h){case 1:f=3;break;case 2:f=2;break;case 3:f=1;break;case 4:f=0;break;case 5:f=-1;break;case 6:f=-2;break;case 7:f=-3}this.b[g].n=f}}for(g=1;g<=j;++g)e=GQ(this,null),f=\nJP(n,l),e.i=oP(pM(iG(f.substr(0,3)),10)).a,e.j=oP(pM(iG(f.substr(3,3)),10)).a,d=oP(pM(iG(f.substr(6,3)),10)).a,1==d?c=1:2==d?c=2:3==d?c=3:c=9,h=0,11b.length)this.p=0;else{try{j=new IM(b);g=oP(pM(GM(j),10)).a;h=oP(pM(GM(j),10)).a;for(f=1;f<=g;++f)n=GM(j),c=(o=sQ(this,null),bQ(this,this.p,n),o),c.q=(new KS(HS(GM(j)))).a,c.r=-(new KS(HS(GM(j)))).a;for(f=1;f<=h;++f){d=GQ(this,null);d.i=oP(pM(GM(j),10)).a;d.j=oP(pM(GM(j),10)).a;e=oP(pM(GM(j),10)).a;l=0;if(-1==e)l=e=1;else if(-2==e)e=1,l=2;else if(-5==e)e=2,l=10;else if(11==\ne||12==e||13==e||14==e)l=e,e=9;d.c=e;d.f=l}FU(this);PQ(this);WN(this)}catch(r){r=Az(r);if(H(r,96)){r.yd();this.p=0;return}throw r;}a&&!a.bb&&PN(this);XQ(this)}}function NP(a,b,c){var d,e,f,g;$N.call(this,a);g=JO(b.p+1);for(e=1;e<=b.p;++e)b.a[e]==c&&(sQ(this,b.b[e]),g[e]=this.p);for(e=1;e<=b.q;++e)if(a=b.c[e].i,d=b.c[e].j,!(b.a[a]!=c&&b.a[d]!=c)&&!(b.a[a]!=c||b.a[d]!=c))f=GQ(this,b.c[e]),f.i=g[a],f.j=g[d];this.i=b.i;FU(this)}\nfunction IU(a,b,c){var d,e,f;$N.call(this,a);f=JO(b.p+1);for(d=1;d<=b.p;++d)b.b[d].k==c&&(sQ(this,b.b[d]),f[d]=this.p);for(d=1;d<=b.q;++d)a=b.c[d],a.e==c&&(e=GQ(this,a),e.i=f[a.i],e.j=f[a.j]);IN(this,b.f);this.i=b.i;FU(this)}\nfunction hQ(a,b,c){var d,e,f,g;$N.call(this,a);for(a=1;a<=c;++a)this.p+=b[a].p,this.q+=b[a].q,this.t+=b[a].t,b[a].f.a&&IN(this,(JN(),JN(),KN));this.b=C(vU,q,114,this.p+1,0);this.c=C(wU,q,115,this.q+1,0);f=g=e=0;for(a=1;a<=c;++a){for(d=1;d<=b[a].p;++d)++e,this.b[e]=KT(b[a].b[d]);for(d=1;d<=b[a].q;++d)++g,this.c[g]=PT(b[a].c[d]),this.c[g].i+=f,this.c[g].j+=f;f=e}FU(this)}\nfunction wN(a){var b;uU(this);this.k=a.k;this.p=a.p;this.q=a.q;this.t=a.t;this.b=C(vU,q,114,this.p+1,0);for(b=0;b(0>=a?0-a:a)&&(a=0);a=Q(L(R(a*Math.pow(10,c))))/Math.pow(10,c);e=m+(new KS(a)).a;d=gG(e,hG(46));0>d&&(e+=Ie,d=gG(e,hG(46)));f=e.length;for(a=1;a<=c-f+d+1;++a)e+=Xe;if(0==b)return e;e.length>b&&(e=Xf);c=m;for(a=1;a<=b-e.length;++a)c+=fa;return c+e}function IP(a){var b;b=new JM(a,ba,!0);if(4b&&(d=Xf);e=m;for(c=1;c<=b-d.length;++c)e+=fa;return e+d}function JP(a,b){for(var c,d;a.j=DM(a,a.a),a.j>16&255)),fA(0.7*(g.d>>8&255)),fA(0.7*(g.d&255))),HO(a.a,g)):(h=new wv(fA(0.7*(g.d>>16&255)),fA(0.7*(g.d>>8&255)),fA(0.7*(g.d&255))),f=OK(g),HO(a.a,h));g=Q(L(R(S)));d=Q(L(R(d*S)));e=Q(L(R(e*S)));b=Q(L(R(b*S)));c=Q(L(R(c*S)));d-=g;e-=g;pO(a.a,b+g,c+g,d-g,e-g);HO(a.a,h);pO(a.a,b,c,d,g);pO(a.a,b,c+g,g,e);HO(a.a,f);pO(a.a,b+d,c,g,e+g);pO(a.a,b+1,c+e,d,g)}\nfunction kO(a,b,c,d,e){a=a.a;b=Q(L(R(b*S)));c=Q(L(R(c*S)));d=Q(L(R(d*S)));e=Q(L(R(e*S)));lO(a,!0);mO(a,nO(a,b,c,d,e))}function vO(a,b,c,d){var e,f,g;f=C(A,u,-1,d,1);g=C(A,u,-1,d,1);for(e=0;e=b||b>=iK(this.a)-1||0>=c||c>=jK(this.a)-1)&&(this.a.j=!1);this.a.j?vQ(this.a.c,a,b,c):pP(this.a.c,a,b,c);iI(this.a.pb)};_.a=null;function eV(a){this.a=a}w(713,1,{},eV);_.od=function(a){this.a.j=!1;RB(a);SB(a);DQ(this.a.c)};_.a=null;\nfunction fV(a){this.a=a}w(714,1,{},fV);_.nd=function(){this.a.j&&(this.a.j=!1)};_.a=null;function gV(a){this.a=a}w(715,1,{},gV);_.a=null;function hV(a){this.a=a}w(716,1,{},hV);_.a=null;function UU(){SU.call(this);this.pb.style[du]=af;this.pb.style[bq]=af}w(717,708,Pu,UU);function iV(a){this.a=a}w(718,1,{},iV);_.Qd=function(){Jz((Gz(),Hz),new kV(this))};_.a=null;function kV(a){this.a=a}w(719,1,{},kV);_.pd=function(){this.a.a.c&&(gK(this.a.a.c),sR(this.a.a))};_.a=null;\nfunction lV(a,b){var c;c=b.a;c.e=4;return mQ(a.a.c,c,b.d,b.e)}function WU(a){this.a=a}w(720,1,{},WU);_.Lh=function(a){return lV(this,a)};_.a=null;function mD(a,b){pP(a.a.c,b.a,b.d,b.e);return mQ(a.a.c,b.a,b.d,b.e)}function XU(a){this.a=a}w(721,1,{},XU);_.Lh=function(a){return mD(this,a)};_.a=null;function YU(a){this.a=a}w(722,1,{},YU);_.Lh=function(a){return vQ(this.a.c,a.a,a.d,a.e)};_.a=null;function ZU(a){this.a=a}w(723,1,{},ZU);_.Lh=function(){return DQ(this.a.c)};_.a=null;\nfunction eC(a,b){var c;c=L(R(b.b));c=new YL(b,0,$s,c);DN(a.a.c,c);return!0}function $U(a){this.a=a}w(724,1,{},$U);_.Lh=function(a){return eC(this,a)};_.a=null;function mV(){mV=x;nV()}function nV(){nV=x;oV=$moduleBase+lf}var pV=null,oV;function qV(){qV=x;nV();pV=new PE((gF(),new fF(oV)),4,4)}function rV(){rV=x;sV={}}function tV(a,b,c){var d;c&&(b.style[yp]=c.b+Gs,d=c.a,d!=Fh&&(b.style[xp]=d),0!=(c.c&1)&&(b.style[Ap]=Vn),0!=(c.c&2)&&(b.style[zp]=xq));a.e.style[cu]=Qr}\nfunction iL(a,b){var c,d,e,f,g,h,j,l,n,o,r,t,z;d=Xy(b);d in sV?c=sV[d]:(c=$doc.getElementsByTagName(Sn)[0],e=aA(st),f=aA(sq),f.style[Zo]=(xA(),vq),f.style[Zt]=(kB(),Ln),f.style[fr]=Ye,f.style[gr]=Ye,f.width=1,f.height=1,g=(mV(),qV(),nV(),pV),g=g.d.a,jA()?vA(f,g):f.src=g,c=(h=$doc.createTextNode(ik),tV(a,e,b),e.appendChild(h),e.appendChild(f),c.appendChild(e),j=iA(e),l=iA(e)+(e.offsetHeight||0),n=l-j,o=iA(f)+(f.offsetHeight||0)+1,r=l-o,t=o-j,c.removeChild(e),z=new uV,z.a=t,z.b=r,z.c=n,z),sV[d]=c);\nreturn c}function vV(){rV();var a,b,c,d,e;RA();this.a=y(iE,q,1,[wr,Iaa,mt]);this.c={};this.b={};this.d=$doc.getElementsByTagName(Sn)[0];this.e=aA(st);this.e.innerHTML=this.f||m;this.e.style[yp]=tf;for(b=this.a,c=0,d=b.length;c=g?h=nO(a,b,c,d,e):h=(j=f+g,l=90-f,n=90-j,a.b+vn+l+Fb+n+Kb+c*a.a+maa+b*a.a+Os+d*a.a+Ms+e*a.a+gaa+a.n+Ve),mO(a,h))}function sO(a,b,c,d,e){a.o&&mO(a,a.b+Uq+b*a.a+Jd+c*a.a+Lb+d*a.a+Jd+e*a.a+Ib+a.i+Db+a.c+We)}function tO(a,b,c,d,e){a.o&&(lO(a,!1),mO(a,a.b+Ss+b*a.a+Ns+c*a.a+Os+d*a.a+Ms+e*a.a+Is+a.n+Ve))}\nfunction MO(a,b,c,d){var e,b=b.replace(/&/g,Lc).replace(/<\/g,Nc).replace(/>/g,Mc),f=(xV(),yV),b=(e=iL(f,a.f).a,Tf+c*a.a+Ns+(d-e)*a.a+Ls+a.j+yo+a.i+Ef+b+Nf);mO(a,b)}function pO(a,b,c,d,e){lO(a,!0);mO(a,a.b+Ss+b*a.a+Ns+c*a.a+Os+d*a.a+Ms+e*a.a+Is+a.n+Ve)}function QU(a){var b;if(a.q){for(;null!=(b=a.v.pop());){var c=a.d;c[c.length]=b}b=a.d.join(ba);b=m+b+m;b!==a.r&&(a.u.pb.innerHTML=b||m,a.r=b);a.p=!0;a.q=!1}}function HO(a,b){(a.e=b)&&(a.i=AV(b))}\nfunction kR(a,b){var c,d,e,f;a.f=b;a.j=(c=(fL(),gL),d=b.b,e=b.a,f=m,d!=c.b&&(f=up+d*a.a+Ls),e!=c.a&&(f+=tp+e+Cf),0!=(b.c&1)&&(f+=wp),0!=(b.c&2)&&(f+=vp),f+=nba,f)}function GO(a,b){(a.o=b)&&b&&(a.c=vb+b.e*a.a+faa)}w(734,485,{});_.d=null;_.e=null;_.f=null;_.i=On;_.j=null;_.k=!0;_.n=null;_.p=!1;_.q=!1;_.r=m;_.s=0;_.t=0;_.u=null;_.v=null;var zV,yV;\nfunction iD(a,b){var c;c=b.a.targetTouches;return 1==c.length?(c=c[0],a.b.d=c.clientX-eA(a.o.pb)+hA(a.o.pb)+rA(a.o.pb.ownerDocument),a.b.e=c.clientY-iA(a.o.pb)+(a.o.pb.scrollTop||0)+sA(a.o.pb.ownerDocument),a.b.a=new jV(b),bA(b.a),!0):!1}\nfunction VU(a){this.o=a;this.b=new BV;this.c=new CV(this);oG(this.o,new DV(this),(jD(),jD(),kD));oG(this.o,new EV(this),(bD(),bD(),cD));oG(this.o,new FV(this),(fD(),fD(),gD));oG(this.o,new GV(this),(YC(),YC(),ZC));oG(this.o,new HV,(kC(),kC(),lC));oG(this.o,new IV(this),(gC(),gC(),hC));oG(this.o,new JV(this),(bC(),bC(),cC))}w(735,1,{},VU);_.a=null;_.b=null;_.c=null;_.d=!1;_.e=null;_.f=null;_.i=null;_.j=null;_.k=null;_.n=null;_.o=null;function CV(a){aw();this.a=a}w(736,65,{},CV);\n_.vd=function(){!this.a.d&&this.a.i&&lV(this.a.i,this.a.b)};_.a=null;function DV(a){this.a=a}w(737,1,{},DV);_.a=null;function EV(a){this.a=a}w(738,1,{},EV);_.a=null;function FV(a){this.a=a}w(739,1,{},FV);_.a=null;function GV(a){this.a=a}w(740,1,{},GV);_.a=null;function HV(){}w(741,1,{},HV);function IV(a){this.a=a}w(742,1,{},IV);_.a=null;function JV(a){this.a=a}w(743,1,{},JV);_.a=null;function BV(){}w(744,1,{},BV);_.a=null;_.b=0;_.c=0;_.d=0;_.e=0;\nfunction AV(a){var b,c;c=a.d>>16&255;b=a.d>>8&255;a=a.d&255;if(0==c*b*a){if(0==c&&0==b&&0==a)return On;if(255==c&&0==b&&0==a)return xaa;if(0==c&&255==b&&0==a)return Mp;if(0==c&&0==b&&255==a)return Qn}return 255==c&&255==b&&255==a?mba:Xs+c+Jd+b+Jd+a+kd}function CR(){var a=$wnd.navigator.userAgent.match(/MSIE\\s+(\\d+\\.\\d+)/);return a?parseFloat(a[1]):-1}\nfunction KV(a){var b,c,d,e,f;uG(a);d=(vG(),II(null));e=new wV;MH(e,a);EG(d,e,d.pb);f=a.he();b=a.ge();c=CR();9<=c?(++f,++b):7==c&&H(a,38)&&(c=a.pb.innerText,2>=c.length&&(f+=8));OH(e,a);OG(d,e);return new EJ(f,b)}function RM(a){try{$wnd.console.log(a)}catch(b){}}function LV(){this.pb=aA($o);this.pb[no]=Lq;this.pb.style[xs]=dq;this.pb.style[Ds]=bn;this.pb.style[du]=af;this.pb.style[bq]=af;this.pb.setAttribute(Go,pp)}w(746,365,Hu,LV);function MV(){MV=x;xV();NV=y(iE,q,1,[sa,Tq,daa,un,vs,uaa,Faa])}\nfunction nO(a,b,c,d,e){return a.b+ws+b*a.a+Ns+c*a.a+Os+d*a.a+Ms+e*a.a+Is+a.n+Ve}function KU(a,b,c,d,e){var f,g,h,j,l;if(1>d)return m;h=a.b+eaa;g=m;for(f=0;f=f.k||(701==f.k?null.fi():401==f.k||402==f.k?(null.fi(),null.fi(),null.fi(),null.fi(),null.fi()):500<=f.k&&507>=f.k&&(g=null.gi,500!=g&&(g=new sC(null.gi,g,null),g.i=f.f,g.j=f.i,f=f.j&63,g.e=f&12)))}function TV(a){this.a=a}w(756,1,Cu,TV);_.pd=function(){pI(this)};_.a=null;function GL(){QV();SV.call(this);this.a=new VI}w(757,749,{},GL);_.If=WE;_.a=null;function JL(){new DD;var a;a:{switch(fE){case 1:case 3:case 5:case 7:a=new UV;break a}a=new VV}this.a=a}w(772,509,{},JL);_.a=null;\nfunction VV(){}w(774,1,{},VV);_.bi=function(a){a&&a&&vz(8,new WV(a));return null};_.ci=function(a){vz(8,new XV(a))};function UV(){}w(773,774,{},UV);_.bi=function(){return $wnd.clipboardData.getData(Ok)};_.ci=function(a){$wnd.clipboardData.setData(Ok,a)};function WV(a){this.a=a}w(777,1,bv,WV);_.zd=$F;_.a=null;function XV(a){this.a=a}w(779,1,bv,XV);_.zd=$F;_.a=null;function HL(){this.b=new KL;this.d=new qK}w(790,507,{},HL);function nP(a,b,c,d){b=yJ(b);c+=b.a;d+=b.b;aH(a.a,c,d);bH(a.a)}\nfunction tL(){QV();SV.call(this);var a=this.a=new YV;a.ab=!0;a.a.f=!0;this.a.db=!0}w(792,749,{},tL);_.If=WE;_.a=null;function mM(){}w(800,536,{},mM);function jM(){jM=x;var a;a=(bM(),cM[rs]);if(null!=a)try{if(J(Tk,a))WS(m);else if(J(qi,a)||J(ri,a))C(XS,cv,-1,0,1);else throw new tS(a+ab);}catch(b){if(b=Az(b),!H(b,105))throw b;}}function oL(a,b){a.a=31*a.a+fA((new KS(b)).a)}function wK(){}w(805,1,{},wK);_.hC=WE;_.a=1;\nfunction YV(){var a=(iH(),lH);cH.call(this,!0,mr);this.U=a.a;this.a=new ZV(this);this.a.d=!0;TG(this,this.a);this.ab=!0;this.a.f=!0;if(-1==this.lb){var a=this.pb,b=1|(this.pb.__eventBits||0);rF();ZF(a,b)}else this.lb|=1;$z(Zz(this.pb))[no]=Up;this.pb.style[fu]=gf}w(837,367,Pu,YV);_.Yd=function(a){sG(this,a);1==QF(a.type)&&YG(this,!1)};_.a=null;\nfunction ZV(a){this.b=a;rI();this.c=new Zv;this.i=new Zv;a=(uI(),rI(),tI);new pJ(a.d,a.b,a.c,a.e,a.a);var b;b=aA(yt);this.e=aA(Bt);lF(b,this.e);this.o=!0;a=zH();b=(mF(),nF(b));a.appendChild(b);this.pb=a;ex();this.pb.setAttribute(Zs,Ix.a);-1==this.lb?(a=this.pb,b=2225|(this.pb.__eventBits||0),rF(),ZF(a,b)):this.lb|=2225;this.pb[no]=Tp;a=fG(this.pb)+He;bG(this.ie(),a,!0);this.pb.style[us]=Ze;this.pb.setAttribute(eq,Tt);oG(this,new qI(this),(LB(),LB(),MB))}w(838,407,Hu,ZV);\n_.Yd=function(a){switch(QF(a.type)){case 16:this.a=!1;break;case 32:this.a=!0}jI(this,a)};_.Ke=function(a,b){nI(this,a,b);b||this.a&&YG(this.b,!1)};_.a=!0;_.b=null;w(886,1,{});\nfunction $V(a,b,c,d){var e,f,g,h,j,l;h=(!c?b.b:wM(b,c,~~Xy(c)))[0][d.length];b=j=e=null;for(c=0,f=!h?0:h.length;c\',Ba=\'">\',Ca="#",Da="$",Ea="$$$$",Ha="$MOL\\n",Ja="$RXN",Ka="$RXN\\n\\n\\nJME Molecular Editor\\n",Ma="%",Na="&",Qa="&",Sa=">",Ya="<",cb="\'",db="(",eb=")",gb="*",kb="+",lb=",",mb=", ",qb=",modifiers=",vb="-",wb="-C#C-Me",xb="-C#CH",yb="-C#N",zb="-C(=O)N",Bb="-C(=O)OH",Cb="-C(=O)OMe",\nHb="-CCl3",Ib="-CF3",Jb="-CMe3",Qb="-NC=O",Rb="-NH-SO2-Me",Sb="-NMe2",Xb="-NO2",Yb="-OC(=O)Me",ac="-SO2-NH2",dc="-SO3H",ec="-disabled",fc="-selected",gc=".",hc="...",ic="/",sc="//",tc="/>",wc="0",Bc="0.0px",Cc="0px",Fc="1",Gc="100%",Hc="2",Ic="3",Kc="4",Lc="5",Mc="6",Vc="7",Wc="8",Xc="9",dd=":",ed=": ",hd=";",id="<",od="<\/g>",pd="<\/svg>",qd="<\/text>",rd=\'b?{}:new fl[b],_.cM=c);for(var e=3;e=a.t+a.n;if(a.p&&!d)return d=(b-a.t)/a.n,a.td((1+Math.cos(3.141592653589793+3.141592653589793*d))/2),a.o&&a.r==c;if(!a.p&&b>=a.t&&(a.p=!0,a.sd(),!(a.o&&a.r==c)))return!1;return d?(a.o=!1,a.p=!1,a.rd(),!1):!0}w(58,1,{});_.qd=function(){this.u&&this.rd()};\n_.rd=function(){this.td((1+Math.cos(6.283185307179586))/2)};_.sd=function(){this.td((1+Math.cos(3.141592653589793))/2)};_.n=-1;_.o=!1;_.p=!1;_.q=null;_.r=-1;_.s=null;_.t=-1;_.u=!1;function xm(a,b){if(ym(a.a,b)){var c=a.a,d=a.a.s,e;e=new zm(d,a.a.k);Am(d.a,e);1==d.a.c&&Bm(d.b,16);c.q=e}else a.a.q=null}function Cm(a){this.a=a}w(59,1,{},Cm);_.a=null;w(60,1,{});w(61,1,{13:1});function Dm(){Dm=x;Em=new Fm}w(62,60,{});var Em=null;function Fm(){this.a=new Gm;this.b=new Hm(this)}w(63,62,{},Fm);\nfunction Im(){Im=x;Jm=new Gm;var a=new Km;Lm();Mm(Nm?Nm:Nm=new Om,a)}function um(a){a.b?$wnd.clearInterval(a.c):$wnd.clearTimeout(a.c);tm(Jm,a)}function Bm(a,b){if(0>b)throw new Pm("must be non-negative");a.b?$wnd.clearInterval(a.c):$wnd.clearTimeout(a.c);tm(Jm,a);a.b=!1;a.c=Qm(a,b);Am(Jm,a)}function Qm(a,b){return $wnd.setTimeout(B(function(){a.ud()}),b)}w(65,1,{});_.ud=function(){this.b||tm(Jm,this);this.vd()};_.b=!1;_.c=0;var Jm;function Hm(a){Im();this.a=a}w(64,65,{},Hm);\n_.vd=function(){var a=this.a,b,c,d,e,f;b=C(Rm,q,14,a.a.c,0);b=Sm(a.a,b);c=new Tm;for(e=0,f=b.length;ewm()-d.a;){e=!1;for(f=0;f=d&&0=b&&(c=1301+d));pt(a,c)}a=!0}a&&this.a.preventDefault()};_.Gd=function(){return ct};var ct;function qt(){qt=x;rt=new Bs(Ai,new st)}function st(){}w(267,248,gl,st);_.Dd=function(a){a.ld(this)};_.Gd=function(){return rt};var rt;\nfunction tt(){tt=x;ut=new Bs(Bi,new vt)}function vt(){}w(268,248,gl,vt);_.Dd=function(a){a.md(this)};_.Gd=function(){return ut};var ut;function wt(){wt=x;xt=new Bs(Ci,new yt)}function yt(){}w(269,248,gl,yt);_.Dd=function(a){a.nd(this)};_.Gd=function(){return xt};var xt;function zt(){zt=x;At=new Bs(Di,new Bt)}function Bt(){}w(270,248,gl,Bt);_.Dd=function(a){var b;b=this.a;Gq((Dq(),Eq),new Ct(a,a.b,b))};_.Gd=function(){return At};var At;function Dt(){Dt=x;Et=new Bs(Ei,new Ft)}function Ft(){}\nw(271,248,gl,Ft);_.Dd=function(a){a.od(this)};_.Gd=function(){return Et};var Et;function Gt(){Gt=x;Ht=new Bs(Fi,new It);new Bs(Be,new It)}function It(){}w(272,248,gl,It);_.Dd=function(a){var b,c,d,e,f;b=Math.round(-this.a.wheelDelta/40)||0;b=new Jt(a.a.i,Fs(this),Gs(this),b);f=0;for(c=Kt(a.a.i.Pc,C(Lt,q,75,0,0)),d=0,e=c.length;da.qI&&(c.tM==x||c.cM&&c.cM[1])&&(!c.cM||!c.cM[-a.qI]))throw new Tu;}return a[b]=c}w(302,1,{},Mu);_.qI=0;function Qu(){Qu=x;Ru=[];Su=[];var a=new Mu,b=Ru,c=Su,d=0,e,f;for(f in a)if(e=a[f])b[d]=f,c[d]=e,++d}var Ru,Su;function H(a,b){return null!=a&&a.cM&&!!a.cM[b]}function Fp(a){return null!=a&&a.tM!=x&&!(a.cM&&a.cM[1])}function Ip(a){return a.tM==x||a.cM&&!!a.cM[1]}\nfunction Uu(a){return null==a?null:a}function Vu(a){return~~Math.max(Math.min(a,2147483647),-2147483648)}var Wu=-1;\nfunction Xu(){var a;$stats&&Yu("com.google.gwt.useragent.client.UserAgentAsserter");a=navigator.userAgent.toLowerCase();if(-1!=a.indexOf(Vi))a=Vi;else if(-1!=a.indexOf("webkit"))a="safari";else if(-1!=a.indexOf(Gi)&&9<=$doc.documentMode)a=Uh;else if(-1!=a.indexOf(Gi)&&8<=$doc.documentMode)a="ie8";else{var b;var c=/msie ([0-9]+)\\.([0-9]+)/.exec(a);c&&3==c.length&&(b=6E3<=1E3*parseInt(c[1])+parseInt(c[2]));a=b?"ie6":-1!=a.indexOf("gecko")?"gecko1_8":"unknown"}I(Uh,a)||$wnd.alert("ERROR: Possible problem with your *.gwt.xml module file.\\nThe compile time user.agent value (ie9) does not match the runtime user.agent value ("+\na+"). Expect more errors.\\n");$stats&&Yu("com.google.gwt.user.client.DocumentModeAsserter");b=$doc.compatMode;a=z(Zu,q,1,[qe]);for(c=0;cd)$doc.createStyleSheet().cssText=a;else{f=2147483647;e=-1;for(b=0;b>22&4194303,0>a?1048575:0)}function gv(a){return fv(a.l,a.m,a.h)}function fv(a,b,c){return _=new hv,_.l=a,_.m=b,_.h=c,_}\nfunction iv(a,b){var c,d,e,f,g;if(0==b.l&&0==b.m&&0==b.h)throw new jv;if(0==a.l&&0==a.m&&0==a.h)return kv=fv(0,0,0),fv(0,0,0);if(524288==b.h&&0==b.m&&0==b.l)return c=a,524288==c.h&&0==c.m&&0==c.l?(kv=fv(0,0,0),c=gv((lv(),mv))):(kv=fv(c.l,c.m,c.h),c=fv(0,0,0)),c;g=!1;0!=b.h>>19&&(b=nv(b),g=!0);e=b.l;0!=(e&e-1)?f=-1:(d=b.m,0!=(d&d-1)?f=-1:(c=b.h,f=0!=(c&c-1)||0==c&&0==d&&0==e?-1:0==c&&0==d&&0!=e?ov(e):0==c&&0!=d&&0==e?ov(d)+22:0!=c&&0==d&&0==e?ov(c)+44:-1));c=d=e=!1;if(524288==a.h&&0==a.m&&0==a.l)if(e=\nd=!0,-1==f)a=gv((lv(),pv)),c=!0,g=!g;else return c=qv(a,f),g&&rv(c),kv=fv(0,0,0),c;else 0!=a.h>>19&&(e=!0,a=nv(a),c=!0,g=!g);if(-1!=f){c=a;d=f;f=g;g=e;e=qv(c,d);f&&rv(e);var h;22>=d?(f=c.l&(1<=d?(f=c.l,h=c.m&(1<r?j=\n!1:(o=j.l-f.l,m=j.m-f.m+(o>>22),r+=m>>22,0>r?j=!1:(j.l=o&4194303,j.m=m&4194303,j.h=r&1048575,j=!0));if(j&&(22>l?h.l|=1<l?h.m|=1<>>1;f.m=j>>>1|(o&1)<<21;f.l=m>>>1|(j&1)<<21;--l}g&&rv(h);e?(kv=nv(c),d&&(kv=vv(kv,(lv(),mv)))):kv=fv(c.l,c.m,c.h);return h}function rv(a){var b,c,d;b=~a.l+1&4194303;c=~a.m+(0==b?1:0)&4194303;d=~a.h+(0==b&&0==c?1:0)&1048575;a.l=b;a.m=c;a.h=d}\nfunction tv(a){var b;b=wv(a.h);return 32==b?(b=wv(a.m),32==b?wv(a.l)+32:b+20-10):b-12}var kv=null;function Cv(a,b){return a.l==b.l&&a.m==b.m&&a.h==b.h}function K(a){var b,c,d;if(isNaN(a))return lv(),Dv;if(-9223372036854775E3>a)return lv(),Ev;if(9223372036854775E3<=a)return lv(),pv;d=!1;0>a&&(d=!0,a=-a);c=0;17592186044416<=a&&(c=Vu(a/17592186044416),a-=17592186044416*c);b=0;4194304<=a&&(b=Vu(a/4194304),a-=4194304*b);a=Vu(a);b=fv(a,b,c);d&&rv(b);return b}\nfunction Fv(a){var b,c;return-129a?(b=a+128,null==Gv&&(Gv=C(Hv,q,30,256,0)),c=Gv[b],!c&&(c=Gv[b]=ev(a)),c):ev(a)}function Iv(a){var b=Kk,c,d;c=a.h>>19;d=b.h>>19;return 0==c?0!=d||a.h>b.h||a.h==b.h&&a.m>b.m||a.h==b.h&&a.m==b.m&&a.l>b.l:!(0==d||a.h>19;d=b.h>>19;return 0==c?0!=d||a.h>b.h||a.h==b.h&&a.m>b.m||a.h==b.h&&a.m==b.m&&a.l>=b.l:!(0==d||a.h>13|(a.m&15)<<9;e=a.m>>4&8191;f=a.m>>17|(a.h&255)<<5;g=(a.h&1048320)>>8;h=b.l&8191;j=b.l>>13|(b.m&15)<<9;l=b.m>>4&8191;o=b.m>>17|(b.h&255)<<5;m=(b.h&1048320)>>8;r=c*h;y=d*h;t=e*h;u=f*h;g*=h;0!=j&&(y+=c*j,t+=d*j,u+=e*j,g+=f*j);0!=l&&(t+=c*l,u+=d*l,g+=e*l);0!=o&&(u+=c*o,g+=d*o);0!=m&&(g+=c*m);c=(r&4194303)+((y&511)<<13);r=(r>>22)+(y>>9)+((t&262143)<<4)+((u&31)<<17)+(c>>22);t=(t>>18)+(u>>5)+((g&4095)<<8)+(r>>22);return fv(c&4194303,r&\n4194303,t&1048575)}function nv(a){var b,c;b=~a.l+1&4194303;c=~a.m+(0==b?1:0)&4194303;return fv(b,c,~a.h+(0==b&&0==c?1:0)&1048575)}function uv(a,b){var c,d,e,b=b&63;22>b?(c=a.l<>22-b,e=a.h<>22-b):44>b?(c=0,d=a.l<>44-b):(d=c=0,e=a.l<b?(e=c>>b,d=a.m>>b|c<<22-b,c=a.l>>b|a.m<<22-b):44>b?(e=d?1048575:0,d=c>>b-22,c=a.m>>b-22|c<<44-b):(e=d?1048575:0,d=d?4194303:0,c>>=b-44);return fv(c&4194303,d&4194303,e&1048575)}function vv(a,b){var c,d;c=a.l-b.l;d=a.m-b.m+(c>>22);return fv(c&4194303,d&4194303,a.h-b.h+(d>>22)&1048575)}function Q(a){return a.l|a.m<<22}\nfunction Kv(a){var b,c,d;if(0==a.l&&0==a.m&&0==a.h)return wc;if(524288==a.h&&0==a.m&&0==a.l)return"-9223372036854775808";if(0!=a.h>>19)return vb+Kv(nv(a));for(c=n;!(0==a.l&&0==a.m&&0==a.h);){b=Fv(1E9);a=iv(a,b);b=n+Q(kv);if(!(0==a.l&&0==a.m&&0==a.h))for(d=9-b.length;0d||d>a.p.c)throw new Mx;b.ob==a&&(f=a.se(b),fd||d>=c.c)throw new Mx;for(--c.c;dg&&l.charAt(g)==vb&&0==l.indexOf(f)&&(e[h]=d+l.substring(g))}c.className=e.join(fa)}$x(this,this.T);ey(this);gx(Xq(this.pb),cj,!1);gx(this.T.b,b+"Content",!0)}w(369,370,zl);_.ke=function(){vx(this.T)};_.le=function(){yx(this.T)};_.ze=function(){return this.T.jb};_.ue=function(){return new by(this.T)};_.re=function(a){return this.T.re(a)};_.Ae=function(a){$x(this.T,a);ey(this)};_.T=null;w(368,369,zl);_.oe=Ex;\nfunction ny(){ny=x;oy=new py(0,(jy(),ky));qy=new py(1,ry);sy=new py(2,ty);uy=z(vy,q,37,[oy,qy,sy])}function py(a,b){this.b=a;this.a=b}w(372,195,{37:1,88:1,93:1,95:1},py);_.a=null;var uy,oy,qy,sy;function wy(){wy=x;xy=z(Zu,q,1,[lk,yi,Gg])}\nfunction my(a){var b;wy();var c,d;c=this.pb=$doc.createElement(Wj);this.c=$doc.createElement(Zj);hw(c,this.c);c[Mg]=0;for(c=c[Kg]=0;cthis.pb.tabIndex?this.pb.tabIndex:-(this.pb.tabIndex%65535)-1)&&(this.pb.tabIndex=0)};function Dy(){this.p=new Xx(this);this.e=$doc.createElement(Wj);this.d=$doc.createElement(Zj);hw(this.e,this.d);this.pb=this.e}w(382,364,zl);_.d=null;_.e=null;function Ey(){this.pb=Fy()}w(386,371,zl,Ey);function Gy(){Gy=x;Hy=new Iy((sr(),Og));Jy=new Iy(ci);Ky=new Iy(vj);Ly=(Ju(),Jy);My=Ky;Ny=Ly}var Hy,Ny,Jy,My,Ly,Ky;w(396,1,{});function Iy(a){this.a=a}w(397,396,{},Iy);_.a=null;\nfunction Oy(){Oy=x;Py=new Qy(yi);Ry=new Qy(lk)}var Py,Ry;function Qy(a){this.a=a}w(398,1,{},Qy);_.a=null;function Sy(a,b){var c;c=Ty(a);hw(a.b,c);Jx(a,b,c)}function Ty(a){var b;b=$doc.createElement($j);b[pg]=a.a.a;b.style[zk]=a.c.a;return b}function Uy(a,b){var c,d;d=Yq(b.pb);(c=Nx(a,b))&&a.b.removeChild(d);return c}function Vy(){Dy.call(this);this.a=(Gy(),Ny);this.c=(Oy(),Ry);this.b=$doc.createElement(qk);hw(this.d,this.b);this.e[Mg]=wc;this.e[Kg]=wc}w(399,382,zl,Vy);\n_.re=function(a){return Uy(this,a)};_.b=null;function Wy(){Wy=x;new up}function Xy(a){Wy();Yy.call(this,a.d.a,a.b,a.c,a.e,a.a)}function Zy(a,b,c,d,e){Wy();this.a=new $y(this,a,b,c,d,e);this.pb[Sg]="gwt-Image"}function Yy(a,b,c,d,e){Wy();Zy.call(this,(cw(),new bw(a)),b,c,d,e)}w(400,366,nl,Xy,Zy,Yy);_.Yd=function(a){32768==nw(a.type)&&this.a&&(this.pb.__gwtLastUnhandledEvent=n);xx(this,a)};_.pe=function(){var a=this.a;I(ii,Uq(this.pb,"__gwtLastUnhandledEvent"))&&(a.f=new az(a,this),Gq((Dq(),Eq),a.f))};\n_.a=null;w(402,1,{});_.f=null;function bz(){bz=x;cz()}\nfunction $y(a,b,c,d,e,f){var g,h;bz();this.b=c;this.c=d;this.e=e;this.a=f;this.d=b;g=$doc.createElement(Qj);h=new Ov;Nv(Nv(Nv(h,new Qv("width:"+e+(Dr(),kj)+hd)),new Qv("height:"+f+nj)),new Qv("background:url("+b.a+") no-repeat "+-c+lj+-d+nj));!dz&&(dz=new ez);b=fz;h=new Qv((new Qv(Sq(h.a.a))).a);c=new Pv;xp(c.a,"");h=new Sv(Sq(c.a));g.innerHTML=h.a||n;g=Xq(g);a.kb&&(a.pb.__listener=\nnull);if(a.pb&&(h=a.pb,b=h.parentNode))b.insertBefore(g,h),b.removeChild(h);a.pb=g;a.kb&&(a.pb.__listener=a);-1==a.lb?(g=a.pb,a=133333119|(a.pb.__eventBits||0),pw(),dx(g,a)):a.lb|=133333119}w(401,402,{},$y);_.a=0;_.b=0;_.c=0;_.d=null;_.e=0;function az(a,b){this.a=a;this.b=b}w(403,1,{},az);_.pd=function(){var a,b;this.b.a!=this.a||this!=this.a.f||(this.a.f=null,this.b.kb?(a=(b=$doc.createEvent("HTMLEvents"),b.initEvent(ii,!1,!1),b),this.b.pb.dispatchEvent(a)):this.b.pb.__gwtLastUnhandledEvent=ii)};\n_.a=null;_.b=null;w(405,331,$l);function gz(a){this.a=a}w(407,405,$l,gz);_.Od=function(a){this.a.Ge(a.f,a.a)};function hz(a,b,c){var d;if(a.o){var e=d=$doc.createElement(qk);bx(a.e,(iw(),jw(e)),b);a=(iw(),jw(c));d.appendChild(a)}else d=Tw(a.e,0),bx(d,(iw(),jw(c)),b)}\nfunction iz(a,b,c){var d;b.b&&(jz(a,b),c&&b.a?(jz(a,null),a=b.a,b=(Dq(),Eq),b.c=Hq(b.c,[new kz(a),!1])):null!=b.d&&(a.j=new lz(a,b),c=(jy(),ry),a.j.U=c,a.j.ab=a.f,c=Oh,a.j.ee()[Sg]=c,d=kx(a.pb),I(Nh,d)||fx(a.j,d+"Popup"),ux(a.j,new gz(a),Nm?Nm:Nm=new Om),a.n=b.d,d=a.j,a=new mz(a,b),d.pb.style[Ak]=Rh,gy(d),Ju(),a.a.o?fy(a.a.j,ar(a.a.pb)+Tq(a.a.pb,Ti)-1,br(a.b.pb)+$wnd.pageYOffset):fy(a.a.j,ar(a.b.pb),br(a.a.pb)+$wnd.pageYOffset+Tq(a.a.pb,Si)-1),d.pb.style[Ak]=Bk))}\nfunction nz(a,b){!b&&a.k&&a.n==a.k.d||b&&!b.b||(jz(a,b),oz(a.pb),b&&a.d&&iz(a,b,!1))}\nfunction pz(a,b){var c;a:{c=b.target;var d,e;for(e=new vu(a.i);e.bc&&(c=a.i.c-1),c==b){d=zw(a.i,b);break}else if(d=zw(a.i,c),d.b)break;jz(a,d)}}w(408,366,nl);_.Yd=function(a){pz(this,a)};_.oe=function(){this.j&&cy(this.j,!1);yx(this)};_.Ge=function(a,b){tz(this,a,b)};_.d=!1;_.e=null;_.f=!1;_.j=null;_.k=null;_.n=null;_.o=!1;function kz(a){this.a=a}\nw(409,1,{},kz);_.pd=function(){wz(this.a)};_.a=null;function xz(a){this.a=a}w(410,1,{},xz);_.Hd=function(){jz(this.a,null)};_.a=null;function lz(a,b){this.a=a;this.b=b;hy.call(this,!0,ri);$x(this.T,this.b.d);ey(this);this.fb=!0;this.b.d.bi()}w(411,369,zl,lz);_.Ud=function(a){var b,c;if(!a.a)switch(nw(a.d.type)){case 4:c=a.d.target;b=this.b.c.pb;if(dr(b,c)){a.a=!0;break}a.a&&jz(this.a,null)}};_.a=null;_.b=null;function mz(a,b){this.a=a;this.b=b}w(412,1,{},mz);_.a=null;var yz=_.b=null;\nfunction zz(){zz=x;yz=new Mv((cw(),new bw((Ju(),"data:image/gif;base64,R0lGODlhBQAJAIAAAAAAAAAAACH5BAEAAAEALAAAAAAFAAkAAAIMRB5gp9v2YlJsJRQKADs="))),5,9)}function Az(a,b){if(b){var c=kx(a.pb)+ec;gx(a.ee(),c,!1)}else c=kx(a.pb)+ec,gx(a.ee(),c,!0);a.b=b}function Bz(a,b){this.pb=$doc.createElement($j);var c=kx(this.pb)+fc;gx(this.ee(),c,!1);this.pb.textContent=a||n;this.pb[Sg]="gwt-MenuItem";c=er();this.pb.setAttribute(Th,c);Rn();this.pb.setAttribute("role",yo.a);this.a=b}w(415,367,{41:1,45:1,48:1},Bz);\n_.a=null;_.b=!0;_.c=null;_.d=null;function Cz(){var a;this.pb=$doc.createElement($j);this.pb[Sg]="gwt-MenuItemSeparator";a=$doc.createElement(nh);hw(this.pb,a);a[Sg]="menuSeparatorInner"}w(416,367,Wl,Cz);function Dz(){var a,b,c,d,e;b=null.bi();e=gr();d=fr();b[mh]=(hr(),Mi);b[Dk]=0+(Dr(),kj);b[Qh]=Cc;c=$doc;c=(I(c.compatMode,qe)?c.documentElement:c.body).scrollWidth||0;a=$doc;a=(I(a.compatMode,qe)?a.documentElement:a.body).scrollHeight||0;b[Dk]=(c>e?c:e)+kj;b[Qh]=(a>d?a:d)+kj;b[mh]="block"}\nfunction iy(){}w(417,1,{},iy);_.Qd=function(){Dz()};function Ez(a){this.a=a}w(418,1,{},Ez);\n_.Ud=function(a){var b=this.a,c,d;if(a.a||!b.fb&&a.b)b.db&&(a.a=!0);else if(b.Ud(a),!a.a){d=a.d;c=d.target;var e;try{e=!!c&&!!c.nodeType}catch(f){e=!1}(c=e&&c&&1==c.nodeType?dr(b.pb,c):!1)&&(a.b=!0);b.db&&(a.a=!0);switch(nw(d.type)){case 4:case 1048576:if(mw){a.b=!0;break}if(!c&&b.V){b.Ce(!0);break}break;case 8:case 64:case 1:case 2:case 4194304:if(mw){a.b=!0;break}break;case 2048:d=d.target,b.db&&!c&&d&&(d.blur&&d!=$doc.body&&d.blur(),a.a=!0)}}};_.a=null;function Fz(a){this.a=a}w(419,1,{},Fz);\n_.a=null;function jy(){jy=x;ky=new Gz(0);ry=new Gz(1);ty=new Gz(2);Hz=z(Iz,q,46,[ky,ry,ty])}function Gz(a){this.b=a}w(420,195,{46:1,88:1,93:1,95:1},Gz);var Hz,ky,ry,ty;function Jz(a){a.j?a.a.bb&&($doc.body.appendChild(a.a.Z),a.f=Cw(a.a.$),Dz(),a.b=!0):a.b&&($doc.body.removeChild(a.a.Z),Kz(a.f.a),a.f=null,a.b=!1)}function Lz(a){a.j||(Jz(a),a.c||(Ax(),Sx(Mz(null),a.a)));a.a.pb.style[Vg]="rect(auto, auto, auto, auto)";a.a.pb.style[Zi]=Bk}\nfunction Nz(a,b){var c,d,e,f,g,h;a.j||(b=1-b);c=f=e=g=0;d=Vu(b*a.d);h=Vu(b*a.e);switch(a.a.U.b){case 2:f=a.e;c=d;break;case 0:g=a.d-d>>1;e=a.e-h>>1;f=e+h;c=g+d;break;case 1:Ju(),f=h,c=d}a.a.pb.style[Vg]="rect("+g+mj+f+mj+c+mj+e+"px)"}\nfunction dy(a,b,c){a.c=c;sm(a);a.i&&(um(a.i),a.i=null,Lz(a));a.a.hb=b;var d=a.a;d.eb&&(Kz(d.eb.a),d.eb=null);d._&&(Kz(d._.a),d._=null);if(d.hb){d.eb=ow(new Ez(d));var e;e=new Fz(d);vw();e=ww?ju(ww.a,(!iu&&(iu=new Om),iu),e):null;d._=e}c=!c&&a.a.ab;a.a.U!=(jy(),ky)&&!b&&(c=!1);a.j=b;c?b?(Jz(a),a.a.pb.style[hj]=fg,-1!=a.a.ib&&a.a.De(a.a.cb,a.a.ib),a.a.pb.style[Vg]=rj,Ax(),b=Mz(null),Jx(b,a.a,b.pb),a.i=new Oz(a),Bm(a.i,1)):vm(a,200):(Jz(a),a.j?(a.a.pb.style[hj]=fg,-1!=a.a.ib&&a.a.De(a.a.cb,a.a.ib),Ax(),\nb=Mz(null),Jx(b,a.a,b.pb)):a.c||(Ax(),Sx(Mz(null),a.a)),a.a.pb.style[Zi]=Bk)}function ly(a){var b=(Dm(),Em);this.k=new Cm(this);this.s=b;this.a=a}w(421,58,{},ly);_.rd=function(){Lz(this)};_.sd=function(){this.d=Tq(this.a.pb,Si);this.e=Tq(this.a.pb,Ti);this.a.pb.style[Zi]=Rh;Nz(this,(1+Math.cos(3.141592653589793))/2)};_.td=function(a){Nz(this,a)};_.a=null;_.b=!1;_.c=!1;_.d=0;_.e=-1;_.f=null;_.i=null;_.j=!1;function Oz(a){Im();this.a=a}w(422,65,{},Oz);_.vd=function(){this.a.i=null;vm(this.a,200)};\n_.a=null;function iw(){iw=x;Pz()}function jw(a){return a.__gwt_resolve?a.__gwt_resolve():a}function Pz(){function a(){}a.prototype={className:n,clientHeight:0,clientWidth:0,dir:n,getAttribute:function(a){return this[a]},href:n,id:n,lang:n,nodeType:1,removeAttribute:function(a){this[a]=void 0},setAttribute:function(a,c){this[a]=c},src:n,style:{},title:n};$wnd.GwtPotentialElementShim=a}function Ax(){Ax=x;Qz=new Rz;Sz=new up;Bx=new su}function Tz(a){this.p=new Xx(this);this.pb=a;vx(this)}\nfunction Mz(a){Ax();var b,c;c=Bu(Sz,a);b=null;if(null!=a&&!(b=$doc.getElementById(a)))return null;if(c&&(!b||c.pb==b))return c;if(0==Sz.d){var d=new Uz;Lm();Mm(Nm?Nm:Nm=new Om,d);Ju()}!b?c=new Vz:c=new Tz(b);E(Sz,a,c);tu(Bx,c);return c}w(424,363,zl,Tz);var Qz,Sz,Bx;function Rz(){}w(425,1,{},Rz);_.Fe=function(a){a.me()&&a.oe()};function Uz(){}w(426,1,{},Uz);_.Od=function(){Ax();try{Fx(Bx,Qz)}finally{Wz(Bx.a),Wz(Sz)}};function Vz(){Tz.call(this,$doc.body)}w(427,424,zl,Vz);\n_.xe=function(a,b,c){Vx(a,b-0,c-0)};function by(a){this.c=a;this.a=!!this.c.jb}w(428,1,{},by);_.Vd=Tv;_.Wd=function(){if(!this.a||!this.c.jb)throw new Px;this.a=!1;return this.b=this.c.jb};_.Xd=function(){this.b&&this.c.re(this.b)};_.b=null;_.c=null;function Xz(a,b){a.pb[yk]=null!=b?b:n}w(431,381,nl);_.Yd=function(a){0!=(nw(a.type)&896)?xx(this,a):xx(this,a)};_.pe=Dx;function Yz(){Yz=x;Zz()}w(430,431,nl);\nfunction $z(){Yz();var a=Wq(ak);!gw&&(gw=new fw);!ew&&(ew=new dw);this.pb=a;Ju();this.pb[Sg]="gwt-TextBox"}w(432,430,nl,$z);function Zz(){Zz=x;aA=new bA;cA=new dA;eA=new fA;gA=new hA;iA=z(jA,q,49,[aA,cA,eA,gA])}w(433,195,pl);var iA,aA,cA,eA,gA;function bA(){this.b=0}w(434,433,pl,bA);function dA(){this.b=1}w(435,433,pl,dA);function fA(){this.b=2}w(436,433,pl,fA);function hA(){this.b=3}w(437,433,pl,hA);function Ox(a,b){var c;for(c=0;cc||c>a.c)throw new Mx;if(a.c==a.a.length){e=C(kA,q,50,2*a.a.length,0);for(d=0;dc;--d)kq(a.a,d,a.a[d-1]);kq(a.a,c,b)}function Xx(a){this.b=a;this.a=C(kA,q,50,4,0)}w(439,1,{},Xx);_.ue=function(){return new Qx(this)};_.a=null;_.b=null;_.c=0;function lA(a){if(a.a>=a.b.c)throw new Px;return a.b.a[++a.a]}function mA(a){if(0>a.a||a.a>=a.b.c)throw new nA;a.b.b.re(a.b.a[a.a--])}function Qx(a){this.b=a}w(440,1,{},Qx);\n_.Vd=function(){return this.aa)throw new Pm("Missing message: awt.133");this.e=a;this.a=2;this.c=0;this.d=10;this.b=0}w(465,1,{55:1},wB);\n_.eQ=function(a){return a===this?!0:H(a,55)?a.e==this.e&&a.a==this.a&&a.c==this.c&&a.d==this.d&&a.b==this.b:!1};_.hC=function(){var a;a=new xB;a.a=31*a.a+Vu((new yB(this.e)).a);a.a=31*a.a+this.a;a.a=31*a.a+this.c;a.a=31*a.a+Vu((new yB(this.d)).a);return a.a};_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;\nfunction zB(){zB=x;AB=BB=new hm(255,255,255);CB=new hm(192,192,192);DB=new hm(128,128,128);EB=new hm(64,64,64);FB=GB=new hm(0,0,0);HB=IB=new hm(255,0,0);new hm(255,175,175);JB=new hm(255,200,0);KB=new hm(255,255,0);new hm(0,255,0);LB=new hm(255,0,255);MB=new hm(0,255,255);NB=OB=new hm(0,0,255)}\nfunction PB(a){var b,c;c=a.d>>16&255;b=a.d&255;a=a.d>>8&255;if(0==c&&0==b&&0==a)return new hm(3,3,3);3>c&&0!=c?c=3:(c=Vu(c/0.7),c=255b&&0!=b?b=3:(b=Vu(b/0.7),b=255a&&0!=a?a=3:(a=Vu(a/0.7),a=255>16&255)),Vu(0.7*(a.d>>8&255)),Vu(0.7*(a.d&255)))}function RB(a,b){return H(b,58)?b.d==a.d:!1}function hm(a,b,c){zB();if((a&255)!=a||(b&255)!=b||(c&255)!=c)throw new Pm(xe);this.d=c|b<<8|a<<16|-16777216}\nw(471,1,{58:1,67:1,70:1},hm);_.eQ=function(a){return RB(this,a)};_.hC=SB;_.tS=function(){return TB.d+"[r="+(this.d>>16&255)+",g="+(this.d>>8&255)+",b="+(this.d&255)+bg};_.a=0;_.b=null;_.c=null;_.d=0;var FB,NB,HB,AB,GB,OB,MB,EB,DB,CB,LB,JB,IB,BB,KB;function NA(){NA=x;OA=new UB(!0);VB=new su;tu(VB,"ar");tu(VB,"fa");tu(VB,"iw");tu(VB,"ur")}function UB(a){this.a=a}w(472,1,Xl,UB);_.a=!1;var OA,VB;w(476,1,{76:1,92:1});function WB(){EA.call(this,0,0)}function EA(a,b){this.b=a;this.a=b}\nfunction GA(a){EA.call(this,a.b,a.a)}w(475,476,{61:1,76:1,88:1,92:1},WB,EA,GA);_.eQ=function(a){return a===this?!0:H(a,61)?a.b==this.b&&a.a==this.a:!1};_.hC=function(){var a;a=new xB;a.a=31*a.a+this.b;a.a=31*a.a+this.a;return a.a};_.tS=function(){return XB.d+"[width="+this.b+",height="+this.a+bg};_.a=0;_.b=0;function gt(a,b,c){this.f=a;this.c=b;this.e=this.d=this.j=this.i=0;this.b=c}w(477,1,Xl,gt,function(a,b,c,d){this.f=a;this.c=b;this.j=this.i=0;this.d=c;this.e=d;this.b=null});\n_.pf=function(){return 0!=(this.e&4)};_.qf=function(){return 0!=(this.e&1)};_.tS=function(){var a;return this.cZ.d+"[id="+this.c+",x="+this.i+",y="+this.j+(0!=this.d?",key="+this.d+(a=n,this.qf()&&(a+=",shift"),0!=(this.e&2)&&(a+=",control"),this.pf()&&(a+=",meta"),a):n)+",target="+this.f+(null!=this.b?",arg="+this.b:n)+bg};_.b=null;_.c=0;_.d=0;_.e=0;_.f=null;_.i=0;_.j=0;function YB(a){var b,c;for(c=b=0;cb.b&&(ZB(this,l,b.b-(o-this.c),g.b,m,j,h),l.mg(),o=f,m+=j+this.d,j=0),e=!1,kq(l.b,l.c++,c),o+=a.b+this.c,j=Um(j,a.a);ZB(this,l,b.b-(o-this.c),g.b,m,\nj,h)}};_.mf=function(a){this.b=dC(a.Fc);return 0==YB(this)?VA(a,new EA(10,10)):VA(a,aC(this,!1))};_.nf=function(a){this.b=dC(a.Fc);return 0==YB(this)?VA(a,new EA(10,10)):VA(a,aC(this,!0))};_.of=SA;_.tS=function(){var a;switch(this.a){case 0:a=ci;break;case 2:a=vj;break;case 1:a=Og;break;case 4:a="trailing";break;default:a="leading"}return gC.d+"[hgap="+this.c+",vgap="+this.d+",align="+a+bg};_.a=0;_.b=null;_.c=0;_.d=0;function hC(){hC=x;iC=new jC(Ee,0,12)}\nfunction jC(a,b,c){hC();this.a=null!=a?a:"Default";this.b=0<=c?c:0;this.c=0==(b&-4)?b:0}w(479,1,{62:1,88:1},jC);_.a=null;_.b=0;_.c=0;var iC;w(480,1,rl);_.tS=function(){return kC.d+"[font="+this.b+"ascent="+lC(this.b).a+", descent="+lC(this.b).b+", height="+lC(this.b).c+bg};_.b=null;w(482,1,{});_.tS=function(){return"Graphics"};w(483,482,{});function nA(){}function wx(a){this.f=a}w(486,136,Jl,nA,wx);function AA(){this.f="Missing message: awt.151"}w(485,486,Jl,AA);w(487,1,{});\nfunction QA(a,b,c,d){this.d=a;this.b=b;this.a=c;this.c=d}w(488,1,{64:1,88:1,92:1},QA);_.eQ=function(a){return a===this?!0:H(a,64)?a.b==this.b&&a.a==this.a&&a.c==this.c&&a.d==this.d:!1};_.hC=function(){var a;a=31+this.d;a=31*a+this.b;a=31*a+this.a;return a=31*a+this.c};_.tS=function(){return mC.d+"[left="+this.b+",top="+this.d+",right="+this.c+",bottom="+this.a+bg};_.a=0;_.b=0;_.c=0;_.d=0;w(492,1,Xl);_.$e=function(){return this.j};_.tS=UA;_.j=null;_.k=null;\nfunction nC(a){var b;b=a.j+",label="+a.f;a.e||(b+=",disabled");null!=a.c&&(b+=",command="+a.c);return b}function oC(a,b){a.e=b;Az(a.i.a,b)}function pC(a){this.n=(KA(),KA(),LA);var b;var c;b=this.cZ.d;-1!=lx(b,mx(36))?b=null:(c=this.n.b.d++,b=ox(b,uA(b,mx(46))+1)+n+c);this.j=b;this.d=new uB;this.f=a;this.e=!0;this.i=new qC(this)}w(491,492,Xl,pC);_.$e=function(){return nC(this)};_.c=null;_.e=!1;_.f=null;_.i=null;w(490,491,kl);_.$e=function(){return nC(this)+(this.b?",tearOff":n)};_.b=!1;w(494,1,{77:1});\n_.eQ=function(a){return a===this?!0:H(a,77)?this.rf()==a.rf()&&this.sf()==a.sf():!1};_.hC=function(){var a;a=new xB;rC(a,this.rf());rC(a,this.sf());return a.a};function zA(){this.b=this.a=0}function sC(a,b){this.a=a;this.b=b}w(493,494,{68:1,77:1,88:1},zA,sC);_.eQ=function(a){return a===this?!0:H(a,68)?this.a==a.a&&this.b==a.b:!1};_.rf=Tv;_.sf=zy;_.tS=function(){return tC.d+"[x="+this.a+",y="+this.b+bg};_.a=0;_.b=0;\nfunction uC(a,b){if(!b)throw new ku("Missing message: awt.70");var c=a.a;if(I(b.f,vb)){var c=c.a.a,d=new Cz,e=c.c.c;if(0>e||e>c.c.c)throw new Mx;c.o&&(d.pb[Xg]=2);hz(c,e,d.pb);vC(c.c,e,d)}else{var d=c.a.a,c=b.i.a,e=d.c.c,f,g;if(0>e||e>d.c.c)throw new Mx;vC(d.c,e,c);for(f=g=0;fb?0:b;var c=this.Tc;Xz(c.a,a);c.e.a=-1;c.e.b=-1}w(504,503,Ul,HC,IC);_.Je=function(){return"textfield"+this.Vc.b.f++};_.Le=function(){return FC(this,Uq(this.Tc.a.pb,yk).length)};_.Me=function(){return!vA(this)?null:FC(this,Uq(this.Tc.a.pb,yk).length)};_.Oe=JC;_.Qe=KC;_.Ue=function(){this.Tc=(KA(),new LC)};_.Ye=JC;_._e=KC;_.a=0;function KA(){KA=x;LA=new MC}\nfunction NC(){var a=(KA(),KA(),LA);!a.c&&(a.c=new OC);return a.c}w(505,1,{});_.a=null;_.c=null;var LA;function PC(){}w(506,1,{},PC);_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;_.f=0;w(507,1,{});function QC(){QC=x;RC=new SC;TC=new SC}function UC(a,b){return b==a?!0:!b?!1:!0}function SC(){}w(508,1,{72:1},SC);_.eQ=function(a){return null==a||!H(a,72)?!1:UC(this,a)};_.hC=function(){var a;a=null.bi()+";class="+null.bi();a=!null.bi().bi()?a:a+";charset=";return VC(a)};\n_.tS=function(){return WC.d+"[MimeType=(null);humanPresentableName="+this.a+bg};_.a=null;var RC,TC;function XC(){XC=x;z(YC,q,72,[(QC(),TC),RC])}function ZC(a){var b=(QC(),TC);if(UC(b,(QC(),TC)))return a.a;if(UC(b,RC))return new $C(a.a);throw new aD(b);}function bD(a){XC();this.a=a}w(509,1,{},bD);_.a=null;function aD(a){this.f="flavor = "+a}w(510,137,{73:1,88:1,96:1,105:1},aD);function cD(a,b,c){nB();dD.call(this,a,b,c,Kk)}\nfunction dD(a,b,c,d){nB();lB.call(this,a);this.k=b;this.a=c;this.c=d;this.b=0}w(511,458,Xl,cD,dD);_.$e=function(){var a,b;a=1001==this.k?"ACTION_PERFORMED":xk;b=n;0<(this.b&1)&&(b+="Shift");0<(this.b&2)&&(b+=0==b.length?"Ctrl":"+Ctrl");0<(this.b&4)&&(b+=0==b.length?"Meta":"+Meta");0<(this.b&8)&&(b+=0==b.length?"Alt":"+Alt");return a+",cmd="+this.a+",when="+Kv(this.c)+qb+b};_.a=null;_.b=0;_.c=Kk;function IA(a,b){nB();lB.call(this,a);this.k=b}w(512,458,Xl,IA);\n_.$e=function(){var a,b;a=this.n;switch(this.k){case 100:b="COMPONENT_MOVED";break;case 101:b="COMPONENT_RESIZED";break;case 102:return"COMPONENT_SHOWN";case 103:return"COMPONENT_HIDDEN";default:return xk}return b+" ("+a.Se()+lb+a.Te()+fa+a.Re()+Ek+a.Ne()+eb};w(515,512,Xl);_.j=0;\nfunction eD(a){var b;switch(a.k){case 503:b="MOUSE_MOVED";break;case 500:b="MOUSE_CLICKED";break;case 501:b="MOUSE_PRESSED";break;case 502:b="MOUSE_RELEASED";break;case 506:b="MOUSE_DRAGGED";break;case 504:b="MOUSE_ENTERED";break;case 505:b="MOUSE_EXITED";break;case 507:b="MOUSE_WHEEL";break;default:b=xk}b=b+",("+a.f+lb+a.i+"),button="+a.d;if(0<(a.j&16320)){var c=qb,d=a.j,e;e=new Pv;0!=(d&4)&&yp(yp(e,(KA(),null)),kb);0!=(d&1)&&yp(yp(e,(KA(),null)),kb);0!=(d&2)&&yp(yp(e,(KA(),null)),kb);0!=(d&8)&&\n(0!=(d&2048)?0!=(d&512)&&yp(yp(e,(KA(),null)),kb):yp(yp(e,(KA(),null)),kb));0!=(d&32)&&yp(yp(e,(KA(),null)),kb);0!=(d&16)&&yp(yp(e,(KA(),null)),kb);0!=(d&8)&&yp(yp(e,(KA(),null)),kb);0!=(d&4)&&yp(yp(e,(KA(),null)),kb);0==Sq(e.a).length?e=Sq(e.a):(d=Sq(e.a).length-1,e=fD(Sq(e.a),0,d));c=c+e+",extModifiers=";e=a.j;var f,d=(f=n,0!=(e&256)&&(f+=(KA(),null)),0!=(e&128)&&(f+=(0=this.k?0!=(this.j&16)?(this.d=1,501==this.k&&(this.j|=1024)):0!=(this.j&8)?(this.d=2,501==this.k&&(this.j|=2048)):0!=(this.j&4)&&(this.d=3,501==this.k&&(this.j|=4096)):(0!=(this.j&16)&&(this.j|=1024),0!=(this.j&8)&&(this.j|=\n2048),0!=(this.j&4)&&(this.j|=4096));else if(0!=(this.j&16320))if(this.j&=-64,0!=(this.j&64)&&(this.j|=1),0!=(this.j&128)&&(this.j|=2),0!=(this.j&256)&&(this.j|=4),0!=(this.j&512)&&(this.j|=8),0!=(this.j&8192)&&(this.j|=32),500<=this.k&&502>=this.k)switch(this.d){case 1:this.j|=16;break;case 2:this.j|=8;break;case 3:this.j|=4}else 0!=(this.j&1024)&&(this.j|=16),0!=(this.j&2048)&&(this.j|=8),0!=(this.j&4096)&&(this.j|=4);this.b=0;this.a=1;this.c=d}w(518,517,Xl,Jt);\n_.$e=function(){var a,b;a=eD(this);switch(this.b){case 0:b="WHEEL_UNIT_SCROLL";break;case 1:b="WHEEL_BLOCK_SCROLL";break;default:b=xk}return a+=",scrollType="+b+",scrollAmount="+this.a+",wheelRotation="+this.c};_.a=0;_.b=0;_.c=0;w(527,1,{});function $C(a){if(null==a)throw new gD;}w(528,527,{},$C);\nfunction hD(){hD=x;iD={};iD["java.vendor"]=Ih;iD["package.restrict.access.sun"]=vk;iD["sun.java.launcher"]=uf;iD["sun.management.compiler"]=Ih;iD["os.name"]=uf;iD[" sun.boot.class.path"]=uf;iD["path.separator.applet"]=uf;iD["java.vm.specification.vendor"]=Ih;iD["java.runtime.version"]=uf;iD["http.proxyPort"]=uf;iD["user.name"]=uf;iD["user.language"]=uf;iD["os.name.applet"]=uf;iD["browser.version"]=uf;iD["java.version"]=uf;iD["user.timezone"]=uf;iD["java.endorsed.dirs"]=uf;iD["java.specification.name"]=\n"GWT";iD["java.specification.version"]="2.5.0";iD[Yh]=df;!Mt&&(Mt=new Ut);Mt.a?iD[Wh]="yes":iD[Wh]=null}var iD;w(532,137,Yl);function jD(){}function kD(a){this.f=a}w(531,532,{82:1,88:1,96:1,105:1},jD,kD);function lD(){lD=x;mD=new nD}function oD(a){var b;if(a.k){var c;b=new Pv;yp(b,a.f);Pq(b.a,dd);c=a.a;null!=c&&0=b||65<=b&&90>=b;for(c=1;b&&c=b||65<=b&&90>=b||48<=b&&57>=b||43==b||45==b||46==b;if(b){c=this.f;qD();var f,g,h;h=c.length;b=new rD;for(g=0;g=f?sD(b,f+32&65535):Pq(b.a,String.fromCharCode(f));\nthis.f=Sq(b.a)}else this.f=null,d=-1}if(null==this.f)throw new kD(Te+a);if(!this.k&&(this.k=Bu(mD,this.f),this.k||(this.k=(KA(),new tD))&&E(mD,this.f,this.k),!this.k))throw new kD(Te+a);try{c=a;var j=++d,l=a.length,o,m,r,t,y,u,D,s,F,O,L,Z,ea,Y,da,Fb,$,rb,Kb,J,Ia;if(ll){if(-2147483647>=l&&(j>=c.length||0>j)||!(0>j||j>=c.length)&&c.indexOf(sc,j)==j&&-1==uD(c,mx(47),j+2))throw new vD(l);}else{L=c.substr(j,l-j);l-=j;u=0;D=this.c;Z=this.e;rb=this.j;t=this.d;da=this.i;o=this.a;Ia=this.n;Kb=uD(L,mx(35),\n0);if(0==L.indexOf(sc)&&0!=L.indexOf("////")){F=2;Z=-1;u=uD(L,mx(47),2);$=uD(L,mx(63),2);-1!=$&&(-1==u||u>$)&&(u=$);-1==u&&(u=l,t=n);s=u;-1!=Kb&&Kbr+1?(m=L.charCodeAt(r+1),58==m?ea=r+1:ea=-1):ea=-1}catch(Tb){if(Tb=vq(Tb),!H(Tb,96))throw Tb;}-1==ea||ea>u?D=L.substr(F,s-F):(D=L.substr(F,ea-F),Y=L.substr(ea+1,s-(ea+1)),0==Y.length?Z=-1:Z=wD(Y,\n10))}-1u&&(null==t?t=n:I(t,n)?t=ic:t.indexOf(ic),O=uA(t,mx(47))+1,0==O?t=L.substr(u,y-u):t=t.substr(0,O-0)+L.substr(u,y-u)));null==t&&(t=n);null==D&&(D=n);d=D;var M;M=t;null!=da&&!I(da,n)&&(null!=t?M=t+Ed+da:M=Ed+da);null==this.f&&\n(this.f=this.f);this.c=d;this.b=M;this.e=Z;this.j=rb;var ya;null!=this.c&&0this.e)throw new kD("incorrect port: "+\nthis.e);}w(533,1,Xl,pD);_.tS=function(){return oD(this)};_.a=null;_.b=null;_.c=null;_.d=null;_.e=-1;_.f=null;_.i=null;_.j=null;_.k=null;_.n=null;var mD;w(534,1,{});function xD(a,b,c){var d,e;for(d=a.Kf().ue();d.Vd();)if(a=d.Wd(),e=a.th(),null==b?null==e:Hp(b,e))return c&&(a=new yD(a.th(),a.uh()),d.Xd()),a;return null}w(538,1,Ql);_.Jf=function(a){return!!xD(this,a,!1)};\n_.eQ=function(a){var b,c;if(a===this)return!0;if(!H(a,108)||this.Pf()!=a.Pf())return!1;for(a=a.Kf().ue();a.Vd();)if(b=a.Wd(),c=b.th(),b=b.uh(),!this.Jf(c)||!zD(b,this.Lf(c)))return!1;return!0};_.Lf=function(a){a=xD(this,a,!1);return!a?null:a.uh()};_.hC=function(){var a,b,c;c=0;for(b=this.Kf().ue();b.Vd();)a=b.Wd(),c+=a.hC(),c=~~c;return c};_.Mf=AD;_.Nf=function(){throw new BD("Put not supported on this map");};_.Of=function(a){a=xD(this,a,!0);return!a?null:a.uh()};_.Pf=function(){return this.Kf().Pf()};\n_.tS=function(){var a,b,c,d;d=Hk;a=!1;for(c=this.Kf().ue();c.Vd();)b=c.Wd(),a?d+=mb:a=!0,d+=n+b.th(),d+=vd,d+=n+b.uh();return d+"}"};function Wz(a){a.a=[];a.e={};a.c=!1;a.b=null;a.d=0}function Ww(a,b){var c;if(null==b)c=a.c;else if(H(b,1))c=dd+b in a.e;else a:{c=a.Sf(b);if(c=a.a[c])for(var d=0,e=c.length;d=a.i)break;c=KD(a,c);++b}return b}\nfunction LD(a,b){var c;for(c=0;c=a.i)throw new HD;b=a.a;a.a=KD(a,a.a);return fD(a.n,b,a.a)}\nfunction KD(a,b){var c,d;for(d=b;da.f||!LD(a,c))break;d+=65536<=c?2:1}else{c=a.n.charCodeAt(d);if(c>a.f||0>lx(a.c,mx(c)))break;++d}return d}function OD(a){PD.call(this,a,ga,!1)}function QD(a){PD.call(this,a,lb,!1)}\nfunction PD(a,b,c){this.a=0;this.j=-1;this.d=!1;this.n=a;this.i=a.length;this.c=b;this.k=c;var d;if(null==this.c)this.f=0;else{for(c=b=d=0;c=a&&(a=ND(this.c,c,this.c.length),this.e=!0),d=a;++a)0=a;++a)b=Bf,33=j||b>a.Sb||c>a.Sb))){l=C(cF,Sl,-1,99,1);h=m=o=0;for(g=b;g<=c;++g)f=dF(a.zb[g]),o+=f.c,m+=f.d,f.d>h&&(h=f.d),l[g]=f.c,2==d&&(l[g]=f.d);a.J&&(o+=25*(j+1),m+=25*(j+1),h+=25);j=g=1;a.J?r=eF(a):r=fF(a);f=Vu(r.b);r=Vu(r.a);1==d||3==d?f=~~((f-48)/2):2==d&&(r=~~(r/2));o>=f&&(g=f/o);h>=r&&(j=r/h);h=0;a.J&&(a.xb=gd)switch(rF(b,(zB(),GB)),f){case 101:rF(b,KB);vF(b,j+3,g+3,a.mb-6,a.mb-6);rF(b,GB);e=g+3;h=a.mb-6;c=\na.mb-6;d=b.a;f=Q(K(S((j+3)*T)));e=Q(K(S(e*T)));h=Q(K(S(h*T)));c=Q(K(S(c*T)));d.n&&(wF(d,!1),xF(d,yF(d,f,e,h,c)));zF(b,j+6,g+6,a.mb-12,a.mb-12);AF(b.a,Q(K(S((j+9)*(BF(),T)))),Q(K(S((g+9)*T))),Q(K(S(2*T))),Q(K(S(4*T))));sF(b,j+a.mb-10,g+9,2,4);0.04>Math.random()&&(rF(b,IB),AF(b.a,Q(K(S((j+10)*T))),Q(K(S((g+18)*T))),Q(K(S(4*T))),Q(K(S(4*T)))));0.96=e;++e)if(bo&&(rF(g,(qE(),yE)[o]),vF(g,f.b[s].q-\n12,f.b[s].r-12,24,24));for(s=1;s<=f.q;++s)l=f.c[s].i,m=f.c[s].j,0!=f.b[l].c&&f.b[l].c==f.b[m].c&&(rF(g,(qE(),yE)[f.b[l].c]),u=f.b[m].q-f.b[l].q,h=f.b[m].r-f.b[l].r,y=Math.sqrt(u*u+h*h),1>y&&(y=1),h/=y,y=u/y,u=9*h,t=9*y,o=UF(4),r=UF(4),o[0]=f.b[l].q+u,r[0]=f.b[l].r-t,o[1]=f.b[m].q+u,r[1]=f.b[m].r-t,o[2]=f.b[m].q-u,r[2]=f.b[m].r+t,o[3]=f.b[l].q-u,r[3]=f.b[l].r+t,GF(g,o,r,4))}for(s=1;s<=f.q;++s){rF(g,(zB(),FB));t=f.c[s];l=t.i;m=t.j;1==f.i&&0!=f.b[l].c&&f.b[l].c==f.b[m].c&&rF(g,(qE(),yE)[f.b[l].c]);if(3==\nt.f||4==t.f)o=l,l=m,m=o;o=f.b[l].q;r=f.b[l].r;L=f.b[m].q;O=f.b[m].r;if(1!=t.c||0!=t.f)u=L-o,h=O-r,y=Math.sqrt(u*u+h*h),1>y&&(y=1),h/=y,y=u/y;switch(t.c){case 2:10<=t.f&&rF(g,LB);u=2*h;t=2*y;DF(g.a,Q(K(S((o+u)*(BF(),T)))),Q(K(S((r-t)*T))),Q(K(S((L+u)*T))),Q(K(S((O-t)*T))));DF(g.a,Q(K(S((o-u)*T))),Q(K(S((r+t)*T))),Q(K(S((L-u)*T))),Q(K(S((O+t)*T))));rF(g,GB);break;case 3:DF(g.a,Q(K(S(o*(BF(),T)))),Q(K(S(r*T))),Q(K(S(L*T))),Q(K(S(O*T))));l=3*h;m=3*y;DF(g.a,Q(K(S((o+l)*T))),Q(K(S((r-m)*T))),Q(K(S((L+l)*\nT))),Q(K(S((O-m)*T))));DF(g.a,Q(K(S((o-l)*T))),Q(K(S((r+m)*T))),Q(K(S((L-l)*T))),Q(K(S((O+m)*T))));break;case 9:case 0:for(m=0;10>m;++m)l=o-(o-L)/10*m,D=r-(r-O)/10*m,DF(g.a,Q(K(S(l*(BF(),T)))),Q(K(S(D*T))),Q(K(S(l*T))),Q(K(S(D*T))));VF(g,f.k.v);m=WF(f.k.w);t=t.d;l=Ed;null!=t&&(l=t);t=GC(f.k.w,l);t=(o+L)/2-t/2;O=(r+O)/2+~~(m/2)-1;rF(g,LB);XF(g.a,l,Q(K(S(t*(BF(),T)))),Q(K(S(O*T))));rF(g,GB);break;default:if(1==t.f||3==t.f)u=3*h,t=3*y,D=UF(3),j=UF(3),D[0]=L+u,j[0]=O-t,D[1]=o,j[1]=r,D[2]=L-u,j[2]=O+t,\nGF(g,D,j,3);else if(2==t.f||4==t.f){u=3*h;t=3*y;for(m=0;10>m;++m)l=o-(o-L)/10*m,D=r-(r-O)/10*m,j=m/10,DF(g.a,Q(K(S((l+u*j)*(BF(),T)))),Q(K(S((D-t*j)*T))),Q(K(S((l-u*j)*T))),Q(K(S((D+t*j)*T))))}else DF(g.a,Q(K(S(o*(BF(),T)))),Q(K(S(r*T))),Q(K(S(L*T))),Q(K(S(O*T))))}}y=UF(f.p+1);h=UF(f.p+1);for(s=1;s<=f.q;++s)l=f.c[s].i,m=f.c[s].j,o=f.b[l].q,r=f.b[m].q,++h[l],++h[m],y[l]=y[l]/h[l]+r/h[l],y[m]=y[m]/h[m]+o/h[m];VF(g,f.k.v);m=WF(f.k.w);L=UF(f.p+1);r=UF(f.p+1);o=C(YF,q,120,f.p+1,0);for(s=1;s<=f.p;++s)l=\nZF(f,s),(null==l||1>l.length)&&(l=gb),j=f.b[s],3==f.b[s].a&&0aG(y[s]-f.b[s].q)&&(u=!1),2aG(y[s]-f.b[s].q)&&(O=!0),t=l,D=n,f.k.oc&&(F=f.b[s].i,0y&&(y=1),h/=y,y=u/y,u=4*h,t=4*y,D=UF(5),j=UF(5),D[0]=f.b[l].q+u,D[1]=f.b[m].q+u,j[0]=f.b[l].r-t,j[1]=f.b[m].r-t,D[3]=f.b[l].q-u,D[2]=f.b[m].q-u,j[3]=f.b[l].r+t,j[2]=f.b[m].r+t,D[4]=D[0],j[4]=j[0],106!=f.k.k&&dG(g,D,j,5),106==f.k.k&&eG(f,f.c[f.w].i,f.c[f.w].j))){h=0;for(s=1;s<=f.p;++s)0~~(f.p/2))for(s=1;s<=f.p;++s)0e;++e)if(d=a.zb[e])0b&&(b=c);return b}\nfunction pG(a,b,c,d){var e=zE?350:170,f,g,h,j;qG(d);b=rG(a,b);c=rG(a,c);h=e;for(g=1;g<=a.Sb;++g){j=new sG(e);f=a.zb[g];for(var l=b,o=c,m=j,r=void 0,t=void 0,y=void 0,u=void 0,D=r=r=r=u=r=void 0,s=void 0,F=void 0,O=t=y=r=r=void 0,L=void 0,Z=void 0,D=0,F=m.a,s=1;s<=f.q;++s)r=tG(l,o,f.c[s].a,f.c[s].b),ry+F||(r=L*r+Z*u,0>r||(y=Math.sqrt(y),t=Math.sqrt(t),r/=y*t,1<=r||(r=1.5707963267948966-Math.acos(r),r=t*Math.cos(r),r*=r,r=a.yb||0>=a.ub)&&(!a.M&&(a.M=iB(a)),uG(a,a.M));b=new vG;b.b=a.yb;b.a=a.ub;return b}function fF(a){var b;b=eF(a);b.b/=a.xb;b.a/=a.xb;return b}\nfunction wG(a,b,c,d){var e,f;if(!b||xG(b)){if((e=0=e;++e)b=VG(h,d);e=AG(wD(nx(b.substr(0,3)),10)).a;g=AG(wD(nx(b.substr(3,3)),10)).a;VG(h,d);for(b=1;b<=e+g;++b){for(f=n;!(j=VG(h,d),null==j||I(j,"$MOL"));)f+=j+d;a.zb[++a.Sb]=new WG(a,f)}a.xb=1;bF(a,1,e,1,!1);bF(a,e+1,e+g,3,!1);d="readRXNFile"}else{(a.J||a.Vb)&&(a.dc=!1);a.ob=new WG(a,b);if(!a.ob||0==a.ob.p)return!a.ob&&(ht(a,"ERROR - problems in reading/processing MOL input"),\na.Ze(a.Ec.d)),!!a.ob;d=(a.dc||a.Fb)&&a.p||a.Mb;null!=a.t&&a.ob&&XG(a.ob,a.t,!0);null!=a.u&&a.ob&&XG(a.ob,a.u,!1);d||(a.Sb=0,a.xb=1);h=YG(a.ob);if(1>=h||a.J)a.zb[++a.Sb]=a.ob;else{a.Fb=!0;for(b=1;b<=h;++b)a.zb[++a.Sb]=new ZG(a,a.ob,b)}d?a.o=a.Sb:a.o=1;a.ob=a.zb[a.o];a.J?bF(a,1,1,0,!0):bF(a,1,h,0,!d);d=qj}$G(a);null!=d&&(GG(a.r,Od),a.r&&lF(Up(a.r,d),0,0,0),a.hc=!0);a.Ib=!0;c&&a.Ze(a.Ec.d);return!0}function ht(a,b){null==b&&(b=n);a.Gb=!0;a.X=b;a.cg("info: "+b)}\nfunction TF(a,b){var c;c=Math.round(b);100>c&&(!AE[c]&&(AE[c]=new jC(Qe,0,c)),!CE[c]&&kq(CE,c,wA(AE[c])),a.v=AE[c],a.w=CE[c])}function xG(a){var b;if(!a)return!1;b=a.pf();a=0!=(a.e&2);return b||a}function fG(a,b){return(a.mb+(a.Lb?1:0))*b}function KF(a,b){var c,d;d=-1;for(c=0;c=b)switch(a.Kb=!0,a.Hb=!0,ht(a,n),b){case 102:jF(a,!0);DG(a,102);CG(a,102);d=!0;break;case 110:a.Ib=!0;a.k=c;a.pb.a!=a.pb.b&&a.pb.a.b!=a.pb.b?a.q&&(++a.Sb,a.o=a.Sb,a.q=!1):ht(a,"No more undo");if(!(a.pb.a!=a.pb.b&&a.pb.a.b!=a.pb.b))break;aH(a,bH(a.pb));a.r&&lF(Up(a.r,wk),0,0,0);a.hc=!0;a.hc=!1;a.Ib=!0;break;case 111:a.k=c;if(a.pb.a.c)a.q&&(++a.Sb,a.o=a.Sb,a.q=!1);else{ht(a,"No more redo");break}if(!a.pb.a.c)break;e=a.pb;\nif(!e.a.c)throw new wx("Cannot redo. Index is out of range.");if(!e.a.c)throw new wx($e);e.a=e.a.c;aH(a,e.a.a);a.r&&lF(Up(a.r,sj),0,0,0);a.hc=!0;a.hc=!1;a.Ib=!0;break;case 214:wG(a,null,a.R.a,a.R.b);a.k=c;break;case 151:case 152:case 154:case 153:e=null;a.k=c;switch(b){case 152:e=cH(a.jc);break;case 151:e=dH(a.jc);break;case 154:e=a.jc;e.a=e.c;e=cH(e);break;case 153:e=a.jc,e.a=-1,e=dH(e)}null==e?ht(a,"No more molecules in SDF buffer"):(mF(a),a.Vb=!0,eH(a,e,!1),a.Vb=!1,I(a.X,n)&&(ht(a,"MOL n. "+(a.jc.a+\n1)+" of "+a.jc.c),d=!0,a.r&&lF(Up(a.r,"SDFstack"),0,0,0),a.hc=!0,a.hc=!1));break;case 101:oq(4,new fH(a));a.k=c;break;case 107:oq(2,new gH(a));break;case 114:oq(3,new hH(a));a.k=c;break;case 103:a.Mb=!0;a.k=c;break;case 105:a.A&&a.Bb&&(a.Bb=!1,iH(a.ob),a.Ib=!0,a.r&&lF(Up(a.r,xg),0,0,0),d=a.hc=!0,a.k=c);a.I=1;break;case 109:a.k=c;e=jH(a.ob);if(2==e){ht(a,"Copying the agent not possible !");break}d=dF(a.ob);a.Ib=!0;a.ob=new HE(a.ob);d=Vu((a.M.b-a.mb)/2-d.a);for(e=1;e<=a.ob.p;++e)hF(a.ob.b[e],2*d/a.xb,\n0/a.xb);a.zb[++a.Sb]=a.ob;a.o=a.Sb;a.r&&lF(Up(a.r,"reactionCopy"),0,0,0);d=a.hc=!0;DG(a,109);CG(a,109);break;case 104:d=IE(a);break;case 213:a.k=c;if(!a.S){var f,g,h,j,l;l=new wC;for(f=a.U,g=0,h=f.length;g=b&&(a.n=33+(b-1301)),0=a.k)a.cb=2,oH(a.ob),d=!0,XE(a,jg,a.o,0,a.ob.w);else if(202==a.k||203==a.k||204==a.k)if(0=g;++g){f=0;for(c=1;c<=a.Sb;++c)jH(a.zb[c])==g&&(h[g][++f]=c);h[g][0]=f}e+=Ka;e+=rH(h[1][0],3)+rH(h[3][0],3)+ca;for(c=1;c<=h[1][0];++c)e+=Ha+sH(a.zb[h[1][c]],d,b);for(c=1;c<=h[3][0];++c)e+=Ha+sH(a.zb[h[3][c]],d,b)}else{1f&&(f=e.b[b].r),e.b[b].qb;++b)kq(g.b,g.c++,null),kq(f.b,f.c++,null);for(b=1;b<=e.p;++b)j=e.b[b].b,null==j||0==j.length||(I(j,eg)?Am(c,new pB(b)):0==j.indexOf("mix")?(j=wD(ox(j,3),10),l=null,f.c>j&&(l=($B(j,f.c),f.b[j])),null==l?h=new Gm:h=l,Am(h,new pB(b)),fC(f,j,h)):0==j.indexOf(Xi)&&(j=wD(ox(j,2),10),l=null,g.c>j&&(l=\n($B(j,g.c),g.b[j])),null==l?h=new Gm:h=l,Am(h,new pB(b)),fC(g,j,h)));d+=xH(nf,c);if(0a.M.a-Q(K(S(a.mb*a.nb))))return!1;var b=a.Cc,f=a.Dc,g,h,j,l;l=0;if(0>b||0>f||f>a.ub||b>a.yb)b=0;else if(1==a.Sb)b=a.o;else{b=rG(a,b);f=rG(a,f);j=1.7976931348623157E308;for(h=1;h<=a.Sb;++h){g=a.zb[h];for(var o=void 0,m=void 0,r=void 0,m=1.7976931348623157E308,o=1;o<=g.p;++o)r=tG(b,f,g.b[o].q,g.b[o].r),r=a.k)a.cb=2,oH(a.ob),KE(a,ig,a.ob.v);else if(230==a.k)a.cb=3,KE(a,kg,a.ob.v);\nelse if(233<=a.k&&262>a.k)BH(a.ob,!1),KE(a,hg,a.ob.v),a.cb=3;else if(107==a.k){if(a.bc.b)return!0;nH(a.ob,a.ob.v,Uq(a.bc.e.Tc.a.pb,yk));a.ob.j=!0;KE(a,"addAtomQuery",a.ob.v)}else if(105==a.k)(c=CH(a.ob))?KE(a,"markAtom",a.ob.v):KE(a,"unMarkAtom",a.ob.v);else if(113!=a.k)if(300c.length&&(c=Sf),nH(a.ob,a.ob.v,c)),KE(a,Kj+a.n,a.ob.v)}else e=!1}else if(0<\na.ob.w)if(a.eb.c=a.o,104==a.k)IE(a);else if(106==a.k){c=a.ob;d=a.ob.w;if(0d&&(d=b);if(0==d)break;JE(c,d);c.a[d]=0}ME(a.ob);XE(a,"delBondGroup",a.o,0,a.ob.w);a.ob.w=0}else if(201==a.k)DH(a.ob,a.ob.w),XE(a,"setBondStereo",a.o,0,a.ob.w);else if(202==a.k||205==a.k)1==a.ob.c[a.ob.w].c&&0==a.ob.c[a.ob.w].f?(a.ob.c[a.ob.w].c=2,XE(a,Lj,a.o,0,a.ob.w)):(a.ob.c[a.ob.w].c=1,a.ob.c[a.ob.w].f=\n0,XE(a,Mj,a.o,0,a.ob.w)),a.ob.c[a.ob.w].f=0;else if(203==a.k)a.ob.c[a.ob.w].c=2,a.ob.c[a.ob.w].f=0,ME(a.ob),XE(a,Lj,a.o,0,a.ob.w);else if(204==a.k)a.ob.c[a.ob.w].c=3,a.ob.c[a.ob.w].f=0,ME(a.ob),XE(a,Nj,a.o,0,a.ob.w);else if(206<=a.k&&229>=a.k)a.cb=2,oH(a.ob),XE(a,jg,a.o,0,a.ob.w),ME(a.ob);else if(107==a.k){if(!a.bc.b)return!0;c=Uq(a.bc.e.Tc.a.pb,yk);a.ob.c[a.ob.w].c=9;a.ob.c[a.ob.w].d=c;XE(a,"setQueryBond",a.o,0,a.ob.w)}else 105==a.k?(c=a.ob,b=a.ob.w,c.k.gb=!0,c.k.sc?(c.i=-1,d=c.c[b].i,b=c.c[b].j,\nf=c.b[d].c,h=c.b[b].c,j=4,f==h&&0=a.k)return!1;++a.Sb;a.o=a.Sb;a.zb[a.Sb]=new kF(a);a.ob=a.zb[a.Sb];a.eb.c=a.o;202<=a.k&&204>=a.k||205==a.k?(EH(a.ob,null),a.ob.q=0,FH(a.ob,1,c/a.xb,d/a.xb),a.ob.v=1,a.ob.x=1,a.cb=1,b=a.ob,pH(b,b.v,0),205==a.k?(FH(a.ob,2,(c+21.65)/a.xb,(d-12.5)/a.xb),a.ob.e[0]=1,a.ob.e[1]=2,a.ob.r=1,XE(a,"addChain",a.o,0,a.ob.w)):XE(a,\ngg,a.o,0,a.ob.w)):206<=a.k&&229>=a.k?(a.ob.z=rG(a,c),a.ob.A=rG(a,d),a.cb=2,oH(a.ob),a.r&&lF(Up(a.r,ig),0,0,0),a.hc=!0):300c.length&&(c=Sf),nH(a.ob,1,c)),KE(a,"addAtom",a.ob.v)):230==a.k?(PG(a,null,!0),a.r&&lF(Up(a.r,kg),0,0,0),a.hc=!0):233<=a.k&&262>a.k?(EH(a.ob,null),a.ob.q=0,FH(a.ob,1,c/a.xb,d/a.xb),a.ob.v=1,BH(a.ob,!0),a.r&&lF(Up(a.r,hg),0,0,0),a.hc=!0):hD()}else e=!1;e&&GH(a)}return a.Ab=\ne}\nfunction HH(a,b,c,d){var e,f,g,h;hD();if(!a.Db||IH(b))return!0;a.Gb=!1;c-=Q(K(S(fG(a,a.nb))));d-=Q(K(S(gG(a,a.nb))));f=rG(a,c-a.Cc);g=rG(a,d-a.Dc);e=rG(a,c);h=rG(a,d);if(2==a.cb||3==a.cb||9==a.cb)return!0;if(1==a.cb){f=!1;a.zb[a.eb.c].v=0;--a.ob.p;g=c;var b=d,j=a.Nb;0>g||0>b||b>a.ub||g>a.yb?qG(j):pG(a,g,b,j);++a.ob.p;if(0g&&(g=1);b/=g;j/=g;o=g/2/Math.tan(0.5235987755982988);m=e-f.b[l].q;r=h-f.b[l].r;l=-g/2+m*j+r*b;b=r*j-m*b;if(0>l)if(1f.b[2].r-f.b[1].r&&0h-f.b[1].r&&(f.b[2].r=f.b[1].r-g/2),0>f.b[2].q-f.b[1].q&&0e-f.b[1].q&&(f.b[2].q=f.b[1].q-0.866*g);else{if(2==f.b[f.e[0]].j&&(o=f.b[f.e[0]].p[1],o==f.e[1]&&(o=f.b[f.e[0]].p[2]),j=f.b[f.e[0]].q-f.b[o].q,b=f.b[f.e[0]].r-f.b[o].r,g=Math.sqrt(j*j+b*b),1>g&&(g=1),b/=g,j/=g,m=e-f.b[o].q,r=h-f.b[o].r,e=r*j-m*b,m=f.b[f.e[1]].q-f.b[o].q,r=f.b[f.e[1]].r-f.b[o].r,h=r*j-m*b,0h||0>e&&0=b?0-b:b)>e){++f.r;if(100g&&(g=1),FH(f,f.p,f.b[f.x].q+25*(j/g),f.b[f.x].r+25*(b/g))}a.B=!0}else if(113==a.k&&0c||0>d||d>a.ub||c>a.yb)&&5!=a.cb))e=fF(a),h=a.ob,j=dF(h),b=j.a,j=j.b,0>f&&be.b||0>g&&je.a||MH(h,f,g),a.cb=5;PE(a,!1);a.Ib=!0;mG(a);a.Cc=c;a.Dc=d;return!0}\nfunction BG(a,b,c,d){var e,f;if(!a.J||a.Vf().a||a.Wf().a||a.K)if(f=!1,e=LF(a,c,d),e!=a.Cb&&(f|=DG(a,a.Cb),f|=CG(a,e),a.Cb=e),!xG(b)){c-=Q(K(S(fG(a,a.nb))));d-=Q(K(S(gG(a,a.nb))));b=c;c=a.Nb;0>b||0>d||d>a.ub||b>a.yb?qG(c):pG(a,b,d,c);113==e&&0d.b[e].j&&(SH(d,null),b=d.e[d.r-1],d.c[d.q].i=e,d.c[d.q].j=b,TH(d.b[e],b),TH(d.b[e],b)),JE(d,d.p)),d.u=!1,a.hc=!0;else if(0!=a.eb.c&&a.o!=a.eb.c){JE(a.ob,a.ob.p);b=a.ob.x;c=a.eb.a+a.ob.p;e=a.zb[a.eb.c];d=new tH(a,z(UH,q,119,[null,a.ob,e]),2);d.b[0]=new VH;WH(d,b,c,1);b=C(UH,\nq,119,a.zb.length,0);for(f=0,c=0;fd.c[b].c?(++d.c[b].c,d.c[b].f=0):ht(d.k,"Maximum allowed bond order is 3 !")):6==d.b[e].j?(--d.q,YH(d,d.x),ht(d.k,"Not possible connection !")):(d.c[d.q].j=e,YH(d,d.x),b=d.x,TH(d.b[e],b),TH(d.b[b],e),ZH(d.c[d.q],d.b)));iF(a.ob);a.B&&(d=a.pb,d.a!=d.b&&d.a.b!=d.b&&(e=d.a.c,bH(d),d.a.c=e),\nXE(a,gg,a.o,0,a.ob.w),a.B=!1);d=!0}else 5==a.cb&&(iF(a.ob),d=a.hc=!0);0=b&&0==c||b==c&&a.o==a.Zb)return-1;0>=b&&0Vb))for(;xc=nb[ad]*nb[ad];)0==xc%nb[ad]?fb=!1:++ad;if(fb){G[++Zb]=Fv(xc);if(Zb>=Vb)break;Ocha&&(ha=0),0>pc&&(pc=0),xd=28*ha+pc));Jc=0;0!=m.b[P].n&&(-2>m.b[P].n?Jc=1:-2==m.b[P].n?Jc=2:-1==m.b[P].n?Jc=3:1==m.b[P].n?Jc=4:2==m.b[P].n?Jc=5:2Eb&&(Eb=10-Eb));Dc=126;N=je;N+=126*m.b[P].i;Dc*=7;N+=Jc*Dc;Dc*=7;0!=Eb&&(N+=Eb*Dc);Dc*=7;N+=xd*Dc;Dc*=783;N+=m.b[P].j*Dc;U[P]=Fv(N)}for(oc=0;!hI(m,ba,U);){Zc=!1;for(P=1;P<=m.p;++P)ba[P]!=Ua[P]&&(Ua[P]=ba[P],Zc=!0);if(Zc){for(P=1;P<=m.p;++P){U[P]=Lk;for(Za=1;Za<=m.b[P].j;++Za)U[P]=Jv(U[P],Fa[ba[m.b[P].p[Za]]])}oc=\n0}else if(0m.c[P].j&&(Ub=m.c[P].i,m.c[P].i=m.c[P].j,m.c[P].j=Ub,1==m.c[P].f?m.c[P].f=3:2==m.c[P].f?m.c[P].f=4:3==m.c[P].f?m.c[P].f=1:4==m.c[P].f&&(m.c[P].f=2));for(P=1;Pm.a[u])&&O!=ra[u]){nc=!0;for(Ia=1;Ia<=ya;++Ia)if(da[Ia]==u&&Fb[Ia]==O||da[Ia]==O&&Fb[Ia]==u){nc=!1;break}nc&&(++ya,da[ya]=u,Fb[ya]=O)}}else Y[++M]=O;if(0==M){if(Ab==m.p)break;u=ea[sb--]}else if(1==M)ra[Y[1]]=u,u=Y[1],m.a[u]=++Ab;else{ea[++sb]=u;s=0;for($=1;$<=M;++$)if(Z=XH(m,Y[$],u),!Kb[Z]){s=Y[$];break}if(0==s)for($=1;$<=M;++$)if(Z=XH(m,Y[$],u),2==m.d[Z]||3==m.d[Z]){s=Y[$];break}0==s&&(s=\nY[1]);ra[s]=u;u=s;m.a[s]=++Ab}}ra=UF(m.p+1);y=UF(m.p+1);Uc=[];Yc=[];F=Ab=sb=0;for($=1;$<=m.p;++$)if(1==m.a[$]){u=$;break}b:for(;;){0m.b[Lb].j||4Wa.b[bd].j||3Nb[ub]&&(lc=R,R=ub,ub=lc);ee=\nR;0==R&&(ee=ub,ib=!0);for(ld=1;ld<=Wa.b[bd].j;++ld)Qc=Wa.b[bd].p[ld],Qc!=zc[sd-1]&&(0==La?La=Qc:jb=Qc);0Nb[jb]&&(lc=La,La=jb,jb=lc);fd=La;0==La&&(fd=jb,Ge=!0);Xd=0Xd+mc?-(Xd+mc):Xd+mc)||0!=ng||0!=Ef?ht(Wa.k,"Bad stereoinfo on allene !"):(Ac=Wa.b[zc[sd-1]].q-Wa.b[bd].q,Ad=Wa.b[zc[sd-1]].r-Wa.b[bd].r,cd=Math.sqrt(Ac*Ac+Ad*Ad),0.001>cd&&(cd=0.001),0<(Wa.b[fd].r-\nWa.b[zc[sd-1]].r)*(Ac/cd)-(Wa.b[fd].q-Wa.b[zc[sd-1]].q)*(Ad/cd)?kc[uc]=1:kc[uc]=-1,ib&&(kc[uc]*=-1),Ge&&(kc[uc]*=-1),ee==R&&0>Xd&&(kc[uc]*=-1),ee==ub&&0>mc&&(kc[uc]*=-1),Nb[ee]>Nb[fd]&&(kc[uc]*=-1))}}else c:{var ab=m,qc=Lb,Id=Wb,Jd=Mb,Kd=da,Ob=Fb,gd=oa,Bd=Ta,ke=void 0,Cd=void 0,Yd=void 0,rc=void 0,bb=void 0,vc=void 0,pb=void 0,Ue=void 0,Ld=void 0,Rc=void 0,Pa=void 0,Oa=void 0,Sc=void 0,$b=void 0,Tc=void 0,aa=void 0,Zd=void 0,Oa=UF(4),$b=UF(4),Dd=void 0,Md=void 0,le=void 0,Ve=void 0,Vf=void 0,mf=void 0,\nmf=-1;0bb;++bb)0>=Oa[bb]||(ke=XH(ab,qc,Oa[bb]),$b[bb]=lI(ab,ke,qc),0<$b[bb]?\n(++Rc,Zd=Oa[bb],vc=Oa[bb]):0>$b[bb]?(++pb,rc=Oa[bb],vc=Oa[bb]):Ue=Oa[bb]);Ld=Rc+pb;aa=UF(4);Tc=0;if(3==ab.b[qc].j){if(1==Rc&&1==pb||3==Ld&&0bb;++bb)ke=XH(ab,qc,Pa[bb]),Cd[bb]=lI(ab,ke,qc);if(4==Ld){if(0==Rc||0==pb){ht(ab.k,"Error in C4 stereospecification !");break c}if(1==Rc||1==pb)aa[0]=Pa[0],aa[1]=Pa[3],aa[2]=Pa[2],aa[3]=Pa[1],Tc=Cd[0];else{for(bb=0;4>bb;++bb)-1==Cd[bb]&&(Cd[bb]=0);Ld=2}}else if(3==Ld)if(3==Rc||3==pb)aa[0]=Pa[0],aa[1]=Pa[3],aa[2]=Pa[2],aa[3]=Pa[1],0bb;++bb)Cd[bb]==Yd&&(Cd[bb]=0);Ld=2}if(2==Ld)if(1==Rc&&1==pb)Pa[1]==rc?(Pa[1]=Pa[2],Pa[2]=\nPa[3]):Pa[2]==rc&&(Pa[2]=Pa[3]),aa[0]=Zd,aa[1]=rc,aa[2]=Pa[2],aa[3]=Pa[1],Tc=1;else{if(Cd[0]==Cd[1]||Cd[1]==Cd[2]){ht(ab.k,"Error in C4 stereospecification ! 2/0r");break c}0!=Cd[0]?(aa[0]=Pa[0],aa[1]=Pa[2],aa[2]=Pa[1],aa[3]=Pa[3]):(aa[0]=Pa[1],aa[1]=Pa[3],aa[2]=Pa[2],aa[3]=Pa[0]);1=Ye&&(nd=!0,za=(qE(),xE)[Ye]);nd&&(0!=fe?za=Uf+fe+za:za=Uf+za,1==td[We]?za+=Fd:-1==td[We]&&(za+="@@"),1==Ff?za+=Pe:1me?-me:me)&&(za+=0>me?-me:me)),og&&(za+=dd+Jg),za+=bg);xp(Xe.a,za);for(J=1;J<=ya;++J)if(da[J]==u||Fb[J]==u)D=Fb[J],D==u&&(D=da[J]),L[u]",!0);j=-1c;++c)(d=b.d[c])?a.zb[c]=new HE(d):a.zb[c]=null;0b||b>a.Sb?(ht(a,"ERROR - invalid mol index: "+b),a.Ze(a.Ec.d),null):a.zb[b]}function $G(a){var b,c,d;b=YE(a);for(d=1;d<=a.Sb;++d)c=a.zb[d],c.o=b}function uI(a,b){b!=a.nb&&(a.nb=b,a.fg(),a.Ze(a.Ec.d))}function vI(a,b){var c,d,e;if(b!=a.xb){c=fF(a);a.xb=b;d=fF(a);e=Q(K(S((d.b-d.c)/2-(c.b-c.c)/2)));d=Q(K(S((d.a-d.d)/2-(c.a-c.d)/2)));for(c=1;c<=a.Sb;++c)MH(a.zb[c],e,d),iF(a.zb[c]);a.Ib=!0;a.Ze(a.Ec.d)}}\nfunction aF(a,b){var c;c=-1;I(b,"Select substituent")?(c=202,b=n):I(b,Bb)?c=235:I(b,Cb)?c=240:I(b,zb)?c=260:I(b,Qb)?c=261:I(b,Yb)?c=241:I(b,Jb)?c=233:I(b,Ib)?c=236:I(b,Hb)?c=237:I(b,Xb)?c=234:I(b,Sb)?c=243:I(b,ac)?c=252:I(b,Rb)?c=244:I(b,dc)?c=239:I(b,"-PO3H2")?c=251:I(b,yb)?c=242:I(b,wb)?c=245:I(b,xb)&&(c=238);0=a.mb-1)for(g=f.b.b;j>=a.mb-1&&1=a.k&&(a.k=213);for(c=1;14>=c;++c)qF(a,b,c,1),qF(a,b,c,2);a.k=d;hG(a.Ec,a.wc.a,0,0)}var f;if(a.Hb){QF(a.fb.b.a,a.nb/T);b=a.fb.b;d=a.mb+(a.Lb?1:0);c=(a.M.a-Q(K(S(gG(a,a.nb)))))/a.nb;f=c-a.mb;rF(b,sE);AF(b.a,Q(K(S(0*(BF(),T)))),Q(K(S(0*T))),Q(K(S(d*T))),Q(K(S(c*\nT))));a.Lb?(rF(b,(zB(),EB)),e=MF*(a.mb+(a.Lb?1:0))+3,f>e&&(CF(b,0,e,a.mb-1,e),DF(b.a,Q(K(S(0*T))),Q(K(S(e*T))),Q(K(S(0*T))),Q(K(S((c-1)*T)))),CF(b,a.mb-1,e,a.mb-1,f),CF(b,a.mb-1,f,d,f))):(rF(b,tE),DF(b.a,Q(K(S(0*T))),Q(K(S(0*T))),Q(K(S(0*T))),Q(K(S((c-1)*T)))),CF(b,0,MF*a.mb,c-1,MF*a.mb),rF(b,QB(sE)),DF(b.a,Q(K(S((d-1)*T))),Q(K(S(0*T))),Q(K(S((d-1)*T))),Q(K(S((f+1)*T)))));DF(b.a,Q(K(S(0*T))),Q(K(S((c-1)*T))),Q(K(S(d*T))),Q(K(S((c-1)*T))));for(c=3;c<=MF+2;++c)qF(a,b,1,c);b=Q(K(S(gG(a,a.nb))));hG(a.Ec,\na.fb.a,0,b)}a.Jb&&(QF(a.fc.b.a,a.nb/T),d=a.fc.b,c=a.Lb?1:3,b=(a.M.a-Q(K(S(gG(a,a.nb))))-Q(K(S(a.mb*a.nb))))/a.nb,a.Lb?(rF(d,(zB(),EB)),AF(d.a,Q(K(S(0*(BF(),T)))),Q(K(S(0*T))),Q(K(S(c*T))),Q(K(S(b*T))))):(rF(d,QB(sE)),DF(d.a,Q(K(S((c-1)*(BF(),T)))),Q(K(S(0*T))),Q(K(S((c-1)*T))),Q(K(S(b*T)))),rF(d,sE),DF(d.a,Q(K(S((c-2)*T))),Q(K(S(0*T))),Q(K(S((c-2)*T))),Q(K(S(b*T)))),rF(d,tE),DF(d.a,Q(K(S((c-3)*T))),Q(K(S(0*T))),Q(K(S((c-3)*T))),Q(K(S(b*T))))),b=a.M.b-Q(K(S((a.Lb?1:3)*a.nb))),c=Q(K(S(gG(a,a.nb)))),\nhG(a.Ec,a.fc.a,b,c))}}function ot(a,b){a.A?0==b&&(a.I=-1,ht(a,Ug),mG(a)):(a.gb?a.I=b:-1a.I?a.I=10*a.I+b:a.I=b,a.gb=!1,0==a.I?(a.I=-1,ht(a,Ug)):ht(a,a.I+fa),mG(a))}function uG(a,b){var c,d;d=b.b;c=b.a;a.J||(d-=Q(K(S(fG(a,a.nb))))+Q(K(S((a.Lb?1:3)*a.nb))),c-=Q(K(S(gG(a,a.nb))))+Q(K(S(a.mb*a.nb))));1>d&&(d=1);1>c&&(c=1);a.yb=Vu(d);a.ub=Vu(c)}function EE(a){qE();return 14<=a&&20>=a?1:21<=a&&28>=a?2:29<=a&&31>=a?3:0}w(556,454,am);_.vf=function(a){OE(this,a)};_.Uf=yI;\n_.Vf=function(){return UE(),null!=this.Pb?VE:WE};_.Wf=function(){return UE(),UE(),WE};_.Xf=SA;_.Yf=function(a,b,c){return eB(this,b,c)};_.Zf=SA;_.$f=function(){hD()};_._f=cC;_.ag=zI;_.bg=cC;_.cg=function(){hD()};_.dg=function(){return jt(this,!0,!1)};\n_.wf=function(a){var b,c;if(this.s)if(c=a.c,b=a.f,a=a.i,c=(100+2*c)/100,this.J||!(bthis.M.a-Q(K(S(this.mb*this.nb)))||b>this.M.b-Q(K(S((this.Lb?1:3)*this.nb))))){if(b=this.xb*c,b>this.xb&&10>=b||b=b&&uI(this,b)};_.Ze=function(){xI(this)};\n_.eg=function(a){this.Tb&&(null!=a&&0j&&(j=0);h=new cJ(g,h,j,L);dJ(h);Am(g.k,h);dE(f,L.pb);aE(f,g.pb)}else XD("JSME initialization error: HTML id "+a+" not found.")}function eJ(){return bv(null)}\nfunction fJ(a){return bv(a)}w(560,1,Hl,VI,XI,YI,WI);_.hg=function(a){tx(this.d,new gJ(this,a),(Hs(),Hs(),Is))};_.ig=function(a){tx(this.d,new hJ(this,a),(qt(),qt(),rt))};_.jg=function(a){tx(this.d,new iJ(this,a),(wt(),wt(),xt))};_.kg=function(a){tx(this.d,new jJ(this,a),(zt(),zt(),At))};_.lg=function(a){oq(2,new kJ(this.b,a))};_.mg=function(){jF(this.b,!0)};_.ng=function(){Gq((Dq(),Eq),new lJ(this))};_.og=function(){var a,b,c;c=[];for(b=new vu(this.d.a);b.ba&&(b.x=a,TF(b,a),lG(b))};_.Xg=function(a,b){var c=this.b,d;d=tI(c,a);1>b||b>d.p?(ht(c,"ERROR - invalid atom index: "+b),mG(c)):(d.v=b,GH(c))};_.Yg=function(a){FI(this.b,ge,a)};_.Zg=function(a,b){FI(this.b,a,b)};_.he=function(a){hx(this.d,a);UI(this)};_.$g=function(a){this.b.V=a};_._g=function(a){uI(this.b,a)};_.ah=function(a){var b=this.b;b.tb=a;lG(b)};_.bh=function(a){var b=this.b;b.wb=a;lG(b)};_.ch=function(a){vI(this.b,a)};\n_.dh=function(a){this.b.Pb=a};_.eh=function(a){this.b.Qb=a};_.fh=function(a){var b=this.b;b.Wb=a;b.F=nF(b,!1)};_.gh=function(a){this.b.Yb=a};_.hh=function(a,b){ix(this.d,a,b);UI(this)};_.ih=function(a,b,c){c&&ix(this.c,a,b);ix(this.d,a,b);UI(this)};_.jh=function(a,b){jx(this.d,a,b);UI(this)};_.kh=function(a,b,c){c&&jx(this.c,a,b);jx(this.d,a,b);UI(this)};_.lh=function(a){aF(this.b,a)};_.mh=function(a,b){var c=this.b,d;c.q=!1;d=c.sc;c.sc=!1;c.uc=new qI(c,a);c.sc=d;c.k=253;ht(c,b);mG(c)};\n_.ie=function(a){px(this.c.pb,a)};_.nh=function(a){this.b.i=a};_.je=function(a){this.d.pb.style[Dk]=a;UI(this)};_.oh=function(a){LH(this.b,a)};_.ph=function(){return FE(this.b)};_.a=-1;_.b=null;_.c=null;_.d=null;var ZI=0;function lJ(a){this.a=a}w(561,1,{},lJ);_.pd=function(){var a,b;for(b=new vu(this.a.d.a);b.b=a.c.length)return!1;c=a.c[a.b];g=c.getAttribute(Dk)||n;b=c.getAttribute(Qh)||n;f=c.getAttribute(Ji)||n;e=c.getAttribute(Th)||n;var h,j,l;l={};for(d=0;d=d&&b=a;return c?65536+((d&1023)<<10)+(e&1023):d}function NJ(a,b){return 2>b||36b?b:10)?a-48:97<=a&&aa?-a:a):a}\nfunction QJ(a,b){var c;c=new OJ;c.d=we+(RJ(0!=a?-a:0)?PJ(0!=a?-a:0):n+Lp(c));SJ(0!=a?-a:0)&&TJ(0!=a?-a:0,c);c.b=4;c.a=b;return c}function V(a){var b;b=new OJ;b.d=we+(RJ(a)?PJ(a):n+Lp(b));SJ(a)&&TJ(a,b);return b}function UJ(a,b){var c;c=new OJ;c.d=we+(RJ(a)?PJ(a):n+Lp(c));SJ(a)&&TJ(a,c);c.b=b?8:0;return c}function VJ(){var a;a=new OJ;a.d=we+(RJ(0)?PJ(0):n+Lp(a));SJ(0)&&TJ(0,a);a.b=2;return a}function WJ(a){var b;b=new OJ;b.d=we+(RJ(a)?PJ(a):n+Lp(b));SJ(a)&&TJ(a,b);b.b=1;return b}\nfunction SJ(a){return typeof a==Qi&&0b||36c||2147483647a)return 0;if(0==a)return 32;b=-(a>>16)>>16&16;c=16-b;a>>=b;b=a-256>>16&8;c+=b;a<<=b;b=a-4096>>16&4;c+=b;a<<=b;b=a-16384>>16&2;c+=b;a=a<>14;return c+2-(a&~(a>>1))}function ov(a){var b,c;if(0==a)return 32;c=0;for(b=1;0==(b&a);b<<=1)++c;return c}function dm(a){var b,c,d;b=C(cK,Fl,-1,8,1);c=(dK(),eK);d=7;if(0<=a)for(;15>=4;else for(;0>=4;b[d]=c[a&15];return fK(b,d,8)}\nfunction AG(a){var b,c;return-129a?(b=a+128,c=(gK(),hK)[b],!c&&(c=hK[b]=new pB(a)),c):new pB(a)}w(597,594,{88:1,93:1,99:1,101:1},pB);_.eQ=function(a){return H(a,99)&&a.a==this.a};_.hC=Tv;_.tS=bK;_.a=0;function gK(){gK=x;hK=C(OH,q,99,256,0)}var hK;function aG(a){return 0>=a?0-a:a}function bG(a){return 0>a?-a:a}function Um(a,b){return a>b?a:b}function S(a){return Math.round(a)}function iK(a){return Math.sqrt(a)}function gD(){}function ku(a){this.f=a}\nw(601,136,{88:1,96:1,100:1,104:1,105:1},gD,ku);function dK(){dK=x;eK=z(cK,Fl,-1,[48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122])}var eK;function ZJ(a){this.f=a}w(603,596,{88:1,96:1,98:1,102:1,104:1,105:1},ZJ);function MJ(a,b){return a.charCodeAt(b)}function jK(a,b){return-1!=a.lastIndexOf(b)&&a.lastIndexOf(b)==a.length-b.length}function I(a,b){return!H(b,1)?!1:""+a==b}function lx(a,b){return a.indexOf(b)}\nfunction uD(a,b,c){return a.indexOf(b,c)}function uA(a,b){return a.lastIndexOf(b)}function RI(a,b,c){var d;for(d=0;0<=(d=c.indexOf(Xf,d));)36==c.charCodeAt(d+1)?c=c.substr(0,d-0)+Da+ox(c,++d):c=c.substr(0,d-0)+ox(c,++d);return a.replace(RegExp(b,Eh),c)}\nfunction kK(a,b){for(var c=RegExp(b,Eh),d=[],e=0,f=a,g=null;;){var h=c.exec(f);if(null==h||f==n){d[e]=f;break}else d[e]=f.substring(0,h.index),f=f.substring(h.index+h[0].length,f.length),c.lastIndex=0,g==f&&(d[e]=f.substring(0,1),f=f.substring(1)),g=f,e++}if(0fa&&a[a.length-1]>fa?a:a.replace(/^(\\s*)/,n).replace(/\\s*$/,n)}function fK(a,b,c){a=a.slice(b,c);return String.fromCharCode.apply(null,a)}\nfunction lK(a,b,c){if(128>c)return a[b]=(c&127)<<24>>24,1;if(2048>c)return a[b++]=(c>>6&31|192)<<24>>24,a[b]=(c&63|128)<<24>>24,2;if(65536>c)return a[b++]=(c>>12&15|224)<<24>>24,a[b++]=(c>>6&63|128)<<24>>24,a[b]=(c&63|128)<<24>>24,3;if(2097152>c)return a[b++]=(c>>18&7|240)<<24>>24,a[b++]=(c>>12&63|128)<<24>>24,a[b++]=(c>>6&63|128)<<24>>24,a[b]=(c&63|128)<<24>>24,4;if(67108864>c)return a[b++]=(c>>24&3|248)<<24>>24,a[b++]=(c>>18&63|128)<<24>>24,a[b++]=(c>>12&63|128)<<24>>24,a[b++]=(c>>6&63|128)<<24>>\n24,a[b]=(c&63|128)<<24>>24,5;throw new Pm("Character out of range: "+c);}function mx(a){var b;return 65536<=a?(b=56320+(a-65536&1023)&65535,String.fromCharCode(55296+(a-65536>>10&1023)&65535)+String.fromCharCode(b)):String.fromCharCode(a&65535)}function mK(a){var b,c,d,e,f;e=a.length;for(d=b=0;dc?++b:2048>c?b+=2:65536>c?b+=3:2097152>c?b+=4:67108864>c&&(b+=5);b=C(nK,Ol,-1,b,1);for(d=f=0;da||a>=b)&&FK(a,b)}function FK(a,b){throw new KJ("Index: "+a+", Size: "+b);}w(619,612,xl);\n_.wh=function(){throw new BD("Add not supported on this list");};_.qh=function(a){this.wh(this.Pf(),a);return!0};_.eQ=function(a){return EK(this,a)};_.hC=function(){var a,b,c;b=1;for(a=this.ue();a.Vd();)c=a.Wd(),b=31*b+(null==c?0:Kp(c)),b=~~b;return b};_.ue=function(){return new vu(this)};_.yh=function(){return this.zh(0)};_.zh=function(a){return new GK(this,a)};_.Ah=function(){throw new BD("Remove not supported on this list");};function DK(a){return a.b=a.d.Pf())throw new Px;return a.d.xh(a.c=a.b++)}function AK(a){if(0>a.c)throw new nA;a.d.Ah(a.c);a.b=a.c;a.c=-1}function vu(a){this.d=a}w(620,1,{},vu);_.Vd=function(){return DK(this)};_.Wd=function(){return wu(this)};_.Xd=function(){AK(this)};_.b=0;_.c=-1;_.d=null;function GK(a,b){var c;this.d=this.a=a;c=a.Pf();(0>b||b>c)&&FK(b,c);this.b=b}w(621,620,{},GK);_.Bh=function(){return 0=this.b)throw new Px;return this.a.xh(this.c=--this.b)};_.a=null;\nfunction HK(a){a=new xK(a.b.a);return new IK(a)}function JK(a,b){this.a=a;this.b=b}w(622,614,Il,JK);_.rh=KK;_.ue=function(){return HK(this)};_.Pf=function(){return this.b.a.d};_.a=null;_.b=null;function IK(a){this.a=a}w(623,1,{},IK);_.Vd=function(){return DK(this.a.a)};_.Wd=function(){return(this.a.b=wu(this.a.a)).th()};_.Xd=function(){zK(this.a)};_.a=null;function LK(a){a.b=C(MK,q,0,0,0)}function vC(a,b,c){(0>b||b>a.c)&&FK(b,a.c);a.b.splice(b,0,c);++a.c}\nfunction Am(a,b){kq(a.b,a.c++,b);return!0}function zw(a,b){$B(b,a.c);return a.b[b]}function vz(a,b){for(var c=0;ca.c&&kq(b,a.c,null);return b}\nfunction Gm(){LK(this)}function eC(a){LK(this);this.b.length=a}function tB(a){LK(this);a=Nu(a.b,a.c);Array.prototype.splice.apply(this.b,[0,0].concat(a));this.c=this.b.length}w(627,619,Zl,Gm,eC,tB);_.wh=function(a,b){vC(this,a,b)};_.qh=function(a){return Am(this,a)};_.mg=function(){this.b=C(MK,q,0,0,0);this.c=0};_.rh=function(a){return-1!=vz(this,a)};_.xh=function(a){return zw(this,a)};_.Mf=function(){return 0==this.c};_.Ah=function(a){return NK(this,a)};_.sh=function(a){return tm(this,a)};_.Pf=Ns;\n_.c=0;function Eu(){Eu=x;Fu=new OK}var Fu;function OK(){}w(630,619,sl,OK);_.rh=zI;_.xh=function(){throw new Mx;};_.Pf=function(){return 0};function PK(){this.a=new Date}function QK(a){return 10>a?wc+a:n+a}w(633,1,{88:1,92:1,93:1,106:1},PK);_.eQ=function(a){return H(a,106)&&Cv(K(this.a.getTime()),K(a.a.getTime()))};\n_.hC=function(){var a;a=K(this.a.getTime());var b,c,d,e;c=32;d=a.h&1048575;22>c?(e=d>>>c,b=a.m>>c|d<<22-c,c=a.l>>c|a.m<<22-c):44>c?(e=0,b=d>>>c-22,c=a.m>>c-22|a.h<<44-c):(b=e=0,c=d>>>c-44);b=fv(c&4194303,b&4194303,e&1048575);a=fv(a.l^b.l,a.m^b.m,a.h^b.h);return Q(a)};\n_.tS=function(){var a,b;b=-this.a.getTimezoneOffset();a=(0<=b?kb:n)+~~(b/60);b=10>(0>b?-b:b)%60?wc+(0>b?-b:b)%60:n+(0>b?-b:b)%60;return(RK(),SK)[this.a.getDay()]+fa+TK[this.a.getMonth()]+fa+QK(this.a.getDate())+fa+QK(this.a.getHours())+dd+QK(this.a.getMinutes())+dd+QK(this.a.getSeconds())+" GMT"+a+b+fa+this.a.getFullYear()};_.a=null;function RK(){RK=x;SK=z(Zu,q,1,"Sun,Mon,Tue,Wed,Thu,Fri,Sat".split(","));TK=z(Zu,q,1,"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(","))}var SK,TK;\nfunction tu(a,b){return null==E(a.a,b,a)}function su(){this.a=new up}w(635,614,{88:1,92:1,111:1},su);_.qh=function(a){return tu(this,a)};_.rh=KK;_.Mf=function(){return 0==this.a.d};_.ue=function(){return HK(new JK(this.a,new GD(this.a)))};_.sh=function(a){return null!=Du(this.a,a)};_.Pf=yK;_.tS=function(){return vK(new JK(this.a,new GD(this.a)))};_.a=null;function yD(a,b){this.a=a;this.b=b}w(639,617,Rl,yD);_.th=Tv;_.uh=zy;_.vh=function(a){var b;b=this.b;this.b=a;return b};_.a=null;_.b=null;\nfunction Px(){}w(640,136,{88:1,96:1,104:1,105:1,110:1},Px);function UK(a){var b,c;b=a.b;c=a.d.length;if(ba.j&&(++a.j,a.p[a.j]=b)}function bL(a){var b;b=new VH;b.f=a.f;b.d=a.d;b.q=a.q;b.r=a.r;b.s=a.s;b.n=a.n;b.e=a.e;b.p=a.p.slice();b.j=a.j;b.c=a.c;b.a=a.a;b.b=a.b;b.i=a.i;b.o=a.o;b.k=a.k;return b}function vH(a){return-99199!=a.f?a.f:0}function cL(a){return 4<=a.o&&2==a.j}\nfunction hF(a,b,c){a.q+=b;a.r+=c}function ZE(a){var b;b=-99199!=a.f;a.f=-99199;return b}function VH(){$K();this.p=UF(7)}w(660,1,{114:1},VH);_.a=3;_.b=null;_.c=0;_.d=0;_.e=null;_.f=-99199;_.i=0;_.j=0;_.k=0;_.n=0;_.o=0;_.q=0;_.r=0;_.s=0;var aL;function gI(a,b){var c;c=dL(a);return 0\\\\.]+$",2);oL=new ZK("\\\\s+",2)}\nfunction FG(a){lL();var b,c,d,e;this.i=this.f=null;this.j=0;this.e=!1;this.a=this.c=null;var f,g,h;if(null==a||0==a.length)c=0;else{g=1;f=a.length;for(h=0;h=this.j?this.b=nx(a):this.b=a;c=new XK(oL,this.b);this.d=c.b.a.test(c.a);do if(4a.indexOf("j")&&((this.e=0=f.length)e=0;else{for(h=0,j=f.length;ho&&(o=0.001);r=g/o;e=f/o;l=UF(4);for(h=0;4>h;++h)d[h]==c||0>=d[h]||(0==l[1]?l[1]=d[h]:0==l[2]?l[2]=d[h]:0==l[3]&&(l[3]=d[h]));m=UF(4);d=UF(4);for(h=1;3>=h;++h)3==h&&0==l[3]||(f=(a.b[l[h]].q-a.b[b].q)*e+(a.b[l[h]].r-a.b[b].r)*r,g=(a.b[l[h]].r-a.b[b].r)*e-(a.b[l[h]].q-a.b[b].q)*r,o=Math.sqrt(f*f+g*g),0.001>o&&(o=0.001),m[h]=g/o,d[h]=f/o);a=SL(m[1],d[1],m[2],d[2]);0b?(j[1]=l[1],j[2]=l[3],j[3]=l[2]):0>a&&0d?(j[1]=l[2],j[2]=l[3],j[3]=l[1]):0>d&&0b&&0>a&&(j[1]=l[3],j[2]=l[2],j[3]=l[1])):0j&&(j=0.001);g/=j;f/=j;l=j+25*Math.cos(1.0471975511965976);o=25*Math.sin(1.0471975511965976);h=XH(a,b,d);if(3==a.c[h].c||204==a.k.k||1!=a.c[h].c&&(203==a.k.k||204==a.k.k)||a.n)l=j+25,o=0;0o?o=-o:0>c&&0j&&(j=0.001),FH(a,a.p,a.b[b].q+25*f/j,a.b[b].r+25*g/j),0==KH(a,a.p,1,a.p)||h==a.b[b].j);++h);break;default:return--a.p,ht(a.k,"Are you trying to draw an hedgehog ?"),a.k.cb=9,!1}b=WH(a,a.v,a.p,1);203==a.k.k&&(b.c=2);204==a.k.k&&\n(b.c=3);201==a.k.k&&DH(a,a.q);a.z=a.b[a.p].q;a.A=a.b[a.p].r;return e}function xH(a,b){var c,d;if(!b||0==b.c)return n;d=n;d+="M V30 BEGIN COLLECTION"+(qE(),ca);d+=lf+a+" [ATOMS=("+b.c;for(c=new vu(b);c.bj&&(j=0.001);1>aG((a.b[b].r-a.b[e].r)*(g/j)+(a.b[b].q-a.b[e].q)*(h/j))?(g=a.b[b].q-a.b[e].q,h=a.b[b].r-a.b[e].r,j=Math.sqrt(g*g+h*h),0.001>j&&(j=0.001),b=h/j,g/=j,d[0]=a.b[e].q+j*g-c*b,d[1]=a.b[e].r+c*g+j*b):(g=(a.b[e].q+a.b[f].q)/2,e=(a.b[e].r+a.b[f].r)/2,g=a.b[b].q-g,h=a.b[b].r-e,j=Math.sqrt(g*g+h*h),0.001>j&&(j=0.001),d[0]=a.b[b].q+c*g/j,d[1]=a.b[b].r+c*h/j)}\nfunction oH(a){var b,c,d,e,f,g,h,j,l,o,m,r,t,y;o=-1;j=6;switch(a.k.k){case 206:j=3;break;case 207:j=4;break;case 208:case 221:case 223:j=5;break;case 210:case 209:j=6;break;case 211:j=7;break;case 212:j=8;break;case 229:j=9}f=6.283185307179586/j;l=iK(312.5/(1-Math.cos(f)));if(0a.b[a.v].j)ZL(a,j,f,l);else if(!a.k.Bb&&!a.k.rc)o=a.v,pH(a,a.v,0),a.v=a.p,ZL(a,j,f,l);else{a.k.rc=!1;if(209==a.k.k||221==a.k.k||223==a.k.k){ht(a.k,"ERROR - cannot add aromatic spiro ring !");a.k.cb=9;return}for(d=\n1;d<=a.b[a.v].j;++d)if(b=a.c[XH(a,a.v,a.b[a.v].p[d])].c,2m&&(m=0.001);g/=m;e/=m;for(d=1;d<=j;++d)h=EH(a,null),r=f*d+1.5707963267948966,JH(h,b[0]+l*(Math.sin(r)*e-Math.cos(r)*g),b[1]+l*(Math.cos(r)*e+Math.sin(r)*g))}else if(0m&&(m=0.001);g/=m;e/=m;h=m/2;r=l*Math.sin(0.5*(3.141592653589793-f));m=1;0<(a.b[d].r-a.b[b].r)*e-(a.b[d].q-a.b[b].q)*g&&(r=-r,m=0);t=a.b[b].q+h*e-r*g;y=a.b[b].r+r*e+h*g;for(d=1;d<=j;++d)h=EH(a,null),r=f*(d+0.5)+3.141592653589793*m,JH(h,t+l*(Math.sin(r)*e-Math.cos(r)*g),y+l*(Math.cos(r)*e+Math.sin(r)*g)),1==m?(d==j&&JH(h,a.b[b].q,a.b[b].r),\nd==j-1&&JH(h,a.b[c].q,a.b[c].r)):(d==j-1&&JH(h,a.b[b].q,a.b[b].r),d==j&&JH(h,a.b[c].q,a.b[c].r))}else{b=0.5;6==j&&(b=0);for(d=1;d<=j;++d)h=EH(a,null),r=f*(d-b),JH(h,a.z+l*Math.sin(r),a.A+l*Math.cos(r))}b=j;l=0;for(f=1;f<=b;++f)SH(a,null),l=a.p-b+f,a.b[l].j=2,a.c[a.q].i=l,a.c[a.q].j=l+1;a.c[a.q].j=a.p-b+1;if(209==a.k.k){if(a.c[a.q-4].c=2,a.c[a.q-2].c=2,a.c[a.q].c=2,0e&&ed;--f)if(0g&&(g=0.001),e/=g,f/=g);l=a.b[a.v].q+d*f;o=a.b[a.v].r+d*e;for(g=1;g<=b;++g)h=EH(a,null),j=c*g-1.5707963267948966,JH(h,l+d*(Math.sin(j)*f-Math.cos(j)*e),o+d*(Math.cos(j)*f+Math.sin(j)*e))}function YL(a,b){var c,d;0==b&&(b=a.p);for(c=a.p;c>a.p-b;--c)d=KH(a,c,1,a.p),0!=d&&hF(a.b[c],6,6)}\nfunction XH(a,b,c){var d,e,f;for(e=1;e<=a.q;++e)if(d=a.c[e],f=d.i,d=d.j,f==b&&d==c||f==c&&d==b)return e;return 0}function yG(a){var b;for(b=1;b<=a.q;++b)if(1==a.c[b].c&&0=c||0>=d?a.s=!0:(b=dF(a),c=c/2-b.a,b=d/2-b.b,a.k.Ob||MH(a,c,b),iF(a))}\nfunction kH(a,b,c){var d,e,f;if(1==c)return a.b[b].n+=1,!0;if(-1==c)return a.b[b].n+=-1,!0;e=a.b[b].n;f=a.b[b].i;d=a.b[b].o;-1==d&&0==c&&(0==a.b[b].n?a.b[b].n=1:1==a.b[b].n?a.b[b].n=-1:-1==a.b[b].n&&(a.b[b].n=0));switch(a.b[b].a){case 1:0==d&&(0==a.b[b].n?a.b[b].n=1:1==a.b[b].n?a.b[b].n=-1:a.b[b].n=0);break;case 2:2d&&(0==\na.b[b].n?a.b[b].n=-1:-1==a.b[b].n?a.b[b].n=1:1==a.b[b].n&&(a.b[b].n=0));break;case 4:case 7:3d&&0==a.b[b].n?a.b[b].n=1:3>d&&1==a.b[b].n?a.b[b].n=-1:3>d&&-1==a.b[b].n&&(a.b[b].n=0);break;case 5:case 8:case 13:2d&&0==a.b[b].n?a.b[b].n=-1:\n2>d&&-1==a.b[b].n?a.b[b].n=1:2>d&&1==a.b[b].n&&(a.b[b].n=0);break;case 9:case 10:case 11:case 12:0==d&&0==a.b[b].n?a.b[b].n=-1:0==d&&-1==a.b[b].n?a.b[b].n=0:ht(a.k,"Charge change not possible on the halogen !");break;case 32:ht(a.k,"Use X button to change charge on the X atom !")}if(0e&&eb?e=2:0>a&&0>b?e=3:0>a&&0<=b&&(e=4);0<=c&&0<=d?f=1:0<=c&&0>d?f=2:0>c&&0>d?f=3:0>c&&0<=d&&(f=4);if(ef)return-1;switch(e){case 1:case 4:return ac?1:-1}return 0}function iI(a){$L(a);iF(a);jI(a)}\nfunction dF(a){var b,c,d,e,f,g;b=new jL;f=9999;d=-9999;g=9999;e=-9999;for(c=1;c<=a.p;++c)a.b[c].qd&&(d=a.b[c].q),a.b[c].re&&(e=a.b[c].r);b.a=f+(d-f)/2;b.b=g+(e-g)/2;b.c=d-f;b.d=e-g;25>b.c&&(b.c=25);25>b.d&&(b.d=25);return b}function XL(a,b,c){var d,e;e=0;for(d=1;d<=a.p;++d)d>=b&&d<=c||0!=KH(a,d,b,c)&&++e;return e}function WH(a,b,c,d){var e;e=SH(a,null);TH(a.b[b],c);TH(a.b[c],b);e.i=b;e.j=c;ZH(e,a.b);e.c=d;return e}\nfunction EH(a,b){++a.p;b?a.b[a.p]=bL(b):a.b[a.p]=new VH;return a.b[a.p]}function $F(a,b,c,d,e,f){var g;g=a.b[b].q-c/2;f||(g-=d-c);a=a.b[b].r-~~(e/2);return new aM(g-1-2,a-2,d+1+4,e+4)}function SH(a,b){var c;++a.q;c=new hL;b&&iL(c,b);return a.c[a.q]=c}\nfunction sH(a,b,c){var d,e,f,g,h,c=uH(a,b,c,!1);e=-1.7976931348623157E308;d=1.7976931348623157E308;for(b=1;b<=a.p;++b)a.b[b].r>e&&(e=a.b[b].r),a.b[b].qa.b[b].n?f=4-a.b[b].n:0>a.b[b].n&&-4=g&&(h=g)),\ng=rH(h,2)+rH(f,3)+" 0 0 0 0 0 0 0",f=cI(a,b),g+=rH(f,3),c+=g+ja+(qE(),ca);for(b=1;b<=a.q;++b)d=a.c[b],g=e=d.c,1==a.c[b].c?g=1:2==a.c[b].c&&(g=2),f=rH(d.i,3)+rH(d.j,3),h=0,1==e&&1==d.f?h=1:1==e&&2==d.f&&(h=6),1==e&&3==d.f&&(h=1,f=rH(d.j,3)+rH(d.i,3)),1==e&&4==d.f&&(h=6,f=rH(d.j,3)+rH(d.i,3)),c+=f+rH(g,3)+rH(h,3)+ka+(qE(),ca);for(b=1;b<=a.p;++b)0!=a.b[b].n&&(c+="M CHG 1"+rH(b,4)+rH(a.b[b].n,4)+(qE(),ca)),0!=a.b[b].d&&(c+="M ISO 1"+rH(b,4)+rH(a.b[b].d,4)+(qE(),ca));return c+=hf+(qE(),ca)}\nfunction JE(a,b){var c,d,e,f,g,h,j;g=j=0;for(h=1;h<=a.q;++h)e=a.c[h],c=e.i,d=e.j,c!=b&&d!=b?(++j,f=a.c[j],iL(f,e),f.i=c,c>b&&--f.i,f.j=d,d>b&&--f.j):g+=e.c;a.q=j;for(h=b;hb&&--c,a.b[h].p[++d]=c);a.b[h].j=d}}\nfunction LE(a,b){var c,d,e,f;c=a.c[b].i;d=a.c[b].j;for(e=b;ea.b[b].a&&0==a.b[d].d){if(0!=(-99199!=a.b[d].f?a.b[d].f:0))continue a;b=XH(a,d,b);if(1==a.c[b].c&&(0==a.c[b].f||!a.k.tc))JE(a,d),c=!0}return c}function bM(a,b){var c,d,e,f,g;g=z(A,v,-1,[0,0]);for(e=1,f=0;e<=a.b[b].j;++e)c=a.b[b].p[e],d=XH(a,b,c),2!=a.c[d].c&&(g[f++]=c);return g}\nfunction $L(a){var b,c,d;for(d=1;d<=a.p;++d)a.b[d].j=0;for(d=1;d<=a.q;++d)b=a.c[d].i,c=a.c[d].j,TH(a.b[b],c),TH(a.b[c],b)}\nfunction fI(a,b,c){var d,e,f,g,h,j,l,o,m;a.d=UF(a.q+1);m=[];for(j=1;j<=a.p;++j){m[j]=!1;b[j]=!1;a:{d=void 0;for(d=1;d<=a.b[j].j;++d)if(c[XH(a,j,a.b[j].p[d])]){d=!0;break a}d=!1}if(d&&!(3d&&(d=c);return d}\nfunction ZF(a,b){var c;c=(qE(),xE)[a.b[b].a];32==a.b[b].a&&(c=a.b[b].e);return c}function YH(a,b){a.b[b].j+=-1}function eG(a,b,c){var d,e,f,g,h;h=1;a.a=UF(a.p+1);for(e=a.a[b]=1;e<=a.b[b].j;++e)d=a.b[b].p[e],d!=c&&(a.a[d]=++h);for(g=!1;;){for(d=1;d<=a.p;++d){g=!1;if(0~~(c/2)+24?3:2}function SE(a,b){var c,d,e,f,g,h,j;c=dF(a);d=c.a;e=c.b;g=Math.sin(3.141592653589793*b/180);c=Math.cos(3.141592653589793*b/180);for(f=1;f<=a.p;++f)h=a.b[f].q*c+a.b[f].r*g,j=-a.b[f].q*g+a.b[f].r*c,JH(a.b[f],h,j);c=dF(a);MH(a,d-c.a,e-c.b)}\nfunction aI(a){var b,c,d,e,f;e=f=0;for(d=1;d<=a.q;++d)b=a.b[a.c[d].i].q-a.b[a.c[d].j].q,c=a.b[a.c[d].i].r-a.b[a.c[d].j].r,f+=Math.sqrt(b*b+c*c);0=g;++g)if(I(f,(qE(),xE)[g])){f=g;break b}f=32}mH(a,b,f);32==a.b[b].a&&(a.b[b].e=d);c+=\nfa;d=0;0=e&&(d=e-48));32==a.b[b].a&&(a.b[b].i=d)}}}function XG(a,b,c){var d,e;a.i=1;c&&(a.i=-1);b=new QD(b);try{for(;b.j=JD(b,b.a),b.jc||6a.b[c].j&&2>a.b[d].j)e.f=0,ht(a.k,"Stereomarking meaningless on this bond !");else switch(e.f){case 0:a.b[d].j<=a.b[c].j?e.f=1:e.f=3;break;case 1:e.f=2;break;case 2:2h||3c[b]&&(j=f,f=b,b=j);j=bM(a,f);h=j[0];l=j[1];e=0;o=!1;0c[l]&&(j=h,h=l,l=j);j=XH(a,f,h);0!=d[j]?e=h:1==a.c[j].c&&5!=a.d[j]&&(e=h);0==e&&0c[f]&&(o=!0);j=bM(a,b);l=j[0];g=j[1];h=0;0g&&(g=0.001),j/=g,g=l/g,l=(a.b[e].r-a.b[f].r)*g-(a.b[e].q-a.b[f].q)*j,t=(a.b[h].r-a.b[f].r)*g-(a.b[h].q-a.b[f].q)*j,2>(0>=l?0-l:l)||2>(0>=t?0-t:t))ht(a.k,"Not unique E/Z geometry !");else{g=\nXH(a,e,f);h=XH(a,h,b);r=1;if(0==d[g]){for(m=1;m<=a.b[e].j;++m)if(b=a.b[e].p[m],b!=f&&(j=XH(a,e,b),0!=d[j])){c[b]>c[e]?r=-d[j]:r=d[j];break}d[g]=r}0==d[h]&&(0l&&0>t?d[h]=-d[g]:d[h]=d[g],o&&(d[h]=-d[h]))}}}function lI(a,b,c){var d;d=a.c[b].f;return 1>d||4g?e.i=3-g-c.b[d].n:4==g?(c.b[d].n=-1,e.i=0):5g?0c.b[d].n?e.i=2-g-c.b[d].n:e.i=4-g:(c.b[d].n=g-4,e.i=4-g+c.b[d].n);break;case 4:case 7:3>g?e.i=3-g+c.b[d].n:3==g?0>c.b[d].n?(c.b[d].n=0,e.i=0):0c.b[d].n?(c.b[d].n=0,e.i=0):0g?e.i=2-g+c.b[d].n:2==g?0>c.b[d].n?(c.b[d].n=0,e.i=0):0f;)if(0e.i&&(e.i=0)}}}function kF(a){PL(this);this.b[0]=new VH;this.t=this.q=this.p=0;this.k=a}\nfunction WG(a,b){var c,d,e,f,g,h,j,l,o;kF.call(this,a);if(null!=b&&(f=n,l=UG(b),null!=l)){o=new PD(b,l,!0);for(g=1;4>=g;++g)f=VG(o,l);e=AG(wD(nx(f.substr(0,3)),10)).a;j=AG(wD(nx(f.substr(3,3)),10)).a;g=0;try{g=AG(wD(nx(f.substr(14,1)),10)).a}catch(m){if(m=vq(m),!H(m,96))throw m;}TE(this,(UE(),1==g?VE:WE));for(g=1;g<=e;++g){d=EH(this,null);f=VG(o,l);d.q=(new $J(XJ(nx(f.substr(0,10))))).a;d.r=-(new $J(XJ(nx(f.substr(10,10))))).a;d=34;34>f.length&&(d=f.length);d=nx(f.substr(31,d-31));nH(this,g,d);62<=\nf.length&&(h=nx(f.substr(60,3)),0=h))){var r=void 0,r=dL(d);d=0d&&(d=0);this.b[g].d=d}if(39<=f.length&&(h=nx(f.substr(37,2)),0=h))){f=0;switch(h){case 1:f=3;break;case 2:f=2;break;case 3:f=1;break;case 4:f=0;break;case 5:f=-1;break;case 6:f=-2;break;case 7:f=-3}this.b[g].n=f}}for(g=1;g<=j;++g)e=SH(this,null),f=\nVG(o,l),e.i=AG(wD(nx(f.substr(0,3)),10)).a,e.j=AG(wD(nx(f.substr(3,3)),10)).a,d=AG(wD(nx(f.substr(6,3)),10)).a,1==d?c=1:2==d?c=2:3==d?c=3:c=9,h=0,11b.length)this.p=0;else{try{j=new OD(b);g=AG(wD(MD(j),10)).a;h=AG(wD(MD(j),10)).a;for(f=1;f<=g;++f)o=MD(j),c=(m=EH(this,null),nH(this,this.p,o),m),c.q=(new $J(XJ(MD(j)))).a,c.r=-(new $J(XJ(MD(j)))).a;for(f=1;f<=h;++f){d=SH(this,null);d.i=AG(wD(MD(j),10)).a;d.j=AG(wD(MD(j),10)).a;e=AG(wD(MD(j),10)).a;l=0;if(-1==e)l=e=1;else if(-2==e)e=1,l=2;else if(-5==e)e=2,l=10;else if(11==\ne||12==e||13==e||14==e)l=e,e=9;d.c=e;d.f=l}$L(this);aI(this);gF(this)}catch(r){r=vq(r);if(H(r,96)){r.yd();this.p=0;return}throw r;}a&&!a.bb&&$E(this);iI(this)}}function ZG(a,b,c){var d,e,f,g;kF.call(this,a);g=UF(b.p+1);for(e=1;e<=b.p;++e)b.a[e]==c&&(EH(this,b.b[e]),g[e]=this.p);for(e=1;e<=b.q;++e)if(a=b.c[e].i,d=b.c[e].j,!(b.a[a]!=c&&b.a[d]!=c)&&!(b.a[a]!=c||b.a[d]!=c))f=SH(this,b.c[e]),f.i=g[a],f.j=g[d];this.i=b.i;$L(this)}\nfunction cM(a,b,c){var d,e,f;kF.call(this,a);f=UF(b.p+1);for(d=1;d<=b.p;++d)b.b[d].k==c&&(EH(this,b.b[d]),f[d]=this.p);for(d=1;d<=b.q;++d)a=b.c[d],a.e==c&&(e=SH(this,a),e.i=f[a.i],e.j=f[a.j]);TE(this,b.f);this.i=b.i;$L(this)}\nfunction tH(a,b,c){var d,e,f,g;kF.call(this,a);for(a=1;a<=c;++a)this.p+=b[a].p,this.q+=b[a].q,this.t+=b[a].t,b[a].f.a&&TE(this,(UE(),UE(),VE));this.b=C(QL,q,114,this.p+1,0);this.c=C(RL,q,115,this.q+1,0);f=g=e=0;for(a=1;a<=c;++a){for(d=1;d<=b[a].p;++d)++e,this.b[e]=bL(b[a].b[d]);for(d=1;d<=b[a].q;++d)++g,this.c[g]=gL(b[a].c[d]),this.c[g].i+=f,this.c[g].j+=f;f=e}$L(this)}\nfunction HE(a){var b;PL(this);this.k=a.k;this.p=a.p;this.q=a.q;this.t=a.t;this.b=C(QL,q,114,this.p+1,0);for(b=0;b(0>=a?0-a:a)&&(a=0);a=Q(K(S(a*Math.pow(10,c))))/Math.pow(10,c);e=n+(new $J(a)).a;d=lx(e,mx(46));0>d&&(e+=gc,d=lx(e,mx(46)));f=e.length;for(a=1;a<=c-f+d+1;++a)e+=wc;if(0==b)return e;e.length>b&&(e=Ed);c=n;for(a=1;a<=b-e.length;++a)c+=fa;return c+e}function UG(a){var b;b=new PD(a,ca,!0);if(4b&&(d=Ed);e=n;for(c=1;c<=b-d.length;++c)e+=fa;return e+d}function VG(a,b){for(var c,d;a.j=JD(a,a.a),a.j>16&255)),Vu(0.7*(g.d>>8&255)),Vu(0.7*(g.d&255))),SF(a.a,g)):(h=new hm(Vu(0.7*(g.d>>16&255)),Vu(0.7*(g.d>>8&255)),Vu(0.7*(g.d&255))),f=PB(g),SF(a.a,h));g=Q(K(S(T)));d=Q(K(S(d*T)));e=Q(K(S(e*T)));b=Q(K(S(b*T)));c=Q(K(S(c*T)));d-=g;e-=g;AF(a.a,b+g,c+g,d-g,e-g);SF(a.a,h);AF(a.a,b,c,d,g);AF(a.a,b,c+g,g,e);SF(a.a,f);AF(a.a,b+d,c,g,e+g);AF(a.a,b+1,c+e,d,g)}\nfunction vF(a,b,c,d,e){a=a.a;b=Q(K(S(b*T)));c=Q(K(S(c*T)));d=Q(K(S(d*T)));e=Q(K(S(e*T)));wF(a,!0);xF(a,yF(a,b,c,d,e))}function GF(a,b,c,d){var e,f,g;f=C(A,v,-1,d,1);g=C(A,v,-1,d,1);for(e=0;e=b||b>=jB(this.a)-1||0>=c||c>=kB(this.a)-1)&&(this.a.j=!1);this.a.j?HH(this.a.c,a,b,c):BG(this.a.c,a,b,c);oz(this.a.pb)};_.a=null;function zM(a){this.a=a}w(711,1,{},zM);_.od=function(a){this.a.j=!1;Fs(a);Gs(a);PH(this.a.c)};_.a=null;\nfunction AM(a){this.a=a}w(712,1,{},AM);_.nd=function(){this.a.j&&(this.a.j=!1)};_.a=null;function BM(a){this.a=a}w(713,1,{},BM);_.a=null;function CM(a){this.a=a}w(714,1,{},CM);_.a=null;function oM(){mM.call(this);this.pb.style[Dk]=Gc;this.pb.style[Qh]=Gc}w(715,706,zl,oM);function DM(a){this.a=a}w(716,1,{},DM);_.Qd=function(){Gq((Dq(),Eq),new FM(this))};_.a=null;function FM(a){this.a=a}w(717,1,{},FM);_.pd=function(){this.a.a.c&&(hB(this.a.a.c),EI(this.a.a))};_.a=null;\nfunction GM(a,b){var c;c=b.a;c.e=4;return yH(a.a.c,c,b.d,b.e)}function qM(a){this.a=a}w(718,1,{},qM);_.Hh=function(a){return GM(this,a)};_.a=null;function bu(a,b){BG(a.a.c,b.a,b.d,b.e);return yH(a.a.c,b.a,b.d,b.e)}function rM(a){this.a=a}w(719,1,{},rM);_.Hh=function(a){return bu(this,a)};_.a=null;function sM(a){this.a=a}w(720,1,{},sM);_.Hh=function(a){return HH(this.a.c,a.a,a.d,a.e)};_.a=null;function tM(a){this.a=a}w(721,1,{},tM);_.Hh=function(){return PH(this.a.c)};_.a=null;\nfunction Ts(a,b){var c;c=K(S(b.b));c=new dD(b,0,wj,c);OE(a.a.c,c);return!0}function uM(a){this.a=a}w(722,1,{},uM);_.Hh=function(a){return Ts(this,a)};var HM=_.a=null;function IM(){IM=x;HM=new Mv((cw(),new bw("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAEklEQVR42mM4MzPtPzJmIF0AAOqfLKHtSuV7AAAAAElFTkSuQmCC")),4,4)}function JM(){JM=x;KM={}}\nfunction LM(a,b,c){var d;c&&(b.style[zh]=c.b+kj,d=c.a,d!=Ee&&(b.style[yh]=d),0!=(c.c&1)&&(b.style[Bh]=Dg),0!=(c.c&2)&&(b.style[Ah]=Xh));a.e.style[Ck]=Oi}\nfunction lC(a){var b=MM,c,d,e,f,g,h,j,l,o,m,r,t,y;c=Lp(a);c in KM?a=KM[c]:(d=$doc.getElementsByTagName("body")[0],e=$doc.createElement(Qj),f=$doc.createElement(Vh),f.style[mh]=(hr(),"inline"),f.style[zk]=(Yr(),"baseline"),f.style[mi]=Bc,f.style[ni]=Bc,f.width=1,f.height=1,g=(IM(),HM),f.src=g.d.a,a=(h=$doc.createTextNode(Af),LM(b,e,a),e.appendChild(h),e.appendChild(f),d.appendChild(e),j=br(e)+$wnd.pageYOffset,l=br(e)+$wnd.pageYOffset+(e.offsetHeight||0),o=l-j,m=br(f)+$wnd.pageYOffset+(f.offsetHeight||\n0)+1,r=l-m,t=m-j,d.removeChild(e),y=new NM,y.a=t,y.b=r,y.c=o,y),KM[c]=a);return a}function OM(){JM();var a,b,c,d,e;Dr();this.a=z(Zu,q,1,["monospace","sans-serif",Jj]);this.c={};this.b={};this.d=$doc.getElementsByTagName("body")[0];this.e=$doc.createElement(Qj);this.e.innerHTML=this.f||n;this.e.style[zh]="72.0px";for(b=this.a,c=0,d=b.length;c=g?h=yF(a,b,c,d,e):h=(j=f+g,l=0,jg)&&(o=1),m=b+d/2,r=c+e/2,t=d/2,y=e/2,u=UM(m,r,t,y,f),D=UM(m,r,t,y,j),s=" text { cursor: default; } <\/style>":\nn;b=c+d+b+pd;b!==a.q&&(a.t.pb.innerHTML=b||n,a.q=b);a.o=!0;a.p=!1}}function SF(a,b){(a.e=b)&&(a.f=VM(b))}function wI(a,b){var c,d,e;a.i=(c=b.b,d=b.a,e=n,12!=c&&(e=\' font-size="\'+c+\'px"\'),"Plain"!=d&&(e+=\' font-family="\'+d+ma),0!=(b.c&1)&&(e+=\'font-weight="bold"\'),0!=(b.c&2)&&(e+=\'font-style="italic"\'),e)}function RF(a,b){(a.n=b)&&b&&(a.c=\'stroke-width="\'+(b.e==Vu(b.e)?n+Vu(b.e):n+b.e)+na)}w(733,483,{});_.d=null;_.e=null;_.f=Ag;_.i=null;_.j=!0;_.k=null;_.o=!1;_.p=!1;_.q=n;_.r=0;_.s=0;_.t=null;\n_.u=null;var TM,SM;function Yt(a,b){var c;c=b.a.targetTouches;return 1==c.length?(c=c[0],a.b.d=c.clientX-ar(a.o.pb)+cr(a.o.pb)+$wnd.pageXOffset,a.b.e=c.clientY-(br(a.o.pb)+$wnd.pageYOffset)+(a.o.pb.scrollTop||0)+$wnd.pageYOffset,a.b.a=new EM(b),b.a.preventDefault(),!0):!1}\nfunction pM(a){this.o=a;this.b=new WM;this.c=new XM(this);tx(this.o,new YM(this),(Zt(),Zt(),$t));tx(this.o,new ZM(this),(Rt(),Rt(),St));tx(this.o,new $M(this),(Vt(),Vt(),Wt));tx(this.o,new aN(this),(Nt(),Nt(),Ot));tx(this.o,new bN,(Zs(),Zs(),$s));tx(this.o,new cN(this),(Vs(),Vs(),Ws));tx(this.o,new dN(this),(Qs(),Qs(),Rs))}w(734,1,{},pM);_.a=null;_.b=null;_.c=null;_.d=!1;_.e=null;_.f=null;_.i=null;_.j=null;_.k=null;_.n=null;_.o=null;function XM(a){Im();this.a=a}w(735,65,{},XM);\n_.vd=function(){!this.a.d&&this.a.i&&GM(this.a.i,this.a.b)};_.a=null;function YM(a){this.a=a}w(736,1,{},YM);_.a=null;function ZM(a){this.a=a}w(737,1,{},ZM);_.a=null;function $M(a){this.a=a}w(738,1,{},$M);_.a=null;function aN(a){this.a=a}w(739,1,{},aN);_.a=null;function bN(){}w(740,1,{},bN);function cN(a){this.a=a}w(741,1,{},cN);_.a=null;function dN(a){this.a=a}w(742,1,{},dN);_.a=null;function WM(){}w(743,1,{},WM);_.a=null;_.b=0;_.c=0;_.d=0;_.e=0;\nfunction VM(a){var b,c;c=a.d>>16&255;b=a.d>>8&255;a=a.d&255;if(0==c*b*a){if(0==c&&0==b&&0==a)return Ag;if(255==c&&0==b&&0==a)return"red";if(0==c&&255==b&&0==a)return"green";if(0==c&&0==b&&255==a)return Bg}return 255==c&&255==b&&255==a?"white":uj+c+lb+b+lb+a+eb}function OI(){var a=$wnd.navigator.userAgent.match(/MSIE\\s+(\\d+\\.\\d+)/);return a?parseFloat(a[1]):-1}\nfunction eN(a){var b,c,d,e,f;zx(a);d=(Ax(),Mz(null));e=new QM;Sy(e,a);Jx(d,e,d.pb);f=a.de();b=a.ce();c=OI();9<=c?(++f,++b):7==c&&H(a,38)&&(c=a.pb.textContent,2>=c.length&&(f+=8));Uy(e,a);Sx(d,e);return new EA(f,b)}function XD(a){try{$wnd.console.log(a)}catch(b){}}function fN(){this.pb=$doc.createElement(nh);this.pb[Sg]=Zh;this.pb.style[Zi]=Rh;this.pb.style[hj]=fg;this.pb.style[Dk]=Gc;this.pb.style[Qh]=Gc;this.pb.setAttribute("contenteditable",wh)}w(745,366,nl,fN);\nfunction UM(a,b,c,d,e){e*=0.017453292519943295;a+=c*Math.cos(e);b+=-d*Math.sin(e);return new PM(new $J(a),new $J(b))}function yF(a,b,c,d,e){return\'=f.k||(701==f.k?null.bi():401==f.k||402==f.k?(null.bi(),null.bi(),null.bi(),null.bi(),null.bi()):500<=f.k&&507>=f.k&&(g=null.ci,500!=g&&(g=new gt(null.ci,g,null),g.i=f.f,g.j=f.i,f=f.j&63,g.e=f&12)))}function jN(a){this.a=a}w(755,1,il,jN);_.pd=function(){wz(this)};_.a=null;function LC(){gN();iN.call(this);this.a=new $z}w(756,748,{},LC);_.Ef=Tv;_.a=null;function OC(){new su;var a;a:{switch(Wu){case 1:case 3:case 5:case 7:a=new lN;break a}a=new mN}this.a=a}w(771,507,{},OC);_.a=null;\nfunction mN(){}w(773,1,{},mN);_.Zh=function(a){a&&a&&oq(8,new nN(a));return null};_.$h=function(a){oq(8,new oN(a))};function lN(){}w(772,773,{},lN);_.Zh=function(){return $wnd.clipboardData.getData(Of)};_.$h=function(a){$wnd.clipboardData.setData(Of,a)};function nN(a){this.a=a}w(776,1,Nl,nN);_.zd=SA;_.a=null;function oN(a){this.a=a}w(778,1,Nl,oN);_.zd=SA;_.a=null;function MC(){this.b=new PC;this.d=new rB}w(789,505,{},MC);function zG(a,b,c,d){b=yA(b);c+=b.a;d+=b.b;fy(a.a,c,d);gy(a.a)}\nfunction xC(){gN();iN.call(this);var a=this.a=new pN;a.ab=!0;a.a.f=!0;this.a.db=!0}w(791,748,{},xC);_.Ef=Tv;_.a=null;function tD(){}w(799,534,{},tD);function qD(){qD=x;var a;a=(hD(),iD["os.encoding"]);if(null!=a)try{if(I("UTF-8",a))mK(n);else if(I("ISO-8859-1",a)||I("ISO-LATIN-1",a))C(nK,Ol,-1,0,1);else throw new JJ(a+la);}catch(b){if(b=vq(b),!H(b,105))throw b;}}function rC(a,b){a.a=31*a.a+Vu((new $J(b)).a)}function xB(){}w(804,1,{},xB);_.hC=Tv;_.a=1;\nfunction pN(){var a=(ny(),qy);hy.call(this,!0,ri);this.U=a.a;this.a=new qN(this);this.a.d=!0;Yx(this,this.a);this.ab=!0;this.a.f=!0;if(-1==this.lb){var a=this.pb,b=1|(this.pb.__eventBits||0);pw();dx(a,b)}else this.lb|=1;Yq(Xq(this.pb))[Sg]=Oh;this.pb.style[Fk]="2147483647"}w(836,368,zl,pN);_.Yd=function(a){xx(this,a);1==nw(a.type)&&cy(this,!1)};_.a=null;\nfunction qN(a){this.b=a;this.c=new Gm;this.i=new Gm;a=(zz(),yz);new pA(a.d,a.b,a.c,a.e,a.a);var b;b=$doc.createElement(Wj);this.e=$doc.createElement(Zj);hw(b,this.e);this.o=!0;a=Fy();b=(iw(),jw(b));a.appendChild(b);this.pb=a;Rn();this.pb.setAttribute("role",vo.a);-1==this.lb?(a=this.pb,b=2225|(this.pb.__eventBits||0),pw(),dx(a,b)):this.lb|=2225;this.pb[Sg]=Nh;a=kx(this.pb)+"-vertical";gx(this.ee(),a,!0);this.pb.style[Yi]=Cc;this.pb.setAttribute("hideFocus",vk);tx(this,new xz(this),(zs(),zs(),As))}\nw(837,408,nl,qN);_.Yd=function(a){switch(nw(a.type)){case 16:this.a=!1;break;case 32:this.a=!0}pz(this,a)};_.Ge=function(a,b){tz(this,a,b);b||this.a&&cy(this.b,!1)};_.a=!0;_.b=null;w(885,1,{});\nfunction rN(a,b,c,d){var e,f,g,h,j,l;h=(!c?b.b:CD(b,c,~~Lp(c)))[0][d.length];b=j=e=null;for(c=0,f=!h?0:h.length;c\',Ca=\'">\',Ea="#",Ha="$",Ia="$$$$",Ka="$MOL\\n",La="$RXN",Pa="$RXN\\n\\n\\nJME Molecular Editor\\n",Qa="%",Ta="&",Va="&",Wa=">",$a="<",ab="\'",bb="(",gb=")",kb="*",lb="+",mb=",",ob=", ",qb=",modifiers=",rb="-",sb="-C#C-Me",vb="-C#CH",wb="-C#N",Ab="-C(=O)N",Bb="-C(=O)OH",Ib="-C(=O)OMe",\nKb="-CCl3",Lb="-CF3",Mb="-CMe3",Sb="-NC=O",Ub="-NH-SO2-Me",Vb="-NMe2",Wb="-NO2",Xb="-OC(=O)Me",Yb="-SO2-NH2",Zb="-SO3H",$b="-disabled",bc="-selected",ic=".",mc="...",nc="/",rc="//",sc="/>",yc="0",zc="0.0px",Fc="0px",Gc="1",Hc="100%",Jc="1px",Mc="2",Nc="3",Oc="4",Uc="5",Vc="6",Wc="7",ad="8",bd="9",fd=":",gd=": ",hd=";",pd="<",qd="<\/g>",rd="<\/svg>",zd="<\/text>",Ad=\'b?{}:new pl[b],_.cM=c);for(var e=3;e=a.u+a.n;if(a.q&&!d)return d=(b-a.u)/a.n,a.td((1+Math.cos(3.141592653589793+3.141592653589793*d))/2),a.p&&a.s==c;if(!a.q&&b>=a.u&&(a.q=!0,a.sd(),!(a.p&&a.s==c)))return!1;return d?(a.p=!1,a.q=!1,a.rd(),!1):!0}w(59,1,{});_.qd=function(){this.v&&this.rd()};\n_.rd=function(){this.td((1+Math.cos(6.283185307179586))/2)};_.sd=function(){this.td((1+Math.cos(3.141592653589793))/2)};_.n=-1;_.o=null;_.p=!1;_.q=!1;_.r=null;_.s=-1;_.t=null;_.u=-1;_.v=!1;function Gm(a,b){Hm(a.a,b)?a.a.r=a.a.t.vd(a.a.k,a.a.o):a.a.r=null}function Im(a){this.a=a}w(60,1,{},Im);_.ud=function(a){Gm(this,a)};_.a=null;w(61,1,{});w(62,1,fm);function Jm(){Jm=x;var a;(a=new Km)&&(a.xd()||(a=new Lm));Mm=a}w(63,61,{});var Mm=null;function Lm(){this.a=new Nm;this.b=new Om(this)}w(64,63,{},Lm);\n_.xd=function(){return!0};_.vd=function(a){a=new Pm(this,a);Qm(this.a,a);1==this.a.c&&Rm(this.b,16);return a};function Sm(){Sm=x;Tm=new Nm;var a=new Um;Vm();Wm(Xm?Xm:Xm=new Ym,a)}function Zm(a){a.b?$wnd.clearInterval(a.c):$wnd.clearTimeout(a.c);$m(Tm,a)}function Rm(a,b){if(0>b)throw new an("must be non-negative");a.b?$wnd.clearInterval(a.c):$wnd.clearTimeout(a.c);$m(Tm,a);a.b=!1;a.c=bn(a,b);Qm(Tm,a)}function bn(a,b){return $wnd.setTimeout(C(function(){a.yd()}),b)}w(66,1,{});\n_.yd=function(){this.b||$m(Tm,this);this.zd()};_.b=!1;_.c=0;var Tm;function Om(a){Sm();this.a=a}w(65,66,{},Om);_.zd=function(){var a=this.a,b,c,d,e,f;b=D(cn,u,14,a.a.c,0);b=dn(a.a,b);c=new en;for(e=0,f=b.length;eFm()-d.a;){e=!1;for(f=0;f=a.a.d)break a;b=d[e];c=new FileReader;du(c,a.a.b);1==a.a.c&&c.readAsText(b)}0==d.length&&(b=(this.a.dataTransfer||null).getData(ok),a.a.b.ag(b))};_.Kd=function(){return bu};var bu;function eu(){eu=x;fu=new yt(Ph,new gu)}function gu(){}w(283,264,{},gu);\n_.Hd=function(a){var b,c;b=this.a.rotation;c=this.a.scale;a.a.e&&(0!=b&&a.a.b.b!=b&&(a.a.b.b=b,a.a.b.a=null,hu(a.a.e,a.a.b)&&this.a.preventDefault()),a.a.d=!0);a.a.f&&(1!=c&&a.a.b.c!=c&&(a.a.b.a=null,a.a.b.c=c,iu(a.a.f,a.a.b)&&this.a.preventDefault()),a.a.d=!0)};_.Kd=function(){return fu};var fu;function ju(){ju=x;ku=new yt(Uh,new lu)}function lu(){}w(284,264,{},lu);_.Hd=function(a){a.a.a&&(a.a.b.a=null,mu(a.a.a,a.a.b))};_.Kd=function(){return ku};var ku;function nu(){nu=x;ou=new yt(Vh,new pu)}\nfunction pu(){}w(285,264,{},pu);_.Hd=function(){this.a.preventDefault()};_.Kd=function(){return ou};var ou;w(287,264,{});w(286,287,{});function qu(){qu=x;ru=new yt(mi,new su)}function su(){}w(288,286,{},su);\n_.Hd=function(a){var b,c;c=this.a.keyCode||0;0<=c&&c<(tu(),uu).length&&-999!=(tu(),uu)[c]&&(c=(tu(),uu)[c]);b=new vu(null,c,null);if(this.a.ctrlKey||this.a.shiftKey||this.a.metaKey||this.a.altKey)this.a.ctrlKey&&(b.e|=2),this.a.altKey&&(b.e|=8),this.a.metaKey&&(b.e|=4),this.a.shiftKey&&(b.e|=1);a:{var a=a.a.c,d=c,e;a.Gb=!1;if(!a.J||a.K){wu(a,m);c=0;e=8==b.e;b=0!=(b.e&2);switch(d){case 99:case 67:b?xu($t(a,!0,!1)):c=301;break;case 118:case 86:b&&a.Tb&&(b=a.r,null==b.i&&(b.i="PASTE"),yu(a.E,(!a.Ub&&\n(a.Ub=new zu(a)),a.Ub)));break;case 110:case 78:c=401;break;case 111:case 79:c=501;break;case 115:case 83:c=601;break;case 112:case 80:c=1101;break;case 102:case 70:c=701;break;case 108:case 76:c=801;break;case 98:case 66:c=901;break;case 105:case 73:c=1001;break;case 120:case 88:a.Bc&&(wu(a,dr((Au(),Bu).Tc.a.pb,Ik)),c=1201,a.n=32);break;case 104:case 72:wu(a,Ue);c=1300;break;case 114:case 82:wu(a,"-R");c=1301;break;case 116:case 84:701==a.k?(c=236,wu(a,Lb)):801==a.k?(c=237,wu(a,Kb)):(c=233,wu(a,\n"-tBu"));break;case 121:case 89:b?c=111:(c=234,wu(a,Wb));break;case 122:case 90:b?c=110:(c=239,wu(a,Zb));break;case 97:case 65:c=235;wu(a,"-COOH");break;case 101:case 69:c=238;wu(a,vb);break;case 117:case 85:c=110;break;case 113:case 81:c=242;wu(a,wb);break;case 103:a=!0;break a;case 27:c=202;break;case 45:701==a.k?(c=254,wu(a,"-F")):801==a.k?(c=255,wu(a,"-Cl")):901==a.k?(c=256,wu(a,"-Br")):1001==a.k?(c=257,wu(a,"-I")):501==a.k?(c=259,wu(a,"-OH")):401==a.k?(c=258,wu(a,"-NH2")):c=202;break;case 43:c=\n108;break;case 35:c=204;break;case 48:105==a.k?Cu(a,0):e?(c=223,wu(a,"-3-Furyl")):(c=221,wu(a,"-Furyl"));break;case 49:105==a.k?Cu(a,1):c=209;break;case 50:case 61:50==d&&105==a.k?Cu(a,2):501==a.k?(c=250,wu(a,"=O")):c=203;break;case 51:105==a.k?Cu(a,3):c=206;break;case 52:105==a.k?Cu(a,4):c=207;break;case 53:105==a.k?Cu(a,5):c=208;break;case 54:105==a.k?Cu(a,6):c=210;break;case 55:105==a.k?Cu(a,7):c=211;break;case 56:105==a.k?Cu(a,8):c=212;break;case 57:105==a.k?Cu(a,9):(wu(a,"9 ring"),c=229);break;\ncase 100:case 68:case 8:case 127:c=104;break;case 32:c=205;break;case 109:case 77:case 1002:c=151;break;case 119:case 87:case 1003:c=152;break;case 1E3:c=153;break;case 1001:c=154}d=d+1-49;0<=d&&9>=d&&0=b&&(c=1301+d));Du(a,c)}a=!0}a&&this.a.preventDefault()};_.Kd=function(){return ru};var ru;function Eu(){Eu=x;Fu=new yt(Mi,new Gu)}function Gu(){}w(289,269,Jl,Gu);_.Hd=function(a){a.ld(this)};_.Kd=function(){return Fu};var Fu;\nfunction Hu(){Hu=x;Iu=new yt(Ni,new Ju)}function Ju(){}w(290,269,Jl,Ju);_.Hd=function(a){a.md(this)};_.Kd=function(){return Iu};var Iu;function Ku(){Ku=x;Lu=new yt(Oi,new Mu)}function Mu(){}w(291,269,Jl,Mu);_.Hd=function(a){a.nd(this)};_.Kd=function(){return Lu};var Lu;function Nu(){Nu=x;Ou=new yt(Pi,new Pu)}function Pu(){}w(292,269,Jl,Pu);_.Hd=function(a){var b;b=this.a;Tq((Qq(),Rq),new Qu(a,a.b,b))};_.Kd=function(){return Ou};var Ou;function Ru(){Ru=x;Su=new yt(Qi,new Tu)}function Tu(){}\nw(293,269,Jl,Tu);_.Hd=function(a){a.od(this)};_.Kd=function(){return Su};var Su;function Uu(){Uu=x;Vu=new yt(Ri,new Wu);new yt(Ie,new Wu)}function Wu(){}w(294,269,Jl,Wu);_.Hd=function(a){var b,c,d,e,f;b=Math.round(-this.a.wheelDelta/40)||0;b=new Xu(a.a.i,Ct(this),Dt(this),b);f=0;for(c=Yu(a.a.i.Pc,D(Zu,u,76,0,0)),d=0,e=c.length;da.qI&&(c.tM==x||c.cM&&c.cM[1])&&(!c.cM||!c.cM[-a.qI]))throw new lw;}return a[b]=c}w(324,1,{},ew);_.qI=0;function iw(){iw=x;jw=[];kw=[];var a=new ew,b=jw,c=kw,d=0,e,f;for(f in a)if(e=a[f])b[d]=f,c[d]=e,++d}var jw,kw;function G(a,b){return null!=a&&a.cM&&!!a.cM[b]}function Tp(a){return null!=a&&a.tM!=x&&!(a.cM&&a.cM[1])}function Wp(a){return a.tM==x||a.cM&&!!a.cM[1]}\nfunction mw(a){return null==a?null:a}function nw(a){return~~Math.max(Math.min(a,2147483647),-2147483648)}var ow=-1;\nfunction pw(){var a;$stats&&qw("com.google.gwt.useragent.client.UserAgentAsserter");a=navigator.userAgent.toLowerCase();if(-1!=a.indexOf(hj))a=hj;else if(-1!=a.indexOf("webkit"))a=Oj;else if(-1!=a.indexOf(Ti)&&9<=$doc.documentMode)a="ie9";else if(-1!=a.indexOf(Ti)&&8<=$doc.documentMode)a="ie8";else{var b;var c=/msie ([0-9]+)\\.([0-9]+)/.exec(a);c&&3==c.length&&(b=6E3<=1E3*parseInt(c[1])+parseInt(c[2]));a=b?"ie6":-1!=a.indexOf("gecko")?"gecko1_8":"unknown"}H(Oj,a)||$wnd.alert("ERROR: Possible problem with your *.gwt.xml module file.\\nThe compile time user.agent value (safari) does not match the runtime user.agent value ("+\na+"). Expect more errors.\\n");$stats&&qw("com.google.gwt.user.client.DocumentModeAsserter");b=$doc.compatMode;a=z(rw,u,1,[ve]);for(c=0;c>22&4194303,0>a?1048575:0)}\nfunction zw(a){return yw(a.l,a.m,a.h)}function yw(a,b,c){return _=new Aw,_.l=a,_.m=b,_.h=c,_}\nfunction Bw(a,b){var c,d,e,f,g;if(0==b.l&&0==b.m&&0==b.h)throw new Cw;if(0==a.l&&0==a.m&&0==a.h)return Dw=yw(0,0,0),yw(0,0,0);if(524288==b.h&&0==b.m&&0==b.l)return c=a,524288==c.h&&0==c.m&&0==c.l?(Dw=yw(0,0,0),c=zw((Ew(),Fw))):(Dw=yw(c.l,c.m,c.h),c=yw(0,0,0)),c;g=!1;0!=~~b.h>>19&&(b=Gw(b),g=!0);e=b.l;0!=(e&e-1)?f=-1:(d=b.m,0!=(d&d-1)?f=-1:(c=b.h,f=0!=(c&c-1)||0==c&&0==d&&0==e?-1:0==c&&0==d&&0!=e?Hw(e):0==c&&0!=d&&0==e?Hw(d)+22:0!=c&&0==d&&0==e?Hw(c)+44:-1));c=d=e=!1;if(524288==a.h&&0==a.m&&0==a.l)if(e=\nd=!0,-1==f)a=zw((Ew(),Iw)),c=!0,g=!g;else return c=Jw(a,f),g&&Kw(c),Dw=yw(0,0,0),c;else 0!=~~a.h>>19&&(e=!0,a=Gw(a),c=!0,g=!g);if(-1!=f){c=a;d=f;f=g;g=e;e=Jw(c,d);f&&Kw(e);var h;22>=d?(f=c.l&(1<=d?(f=c.l,h=c.m&(1<r?\nj=!1:(o=j.l-f.l,n=j.m-f.m+(~~o>>22),r+=~~n>>22,0>r?j=!1:(j.l=o&4194303,j.m=n&4194303,j.h=r&1048575,j=!0));if(j&&(22>l?h.l|=1<l?h.m|=1<>>1;f.m=~~j>>>1|(o&1)<<21;f.l=~~n>>>1|(j&1)<<21;--l}g&&Kw(h);e?(Dw=Gw(c),d&&(Dw=Ow(Dw,(Ew(),Fw)))):Dw=yw(c.l,c.m,c.h);return h}function Kw(a){var b,c,d;b=~a.l+1&4194303;c=~a.m+(0==b?1:0)&4194303;d=~a.h+(0==b&&0==c?1:0)&1048575;a.l=b;a.m=c;a.h=d}\nfunction Mw(a){var b;b=Pw(a.h);return 32==b?(b=Pw(a.m),32==b?Pw(a.l)+32:b+20-10):b-12}var Dw=null;function Qw(a,b){return a.l==b.l&&a.m==b.m&&a.h==b.h}function J(a){var b,c,d;if(isNaN(a))return Ew(),Rw;if(-9223372036854775E3>a)return Ew(),Sw;if(9223372036854775E3<=a)return Ew(),Iw;d=!1;0>a&&(d=!0,a=-a);c=0;17592186044416<=a&&(c=nw(a/17592186044416),a-=17592186044416*c);b=0;4194304<=a&&(b=nw(a/4194304),a-=4194304*b);a=nw(a);b=yw(a,b,c);d&&Kw(b);return b}\nfunction Tw(a){var b,c;return-129a?(b=a+128,null==Uw&&(Uw=D(Vw,u,31,256,0)),c=Uw[b],!c&&(c=Uw[b]=xw(a)),c):xw(a)}function Ww(a){var b=Tk,c,d;c=~~a.h>>19;d=~~b.h>>19;return 0==c?0!=d||a.h>b.h||a.h==b.h&&a.m>b.m||a.h==b.h&&a.m==b.m&&a.l>b.l:!(0==d||a.h>19;d=~~b.h>>19;return 0==c?0!=d||a.h>b.h||a.h==b.h&&a.m>b.m||a.h==b.h&&a.m==b.m&&a.l>=b.l:!(0==d||a.h>13|(a.m&15)<<9;e=~~a.m>>4&8191;f=~~a.m>>17|(a.h&255)<<5;g=~~(a.h&1048320)>>8;h=b.l&8191;j=~~b.l>>13|(b.m&15)<<9;l=~~b.m>>4&8191;o=~~b.m>>17|(b.h&255)<<5;n=~~(b.h&1048320)>>8;r=c*h;y=d*h;t=e*h;v=f*h;g*=h;0!=j&&(y+=c*j,t+=d*j,v+=e*j,g+=f*j);0!=l&&(t+=c*l,v+=d*l,g+=e*l);0!=o&&(v+=c*o,g+=d*o);0!=n&&(g+=c*n);c=(r&4194303)+((y&511)<<13);r=(~~r>>22)+(~~y>>9)+((t&262143)<<4)+((v&31)<<17)+(~~c>>22);t=(~~t>>18)+(~~v>>5)+((g&4095)<<8)+(~~r>>\n22);return yw(c&4194303,r&4194303,t&1048575)}function Gw(a){var b,c;b=~a.l+1&4194303;c=~a.m+(0==b?1:0)&4194303;return yw(b,c,~a.h+(0==b&&0==c?1:0)&1048575)}function Nw(a,b){var c,d,e,b=b&63;22>b?(c=a.l<>22-b,e=a.h<>22-b):44>b?(c=0,d=a.l<>44-b):(d=c=0,e=a.l<b?(e=~~c>>b,d=~~a.m>>b|c<<22-b,c=~~a.l>>b|a.m<<22-b):44>b?(e=d?1048575:0,d=~~c>>b-22,c=~~a.m>>b-22|c<<44-b):(e=d?1048575:0,d=d?4194303:0,c=~~c>>b-44);return yw(c&4194303,d&4194303,e&1048575)}function Ow(a,b){var c,d;c=a.l-b.l;d=a.m-b.m+(~~c>>22);return yw(c&4194303,d&4194303,a.h-b.h+(~~d>>22)&1048575)}function P(a){return a.l|a.m<<22}\nfunction Yw(a){var b,c,d;if(0==a.l&&0==a.m&&0==a.h)return yc;if(524288==a.h&&0==a.m&&0==a.l)return"-9223372036854775808";if(0!=~~a.h>>19)return rb+Yw(Gw(a));for(c=m;!(0==a.l&&0==a.m&&0==a.h);){b=Tw(1E9);a=Bw(a,b);b=m+P(Dw);if(!(0==a.l&&0==a.m&&0==a.h))for(d=9-b.length;0d||d>a.p.c)throw new Yy;b.ob==a&&(f=a.Ae(b),fd||d>=c.c)throw new Yy;for(--c.c;dg&&l.charAt(g)==rb&&0==l.indexOf(f)&&(e[h]=d+l.substring(g))}c.className=e.join(ea)}lz(this,this.T);qz(this);qy(hr(this.pb),qj,!1);qy(this.T.b,b+"Content",!0)}w(388,389,tl);_.se=function(){Hy(this.T)};_.te=function(){Ky(this.T)};_.He=function(){return this.T.jb};_.Ce=function(){return new nz(this.T)};_.ze=function(a){return this.T.ze(a)};_.Ie=function(a){lz(this.T,a);qz(this)};_.T=null;w(387,388,tl);_.we=Qy;\nfunction zz(){zz=x;Az=new Bz(0,(vz(),wz));Cz=new Bz(1,Dz);Ez=new Bz(2,Fz);Gz=z(Hz,u,38,[Az,Cz,Ez])}function Bz(a,b){this.b=a;this.a=b}w(391,198,{38:1,89:1,94:1,96:1},Bz);_.a=null;var Gz,Az,Cz,Ez;function Iz(){Iz=x;Jz=z(rw,u,1,[wk,Ki,Pg])}\nfunction yz(a){var b;Iz();var c,d;c=this.pb=$doc.createElement(jk);this.c=$doc.createElement(mk);vx(c,this.c);c[Tg]=0;for(c=c[Sg]=0;c";h=new fx(c.a.a);g.innerHTML=h.a||m;g=hr(g);a.kb&&(a.pb.__listener=\nnull);if(a.pb&&(h=a.pb,b=h.parentNode))b.insertBefore(g,h),b.removeChild(h);a.pb=g;a.kb&&(a.pb.__listener=a);-1==a.lb?(g=a.pb,a=133333119|(a.pb.__eventBits||0),Dx(),ny(g,a)):a.lb|=133333119}w(420,421,{},uA);_.a=0;_.b=0;_.c=0;_.d=null;_.e=0;function vA(a,b){this.a=a;this.b=b}w(422,1,{},vA);_.pd=function(){var a,b;this.b.a!=this.a||this!=this.a.f||(this.a.f=null,this.b.kb?(a=(b=$doc.createEvent("HTMLEvents"),b.initEvent(vi,!1,!1),b),this.b.pb.dispatchEvent(a)):this.b.pb.__gwtLastUnhandledEvent=vi)};\n_.a=null;_.b=null;w(424,353,$l);function BA(a){this.a=a}w(426,424,$l,BA);_.Wd=function(a){this.a.Oe(a.f,a.a)};function CA(a,b,c){var d;if(a.o){var e=d=$doc.createElement(Bk);ly(a.e,(wx(),xx(e)),b);a=(wx(),xx(c));d.appendChild(a)}else d=cy(a.e,0),ly(d,(wx(),xx(c)),b)}\nfunction DA(a,b,c){var d;b.b&&(EA(a,b),c&&b.a?(EA(a,null),a=b.a,b=(Qq(),Rq),b.c=Uq(b.c,[new FA(a),!1])):null!=b.d&&(a.j=new GA(a,b),c=(vz(),Dz),a.j.U=c,a.j.ab=a.f,c=ai,a.j.me()[Yg]=c,d=vy(a.pb),H($h,d)||py(a.j,d+"Popup"),Gy(a.j,new BA(a),Xm?Xm:Xm=new Ym),a.n=b.d,d=a.j,a=new HA(a,b),d.pb.style[Kk]=ei,sz(d),bw(),a.a.o?rz(a.a.j,kr(a.a.pb)+cr(a.a.pb,fj)-1,mr(a.b.pb)):rz(a.a.j,kr(a.b.pb),mr(a.a.pb)+cr(a.a.pb,ej)-1),d.pb.style[Kk]=Lk))}\nfunction IA(a,b){!b&&a.k&&a.n==a.k.d||b&&!b.b||(EA(a,b),JA((Yz(),a.pb)),b&&a.d&&DA(a,b,!1))}\nfunction KA(a,b){var c;a:{c=nr(b);var d,e;for(e=new Jv(a.i);e.bc&&(c=a.i.c-1),c==b){d=Nx(a.i,b);break}else if(d=Nx(a.i,c),d.b)break;EA(a,d)}}w(427,385,xl);_.ee=function(a){KA(this,a)};_.we=function(){this.j&&oz(this.j,!1);Ky(this)};_.Oe=function(a,b){OA(this,a,b)};_.d=!1;_.e=null;_.f=!1;_.j=null;_.k=null;_.n=null;_.o=!1;function FA(a){this.a=a}\nw(428,1,{},FA);_.pd=function(){RA(this.a)};_.a=null;function SA(a){this.a=a}w(429,1,{},SA);_.Ld=function(){EA(this.a,null)};_.a=null;function GA(a,b){this.a=a;this.b=b;tz.call(this,!0,Fi);lz(this.T,this.b.d);qz(this);this.fb=!0;this.b.d.ji()}w(430,388,tl,GA);_.ae=function(a){var b,c;if(!a.a)switch(Bx(a.d.type)){case 4:c=nr(a.d);b=this.b.c.pb;if(b.contains(c)){a.a=!0;break}a.a&&EA(this.a,null)}};_.a=null;_.b=null;function HA(a,b){this.a=a;this.b=b}w(431,1,{},HA);_.a=null;var TA=_.b=null;\nfunction UA(){UA=x;TA=new $w((qx(),new px((bw(),"data:image/gif;base64,R0lGODlhBQAJAIAAAAAAAAAAACH5BAEAAAEALAAAAAAFAAkAAAIMRB5gp9v2YlJsJRQKADs="))),5,9)}function VA(a,b){if(b){var c=vy(a.pb)+$b;qy(a.me(),c,!1)}else c=vy(a.pb)+$b,qy(a.me(),c,!0);a.b=b}function WA(a,b){this.pb=$doc.createElement(nk);var c=vy(this.pb)+bc;qy(this.me(),c,!1);this.pb.textContent=a||m;this.pb[Yg]="gwt-MenuItem";c=or();this.pb.setAttribute(gi,c);fo();this.pb.setAttribute(Gj,Mo.a);this.a=b}w(434,386,{42:1,46:1,49:1},WA);\n_.a=null;_.b=!0;_.c=null;_.d=null;function XA(){var a;this.pb=$doc.createElement(nk);this.pb[Yg]="gwt-MenuItemSeparator";a=$doc.createElement(th);vx(this.pb,a);a[Yg]="menuSeparatorInner"}w(435,386,Hl,XA);function YA(){var a,b,c,d,e;b=null.ji();e=qr();d=pr();b[sh]=(ds(),Zi);b[Nk]=0+(zs(),uj);b[di]=Fc;c=$doc;c=(H(c.compatMode,ve)?c.documentElement:c.body).scrollWidth||0;a=$doc;a=(H(a.compatMode,ve)?a.documentElement:a.body).scrollHeight||0;b[Nk]=(c>e?c:e)+uj;b[di]=(a>d?a:d)+uj;b[sh]="block"}\nfunction uz(){}w(436,1,{},uz);_.Yd=function(){YA()};function ZA(a){this.a=a}w(437,1,{},ZA);\n_.ae=function(a){var b=this.a,c,d;if(a.a||!b.fb&&a.b)b.db&&(a.a=!0);else if(b.ae(a),!a.a){d=a.d;c=nr(d);var e;try{e=!!c&&!!c.nodeType}catch(f){e=!1}(c=e&&c&&1==c.nodeType?b.pb.contains(c):!1)&&(a.b=!0);b.db&&(a.a=!0);switch(Bx(d.type)){case 4:case 1048576:if(Ax){a.b=!0;break}if(!c&&b.V){b.Ke(!0);break}break;case 8:case 64:case 1:case 2:case 4194304:if(Ax){a.b=!0;break}break;case 2048:d=nr(d),b.db&&!c&&d&&(d.blur&&d!=$doc.body&&d.blur(),a.a=!0)}}};_.a=null;function $A(a){this.a=a}w(438,1,{},$A);\n_.a=null;function vz(){vz=x;wz=new aB(0);Dz=new aB(1);Fz=new aB(2);bB=z(cB,u,47,[wz,Dz,Fz])}function aB(a){this.b=a}w(439,198,{47:1,89:1,94:1,96:1},aB);var bB,wz,Dz,Fz;function dB(a){a.j?a.a.bb&&($doc.body.appendChild(a.a.Z),a.f=Qx(a.a.$),YA(),a.b=!0):a.b&&($doc.body.removeChild(a.a.Z),eB(a.f.a),a.f=null,a.b=!1)}function fB(a){a.j||(dB(a),a.c||(My(),ez(gB(null),a.a)));a.a.pb.style[ah]="rect(auto, auto, auto, auto)";a.a.pb.style[mj]=Lk}\nfunction hB(a,b){var c,d,e,f,g,h;a.j||(b=1-b);c=f=e=g=0;d=nw(b*a.d);h=nw(b*a.e);switch(a.a.U.b){case 2:f=a.e;c=d;break;case 0:g=~~(a.d-d)>>1;e=~~(a.e-h)>>1;f=e+h;c=g+d;break;case 1:bw(),f=h,c=d}a.a.pb.style[ah]="rect("+g+wj+f+wj+c+wj+e+"px)"}\nfunction pz(a,b,c){a.c=c;Dm(a);a.i&&(Zm(a.i),a.i=null,fB(a));a.a.hb=b;var d=a.a;d.eb&&(eB(d.eb.a),d.eb=null);d._&&(eB(d._.a),d._=null);if(d.hb){d.eb=Cx(new ZA(d));var e;e=new $A(d);Jx();e=Kx?xv(Kx.a,(!wv&&(wv=new Ym),wv),e):null;d._=e}c=!c&&a.a.ab;a.a.U!=(vz(),wz)&&!b&&(c=!1);a.j=b;c?b?(dB(a),a.a.pb.style[rj]=hg,-1!=a.a.ib&&a.a.Le(a.a.cb,a.a.ib),a.a.pb.style[ah]=Bj,My(),b=gB(null),Vy(b,a.a,b.pb),a.i=new iB(a),Rm(a.i,1)):Em(a,200):(dB(a),a.j?(a.a.pb.style[rj]=hg,-1!=a.a.ib&&a.a.Le(a.a.cb,a.a.ib),My(),\nb=gB(null),Vy(b,a.a,b.pb)):a.c||(My(),ez(gB(null),a.a)),a.a.pb.style[mj]=Lk)}function xz(a){var b=(Jm(),Mm);this.k=new Im(this);this.t=b;this.a=a}w(440,59,{},xz);_.rd=function(){fB(this)};_.sd=function(){this.d=cr(this.a.pb,ej);this.e=cr(this.a.pb,fj);this.a.pb.style[mj]=ei;hB(this,(1+Math.cos(3.141592653589793))/2)};_.td=function(a){hB(this,a)};_.a=null;_.b=!1;_.c=!1;_.d=0;_.e=-1;_.f=null;_.i=null;_.j=!1;function iB(a){Sm();this.a=a}w(441,66,{},iB);_.zd=function(){this.a.i=null;Em(this.a,200)};\n_.a=null;function wx(){wx=x;jB()}function xx(a){return a.__gwt_resolve?a.__gwt_resolve():a}function jB(){function a(){}a.prototype={className:m,clientHeight:0,clientWidth:0,dir:m,getAttribute:function(a){return this[a]},href:m,id:m,lang:m,nodeType:1,removeAttribute:function(a){this[a]=void 0},setAttribute:function(a,c){this[a]=c},src:m,style:{},title:m};$wnd.GwtPotentialElementShim=a}function My(){My=x;kB=new lB;mB=new Ip;Ny=new Gv}function nB(a){this.p=new iz(this);this.pb=a;Hy(this)}\nfunction gB(a){My();var b,c;c=Uv(mB,a);b=null;if(null!=a&&!(b=$doc.getElementById(a)))return null;if(c&&(!b||c.pb==b))return c;if(0==mB.d){var d=new oB;Vm();Wm(Xm?Xm:Xm=new Ym,d);bw()}!b?c=new pB:c=new nB(b);E(mB,a,c);Hv(Ny,c);return c}w(443,382,tl,nB);var kB,mB,Ny;function lB(){}w(444,1,{},lB);_.Ne=function(a){a.ue()&&a.we()};function oB(){}w(445,1,{},oB);_.Wd=function(){My();try{Ry(Ny,kB)}finally{qB(Ny.a),qB(mB)}};function pB(){nB.call(this,$doc.body)}w(446,443,tl,pB);\n_.Fe=function(a,b,c){gz(a,b-0,c-0)};function nz(a){this.c=a;this.a=!!this.c.jb}w(447,1,{},nz);_.be=gx;_.ce=function(){if(!this.a||!this.c.jb)throw new az;this.a=!1;return this.b=this.c.jb};_.de=function(){this.b&&this.c.ze(this.b)};_.b=null;_.c=null;function rB(a,b){a.pb[Ik]=null!=b?b:m}w(450,400,xl);_.ee=function(a){0!=(Bx(a.type)&896)?Jy(this,a):Jy(this,a)};_.xe=Py;function sB(){sB=x;Pz();tB()}function uB(a){!ux&&(ux=new tx);!sx&&(sx=new rx);Pz();this.pb=a;bw()}w(449,450,xl);\nfunction vB(){sB();var a=gr(ok);uB.call(this,a);this.pb[Yg]="gwt-TextBox"}w(451,449,xl,vB);function tB(){tB=x;wB=new xB;yB=new zB;AB=new BB;CB=new DB;EB=z(FB,u,50,[wB,yB,AB,CB])}w(452,198,Wl);var EB,wB,yB,AB,CB;function xB(){this.b=0}w(453,452,Wl,xB);function zB(){this.b=1}w(454,452,Wl,zB);function BB(){this.b=2}w(455,452,Wl,BB);function DB(){this.b=3}w(456,452,Wl,DB);function $y(a,b){var c;for(c=0;cc||c>a.c)throw new Yy;if(a.c==a.a.length){e=D(GB,u,51,2*a.a.length,0);for(d=0;dc;--d)yq(a.a,d,a.a[d-1]);yq(a.a,c,b)}function iz(a){this.b=a;this.a=D(GB,u,51,4,0)}w(458,1,{},iz);_.Ce=function(){return new bz(this)};_.a=null;_.b=null;_.c=0;function HB(a){if(a.a>=a.b.c)throw new az;return a.b.a[++a.a]}function IB(a){if(0>a.a||a.a>=a.b.c)throw new JB;a.b.b.ze(a.b.a[a.a--])}function bz(a){this.b=a}w(459,1,{},bz);\n_.be=function(){return this.aa)throw new an("Missing message: awt.133");this.e=a;this.a=2;this.c=0;this.d=10;this.b=0}w(485,1,{56:1},XC);\n_.eQ=function(a){return a===this?!0:G(a,56)?a.e==this.e&&a.a==this.a&&a.c==this.c&&a.d==this.d&&a.b==this.b:!1};_.hC=function(){var a;a=new YC;a.a=31*a.a+nw((new ZC(this.e)).a);a.a=31*a.a+this.a;a.a=31*a.a+this.c;a.a=31*a.a+nw((new ZC(this.d)).a);return a.a};_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;\nfunction $C(){$C=x;aD=bD=new sm(255,255,255);cD=new sm(192,192,192);dD=new sm(128,128,128);eD=new sm(64,64,64);fD=gD=new sm(0,0,0);hD=iD=new sm(255,0,0);new sm(255,175,175);jD=new sm(255,200,0);kD=new sm(255,255,0);new sm(0,255,0);lD=new sm(255,0,255);mD=new sm(0,255,255);nD=oD=new sm(0,0,255)}\nfunction pD(a){var b,c;c=~~a.d>>16&255;b=a.d&255;a=~~a.d>>8&255;if(0==c&&0==b&&0==a)return new sm(3,3,3);3>c&&0!=c?c=3:(c=nw(c/0.7),c=255b&&0!=b?b=3:(b=nw(b/0.7),b=255a&&0!=a?a=3:(a=nw(a/0.7),a=255>16&255)),nw(0.7*(~~a.d>>8&255)),nw(0.7*(a.d&255)))}function rD(a,b){return G(b,59)?b.d==a.d:!1}function sm(a,b,c){$C();if((a&255)!=a||(b&255)!=b||(c&255)!=c)throw new an(Ce);this.d=c|b<<8|a<<16|-16777216}\nw(491,1,{59:1,68:1,71:1},sm);_.eQ=function(a){return rD(this,a)};_.hC=sD;_.tS=function(){return tD.d+"[r="+(~~this.d>>16&255)+",g="+(~~this.d>>8&255)+",b="+(this.d&255)+dg};_.a=0;_.b=null;_.c=null;_.d=0;var fD,nD,hD,aD,gD,oD,mD,eD,dD,cD,lD,jD,iD,bD,kD;function nC(){nC=x;oC=new uD(!0);vD=new Gv;Hv(vD,"ar");Hv(vD,"fa");Hv(vD,"iw");Hv(vD,"ur")}function uD(a){this.a=a}w(492,1,Xl,uD);_.a=!1;var oC,vD;w(496,1,{77:1,93:1});function wD(){eC.call(this,0,0)}function eC(a,b){this.b=a;this.a=b}\nfunction gC(a){eC.call(this,a.b,a.a)}w(495,496,{62:1,77:1,89:1,93:1},wD,eC,gC);_.eQ=function(a){return a===this?!0:G(a,62)?a.b==this.b&&a.a==this.a:!1};_.hC=function(){var a;a=new YC;a.a=31*a.a+this.b;a.a=31*a.a+this.a;return a.a};_.tS=function(){return xD.d+"[width="+this.b+",height="+this.a+dg};_.a=0;_.b=0;function vu(a,b,c){this.f=a;this.c=b;this.e=this.d=this.j=this.i=0;this.b=c}w(497,1,Xl,vu,function(a,b,c,d){this.f=a;this.c=b;this.j=this.i=0;this.d=c;this.e=d;this.b=null});\n_.yf=function(){return 0!=(this.e&4)};_.zf=function(){return 0!=(this.e&1)};_.tS=function(){var a;return this.cZ.d+"[id="+this.c+",x="+this.i+",y="+this.j+(0!=this.d?",key="+this.d+(a=m,this.zf()&&(a+=",shift"),0!=(this.e&2)&&(a+=",control"),this.yf()&&(a+=",meta"),a):m)+",target="+this.f+(null!=this.b?",arg="+this.b:m)+dg};_.b=null;_.c=0;_.d=0;_.e=0;_.f=null;_.i=0;_.j=0;function yD(a){var b,c;for(c=b=0;cb.b&&(zD(this,l,b.b-(o-this.c),g.b,n,j,h),l.vg(),o=f,n+=j+this.d,j=0),e=!1,yq(l.b,l.c++,c),o+=a.b+this.c,j=fn(j,a.a);zD(this,l,b.b-(o-this.c),g.b,n,\nj,h)}};_.vf=function(a){this.b=ED(a.Fc);return 0==yD(this)?vC(a,new eC(10,10)):vC(a,BD(this,!1))};_.wf=function(a){this.b=ED(a.Fc);return 0==yD(this)?vC(a,new eC(10,10)):vC(a,BD(this,!0))};_.xf=sC;_.tS=function(){var a;switch(this.a){case 0:a=pi;break;case 2:a=Fj;break;case 1:a=Ug;break;case 4:a="trailing";break;default:a="leading"}return HD.d+"[hgap="+this.c+",vgap="+this.d+",align="+a+dg};_.a=0;_.b=null;_.c=0;_.d=0;function ID(){ID=x;JD=new KD(Le,0,12)}\nfunction KD(a,b,c){ID();this.a=null!=a?a:"Default";this.b=0<=c?c:0;this.c=0==(b&-4)?b:0}w(499,1,{63:1,89:1},KD);_.a=null;_.b=0;_.c=0;var JD;w(500,1,jm);_.tS=function(){return LD.d+"[font="+this.b+"ascent="+MD(this.b).a+", descent="+MD(this.b).b+", height="+MD(this.b).c+dg};_.b=null;w(502,1,{});_.tS=function(){return"Graphics"};w(503,502,{});function JB(){}function Iy(a){this.f=a}w(506,139,lm,JB,Iy);function aC(){this.f="Missing message: awt.151"}w(505,506,lm,aC);w(507,1,{});\nfunction qC(a,b,c,d){this.d=a;this.b=b;this.a=c;this.c=d}w(508,1,{65:1,89:1,93:1},qC);_.eQ=function(a){return a===this?!0:G(a,65)?a.b==this.b&&a.a==this.a&&a.c==this.c&&a.d==this.d:!1};_.hC=function(){var a;a=31+this.d;a=31*a+this.b;a=31*a+this.a;return a=31*a+this.c};_.tS=function(){return ND.d+"[left="+this.b+",top="+this.d+",right="+this.c+",bottom="+this.a+dg};_.a=0;_.b=0;_.c=0;_.d=0;w(512,1,Xl);_.hf=function(){return this.j};_.tS=uC;_.j=null;_.k=null;\nfunction OD(a){var b;b=a.j+",label="+a.f;a.e||(b+=",disabled");null!=a.c&&(b+=",command="+a.c);return b}function PD(a,b){a.e=b;VA(a.i.a,b)}function QD(a){this.n=(kC(),kC(),lC);var b;var c;b=this.cZ.d;-1!=wy(b,xy(36))?b=null:(c=this.n.b.d++,b=zy(b,VB(b,xy(46))+1)+m+c);this.j=b;this.d=new VC;this.f=a;this.e=!0;this.i=new RD(this)}w(511,512,Xl,QD);_.hf=function(){return OD(this)};_.c=null;_.e=!1;_.f=null;_.i=null;w(510,511,Zl);_.hf=function(){return OD(this)+(this.b?",tearOff":m)};_.b=!1;w(514,1,{78:1});\n_.eQ=function(a){return a===this?!0:G(a,78)?this.Af()==a.Af()&&this.Bf()==a.Bf():!1};_.hC=function(){var a;a=new YC;SD(a,this.Af());SD(a,this.Bf());return a.a};function $B(){this.b=this.a=0}function TD(a,b){this.a=a;this.b=b}w(513,514,{69:1,78:1,89:1},$B,TD);_.eQ=function(a){return a===this?!0:G(a,69)?this.a==a.a&&this.b==a.b:!1};_.Af=gx;_.Bf=Lz;_.tS=function(){return UD.d+"[x="+this.a+",y="+this.b+dg};_.a=0;_.b=0;\nfunction VD(a,b){if(!b)throw new yv("Missing message: awt.70");var c=a.a;if(H(b.f,rb)){var c=c.a.a,d=new XA,e=c.c.c;if(0>e||e>c.c.c)throw new Yy;c.o&&(d.pb[ch]=2);CA(c,e,d.pb);WD(c.c,e,d)}else{var d=c.a.a,c=b.i.a,e=d.c.c,f,g;if(0>e||e>d.c.c)throw new Yy;WD(d.c,e,c);for(f=g=0;fb?0:b;jE(this.Tc,a)}w(524,523,Fl,hE,iE);_.Se=function(){return"textfield"+this.Vc.b.f++};_.Ue=function(){return fE(this,dr(this.Tc.a.pb,Ik).length)};_.Ve=function(){return!WB(this)?null:fE(this,dr(this.Tc.a.pb,Ik).length)};_.Xe=kE;_.Ze=lE;_.bf=function(){this.Tc=(kC(),new mE)};_.ff=kE;_.jf=lE;_.a=0;function kC(){kC=x;lC=new nE}function oE(){var a=(kC(),kC(),lC);!a.c&&(a.c=new rE);return a.c}w(525,1,{});_.a=null;\n_.c=null;var lC;function sE(){}w(526,1,{},sE);_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;_.f=0;w(527,1,{});function tE(){tE=x;uE=new vE;wE=new vE}function xE(a,b){return b==a?!0:!b?!1:!0}function vE(){}w(528,1,{73:1},vE);_.eQ=function(a){return null==a||!G(a,73)?!1:xE(this,a)};_.hC=function(){var a;a=null.ji()+";class="+null.ji();a=!null.ji().ji()?a:a+";charset=";return yE(a)};_.tS=function(){return zE.d+"[MimeType=(null);humanPresentableName="+this.a+dg};_.a=null;var uE,wE;\nfunction AE(){AE=x;z(BE,u,73,[(tE(),wE),uE])}function CE(a){var b=(tE(),wE);if(xE(b,(tE(),wE)))return a.a;if(xE(b,uE))return new DE(a.a);throw new EE(b);}function FE(a){AE();this.a=a}w(529,1,{},FE);_.a=null;function EE(a){this.f="flavor = "+a}w(530,140,{74:1,89:1,97:1,106:1},EE);function GE(a,b,c){OC();HE.call(this,a,b,c,Tk)}function HE(a,b,c,d){OC();MC.call(this,a);this.k=b;this.a=c;this.c=d;this.b=0}w(531,478,Xl,GE,HE);\n_.hf=function(){var a,b;a=1001==this.k?"ACTION_PERFORMED":Hk;b=m;0<(this.b&1)&&(b+="Shift");0<(this.b&2)&&(b+=0==b.length?"Ctrl":"+Ctrl");0<(this.b&4)&&(b+=0==b.length?"Meta":"+Meta");0<(this.b&8)&&(b+=0==b.length?"Alt":"+Alt");return a+",cmd="+this.a+",when="+Yw(this.c)+qb+b};_.a=null;_.b=0;_.c=Tk;function iC(a,b){OC();MC.call(this,a);this.k=b}w(532,478,Xl,iC);\n_.hf=function(){var a,b;a=this.n;switch(this.k){case 100:b="COMPONENT_MOVED";break;case 101:b="COMPONENT_RESIZED";break;case 102:return"COMPONENT_SHOWN";case 103:return"COMPONENT_HIDDEN";default:return Hk}return b+" ("+a._e()+mb+a.af()+ea+a.$e()+Ok+a.We()+gb};w(535,532,Xl);_.j=0;\nfunction IE(a){var b;switch(a.k){case 503:b="MOUSE_MOVED";break;case 500:b="MOUSE_CLICKED";break;case 501:b="MOUSE_PRESSED";break;case 502:b="MOUSE_RELEASED";break;case 506:b="MOUSE_DRAGGED";break;case 504:b="MOUSE_ENTERED";break;case 505:b="MOUSE_EXITED";break;case 507:b="MOUSE_WHEEL";break;default:b=Hk}b=b+",("+a.f+mb+a.i+"),button="+a.d;if(0<(a.j&16320)){var c=qb,d;d=a.j;var e;e=new cx;0!=(d&4)&&Lp(Lp(e,(kC(),null)),lb);0!=(d&1)&&Lp(Lp(e,(kC(),null)),lb);0!=(d&2)&&Lp(Lp(e,(kC(),null)),lb);0!=(d&\n8)&&(0!=(d&2048)?0!=(d&512)&&Lp(Lp(e,(kC(),null)),lb):Lp(Lp(e,(kC(),null)),lb));0!=(d&32)&&Lp(Lp(e,(kC(),null)),lb);0!=(d&16)&&Lp(Lp(e,(kC(),null)),lb);0!=(d&8)&&Lp(Lp(e,(kC(),null)),lb);0!=(d&4)&&Lp(Lp(e,(kC(),null)),lb);d=0==e.a.a.length?e.a.a:JE(e.a.a,0,e.a.a.length-1);c=c+d+",extModifiers=";d=a.j;var f;e=(f=m,0!=(d&256)&&(f+=(kC(),null)),0!=(d&128)&&(f+=(0=this.k?0!=(this.j&16)?(this.d=1,501==this.k&&(this.j|=1024)):0!=(this.j&8)?(this.d=2,501==this.k&&(this.j|=2048)):0!=(this.j&4)&&(this.d=3,501==this.k&&(this.j|=4096)):(0!=(this.j&16)&&(this.j|=1024),0!=(this.j&8)&&(this.j|=\n2048),0!=(this.j&4)&&(this.j|=4096));else if(0!=(this.j&16320))if(this.j&=-64,0!=(this.j&64)&&(this.j|=1),0!=(this.j&128)&&(this.j|=2),0!=(this.j&256)&&(this.j|=4),0!=(this.j&512)&&(this.j|=8),0!=(this.j&8192)&&(this.j|=32),500<=this.k&&502>=this.k)switch(this.d){case 1:this.j|=16;break;case 2:this.j|=8;break;case 3:this.j|=4}else 0!=(this.j&1024)&&(this.j|=16),0!=(this.j&2048)&&(this.j|=8),0!=(this.j&4096)&&(this.j|=4);this.b=0;this.a=1;this.c=d}w(538,537,Xl,Xu);\n_.hf=function(){var a,b;a=IE(this);switch(this.b){case 0:b="WHEEL_UNIT_SCROLL";break;case 1:b="WHEEL_BLOCK_SCROLL";break;default:b=Hk}return a+=",scrollType="+b+",scrollAmount="+this.a+",wheelRotation="+this.c};_.a=0;_.b=0;_.c=0;w(547,1,{});function DE(a){if(null==a)throw new KE;}w(548,547,{},DE);\nfunction LE(){LE=x;ME={};ME["java.vendor"]=Wh;ME["package.restrict.access.sun"]=Fk;ME["sun.java.launcher"]=vf;ME["sun.management.compiler"]=Wh;ME["os.name"]=vf;ME[" sun.boot.class.path"]=vf;ME["path.separator.applet"]=vf;ME["java.vm.specification.vendor"]=Wh;ME["java.runtime.version"]=vf;ME["http.proxyPort"]=vf;ME["user.name"]=vf;ME["user.language"]=vf;ME["os.name.applet"]=vf;ME["browser.version"]=vf;ME["java.version"]=vf;ME["user.timezone"]=vf;ME["java.endorsed.dirs"]=vf;ME["java.specification.name"]=\n"GWT";ME["java.specification.version"]="2.5.0";ME[ki]=bf;!$u&&($u=new hv);$u.a?ME[ii]="yes":ME[ii]=null}var ME;w(552,140,Rl);function NE(){}function OE(a){this.f=a}w(551,552,{83:1,89:1,97:1,106:1},NE,OE);function PE(){PE=x;QE=new RE}function SE(a){var b;if(a.k){var c;b=new cx;Lp(b,a.f);b.a.a+=fd;c=a.a;null!=c&&0=b||65<=b&&90>=b;for(c=1;b&&c=b||65<=b&&90>=b||48<=b&&57>=b||43==b||45==b||46==b;if(b){c=this.f;UE();var f,g,h;h=c.length;b=new VE;for(g=0;g=f?WE(b,f+32&65535):Mp(b.a,String.fromCharCode(f));\nthis.f=b.a.a}else this.f=null,d=-1}if(null==this.f)throw new OE(Ze+a);if(!this.k&&(this.k=Uv(QE,this.f),this.k||(this.k=(kC(),new XE))&&E(QE,this.f,this.k),!this.k))throw new OE(Ze+a);try{c=a;var j=++d,l=a.length,o,n,r,t,y,v,s,A,F,M,N,$,V,W,ca,ja,ra,ac,K,oa,Ac;if(ll){if(-2147483647>=l&&(j>=c.length||0>j)||!(0>j||j>=c.length)&&c.indexOf(rc,j)==j&&-1==YE(c,xy(47),j+2))throw new ZE(l);}else{N=c.substr(j,l-j);l-=j;v=0;s=this.c;$=this.e;ac=this.j;t=this.d;ca=this.i;o=this.a;Ac=this.n;K=YE(N,xy(35),\n0);if(0==N.indexOf(rc)&&0!=N.indexOf("////")){F=2;$=-1;v=YE(N,xy(47),2);ra=YE(N,xy(63),2);-1!=ra&&(-1==v||v>ra)&&(v=ra);-1==v&&(v=l,t=m);A=v;-1!=K&&Kr+1?(n=N.charCodeAt(r+1),58==n?V=r+1:V=-1):V=-1}catch(tb){if(tb=Iq(tb),!G(tb,97))throw tb;}-1==V||V>v?s=N.substr(F,A-F):(s=N.substr(F,V-F),W=N.substr(V+1,A-(V+1)),0==W.length?$=-1:$=$E(W,\n10))}-1v&&(null==t?t=m:H(t,m)?t=nc:t.indexOf(nc),M=VB(t,xy(47))+1,0==M?t=N.substr(v,y-v):t=t.substr(0,M-0)+N.substr(v,y-v)));null==t&&(t=m);null==s&&(s=m);d=s;var Fa;Fa=t;null!=ca&&!H(ca,m)&&(null!=t?Fa=t+Md+ca:Fa=Md+ca);null==this.f&&(this.f=\nthis.f);this.c=d;this.b=Fa;this.e=$;this.j=ac;var ub;null!=this.c&&0this.e)throw new OE("incorrect port: "+\nthis.e);}w(553,1,Xl,TE);_.tS=function(){return SE(this)};_.a=null;_.b=null;_.c=null;_.d=null;_.e=-1;_.f=null;_.i=null;_.j=null;_.k=null;_.n=null;var QE;w(554,1,{});function aF(a,b,c){var d,e;for(d=a.Tf().Ce();d.be();)if(a=d.ce(),e=a.Ch(),null==b?null==e:Vp(b,e))return c&&(a=new bF(a.Ch(),a.Dh()),d.de()),a;return null}w(558,1,Vl);_.Sf=function(a){return!!aF(this,a,!1)};\n_.eQ=function(a){var b,c;if(a===this)return!0;if(!G(a,109)||this.Yf()!=a.Yf())return!1;for(a=a.Tf().Ce();a.be();)if(b=a.ce(),c=b.Ch(),b=b.Dh(),!this.Sf(c)||!cF(b,this.Uf(c)))return!1;return!0};_.Uf=function(a){a=aF(this,a,!1);return!a?null:a.Dh()};_.hC=function(){var a,b,c;c=0;for(b=this.Tf().Ce();b.be();)a=b.ce(),c+=a.hC(),c=~~c;return c};_.Vf=dF;_.Wf=function(){throw new eF("Put not supported on this map");};_.Xf=function(a){a=aF(this,a,!0);return!a?null:a.Dh()};_.Yf=function(){return this.Tf().Yf()};\n_.tS=function(){var a,b,c,d;d=Qk;a=!1;for(c=this.Tf().Ce();c.be();)b=c.ce(),a?d+=ob:a=!0,d+=m+b.Ch(),d+=Id,d+=m+b.Dh();return d+"}"};function qB(a){a.a=[];a.e={};a.c=!1;a.b=null;a.d=0}function fy(a,b){var c;if(null==b)c=a.c;else if(G(b,1))c=fd+b in a.e;else a:{c=a._f(b);if(c=a.a[c])for(var d=0,e=c.length;d=a.i)break;c=nF(a,c);++b}return b}\nfunction oF(a,b){var c;for(c=0;c=a.i)throw new kF;b=a.a;a.a=nF(a,a.a);return JE(a.n,b,a.a)}\nfunction nF(a,b){var c,d;for(d=b;da.f||!oF(a,c))break;d+=65536<=c?2:1}else{c=a.n.charCodeAt(d);if(c>a.f||0>wy(a.c,xy(c)))break;++d}return d}function rF(a){sF.call(this,a,fa,!1)}function tF(a){sF.call(this,a,mb,!1)}\nfunction sF(a,b,c){this.a=0;this.j=-1;this.d=!1;this.n=a;this.i=a.length;this.c=b;this.k=c;var d;if(null==this.c)this.f=0;else{for(c=b=d=0;c=a&&(a=qF(this.c,c,this.c.length),this.e=!0),d=a;++a)0=a;++a)b=Gf,33=j||b>a.Sb||c>a.Sb))){l=D(OG,vl,-1,99,1);h=n=o=0;for(g=b;g<=c;++g)f=PG(a.zb[g]),o+=f.c,n+=f.d,f.d>h&&(h=f.d),l[g]=f.c,2==d&&(l[g]=f.d);a.J&&(o+=25*(j+1),n+=25*(j+1),h+=25);j=g=1;a.J?r=QG(a):r=RG(a);f=nw(r.b);r=nw(r.a);1==d||3==d?f=~~((f-48)/2):2==d&&(r=~~(r/2));o>=f&&(g=f/o);h>=r&&(j=r/h);h=0;a.J&&(a.xb=gd)switch(cH(b,($C(),gD)),f){case 101:cH(b,kD);gH(b,j+3,g+3,a.mb-6,a.mb-6);cH(b,gD);e=g+3;h=a.mb-6;c=\na.mb-6;d=b.a;f=P(J(Q((j+3)*R)));e=P(J(Q(e*R)));h=P(J(Q(h*R)));c=P(J(Q(c*R)));d.n&&(hH(d,!1),iH(d,jH(d,f,e,h,c)));kH(b,j+6,g+6,a.mb-12,a.mb-12);lH(b.a,P(J(Q((j+9)*(mH(),R)))),P(J(Q((g+9)*R))),P(J(Q(2*R))),P(J(Q(4*R))));dH(b,j+a.mb-10,g+9,2,4);0.04>Math.random()&&(cH(b,iD),lH(b.a,P(J(Q((j+10)*R))),P(J(Q((g+18)*R))),P(J(Q(4*R))),P(J(Q(4*R)))));0.96=e;++e)if(bo&&(cH(g,(bG(),jG)[o]),gH(g,f.b[A].q-12,f.b[A].r-\n12,24,24));for(A=1;A<=f.q;++A)l=f.c[A].i,n=f.c[A].j,0!=f.b[l].c&&f.b[l].c==f.b[n].c&&(cH(g,(bG(),jG)[f.b[l].c]),v=f.b[n].q-f.b[l].q,h=f.b[n].r-f.b[l].r,y=Math.sqrt(v*v+h*h),1>y&&(y=1),h/=y,y=v/y,v=9*h,t=9*y,o=FH(4),r=FH(4),o[0]=f.b[l].q+v,r[0]=f.b[l].r-t,o[1]=f.b[n].q+v,r[1]=f.b[n].r-t,o[2]=f.b[n].q-v,r[2]=f.b[n].r+t,o[3]=f.b[l].q-v,r[3]=f.b[l].r+t,rH(g,o,r,4))}for(A=1;A<=f.q;++A){cH(g,($C(),fD));t=f.c[A];l=t.i;n=t.j;1==f.i&&0!=f.b[l].c&&f.b[l].c==f.b[n].c&&cH(g,(bG(),jG)[f.b[l].c]);if(3==t.f||4==\nt.f)o=l,l=n,n=o;o=f.b[l].q;r=f.b[l].r;N=f.b[n].q;M=f.b[n].r;if(1!=t.c||0!=t.f)v=N-o,h=M-r,y=Math.sqrt(v*v+h*h),1>y&&(y=1),h/=y,y=v/y;switch(t.c){case 2:10<=t.f&&cH(g,lD);v=2*h;t=2*y;oH(g.a,P(J(Q((o+v)*(mH(),R)))),P(J(Q((r-t)*R))),P(J(Q((N+v)*R))),P(J(Q((M-t)*R))));oH(g.a,P(J(Q((o-v)*R))),P(J(Q((r+t)*R))),P(J(Q((N-v)*R))),P(J(Q((M+t)*R))));cH(g,gD);break;case 3:oH(g.a,P(J(Q(o*(mH(),R)))),P(J(Q(r*R))),P(J(Q(N*R))),P(J(Q(M*R))));l=3*h;n=3*y;oH(g.a,P(J(Q((o+l)*R))),P(J(Q((r-n)*R))),P(J(Q((N+l)*R))),P(J(Q((M-\nn)*R))));oH(g.a,P(J(Q((o-l)*R))),P(J(Q((r+n)*R))),P(J(Q((N-l)*R))),P(J(Q((M+n)*R))));break;case 9:case 0:for(n=0;10>n;++n)l=o-(o-N)/10*n,s=r-(r-M)/10*n,oH(g.a,P(J(Q(l*(mH(),R)))),P(J(Q(s*R))),P(J(Q(l*R))),P(J(Q(s*R))));GH(g,f.k.v);n=MD(f.k.w.b).a-MD(f.k.w.b).b;t=t.d;l=Md;null!=t&&(l=t);t=gE(f.k.w,l);t=(o+N)/2-t/2;M=(r+M)/2+~~(n/2)-1;cH(g,lD);HH(g.a,l,P(J(Q(t*(mH(),R)))),P(J(Q(M*R))));cH(g,gD);break;default:if(1==t.f||3==t.f)v=3*h,t=3*y,s=FH(3),j=FH(3),s[0]=N+v,j[0]=M-t,s[1]=o,j[1]=r,s[2]=N-v,j[2]=\nM+t,rH(g,s,j,3);else if(2==t.f||4==t.f){v=3*h;t=3*y;for(n=0;10>n;++n)l=o-(o-N)/10*n,s=r-(r-M)/10*n,j=n/10,oH(g.a,P(J(Q((l+v*j)*(mH(),R)))),P(J(Q((s-t*j)*R))),P(J(Q((l-v*j)*R))),P(J(Q((s+t*j)*R))))}else oH(g.a,P(J(Q(o*(mH(),R)))),P(J(Q(r*R))),P(J(Q(N*R))),P(J(Q(M*R))))}}y=FH(f.p+1);h=FH(f.p+1);for(A=1;A<=f.q;++A)l=f.c[A].i,n=f.c[A].j,o=f.b[l].q,r=f.b[n].q,++h[l],++h[n],y[l]=y[l]/h[l]+r/h[l],y[n]=y[n]/h[n]+o/h[n];GH(g,f.k.v);n=MD(f.k.w.b).a-MD(f.k.w.b).b;N=FH(f.p+1);r=FH(f.p+1);o=D(IH,u,121,f.p+1,0);\nfor(A=1;A<=f.p;++A)l=JH(f,A),(null==l||1>l.length)&&(l=kb),j=f.b[A],3==f.b[A].a&&0LH(y[A]-f.b[A].q)&&(v=!1),2LH(y[A]-f.b[A].q)&&(M=!0),t=l,s=m,f.k.oc&&(F=f.b[A].i,0y&&(y=1),h/=y,y=v/y,v=4*h,t=4*y,s=FH(5),j=FH(5),s[0]=f.b[l].q+v,s[1]=f.b[n].q+v,j[0]=f.b[l].r-t,j[1]=f.b[n].r-t,s[3]=f.b[l].q-v,s[2]=f.b[n].q-v,j[3]=f.b[l].r+t,j[2]=f.b[n].r+t,s[4]=s[0],j[4]=j[0],106!=f.k.k&&OH(g,s,j,5),106==f.k.k&&PH(f,f.c[f.w].i,f.c[f.w].j))){h=0;for(A=1;A<=f.p;++A)0~~(f.p/2))for(A=1;A<=f.p;++A)0e;++e)if(d=a.zb[e])0b&&(b=c);return b}\nfunction ZH(a,b,c,d){var e=kG?350:170,f,g,h,j;$H(d);b=aI(a,b);c=aI(a,c);h=e;for(g=1;g<=a.Sb;++g){j=new bI(e);f=a.zb[g];for(var l=b,o=c,n=j,r=void 0,t=void 0,y=void 0,v=void 0,s=r=r=r=v=r=void 0,A=void 0,F=void 0,M=t=y=r=r=void 0,N=void 0,$=void 0,s=0,F=n.a,A=1;A<=f.q;++A)r=cI(l,o,f.c[A].a,f.c[A].b),ry+F||(r=N*r+$*v,0>r||(y=Math.sqrt(y),t=Math.sqrt(t),r/=y*t,1<=r||(r=1.5707963267948966-Math.acos(r),r=t*Math.cos(r),r*=r,r=a.yb||0>=a.ub)&&(!a.M&&(a.M=JC(a)),dI(a,a.M));b=new eI;b.b=a.yb;b.a=a.ub;return b}function RG(a){var b;b=QG(a);b.b/=a.xb;b.a/=a.xb;return b}\nfunction BH(a,b){var c=a.b.a;iH(c,"=e;++e)b=DI(h,d);e=jI($E(yy(b.substr(0,3)),10)).a;g=jI($E(yy(b.substr(3,3)),10)).a;DI(h,d);for(b=1;b<=e+g;++b){for(f=m;!(j=DI(h,d),null==j||H(j,"$MOL"));)f+=j+d;a.zb[++a.Sb]=new EI(a,f)}a.xb=1;NG(a,1,e,1,!1);NG(a,e+1,e+g,3,!1);d="readRXNFile"}else{(a.J||a.Vb)&&(a.dc=!1);a.ob=new EI(a,b);if(!a.ob||0==a.ob.p)return!a.ob&&(wu(a,"ERROR - problems in reading/processing MOL input"),\na.gf(a.Ec.d)),!!a.ob;d=(a.dc||a.Fb)&&a.p||a.Mb;null!=a.t&&a.ob&&FI(a.ob,a.t,!0);null!=a.u&&a.ob&&FI(a.ob,a.u,!1);d||(a.Sb=0,a.xb=1);h=GI(a.ob);if(1>=h||a.J)a.zb[++a.Sb]=a.ob;else{a.Fb=!0;for(b=1;b<=h;++b)a.zb[++a.Sb]=new HI(a,a.ob,b)}d?a.o=a.Sb:a.o=1;a.ob=a.zb[a.o];a.J?NG(a,1,1,0,!0):NG(a,1,h,0,!d);d=Aj}II(a);null!=d&&(LF(a.r,Pd),a.r&&XG(hq(a.r,d),0,0,0),a.hc=!0);a.Ib=!0;c&&a.gf(a.Ec.d);return!0}function wu(a,b){null==b&&(b=m);a.Gb=!0;a.X=b;a.ng("info: "+b)}\nfunction EH(a,b){var c;c=Math.round(b);100>c&&(!lG[c]&&(lG[c]=new KD(We,0,c)),!nG[c]&&yq(nG,c,XB(lG[c])),a.v=lG[c],a.w=nG[c])}function gI(a){var b;if(!a)return!1;b=a.yf();a=0!=(a.e&2);return b||a}function QH(a,b){return(a.mb+(a.Lb?1:0))*b}function vH(a,b){var c,d;d=-1;for(c=0;c=b)switch(a.Kb=!0,a.Hb=!0,wu(a,m),b){case 102:VG(a,!0);mI(a,102);lI(a,102);d=!0;break;case 110:a.Ib=!0;a.k=c;a.pb.a!=a.pb.b&&a.pb.a.b!=a.pb.b?a.q&&(++a.Sb,a.o=a.Sb,a.q=!1):wu(a,"No more undo");if(!(a.pb.a!=a.pb.b&&a.pb.a.b!=a.pb.b))break;JI(a,KI(a.pb));a.r&&XG(hq(a.r,Gk),0,0,0);a.hc=!0;a.hc=!1;a.Ib=!0;break;case 111:a.k=c;if(a.pb.a.c)a.q&&(++a.Sb,a.o=a.Sb,a.q=!1);else{wu(a,"No more redo");break}if(!a.pb.a.c)break;e=a.pb;\nif(!e.a.c)throw new Iy("Cannot redo. Index is out of range.");if(!e.a.c)throw new Iy($e);e.a=e.a.c;JI(a,e.a.a);a.r&&XG(hq(a.r,Cj),0,0,0);a.hc=!0;a.hc=!1;a.Ib=!0;break;case 214:fI(a,null,a.R.a,a.R.b);a.k=c;break;case 151:case 152:case 154:case 153:e=null;a.k=c;switch(b){case 152:e=LI(a.jc);break;case 151:e=MI(a.jc);break;case 154:e=a.jc;e.a=e.c;e=LI(e);break;case 153:e=a.jc,e.a=-1,e=MI(e)}null==e?wu(a,"No more molecules in SDF buffer"):(YG(a),a.Vb=!0,NI(a,e,!1),a.Vb=!1,H(a.X,m)&&(wu(a,"MOL n. "+(a.jc.a+\n1)+" of "+a.jc.c),d=!0,a.r&&XG(hq(a.r,"SDFstack"),0,0,0),a.hc=!0,a.hc=!1));break;case 101:Cq(4,new OI(a));a.k=c;break;case 107:Cq(2,new PI(a));break;case 114:Cq(3,new QI(a));a.k=c;break;case 103:a.Mb=!0;a.k=c;break;case 105:a.A&&a.Bb&&(a.Bb=!1,RI(a.ob),a.Ib=!0,a.r&&XG(hq(a.r,yg),0,0,0),d=a.hc=!0,a.k=c);a.I=1;break;case 109:a.k=c;e=SI(a.ob);if(2==e){wu(a,"Copying the agent not possible !");break}d=PG(a.ob);a.Ib=!0;a.ob=new sG(a.ob);d=nw((a.M.b-a.mb)/2-d.a);for(e=1;e<=a.ob.p;++e)TG(a.ob.b[e],2*d/a.xb,\n0/a.xb);a.zb[++a.Sb]=a.ob;a.o=a.Sb;a.r&&XG(hq(a.r,"reactionCopy"),0,0,0);d=a.hc=!0;mI(a,109);lI(a,109);break;case 104:d=tG(a);break;case 213:a.k=c;if(!a.S){var f,g,h,j,l;l=new XD;for(f=a.U,g=0,h=f.length;g=b&&(a.n=33+(b-1301)),0=a.k)a.cb=2,XI(a.ob),d=!0,IG(a,lg,a.o,0,a.ob.w);else if(202==a.k||203==a.k||204==a.k)if(0=g;++g){f=0;for(c=1;c<=a.Sb;++c)SI(a.zb[c])==g&&(h[g][++f]=c);h[g][0]=f}e+=Pa;e+=$I(h[1][0],3)+$I(h[3][0],3)+da;for(c=1;c<=h[1][0];++c)e+=Ka+aJ(a.zb[h[1][c]],d,b);for(c=1;c<=h[3][0];++c)e+=Ka+aJ(a.zb[h[3][c]],d,b)}else{1f&&(f=e.b[b].r),e.b[b].qb;++b)yq(g.b,g.c++,null),yq(f.b,f.c++,null);for(b=1;b<=e.p;++b)j=e.b[b].b,null==j||0==j.length||(H(j,gg)?Qm(c,new QC(b)):0==j.indexOf("mix")?(j=$E(zy(j,3),10),l=null,f.c>j&&(l=(AD(j,f.c),f.b[j])),null==l?h=new Nm:h=l,Qm(h,new QC(b)),GD(f,j,h)):0==j.indexOf(kj)&&(j=$E(zy(j,2),10),l=null,g.c>j&&(l=\n(AD(j,g.c),g.b[j])),null==l?h=new Nm:h=l,Qm(h,new QC(b)),GD(g,j,h)));d+=fJ(qf,c);if(0a.M.a-P(J(Q(a.mb*a.nb))))return!1;var b=a.Cc,f=a.Dc,g,h,j,l;l=0;if(0>b||0>f||f>a.ub||b>a.yb)b=0;else if(1==a.Sb)b=a.o;else{b=aI(a,b);f=aI(a,f);j=1.7976931348623157E308;for(h=1;h<=a.Sb;++h){g=a.zb[h];for(var o=void 0,n=void 0,r=void 0,n=1.7976931348623157E308,o=1;o<=g.p;++o)r=cI(b,f,g.b[o].q,g.b[o].r),r=a.k)a.cb=2,XI(a.ob),vG(a,kg,a.ob.v);else if(230==a.k)a.cb=3,vG(a,og,a.ob.v);\nelse if(233<=a.k&&262>a.k)jJ(a.ob,!1),vG(a,jg,a.ob.v),a.cb=3;else if(107==a.k){if(a.bc.b)return!0;WI(a.ob,a.ob.v,dr(a.bc.e.Tc.a.pb,Ik));a.ob.j=!0;vG(a,"addAtomQuery",a.ob.v)}else if(105==a.k)(c=kJ(a.ob))?vG(a,"markAtom",a.ob.v):vG(a,"unMarkAtom",a.ob.v);else if(113!=a.k)if(300c.length&&(c=Vf),WI(a.ob,a.ob.v,c)),vG(a,Vj+a.n,a.ob.v)}else e=!1}else if(0<\na.ob.w)if(a.eb.c=a.o,104==a.k)tG(a);else if(106==a.k){c=a.ob;d=a.ob.w;if(0d&&(d=b);if(0==d)break;uG(c,d);c.a[d]=0}xG(a.ob);IG(a,"delBondGroup",a.o,0,a.ob.w);a.ob.w=0}else if(201==a.k)lJ(a.ob,a.ob.w),IG(a,"setBondStereo",a.o,0,a.ob.w);else if(202==a.k||205==a.k)1==a.ob.c[a.ob.w].c&&0==a.ob.c[a.ob.w].f?(a.ob.c[a.ob.w].c=2,IG(a,Wj,a.o,0,a.ob.w)):(a.ob.c[a.ob.w].c=1,a.ob.c[a.ob.w].f=\n0,IG(a,Xj,a.o,0,a.ob.w)),a.ob.c[a.ob.w].f=0;else if(203==a.k)a.ob.c[a.ob.w].c=2,a.ob.c[a.ob.w].f=0,xG(a.ob),IG(a,Wj,a.o,0,a.ob.w);else if(204==a.k)a.ob.c[a.ob.w].c=3,a.ob.c[a.ob.w].f=0,xG(a.ob),IG(a,Yj,a.o,0,a.ob.w);else if(206<=a.k&&229>=a.k)a.cb=2,XI(a.ob),IG(a,lg,a.o,0,a.ob.w),xG(a.ob);else if(107==a.k){if(!a.bc.b)return!0;c=dr(a.bc.e.Tc.a.pb,Ik);a.ob.c[a.ob.w].c=9;a.ob.c[a.ob.w].d=c;IG(a,"setQueryBond",a.o,0,a.ob.w)}else 105==a.k?(c=a.ob,b=a.ob.w,c.k.gb=!0,c.k.sc?(c.i=-1,d=c.c[b].i,b=c.c[b].j,\nf=c.b[d].c,h=c.b[b].c,j=4,f==h&&0=a.k)return!1;++a.Sb;a.o=a.Sb;a.zb[a.Sb]=new WG(a);a.ob=a.zb[a.Sb];a.eb.c=a.o;202<=a.k&&204>=a.k||205==a.k?(mJ(a.ob,null),a.ob.q=0,nJ(a.ob,1,c/a.xb,d/a.xb),a.ob.v=1,a.ob.x=1,a.cb=1,b=a.ob,YI(b,b.v,0),205==a.k?(nJ(a.ob,2,(c+21.65)/a.xb,(d-12.5)/a.xb),a.ob.e[0]=1,a.ob.e[1]=2,a.ob.r=1,IG(a,"addChain",a.o,0,a.ob.w)):IG(a,\nig,a.o,0,a.ob.w)):206<=a.k&&229>=a.k?(a.ob.z=aI(a,c),a.ob.A=aI(a,d),a.cb=2,XI(a.ob),a.r&&XG(hq(a.r,kg),0,0,0),a.hc=!0):300c.length&&(c=Vf),WI(a.ob,1,c)),vG(a,"addAtom",a.ob.v)):230==a.k?(xI(a,null,!0),a.r&&XG(hq(a.r,og),0,0,0),a.hc=!0):233<=a.k&&262>a.k?(mJ(a.ob,null),a.ob.q=0,nJ(a.ob,1,c/a.xb,d/a.xb),a.ob.v=1,jJ(a.ob,!0),a.r&&XG(hq(a.r,jg),0,0,0),a.hc=!0):LE()}else e=!1;e&&oJ(a)}return a.Ab=\ne}\nfunction pJ(a,b,c,d){var e,f,g,h;LE();if(!a.Db||qJ(b))return!0;a.Gb=!1;c-=P(J(Q(QH(a,a.nb))));d-=P(J(Q(RH(a,a.nb))));f=aI(a,c-a.Cc);g=aI(a,d-a.Dc);e=aI(a,c);h=aI(a,d);if(2==a.cb||3==a.cb||9==a.cb)return!0;if(1==a.cb){f=!1;a.zb[a.eb.c].v=0;--a.ob.p;g=c;var b=d,j=a.Nb;0>g||0>b||b>a.ub||g>a.yb?$H(j):ZH(a,g,b,j);++a.ob.p;if(0g&&(g=1);b/=g;j/=g;o=g/2/Math.tan(0.5235987755982988);n=e-f.b[l].q;r=h-f.b[l].r;l=-g/2+n*j+r*b;b=r*j-n*b;if(0>l)if(1f.b[2].r-f.b[1].r&&0h-f.b[1].r&&(f.b[2].r=f.b[1].r-g/2),0>f.b[2].q-f.b[1].q&&0e-f.b[1].q&&(f.b[2].q=f.b[1].q-0.866*g);else{if(2==f.b[f.e[0]].j&&(o=f.b[f.e[0]].p[1],o==f.e[1]&&(o=f.b[f.e[0]].p[2]),j=f.b[f.e[0]].q-f.b[o].q,b=f.b[f.e[0]].r-f.b[o].r,g=Math.sqrt(j*j+b*b),1>g&&(g=1),b/=g,j/=g,n=e-f.b[o].q,r=h-f.b[o].r,e=r*j-n*b,n=f.b[f.e[1]].q-f.b[o].q,r=f.b[f.e[1]].r-f.b[o].r,h=r*j-n*b,0h||0>e&&0=b?0-b:b)>e){++f.r;if(100g&&(g=1),nJ(f,f.p,f.b[f.x].q+25*(j/g),f.b[f.x].r+25*(b/g))}a.B=!0}else if(113==a.k&&0c||0>d||d>a.ub||c>a.yb)&&5!=a.cb))e=RG(a),h=a.ob,j=PG(h),b=j.a,j=j.b,0>f&&be.b||0>g&&je.a||uJ(h,f,g),a.cb=5;AG(a,!1);a.Ib=!0;NF(a);a.Cc=c;a.Dc=d;return!0}\nfunction kI(a,b,c,d){var e,f;if(!a.J||a.eg().a||a.fg().a||a.K)if(f=!1,e=wH(a,c,d),e!=a.Cb&&(f|=mI(a,a.Cb),f|=lI(a,e),a.Cb=e),!gI(b)){c-=P(J(Q(QH(a,a.nb))));d-=P(J(Q(RH(a,a.nb))));b=c;c=a.Nb;0>b||0>d||d>a.ub||b>a.yb?$H(c):ZH(a,b,d,c);113==e&&0d.b[e].j&&(AJ(d,null),b=d.e[d.r-1],d.c[d.q].i=e,d.c[d.q].j=b,BJ(d.b[e],b),BJ(d.b[e],b)),uG(d,d.p)),d.u=!1,a.hc=!0;else if(0!=a.eb.c&&a.o!=a.eb.c){uG(a.ob,a.ob.p);b=a.ob.x;c=a.eb.a+a.ob.p;e=a.zb[a.eb.c];d=new bJ(a,z(CJ,u,120,[null,a.ob,e]),2);d.b[0]=new DJ;EJ(d,b,c,1);b=D(CJ,\nu,120,a.zb.length,0);for(f=0,c=0;fd.c[b].c?(++d.c[b].c,d.c[b].f=0):wu(d.k,"Maximum allowed bond order is 3 !")):6==d.b[e].j?(--d.q,GJ(d,d.x),wu(d.k,"Not possible connection !")):(d.c[d.q].j=e,GJ(d,d.x),b=d.x,BJ(d.b[e],b),BJ(d.b[b],e),HJ(d.c[d.q],d.b)));UG(a.ob);a.B&&(d=a.pb,d.a!=d.b&&d.a.b!=d.b&&(e=d.a.c,KI(d),d.a.c=e),\nIG(a,ig,a.o,0,a.ob.w),a.B=!1);d=!0}else 5==a.cb&&(UG(a.ob),d=a.hc=!0);0=b&&0==c||b==c&&a.o==a.Zb)return-1;0>=b&&0nb))for(;Bc=dc[uc]*dc[uc];)0==Bc%dc[uc]?jc=!1:++uc;if(jc){pc[++cc]=Tw(Bc);if(cc>=nb)break;Iba&&(ba=0),0>kd&&(kd=0),$d=28*ba+kd));eb=0;0!=n.b[T].n&&(-2>n.b[T].n?eb=1:-2==n.b[T].n?eb=2:-1==n.b[T].n?eb=3:1==n.b[T].n?eb=4:2==n.b[T].n?eb=5:2Db&&(Db=10-Db));Xc=126;O=Bd;O+=126*n.b[T].i;Xc*=7;O+=eb*Xc;Xc*=7;0!=Db&&(O+=Db*Xc);Xc*=7;O+=$d*Xc;Xc*=783;O+=n.b[T].j*Xc;S[T]=Tw(O)}for(oc=0;!QJ(n,Fb,S);){Qc=!1;for(T=1;T<=n.p;++T)Fb[T]!=cb[T]&&(cb[T]=Fb[T],Qc=!0);if(Qc){for(T=1;T<=n.p;++T){S[T]=Uk;for(db=1;db<=n.b[T].j;++db)S[T]=Xw(S[T],Na[Fb[n.b[T].p[db]]])}oc=\n0}else if(0n.c[T].j&&(Ua=n.c[T].i,n.c[T].i=n.c[T].j,n.c[T].j=Ua,1==n.c[T].f?n.c[T].f=3:2==n.c[T].f?n.c[T].f=4:3==n.c[T].f?n.c[T].f=1:4==n.c[T].f&&(n.c[T].f=2));for(T=1;Tn.a[v])&&M!=Aa[v]){Ic=!0;for(Ac=1;Ac<=ub;++Ac)if(ca[Ac]==v&&ja[Ac]==M||ca[Ac]==M&&ja[Ac]==v){Ic=!1;break}Ic&&(++ub,ca[ub]=v,ja[ub]=M)}}else W[++Fa]=M;if(0==Fa){if(aa==n.p)break;v=V[L--]}else if(1==Fa)Aa[W[1]]=v,v=W[1],n.a[v]=++aa;else{V[++L]=v;A=0;for(ra=1;ra<=Fa;++ra)if($=FJ(n,W[ra],v),!K[$]){A=W[ra];break}if(0==A)for(ra=1;ra<=Fa;++ra)if($=FJ(n,W[ra],v),2==n.d[$]||3==n.d[$]){A=W[ra];break}0==\nA&&(A=W[1]);Aa[A]=v;v=A;n.a[A]=++aa}}Aa=FH(n.p+1);y=FH(n.p+1);id=[];jd=[];F=aa=L=0;for(ra=1;ra<=n.p;++ra)if(1==n.a[ra]){v=ra;break}b:for(;;){0n.b[Ob].j||4Ba.b[Dd].j||3Yc[Eb]&&\n(wc=Zc,Zc=Eb,Eb=wc);U=Zc;0==Zc&&(U=Eb,$c=!0);for(gc=1;gc<=Ba.b[Dd].j;++gc)ld=Ba.b[Dd].p[gc],ld!=xb[Ed-1]&&(0==Rd?Rd=ld:fb=ld);0Yc[fb]&&(wc=Rd,Rd=fb,fb=wc);Ga=Rd;0==Rd&&(Ga=fb,re=!0);ib=0ib+kc?-(ib+kc):ib+kc)||0!=mg||0!=Se?wu(Ba.k,"Bad stereoinfo on allene !"):(md=Ba.b[xb[Ed-1]].q-Ba.b[Dd].q,qe=Ba.b[xb[Ed-1]].r-Ba.b[Dd].r,Kd=Math.sqrt(md*md+qe*qe),0.001>\nKd&&(Kd=0.001),0<(Ba.b[Ga].r-Ba.b[xb[Ed-1]].r)*(md/Kd)-(Ba.b[Ga].q-Ba.b[xb[Ed-1]].q)*(qe/Kd)?ec[fc]=1:ec[fc]=-1,$c&&(ec[fc]*=-1),re&&(ec[fc]*=-1),U==Zc&&0>ib&&(ec[fc]*=-1),U==Eb&&0>kc&&(ec[fc]*=-1),Yc[U]>Yc[Ga]&&(ec[fc]*=-1))}}else c:{var Ec=n,Lc=Ob,Fd=ta,td=void 0,Ya=void 0,ud=void 0,hc=void 0,Cb=void 0,ce=void 0,Sc=void 0,Gd=void 0,Qb=void 0,pb=void 0,Sa=void 0,jb=void 0,Sd=void 0,Ee=void 0,od=void 0,Za=void 0,vd=void 0,jb=FH(4),Ee=FH(4),Rb=Ec,wd=Lc,ie=Rc,Td=ka,Ud=ca,Bf=ja,Hg=be,qc=jb,gf=void 0,\nxd=void 0,Ig=void 0,je=void 0,Cf=void 0,Tc=void 0,Tc=-1;0Cb;++Cb)0>=jb[Cb]||\n(td=FJ(Ec,Lc,jb[Cb]),Ee[Cb]=UJ(Ec,td,Lc),0Ee[Cb]?(++Sc,hc=jb[Cb],ce=jb[Cb]):Gd=jb[Cb]);Qb=pb+Sc;Za=FH(4);od=0;if(3==Ec.b[Lc].j){if(1==pb&&1==Sc||3==Qb&&0Cb;++Cb)td=FJ(Ec,Lc,Sa[Cb]),Ya[Cb]=UJ(Ec,td,Lc);if(4==Qb){if(0==pb||0==Sc){wu(Ec.k,"Error in C4 stereospecification !");break c}if(1==pb||1==Sc)Za[0]=Sa[0],Za[1]=Sa[3],Za[2]=Sa[2],Za[3]=Sa[1],od=Ya[0];else{for(Cb=0;4>Cb;++Cb)-1==Ya[Cb]&&(Ya[Cb]=0);Qb=2}}else if(3==Qb)if(3==pb||3==Sc)Za[0]=Sa[0],Za[1]=Sa[3],Za[2]=Sa[2],Za[3]=Sa[1],0Cb;++Cb)Ya[Cb]==ud&&(Ya[Cb]=0);Qb=2}if(2==\nQb)if(1==pb&&1==Sc)Sa[1]==hc?(Sa[1]=Sa[2],Sa[2]=Sa[3]):Sa[2]==hc&&(Sa[2]=Sa[3]),Za[0]=vd,Za[1]=hc,Za[2]=Sa[2],Za[3]=Sa[1],od=1;else{if(Ya[0]==Ya[1]||Ya[1]==Ya[2]){wu(Ec.k,"Error in C4 stereospecification ! 2/0r");break c}0!=Ya[0]?(Za[0]=Sa[0],Za[1]=Sa[2],Za[2]=Sa[1],Za[3]=Sa[3]):(Za[0]=Sa[1],Za[1]=Sa[3],Za[2]=Sa[2],Za[3]=Sa[0]);1=kf&&(yd=!0,Oa=(bG(),iG)[kf]);yd&&(0!=ng?Oa=Xf+ng+Oa:Oa=Xf+Oa,1==se[hf]?Oa+=Nd:-1==se[hf]&&(Oa+="@@"),1==Rf?Oa+=Ue:1de?-de:de)&&(Oa+=0>de?-de:de)),yb&&(Oa+=fd+Kh),Oa+=dg);Mp(Jh.a,Oa);for(oa=1;oa<=ub;++oa)if(ca[oa]==\nv||ja[oa]==v)s=ja[oa],s==v&&(s=ca[oa]),N[v]",!0);j=-1c;++c)(d=b.d[c])?a.zb[c]=new sG(d):a.zb[c]=null;0b||b>a.Sb?(wu(a,"ERROR - invalid mol index: "+b),a.gf(a.Ec.d),null):a.zb[b]}function II(a){var b,c,d;b=JG(a);for(d=1;d<=a.Sb;++d)c=a.zb[d],c.o=b}function cK(a,b){b!=a.nb&&(a.nb=b,a.og(),a.gf(a.Ec.d))}function dK(a,b){var c,d,e;if(b!=a.xb){c=RG(a);a.xb=b;d=RG(a);e=P(J(Q((d.b-d.c)/2-(c.b-c.c)/2)));d=P(J(Q((d.a-d.d)/2-(c.a-c.d)/2)));for(c=1;c<=a.Sb;++c)uJ(a.zb[c],e,d),UG(a.zb[c]);a.Ib=!0;a.gf(a.Ec.d)}}\nfunction MG(a,b){var c;c=-1;H(b,"Select substituent")?(c=202,b=m):H(b,Bb)?c=235:H(b,Ib)?c=240:H(b,Ab)?c=260:H(b,Sb)?c=261:H(b,Xb)?c=241:H(b,Mb)?c=233:H(b,Lb)?c=236:H(b,Kb)?c=237:H(b,Wb)?c=234:H(b,Vb)?c=243:H(b,Yb)?c=252:H(b,Ub)?c=244:H(b,Zb)?c=239:H(b,"-PO3H2")?c=251:H(b,wb)?c=242:H(b,sb)?c=245:H(b,vb)&&(c=238);0=a.mb-1)for(g=f.b.b;j>=a.mb-1&&1=a.k&&(a.k=213);for(c=1;14>=c;++c)bH(a,b,c,1),bH(a,b,c,2);a.k=d;SH(a.Ec,a.wc.a,0,0)}var f;if(a.Hb){b=BH(a.fb,a.nb);d=a.mb+(a.Lb?1:0);c=(a.M.a-P(J(Q(RH(a,a.nb)))))/a.nb;f=c-a.mb;cH(b,dG);lH(b.a,P(J(Q(0*(mH(),R)))),P(J(Q(0*R))),P(J(Q(d*R))),P(J(Q(c*R))));a.Lb?(cH(b,($C(),eD)),e=xH*\n(a.mb+(a.Lb?1:0))+3,f>e&&(nH(b,0,e,a.mb-1,e),oH(b.a,P(J(Q(0*R))),P(J(Q(e*R))),P(J(Q(0*R))),P(J(Q((c-1)*R)))),nH(b,a.mb-1,e,a.mb-1,f),nH(b,a.mb-1,f,d,f))):(cH(b,eG),oH(b.a,P(J(Q(0*R))),P(J(Q(0*R))),P(J(Q(0*R))),P(J(Q((c-1)*R)))),nH(b,0,xH*a.mb,c-1,xH*a.mb),cH(b,qD(dG)),oH(b.a,P(J(Q((d-1)*R))),P(J(Q(0*R))),P(J(Q((d-1)*R))),P(J(Q((f+1)*R)))));oH(b.a,P(J(Q(0*R))),P(J(Q((c-1)*R))),P(J(Q(d*R))),P(J(Q((c-1)*R))));for(c=3;c<=xH+2;++c)bH(a,b,1,c);b=P(J(Q(RH(a,a.nb))));SH(a.Ec,a.fb.a,0,b)}a.Jb&&(d=BH(a.fc,\na.nb),c=a.Lb?1:3,b=(a.M.a-P(J(Q(RH(a,a.nb))))-P(J(Q(a.mb*a.nb))))/a.nb,a.Lb?(cH(d,($C(),eD)),lH(d.a,P(J(Q(0*(mH(),R)))),P(J(Q(0*R))),P(J(Q(c*R))),P(J(Q(b*R))))):(cH(d,qD(dG)),oH(d.a,P(J(Q((c-1)*(mH(),R)))),P(J(Q(0*R))),P(J(Q((c-1)*R))),P(J(Q(b*R)))),cH(d,dG),oH(d.a,P(J(Q((c-2)*R))),P(J(Q(0*R))),P(J(Q((c-2)*R))),P(J(Q(b*R)))),cH(d,eG),oH(d.a,P(J(Q((c-3)*R))),P(J(Q(0*R))),P(J(Q((c-3)*R))),P(J(Q(b*R))))),b=a.M.b-P(J(Q((a.Lb?1:3)*a.nb))),c=P(J(Q(RH(a,a.nb)))),SH(a.Ec,a.fc.a,b,c))}}\nfunction Cu(a,b){a.A?0==b&&(a.I=-1,wu(a,$g),NF(a)):(a.gb?a.I=b:-1a.I?a.I=10*a.I+b:a.I=b,a.gb=!1,0==a.I?(a.I=-1,wu(a,$g)):wu(a,a.I+ea),NF(a))}function dI(a,b){var c,d;d=b.b;c=b.a;a.J||(d-=P(J(Q(QH(a,a.nb))))+P(J(Q((a.Lb?1:3)*a.nb))),c-=P(J(Q(RH(a,a.nb))))+P(J(Q(a.mb*a.nb))));1>d&&(d=1);1>c&&(c=1);a.yb=nw(d);a.ub=nw(c)}function pG(a){bG();return 14<=a&&20>=a?1:21<=a&&28>=a?2:29<=a&&31>=a?3:0}w(582,474,em);_.Ef=function(a){zG(this,a)};_.dg=gK;_.eg=function(){return FG(),null!=this.Pb?GG:HG};\n_.fg=function(){return FG(),FG(),HG};_.gg=sC;_.hg=function(a,b,c){return FC(this,b,c)};_.ig=sC;_.jg=function(){LE()};_.kg=DD;_.lg=hK;_.mg=DD;_.ng=function(){LE()};_.Ff=function(a){var b,c;if(this.s)if(c=a.c,b=a.f,a=a.i,c=(100+2*c)/100,this.J||!(bthis.M.a-P(J(Q(this.mb*this.nb)))||b>this.M.b-P(J(Q((this.Lb?1:3)*this.nb))))){if(b=this.xb*c,b>this.xb&&10>=b||b=b&&cK(this,b)};\n_.gf=function(){fK(this)};_.og=function(){aK(this)};_.pg=Py;_.j=null;_.k=0;_.n=0;_.o=0;_.p=!1;_.q=!1;_.s=!0;_.t=null;_.u=null;_.v=null;_.w=null;_.x=13;_.y=null;_.z=!0;_.A=!1;_.B=!1;_.C=!0;_.F=null;_.G=null;_.I=1;_.J=!1;_.K=!1;_.L=!1;_.M=null;_.N=!0;_.O=!1;_.P=!0;_.Q=!0;_.R=null;_.S=null;_.T=null;_.V="http://peter-ertl.com/jsme/2013_03/help.html";_.W=null;_.X=null;_.Y=null;_._=null;_.ab=!1;_.bb=!0;_.cb=0;_.db=Tk;_.fb=null;_.gb=!0;_.hb=null;_.ib=null;_.jb=null;_.kb=null;_.lb=null;_.mb=24;_.nb=1;\n_.ob=null;_.pb=null;_.rb=null;_.sb=null;_.tb=!0;_.ub=0;_.vb=null;_.wb=1;_.xb=1;_.yb=0;_.Ab=!1;_.Bb=!1;_.Cb=0;_.Db=!1;_.Eb=!1;_.Fb=!0;_.Gb=!0;_.Hb=!0;_.Ib=!0;_.Jb=!0;_.Kb=!0;_.Lb=!1;_.Mb=!1;_.Ob=!1;_.Pb=null;_.Qb=null;_.Rb=!1;_.Sb=0;_.Tb=!0;_.Ub=null;_.Vb=!1;_.Wb=null;_.Xb=!1;_.Yb=null;_.Zb=0;_.$b=0;_._b=0;_.ac=!1;_.bc=null;_.cc=!1;_.dc=!1;_.ec=!1;_.fc=null;_.gc=!1;_.hc=!1;_.kc=!0;_.lc=!1;_.mc=!1;_.nc=!0;_.oc=!0;_.pc=null;_.qc=null;_.rc=!1;_.sc=!1;_.tc=!0;_.uc=null;_.vc=!1;_.wc=null;_.xc=null;\n_.yc=null;_.zc=!1;_.Ac=!0;_.Bc=!0;_.Cc=0;_.Dc=0;var xH=10,fG,lG,nG,dG,eG,gG,cG,kG,iK=null,jG,iG;function iJ(a,b,c,d,e){a.b[e]&&(VH(a.r),LF(a.r,Qe),a.r.a=e,a.r.d=c,a.r.e=d,a.r.f=b,jK(a.c,a.r,e),VH(a.r))}function kK(a,b,c){return a.b[c]?(VH(a.r),a.r.a=c,a.r.b=b,jK(a.c,a.r,c),VH(a.r),!0):!1}function NF(a){fK(a);a.f&&(lK(a.Ec),a.f=!1)}function mK(a,b,c){b in a.b?a.b[b]=c:$wnd.alert("Invalid callback name: "+b)}\nfunction nK(){bG();DC.call(this);this.Ec=(kC(),kC(),lC).a;this.eb=new oK;this.Nb=new oK;this.H=new KD(null,0,8);this.Z=(this.mb-6)/1.5;this.r=new pK;this.D=($C(),bD);this.zb=D(CJ,u,120,99,0);this.qb=new BC;this.jc=new qK;this.$=H((LE(),ME[ki]),bf);this.E=new rK;this.U=z(rw,u,1,[Bb,Ib,Xb,Ab,Sb,Mb,Lb,Kb,Wb,Yb,Ub,Vb,wb,vb,sb]);this.ic=new sK;this.ob=new WG(this);jG[0]=dD;jG[1]=new sm(255,153,153);jG[2]=new sm(255,204,102);jG[3]=new sm(255,255,153);jG[4]=new sm(102,255,255);jG[5]=new sm(51,204,255);jG[6]=\nnew sm(255,153,255);this.eb.c=1;this.Nb.c=1;this.zb[1]=this.ob;this.Y=new tK(this);this.a=z(rw,u,1,[le,Qd,Zd,ne,Yd,me,Ye]);var a,b,c,d;this.b={};for(b=this.a,c=0,d=b.length;cV&&(V=0),ja=new LK(f,W,V,g),MK(ja),Qm(f.k,ja),N.c=W,N.b=ca,N.d=24,N.a=V,N);ca=$.c;W=$.b;EF(new JF(h),f);V=0>=vK();N=new OF(h);V?(V=new NK,uy(V,g.pb.alt),0<=ca&&(V.pb.style[Nk]=ca+uj),0<=W&&(V.pb.style[di]=\nW+uj),W=new PF(f,V,ca,$),cz(W.d.f,W.b,KC(W.d)-W.c-W.a.a,LC(W.d)-(W.a.d-W.a.a)),Qm(f.k,W),er(V.pb),V.pb.style[mh]=(rr(),Si),Ey(V,N,(Xt(),Xt(),Yt)),V.pb.style[Uf]=Zi):(er(g.pb),g.pb.style[mh]=(rr(),Si),Ey(g,N,(Xt(),Xt(),Yt)),g.pb.style[Uf]=Zi)}else AF("JSME initialization error: HTML id "+a+" not found.")}function OK(){return uw(null)}function PK(a){return uw(a)}w(586,1,Sl,CK,EK,FK,DK);_.qg=function(a){Fy(this.d,new QK(this,a),(Et(),Et(),Ft))};_.rg=function(a){Fy(this.d,new RK(this,a),(Eu(),Eu(),Fu))};\n_.sg=function(a){Fy(this.d,new SK(this,a),(Ku(),Ku(),Lu))};_.tg=function(a){Fy(this.d,new TK(this,a),(Nu(),Nu(),Ou))};_.ug=function(a){Cq(2,new UK(this.b,a))};_.vg=function(){VG(this.b,!0)};_.wg=function(){Tq((Qq(),Rq),new VK(this))};_.xg=function(){var a,b,c;c=[];for(b=new Jv(this.d.a);b.ba&&(b.x=a,EH(b,a),WH(b))};_.eh=function(a,b){var c=this.b,d;d=bK(c,a);1>b||b>d.p?(wu(c,"ERROR - invalid atom index: "+b),NF(c)):(d.v=b,oJ(c))};_.fh=function(a){mK(this.b,le,a)};_.gh=function(a,b){mK(this.b,a,b)};\n_.pe=function(a){ry(this.d,a);BK(this)};_.hh=function(a){this.b.V=a};_.ih=function(a){cK(this.b,a)};_.jh=function(a){var b=this.b;b.tb=a;WH(b)};_.kh=function(a){var b=this.b;b.wb=a;WH(b)};_.lh=function(a){dK(this.b,a)};_.mh=function(a){this.b.Pb=a};_.nh=function(a){this.b.Qb=a};_.oh=function(a){var b=this.b;b.Wb=a;b.F=ZG(b,!1)};_.ph=function(a){this.b.Yb=a};_.qh=function(a,b){sy(this.d,a,b);BK(this)};_.rh=function(a,b,c){c&&sy(this.c,a,b);sy(this.d,a,b);BK(this)};\n_.sh=function(a,b){ty(this.d,a,b);BK(this)};_.th=function(a,b,c){c&&ty(this.c,a,b);ty(this.d,a,b);BK(this)};_.uh=function(a){MG(this.b,a)};_.vh=function(a,b){var c=this.b,d;c.q=!1;d=c.sc;c.sc=!1;c.uc=new ZJ(c,a);c.sc=d;c.k=253;wu(c,b);NF(c)};_.qe=function(a){Ay(this.c.pb,a)};_.wh=function(a){this.b.i=a};_.re=function(a){this.d.pb.style[Nk]=a;BK(this)};_.xh=function(a){tJ(this.b,a)};_.yh=function(){return qG(this.b)};_.a=-1;_.b=null;_.c=null;_.d=null;var GK=0;function VK(a){this.a=a}w(587,1,{},VK);\n_.pd=function(){var a,b;for(b=new Jv(this.a.d.a);b.b=a.c.length)return!1;c=a.c[a.b];g=c.getAttribute(Nk)||m;b=c.getAttribute(di)||m;f=c.getAttribute(Wi)||m;e=c.getAttribute(gi)||m;var h,j,l;l={};for(d=0;d=d&&b=a;return c?65536+((d&1023)<<10)+(e&1023):d}function wL(a,b){return 2>b||36b?b:10)?a-48:97<=a&&aa?-a:a):a}\nfunction zL(a,b){var c;c=new xL;c.d=Be+(AL(0!=a?-a:0)?yL(0!=a?-a:0):m+Zp(c));BL(0!=a?-a:0)&&CL(0!=a?-a:0,c);c.b=4;c.a=b;return c}function X(a){var b;b=new xL;b.d=Be+(AL(a)?yL(a):m+Zp(b));BL(a)&&CL(a,b);return b}function DL(a,b){var c;c=new xL;c.d=Be+(AL(a)?yL(a):m+Zp(c));BL(a)&&CL(a,c);c.b=b?8:0;return c}function EL(){var a;a=new xL;a.d=Be+(AL(0)?yL(0):m+Zp(a));BL(0)&&CL(0,a);a.b=2;return a}function FL(a){var b;b=new xL;b.d=Be+(AL(a)?yL(a):m+Zp(b));BL(a)&&CL(a,b);b.b=1;return b}\nfunction BL(a){return typeof a==cj&&0b||36c||2147483647a)return 0;if(0==a)return 32;b=~~-(~~a>>16)>>16&16;c=16-b;a=~~a>>b;b=~~(a-256)>>16&8;c+=b;a<<=b;b=~~(a-4096)>>16&4;c+=b;a<<=b;b=~~(a-16384)>>16&2;c+=b;a=~~(a<>14;return c+2-(a&~(~~a>>1))}function Hw(a){var b,c;if(0==a)return 32;c=0;for(b=1;0==(b&a);b<<=1)++c;return c}function om(a){var b,c,d;b=D(ML,Dl,-1,8,1);c=(NL(),OL);d=7;if(0<=a)for(;15>=4;else for(;0>=4;b[d]=c[a&15];return PL(b,d,8)}\nfunction jI(a){var b,c;return-129a?(b=a+128,c=(QL(),RL)[b],!c&&(c=RL[b]=new QC(a)),c):new QC(a)}w(623,620,{89:1,94:1,100:1,102:1},QC);_.eQ=function(a){return G(a,100)&&a.a==this.a};_.hC=gx;_.tS=LL;_.a=0;function QL(){QL=x;RL=D(wJ,u,100,256,0)}var RL;function LH(a){return 0>=a?0-a:a}function MH(a){return 0>a?-a:a}function fn(a,b){return a>b?a:b}function Q(a){return Math.round(a)}function SL(a){return Math.sqrt(a)}function KE(){}function yv(a){this.f=a}\nw(627,139,{89:1,97:1,101:1,105:1,106:1},KE,yv);function NL(){NL=x;OL=z(ML,Dl,-1,[48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122])}var OL;function IL(a){this.f=a}w(629,622,{89:1,97:1,99:1,103:1,105:1,106:1},IL);function vL(a,b){return a.charCodeAt(b)}function TL(a,b){return-1!=a.lastIndexOf(b)&&a.lastIndexOf(b)==a.length-b.length}function H(a,b){return!G(b,1)?!1:""+a==b}function wy(a,b){return a.indexOf(b)}\nfunction YE(a,b,c){return a.indexOf(b,c)}function VB(a,b){return a.lastIndexOf(b)}function yK(a,b,c){var d;for(d=0;0<=(d=c.indexOf(Zf,d));)36==c.charCodeAt(d+1)?c=c.substr(0,d-0)+Ha+zy(c,++d):c=c.substr(0,d-0)+zy(c,++d);return a.replace(RegExp(b,Oh),c)}\nfunction UL(a,b){for(var c=RegExp(b,Oh),d=[],e=0,f=a,g=null;;){var h=c.exec(f);if(null==h||f==m){d[e]=f;break}else d[e]=f.substring(0,h.index),f=f.substring(h.index+h[0].length,f.length),c.lastIndex=0,g==f&&(d[e]=f.substring(0,1),f=f.substring(1)),g=f,e++}if(0ea&&a[a.length-1]>ea?a:a.replace(/^(\\s*)/,m).replace(/\\s*$/,m)}function PL(a,b,c){a=a.slice(b,c);return String.fromCharCode.apply(null,a)}\nfunction VL(a,b,c){if(128>c)return a[b]=~~((c&127)<<24)>>24,1;if(2048>c)return a[b++]=~~((~~c>>6&31|192)<<24)>>24,a[b]=~~((c&63|128)<<24)>>24,2;if(65536>c)return a[b++]=~~((~~c>>12&15|224)<<24)>>24,a[b++]=~~((~~c>>6&63|128)<<24)>>24,a[b]=~~((c&63|128)<<24)>>24,3;if(2097152>c)return a[b++]=~~((~~c>>18&7|240)<<24)>>24,a[b++]=~~((~~c>>12&63|128)<<24)>>24,a[b++]=~~((~~c>>6&63|128)<<24)>>24,a[b]=~~((c&63|128)<<24)>>24,4;if(67108864>c)return a[b++]=~~((~~c>>24&3|248)<<24)>>24,a[b++]=~~((~~c>>18&63|128)<<\n24)>>24,a[b++]=~~((~~c>>12&63|128)<<24)>>24,a[b++]=~~((~~c>>6&63|128)<<24)>>24,a[b]=~~((c&63|128)<<24)>>24,5;throw new an("Character out of range: "+c);}function xy(a){var b;return 65536<=a?(b=56320+(a-65536&1023)&65535,String.fromCharCode(55296+(~~(a-65536)>>10&1023)&65535)+String.fromCharCode(b)):String.fromCharCode(a&65535)}\nfunction WL(a){var b,c,d,e,f;e=a.length;for(d=b=0;dc?++b:2048>c?b+=2:65536>c?b+=3:2097152>c?b+=4:67108864>c&&(b+=5);b=D(XL,Cl,-1,b,1);for(d=f=0;da||a>=b)&&pM(a,b)}function pM(a,b){throw new tL("Index: "+a+", Size: "+b);}w(645,638,Bl);\n_.Fh=function(){throw new eF("Add not supported on this list");};_.zh=function(a){this.Fh(this.Yf(),a);return!0};_.eQ=function(a){return oM(this,a)};_.hC=function(){var a,b,c;b=1;for(a=this.Ce();a.be();)c=a.ce(),b=31*b+(null==c?0:Yp(c)),b=~~b;return b};_.Ce=function(){return new Jv(this)};_.Hh=function(){return this.Ih(0)};_.Ih=function(a){return new qM(this,a)};_.Jh=function(){throw new eF("Remove not supported on this list");};function nM(a){return a.b=a.d.Yf())throw new az;return a.d.Gh(a.c=a.b++)}function kM(a){if(0>a.c)throw new JB;a.d.Jh(a.c);a.b=a.c;a.c=-1}function Jv(a){this.d=a}w(646,1,{},Jv);_.be=function(){return nM(this)};_.ce=function(){return Kv(this)};_.de=function(){kM(this)};_.b=0;_.c=-1;_.d=null;function qM(a,b){var c;this.d=this.a=a;c=a.Yf();(0>b||b>c)&&pM(b,c);this.b=b}w(647,646,{},qM);_.Kh=function(){return 0=this.b)throw new az;return this.a.Gh(this.c=--this.b)};_.a=null;\nfunction rM(a){a=new hM(a.b.a);return new sM(a)}function tM(a,b){this.a=a;this.b=b}w(648,640,Pl,tM);_.Ah=uM;_.Ce=function(){return rM(this)};_.Yf=function(){return this.b.a.d};_.a=null;_.b=null;function sM(a){this.a=a}w(649,1,{},sM);_.be=function(){return nM(this.a.a)};_.ce=function(){return(this.a.b=Kv(this.a.a)).Ch()};_.de=function(){jM(this.a)};_.a=null;function vM(a){a.b=D(wM,u,0,0,0)}function WD(a,b,c){(0>b||b>a.c)&&pM(b,a.c);a.b.splice(b,0,c);++a.c}\nfunction Qm(a,b){yq(a.b,a.c++,b);return!0}function Nx(a,b){AD(b,a.c);return a.b[b]}function QA(a,b){for(var c=0;ca.c&&yq(b,a.c,null);return b}\nfunction Nm(){vM(this)}function FD(a){vM(this);this.b.length=a}function UC(a){vM(this);a=fw(a.b,a.c);Array.prototype.splice.apply(this.b,[0,0].concat(a));this.c=this.b.length}w(653,645,sl,Nm,FD,UC);_.Fh=function(a,b){WD(this,a,b)};_.zh=function(a){return Qm(this,a)};_.vg=function(){this.b=D(wM,u,0,0,0);this.c=0};_.Ah=function(a){return-1!=QA(this,a)};_.Gh=function(a){return Nx(this,a)};_.Vf=function(){return 0==this.c};_.Jh=function(a){return xM(this,a)};_.Bh=function(a){return $m(this,a)};_.Yf=Kt;\n_.c=0;function Xv(){Xv=x;Yv=new yM}var Yv;function yM(){}w(656,645,hm,yM);_.Ah=hK;_.Gh=function(){throw new Yy;};_.Yf=function(){return 0};function zM(){this.a=new Date}function AM(a){return 10>a?yc+a:m+a}w(659,1,{89:1,93:1,94:1,107:1},zM);_.eQ=function(a){return G(a,107)&&Qw(J(this.a.getTime()),J(a.a.getTime()))};\n_.hC=function(){var a;a=J(this.a.getTime());var b,c,d,e;c=32;d=a.h&1048575;22>c?(e=~~d>>>c,b=~~a.m>>c|d<<22-c,c=~~a.l>>c|a.m<<22-c):44>c?(e=0,b=~~d>>>c-22,c=~~a.m>>c-22|a.h<<44-c):(b=e=0,c=~~d>>>c-44);b=yw(c&4194303,b&4194303,e&1048575);a=yw(a.l^b.l,a.m^b.m,a.h^b.h);return P(a)};\n_.tS=function(){var a,b;b=-this.a.getTimezoneOffset();a=(0<=b?lb:m)+~~(b/60);b=10>(0>b?-b:b)%60?yc+(0>b?-b:b)%60:m+(0>b?-b:b)%60;return(BM(),CM)[this.a.getDay()]+ea+DM[this.a.getMonth()]+ea+AM(this.a.getDate())+ea+AM(this.a.getHours())+fd+AM(this.a.getMinutes())+fd+AM(this.a.getSeconds())+" GMT"+a+b+ea+this.a.getFullYear()};_.a=null;function BM(){BM=x;CM=z(rw,u,1,"Sun,Mon,Tue,Wed,Thu,Fri,Sat".split(","));DM=z(rw,u,1,"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(","))}var CM,DM;\nfunction Hv(a,b){return null==E(a.a,b,a)}function Gv(){this.a=new Ip}w(661,640,{89:1,93:1,112:1},Gv);_.zh=function(a){return Hv(this,a)};_.Ah=uM;_.Vf=function(){return 0==this.a.d};_.Ce=function(){return rM(new tM(this.a,new jF(this.a)))};_.Bh=function(a){return null!=Wv(this.a,a)};_.Yf=iM;_.tS=function(){return fM(new tM(this.a,new jF(this.a)))};_.a=null;function bF(a,b){this.a=a;this.b=b}w(665,643,Nl,bF);_.Ch=gx;_.Dh=Lz;_.Eh=function(a){var b;b=this.b;this.b=a;return b};_.a=null;_.b=null;\nfunction az(){}w(666,139,{89:1,97:1,105:1,106:1,111:1},az);function EM(a){var b,c;b=a.b;c=a.d.length;if(ba.j&&(++a.j,a.p[a.j]=b)}function MM(a){var b;b=new DJ;b.f=a.f;b.d=a.d;b.q=a.q;b.r=a.r;b.s=a.s;b.n=a.n;b.e=a.e;b.p=a.p.slice();b.j=a.j;b.c=a.c;b.a=a.a;b.b=a.b;b.i=a.i;b.o=a.o;b.k=a.k;return b}function dJ(a){return-99199!=a.f?a.f:0}function NM(a){return 4<=a.o&&2==a.j}\nfunction TG(a,b,c){a.q+=b;a.r+=c}function KG(a){var b;b=-99199!=a.f;a.f=-99199;return b}function DJ(){KM();this.p=FH(7)}w(686,1,{115:1},DJ);_.a=3;_.b=null;_.c=0;_.d=0;_.e=null;_.f=-99199;_.i=0;_.j=0;_.k=0;_.n=0;_.o=0;_.q=0;_.r=0;_.s=0;var LM;function PJ(a,b){var c;c=OM(a);return 0\\\\.]+$",2);ZM=new JM("\\\\s+",2)}\nfunction oI(a){WM();var b,c,d,e;this.i=this.f=null;this.j=0;this.e=!1;this.a=this.c=null;var f,g,h;if(null==a||0==a.length)c=0;else{g=1;f=a.length;for(h=0;h=this.j?this.b=yy(a):this.b=a;c=new HM(ZM,this.b);this.d=c.b.a.test(c.a);do if(4a.indexOf("j")&&((this.e=0=f.length)e=0;else{for(h=0,j=f.length;ho&&(o=0.001);r=g/o;e=f/o;l=FH(4);for(h=0;4>h;++h)d[h]==c||0>=d[h]||(0==l[1]?l[1]=d[h]:0==l[2]?l[2]=d[h]:0==l[3]&&(l[3]=d[h]));n=FH(4);d=FH(4);for(h=1;3>=h;++h)3==h&&0==l[3]||(f=(a.b[l[h]].q-a.b[b].q)*e+(a.b[l[h]].r-a.b[b].r)*r,g=(a.b[l[h]].r-a.b[b].r)*e-(a.b[l[h]].q-a.b[b].q)*r,o=Math.sqrt(f*f+g*g),0.001>o&&(o=0.001),n[h]=g/o,d[h]=f/o);a=CN(n[1],d[1],n[2],d[2]);0b?(j[1]=l[1],j[2]=l[3],j[3]=l[2]):0>a&&0d?(j[1]=l[2],j[2]=l[3],j[3]=l[1]):0>d&&0b&&0>a&&(j[1]=l[3],j[2]=l[2],j[3]=l[1])):0j&&(j=0.001);g/=j;f/=j;l=j+25*Math.cos(1.0471975511965976);o=25*Math.sin(1.0471975511965976);h=FJ(a,b,d);if(3==a.c[h].c||204==a.k.k||1!=a.c[h].c&&(203==a.k.k||204==a.k.k)||a.n)l=j+25,o=0;0o?o=-o:0>c&&0j&&(j=0.001),nJ(a,a.p,a.b[b].q+25*f/j,a.b[b].r+25*g/j),0==sJ(a,a.p,1,a.p)||h==a.b[b].j);++h);break;default:return--a.p,wu(a.k,"Are you trying to draw an hedgehog ?"),a.k.cb=9,!1}b=EJ(a,a.v,a.p,1);203==a.k.k&&(b.c=2);204==a.k.k&&\n(b.c=3);201==a.k.k&&lJ(a,a.q);a.z=a.b[a.p].q;a.A=a.b[a.p].r;return e}function fJ(a,b){var c,d;if(!b||0==b.c)return m;d=m;d+="M V30 BEGIN COLLECTION"+(bG(),da);d+=pf+a+" [ATOMS=("+b.c;for(c=new Jv(b);c.bj&&(j=0.001);1>LH((a.b[b].r-a.b[e].r)*(g/j)+(a.b[b].q-a.b[e].q)*(h/j))?(g=a.b[b].q-a.b[e].q,h=a.b[b].r-a.b[e].r,j=Math.sqrt(g*g+h*h),0.001>j&&(j=0.001),b=h/j,g/=j,d[0]=a.b[e].q+j*g-c*b,d[1]=a.b[e].r+c*g+j*b):(g=(a.b[e].q+a.b[f].q)/2,e=(a.b[e].r+a.b[f].r)/2,g=a.b[b].q-g,h=a.b[b].r-e,j=Math.sqrt(g*g+h*h),0.001>j&&(j=0.001),d[0]=a.b[b].q+c*g/j,d[1]=a.b[b].r+c*h/j)}\nfunction XI(a){var b,c,d,e,f,g,h,j,l,o,n,r,t,y;o=-1;j=6;switch(a.k.k){case 206:j=3;break;case 207:j=4;break;case 208:case 221:case 223:j=5;break;case 210:case 209:j=6;break;case 211:j=7;break;case 212:j=8;break;case 229:j=9}f=6.283185307179586/j;l=SL(312.5/(1-Math.cos(f)));if(0a.b[a.v].j)JN(a,j,f,l);else if(!a.k.Bb&&!a.k.rc)o=a.v,YI(a,a.v,0),a.v=a.p,JN(a,j,f,l);else{a.k.rc=!1;if(209==a.k.k||221==a.k.k||223==a.k.k){wu(a.k,"ERROR - cannot add aromatic spiro ring !");a.k.cb=9;return}for(d=\n1;d<=a.b[a.v].j;++d)if(b=a.c[FJ(a,a.v,a.b[a.v].p[d])].c,2n&&(n=0.001);g/=n;e/=n;for(d=1;d<=j;++d)h=mJ(a,null),r=f*d+1.5707963267948966,rJ(h,b[0]+l*(Math.sin(r)*e-Math.cos(r)*g),b[1]+l*(Math.cos(r)*e+Math.sin(r)*g))}else if(0n&&(n=0.001);g/=n;e/=n;h=n/2;r=l*Math.sin(0.5*(3.141592653589793-f));n=1;0<(a.b[d].r-a.b[b].r)*e-(a.b[d].q-a.b[b].q)*g&&(r=-r,n=0);t=a.b[b].q+h*e-r*g;y=a.b[b].r+r*e+h*g;for(d=1;d<=j;++d)h=mJ(a,null),r=f*(d+0.5)+3.141592653589793*n,rJ(h,t+l*(Math.sin(r)*e-Math.cos(r)*g),y+l*(Math.cos(r)*e+Math.sin(r)*g)),1==n?(d==j&&rJ(h,a.b[b].q,a.b[b].r),\nd==j-1&&rJ(h,a.b[c].q,a.b[c].r)):(d==j-1&&rJ(h,a.b[b].q,a.b[b].r),d==j&&rJ(h,a.b[c].q,a.b[c].r))}else{b=0.5;6==j&&(b=0);for(d=1;d<=j;++d)h=mJ(a,null),r=f*(d-b),rJ(h,a.z+l*Math.sin(r),a.A+l*Math.cos(r))}b=j;l=0;for(f=1;f<=b;++f)AJ(a,null),l=a.p-b+f,a.b[l].j=2,a.c[a.q].i=l,a.c[a.q].j=l+1;a.c[a.q].j=a.p-b+1;if(209==a.k.k){if(a.c[a.q-4].c=2,a.c[a.q-2].c=2,a.c[a.q].c=2,0e&&ed;--f)if(0g&&(g=0.001),e/=g,f/=g);l=a.b[a.v].q+d*f;o=a.b[a.v].r+d*e;for(g=1;g<=b;++g)h=mJ(a,null),j=c*g-1.5707963267948966,rJ(h,l+d*(Math.sin(j)*f-Math.cos(j)*e),o+d*(Math.cos(j)*f+Math.sin(j)*e))}function IN(a,b){var c,d;0==b&&(b=a.p);for(c=a.p;c>a.p-b;--c)d=sJ(a,c,1,a.p),0!=d&&TG(a.b[c],6,6)}\nfunction FJ(a,b,c){var d,e,f;for(e=1;e<=a.q;++e)if(d=a.c[e],f=d.i,d=d.j,f==b&&d==c||f==c&&d==b)return e;return 0}function hI(a){var b;for(b=1;b<=a.q;++b)if(1==a.c[b].c&&0=c||0>=d?a.s=!0:(b=PG(a),c=c/2-b.a,b=d/2-b.b,a.k.Ob||uJ(a,c,b),UG(a))}\nfunction TI(a,b,c){var d,e,f;if(1==c)return a.b[b].n+=1,!0;if(-1==c)return a.b[b].n+=-1,!0;e=a.b[b].n;f=a.b[b].i;d=a.b[b].o;-1==d&&0==c&&(0==a.b[b].n?a.b[b].n=1:1==a.b[b].n?a.b[b].n=-1:-1==a.b[b].n&&(a.b[b].n=0));switch(a.b[b].a){case 1:0==d&&(0==a.b[b].n?a.b[b].n=1:1==a.b[b].n?a.b[b].n=-1:a.b[b].n=0);break;case 2:2d&&(0==\na.b[b].n?a.b[b].n=-1:-1==a.b[b].n?a.b[b].n=1:1==a.b[b].n&&(a.b[b].n=0));break;case 4:case 7:3d&&0==a.b[b].n?a.b[b].n=1:3>d&&1==a.b[b].n?a.b[b].n=-1:3>d&&-1==a.b[b].n&&(a.b[b].n=0);break;case 5:case 8:case 13:2d&&0==a.b[b].n?a.b[b].n=-1:\n2>d&&-1==a.b[b].n?a.b[b].n=1:2>d&&1==a.b[b].n&&(a.b[b].n=0);break;case 9:case 10:case 11:case 12:0==d&&0==a.b[b].n?a.b[b].n=-1:0==d&&-1==a.b[b].n?a.b[b].n=0:wu(a.k,"Charge change not possible on the halogen !");break;case 32:wu(a.k,"Use X button to change charge on the X atom !")}if(0e&&eb?e=2:0>a&&0>b?e=3:0>a&&0<=b&&(e=4);0<=c&&0<=d?f=1:0<=c&&0>d?f=2:0>c&&0>d?f=3:0>c&&0<=d&&(f=4);if(ef)return-1;switch(e){case 1:case 4:return ac?1:-1}return 0}function RJ(a){KN(a);UG(a);SJ(a)}\nfunction PG(a){var b,c,d,e,f,g;b=new UM;f=9999;d=-9999;g=9999;e=-9999;for(c=1;c<=a.p;++c)a.b[c].qd&&(d=a.b[c].q),a.b[c].re&&(e=a.b[c].r);b.a=f+(d-f)/2;b.b=g+(e-g)/2;b.c=d-f;b.d=e-g;25>b.c&&(b.c=25);25>b.d&&(b.d=25);return b}function HN(a,b,c){var d,e;e=0;for(d=1;d<=a.p;++d)d>=b&&d<=c||0!=sJ(a,d,b,c)&&++e;return e}function EJ(a,b,c,d){var e;e=AJ(a,null);BJ(a.b[b],c);BJ(a.b[c],b);e.i=b;e.j=c;HJ(e,a.b);e.c=d;return e}\nfunction mJ(a,b){++a.p;b?a.b[a.p]=MM(b):a.b[a.p]=new DJ;return a.b[a.p]}function KH(a,b,c,d,e,f){var g;g=a.b[b].q-c/2;f||(g-=d-c);a=a.b[b].r-~~(e/2);return new LN(g-1-2,a-2,d+1+4,e+4)}function AJ(a,b){var c;++a.q;c=new SM;b&&TM(c,b);return a.c[a.q]=c}\nfunction aJ(a,b,c){var d,e,f,g,h,c=cJ(a,b,c,!1);e=-1.7976931348623157E308;d=1.7976931348623157E308;for(b=1;b<=a.p;++b)a.b[b].r>e&&(e=a.b[b].r),a.b[b].qa.b[b].n?f=4-a.b[b].n:0>a.b[b].n&&-4=g&&(h=g)),\ng=$I(h,2)+$I(f,3)+" 0 0 0 0 0 0 0",f=LJ(a,b),g+=$I(f,3),c+=g+ha+(bG(),da);for(b=1;b<=a.q;++b)d=a.c[b],g=e=d.c,1==a.c[b].c?g=1:2==a.c[b].c&&(g=2),f=$I(d.i,3)+$I(d.j,3),h=0,1==e&&1==d.f?h=1:1==e&&2==d.f&&(h=6),1==e&&3==d.f&&(h=1,f=$I(d.j,3)+$I(d.i,3)),1==e&&4==d.f&&(h=6,f=$I(d.j,3)+$I(d.i,3)),c+=f+$I(g,3)+$I(h,3)+ia+(bG(),da);for(b=1;b<=a.p;++b)0!=a.b[b].n&&(c+="M CHG 1"+$I(b,4)+$I(a.b[b].n,4)+(bG(),da)),0!=a.b[b].d&&(c+="M ISO 1"+$I(b,4)+$I(a.b[b].d,4)+(bG(),da));return c+=ff+(bG(),da)}\nfunction uG(a,b){var c,d,e,f,g,h,j;g=j=0;for(h=1;h<=a.q;++h)e=a.c[h],c=e.i,d=e.j,c!=b&&d!=b?(++j,f=a.c[j],TM(f,e),f.i=c,c>b&&--f.i,f.j=d,d>b&&--f.j):g+=e.c;a.q=j;for(h=b;hb&&--c,a.b[h].p[++d]=c);a.b[h].j=d}}\nfunction wG(a,b){var c,d,e,f;c=a.c[b].i;d=a.c[b].j;for(e=b;ea.b[b].a&&0==a.b[d].d){if(0!=(-99199!=a.b[d].f?a.b[d].f:0))continue a;b=FJ(a,d,b);if(1==a.c[b].c&&(0==a.c[b].f||!a.k.tc))uG(a,d),c=!0}return c}function MN(a,b){var c,d,e,f,g;g=z(B,q,-1,[0,0]);for(e=1,f=0;e<=a.b[b].j;++e)c=a.b[b].p[e],d=FJ(a,b,c),2!=a.c[d].c&&(g[f++]=c);return g}\nfunction KN(a){var b,c,d;for(d=1;d<=a.p;++d)a.b[d].j=0;for(d=1;d<=a.q;++d)b=a.c[d].i,c=a.c[d].j,BJ(a.b[b],c),BJ(a.b[c],b)}\nfunction OJ(a,b,c){var d,e,f,g,h,j,l,o,n;a.d=FH(a.q+1);n=[];for(j=1;j<=a.p;++j){n[j]=!1;b[j]=!1;a:{d=void 0;for(d=1;d<=a.b[j].j;++d)if(c[FJ(a,j,a.b[j].p[d])]){d=!0;break a}d=!1}if(d&&!(3d&&(d=c);return d}\nfunction JH(a,b){var c;c=(bG(),iG)[a.b[b].a];32==a.b[b].a&&(c=a.b[b].e);return c}function GJ(a,b){a.b[b].j+=-1}function PH(a,b,c){var d,e,f,g,h;h=1;a.a=FH(a.p+1);for(e=a.a[b]=1;e<=a.b[b].j;++e)d=a.b[b].p[e],d!=c&&(a.a[d]=++h);for(g=!1;;){for(d=1;d<=a.p;++d){g=!1;if(0~~(c/2)+24?3:2}function DG(a,b){var c,d,e,f,g,h,j;c=PG(a);d=c.a;e=c.b;g=Math.sin(3.141592653589793*b/180);c=Math.cos(3.141592653589793*b/180);for(f=1;f<=a.p;++f)h=a.b[f].q*c+a.b[f].r*g,j=-a.b[f].q*g+a.b[f].r*c,rJ(a.b[f],h,j);c=PG(a);uJ(a,d-c.a,e-c.b)}\nfunction JJ(a){var b,c,d,e,f;e=f=0;for(d=1;d<=a.q;++d)b=a.b[a.c[d].i].q-a.b[a.c[d].j].q,c=a.b[a.c[d].i].r-a.b[a.c[d].j].r,f+=Math.sqrt(b*b+c*c);0=g;++g)if(H(f,(bG(),iG)[g])){f=g;break b}f=32}VI(a,b,f);32==a.b[b].a&&(a.b[b].e=d);c+=\nea;d=0;0=e&&(d=e-48));32==a.b[b].a&&(a.b[b].i=d)}}}function FI(a,b,c){var d,e;a.i=1;c&&(a.i=-1);b=new tF(b);try{for(;b.j=mF(b,b.a),b.jc||6a.b[c].j&&2>a.b[d].j)e.f=0,wu(a.k,"Stereomarking meaningless on this bond !");else switch(e.f){case 0:a.b[d].j<=a.b[c].j?e.f=1:e.f=3;break;case 1:e.f=2;break;case 2:2h||3c[b]&&(j=f,f=b,b=j);j=MN(a,f);h=j[0];l=j[1];e=0;o=!1;0c[l]&&(j=h,h=l,l=j);j=FJ(a,f,h);0!=d[j]?e=h:1==a.c[j].c&&5!=a.d[j]&&(e=h);0==e&&0c[f]&&(o=!0);j=MN(a,b);l=j[0];g=j[1];h=0;0g&&(g=0.001),j/=g,g=l/g,l=(a.b[e].r-a.b[f].r)*g-(a.b[e].q-a.b[f].q)*j,t=(a.b[h].r-a.b[f].r)*g-(a.b[h].q-a.b[f].q)*j,2>(0>=l?0-l:l)||2>(0>=t?0-t:t))wu(a.k,"Not unique E/Z geometry !");else{g=\nFJ(a,e,f);h=FJ(a,h,b);r=1;if(0==d[g]){for(n=1;n<=a.b[e].j;++n)if(b=a.b[e].p[n],b!=f&&(j=FJ(a,e,b),0!=d[j])){c[b]>c[e]?r=-d[j]:r=d[j];break}d[g]=r}0==d[h]&&(0l&&0>t?d[h]=-d[g]:d[h]=d[g],o&&(d[h]=-d[h]))}}}function UJ(a,b,c){var d;d=a.c[b].f;return 1>d||4g?e.i=3-g-c.b[d].n:4==g?(c.b[d].n=-1,e.i=0):5g?0c.b[d].n?e.i=2-g-c.b[d].n:e.i=4-g:(c.b[d].n=g-4,e.i=4-g+c.b[d].n);break;case 4:case 7:3>g?e.i=3-g+c.b[d].n:3==g?0>c.b[d].n?(c.b[d].n=0,e.i=0):0c.b[d].n?(c.b[d].n=0,e.i=0):0g?e.i=2-g+c.b[d].n:2==g?0>c.b[d].n?(c.b[d].n=0,e.i=0):0f;)if(0e.i&&(e.i=0)}}}function WG(a){zN(this);this.b[0]=new DJ;this.t=this.q=this.p=0;this.k=a}\nfunction EI(a,b){var c,d,e,f,g,h,j,l,o;WG.call(this,a);if(null!=b&&(f=m,l=CI(b),null!=l)){o=new sF(b,l,!0);for(g=1;4>=g;++g)f=DI(o,l);e=jI($E(yy(f.substr(0,3)),10)).a;j=jI($E(yy(f.substr(3,3)),10)).a;g=0;try{g=jI($E(yy(f.substr(14,1)),10)).a}catch(n){if(n=Iq(n),!G(n,97))throw n;}EG(this,(FG(),1==g?GG:HG));for(g=1;g<=e;++g){d=mJ(this,null);f=DI(o,l);d.q=(new JL(GL(yy(f.substr(0,10))))).a;d.r=-(new JL(GL(yy(f.substr(10,10))))).a;d=34;34>f.length&&(d=f.length);d=yy(f.substr(31,d-31));WI(this,g,d);62<=\nf.length&&(h=yy(f.substr(60,3)),0=h))){var r=void 0,r=OM(d);d=0d&&(d=0);this.b[g].d=d}if(39<=f.length&&(h=yy(f.substr(37,2)),0=h))){f=0;switch(h){case 1:f=3;break;case 2:f=2;break;case 3:f=1;break;case 4:f=0;break;case 5:f=-1;break;case 6:f=-2;break;case 7:f=-3}this.b[g].n=f}}for(g=1;g<=j;++g)e=AJ(this,null),f=\nDI(o,l),e.i=jI($E(yy(f.substr(0,3)),10)).a,e.j=jI($E(yy(f.substr(3,3)),10)).a,d=jI($E(yy(f.substr(6,3)),10)).a,1==d?c=1:2==d?c=2:3==d?c=3:c=9,h=0,11b.length)this.p=0;else{try{j=new rF(b);g=jI($E(pF(j),10)).a;h=jI($E(pF(j),10)).a;for(f=1;f<=g;++f)o=pF(j),c=(n=mJ(this,null),WI(this,this.p,o),n),c.q=(new JL(GL(pF(j)))).a,c.r=-(new JL(GL(pF(j)))).a;for(f=1;f<=h;++f){d=AJ(this,null);d.i=jI($E(pF(j),10)).a;d.j=jI($E(pF(j),10)).a;e=jI($E(pF(j),10)).a;l=0;if(-1==e)l=e=1;else if(-2==e)e=1,l=2;else if(-5==e)e=2,l=10;else if(11==\ne||12==e||13==e||14==e)l=e,e=9;d.c=e;d.f=l}KN(this);JJ(this);SG(this)}catch(r){r=Iq(r);if(G(r,97)){r.Cd();this.p=0;return}throw r;}a&&!a.bb&&LG(this);RJ(this)}}function HI(a,b,c){var d,e,f,g;WG.call(this,a);g=FH(b.p+1);for(e=1;e<=b.p;++e)b.a[e]==c&&(mJ(this,b.b[e]),g[e]=this.p);for(e=1;e<=b.q;++e)if(a=b.c[e].i,d=b.c[e].j,!(b.a[a]!=c&&b.a[d]!=c)&&!(b.a[a]!=c||b.a[d]!=c))f=AJ(this,b.c[e]),f.i=g[a],f.j=g[d];this.i=b.i;KN(this)}\nfunction NN(a,b,c){var d,e,f;WG.call(this,a);f=FH(b.p+1);for(d=1;d<=b.p;++d)b.b[d].k==c&&(mJ(this,b.b[d]),f[d]=this.p);for(d=1;d<=b.q;++d)a=b.c[d],a.e==c&&(e=AJ(this,a),e.i=f[a.i],e.j=f[a.j]);EG(this,b.f);this.i=b.i;KN(this)}\nfunction bJ(a,b,c){var d,e,f,g;WG.call(this,a);for(a=1;a<=c;++a)this.p+=b[a].p,this.q+=b[a].q,this.t+=b[a].t,b[a].f.a&&EG(this,(FG(),FG(),GG));this.b=D(AN,u,115,this.p+1,0);this.c=D(BN,u,116,this.q+1,0);f=g=e=0;for(a=1;a<=c;++a){for(d=1;d<=b[a].p;++d)++e,this.b[e]=MM(b[a].b[d]);for(d=1;d<=b[a].q;++d)++g,this.c[g]=RM(b[a].c[d]),this.c[g].i+=f,this.c[g].j+=f;f=e}KN(this)}\nfunction sG(a){var b;zN(this);this.k=a.k;this.p=a.p;this.q=a.q;this.t=a.t;this.b=D(AN,u,115,this.p+1,0);for(b=0;b(0>=a?0-a:a)&&(a=0);a=P(J(Q(a*Math.pow(10,c))))/Math.pow(10,c);e=m+(new JL(a)).a;d=wy(e,xy(46));0>d&&(e+=ic,d=wy(e,xy(46)));f=e.length;for(a=1;a<=c-f+d+1;++a)e+=yc;if(0==b)return e;e.length>b&&(e=Md);c=m;for(a=1;a<=b-e.length;++a)c+=ea;return c+e}function CI(a){var b;b=new sF(a,da,!0);if(4b&&(d=Md);e=m;for(c=1;c<=b-d.length;++c)e+=ea;return e+d}function DI(a,b){for(var c,d;a.j=mF(a,a.a),a.j>16&255)),nw(0.7*(~~g.d>>8&255)),nw(0.7*(g.d&255))),DH(a.a,g)):(h=new sm(nw(0.7*(~~g.d>>16&255)),nw(0.7*(~~g.d>>8&255)),nw(0.7*(g.d&255))),f=pD(g),DH(a.a,h));g=P(J(Q(R)));d=P(J(Q(d*R)));e=P(J(Q(e*R)));b=P(J(Q(b*R)));c=P(J(Q(c*R)));d-=g;e-=g;lH(a.a,b+g,c+g,d-g,e-g);DH(a.a,h);lH(a.a,b,c,d,g);lH(a.a,b,c+g,g,e);DH(a.a,f);lH(a.a,b+d,c,g,e+g);lH(a.a,b+1,c+e,d,g)}\nfunction gH(a,b,c,d,e){a=a.a;b=P(J(Q(b*R)));c=P(J(Q(c*R)));d=P(J(Q(d*R)));e=P(J(Q(e*R)));hH(a,!0);iH(a,jH(a,b,c,d,e))}function rH(a,b,c,d){var e,f,g;f=D(B,q,-1,d,1);g=D(B,q,-1,d,1);for(e=0;e=b||b>=KC(this.a)-1||0>=c||c>=LC(this.a)-1)&&(this.a.j=!1);this.a.j?pJ(this.a.c,a,b,c):kI(this.a.c,a,b,c);JA(this.a.pb)};_.a=null;function jO(a){this.a=a}w(737,1,{},jO);_.od=function(a){this.a.j=!1;Ct(a);Dt(a);xJ(this.a.c)};_.a=null;\nfunction kO(a){this.a=a}w(738,1,{},kO);_.nd=function(){this.a.j&&(this.a.j=!1)};_.a=null;function lO(a){this.a=a}w(739,1,{},lO);_.a=null;function mO(a){this.a=a}w(740,1,{},mO);_.a=null;function ZN(){XN.call(this);this.pb.style[Nk]=Hc;this.pb.style[di]=Hc}w(741,732,tl,ZN);function nO(a){this.a=a}w(742,1,{},nO);_.Yd=function(){Tq((Qq(),Rq),new pO(this))};_.a=null;function pO(a){this.a=a}w(743,1,{},pO);_.pd=function(){this.a.a.c&&(IC(this.a.a.c),lK(this.a.a))};_.a=null;\nfunction qO(a,b){var c;c=b.a;c.e=4;return gJ(a.a.c,c,b.d,b.e)}function aO(a){this.a=a}w(744,1,{},aO);_.Qh=function(a){return qO(this,a)};_.a=null;function pv(a,b){kI(a.a.c,b.a,b.d,b.e);return gJ(a.a.c,b.a,b.d,b.e)}function bO(a){this.a=a}w(745,1,{},bO);_.Qh=function(a){return pv(this,a)};_.a=null;function cO(a){this.a=a}w(746,1,{},cO);_.Qh=function(a){return pJ(this.a.c,a.a,a.d,a.e)};_.a=null;function dO(a){this.a=a}w(747,1,{},dO);_.Qh=function(){return xJ(this.a.c)};_.a=null;\nfunction hu(a,b){var c;c=J(Q(b.b));c=new HE(b,0,Hj,c);zG(a.a.c,c);return!0}function eO(a){this.a=a}w(748,1,{},eO);_.Qh=function(a){return hu(this,a)};var rO=_.a=null;function sO(){sO=x;rO=new $w((qx(),new px("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAEklEQVR42mM4MzPtPzJmIF0AAOqfLKHtSuV7AAAAAElFTkSuQmCC")),4,4)}function tO(){tO=x;uO={}}\nfunction vO(a,b,c){var d;c&&(b.style[Hh]=c.b+uj,d=c.a,d!=Le&&(b.style[Gh]=d),0!=(c.c&1)&&(b.style[Lh]=Eg),0!=(c.c&2)&&(b.style[Ih]=ji));a.e.style[Mk]=aj}\nfunction MD(a){var b=wO,c,d,e,f,g,h,j,l,o,n,r,t,y;c=Zp(a);c in uO?a=uO[c]:(d=$doc.getElementsByTagName("body")[0],e=$doc.createElement(ak),f=$doc.createElement(hi),f.style[sh]=(ds(),"inline"),f.style[Jk]=(Us(),"baseline"),f.style[zi]=zc,f.style[Ai]=zc,f.width=1,f.height=1,g=(sO(),rO),f.src=g.d.a,a=(h=$doc.createTextNode(Ff),vO(b,e,a),e.appendChild(h),e.appendChild(f),d.appendChild(e),j=mr(e),l=mr(e)+(e.offsetHeight||0),o=l-j,n=mr(f)+(f.offsetHeight||0)+1,r=l-n,t=n-j,d.removeChild(e),y=new xO,y.a=\nt,y.b=r,y.c=o,y),uO[c]=a);return a}function yO(){tO();var a,b,c,d,e;zs();this.a=z(rw,u,1,["monospace","sans-serif",Uj]);this.c={};this.b={};this.d=$doc.getElementsByTagName("body")[0];this.e=$doc.createElement(ak);this.e.innerHTML=this.f||m;this.e.style[Hh]="72.0px";for(b=this.a,c=0,d=b.length;c=g?h=jH(a,b,c,d,e):h=(j=f+g,l=0,jg)&&(o=1),n=b+d/2,r=c+e/2,t=d/2,y=e/2,v=EO(n,r,t,y,f),s=EO(n,r,t,y,j),A=" text { cursor: default; } <\/style>":m;b=c+d+b+rd;b!==a.q&&(a.t.pb.innerHTML=\nb||m,a.q=b);a.o=!0;a.p=!1}}function DH(a,b){(a.e=b)&&(a.f=FO(b))}function eK(a,b){var c,d,e;a.i=(c=b.b,d=b.a,e=m,12!=c&&(e=\' font-size="\'+c+\'px"\'),"Plain"!=d&&(e+=\' font-family="\'+d+ma),0!=(b.c&1)&&(e+=\'font-weight="bold"\'),0!=(b.c&2)&&(e+=\'font-style="italic"\'),e)}function CH(a,b){(a.n=b)&&b&&(a.c=\'stroke-width="\'+(b.e==nw(b.e)?m+nw(b.e):m+b.e)+na)}w(759,503,{});_.d=null;_.e=null;_.f=Bg;_.i=null;_.j=!0;_.k=null;_.o=!1;_.p=!1;_.q=m;_.r=0;_.s=0;_.t=null;_.u=null;var DO,CO;\nfunction lv(a,b){var c;c=b.a.targetTouches;return 1==c.length?(c=c[0],a.b.d=c.clientX-kr(a.o.pb)+lr(a.o.pb)+lr(a.o.pb.ownerDocument.body),a.b.e=c.clientY-mr(a.o.pb)+(a.o.pb.scrollTop||0)+(a.o.pb.ownerDocument.body.scrollTop||0),a.b.a=new oO(b),b.a.preventDefault(),!0):!1}\nfunction $N(a){this.o=a;this.b=new GO;this.c=new HO(this);Fy(this.o,new IO(this),(mv(),mv(),nv));Fy(this.o,new JO(this),(ev(),ev(),fv));Fy(this.o,new KO(this),(iv(),iv(),jv));Fy(this.o,new LO(this),(av(),av(),bv));Fy(this.o,new MO,(nu(),nu(),ou));Fy(this.o,new NO(this),(ju(),ju(),ku));Fy(this.o,new OO(this),(eu(),eu(),fu))}w(760,1,{},$N);_.a=null;_.b=null;_.c=null;_.d=!1;_.e=null;_.f=null;_.i=null;_.j=null;_.k=null;_.n=null;_.o=null;function HO(a){Sm();this.a=a}w(761,66,{},HO);\n_.zd=function(){!this.a.d&&this.a.i&&qO(this.a.i,this.a.b)};_.a=null;function IO(a){this.a=a}w(762,1,{},IO);_.a=null;function JO(a){this.a=a}w(763,1,{},JO);_.a=null;function KO(a){this.a=a}w(764,1,{},KO);_.a=null;function LO(a){this.a=a}w(765,1,{},LO);_.a=null;function MO(){}w(766,1,{},MO);function NO(a){this.a=a}w(767,1,{},NO);_.a=null;function OO(a){this.a=a}w(768,1,{},OO);_.a=null;function GO(){}w(769,1,{},GO);_.a=null;_.b=0;_.c=0;_.d=0;_.e=0;\nfunction FO(a){var b,c;c=~~a.d>>16&255;b=~~a.d>>8&255;a=a.d&255;if(0==c*b*a){if(0==c&&0==b&&0==a)return Bg;if(255==c&&0==b&&0==a)return"red";if(0==c&&255==b&&0==a)return"green";if(0==c&&0==b&&255==a)return Cg}return 255==c&&255==b&&255==a?"white":Ej+c+mb+b+mb+a+gb}function vK(){var a=$wnd.navigator.userAgent.match(/MSIE\\s+(\\d+\\.\\d+)/);return a?parseFloat(a[1]):-1}\nfunction PO(a){var b,c,d,e,f;Ly(a);d=(My(),gB(null));e=new AO;mA(e,a);Vy(d,e,d.pb);f=a.le();b=a.ke();c=vK();9<=c?(++f,++b):7==c&&G(a,39)&&(c=a.pb.textContent,2>=c.length&&(f+=8));oA(e,a);ez(d,e);return new eC(f,b)}function AF(a){try{$wnd.console.log(a)}catch(b){}}function QO(){this.pb=$doc.createElement(th);this.pb[Yg]=li;this.pb.style[mj]=ei;this.pb.style[rj]=hg;this.pb.style[Nk]=Hc;this.pb.style[di]=Hc;this.pb.setAttribute("contenteditable",Dh)}w(771,385,xl,QO);\nfunction EO(a,b,c,d,e){e*=0.017453292519943295;a+=c*Math.cos(e);b+=-d*Math.sin(e);return new zO(new JL(a),new JL(b))}function jH(a,b,c,d,e){return\'=f.k||(701==f.k?null.ji():401==f.k||402==f.k?(null.ji(),null.ji(),null.ji(),null.ji(),null.ji()):500<=f.k&&507>=f.k&&(g=null.ki,500!=g&&(g=new vu(null.ki,g,null),g.i=f.f,g.j=f.i,f=f.j&63,g.e=f&12)))}function UO(a){this.a=a}w(781,1,Kl,UO);_.pd=function(){RA(this)};_.a=null;function jE(a,b){rB(a.a,b);a.e.a=-1;a.e.b=-1}function mE(){RO();TO.call(this);this.a=new vB}w(782,774,{},mE);_.Nf=gx;_.a=null;\nfunction rE(){new Gv;var a;a:{switch(ow){case 1:case 3:case 5:case 7:a=new WO;break a}a=new XO}this.a=a}w(795,527,{},rE);_.a=null;function XO(){}w(797,1,{},XO);_.fi=function(a){a&&a&&Cq(8,new YO(a));return null};_.gi=function(a){Cq(8,new ZO(a))};function WO(){}w(796,797,{},WO);_.fi=function(){return $wnd.clipboardData.getData("Text")};_.gi=function(a){$wnd.clipboardData.setData("Text",a)};function YO(a){this.a=a}w(800,1,am,YO);_.Dd=sC;_.a=null;function ZO(a){this.a=a}w(802,1,am,ZO);_.Dd=sC;_.a=null;\nfunction du(a,b){a.onloadend=function(a){b.ag(a.target.result)}}function IF(a){this.a=a}w(807,1,{},IF);_.a=null;function FF(){}w(808,1,{},FF);function GF(){}w(809,1,{},GF);function HF(){}w(810,1,{},HF);function nE(){this.b=new sE;this.d=new SC}w(813,525,{},nE);function iI(a,b,c,d){b=ZB(b);c+=b.a;d+=b.b;rz(a.a,c,d);sz(a.a)}function YD(){RO();TO.call(this);var a=this.a=new $O;a.ab=!0;a.a.f=!0;this.a.db=!0}w(815,774,{},YD);_.Nf=gx;_.a=null;function XE(){}w(823,554,{},XE);\nfunction UE(){UE=x;var a;a=(LE(),ME["os.encoding"]);if(null!=a)try{if(H("UTF-8",a))WL(m);else if(H("ISO-8859-1",a)||H("ISO-LATIN-1",a))D(XL,Cl,-1,0,1);else throw new sL(a+la);}catch(b){if(b=Iq(b),!G(b,106))throw b;}}function SD(a,b){a.a=31*a.a+nw((new JL(b)).a)}function YC(){}w(828,1,{},YC);_.hC=gx;_.a=1;\nfunction $O(){var a=(zz(),Cz);tz.call(this,!0,Fi);this.U=a.a;this.a=new aP(this);this.a.d=!0;jz(this,this.a);this.ab=!0;this.a.f=!0;if(-1==this.lb){var a=this.pb,b=1|(this.pb.__eventBits||0);Dx();ny(a,b)}else this.lb|=1;ir(hr(this.pb))[Yg]=ai;this.pb.style[Pk]="2147483647"}w(859,387,tl,$O);_.ee=function(a){Jy(this,a);1==Bx(a.type)&&oz(this,!1)};_.a=null;\nfunction aP(a){this.b=a;this.c=new Nm;this.i=new Nm;a=(UA(),TA);new LB(a.d,a.b,a.c,a.e,a.a);var b;b=$doc.createElement(jk);this.e=$doc.createElement(mk);vx(b,this.e);this.o=!0;a=(Yz(),$z());b=(wx(),xx(b));a.appendChild(b);this.pb=a;fo();this.pb.setAttribute(Gj,Jo.a);-1==this.lb?(a=this.pb,b=2225|(this.pb.__eventBits||0),Dx(),ny(a,b)):this.lb|=2225;this.pb[Yg]=$h;a=vy(this.pb)+"-vertical";qy(this.me(),a,!0);this.pb.style[lj]=Fc;this.pb.setAttribute("hideFocus",Fk);Fy(this,new SA(this),(wt(),wt(),xt))}\nw(860,427,xl,aP);_.ee=function(a){switch(Bx(a.type)){case 16:this.a=!1;break;case 32:this.a=!0}KA(this,a)};_.Oe=function(a,b){OA(this,a,b);b||this.a&&oz(this.b,!1)};_.a=!0;_.b=null;w(909,1,{});\nfunction bP(a,b,c,d){var e,f,g,h,j,l;h=(!c?b.b:fF(b,c,~~Zp(c)))[0][d.length];b=j=e=null;for(c=0,f=!h?0:h.length;cb?{}:new bl[b],_.cM=c);for(var e=3;e=a.t+a.n;if(a.p&&!d)return d=(b-a.t)/a.n,a.td((1+Math.cos(3.141592653589793+3.141592653589793*d))/2),a.o&&a.r==c;if(!a.p&&b>=a.t&&(a.p=!0,a.sd(),!(a.o&&a.r==c)))return!1;return d?(a.o=!1,a.p=!1,a.rd(),!1):!0}w(58,1,{});_.qd=function(){this.u&&this.rd()};\n_.rd=function(){this.td((1+Math.cos(6.283185307179586))/2)};_.sd=function(){this.td((1+Math.cos(3.141592653589793))/2)};_.n=-1;_.o=!1;_.p=!1;_.q=null;_.r=-1;_.s=null;_.t=-1;_.u=!1;function sm(a,b){if(tm(a.a,b)){var c=a.a,d=a.a.s,e;e=new um(d,a.a.k);vm(d.a,e);1==d.a.c&&wm(d.b,16);c.q=e}else a.a.q=null}function xm(a){this.a=a}w(59,1,{},xm);_.a=null;w(60,1,{});w(61,1,{13:1});function ym(){ym=x;zm=new Am}w(62,60,{});var zm=null;function Am(){this.a=new Bm;this.b=new Cm(this)}w(63,62,{},Am);\nfunction Dm(){Dm=x;Em=new Bm;var a=new Fm;Gm();Hm(Im?Im:Im=new Jm,a)}function pm(a){a.b?$wnd.clearInterval(a.c):$wnd.clearTimeout(a.c);om(Em,a)}function wm(a,b){if(0>b)throw new Km("must be non-negative");a.b?$wnd.clearInterval(a.c):$wnd.clearTimeout(a.c);om(Em,a);a.b=!1;a.c=Lm(a,b);vm(Em,a)}function Lm(a,b){return $wnd.setTimeout(B(function(){a.ud()}),b)}w(65,1,{});_.ud=function(){this.b||om(Em,this);this.vd()};_.b=!1;_.c=0;var Em;function Cm(a){Dm();this.a=a}w(64,65,{},Cm);\n_.vd=function(){var a=this.a,b,c,d,e,f;b=C(Mm,q,14,a.a.c,0);b=Nm(a.a,b);c=new Om;for(e=0,f=b.length;erm()-d.a;){e=!1;for(f=0;f=d&&0=b&&(c=1301+d));ot(a,c)}a=!0}a&&Uq(this.a)};_.Gd=function(){return bt};var bt;function pt(){pt=x;qt=new As(si,new rt)}function rt(){}w(265,246,cl,rt);_.Dd=function(a){a.ld(this)};_.Gd=function(){return qt};var qt;function st(){st=x;tt=new As(ti,new ut)}\nfunction ut(){}w(266,246,cl,ut);_.Dd=function(a){a.md(this)};_.Gd=function(){return tt};var tt;function vt(){vt=x;wt=new As(ui,new xt)}function xt(){}w(267,246,cl,xt);_.Dd=function(a){a.nd(this)};_.Gd=function(){return wt};var wt;function yt(){yt=x;zt=new As(vi,new At)}function At(){}w(268,246,cl,At);_.Dd=function(a){var b;b=this.a;Aq((xq(),yq),new Bt(a,a.b,b))};_.Gd=function(){return zt};var zt;function Ct(){Ct=x;Dt=new As(wi,new Et)}function Et(){}w(269,246,cl,Et);_.Dd=function(a){a.od(this)};\n_.Gd=function(){return Dt};var Dt;function Ft(){Ft=x;Gt=new As(xi,new Ht);new As(se,new Ht)}function Ht(){}w(270,246,cl,Ht);_.Dd=function(a){var b,c,d,e,f;b=Math.round(-this.a.wheelDelta/40)||0;b=new It(a.a.i,Es(this),Fs(this),b);f=0;for(c=Jt(a.a.i.Pc,C(Kt,q,75,0,0)),d=0,e=c.length;da.qI&&(c.tM==x||c.cM&&c.cM[1])&&(!c.cM||!c.cM[-a.qI]))throw new Su;}return a[b]=c}w(300,1,{},Lu);_.qI=0;function Pu(){Pu=x;Qu=[];Ru=[];var a=new Lu,b=Qu,c=Ru,d=0,e,f;for(f in a)if(e=a[f])b[d]=f,c[d]=e,++d}var Qu,Ru;function H(a,b){return null!=a&&a.cM&&!!a.cM[b]}function Ap(a){return null!=a&&a.tM!=x&&!(a.cM&&a.cM[1])}function Dp(a){return a.tM==x||a.cM&&!!a.cM[1]}\nfunction Tu(a){return null==a?null:a}function Uu(a){return~~Math.max(Math.min(a,2147483647),-2147483648)}var Vu=-1;\nfunction Wu(){var a;$stats&&Xu("com.google.gwt.useragent.client.UserAgentAsserter");a=navigator.userAgent.toLowerCase();if(-1!=a.indexOf(Qi))a=Qi;else if(-1!=a.indexOf("webkit"))a="safari";else if(-1!=a.indexOf(yi)&&9<=$doc.documentMode)a="ie9";else if(-1!=a.indexOf(yi)&&8<=$doc.documentMode)a=Mh;else{var b;var c=/msie ([0-9]+)\\.([0-9]+)/.exec(a);c&&3==c.length&&(b=6E3<=1E3*parseInt(c[1])+parseInt(c[2]));a=b?"ie6":-1!=a.indexOf("gecko")?"gecko1_8":"unknown"}J(Mh,a)||$wnd.alert("ERROR: Possible problem with your *.gwt.xml module file.\\nThe compile time user.agent value (ie8) does not match the runtime user.agent value ("+\na+"). Expect more errors.\\n");$stats&&Xu("com.google.gwt.user.client.DocumentModeAsserter");b=$doc.compatMode;a=y(Yu,q,1,[Wd]);for(c=0;cd)$doc.createStyleSheet().cssText=a;else{f=2147483647;e=-1;for(b=0;b>22&4194303,0>a?1048575:0)}function fv(a){return ev(a.l,a.m,a.h)}function ev(a,b,c){return _=new gv,_.l=a,_.m=b,_.h=c,_}\nfunction hv(a,b){var c,d,e,f,g;if(0==b.l&&0==b.m&&0==b.h)throw new iv;if(0==a.l&&0==a.m&&0==a.h)return jv=ev(0,0,0),ev(0,0,0);if(524288==b.h&&0==b.m&&0==b.l)return c=a,524288==c.h&&0==c.m&&0==c.l?(jv=ev(0,0,0),c=fv((kv(),lv))):(jv=ev(c.l,c.m,c.h),c=ev(0,0,0)),c;g=!1;0!=b.h>>19&&(b=mv(b),g=!0);e=b.l;0!=(e&e-1)?f=-1:(d=b.m,0!=(d&d-1)?f=-1:(c=b.h,f=0!=(c&c-1)||0==c&&0==d&&0==e?-1:0==c&&0==d&&0!=e?nv(e):0==c&&0!=d&&0==e?nv(d)+22:0!=c&&0==d&&0==e?nv(c)+44:-1));c=d=e=!1;if(524288==a.h&&0==a.m&&0==a.l)if(e=\nd=!0,-1==f)a=fv((kv(),ov)),c=!0,g=!g;else return c=pv(a,f),g&&qv(c),jv=ev(0,0,0),c;else 0!=a.h>>19&&(e=!0,a=mv(a),c=!0,g=!g);if(-1!=f){c=a;d=f;f=g;g=e;e=pv(c,d);f&&qv(e);var h;22>=d?(f=c.l&(1<=d?(f=c.l,h=c.m&(1<r?j=\n!1:(n=j.l-f.l,o=j.m-f.m+(n>>22),r+=o>>22,0>r?j=!1:(j.l=n&4194303,j.m=o&4194303,j.h=r&1048575,j=!0));if(j&&(22>l?h.l|=1<l?h.m|=1<>>1;f.m=j>>>1|(n&1)<<21;f.l=o>>>1|(j&1)<<21;--l}g&&qv(h);e?(jv=mv(c),d&&(jv=zv(jv,(kv(),lv)))):jv=ev(c.l,c.m,c.h);return h}function qv(a){var b,c,d;b=~a.l+1&4194303;c=~a.m+(0==b?1:0)&4194303;d=~a.h+(0==b&&0==c?1:0)&1048575;a.l=b;a.m=c;a.h=d}\nfunction sv(a){var b;b=Av(a.h);return 32==b?(b=Av(a.m),32==b?Av(a.l)+32:b+20-10):b-12}var jv=null;function Bv(a,b){return a.l==b.l&&a.m==b.m&&a.h==b.h}function L(a){var b,c,d;if(isNaN(a))return kv(),Cv;if(-9223372036854775E3>a)return kv(),Dv;if(9223372036854775E3<=a)return kv(),ov;d=!1;0>a&&(d=!0,a=-a);c=0;17592186044416<=a&&(c=Uu(a/17592186044416),a-=17592186044416*c);b=0;4194304<=a&&(b=Uu(a/4194304),a-=4194304*b);a=Uu(a);b=ev(a,b,c);d&&qv(b);return b}\nfunction Ev(a){var b,c;return-129a?(b=a+128,null==Fv&&(Fv=C(Gv,q,30,256,0)),c=Fv[b],!c&&(c=Fv[b]=dv(a)),c):dv(a)}function Hv(a){var b=Gk,c,d;c=a.h>>19;d=b.h>>19;return 0==c?0!=d||a.h>b.h||a.h==b.h&&a.m>b.m||a.h==b.h&&a.m==b.m&&a.l>b.l:!(0==d||a.h>19;d=b.h>>19;return 0==c?0!=d||a.h>b.h||a.h==b.h&&a.m>b.m||a.h==b.h&&a.m==b.m&&a.l>=b.l:!(0==d||a.h>13|(a.m&15)<<9;e=a.m>>4&8191;f=a.m>>17|(a.h&255)<<5;g=(a.h&1048320)>>8;h=b.l&8191;j=b.l>>13|(b.m&15)<<9;l=b.m>>4&8191;n=b.m>>17|(b.h&255)<<5;o=(b.h&1048320)>>8;r=c*h;z=d*h;t=e*h;v=f*h;g*=h;0!=j&&(z+=c*j,t+=d*j,v+=e*j,g+=f*j);0!=l&&(t+=c*l,v+=d*l,g+=e*l);0!=n&&(v+=c*n,g+=d*n);0!=o&&(g+=c*o);c=(r&4194303)+((z&511)<<13);r=(r>>22)+(z>>9)+((t&262143)<<4)+((v&31)<<17)+(c>>22);t=(t>>18)+(v>>5)+((g&4095)<<8)+(r>>22);return ev(c&4194303,r&\n4194303,t&1048575)}function mv(a){var b,c;b=~a.l+1&4194303;c=~a.m+(0==b?1:0)&4194303;return ev(b,c,~a.h+(0==b&&0==c?1:0)&1048575)}function tv(a,b){var c,d,e,b=b&63;22>b?(c=a.l<>22-b,e=a.h<>22-b):44>b?(c=0,d=a.l<>44-b):(d=c=0,e=a.l<b?(e=c>>b,d=a.m>>b|c<<22-b,c=a.l>>b|a.m<<22-b):44>b?(e=d?1048575:0,d=c>>b-22,c=a.m>>b-22|c<<44-b):(e=d?1048575:0,d=d?4194303:0,c>>=b-44);return ev(c&4194303,d&4194303,e&1048575)}function zv(a,b){var c,d;c=a.l-b.l;d=a.m-b.m+(c>>22);return ev(c&4194303,d&4194303,a.h-b.h+(d>>22)&1048575)}function Q(a){return a.l|a.m<<22}\nfunction Jv(a){var b,c,d;if(0==a.l&&0==a.m&&0==a.h)return bc;if(524288==a.h&&0==a.m&&0==a.l)return"-9223372036854775808";if(0!=a.h>>19)return $a+Jv(mv(a));for(c=m;!(0==a.l&&0==a.m&&0==a.h);){b=Ev(1E9);a=hv(a,b);b=m+Q(jv);if(!(0==a.l&&0==a.m&&0==a.h))for(d=9-b.length;0=a.children.length?a.appendChild(b):a.insertBefore(b,a.children[c])}\nfunction Xw(a,b){var c=(a.__eventBits||0)^b;a.__eventBits=b;c&&(c&1&&(a.onclick=b&1?Sw:null),c&3&&(a.ondblclick=b&3?Tw:null),c&4&&(a.onmousedown=b&4?Sw:null),c&8&&(a.onmouseup=b&8?Sw:null),c&16&&(a.onmouseover=b&16?Sw:null),c&32&&(a.onmouseout=b&32?Sw:null),c&64&&(a.onmousemove=b&64?Sw:null),c&128&&(a.onkeydown=b&128?Sw:null),c&256&&(a.onkeypress=b&256?Sw:null),c&512&&(a.onkeyup=b&512?Sw:null),c&1024&&(a.onchange=b&1024?Sw:null),c&2048&&(a.onfocus=b&2048?Sw:null),c&4096&&(a.onblur=b&4096?Sw:null),\nc&8192&&(a.onlosecapture=b&8192?Sw:null),c&16384&&(a.onscroll=b&16384?Sw:null),c&32768&&("IFRAME"==a.nodeName?b&32768?a.attachEvent(Oi,Vw):a.detachEvent(Oi,Vw):a.onload=b&32768?Uw:null),c&65536&&(a.onerror=b&65536?Sw:null),c&131072&&(a.onmousewheel=b&131072?Sw:null),c&262144&&(a.oncontextmenu=b&262144?Sw:null),c&524288&&(a.onpaste=b&524288?Sw:null))}function Rw(){for(var a=!1,b=0;b<$wnd.__gwt_globalEventArray.length;b++)!$wnd.__gwt_globalEventArray[b]()&&(a=!0);return!a}\nvar Tw=null,Sw=null,Vw=null,Uw=null;function vw(){var a=tw,b=m,c=$wnd.location.hash;0d||d>a.p.c)throw new Fx;b.ob==a&&(f=a.se(b),fd||d>=c.c)throw new Fx;for(--c.c;dg&&l.charAt(g)==$a&&0==l.indexOf(f)&&(e[h]=d+l.substring(g))}c.className=e.join(ea)}Tx(this,this.T);Yx(this);$w(Rq(this.pb),Yi,!1);$w(this.T.b,b+"Content",!0)}w(365,366,rl);_.ke=function(){ox(this.T)};_.le=function(){rx(this.T)};_.ze=function(){return this.T.jb};_.ue=function(){return new Vx(this.T)};_.re=function(a){return this.T.re(a)};_.Ae=function(a){Tx(this.T,a);Yx(this)};_.T=null;w(364,365,rl);_.oe=xx;\nfunction gy(){gy=x;hy=new iy(0,(cy(),dy));jy=new iy(1,ky);ly=new iy(2,my);ny=y(oy,q,37,[hy,jy,ly])}function iy(a,b){this.b=a;this.a=b}w(368,193,{37:1,88:1,93:1,95:1},iy);_.a=null;var ny,hy,jy,ly;function py(){py=x;qy=y(Yu,q,1,[ek,qi,Bg])}\nfunction fy(a){var b;py();var c,d;c=this.pb=Tq(Tj);this.c=Tq(Wj);gw(c,this.c);c[Fg]=0;for(c=c[Eg]=0;c");h=new Rv(Mq(c.a));g.innerHTML=h.a||m;g=Rq(g);a.kb&&(a.pb.__listener=null);\nif(a.pb&&(h=a.pb,b=h.parentNode))b.insertBefore(g,h),b.removeChild(h);a.pb=g;a.kb&&(a.pb.__listener=a);-1==a.lb?(g=a.pb,a=133333119|(a.pb.__eventBits||0),mw(),Xw(g,a)):a.lb|=133333119}w(397,398,{},Ty);_.a=0;_.b=0;_.c=0;_.d=null;_.e=0;function Uy(a,b){this.a=a;this.b=b}w(399,1,{},Uy);_.pd=function(){var a,b;this.b.a!=this.a||this!=this.a.f||(this.a.f=null,this.b.kb?(a=(b=$doc.createEventObject(),b.type=ci,b),this.b.pb.fireEvent("on"+a.type,a)):this.b.pb.__gwtLastUnhandledEvent=ci)};_.a=null;_.b=null;\nw(401,329,Vl);function $y(a){this.a=a}w(403,401,Vl,$y);_.Od=function(a){this.a.Ge(a.f,a.a)};function az(a,b,c){var d;if(a.o){var e=d=Tq(lk);Ww(a.e,(hw(),iw(e)),b);a=(hw(),iw(c));d.appendChild(a)}else d=a.e.children[0],Ww(d,(hw(),iw(c)),b)}\nfunction bz(a,b,c){var d;b.b&&(cz(a,b),c&&b.a?(cz(a,null),a=b.a,b=(xq(),yq),b.c=Bq(b.c,[new dz(a),!1])):null!=b.d&&(a.j=new ez(a,b),c=(cy(),ky),a.j.U=c,a.j.ab=a.f,c=Fh,a.j.ee()[Kg]=c,d=dx(a.pb),J(Eh,d)||Zw(a.j,d+"Popup"),nx(a.j,new $y(a),Im?Im:Im=new Jm),a.n=b.d,d=a.j,a=new fz(a,b),d.pb.style[uk]=Ih,$x(d),Iu(),a.a.o?Zx(a.a.j,Xq(a.a.pb)+Nq(a.a.pb,Mi)-1,Zq(a.b.pb)):Zx(a.a.j,Xq(a.b.pb),Zq(a.a.pb)+Nq(a.a.pb,Li)-1),d.pb.style[uk]=vk))}\nfunction gz(a,b){!b&&a.k&&a.n==a.k.d||b&&!b.b||(cz(a,b),hz(a.pb),b&&a.d&&bz(a,b,!1))}\nfunction iz(a,b){var c;a:{c=b.srcElement;var d,e;for(e=new uu(a.i);e.bc&&(c=a.i.c-1),c==b){d=ww(a.i,b);break}else if(d=ww(a.i,c),d.b)break;cz(a,d)}}w(404,362,jl);_.Yd=function(a){iz(this,a)};_.oe=function(){this.j&&Wx(this.j,!1);rx(this)};_.Ge=function(a,b){mz(this,a,b)};_.d=!1;_.e=null;_.f=!1;_.j=null;_.k=null;_.n=null;_.o=!1;function dz(a){this.a=a}\nw(405,1,{},dz);_.pd=function(){pz(this.a)};_.a=null;function qz(a){this.a=a}w(406,1,{},qz);_.Hd=function(){cz(this.a,null)};_.a=null;function ez(a,b){this.a=a;this.b=b;ay.call(this,!0,li);Tx(this.T,this.b.d);Yx(this);this.fb=!0;this.b.d.bi()}w(407,365,rl,ez);_.Ud=function(a){var b,c;if(!a.a)switch(Nw(a.d.type)){case 4:c=a.d.srcElement;b=this.b.c.pb;if(Wq(b,c)){a.a=!0;break}a.a&&cz(this.a,null)}};_.a=null;_.b=null;function fz(a,b){this.a=a;this.b=b}w(408,1,{},fz);_.a=null;var rz=_.b=null;\nfunction sz(){sz=x;rz=new Lv((bw(),new aw((Iu(),"data:image/gif;base64,R0lGODlhBQAJAIAAAAAAAAAAACH5BAEAAAEALAAAAAAFAAkAAAIMRB5gp9v2YlJsJRQKADs="))),5,9)}function tz(a,b){if(b){var c=dx(a.pb)+Ib;$w(a.ee(),c,!1)}else c=dx(a.pb)+Ib,$w(a.ee(),c,!0);a.b=b}function uz(a,b){this.pb=Tq(Xj);var c=dx(this.pb)+Kb;$w(this.ee(),c,!1);this.pb.innerText=a||m;this.pb[Kg]="gwt-MenuItem";c=$q();this.pb.setAttribute(Lh,c);Kn();this.pb.setAttribute("role",to.a);this.a=b}w(411,363,{41:1,45:1,48:1},uz);_.a=null;_.b=!0;\n_.c=null;_.d=null;function vz(){var a;this.pb=Tq(Xj);this.pb[Kg]="gwt-MenuItemSeparator";a=Tq(gh);gw(this.pb,a);a[Kg]="menuSeparatorInner"}w(412,363,Rl,vz);function wz(){var a,b,c,d,e;b=null.bi();e=dr();d=cr();b[fh]=(gr(),Fi);b[zk]=0+(Cr(),bj);b[Hh]=dc;c=$doc;c=(J(c.compatMode,Wd)?c.documentElement:c.body).scrollWidth||0;a=$doc;a=(J(a.compatMode,Wd)?a.documentElement:a.body).scrollHeight||0;b[zk]=(c>e?c:e)+bj;b[Hh]=(a>d?a:d)+bj;b[fh]="block"}function by(){}w(413,1,{},by);_.Qd=function(){wz()};\nfunction xz(a){this.a=a}w(414,1,{},xz);_.Ud=function(a){var b=this.a,c,d;if(a.a||!b.fb&&a.b)b.db&&(a.a=!0);else if(b.Ud(a),!a.a){d=a.d;c=d.srcElement;var e;try{e=!!c&&!!c.nodeType}catch(f){e=!1}(c=e&&c&&1==c.nodeType?Wq(b.pb,c):!1)&&(a.b=!0);b.db&&(a.a=!0);switch(Nw(d.type)){case 4:case 1048576:if(kw){a.b=!0;break}if(!c&&b.V){b.Ce(!0);break}break;case 8:case 64:case 1:case 2:case 4194304:if(kw){a.b=!0;break}break;case 2048:d=d.srcElement,b.db&&!c&&d&&(d.blur&&d!=$doc.body&&d.blur(),a.a=!0)}}};\n_.a=null;function yz(a){this.a=a}w(415,1,{},yz);_.a=null;function cy(){cy=x;dy=new zz(0);ky=new zz(1);my=new zz(2);Az=y(Bz,q,46,[dy,ky,my])}function zz(a){this.b=a}w(416,193,{46:1,88:1,93:1,95:1},zz);var Az,dy,ky,my;function Cz(a){a.j?a.a.bb&&($doc.body.appendChild(a.a.Z),a.f=zw(a.a.$),wz(),a.b=!0):a.b&&($doc.body.removeChild(a.a.Z),Dz(a.f.a),a.f=null,a.b=!1)}function Ez(a){a.j||(Cz(a),a.c||(tx(),Lx(Fz(null),a.a)));a.a.pb.style[Ng]="rect(auto, auto, auto, auto)";a.a.pb.style[Ui]=vk}\nfunction Gz(a,b){var c,d,e,f,g,h;a.j||(b=1-b);c=f=e=g=0;d=Uu(b*a.d);h=Uu(b*a.e);switch(a.a.U.b){case 2:f=a.e;c=d;break;case 0:g=a.d-d>>1;e=a.e-h>>1;f=e+h;c=g+d;break;case 1:Iu(),f=h,c=d}a.a.pb.style[Ng]="rect("+g+fj+f+fj+c+fj+e+"px)"}\nfunction Xx(a,b,c){a.c=c;nm(a);a.i&&(pm(a.i),a.i=null,Ez(a));a.a.hb=b;var d=a.a;d.eb&&(Dz(d.eb.a),d.eb=null);d._&&(Dz(d._.a),d._=null);if(d.hb){d.eb=lw(new xz(d));var e;e=new yz(d);sw();e=tw?iu(tw.a,(!hu&&(hu=new Jm),hu),e):null;d._=e}c=!c&&a.a.ab;a.a.U!=(cy(),dy)&&!b&&(c=!1);a.j=b;c?b?(Cz(a),a.a.pb.style[Zi]=bg,-1!=a.a.ib&&a.a.De(a.a.cb,a.a.ib),a.a.pb.style[Ng]=oj,tx(),b=Fz(null),Cx(b,a.a,b.pb),a.i=new Hz(a),wm(a.i,1)):qm(a,200):(Cz(a),a.j?(a.a.pb.style[Zi]=bg,-1!=a.a.ib&&a.a.De(a.a.cb,a.a.ib),tx(),\nb=Fz(null),Cx(b,a.a,b.pb)):a.c||(tx(),Lx(Fz(null),a.a)),a.a.pb.style[Ui]=vk)}function ey(a){var b=(ym(),zm);this.k=new xm(this);this.s=b;this.a=a}w(417,58,{},ey);_.rd=function(){Ez(this)};_.sd=function(){this.d=Nq(this.a.pb,Li);this.e=Nq(this.a.pb,Mi);this.a.pb.style[Ui]=Ih;Gz(this,(1+Math.cos(3.141592653589793))/2)};_.td=function(a){Gz(this,a)};_.a=null;_.b=!1;_.c=!1;_.d=0;_.e=-1;_.f=null;_.i=null;_.j=!1;function Hz(a){Dm();this.a=a}w(418,65,{},Hz);_.vd=function(){this.a.i=null;qm(this.a,200)};\n_.a=null;function hw(){hw=x;Iz()}function iw(a){return a.__gwt_resolve?a.__gwt_resolve():a}function Iz(){function a(){}a.prototype={className:m,clientHeight:0,clientWidth:0,dir:m,getAttribute:function(a){return this[a]},href:m,id:m,lang:m,nodeType:1,removeAttribute:function(a){this[a]=void 0},setAttribute:function(a,c){this[a]=c},src:m,style:{},title:m};$wnd.GwtPotentialElementShim=a}function tx(){tx=x;Jz=new Kz;Lz=new pp;ux=new ru}function Mz(a){this.p=new Qx(this);this.pb=a;ox(this)}\nfunction Fz(a){tx();var b,c;c=Au(Lz,a);b=null;if(null!=a&&!(b=$doc.getElementById(a)))return null;if(c&&(!b||c.pb==b))return c;if(0==Lz.d){var d=new Nz;Gm();Hm(Im?Im:Im=new Jm,d);Iu()}!b?c=new Oz:c=new Mz(b);D(Lz,a,c);su(ux,c);return c}w(420,359,rl,Mz);var Jz,Lz,ux;function Kz(){}w(421,1,{},Kz);_.Fe=function(a){a.me()&&a.oe()};function Nz(){}w(422,1,{},Nz);_.Od=function(){tx();try{yx(ux,Jz)}finally{Pz(ux.a),Pz(Lz)}};function Oz(){Mz.call(this,$doc.body)}w(423,420,rl,Oz);\n_.xe=function(a,b,c){b-=ar();c-=br();Ox(a,b,c)};function Vx(a){this.c=a;this.a=!!this.c.jb}w(424,1,{},Vx);_.Vd=Sv;_.Wd=function(){if(!this.a||!this.c.jb)throw new Ix;this.a=!1;return this.b=this.c.jb};_.Xd=function(){this.b&&this.c.re(this.b)};_.b=null;_.c=null;function Qz(a,b){a.pb[sk]=null!=b?b:m}w(427,377,jl);_.Yd=function(a){0!=(Nw(a.type)&896)?qx(this,a):qx(this,a)};_.pe=wx;function Rz(){Rz=x;Sz()}w(426,427,jl);\nfunction Tz(){Rz();var a=Qq(Yj);!fw&&(fw=new ew);!dw&&(dw=new cw);this.pb=a;Iu();this.pb[Kg]="gwt-TextBox"}w(428,426,jl,Tz);function Sz(){Sz=x;Uz=new Vz;Wz=new Xz;Yz=new Zz;$z=new aA;bA=y(cA,q,49,[Uz,Wz,Yz,$z])}w(429,193,ll);var bA,Uz,Wz,Yz,$z;function Vz(){this.b=0}w(430,429,ll,Vz);function Xz(){this.b=1}w(431,429,ll,Xz);function Zz(){this.b=2}w(432,429,ll,Zz);function aA(){this.b=3}w(433,429,ll,aA);function Hx(a,b){var c;for(c=0;cc||c>a.c)throw new Fx;if(a.c==a.a.length){e=C(dA,q,50,2*a.a.length,0);for(d=0;dc;--d)fq(a.a,d,a.a[d-1]);fq(a.a,c,b)}function Qx(a){this.b=a;this.a=C(dA,q,50,4,0)}w(435,1,{},Qx);_.ue=function(){return new Jx(this)};_.a=null;_.b=null;_.c=0;function eA(a){if(a.a>=a.b.c)throw new Ix;return a.b.a[++a.a]}function fA(a){if(0>a.a||a.a>=a.b.c)throw new gA;a.b.b.re(a.b.a[a.a--])}function Jx(a){this.b=a}w(436,1,{},Jx);\n_.Vd=function(){return this.aa)throw new Km("Missing message: awt.133");this.e=a;this.a=2;this.c=0;this.d=10;this.b=0}w(462,1,{55:1},pB);\n_.eQ=function(a){return a===this?!0:H(a,55)?a.e==this.e&&a.a==this.a&&a.c==this.c&&a.d==this.d&&a.b==this.b:!1};_.hC=function(){var a;a=new qB;a.a=31*a.a+Uu((new rB(this.e)).a);a.a=31*a.a+this.a;a.a=31*a.a+this.c;a.a=31*a.a+Uu((new rB(this.d)).a);return a.a};_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;\nfunction sB(){sB=x;tB=uB=new cm(255,255,255);vB=new cm(192,192,192);wB=new cm(128,128,128);xB=new cm(64,64,64);yB=zB=new cm(0,0,0);AB=BB=new cm(255,0,0);new cm(255,175,175);CB=new cm(255,200,0);DB=new cm(255,255,0);new cm(0,255,0);EB=new cm(255,0,255);FB=new cm(0,255,255);GB=HB=new cm(0,0,255)}\nfunction IB(a){var b,c;c=a.d>>16&255;b=a.d&255;a=a.d>>8&255;if(0==c&&0==b&&0==a)return new cm(3,3,3);3>c&&0!=c?c=3:(c=Uu(c/0.7),c=255b&&0!=b?b=3:(b=Uu(b/0.7),b=255a&&0!=a?a=3:(a=Uu(a/0.7),a=255>16&255)),Uu(0.7*(a.d>>8&255)),Uu(0.7*(a.d&255)))}function KB(a,b){return H(b,58)?b.d==a.d:!1}function cm(a,b,c){sB();if((a&255)!=a||(b&255)!=b||(c&255)!=c)throw new Km(oe);this.d=c|b<<8|a<<16|-16777216}\nw(468,1,{58:1,67:1,70:1},cm);_.eQ=function(a){return KB(this,a)};_.hC=LB;_.tS=function(){return MB.d+"[r="+(this.d>>16&255)+",g="+(this.d>>8&255)+",b="+(this.d&255)+Tf};_.a=0;_.b=null;_.c=null;_.d=0;var yB,GB,AB,tB,zB,HB,FB,xB,wB,vB,EB,CB,BB,uB,DB;function GA(){GA=x;HA=new NB(!0);OB=new ru;su(OB,"ar");su(OB,"fa");su(OB,"iw");su(OB,"ur")}function NB(a){this.a=a}w(469,1,Sl,NB);_.a=!1;var HA,OB;w(473,1,{76:1,92:1});function PB(){xA.call(this,0,0)}function xA(a,b){this.b=a;this.a=b}\nfunction zA(a){xA.call(this,a.b,a.a)}w(472,473,{61:1,76:1,88:1,92:1},PB,xA,zA);_.eQ=function(a){return a===this?!0:H(a,61)?a.b==this.b&&a.a==this.a:!1};_.hC=function(){var a;a=new qB;a.a=31*a.a+this.b;a.a=31*a.a+this.a;return a.a};_.tS=function(){return QB.d+"[width="+this.b+",height="+this.a+Tf};_.a=0;_.b=0;function ft(a,b,c){this.f=a;this.c=b;this.e=this.d=this.j=this.i=0;this.b=c}w(474,1,Sl,ft,function(a,b,c,d){this.f=a;this.c=b;this.j=this.i=0;this.d=c;this.e=d;this.b=null});\n_.pf=function(){return 0!=(this.e&4)};_.qf=function(){return 0!=(this.e&1)};_.tS=function(){var a;return this.cZ.d+"[id="+this.c+",x="+this.i+",y="+this.j+(0!=this.d?",key="+this.d+(a=m,this.qf()&&(a+=",shift"),0!=(this.e&2)&&(a+=",control"),this.pf()&&(a+=",meta"),a):m)+",target="+this.f+(null!=this.b?",arg="+this.b:m)+Tf};_.b=null;_.c=0;_.d=0;_.e=0;_.f=null;_.i=0;_.j=0;function RB(a){var b,c;for(c=b=0;cb.b&&(SB(this,l,b.b-(n-this.c),g.b,o,j,h),l.mg(),n=f,o+=j+this.d,j=0),e=!1,fq(l.b,l.c++,c),n+=a.b+this.c,j=Pm(j,a.a);SB(this,l,b.b-(n-this.c),g.b,o,\nj,h)}};_.mf=function(a){this.b=XB(a.Fc);return 0==RB(this)?OA(a,new xA(10,10)):OA(a,UB(this,!1))};_.nf=function(a){this.b=XB(a.Fc);return 0==RB(this)?OA(a,new xA(10,10)):OA(a,UB(this,!0))};_.of=LA;_.tS=function(){var a;switch(this.a){case 0:a=Xh;break;case 2:a=tj;break;case 1:a=Gg;break;case 4:a="trailing";break;default:a="leading"}return $B.d+"[hgap="+this.c+",vgap="+this.d+",align="+a+Tf};_.a=0;_.b=null;_.c=0;_.d=0;function aC(){aC=x;bC=new cC(ve,0,12)}\nfunction cC(a,b,c){aC();this.a=null!=a?a:"Default";this.b=0<=c?c:0;this.c=0==(b&-4)?b:0}w(476,1,{62:1,88:1},cC);_.a=null;_.b=0;_.c=0;var bC;w(477,1,nl);_.tS=function(){return dC.d+"[font="+this.b+"ascent="+eC(fC,this.b).a+", descent="+eC(fC,this.b).b+", height="+eC(fC,this.b).c+Tf};_.b=null;w(479,1,{});_.tS=function(){return"Graphics"};w(480,479,{});function gA(){}function px(a){this.f=a}w(483,136,El,gA,px);function tA(){this.f="Missing message: awt.151"}w(482,483,El,tA);w(484,1,{});\nfunction JA(a,b,c,d){this.d=a;this.b=b;this.a=c;this.c=d}w(485,1,{64:1,88:1,92:1},JA);_.eQ=function(a){return a===this?!0:H(a,64)?a.b==this.b&&a.a==this.a&&a.c==this.c&&a.d==this.d:!1};_.hC=function(){var a;a=31+this.d;a=31*a+this.b;a=31*a+this.a;return a=31*a+this.c};_.tS=function(){return gC.d+"[left="+this.b+",top="+this.d+",right="+this.c+",bottom="+this.a+Tf};_.a=0;_.b=0;_.c=0;_.d=0;w(489,1,Sl);_.$e=function(){return this.j};_.tS=NA;_.j=null;_.k=null;\nfunction hC(a){var b;b=a.j+",label="+a.f;a.e||(b+=",disabled");null!=a.c&&(b+=",command="+a.c);return b}function iC(a,b){a.e=b;tz(a.i.a,b)}function jC(a){this.n=(DA(),DA(),EA);var b;var c;b=this.cZ.d;-1!=ex(b,fx(36))?b=null:(c=this.n.b.d++,b=hx(b,nA(b,fx(46))+1)+m+c);this.j=b;this.d=new nB;this.f=a;this.e=!0;this.i=new kC(this)}w(488,489,Sl,jC);_.$e=function(){return hC(this)};_.c=null;_.e=!1;_.f=null;_.i=null;w(487,488,gl);_.$e=function(){return hC(this)+(this.b?",tearOff":m)};_.b=!1;w(491,1,{77:1});\n_.eQ=function(a){return a===this?!0:H(a,77)?this.rf()==a.rf()&&this.sf()==a.sf():!1};_.hC=function(){var a;a=new qB;lC(a,this.rf());lC(a,this.sf());return a.a};function sA(){this.b=this.a=0}function mC(a,b){this.a=a;this.b=b}w(490,491,{68:1,77:1,88:1},sA,mC);_.eQ=function(a){return a===this?!0:H(a,68)?this.a==a.a&&this.b==a.b:!1};_.rf=Sv;_.sf=sy;_.tS=function(){return nC.d+"[x="+this.a+",y="+this.b+Tf};_.a=0;_.b=0;\nfunction oC(a,b){if(!b)throw new ju("Missing message: awt.70");var c=a.a;if(J(b.f,$a)){var c=c.a.a,d=new vz,e=c.c.c;if(0>e||e>c.c.c)throw new Fx;c.o&&(d.pb[Qg]=2);az(c,e,d.pb);pC(c.c,e,d)}else{var d=c.a.a,c=b.i.a,e=d.c.c,f,g;if(0>e||e>d.c.c)throw new Fx;pC(d.c,e,c);for(f=g=0;f=this.k?0!=(this.j&16)?(this.d=1,501==this.k&&(this.j|=1024)):0!=(this.j&8)?(this.d=2,501==this.k&&(this.j|=2048)):0!=(this.j&4)&&(this.d=3,501==this.k&&(this.j|=4096)):(0!=(this.j&16)&&(this.j|=1024),0!=(this.j&8)&&(this.j|=\n2048),0!=(this.j&4)&&(this.j|=4096));else if(0!=(this.j&16320))if(this.j&=-64,0!=(this.j&64)&&(this.j|=1),0!=(this.j&128)&&(this.j|=2),0!=(this.j&256)&&(this.j|=4),0!=(this.j&512)&&(this.j|=8),0!=(this.j&8192)&&(this.j|=32),500<=this.k&&502>=this.k)switch(this.d){case 1:this.j|=16;break;case 2:this.j|=8;break;case 3:this.j|=4}else 0!=(this.j&1024)&&(this.j|=16),0!=(this.j&2048)&&(this.j|=8),0!=(this.j&4096)&&(this.j|=4);this.b=0;this.a=1;this.c=d}w(515,514,Sl,It);\n_.$e=function(){var a,b;a=ZC(this);switch(this.b){case 0:b="WHEEL_UNIT_SCROLL";break;case 1:b="WHEEL_BLOCK_SCROLL";break;default:b=rk}return a+=",scrollType="+b+",scrollAmount="+this.a+",wheelRotation="+this.c};_.a=0;_.b=0;_.c=0;w(524,1,{});function UC(a){if(null==a)throw new aD;}w(525,524,{},UC);\nfunction bD(){bD=x;cD={};cD["java.vendor"]=Ah;cD["package.restrict.access.sun"]=pk;cD["sun.java.launcher"]=cf;cD["sun.management.compiler"]=Ah;cD["os.name"]=cf;cD[" sun.boot.class.path"]=cf;cD["path.separator.applet"]=cf;cD["java.vm.specification.vendor"]=Ah;cD["java.runtime.version"]=cf;cD["http.proxyPort"]=cf;cD["user.name"]=cf;cD["user.language"]=cf;cD["os.name.applet"]=cf;cD["browser.version"]=cf;cD["java.version"]=cf;cD["user.timezone"]=cf;cD["java.endorsed.dirs"]=cf;cD["java.specification.name"]=\n"GWT";cD["java.specification.version"]="2.5.0";cD[Uh]=Qe;!Lt&&(Lt=new Tt);Lt.a?cD[Oh]="yes":cD[Oh]=null}var cD;w(529,137,Tl);function dD(){}function eD(a){this.f=a}w(528,529,{82:1,88:1,96:1,105:1},dD,eD);function fD(){fD=x;gD=new hD}function iD(a){var b;if(a.k){var c;b=new Ov;tp(b,a.f);Jq(b.a,Nc);c=a.a;null!=c&&0=b||65<=b&&90>=b;for(c=1;b&&c=b||65<=b&&90>=b||48<=b&&57>=b||43==b||45==b||46==b;if(b){c=this.f;kD();var f,g,h;h=c.length;b=new lD;for(g=0;g=f?mD(b,f+32&65535):Jq(b.a,String.fromCharCode(f));\nthis.f=Mq(b.a)}else this.f=null,d=-1}if(null==this.f)throw new eD(Ie+a);if(!this.k&&(this.k=Au(gD,this.f),this.k||(this.k=(DA(),new nD))&&D(gD,this.f,this.k),!this.k))throw new eD(Ie+a);try{c=a;var j=++d,l=a.length,n,o,r,t,z,v,E,s,F,P,M,$,da,Z,ca,Hb,aa,sb,Mb,K,Ja;if(ll){if(-2147483647>=l&&(j>=c.length||0>j)||!(0>j||j>=c.length)&&c.indexOf(Wb,j)==j&&-1==oD(c,fx(47),j+2))throw new pD(l);}else{M=c.substr(j,l-j);l-=j;v=0;E=this.c;$=this.e;sb=this.j;t=this.d;ca=this.i;n=this.a;Ja=this.n;Mb=oD(M,\nfx(35),0);if(0==M.indexOf(Wb)&&0!=M.indexOf("////")){F=2;$=-1;v=oD(M,fx(47),2);aa=oD(M,fx(63),2);-1!=aa&&(-1==v||v>aa)&&(v=aa);-1==v&&(v=l,t=m);s=v;-1!=Mb&&Mbr+1?(o=M.charCodeAt(r+1),58==o?da=r+1:da=-1):da=-1}catch(Ub){if(Ub=pq(Ub),!H(Ub,96))throw Ub;}-1==da||da>v?E=M.substr(F,s-F):(E=M.substr(F,da-F),Z=M.substr(da+1,s-(da+1)),0==Z.length?\n$=-1:$=qD(Z,10))}-1v&&(null==t?t=m:J(t,m)?t=Tb:t.indexOf(Tb),P=nA(t,fx(47))+1,0==P?t=M.substr(v,z-v):t=t.substr(0,P-0)+M.substr(v,z-v)));null==t&&(t=m);null==E&&(E=m);d=E;var N;N=t;null!=ca&&!J(ca,m)&&(null!=t?N=t+id+ca:N=id+ca);\nnull==this.f&&(this.f=this.f);this.c=d;this.b=N;this.e=$;this.j=sb;var za;null!=this.c&&0this.e)throw new eD("incorrect port: "+\nthis.e);}w(530,1,Sl,jD);_.tS=function(){return iD(this)};_.a=null;_.b=null;_.c=null;_.d=null;_.e=-1;_.f=null;_.i=null;_.j=null;_.k=null;_.n=null;var gD;w(531,1,{});function rD(a,b,c){var d,e;for(d=a.Kf().ue();d.Vd();)if(a=d.Wd(),e=a.th(),null==b?null==e:Cp(b,e))return c&&(a=new sD(a.th(),a.uh()),d.Xd()),a;return null}w(535,1,Kl);_.Jf=function(a){return!!rD(this,a,!1)};\n_.eQ=function(a){var b,c;if(a===this)return!0;if(!H(a,108)||this.Pf()!=a.Pf())return!1;for(a=a.Kf().ue();a.Vd();)if(b=a.Wd(),c=b.th(),b=b.uh(),!this.Jf(c)||!tD(b,this.Lf(c)))return!1;return!0};_.Lf=function(a){a=rD(this,a,!1);return!a?null:a.uh()};_.hC=function(){var a,b,c;c=0;for(b=this.Kf().ue();b.Vd();)a=b.Wd(),c+=a.hC(),c=~~c;return c};_.Mf=uD;_.Nf=function(){throw new vD("Put not supported on this map");};_.Of=function(a){a=rD(this,a,!0);return!a?null:a.uh()};_.Pf=function(){return this.Kf().Pf()};\n_.tS=function(){var a,b,c,d;d=Dk;a=!1;for(c=this.Kf().ue();c.Vd();)b=c.Wd(),a?d+=Ua:a=!0,d+=m+b.th(),d+=ad,d+=m+b.uh();return d+"}"};function Pz(a){a.a=[];a.e={};a.c=!1;a.b=null;a.d=0}function Qw(a,b){var c;if(null==b)c=a.c;else if(H(b,1))c=Nc+b in a.e;else a:{c=a.Sf(b);if(c=a.a[c])for(var d=0,e=c.length;d=a.i)break;c=ED(a,c);++b}return b}\nfunction FD(a,b){var c;for(c=0;c=a.i)throw new BD;b=a.a;a.a=ED(a,a.a);return $C(a.n,b,a.a)}\nfunction ED(a,b){var c,d;for(d=b;da.f||!FD(a,c))break;d+=65536<=c?2:1}else{c=a.n.charCodeAt(d);if(c>a.f||0>ex(a.c,fx(c)))break;++d}return d}function ID(a){JD.call(this,a,fa,!1)}function KD(a){JD.call(this,a,Pa,!1)}\nfunction JD(a,b,c){this.a=0;this.j=-1;this.d=!1;this.n=a;this.i=a.length;this.c=b;this.k=c;var d;if(null==this.c)this.f=0;else{for(c=b=d=0;c=a&&(a=HD(this.c,c,this.c.length),this.e=!0),d=a;++a)0=a;++a)b=kf,33=j||b>a.Sb||c>a.Sb))){l=C(XE,Ml,-1,99,1);h=o=n=0;for(g=b;g<=c;++g)f=YE(a.zb[g]),n+=f.c,o+=f.d,f.d>h&&(h=f.d),l[g]=f.c,2==d&&(l[g]=f.d);a.J&&(n+=25*(j+1),o+=25*(j+1),h+=25);j=g=1;a.J?r=ZE(a):r=$E(a);f=Uu(r.b);r=Uu(r.a);1==d||3==d?f=~~((f-48)/2):2==d&&(r=~~(r/2));n>=f&&(g=f/n);h>=r&&(j=r/h);h=0;a.J&&(a.xb=gd)switch(lF(b,(sB(),zB)),f){case 101:lF(b,DB);pF(b,j+3,g+3,a.mb-6,a.mb-6);lF(b,zB);e=g+3;h=a.mb-6;c=\na.mb-6;d=b.a;f=Q(L(R((j+3)*S)));e=Q(L(R(e*S)));h=Q(L(R(h*S)));c=Q(L(R(c*S)));d.o&&(qF(d,!1),rF(d,sF(d,f,e,h,c)));tF(b,j+6,g+6,a.mb-12,a.mb-12);uF(b.a,Q(L(R((j+9)*(vF(),S)))),Q(L(R((g+9)*S))),Q(L(R(2*S))),Q(L(R(4*S))));mF(b,j+a.mb-10,g+9,2,4);0.04>Math.random()&&(lF(b,BB),uF(b.a,Q(L(R((j+10)*S))),Q(L(R((g+18)*S))),Q(L(R(4*S))),Q(L(R(4*S)))));0.96=e;++e)if(bn&&(lF(g,(kE(),sE)[n]),pF(g,f.b[s].q-12,f.b[s].r-\n12,24,24));for(s=1;s<=f.q;++s)l=f.c[s].i,o=f.c[s].j,0!=f.b[l].c&&f.b[l].c==f.b[o].c&&(lF(g,(kE(),sE)[f.b[l].c]),v=f.b[o].q-f.b[l].q,h=f.b[o].r-f.b[l].r,z=Math.sqrt(v*v+h*h),1>z&&(z=1),h/=z,z=v/z,v=9*h,t=9*z,n=OF(4),r=OF(4),n[0]=f.b[l].q+v,r[0]=f.b[l].r-t,n[1]=f.b[o].q+v,r[1]=f.b[o].r-t,n[2]=f.b[o].q-v,r[2]=f.b[o].r+t,n[3]=f.b[l].q-v,r[3]=f.b[l].r+t,AF(g,n,r,4))}for(s=1;s<=f.q;++s){lF(g,(sB(),yB));t=f.c[s];l=t.i;o=t.j;1==f.i&&0!=f.b[l].c&&f.b[l].c==f.b[o].c&&lF(g,(kE(),sE)[f.b[l].c]);if(3==t.f||4==\nt.f)n=l,l=o,o=n;n=f.b[l].q;r=f.b[l].r;M=f.b[o].q;P=f.b[o].r;if(1!=t.c||0!=t.f)v=M-n,h=P-r,z=Math.sqrt(v*v+h*h),1>z&&(z=1),h/=z,z=v/z;switch(t.c){case 2:10<=t.f&&lF(g,EB);v=2*h;t=2*z;xF(g.a,Q(L(R((n+v)*(vF(),S)))),Q(L(R((r-t)*S))),Q(L(R((M+v)*S))),Q(L(R((P-t)*S))));xF(g.a,Q(L(R((n-v)*S))),Q(L(R((r+t)*S))),Q(L(R((M-v)*S))),Q(L(R((P+t)*S))));lF(g,zB);break;case 3:xF(g.a,Q(L(R(n*(vF(),S)))),Q(L(R(r*S))),Q(L(R(M*S))),Q(L(R(P*S))));l=3*h;o=3*z;xF(g.a,Q(L(R((n+l)*S))),Q(L(R((r-o)*S))),Q(L(R((M+l)*S))),Q(L(R((P-\no)*S))));xF(g.a,Q(L(R((n-l)*S))),Q(L(R((r+o)*S))),Q(L(R((M-l)*S))),Q(L(R((P+o)*S))));break;case 9:case 0:for(o=0;10>o;++o)l=n-(n-M)/10*o,E=r-(r-P)/10*o,xF(g.a,Q(L(R(l*(vF(),S)))),Q(L(R(E*S))),Q(L(R(l*S))),Q(L(R(E*S))));PF(g,f.k.v);o=QF(f.k.w);t=t.d;l=id;null!=t&&(l=t);t=AC(f.k.w,l);t=(n+M)/2-t/2;P=(r+P)/2+~~(o/2)-1;lF(g,EB);RF(g.a,l,Q(L(R(t*(vF(),S)))),Q(L(R(P*S))));lF(g,zB);break;default:if(1==t.f||3==t.f)v=3*h,t=3*z,E=OF(3),j=OF(3),E[0]=M+v,j[0]=P-t,E[1]=n,j[1]=r,E[2]=M-v,j[2]=P+t,AF(g,E,j,3);else if(2==\nt.f||4==t.f){v=3*h;t=3*z;for(o=0;10>o;++o)l=n-(n-M)/10*o,E=r-(r-P)/10*o,j=o/10,xF(g.a,Q(L(R((l+v*j)*(vF(),S)))),Q(L(R((E-t*j)*S))),Q(L(R((l-v*j)*S))),Q(L(R((E+t*j)*S))))}else xF(g.a,Q(L(R(n*(vF(),S)))),Q(L(R(r*S))),Q(L(R(M*S))),Q(L(R(P*S))))}}z=OF(f.p+1);h=OF(f.p+1);for(s=1;s<=f.q;++s)l=f.c[s].i,o=f.c[s].j,n=f.b[l].q,r=f.b[o].q,++h[l],++h[o],z[l]=z[l]/h[l]+r/h[l],z[o]=z[o]/h[o]+n/h[o];PF(g,f.k.v);o=QF(f.k.w);M=OF(f.p+1);r=OF(f.p+1);n=C(SF,q,120,f.p+1,0);for(s=1;s<=f.p;++s)l=TF(f,s),(null==l||1>l.length)&&\n(l=Ma),j=f.b[s],3==f.b[s].a&&0VF(z[s]-f.b[s].q)&&(v=!1),2VF(z[s]-f.b[s].q)&&(P=!0),t=l,E=m,f.k.oc&&(F=f.b[s].i,0z&&(z=1),h/=z,z=v/z,v=4*h,t=4*z,E=OF(5),j=OF(5),E[0]=f.b[l].q+v,E[1]=f.b[o].q+v,j[0]=f.b[l].r-t,j[1]=f.b[o].r-t,E[3]=f.b[l].q-v,E[2]=f.b[o].q-v,j[3]=f.b[l].r+t,j[2]=f.b[o].r+t,E[4]=E[0],j[4]=j[0],106!=f.k.k&&YF(g,E,j,5),106==f.k.k&&ZF(f,f.c[f.w].i,f.c[f.w].j))){h=0;for(s=1;s<=f.p;++s)0~~(f.p/2))for(s=1;s<=f.p;++s)0e;++e)if(d=a.zb[e])0b&&(b=c);return b}\nfunction jG(a,b,c,d){var e=tE?350:170,f,g,h,j;kG(d);b=lG(a,b);c=lG(a,c);h=e;for(g=1;g<=a.Sb;++g){j=new mG(e);f=a.zb[g];for(var l=b,n=c,o=j,r=void 0,t=void 0,z=void 0,v=void 0,E=r=r=r=v=r=void 0,s=void 0,F=void 0,P=t=z=r=r=void 0,M=void 0,$=void 0,E=0,F=o.a,s=1;s<=f.q;++s)r=nG(l,n,f.c[s].a,f.c[s].b),rz+F||(r=M*r+$*v,0>r||(z=Math.sqrt(z),t=Math.sqrt(t),r/=z*t,1<=r||(r=1.5707963267948966-Math.acos(r),r=t*Math.cos(r),r*=r,r=a.yb||0>=a.ub)&&(!a.M&&(a.M=bB(a)),oG(a,a.M));b=new pG;b.b=a.yb;b.a=a.ub;return b}function $E(a){var b;b=ZE(a);b.b/=a.xb;b.a/=a.xb;return b}function KF(a,b){a.b.a.a=b/S;return a.b}\nfunction qG(a,b,c,d){var e,f;if(!b||rG(b)){if((e=0=e;++e)b=PG(h,d);e=uG(qD(gx(b.substr(0,3)),10)).a;g=uG(qD(gx(b.substr(3,3)),10)).a;PG(h,d);for(b=1;b<=e+g;++b){for(f=m;!(j=PG(h,d),null==j||J(j,"$MOL"));)f+=j+d;a.zb[++a.Sb]=new QG(a,f)}a.xb=1;WE(a,1,e,1,!1);WE(a,e+1,e+g,3,!1);d="readRXNFile"}else{(a.J||a.Vb)&&(a.dc=!1);a.ob=new QG(a,b);if(!a.ob||0==a.ob.p)return!a.ob&&(gt(a,"ERROR - problems in reading/processing MOL input"),\na.Ze(a.Ec.d)),!!a.ob;d=(a.dc||a.Fb)&&a.p||a.Mb;null!=a.t&&a.ob&&RG(a.ob,a.t,!0);null!=a.u&&a.ob&&RG(a.ob,a.u,!1);d||(a.Sb=0,a.xb=1);h=SG(a.ob);if(1>=h||a.J)a.zb[++a.Sb]=a.ob;else{a.Fb=!0;for(b=1;b<=h;++b)a.zb[++a.Sb]=new TG(a,a.ob,b)}d?a.o=a.Sb:a.o=1;a.ob=a.zb[a.o];a.J?WE(a,1,1,0,!0):WE(a,1,h,0,!d);d=mj}UG(a);null!=d&&(AG(a.r,pd),a.r&&fF(Pp(a.r,d),0,0,0),a.hc=!0);a.Ib=!0;c&&a.Ze(a.Ec.d);return!0}function gt(a,b){null==b&&(b=m);a.Gb=!0;a.X=b;a.cg("info: "+b)}\nfunction NF(a,b){var c;c=Math.round(b);100>c&&(!uE[c]&&(uE[c]=new cC(Fe,0,c)),!wE[c]&&fq(wE,c,pA(uE[c])),a.v=uE[c],a.w=wE[c])}function rG(a){var b;if(!a)return!1;b=a.pf();a=0!=(a.e&2);return b||a}function aG(a,b){return(a.mb+(a.Lb?1:0))*b}function EF(a,b){var c,d;d=-1;for(c=0;c=b)switch(a.Kb=!0,a.Hb=!0,gt(a,m),b){case 102:dF(a,!0);xG(a,102);wG(a,102);d=!0;break;case 110:a.Ib=!0;a.k=c;a.pb.a!=a.pb.b&&a.pb.a.b!=a.pb.b?a.q&&(++a.Sb,a.o=a.Sb,a.q=!1):gt(a,"No more undo");if(!(a.pb.a!=a.pb.b&&a.pb.a.b!=a.pb.b))break;VG(a,WG(a.pb));a.r&&fF(Pp(a.r,qk),0,0,0);a.hc=!0;a.hc=!1;a.Ib=!0;break;case 111:a.k=c;if(a.pb.a.c)a.q&&(++a.Sb,a.o=a.Sb,a.q=!1);else{gt(a,"No more redo");break}if(!a.pb.a.c)break;e=a.pb;\nif(!e.a.c)throw new px("Cannot redo. Index is out of range.");if(!e.a.c)throw new px(Je);e.a=e.a.c;VG(a,e.a.a);a.r&&fF(Pp(a.r,pj),0,0,0);a.hc=!0;a.hc=!1;a.Ib=!0;break;case 214:qG(a,null,a.R.a,a.R.b);a.k=c;break;case 151:case 152:case 154:case 153:e=null;a.k=c;switch(b){case 152:e=XG(a.jc);break;case 151:e=YG(a.jc);break;case 154:e=a.jc;e.a=e.c;e=XG(e);break;case 153:e=a.jc,e.a=-1,e=YG(e)}null==e?gt(a,"No more molecules in SDF buffer"):(gF(a),a.Vb=!0,ZG(a,e,!1),a.Vb=!1,J(a.X,m)&&(gt(a,"MOL n. "+(a.jc.a+\n1)+" of "+a.jc.c),d=!0,a.r&&fF(Pp(a.r,"SDFstack"),0,0,0),a.hc=!0,a.hc=!1));break;case 101:jq(4,new $G(a));a.k=c;break;case 107:jq(2,new aH(a));break;case 114:jq(3,new bH(a));a.k=c;break;case 103:a.Mb=!0;a.k=c;break;case 105:a.A&&a.Bb&&(a.Bb=!1,cH(a.ob),a.Ib=!0,a.r&&fF(Pp(a.r,og),0,0,0),d=a.hc=!0,a.k=c);a.I=1;break;case 109:a.k=c;e=dH(a.ob);if(2==e){gt(a,"Copying the agent not possible !");break}d=YE(a.ob);a.Ib=!0;a.ob=new BE(a.ob);d=Uu((a.M.b-a.mb)/2-d.a);for(e=1;e<=a.ob.p;++e)bF(a.ob.b[e],2*d/a.xb,\n0/a.xb);a.zb[++a.Sb]=a.ob;a.o=a.Sb;a.r&&fF(Pp(a.r,"reactionCopy"),0,0,0);d=a.hc=!0;xG(a,109);wG(a,109);break;case 104:d=CE(a);break;case 213:a.k=c;if(!a.S){var f,g,h,j,l;l=new qC;for(f=a.U,g=0,h=f.length;g=b&&(a.n=33+(b-1301)),0=a.k)a.cb=2,iH(a.ob),d=!0,RE(a,fg,a.o,0,a.ob.w);else if(202==a.k||203==a.k||204==a.k)if(0=g;++g){f=0;for(c=1;c<=a.Sb;++c)dH(a.zb[c])==g&&(h[g][++f]=c);h[g][0]=f}e+=va;e+=lH(h[1][0],3)+lH(h[3][0],3)+ba;for(c=1;c<=h[1][0];++c)e+=ta+mH(a.zb[h[1][c]],d,b);for(c=1;c<=h[3][0];++c)e+=ta+mH(a.zb[h[3][c]],d,b)}else{1f&&(f=e.b[b].r),e.b[b].qb;++b)fq(g.b,g.c++,null),fq(f.b,f.c++,null);for(b=1;b<=e.p;++b)j=e.b[b].b,null==j||0==j.length||(J(j,ag)?vm(c,new iB(b)):0==j.indexOf("mix")?(j=qD(hx(j,3),10),l=null,f.c>j&&(l=(TB(j,f.c),f.b[j])),null==l?h=new Bm:h=l,vm(h,new iB(b)),ZB(f,j,h)):0==j.indexOf(Si)&&(j=qD(hx(j,2),10),l=null,g.c>j&&(l=\n(TB(j,g.c),g.b[j])),null==l?h=new Bm:h=l,vm(h,new iB(b)),ZB(g,j,h)));d+=rH(Ye,c);if(0a.M.a-Q(L(R(a.mb*a.nb))))return!1;var b=a.Cc,f=a.Dc,g,h,j,l;l=0;if(0>b||0>f||f>a.ub||b>a.yb)b=0;else if(1==a.Sb)b=a.o;else{b=lG(a,b);f=lG(a,f);j=1.7976931348623157E308;for(h=1;h<=a.Sb;++h){g=a.zb[h];for(var n=void 0,o=void 0,r=void 0,o=1.7976931348623157E308,n=1;n<=g.p;++n)r=nG(b,f,g.b[n].q,g.b[n].r),r=a.k)a.cb=2,iH(a.ob),EE(a,eg,a.ob.v);else if(230==a.k)a.cb=3,EE(a,gg,a.ob.v);\nelse if(233<=a.k&&262>a.k)vH(a.ob,!1),EE(a,dg,a.ob.v),a.cb=3;else if(107==a.k){if(a.bc.b)return!0;hH(a.ob,a.ob.v,Oq(a.bc.e.Tc.a.pb,sk));a.ob.j=!0;EE(a,"addAtomQuery",a.ob.v)}else if(105==a.k)(c=wH(a.ob))?EE(a,"markAtom",a.ob.v):EE(a,"unMarkAtom",a.ob.v);else if(113!=a.k)if(300c.length&&(c=Kf),hH(a.ob,a.ob.v,c)),EE(a,Ij+a.n,a.ob.v)}else e=!1}else if(0<\na.ob.w)if(a.eb.c=a.o,104==a.k)CE(a);else if(106==a.k){c=a.ob;d=a.ob.w;if(0d&&(d=b);if(0==d)break;DE(c,d);c.a[d]=0}GE(a.ob);RE(a,"delBondGroup",a.o,0,a.ob.w);a.ob.w=0}else if(201==a.k)xH(a.ob,a.ob.w),RE(a,"setBondStereo",a.o,0,a.ob.w);else if(202==a.k||205==a.k)1==a.ob.c[a.ob.w].c&&0==a.ob.c[a.ob.w].f?(a.ob.c[a.ob.w].c=2,RE(a,Jj,a.o,0,a.ob.w)):(a.ob.c[a.ob.w].c=1,a.ob.c[a.ob.w].f=\n0,RE(a,Kj,a.o,0,a.ob.w)),a.ob.c[a.ob.w].f=0;else if(203==a.k)a.ob.c[a.ob.w].c=2,a.ob.c[a.ob.w].f=0,GE(a.ob),RE(a,Jj,a.o,0,a.ob.w);else if(204==a.k)a.ob.c[a.ob.w].c=3,a.ob.c[a.ob.w].f=0,GE(a.ob),RE(a,Lj,a.o,0,a.ob.w);else if(206<=a.k&&229>=a.k)a.cb=2,iH(a.ob),RE(a,fg,a.o,0,a.ob.w),GE(a.ob);else if(107==a.k){if(!a.bc.b)return!0;c=Oq(a.bc.e.Tc.a.pb,sk);a.ob.c[a.ob.w].c=9;a.ob.c[a.ob.w].d=c;RE(a,"setQueryBond",a.o,0,a.ob.w)}else 105==a.k?(c=a.ob,b=a.ob.w,c.k.gb=!0,c.k.sc?(c.i=-1,d=c.c[b].i,b=c.c[b].j,\nf=c.b[d].c,h=c.b[b].c,j=4,f==h&&0=a.k)return!1;++a.Sb;a.o=a.Sb;a.zb[a.Sb]=new eF(a);a.ob=a.zb[a.Sb];a.eb.c=a.o;202<=a.k&&204>=a.k||205==a.k?(yH(a.ob,null),a.ob.q=0,zH(a.ob,1,c/a.xb,d/a.xb),a.ob.v=1,a.ob.x=1,a.cb=1,b=a.ob,jH(b,b.v,0),205==a.k?(zH(a.ob,2,(c+21.65)/a.xb,(d-12.5)/a.xb),a.ob.e[0]=1,a.ob.e[1]=2,a.ob.r=1,RE(a,"addChain",a.o,0,a.ob.w)):RE(a,\ncg,a.o,0,a.ob.w)):206<=a.k&&229>=a.k?(a.ob.z=lG(a,c),a.ob.A=lG(a,d),a.cb=2,iH(a.ob),a.r&&fF(Pp(a.r,eg),0,0,0),a.hc=!0):300c.length&&(c=Kf),hH(a.ob,1,c)),EE(a,"addAtom",a.ob.v)):230==a.k?(JG(a,null,!0),a.r&&fF(Pp(a.r,gg),0,0,0),a.hc=!0):233<=a.k&&262>a.k?(yH(a.ob,null),a.ob.q=0,zH(a.ob,1,c/a.xb,d/a.xb),a.ob.v=1,vH(a.ob,!0),a.r&&fF(Pp(a.r,dg),0,0,0),a.hc=!0):bD()}else e=!1;e&&AH(a)}return a.Ab=\ne}\nfunction BH(a,b,c,d){var e,f,g,h;bD();if(!a.Db||CH(b))return!0;a.Gb=!1;c-=Q(L(R(aG(a,a.nb))));d-=Q(L(R(bG(a,a.nb))));f=lG(a,c-a.Cc);g=lG(a,d-a.Dc);e=lG(a,c);h=lG(a,d);if(2==a.cb||3==a.cb||9==a.cb)return!0;if(1==a.cb){f=!1;a.zb[a.eb.c].v=0;--a.ob.p;g=c;var b=d,j=a.Nb;0>g||0>b||b>a.ub||g>a.yb?kG(j):jG(a,g,b,j);++a.ob.p;if(0g&&(g=1);b/=g;j/=g;n=g/2/Math.tan(0.5235987755982988);o=e-f.b[l].q;r=h-f.b[l].r;l=-g/2+o*j+r*b;b=r*j-o*b;if(0>l)if(1f.b[2].r-f.b[1].r&&0h-f.b[1].r&&(f.b[2].r=f.b[1].r-g/2),0>f.b[2].q-f.b[1].q&&0e-f.b[1].q&&(f.b[2].q=f.b[1].q-0.866*g);else{if(2==f.b[f.e[0]].j&&(n=f.b[f.e[0]].p[1],n==f.e[1]&&(n=f.b[f.e[0]].p[2]),j=f.b[f.e[0]].q-f.b[n].q,b=f.b[f.e[0]].r-f.b[n].r,g=Math.sqrt(j*j+b*b),1>g&&(g=1),b/=g,j/=g,o=e-f.b[n].q,r=h-f.b[n].r,e=r*j-o*b,o=f.b[f.e[1]].q-f.b[n].q,r=f.b[f.e[1]].r-f.b[n].r,h=r*j-o*b,0h||0>e&&0=b?0-b:b)>e){++f.r;if(100g&&(g=1),zH(f,f.p,f.b[f.x].q+25*(j/g),f.b[f.x].r+25*(b/g))}a.B=!0}else if(113==a.k&&0c||0>d||d>a.ub||c>a.yb)&&5!=a.cb))e=$E(a),h=a.ob,j=YE(h),b=j.a,j=j.b,0>f&&be.b||0>g&&je.a||GH(h,f,g),a.cb=5;JE(a,!1);a.Ib=!0;gG(a);a.Cc=c;a.Dc=d;return!0}\nfunction vG(a,b,c,d){var e,f;if(!a.J||a.Vf().a||a.Wf().a||a.K)if(f=!1,e=FF(a,c,d),e!=a.Cb&&(f|=xG(a,a.Cb),f|=wG(a,e),a.Cb=e),!rG(b)){c-=Q(L(R(aG(a,a.nb))));d-=Q(L(R(bG(a,a.nb))));b=c;c=a.Nb;0>b||0>d||d>a.ub||b>a.yb?kG(c):jG(a,b,d,c);113==e&&0d.b[e].j&&(MH(d,null),b=d.e[d.r-1],d.c[d.q].i=e,d.c[d.q].j=b,NH(d.b[e],b),NH(d.b[e],b)),DE(d,d.p)),d.u=!1,a.hc=!0;else if(0!=a.eb.c&&a.o!=a.eb.c){DE(a.ob,a.ob.p);b=a.ob.x;c=a.eb.a+a.ob.p;e=a.zb[a.eb.c];d=new nH(a,y(OH,q,119,[null,a.ob,e]),2);d.b[0]=new PH;QH(d,b,c,1);b=C(OH,\nq,119,a.zb.length,0);for(f=0,c=0;fd.c[b].c?(++d.c[b].c,d.c[b].f=0):gt(d.k,"Maximum allowed bond order is 3 !")):6==d.b[e].j?(--d.q,SH(d,d.x),gt(d.k,"Not possible connection !")):(d.c[d.q].j=e,SH(d,d.x),b=d.x,NH(d.b[e],b),NH(d.b[b],e),TH(d.c[d.q],d.b)));cF(a.ob);a.B&&(d=a.pb,d.a!=d.b&&d.a.b!=d.b&&(e=d.a.c,WG(d),d.a.c=e),\nRE(a,cg,a.o,0,a.ob.w),a.B=!1);d=!0}else 5==a.cb&&(cF(a.ob),d=a.hc=!0);0=b&&0==c||b==c&&a.o==a.Zb)return-1;0>=b&&0Vb))for(;wc=pb[ed]*pb[ed];)0==wc%pb[ed]?eb=!1:++ed;if(eb){I[++Yb]=Ev(wc);if(Yb>=Vb)break;Yctc&&(tc=0),0>Y&&(Y=0),Fd=28*tc+Y));Qc=0;0!=G.b[T].n&&(-2>G.b[T].n?Qc=1:-2==G.b[T].n?Qc=2:-1==G.b[T].n?Qc=3:1==G.b[T].n?Qc=4:2==G.b[T].n?Qc=5:2Bb&&(Bb=10-Bb));Ec=126;db=ie;db+=126*G.b[T].i;Ec*=7;db+=Qc*Ec;Ec*=7;0!=Bb&&(db+=Bb*Ec);Ec*=7;db+=Fd*Ec;Ec*=783;db+=G.b[T].j*Ec;O[T]=Ev(db)}for(ga=0;!bI(G,Sa,O);){Da=!1;for(T=1;T<=G.p;++T)Sa[T]!=ob[T]&&(ob[T]=Sa[T],Da=!0);if(Da){for(T=1;T<=G.p;++T){O[T]=Hk;for(Aa=1;Aa<=G.b[T].j;++Aa)O[T]=Iv(O[T],I[Sa[G.b[T].p[Aa]]])}ga=\n0}else if(0G.c[T].j&&(Nb=G.c[T].i,G.c[T].i=G.c[T].j,G.c[T].j=Nb,1==G.c[T].f?G.c[T].f=3:2==G.c[T].f?G.c[T].f=4:3==G.c[T].f?G.c[T].f=1:4==G.c[T].f&&(G.c[T].f=2));for(T=1;To.a[v])&&P!=qa[v]){mc=!0;for(Ja=1;Ja<=za;++Ja)if(ca[Ja]==v&&Hb[Ja]==P||ca[Ja]==P&&Hb[Ja]==v){mc=!1;break}mc&&(++za,ca[za]=v,Hb[za]=P)}}else Z[++N]=P;if(0==N){if(Ab==o.p)break;v=da[tb--]}else if(1==N)qa[Z[1]]=v,v=Z[1],o.a[v]=++Ab;else{da[++tb]=v;s=0;for(aa=1;aa<=N;++aa)if($=RH(o,Z[aa],v),!Mb[$]){s=Z[aa];break}if(0==s)for(aa=1;aa<=N;++aa)if($=RH(o,Z[aa],v),2==o.d[$]||3==o.d[$]){s=\nZ[aa];break}0==s&&(s=Z[1]);qa[s]=v;v=s;o.a[s]=++Ab}}qa=OF(o.p+1);z=OF(o.p+1);Zc=[];cd=[];F=Ab=tb=0;for(aa=1;aa<=o.p;++aa)if(1==o.a[aa]){v=aa;break}b:for(;;){0Cb.b[Na].j||4Qa.b[Rc].j||3Gc[fb]&&(de=nc,nc=fb,fb=de);Xa=nc;0==nc&&(Xa=fb,Le=!0);for(kc=1;kc<=Qa.b[Rc].j;++kc)zd=Qa.b[Rc].p[kc],zd!=Qb[zc-1]&&(0==ke?ke=zd:le=zd);0Gc[le]&&(de=ke,ke=le,le=de);Ad=ke;0==ke&&(Ad=le,Td=!0);lf=0lf+je?-(lf+je):lf+je)||0!=vc||0!=ld?gt(Qa.k,"Bad stereoinfo on allene !"):(Hc=Qa.b[Qb[zc-1]].q-Qa.b[Rc].q,V=\nQa.b[Qb[zc-1]].r-Qa.b[Rc].r,oc=Math.sqrt(Hc*Hc+V*V),0.001>oc&&(oc=0.001),0<(Qa.b[Ad].r-Qa.b[Qb[zc-1]].r)*(Hc/oc)-(Qa.b[Ad].q-Qa.b[Qb[zc-1]].q)*(V/oc)?gd[Pb]=1:gd[Pb]=-1,Le&&(gd[Pb]*=-1),Td&&(gd[Pb]*=-1),Xa==nc&&0>lf&&(gd[Pb]*=-1),Xa==fb&&0>je&&(gd[Pb]*=-1),Gc[Xa]>Gc[Ad]&&(gd[Pb]*=-1))}}else c:{var qb=Cb,Ac=Na,Me=fd,Ne=void 0,lc=void 0,Jc=void 0,Bc=void 0,gb=void 0,$b=void 0,ee=void 0,we=void 0,Bd=void 0,Sc=void 0,Ba=void 0,hb=void 0,Hd=void 0,Cd=void 0,Kc=void 0,Za=void 0,me=void 0,hb=OF(4),Cd=OF(4),\nFf=qb,md=Ac,Xf=kb,Yf=Ld,Gf=ic,Oe=ce,rg=Ta,Fb=hb,hd=void 0,Id=void 0,mf=void 0,sg=void 0,Og=void 0,Hf=void 0,Hf=-1;0gb;++gb)0>=hb[gb]||(Ne=RH(qb,Ac,hb[gb]),Cd[gb]=fI(qb,Ne,Ac),0Cd[gb]?(++ee,Bc=hb[gb],$b=hb[gb]):we=hb[gb]);Bd=Sc+ee;Za=OF(4);Kc=0;if(3==qb.b[Ac].j){if(1==Sc&&1==ee||3==Bd&&0gb;++gb)Ne=RH(qb,Ac,Ba[gb]),lc[gb]=fI(qb,Ne,Ac);if(4==Bd){if(0==Sc||0==ee){gt(qb.k,"Error in C4 stereospecification !");break c}if(1==Sc||1==ee)Za[0]=Ba[0],Za[1]=Ba[3],Za[2]=Ba[2],Za[3]=Ba[1],Kc=lc[0];else{for(gb=0;4>gb;++gb)-1==lc[gb]&&(lc[gb]=0);Bd=2}}else if(3==Bd)if(3==Sc||3==ee)Za[0]=Ba[0],Za[1]=Ba[3],Za[2]=Ba[2],Za[3]=Ba[1],0gb;++gb)lc[gb]==Jc&&(lc[gb]=0);Bd=2}if(2==Bd)if(1==Sc&&1==ee)Ba[1]==Bc?(Ba[1]=Ba[2],Ba[2]=Ba[3]):Ba[2]==Bc&&(Ba[2]=Ba[3]),Za[0]=me,Za[1]=Bc,Za[2]=Ba[2],Za[3]=Ba[1],Kc=1;else{if(lc[0]==lc[1]||lc[1]==lc[2]){gt(qb.k,"Error in C4 stereospecification ! 2/0r");break c}0!=lc[0]?(Za[0]=Ba[0],Za[1]=Ba[2],Za[2]=Ba[1],Za[3]=Ba[3]):(Za[0]=Ba[1],Za[1]=Ba[3],Za[2]=Ba[2],Za[3]=Ba[0]);1=Jf&&(Md=!0,ya=(kE(),rE)[Jf]);Md&&(0!=Ud?ya=Mf+Ud+ya:ya=Mf+ya,1==Jh[nf]?ya+=jd:-1==Jh[nf]&&(ya+="@@"),1==$f?ya+=Ee:1<$f&&(ya+=Ee+$f),0!=nd&&(0nd?-nd:nd)&&(ya+=0>nd?-nd:nd)),ne&&(ya+=Nc+\nib),ya+=Tf);sp(Jb.a,ya);for(K=1;K<=za;++K)if(ca[K]==v||Hb[K]==v)E=Hb[K],E==v&&(E=ca[K]),M[v]",!0);j=-1c;++c)(d=b.d[c])?a.zb[c]=new BE(d):a.zb[c]=null;0b||b>a.Sb?(gt(a,"ERROR - invalid mol index: "+b),a.Ze(a.Ec.d),null):a.zb[b]}function UG(a){var b,c,d;b=SE(a);for(d=1;d<=a.Sb;++d)c=a.zb[d],c.o=b}function oI(a,b){b!=a.nb&&(a.nb=b,a.fg(),a.Ze(a.Ec.d))}function pI(a,b){var c,d,e;if(b!=a.xb){c=$E(a);a.xb=b;d=$E(a);e=Q(L(R((d.b-d.c)/2-(c.b-c.c)/2)));d=Q(L(R((d.a-d.d)/2-(c.a-c.d)/2)));for(c=1;c<=a.Sb;++c)GH(a.zb[c],e,d),cF(a.zb[c]);a.Ib=!0;a.Ze(a.Ec.d)}}\nfunction VE(a,b){var c;c=-1;J(b,"Select substituent")?(c=202,b=m):J(b,lb)?c=235:J(b,mb)?c=240:J(b,jb)?c=260:J(b,wb)?c=261:J(b,Db)?c=241:J(b,vb)?c=233:J(b,rb)?c=236:J(b,nb)?c=237:J(b,zb)?c=234:J(b,yb)?c=243:J(b,Eb)?c=252:J(b,xb)?c=244:J(b,Gb)?c=239:J(b,"-PO3H2")?c=251:J(b,cb)?c=242:J(b,ab)?c=245:J(b,bb)&&(c=238);0=a.mb-1)for(g=f.b.b;j>=a.mb-1&&1=a.k&&(a.k=213);for(c=1;14>=c;++c)kF(a,b,c,1),kF(a,b,c,2);a.k=d;$F(a.wc.a,0,0,a)}var f;if(a.Hb){b=KF(a.fb,a.nb);d=a.mb+(a.Lb?1:0);c=(a.M.a-Q(L(R(bG(a,a.nb)))))/a.nb;f=c-a.mb;lF(b,mE);uF(b.a,Q(L(R(0*(vF(),S)))),Q(L(R(0*S))),Q(L(R(d*S))),Q(L(R(c*S))));a.Lb?(lF(b,(sB(),xB)),e=GF*(a.mb+(a.Lb?1:0))+\n3,f>e&&(wF(b,0,e,a.mb-1,e),xF(b.a,Q(L(R(0*S))),Q(L(R(e*S))),Q(L(R(0*S))),Q(L(R((c-1)*S)))),wF(b,a.mb-1,e,a.mb-1,f),wF(b,a.mb-1,f,d,f))):(lF(b,nE),xF(b.a,Q(L(R(0*S))),Q(L(R(0*S))),Q(L(R(0*S))),Q(L(R((c-1)*S)))),wF(b,0,GF*a.mb,c-1,GF*a.mb),lF(b,JB(mE)),xF(b.a,Q(L(R((d-1)*S))),Q(L(R(0*S))),Q(L(R((d-1)*S))),Q(L(R((f+1)*S)))));xF(b.a,Q(L(R(0*S))),Q(L(R((c-1)*S))),Q(L(R(d*S))),Q(L(R((c-1)*S))));for(c=3;c<=GF+2;++c)kF(a,b,1,c);$F(a.fb.a,0,Q(L(R(bG(a,a.nb)))),a)}a.Jb&&(d=KF(a.fc,a.nb),c=a.Lb?1:3,b=(a.M.a-\nQ(L(R(bG(a,a.nb))))-Q(L(R(a.mb*a.nb))))/a.nb,a.Lb?(lF(d,(sB(),xB)),uF(d.a,Q(L(R(0*(vF(),S)))),Q(L(R(0*S))),Q(L(R(c*S))),Q(L(R(b*S))))):(lF(d,JB(mE)),xF(d.a,Q(L(R((c-1)*(vF(),S)))),Q(L(R(0*S))),Q(L(R((c-1)*S))),Q(L(R(b*S)))),lF(d,mE),xF(d.a,Q(L(R((c-2)*S))),Q(L(R(0*S))),Q(L(R((c-2)*S))),Q(L(R(b*S)))),lF(d,nE),xF(d.a,Q(L(R((c-3)*S))),Q(L(R(0*S))),Q(L(R((c-3)*S))),Q(L(R(b*S))))),$F(a.fc.a,a.M.b-Q(L(R((a.Lb?1:3)*a.nb))),Q(L(R(bG(a,a.nb)))),a))}}\nfunction nt(a,b){a.A?0==b&&(a.I=-1,gt(a,Mg),gG(a)):(a.gb?a.I=b:-1a.I?a.I=10*a.I+b:a.I=b,a.gb=!1,0==a.I?(a.I=-1,gt(a,Mg)):gt(a,a.I+ea),gG(a))}function oG(a,b){var c,d;d=b.b;c=b.a;a.J||(d-=Q(L(R(aG(a,a.nb))))+Q(L(R((a.Lb?1:3)*a.nb))),c-=Q(L(R(bG(a,a.nb))))+Q(L(R(a.mb*a.nb))));1>d&&(d=1);1>c&&(c=1);a.yb=Uu(d);a.ub=Uu(c)}function yE(a){kE();return 14<=a&&20>=a?1:21<=a&&28>=a?2:29<=a&&31>=a?3:0}w(553,451,Wl);_.vf=function(a){IE(this,a)};_.Uf=sI;_.Vf=function(){return OE(),null!=this.Pb?PE:QE};\n_.Wf=function(){return OE(),OE(),QE};_.Xf=LA;_.Yf=function(a,b,c){return YA(this,b,c)};_.Zf=LA;_.$f=function(){bD()};_._f=WB;_.ag=tI;_.bg=WB;_.cg=function(){bD()};_.dg=function(){return it(this,!0,!1)};\n_.wf=function(a){var b,c;if(this.s)if(c=a.c,b=a.f,a=a.i,c=(100+2*c)/100,this.J||!(bthis.M.a-Q(L(R(this.mb*this.nb)))||b>this.M.b-Q(L(R((this.Lb?1:3)*this.nb))))){if(b=this.xb*c,b>this.xb&&10>=b||b=b&&oI(this,b)};_.Ze=function(){rI(this)};\n_.eg=function(a){this.Tb&&(null!=a&&0j&&(j=0);h=new XI(g,h,j,M);YI(h);vm(g.k,h);YD(f,M.pb);XD(f,g.pb)}else TD("JSME initialization error: HTML id "+a+" not found.")}function ZI(){return av(null)}\nfunction $I(a){return av(a)}w(557,1,Cl,PI,RI,SI,QI);_.hg=function(a){mx(this.d,new aJ(this,a),(Gs(),Gs(),Hs))};_.ig=function(a){mx(this.d,new bJ(this,a),(pt(),pt(),qt))};_.jg=function(a){mx(this.d,new cJ(this,a),(vt(),vt(),wt))};_.kg=function(a){mx(this.d,new dJ(this,a),(yt(),yt(),zt))};_.lg=function(a){jq(2,new eJ(this.b,a))};_.mg=function(){dF(this.b,!0)};_.ng=function(){Aq((xq(),yq),new fJ(this))};_.og=function(){var a,b,c;c=[];for(b=new uu(this.d.a);b.ba&&(b.x=a,NF(b,a),fG(b))};_.Xg=function(a,b){var c=this.b,d;d=nI(c,a);1>b||b>d.p?(gt(c,"ERROR - invalid atom index: "+b),gG(c)):(d.v=b,AH(c))};_.Yg=function(a){zI(this.b,Nd,a)};_.Zg=function(a,b){zI(this.b,a,b)};_.he=function(a){ax(this.d,a);OI(this)};_.$g=function(a){this.b.V=a};_._g=function(a){oI(this.b,a)};_.ah=function(a){var b=this.b;b.tb=a;fG(b)};_.bh=function(a){var b=this.b;b.wb=a;fG(b)};_.ch=function(a){pI(this.b,a)};\n_.dh=function(a){this.b.Pb=a};_.eh=function(a){this.b.Qb=a};_.fh=function(a){var b=this.b;b.Wb=a;b.F=hF(b,!1)};_.gh=function(a){this.b.Yb=a};_.hh=function(a,b){bx(this.d,a,b);OI(this)};_.ih=function(a,b,c){c&&bx(this.c,a,b);bx(this.d,a,b);OI(this)};_.jh=function(a,b){cx(this.d,a,b);OI(this)};_.kh=function(a,b,c){c&&cx(this.c,a,b);cx(this.d,a,b);OI(this)};_.lh=function(a){VE(this.b,a)};_.mh=function(a,b){var c=this.b,d;c.q=!1;d=c.sc;c.sc=!1;c.uc=new kI(c,a);c.sc=d;c.k=253;gt(c,b);gG(c)};\n_.ie=function(a){ix(this.c.pb,a)};_.nh=function(a){this.b.i=a};_.je=function(a){this.d.pb.style[zk]=a;OI(this)};_.oh=function(a){FH(this.b,a)};_.ph=function(){return zE(this.b)};_.a=-1;_.b=null;_.c=null;_.d=null;var TI=0;function fJ(a){this.a=a}w(558,1,{},fJ);_.pd=function(){var a,b;for(b=new uu(this.a.d.a);b.b=a.c.length)return!1;c=a.c[a.b];g=Vq(c,zk);b=Vq(c,Hh);f=Vq(c,Ci);e=Vq(c,Lh);var h,j,l;l={};for(d=0;d=d&&b=a;return c?65536+((d&1023)<<10)+(e&1023):d}function HJ(a,b){return 2>b||36b?b:10)?a-48:97<=a&&aa?-a:a):a}\nfunction KJ(a,b){var c;c=new IJ;c.d=he+(LJ(0!=a?-a:0)?JJ(0!=a?-a:0):m+Gp(c));MJ(0!=a?-a:0)&&NJ(0!=a?-a:0,c);c.b=4;c.a=b;return c}function U(a){var b;b=new IJ;b.d=he+(LJ(a)?JJ(a):m+Gp(b));MJ(a)&&NJ(a,b);return b}function OJ(a,b){var c;c=new IJ;c.d=he+(LJ(a)?JJ(a):m+Gp(c));MJ(a)&&NJ(a,c);c.b=b?8:0;return c}function PJ(){var a;a=new IJ;a.d=he+(LJ(0)?JJ(0):m+Gp(a));MJ(0)&&NJ(0,a);a.b=2;return a}function QJ(a){var b;b=new IJ;b.d=he+(LJ(a)?JJ(a):m+Gp(b));MJ(a)&&NJ(a,b);b.b=1;return b}\nfunction MJ(a){return typeof a==Ji&&0b||36c||2147483647a)return 0;if(0==a)return 32;b=-(a>>16)>>16&16;c=16-b;a>>=b;b=a-256>>16&8;c+=b;a<<=b;b=a-4096>>16&4;c+=b;a<<=b;b=a-16384>>16&2;c+=b;a=a<>14;return c+2-(a&~(a>>1))}function nv(a){var b,c;if(0==a)return 32;c=0;for(b=1;0==(b&a);b<<=1)++c;return c}function Zl(a){var b,c,d;b=C(XJ,xl,-1,8,1);c=(YJ(),ZJ);d=7;if(0<=a)for(;15>=4;else for(;0>=4;b[d]=c[a&15];return $J(b,d,8)}\nfunction uG(a){var b,c;return-129a?(b=a+128,c=(aK(),bK)[b],!c&&(c=bK[b]=new iB(a)),c):new iB(a)}w(594,591,{88:1,93:1,99:1,101:1},iB);_.eQ=function(a){return H(a,99)&&a.a==this.a};_.hC=Sv;_.tS=WJ;_.a=0;function aK(){aK=x;bK=C(IH,q,99,256,0)}var bK;function VF(a){return 0>=a?0-a:a}function WF(a){return 0>a?-a:a}function Pm(a,b){return a>b?a:b}function R(a){return Math.round(a)}function cK(a){return Math.sqrt(a)}function aD(){}function ju(a){this.f=a}\nw(598,136,{88:1,96:1,100:1,104:1,105:1},aD,ju);function YJ(){YJ=x;ZJ=y(XJ,xl,-1,[48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122])}var ZJ;function TJ(a){this.f=a}w(600,593,{88:1,96:1,98:1,102:1,104:1,105:1},TJ);function GJ(a,b){return a.charCodeAt(b)}function dK(a,b){return-1!=a.lastIndexOf(b)&&a.lastIndexOf(b)==a.length-b.length}function J(a,b){return!H(b,1)?!1:""+a==b}function ex(a,b){return a.indexOf(b)}\nfunction oD(a,b,c){return a.indexOf(b,c)}function nA(a,b){return a.lastIndexOf(b)}function LI(a,b,c){var d;for(d=0;0<=(d=c.indexOf(Of,d));)36==c.charCodeAt(d+1)?c=c.substr(0,d-0)+ra+hx(c,++d):c=c.substr(0,d-0)+hx(c,++d);return a.replace(RegExp(b,wh),c)}\nfunction eK(a,b){for(var c=RegExp(b,wh),d=[],e=0,f=a,g=null;;){var h=c.exec(f);if(null==h||f==m){d[e]=f;break}else d[e]=f.substring(0,h.index),f=f.substring(h.index+h[0].length,f.length),c.lastIndex=0,g==f&&(d[e]=f.substring(0,1),f=f.substring(1)),g=f,e++}if(0ea&&a[a.length-1]>ea?a:a.replace(/^(\\s*)/,m).replace(/\\s*$/,m)}function $J(a,b,c){a=a.slice(b,c);return String.fromCharCode.apply(null,a)}\nfunction fK(a,b,c){if(128>c)return a[b]=(c&127)<<24>>24,1;if(2048>c)return a[b++]=(c>>6&31|192)<<24>>24,a[b]=(c&63|128)<<24>>24,2;if(65536>c)return a[b++]=(c>>12&15|224)<<24>>24,a[b++]=(c>>6&63|128)<<24>>24,a[b]=(c&63|128)<<24>>24,3;if(2097152>c)return a[b++]=(c>>18&7|240)<<24>>24,a[b++]=(c>>12&63|128)<<24>>24,a[b++]=(c>>6&63|128)<<24>>24,a[b]=(c&63|128)<<24>>24,4;if(67108864>c)return a[b++]=(c>>24&3|248)<<24>>24,a[b++]=(c>>18&63|128)<<24>>24,a[b++]=(c>>12&63|128)<<24>>24,a[b++]=(c>>6&63|128)<<24>>\n24,a[b]=(c&63|128)<<24>>24,5;throw new Km("Character out of range: "+c);}function fx(a){var b;return 65536<=a?(b=56320+(a-65536&1023)&65535,String.fromCharCode(55296+(a-65536>>10&1023)&65535)+String.fromCharCode(b)):String.fromCharCode(a&65535)}function gK(a){var b,c,d,e,f;e=a.length;for(d=b=0;dc?++b:2048>c?b+=2:65536>c?b+=3:2097152>c?b+=4:67108864>c&&(b+=5);b=C(hK,Il,-1,b,1);for(d=f=0;da||a>=b)&&zK(a,b)}function zK(a,b){throw new EJ("Index: "+a+", Size: "+b);}w(616,609,pl);\n_.wh=function(){throw new vD("Add not supported on this list");};_.qh=function(a){this.wh(this.Pf(),a);return!0};_.eQ=function(a){return yK(this,a)};_.hC=function(){var a,b,c;b=1;for(a=this.ue();a.Vd();)c=a.Wd(),b=31*b+(null==c?0:Fp(c)),b=~~b;return b};_.ue=function(){return new uu(this)};_.yh=function(){return this.zh(0)};_.zh=function(a){return new AK(this,a)};_.Ah=function(){throw new vD("Remove not supported on this list");};function xK(a){return a.b=a.d.Pf())throw new Ix;return a.d.xh(a.c=a.b++)}function uK(a){if(0>a.c)throw new gA;a.d.Ah(a.c);a.b=a.c;a.c=-1}function uu(a){this.d=a}w(617,1,{},uu);_.Vd=function(){return xK(this)};_.Wd=function(){return vu(this)};_.Xd=function(){uK(this)};_.b=0;_.c=-1;_.d=null;function AK(a,b){var c;this.d=this.a=a;c=a.Pf();(0>b||b>c)&&zK(b,c);this.b=b}w(618,617,{},AK);_.Bh=function(){return 0=this.b)throw new Ix;return this.a.xh(this.c=--this.b)};_.a=null;\nfunction BK(a){a=new rK(a.b.a);return new CK(a)}function DK(a,b){this.a=a;this.b=b}w(619,611,Dl,DK);_.rh=EK;_.ue=function(){return BK(this)};_.Pf=function(){return this.b.a.d};_.a=null;_.b=null;function CK(a){this.a=a}w(620,1,{},CK);_.Vd=function(){return xK(this.a.a)};_.Wd=function(){return(this.a.b=vu(this.a.a)).th()};_.Xd=function(){tK(this.a)};_.a=null;function FK(a){a.b=C(GK,q,0,0,0)}function pC(a,b,c){(0>b||b>a.c)&&zK(b,a.c);a.b.splice(b,0,c);++a.c}\nfunction vm(a,b){fq(a.b,a.c++,b);return!0}function ww(a,b){TB(b,a.c);return a.b[b]}function oz(a,b){for(var c=0;ca.c&&fq(b,a.c,null);return b}\nfunction Bm(){FK(this)}function YB(a){FK(this);this.b.length=a}function mB(a){FK(this);a=Mu(a.b,a.c);Array.prototype.splice.apply(this.b,[0,0].concat(a));this.c=this.b.length}w(624,616,Ul,Bm,YB,mB);_.wh=function(a,b){pC(this,a,b)};_.qh=function(a){return vm(this,a)};_.mg=function(){this.b=C(GK,q,0,0,0);this.c=0};_.rh=function(a){return-1!=oz(this,a)};_.xh=function(a){return ww(this,a)};_.Mf=function(){return 0==this.c};_.Ah=function(a){return HK(this,a)};_.sh=function(a){return om(this,a)};_.Pf=Ms;\n_.c=0;function Du(){Du=x;Eu=new IK}var Eu;function IK(){}w(627,616,ol,IK);_.rh=tI;_.xh=function(){throw new Fx;};_.Pf=function(){return 0};function JK(){this.a=new Date}function KK(a){return 10>a?bc+a:m+a}w(630,1,{88:1,92:1,93:1,106:1},JK);_.eQ=function(a){return H(a,106)&&Bv(L(this.a.getTime()),L(a.a.getTime()))};\n_.hC=function(){var a;a=L(this.a.getTime());var b,c,d,e;c=32;d=a.h&1048575;22>c?(e=d>>>c,b=a.m>>c|d<<22-c,c=a.l>>c|a.m<<22-c):44>c?(e=0,b=d>>>c-22,c=a.m>>c-22|a.h<<44-c):(b=e=0,c=d>>>c-44);b=ev(c&4194303,b&4194303,e&1048575);a=ev(a.l^b.l,a.m^b.m,a.h^b.h);return Q(a)};\n_.tS=function(){var a,b;b=-this.a.getTimezoneOffset();a=(0<=b?Oa:m)+~~(b/60);b=10>(0>b?-b:b)%60?bc+(0>b?-b:b)%60:m+(0>b?-b:b)%60;return(LK(),MK)[this.a.getDay()]+ea+NK[this.a.getMonth()]+ea+KK(this.a.getDate())+ea+KK(this.a.getHours())+Nc+KK(this.a.getMinutes())+Nc+KK(this.a.getSeconds())+" GMT"+a+b+ea+this.a.getFullYear()};_.a=null;function LK(){LK=x;MK=y(Yu,q,1,"Sun,Mon,Tue,Wed,Thu,Fri,Sat".split(","));NK=y(Yu,q,1,"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(","))}var MK,NK;\nfunction su(a,b){return null==D(a.a,b,a)}function ru(){this.a=new pp}w(632,611,{88:1,92:1,111:1},ru);_.qh=function(a){return su(this,a)};_.rh=EK;_.Mf=function(){return 0==this.a.d};_.ue=function(){return BK(new DK(this.a,new AD(this.a)))};_.sh=function(a){return null!=Cu(this.a,a)};_.Pf=sK;_.tS=function(){return pK(new DK(this.a,new AD(this.a)))};_.a=null;function sD(a,b){this.a=a;this.b=b}w(636,614,Ll,sD);_.th=Sv;_.uh=sy;_.vh=function(a){var b;b=this.b;this.b=a;return b};_.a=null;_.b=null;\nfunction Ix(){}w(637,136,{88:1,96:1,104:1,105:1,110:1},Ix);function OK(a){var b,c;b=a.b;c=a.d.length;if(ba.j&&(++a.j,a.p[a.j]=b)}function WK(a){var b;b=new PH;b.f=a.f;b.d=a.d;b.q=a.q;b.r=a.r;b.s=a.s;b.n=a.n;b.e=a.e;b.p=a.p.slice();b.j=a.j;b.c=a.c;b.a=a.a;b.b=a.b;b.i=a.i;b.o=a.o;b.k=a.k;return b}function pH(a){return-99199!=a.f?a.f:0}function XK(a){return 4<=a.o&&2==a.j}\nfunction bF(a,b,c){a.q+=b;a.r+=c}function TE(a){var b;b=-99199!=a.f;a.f=-99199;return b}function PH(){UK();this.p=OF(7)}w(657,1,{114:1},PH);_.a=3;_.b=null;_.c=0;_.d=0;_.e=null;_.f=-99199;_.i=0;_.j=0;_.k=0;_.n=0;_.o=0;_.q=0;_.r=0;_.s=0;var VK;function aI(a,b){var c;c=YK(a);return 0\\\\.]+$",2);iL=new TK("\\\\s+",2)}\nfunction zG(a){fL();var b,c,d,e;this.i=this.f=null;this.j=0;this.e=!1;this.a=this.c=null;var f,g,h;if(null==a||0==a.length)c=0;else{g=1;f=a.length;for(h=0;h=this.j?this.b=gx(a):this.b=a;c=new RK(iL,this.b);this.d=c.b.a.test(c.a);do if(4a.indexOf("j")&&((this.e=0=f.length)e=0;else{for(h=0,j=f.length;hn&&(n=0.001);r=g/n;e=f/n;l=OF(4);for(h=0;4>h;++h)d[h]==c||0>=d[h]||(0==l[1]?l[1]=d[h]:0==l[2]?l[2]=d[h]:0==l[3]&&(l[3]=d[h]));o=OF(4);d=OF(4);for(h=1;3>=h;++h)3==h&&0==l[3]||(f=(a.b[l[h]].q-a.b[b].q)*e+(a.b[l[h]].r-a.b[b].r)*r,g=(a.b[l[h]].r-a.b[b].r)*e-(a.b[l[h]].q-a.b[b].q)*r,n=Math.sqrt(f*f+g*g),0.001>n&&(n=0.001),o[h]=g/n,d[h]=f/n);a=ML(o[1],d[1],o[2],d[2]);0b?(j[1]=l[1],j[2]=l[3],j[3]=l[2]):0>a&&0d?(j[1]=l[2],j[2]=l[3],j[3]=l[1]):0>d&&0b&&0>a&&(j[1]=l[3],j[2]=l[2],j[3]=l[1])):0j&&(j=0.001);g/=j;f/=j;l=j+25*Math.cos(1.0471975511965976);n=25*Math.sin(1.0471975511965976);h=RH(a,b,d);if(3==a.c[h].c||204==a.k.k||1!=a.c[h].c&&(203==a.k.k||204==a.k.k)||a.n)l=j+25,n=0;0n?n=-n:0>c&&0j&&(j=0.001),zH(a,a.p,a.b[b].q+25*f/j,a.b[b].r+25*g/j),0==EH(a,a.p,1,a.p)||h==a.b[b].j);++h);break;default:return--a.p,gt(a.k,"Are you trying to draw an hedgehog ?"),a.k.cb=9,!1}b=QH(a,a.v,a.p,1);203==a.k.k&&(b.c=2);204==a.k.k&&\n(b.c=3);201==a.k.k&&xH(a,a.q);a.z=a.b[a.p].q;a.A=a.b[a.p].r;return e}function rH(a,b){var c,d;if(!b||0==b.c)return m;d=m;d+="M V30 BEGIN COLLECTION"+(kE(),ba);d+=Xe+a+" [ATOMS=("+b.c;for(c=new uu(b);c.bj&&(j=0.001);1>VF((a.b[b].r-a.b[e].r)*(g/j)+(a.b[b].q-a.b[e].q)*(h/j))?(g=a.b[b].q-a.b[e].q,h=a.b[b].r-a.b[e].r,j=Math.sqrt(g*g+h*h),0.001>j&&(j=0.001),b=h/j,g/=j,d[0]=a.b[e].q+j*g-c*b,d[1]=a.b[e].r+c*g+j*b):(g=(a.b[e].q+a.b[f].q)/2,e=(a.b[e].r+a.b[f].r)/2,g=a.b[b].q-g,h=a.b[b].r-e,j=Math.sqrt(g*g+h*h),0.001>j&&(j=0.001),d[0]=a.b[b].q+c*g/j,d[1]=a.b[b].r+c*h/j)}\nfunction iH(a){var b,c,d,e,f,g,h,j,l,n,o,r,t,z;n=-1;j=6;switch(a.k.k){case 206:j=3;break;case 207:j=4;break;case 208:case 221:case 223:j=5;break;case 210:case 209:j=6;break;case 211:j=7;break;case 212:j=8;break;case 229:j=9}f=6.283185307179586/j;l=cK(312.5/(1-Math.cos(f)));if(0a.b[a.v].j)TL(a,j,f,l);else if(!a.k.Bb&&!a.k.rc)n=a.v,jH(a,a.v,0),a.v=a.p,TL(a,j,f,l);else{a.k.rc=!1;if(209==a.k.k||221==a.k.k||223==a.k.k){gt(a.k,"ERROR - cannot add aromatic spiro ring !");a.k.cb=9;return}for(d=\n1;d<=a.b[a.v].j;++d)if(b=a.c[RH(a,a.v,a.b[a.v].p[d])].c,2o&&(o=0.001);g/=o;e/=o;for(d=1;d<=j;++d)h=yH(a,null),r=f*d+1.5707963267948966,DH(h,b[0]+l*(Math.sin(r)*e-Math.cos(r)*g),b[1]+l*(Math.cos(r)*e+Math.sin(r)*g))}else if(0o&&(o=0.001);g/=o;e/=o;h=o/2;r=l*Math.sin(0.5*(3.141592653589793-f));o=1;0<(a.b[d].r-a.b[b].r)*e-(a.b[d].q-a.b[b].q)*g&&(r=-r,o=0);t=a.b[b].q+h*e-r*g;z=a.b[b].r+r*e+h*g;for(d=1;d<=j;++d)h=yH(a,null),r=f*(d+0.5)+3.141592653589793*o,DH(h,t+l*(Math.sin(r)*e-Math.cos(r)*g),z+l*(Math.cos(r)*e+Math.sin(r)*g)),1==o?(d==j&&DH(h,a.b[b].q,a.b[b].r),\nd==j-1&&DH(h,a.b[c].q,a.b[c].r)):(d==j-1&&DH(h,a.b[b].q,a.b[b].r),d==j&&DH(h,a.b[c].q,a.b[c].r))}else{b=0.5;6==j&&(b=0);for(d=1;d<=j;++d)h=yH(a,null),r=f*(d-b),DH(h,a.z+l*Math.sin(r),a.A+l*Math.cos(r))}b=j;l=0;for(f=1;f<=b;++f)MH(a,null),l=a.p-b+f,a.b[l].j=2,a.c[a.q].i=l,a.c[a.q].j=l+1;a.c[a.q].j=a.p-b+1;if(209==a.k.k){if(a.c[a.q-4].c=2,a.c[a.q-2].c=2,a.c[a.q].c=2,0e&&ed;--f)if(0g&&(g=0.001),e/=g,f/=g);l=a.b[a.v].q+d*f;n=a.b[a.v].r+d*e;for(g=1;g<=b;++g)h=yH(a,null),j=c*g-1.5707963267948966,DH(h,l+d*(Math.sin(j)*f-Math.cos(j)*e),n+d*(Math.cos(j)*f+Math.sin(j)*e))}function SL(a,b){var c,d;0==b&&(b=a.p);for(c=a.p;c>a.p-b;--c)d=EH(a,c,1,a.p),0!=d&&bF(a.b[c],6,6)}\nfunction RH(a,b,c){var d,e,f;for(e=1;e<=a.q;++e)if(d=a.c[e],f=d.i,d=d.j,f==b&&d==c||f==c&&d==b)return e;return 0}function sG(a){var b;for(b=1;b<=a.q;++b)if(1==a.c[b].c&&0=c||0>=d?a.s=!0:(b=YE(a),c=c/2-b.a,b=d/2-b.b,a.k.Ob||GH(a,c,b),cF(a))}\nfunction eH(a,b,c){var d,e,f;if(1==c)return a.b[b].n+=1,!0;if(-1==c)return a.b[b].n+=-1,!0;e=a.b[b].n;f=a.b[b].i;d=a.b[b].o;-1==d&&0==c&&(0==a.b[b].n?a.b[b].n=1:1==a.b[b].n?a.b[b].n=-1:-1==a.b[b].n&&(a.b[b].n=0));switch(a.b[b].a){case 1:0==d&&(0==a.b[b].n?a.b[b].n=1:1==a.b[b].n?a.b[b].n=-1:a.b[b].n=0);break;case 2:2d&&(0==\na.b[b].n?a.b[b].n=-1:-1==a.b[b].n?a.b[b].n=1:1==a.b[b].n&&(a.b[b].n=0));break;case 4:case 7:3d&&0==a.b[b].n?a.b[b].n=1:3>d&&1==a.b[b].n?a.b[b].n=-1:3>d&&-1==a.b[b].n&&(a.b[b].n=0);break;case 5:case 8:case 13:2d&&0==a.b[b].n?a.b[b].n=-1:\n2>d&&-1==a.b[b].n?a.b[b].n=1:2>d&&1==a.b[b].n&&(a.b[b].n=0);break;case 9:case 10:case 11:case 12:0==d&&0==a.b[b].n?a.b[b].n=-1:0==d&&-1==a.b[b].n?a.b[b].n=0:gt(a.k,"Charge change not possible on the halogen !");break;case 32:gt(a.k,"Use X button to change charge on the X atom !")}if(0e&&eb?e=2:0>a&&0>b?e=3:0>a&&0<=b&&(e=4);0<=c&&0<=d?f=1:0<=c&&0>d?f=2:0>c&&0>d?f=3:0>c&&0<=d&&(f=4);if(ef)return-1;switch(e){case 1:case 4:return ac?1:-1}return 0}function cI(a){UL(a);cF(a);dI(a)}\nfunction YE(a){var b,c,d,e,f,g;b=new dL;f=9999;d=-9999;g=9999;e=-9999;for(c=1;c<=a.p;++c)a.b[c].qd&&(d=a.b[c].q),a.b[c].re&&(e=a.b[c].r);b.a=f+(d-f)/2;b.b=g+(e-g)/2;b.c=d-f;b.d=e-g;25>b.c&&(b.c=25);25>b.d&&(b.d=25);return b}function RL(a,b,c){var d,e;e=0;for(d=1;d<=a.p;++d)d>=b&&d<=c||0!=EH(a,d,b,c)&&++e;return e}function QH(a,b,c,d){var e;e=MH(a,null);NH(a.b[b],c);NH(a.b[c],b);e.i=b;e.j=c;TH(e,a.b);e.c=d;return e}\nfunction yH(a,b){++a.p;b?a.b[a.p]=WK(b):a.b[a.p]=new PH;return a.b[a.p]}function UF(a,b,c,d,e,f){var g;g=a.b[b].q-c/2;f||(g-=d-c);a=a.b[b].r-~~(e/2);return new VL(g-1-2,a-2,d+1+4,e+4)}function MH(a,b){var c;++a.q;c=new bL;b&&cL(c,b);return a.c[a.q]=c}\nfunction mH(a,b,c){var d,e,f,g,h,c=oH(a,b,c,!1);e=-1.7976931348623157E308;d=1.7976931348623157E308;for(b=1;b<=a.p;++b)a.b[b].r>e&&(e=a.b[b].r),a.b[b].qa.b[b].n?f=4-a.b[b].n:0>a.b[b].n&&-4=g&&(h=g)),\ng=lH(h,2)+lH(f,3)+" 0 0 0 0 0 0 0",f=XH(a,b),g+=lH(f,3),c+=g+ia+(kE(),ba);for(b=1;b<=a.q;++b)d=a.c[b],g=e=d.c,1==a.c[b].c?g=1:2==a.c[b].c&&(g=2),f=lH(d.i,3)+lH(d.j,3),h=0,1==e&&1==d.f?h=1:1==e&&2==d.f&&(h=6),1==e&&3==d.f&&(h=1,f=lH(d.j,3)+lH(d.i,3)),1==e&&4==d.f&&(h=6,f=lH(d.j,3)+lH(d.i,3)),c+=f+lH(g,3)+lH(h,3)+ja+(kE(),ba);for(b=1;b<=a.p;++b)0!=a.b[b].n&&(c+="M CHG 1"+lH(b,4)+lH(a.b[b].n,4)+(kE(),ba)),0!=a.b[b].d&&(c+="M ISO 1"+lH(b,4)+lH(a.b[b].d,4)+(kE(),ba));return c+=Ue+(kE(),ba)}\nfunction DE(a,b){var c,d,e,f,g,h,j;g=j=0;for(h=1;h<=a.q;++h)e=a.c[h],c=e.i,d=e.j,c!=b&&d!=b?(++j,f=a.c[j],cL(f,e),f.i=c,c>b&&--f.i,f.j=d,d>b&&--f.j):g+=e.c;a.q=j;for(h=b;hb&&--c,a.b[h].p[++d]=c);a.b[h].j=d}}\nfunction FE(a,b){var c,d,e,f;c=a.c[b].i;d=a.c[b].j;for(e=b;ea.b[b].a&&0==a.b[d].d){if(0!=(-99199!=a.b[d].f?a.b[d].f:0))continue a;b=RH(a,d,b);if(1==a.c[b].c&&(0==a.c[b].f||!a.k.tc))DE(a,d),c=!0}return c}function WL(a,b){var c,d,e,f,g;g=y(A,u,-1,[0,0]);for(e=1,f=0;e<=a.b[b].j;++e)c=a.b[b].p[e],d=RH(a,b,c),2!=a.c[d].c&&(g[f++]=c);return g}\nfunction UL(a){var b,c,d;for(d=1;d<=a.p;++d)a.b[d].j=0;for(d=1;d<=a.q;++d)b=a.c[d].i,c=a.c[d].j,NH(a.b[b],c),NH(a.b[c],b)}\nfunction $H(a,b,c){var d,e,f,g,h,j,l,n,o;a.d=OF(a.q+1);o=[];for(j=1;j<=a.p;++j){o[j]=!1;b[j]=!1;a:{d=void 0;for(d=1;d<=a.b[j].j;++d)if(c[RH(a,j,a.b[j].p[d])]){d=!0;break a}d=!1}if(d&&!(3d&&(d=c);return d}\nfunction TF(a,b){var c;c=(kE(),rE)[a.b[b].a];32==a.b[b].a&&(c=a.b[b].e);return c}function SH(a,b){a.b[b].j+=-1}function ZF(a,b,c){var d,e,f,g,h;h=1;a.a=OF(a.p+1);for(e=a.a[b]=1;e<=a.b[b].j;++e)d=a.b[b].p[e],d!=c&&(a.a[d]=++h);for(g=!1;;){for(d=1;d<=a.p;++d){g=!1;if(0~~(c/2)+24?3:2}function ME(a,b){var c,d,e,f,g,h,j;c=YE(a);d=c.a;e=c.b;g=Math.sin(3.141592653589793*b/180);c=Math.cos(3.141592653589793*b/180);for(f=1;f<=a.p;++f)h=a.b[f].q*c+a.b[f].r*g,j=-a.b[f].q*g+a.b[f].r*c,DH(a.b[f],h,j);c=YE(a);GH(a,d-c.a,e-c.b)}\nfunction VH(a){var b,c,d,e,f;e=f=0;for(d=1;d<=a.q;++d)b=a.b[a.c[d].i].q-a.b[a.c[d].j].q,c=a.b[a.c[d].i].r-a.b[a.c[d].j].r,f+=Math.sqrt(b*b+c*c);0=g;++g)if(J(f,(kE(),rE)[g])){f=g;break b}f=32}gH(a,b,f);32==a.b[b].a&&(a.b[b].e=d);c+=\nea;d=0;0=e&&(d=e-48));32==a.b[b].a&&(a.b[b].i=d)}}}function RG(a,b,c){var d,e;a.i=1;c&&(a.i=-1);b=new KD(b);try{for(;b.j=DD(b,b.a),b.jc||6a.b[c].j&&2>a.b[d].j)e.f=0,gt(a.k,"Stereomarking meaningless on this bond !");else switch(e.f){case 0:a.b[d].j<=a.b[c].j?e.f=1:e.f=3;break;case 1:e.f=2;break;case 2:2h||3c[b]&&(j=f,f=b,b=j);j=WL(a,f);h=j[0];l=j[1];e=0;n=!1;0c[l]&&(j=h,h=l,l=j);j=RH(a,f,h);0!=d[j]?e=h:1==a.c[j].c&&5!=a.d[j]&&(e=h);0==e&&0c[f]&&(n=!0);j=WL(a,b);l=j[0];g=j[1];h=0;0g&&(g=0.001),j/=g,g=l/g,l=(a.b[e].r-a.b[f].r)*g-(a.b[e].q-a.b[f].q)*j,t=(a.b[h].r-a.b[f].r)*g-(a.b[h].q-a.b[f].q)*j,2>(0>=l?0-l:l)||2>(0>=t?0-t:t))gt(a.k,"Not unique E/Z geometry !");else{g=\nRH(a,e,f);h=RH(a,h,b);r=1;if(0==d[g]){for(o=1;o<=a.b[e].j;++o)if(b=a.b[e].p[o],b!=f&&(j=RH(a,e,b),0!=d[j])){c[b]>c[e]?r=-d[j]:r=d[j];break}d[g]=r}0==d[h]&&(0l&&0>t?d[h]=-d[g]:d[h]=d[g],n&&(d[h]=-d[h]))}}}function fI(a,b,c){var d;d=a.c[b].f;return 1>d||4g?e.i=3-g-c.b[d].n:4==g?(c.b[d].n=-1,e.i=0):5g?0c.b[d].n?e.i=2-g-c.b[d].n:e.i=4-g:(c.b[d].n=g-4,e.i=4-g+c.b[d].n);break;case 4:case 7:3>g?e.i=3-g+c.b[d].n:3==g?0>c.b[d].n?(c.b[d].n=0,e.i=0):0c.b[d].n?(c.b[d].n=0,e.i=0):0g?e.i=2-g+c.b[d].n:2==g?0>c.b[d].n?(c.b[d].n=0,e.i=0):0f;)if(0e.i&&(e.i=0)}}}function eF(a){JL(this);this.b[0]=new PH;this.t=this.q=this.p=0;this.k=a}\nfunction QG(a,b){var c,d,e,f,g,h,j,l,n;eF.call(this,a);if(null!=b&&(f=m,l=OG(b),null!=l)){n=new JD(b,l,!0);for(g=1;4>=g;++g)f=PG(n,l);e=uG(qD(gx(f.substr(0,3)),10)).a;j=uG(qD(gx(f.substr(3,3)),10)).a;g=0;try{g=uG(qD(gx(f.substr(14,1)),10)).a}catch(o){if(o=pq(o),!H(o,96))throw o;}NE(this,(OE(),1==g?PE:QE));for(g=1;g<=e;++g){d=yH(this,null);f=PG(n,l);d.q=(new UJ(RJ(gx(f.substr(0,10))))).a;d.r=-(new UJ(RJ(gx(f.substr(10,10))))).a;d=34;34>f.length&&(d=f.length);d=gx(f.substr(31,d-31));hH(this,g,d);62<=\nf.length&&(h=gx(f.substr(60,3)),0=h))){var r=void 0,r=YK(d);d=0d&&(d=0);this.b[g].d=d}if(39<=f.length&&(h=gx(f.substr(37,2)),0=h))){f=0;switch(h){case 1:f=3;break;case 2:f=2;break;case 3:f=1;break;case 4:f=0;break;case 5:f=-1;break;case 6:f=-2;break;case 7:f=-3}this.b[g].n=f}}for(g=1;g<=j;++g)e=MH(this,null),f=\nPG(n,l),e.i=uG(qD(gx(f.substr(0,3)),10)).a,e.j=uG(qD(gx(f.substr(3,3)),10)).a,d=uG(qD(gx(f.substr(6,3)),10)).a,1==d?c=1:2==d?c=2:3==d?c=3:c=9,h=0,11b.length)this.p=0;else{try{j=new ID(b);g=uG(qD(GD(j),10)).a;h=uG(qD(GD(j),10)).a;for(f=1;f<=g;++f)n=GD(j),c=(o=yH(this,null),hH(this,this.p,n),o),c.q=(new UJ(RJ(GD(j)))).a,c.r=-(new UJ(RJ(GD(j)))).a;for(f=1;f<=h;++f){d=MH(this,null);d.i=uG(qD(GD(j),10)).a;d.j=uG(qD(GD(j),10)).a;e=uG(qD(GD(j),10)).a;l=0;if(-1==e)l=e=1;else if(-2==e)e=1,l=2;else if(-5==e)e=2,l=10;else if(11==\ne||12==e||13==e||14==e)l=e,e=9;d.c=e;d.f=l}UL(this);VH(this);aF(this)}catch(r){r=pq(r);if(H(r,96)){r.yd();this.p=0;return}throw r;}a&&!a.bb&&UE(this);cI(this)}}function TG(a,b,c){var d,e,f,g;eF.call(this,a);g=OF(b.p+1);for(e=1;e<=b.p;++e)b.a[e]==c&&(yH(this,b.b[e]),g[e]=this.p);for(e=1;e<=b.q;++e)if(a=b.c[e].i,d=b.c[e].j,!(b.a[a]!=c&&b.a[d]!=c)&&!(b.a[a]!=c||b.a[d]!=c))f=MH(this,b.c[e]),f.i=g[a],f.j=g[d];this.i=b.i;UL(this)}\nfunction XL(a,b,c){var d,e,f;eF.call(this,a);f=OF(b.p+1);for(d=1;d<=b.p;++d)b.b[d].k==c&&(yH(this,b.b[d]),f[d]=this.p);for(d=1;d<=b.q;++d)a=b.c[d],a.e==c&&(e=MH(this,a),e.i=f[a.i],e.j=f[a.j]);NE(this,b.f);this.i=b.i;UL(this)}\nfunction nH(a,b,c){var d,e,f,g;eF.call(this,a);for(a=1;a<=c;++a)this.p+=b[a].p,this.q+=b[a].q,this.t+=b[a].t,b[a].f.a&&NE(this,(OE(),OE(),PE));this.b=C(KL,q,114,this.p+1,0);this.c=C(LL,q,115,this.q+1,0);f=g=e=0;for(a=1;a<=c;++a){for(d=1;d<=b[a].p;++d)++e,this.b[e]=WK(b[a].b[d]);for(d=1;d<=b[a].q;++d)++g,this.c[g]=aL(b[a].c[d]),this.c[g].i+=f,this.c[g].j+=f;f=e}UL(this)}\nfunction BE(a){var b;JL(this);this.k=a.k;this.p=a.p;this.q=a.q;this.t=a.t;this.b=C(KL,q,114,this.p+1,0);for(b=0;b(0>=a?0-a:a)&&(a=0);a=Q(L(R(a*Math.pow(10,c))))/Math.pow(10,c);e=m+(new UJ(a)).a;d=ex(e,fx(46));0>d&&(e+=Lb,d=ex(e,fx(46)));f=e.length;for(a=1;a<=c-f+d+1;++a)e+=bc;if(0==b)return e;e.length>b&&(e=id);c=m;for(a=1;a<=b-e.length;++a)c+=ea;return c+e}function OG(a){var b;b=new JD(a,ba,!0);if(4b&&(d=id);e=m;for(c=1;c<=b-d.length;++c)e+=ea;return e+d}function PG(a,b){for(var c,d;a.j=DD(a,a.a),a.j>16&255)),Uu(0.7*(g.d>>8&255)),Uu(0.7*(g.d&255))),MF(a.a,g)):(h=new cm(Uu(0.7*(g.d>>16&255)),Uu(0.7*(g.d>>8&255)),Uu(0.7*(g.d&255))),f=IB(g),MF(a.a,h));g=Q(L(R(S)));d=Q(L(R(d*S)));e=Q(L(R(e*S)));b=Q(L(R(b*S)));c=Q(L(R(c*S)));d-=g;e-=g;uF(a.a,b+g,c+g,d-g,e-g);MF(a.a,h);uF(a.a,b,c,d,g);uF(a.a,b,c+g,g,e);MF(a.a,f);uF(a.a,b+d,c,g,e+g);uF(a.a,b+1,c+e,d,g)}\nfunction pF(a,b,c,d,e){a=a.a;b=Q(L(R(b*S)));c=Q(L(R(c*S)));d=Q(L(R(d*S)));e=Q(L(R(e*S)));qF(a,!0);rF(a,sF(a,b,c,d,e))}function AF(a,b,c,d){var e,f,g;f=C(A,u,-1,d,1);g=C(A,u,-1,d,1);for(e=0;e=b||b>=cB(this.a)-1||0>=c||c>=dB(this.a)-1)&&(this.a.j=!1);this.a.j?BH(this.a.c,a,b,c):vG(this.a.c,a,b,c);hz(this.a.pb)};_.a=null;function sM(a){this.a=a}w(708,1,{},sM);_.od=function(a){this.a.j=!1;Es(a);Fs(a);JH(this.a.c)};_.a=null;\nfunction tM(a){this.a=a}w(709,1,{},tM);_.nd=function(){this.a.j&&(this.a.j=!1)};_.a=null;function uM(a){this.a=a}w(710,1,{},uM);_.a=null;function vM(a){this.a=a}w(711,1,{},vM);_.a=null;function hM(){fM.call(this);this.pb.style[zk]=fc;this.pb.style[Hh]=fc}w(712,703,rl,hM);function wM(a){this.a=a}w(713,1,{},wM);_.Qd=function(){Aq((xq(),yq),new yM(this))};_.a=null;function yM(a){this.a=a}w(714,1,{},yM);_.pd=function(){this.a.a.c&&(aB(this.a.a.c),yI(this.a.a))};_.a=null;\nfunction zM(a,b){var c;c=b.a;c.e=4;return sH(a.a.c,c,b.d,b.e)}function jM(a){this.a=a}w(715,1,{},jM);_.Hh=function(a){return zM(this,a)};_.a=null;function au(a,b){vG(a.a.c,b.a,b.d,b.e);return sH(a.a.c,b.a,b.d,b.e)}function kM(a){this.a=a}w(716,1,{},kM);_.Hh=function(a){return au(this,a)};_.a=null;function lM(a){this.a=a}w(717,1,{},lM);_.Hh=function(a){return BH(this.a.c,a.a,a.d,a.e)};_.a=null;function mM(a){this.a=a}w(718,1,{},mM);_.Hh=function(){return JH(this.a.c)};_.a=null;\nfunction Ss(a,b){var c;c=L(R(b.b));c=new YC(b,0,uj,c);IE(a.a.c,c);return!0}function nM(a){this.a=a}w(719,1,{},nM);_.Hh=function(a){return Ss(this,a)};var AM=_.a=null;function BM(){BM=x;AM=new Lv((bw(),new aw("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAEklEQVR42mM4MzPtPzJmIF0AAOqfLKHtSuV7AAAAAElFTkSuQmCC")),4,4)}function CM(){CM=x;DM={}}\nfunction EM(a,b,c){var d;c&&(b.style[rh]=c.b+bj,d=c.a,d!=ve&&(b.style[qh]=d),0!=(c.c&1)&&(b.style[th]=yg),0!=(c.c&2)&&(b.style[sh]=Ph));a.e.style[yk]=Hi}\nfunction eC(a,b){var c,d,e,f,g,h,j,l,n,o,r,t,z;d=Gp(b);d in DM?c=DM[d]:(c=$doc.getElementsByTagName("body")[0],e=Tq(Nj),f=Tq(Nh),f.style[fh]=(gr(),"inline"),f.style[tk]=(Xr(),"baseline"),f.style[gi]=cc,f.style[hi]=cc,f.width=1,f.height=1,g=(BM(),AM),f.src=g.d.a,c=(h=$doc.createTextNode(jf),EM(a,e,b),e.appendChild(h),e.appendChild(f),c.appendChild(e),j=Zq(e),l=Zq(e)+(e.offsetHeight||0),n=l-j,o=Zq(f)+(f.offsetHeight||0)+1,r=l-o,t=o-j,c.removeChild(e),z=new FM,z.a=t,z.b=r,z.c=n,z),DM[d]=c);return c}\nfunction GM(){CM();var a,b,c,d,e;Cr();this.a=y(Yu,q,1,["monospace","sans-serif",Hj]);this.c={};this.b={};this.d=$doc.getElementsByTagName("body")[0];this.e=Tq(Nj);this.e.innerHTML=this.f||m;this.e.style[rh]="72.0px";for(b=this.a,c=0,d=b.length;c=g?h=sF(a,b,c,d,e):h=(j=f+g,l=90-f,n=90-j,a.b+\'arc startangle="\'+l+\'" endangle="\'+n+\'" style="top:\'+c*a.a+"px;left:"+b*a.a+jj+d*a.a+hj+e*a.a+\'px"+\'+a.n+ac),rF(a,h))}function $F(a,b,c,d){a=a.a;if(a.s!=b||a.t!=c)Nx(d.Ec.f,a.u,b,c),a.s=b,a.t=c;LM(a)}function xF(a,b,c,d,e){a.o&&rF(a,a.b+\'line from="\'+b*a.a+Pa+c*a.a+\'" to="\'+d*a.a+Pa+e*a.a+\'" strokecolor="\'+a.i+la+a.c+"/>\\n")}function yF(a,b,c,d,e){a.o&&(qF(a,!1),rF(a,MM(a,b,c,d,e)))}\nfunction RF(a,b,c,d){var e,b=b.replace(/&/g,Ea).replace(/<\/g,Ha).replace(/>/g,Fa),f=(IM(),JM),b=(e=eC(f,a.f).a,""+b+"<\/span>");rF(a,b)}function uF(a,b,c,d,e){qF(a,!0);rF(a,MM(a,b,c,d,e))}function LM(a){var b;if(a.q){for(;null!=(b=a.v.pop());){var c=a.d;c[c.length]=b}b=a.d.join(ba);b=m+b+m;b!==a.r&&(a.u.pb.innerHTML=b||m,a.r=b);a.p=!0;a.q=!1}}function MF(a,b){(a.e=b)&&(a.i=NM(b))}\nfunction qI(a,b){var c,d,e,f;a.f=b;a.j=(c=(aC(),bC),d=b.b,e=b.a,f=m,d!=c.b&&(f="font-size:"+d*a.a+gj),e!=c.a&&(f+="font-family:"+e+Uc),0!=(b.c&1)&&(f+="font-weight:bolder;"),0!=(b.c&2)&&(f+="font-style:italic;"),f+="white-space:nowrap;",f)}function LF(a,b){(a.o=b)&&b&&(a.c=\' strokeweight="\'+b.e*a.a+\'px" \')}w(729,480,{});_.d=null;_.e=null;_.f=null;_.i=tg;_.j=null;_.k=!0;_.n=null;_.p=!1;_.q=!1;_.r=m;_.s=0;_.t=0;_.u=null;_.v=null;var KM,JM;\nfunction Xt(a,b){var c;c=b.a.targetTouches;return 1==c.length?(c=c[0],a.b.d=c.clientX-Xq(a.o.pb)+Yq(a.o.pb)+er(a.o.pb.ownerDocument),a.b.e=c.clientY-Zq(a.o.pb)+(a.o.pb.scrollTop||0)+fr(a.o.pb.ownerDocument),a.b.a=new xM(b),Uq(b.a),!0):!1}\nfunction iM(a){this.o=a;this.b=new OM;this.c=new PM(this);mx(this.o,new QM(this),(Yt(),Yt(),Zt));mx(this.o,new RM(this),(Qt(),Qt(),Rt));mx(this.o,new SM(this),(Ut(),Ut(),Vt));mx(this.o,new TM(this),(Mt(),Mt(),Nt));mx(this.o,new UM,(Ys(),Ys(),Zs));mx(this.o,new VM(this),(Us(),Us(),Vs));mx(this.o,new WM(this),(Ps(),Ps(),Qs))}w(730,1,{},iM);_.a=null;_.b=null;_.c=null;_.d=!1;_.e=null;_.f=null;_.i=null;_.j=null;_.k=null;_.n=null;_.o=null;function PM(a){Dm();this.a=a}w(731,65,{},PM);\n_.vd=function(){!this.a.d&&this.a.i&&zM(this.a.i,this.a.b)};_.a=null;function QM(a){this.a=a}w(732,1,{},QM);_.a=null;function RM(a){this.a=a}w(733,1,{},RM);_.a=null;function SM(a){this.a=a}w(734,1,{},SM);_.a=null;function TM(a){this.a=a}w(735,1,{},TM);_.a=null;function UM(){}w(736,1,{},UM);function VM(a){this.a=a}w(737,1,{},VM);_.a=null;function WM(a){this.a=a}w(738,1,{},WM);_.a=null;function OM(){}w(739,1,{},OM);_.a=null;_.b=0;_.c=0;_.d=0;_.e=0;\nfunction NM(a){var b,c;c=a.d>>16&255;b=a.d>>8&255;a=a.d&255;if(0==c*b*a){if(0==c&&0==b&&0==a)return tg;if(255==c&&0==b&&0==a)return"red";if(0==c&&255==b&&0==a)return"green";if(0==c&&0==b&&255==a)return wg}return 255==c&&255==b&&255==a?"white":sj+c+Pa+b+Pa+a+La}function II(){var a=$wnd.navigator.userAgent.match(/MSIE\\s+(\\d+\\.\\d+)/);return a?parseFloat(a[1]):-1}\nfunction XM(a){var b,c,d,e,f;sx(a);d=(tx(),Fz(null));e=new HM;Ly(e,a);Cx(d,e,d.pb);f=a.de();b=a.ce();c=II();9<=c?(++f,++b):7==c&&H(a,38)&&(c=a.pb.innerText,2>=c.length&&(f+=8));Ny(e,a);Lx(d,e);return new xA(f,b)}function TD(a){try{$wnd.console.log(a)}catch(b){}}function YM(){this.pb=Tq(gh);this.pb[Kg]=Vh;this.pb.style[Ui]=Ih;this.pb.style[Zi]=bg;this.pb.style[zk]=fc;this.pb.style[Hh]=fc;this.pb.setAttribute("contenteditable",oh)}w(741,362,jl,YM);\nfunction ZM(){ZM=x;IM();$M=y(Yu,q,1," *,line,polyline,arc,oval,rect,roundrect".split(","))}function sF(a,b,c,d,e){return a.b+\'oval style="position:absolute;left:\'+b*a.a+ij+c*a.a+jj+d*a.a+hj+e*a.a+dj+a.n+ac}function ZL(a,b,c,d,e){var f,g,h,j,l;if(1>d)return m;h=a.b+\'polyline points="\';g=m;for(f=0;f=f.k||(701==f.k?null.bi():401==f.k||402==f.k?(null.bi(),null.bi(),null.bi(),null.bi(),null.bi()):500<=f.k&&507>=f.k&&(g=null.ci,500!=g&&(g=new ft(null.ci,g,null),g.i=f.f,g.j=f.i,f=f.j&63,g.e=f&12)))}function gN(a){this.a=a}w(751,1,el,gN);_.pd=function(){pz(this)};_.a=null;function FC(){dN();fN.call(this);this.a=new Tz}w(752,744,{},FC);_.Ef=Sv;_.a=null;function IC(){new ru;var a;a:{switch(Vu){case 1:case 3:case 5:case 7:a=new iN;break a}a=new jN}this.a=a}w(767,504,{},IC);_.a=null;\nfunction jN(){}w(769,1,{},jN);_.Zh=function(a){a&&a&&jq(8,new kN(a));return null};_.$h=function(a){jq(8,new lN(a))};function iN(){}w(768,769,{},iN);_.Zh=function(){return $wnd.clipboardData.getData(zf)};_.$h=function(a){$wnd.clipboardData.setData(zf,a)};function kN(a){this.a=a}w(772,1,Hl,kN);_.zd=LA;_.a=null;function lN(a){this.a=a}w(774,1,Hl,lN);_.zd=LA;_.a=null;function GC(){this.b=new JC;this.d=new kB}w(785,502,{},GC);function tG(a,b,c,d){b=rA(b);c+=b.a;d+=b.b;Zx(a.a,c,d);$x(a.a)}\nfunction rC(){dN();fN.call(this);var a=this.a=new mN;a.ab=!0;a.a.f=!0;this.a.db=!0}w(787,744,{},rC);_.Ef=Sv;_.a=null;function nD(){}w(795,531,{},nD);function kD(){kD=x;var a;a=(bD(),cD["os.encoding"]);if(null!=a)try{if(J("UTF-8",a))gK(m);else if(J("ISO-8859-1",a)||J("ISO-LATIN-1",a))C(hK,Il,-1,0,1);else throw new DJ(a+ka);}catch(b){if(b=pq(b),!H(b,105))throw b;}}function lC(a,b){a.a=31*a.a+Uu((new UJ(b)).a)}function qB(){}w(800,1,{},qB);_.hC=Sv;_.a=1;\nfunction mN(){var a=(gy(),jy);ay.call(this,!0,li);this.U=a.a;this.a=new nN(this);this.a.d=!0;Rx(this,this.a);this.ab=!0;this.a.f=!0;if(-1==this.lb){var a=this.pb,b=1|(this.pb.__eventBits||0);mw();Xw(a,b)}else this.lb|=1;Sq(Rq(this.pb))[Kg]=Fh;this.pb.style[Bk]="2147483647"}w(832,364,rl,mN);_.Yd=function(a){qx(this,a);1==Nw(a.type)&&Wx(this,!1)};_.a=null;\nfunction nN(a){this.b=a;this.c=new Bm;this.i=new Bm;a=(sz(),rz);new iA(a.d,a.b,a.c,a.e,a.a);var b;b=Tq(Tj);this.e=Tq(Wj);gw(b,this.e);this.o=!0;a=yy();b=(hw(),iw(b));a.appendChild(b);this.pb=a;Kn();this.pb.setAttribute("role",qo.a);-1==this.lb?(a=this.pb,b=2225|(this.pb.__eventBits||0),mw(),Xw(a,b)):this.lb|=2225;this.pb[Kg]=Eh;a=dx(this.pb)+"-vertical";$w(this.ee(),a,!0);this.pb.style[Ti]=dc;this.pb.setAttribute("hideFocus",pk);mx(this,new qz(this),(ys(),ys(),zs))}w(833,404,jl,nN);\n_.Yd=function(a){switch(Nw(a.type)){case 16:this.a=!1;break;case 32:this.a=!0}iz(this,a)};_.Ge=function(a,b){mz(this,a,b);b||this.a&&Wx(this.b,!1)};_.a=!0;_.b=null;w(881,1,{});\nfunction oN(a,b,c,d){var e,f,g,h,j,l;h=(!c?b.b:wD(b,c,~~Gp(c)))[0][d.length];b=j=e=null;for(c=0,f=!h?0:h.length;c\',Ca=\'">\',Fa="#",Ha="$",Ia="$$$$",Ja="$MOL\\n",La="$RXN",Oa="$RXN\\n\\n\\nJME Molecular Editor\\n",Pa="%",Qa="&",Ua="&",Ya=">",ab="<",bb="\'",cb="(",hb=")",ib="*",jb="+",kb=",",nb=", ",qb=",modifiers=",rb="-",sb="-C#C-Me",vb="-C#CH",wb="-C#N",zb="-C(=O)N",Ab="-C(=O)OH",Hb="-C(=O)OMe",\nLb="-CCl3",Mb="-CF3",Nb="-CMe3",Pb="-NC=O",Vb="-NH-SO2-Me",Yb="-NMe2",Zb="-NO2",$b="-OC(=O)Me",ac="-SO2-NH2",bc="-SO3H",dc="-disabled",hc="-selected",lc=".",mc="...",tc="/",yc="//",zc="/>",Fc="0",Gc="0.0px",Hc="0px",Ic="1",Kc="100%",Nc="2",Oc="3",Pc="4",Uc="5",Vc="6",Wc="7",Xc="8",ad="9",bd=":",gd=": ",hd=";",id="<",td="<\/g>",ud="<\/svg>",vd="<\/text>",zd=\'b?{}:new hl[b],_.cM=c);for(var e=3;e=a.t+a.n;if(a.p&&!d)return d=(b-a.t)/a.n,a.td((1+Math.cos(3.141592653589793+3.141592653589793*d))/2),a.o&&a.r==c;if(!a.p&&b>=a.t&&(a.p=!0,a.sd(),!(a.o&&a.r==c)))return!1;return d?(a.o=!1,a.p=!1,a.rd(),!1):!0}w(58,1,{});_.qd=function(){this.u&&this.rd()};\n_.rd=function(){this.td((1+Math.cos(6.283185307179586))/2)};_.sd=function(){this.td((1+Math.cos(3.141592653589793))/2)};_.n=-1;_.o=!1;_.p=!1;_.q=null;_.r=-1;_.s=null;_.t=-1;_.u=!1;function Am(a,b){if(Bm(a.a,b)){var c=a.a,d=a.a.s,e;e=new Cm(d,a.a.k);Dm(d.a,e);1==d.a.c&&Em(d.b,16);c.q=e}else a.a.q=null}function Fm(a){this.a=a}w(59,1,{},Fm);_.a=null;w(60,1,{});w(61,1,{13:1});function Gm(){Gm=x;Hm=new Im}w(62,60,{});var Hm=null;function Im(){this.a=new Jm;this.b=new Km(this)}w(63,62,{},Im);\nfunction Lm(){Lm=x;Mm=new Jm;var a=new Nm;Om();Pm(Qm?Qm:Qm=new Rm,a)}function xm(a){a.b?$wnd.clearInterval(a.c):$wnd.clearTimeout(a.c);wm(Mm,a)}function Em(a,b){if(0>b)throw new Sm("must be non-negative");a.b?$wnd.clearInterval(a.c):$wnd.clearTimeout(a.c);wm(Mm,a);a.b=!1;a.c=Tm(a,b);Dm(Mm,a)}function Tm(a,b){return $wnd.setTimeout(C(function(){a.ud()}),b)}w(65,1,{});_.ud=function(){this.b||wm(Mm,this);this.vd()};_.b=!1;_.c=0;var Mm;function Km(a){Lm();this.a=a}w(64,65,{},Km);\n_.vd=function(){var a=this.a,b,c,d,e,f;b=D(Um,u,14,a.a.c,0);b=Vm(a.a,b);c=new Wm;for(e=0,f=b.length;ezm()-d.a;){e=!1;for(f=0;f=a.a.d)break a;b=d[e];c=new FileReader;Ut(c,a.a.b);1==a.a.c&&c.readAsText(b)}0==d.length&&(b=(this.a.dataTransfer||null).getData(gk),a.a.b.Xf(b))};_.Gd=function(){return St};var St;function Vt(){Vt=x;Wt=new ot(Ih,new Xt)}function Xt(){}w(278,259,{},Xt);\n_.Dd=function(a){var b,c;b=this.a.rotation;c=this.a.scale;a.a.e&&(0!=b&&a.a.b.b!=b&&(a.a.b.b=b,a.a.b.a=null,Yt(a.a.e,a.a.b)&&this.a.preventDefault()),a.a.d=!0);a.a.f&&(1!=c&&a.a.b.c!=c&&(a.a.b.a=null,a.a.b.c=c,Zt(a.a.f,a.a.b)&&this.a.preventDefault()),a.a.d=!0)};_.Gd=function(){return Wt};var Wt;function $t(){$t=x;au=new ot(Kh,new bu)}function bu(){}w(279,259,{},bu);_.Dd=function(a){a.a.a&&(a.a.b.a=null,cu(a.a.a,a.a.b))};_.Gd=function(){return au};var au;function du(){du=x;eu=new ot(Lh,new fu)}\nfunction fu(){}w(280,259,{},fu);_.Dd=function(){this.a.preventDefault()};_.Gd=function(){return eu};var eu;w(282,259,{});w(281,282,{});function gu(){gu=x;hu=new ot(ci,new iu)}function iu(){}w(283,281,{},iu);\n_.Dd=function(a){var b,c;c=this.a.keyCode||0;0<=c&&c<(ju(),ku).length&&-999!=(ju(),ku)[c]&&(c=(ju(),ku)[c]);b=new lu(null,c,null);if(this.a.ctrlKey||this.a.shiftKey||this.a.metaKey||this.a.altKey)this.a.ctrlKey&&(b.e|=2),this.a.altKey&&(b.e|=8),this.a.metaKey&&(b.e|=4),this.a.shiftKey&&(b.e|=1);a:{var a=a.a.c,d=c,e;a.Gb=!1;if(!a.J||a.K){mu(a,n);c=0;e=8==b.e;b=0!=(b.e&2);switch(d){case 99:case 67:b?nu(Qt(a,!0,!1)):c=301;break;case 118:case 86:b&&a.Tb&&(b=a.r,null==b.i&&(b.i="PASTE"),ou(a.E,(!a.Ub&&\n(a.Ub=new pu(a)),a.Ub)));break;case 110:case 78:c=401;break;case 111:case 79:c=501;break;case 115:case 83:c=601;break;case 112:case 80:c=1101;break;case 102:case 70:c=701;break;case 108:case 76:c=801;break;case 98:case 66:c=901;break;case 105:case 73:c=1001;break;case 120:case 88:a.Bc&&(mu(a,Uq((qu(),ru).Tc.a.pb,Ak)),c=1201,a.n=32);break;case 104:case 72:mu(a,Pe);c=1300;break;case 114:case 82:mu(a,"-R");c=1301;break;case 116:case 84:701==a.k?(c=236,mu(a,Mb)):801==a.k?(c=237,mu(a,Lb)):(c=233,mu(a,\n"-tBu"));break;case 121:case 89:b?c=111:(c=234,mu(a,Zb));break;case 122:case 90:b?c=110:(c=239,mu(a,bc));break;case 97:case 65:c=235;mu(a,"-COOH");break;case 101:case 69:c=238;mu(a,vb);break;case 117:case 85:c=110;break;case 113:case 81:c=242;mu(a,wb);break;case 103:a=!0;break a;case 27:c=202;break;case 45:701==a.k?(c=254,mu(a,"-F")):801==a.k?(c=255,mu(a,"-Cl")):901==a.k?(c=256,mu(a,"-Br")):1001==a.k?(c=257,mu(a,"-I")):501==a.k?(c=259,mu(a,"-OH")):401==a.k?(c=258,mu(a,"-NH2")):c=202;break;case 43:c=\n108;break;case 35:c=204;break;case 48:105==a.k?su(a,0):e?(c=223,mu(a,"-3-Furyl")):(c=221,mu(a,"-Furyl"));break;case 49:105==a.k?su(a,1):c=209;break;case 50:case 61:50==d&&105==a.k?su(a,2):501==a.k?(c=250,mu(a,"=O")):c=203;break;case 51:105==a.k?su(a,3):c=206;break;case 52:105==a.k?su(a,4):c=207;break;case 53:105==a.k?su(a,5):c=208;break;case 54:105==a.k?su(a,6):c=210;break;case 55:105==a.k?su(a,7):c=211;break;case 56:105==a.k?su(a,8):c=212;break;case 57:105==a.k?su(a,9):(mu(a,"9 ring"),c=229);break;\ncase 100:case 68:case 8:case 127:c=104;break;case 32:c=205;break;case 109:case 77:case 1002:c=151;break;case 119:case 87:case 1003:c=152;break;case 1E3:c=153;break;case 1001:c=154}d=d+1-49;0<=d&&9>=d&&0=b&&(c=1301+d));tu(a,c)}a=!0}a&&this.a.preventDefault()};_.Gd=function(){return hu};var hu;function uu(){uu=x;vu=new ot(Di,new wu)}function wu(){}w(284,264,yl,wu);_.Dd=function(a){a.ld(this)};_.Gd=function(){return vu};var vu;\nfunction xu(){xu=x;yu=new ot(Ei,new zu)}function zu(){}w(285,264,yl,zu);_.Dd=function(a){a.md(this)};_.Gd=function(){return yu};var yu;function Au(){Au=x;Bu=new ot(Fi,new Cu)}function Cu(){}w(286,264,yl,Cu);_.Dd=function(a){a.nd(this)};_.Gd=function(){return Bu};var Bu;function Du(){Du=x;Eu=new ot(Gi,new Fu)}function Fu(){}w(287,264,yl,Fu);_.Dd=function(a){var b;b=this.a;Jq((Gq(),Hq),new Gu(a,a.b,b))};_.Gd=function(){return Eu};var Eu;function Hu(){Hu=x;Iu=new ot(Hi,new Ju)}function Ju(){}\nw(288,264,yl,Ju);_.Dd=function(a){a.od(this)};_.Gd=function(){return Iu};var Iu;function Ku(){Ku=x;Lu=new ot(Ii,new Mu);new ot(Be,new Mu)}function Mu(){}w(289,264,yl,Mu);_.Dd=function(a){var b,c,d,e,f;b=new Nu(a.a.i,st(this),tt(this),4*this.a.detail||0);f=0;for(c=Ou(a.a.i.Pc,D(Pu,u,76,0,0)),d=0,e=c.length;da.qI&&(c.tM==x||c.cM&&c.cM[1])&&(!c.cM||!c.cM[-a.qI]))throw new bw;}return a[b]=c}w(319,1,{},Vv);_.qI=0;function Zv(){Zv=x;$v=[];aw=[];var a=new Vv,b=$v,c=aw,d=0,e,f;for(f in a)if(e=a[f])b[d]=f,c[d]=e,++d}var $v,aw;function G(a,b){return null!=a&&a.cM&&!!a.cM[b]}function Ip(a){return null!=a&&a.tM!=x&&!(a.cM&&a.cM[1])}function Lp(a){return a.tM==x||a.cM&&!!a.cM[1]}\nfunction cw(a){return null==a?null:a}function dw(a){return~~Math.max(Math.min(a,2147483647),-2147483648)}var ew=-1;\nfunction fw(){var a;$stats&&gw("com.google.gwt.useragent.client.UserAgentAsserter");a=navigator.userAgent.toLowerCase();if(-1!=a.indexOf(Zi))a=Zi;else if(-1!=a.indexOf("webkit"))a="safari";else if(-1!=a.indexOf(Ki)&&9<=$doc.documentMode)a="ie9";else if(-1!=a.indexOf(Ki)&&8<=$doc.documentMode)a="ie8";else{var b;var c=/msie ([0-9]+)\\.([0-9]+)/.exec(a);c&&3==c.length&&(b=6E3<=1E3*parseInt(c[1])+parseInt(c[2]));a=b?"ie6":-1!=a.indexOf("gecko")?"gecko1_8":"unknown"}H(Zi,a)||$wnd.alert("ERROR: Possible problem with your *.gwt.xml module file.\\nThe compile time user.agent value (opera) does not match the runtime user.agent value ("+\na+"). Expect more errors.\\n");$stats&&gw("com.google.gwt.user.client.DocumentModeAsserter");b=$doc.compatMode;a=z(hw,u,1,[ne]);for(c=0;c>22&4194303,0>a?1048575:0)}\nfunction pw(a){return ow(a.l,a.m,a.h)}function ow(a,b,c){return _=new qw,_.l=a,_.m=b,_.h=c,_}\nfunction rw(a,b){var c,d,e,f,g;if(0==b.l&&0==b.m&&0==b.h)throw new sw;if(0==a.l&&0==a.m&&0==a.h)return tw=ow(0,0,0),ow(0,0,0);if(524288==b.h&&0==b.m&&0==b.l)return c=a,524288==c.h&&0==c.m&&0==c.l?(tw=ow(0,0,0),c=pw((uw(),vw))):(tw=ow(c.l,c.m,c.h),c=ow(0,0,0)),c;g=!1;0!=b.h>>19&&(b=ww(b),g=!0);e=b.l;0!=(e&e-1)?f=-1:(d=b.m,0!=(d&d-1)?f=-1:(c=b.h,f=0!=(c&c-1)||0==c&&0==d&&0==e?-1:0==c&&0==d&&0!=e?xw(e):0==c&&0!=d&&0==e?xw(d)+22:0!=c&&0==d&&0==e?xw(c)+44:-1));c=d=e=!1;if(524288==a.h&&0==a.m&&0==a.l)if(e=\nd=!0,-1==f)a=pw((uw(),yw)),c=!0,g=!g;else return c=zw(a,f),g&&Aw(c),tw=ow(0,0,0),c;else 0!=a.h>>19&&(e=!0,a=ww(a),c=!0,g=!g);if(-1!=f){c=a;d=f;f=g;g=e;e=zw(c,d);f&&Aw(e);var h;22>=d?(f=c.l&(1<=d?(f=c.l,h=c.m&(1<r?j=\n!1:(o=j.l-f.l,m=j.m-f.m+(o>>22),r+=m>>22,0>r?j=!1:(j.l=o&4194303,j.m=m&4194303,j.h=r&1048575,j=!0));if(j&&(22>l?h.l|=1<l?h.m|=1<>>1;f.m=j>>>1|(o&1)<<21;f.l=m>>>1|(j&1)<<21;--l}g&&Aw(h);e?(tw=ww(c),d&&(tw=Ew(tw,(uw(),vw)))):tw=ow(c.l,c.m,c.h);return h}function Aw(a){var b,c,d;b=~a.l+1&4194303;c=~a.m+(0==b?1:0)&4194303;d=~a.h+(0==b&&0==c?1:0)&1048575;a.l=b;a.m=c;a.h=d}\nfunction Cw(a){var b;b=Fw(a.h);return 32==b?(b=Fw(a.m),32==b?Fw(a.l)+32:b+20-10):b-12}var tw=null;function Gw(a,b){return a.l==b.l&&a.m==b.m&&a.h==b.h}function J(a){var b,c,d;if(isNaN(a))return uw(),Hw;if(-9223372036854775E3>a)return uw(),Iw;if(9223372036854775E3<=a)return uw(),yw;d=!1;0>a&&(d=!0,a=-a);c=0;17592186044416<=a&&(c=dw(a/17592186044416),a-=17592186044416*c);b=0;4194304<=a&&(b=dw(a/4194304),a-=4194304*b);a=dw(a);b=ow(a,b,c);d&&Aw(b);return b}\nfunction Jw(a){var b,c;return-129a?(b=a+128,null==Kw&&(Kw=D(Lw,u,31,256,0)),c=Kw[b],!c&&(c=Kw[b]=nw(a)),c):nw(a)}function Mw(a){var b=Lk,c,d;c=a.h>>19;d=b.h>>19;return 0==c?0!=d||a.h>b.h||a.h==b.h&&a.m>b.m||a.h==b.h&&a.m==b.m&&a.l>b.l:!(0==d||a.h>19;d=b.h>>19;return 0==c?0!=d||a.h>b.h||a.h==b.h&&a.m>b.m||a.h==b.h&&a.m==b.m&&a.l>=b.l:!(0==d||a.h>13|(a.m&15)<<9;e=a.m>>4&8191;f=a.m>>17|(a.h&255)<<5;g=(a.h&1048320)>>8;h=b.l&8191;j=b.l>>13|(b.m&15)<<9;l=b.m>>4&8191;o=b.m>>17|(b.h&255)<<5;m=(b.h&1048320)>>8;r=c*h;y=d*h;t=e*h;v=f*h;g*=h;0!=j&&(y+=c*j,t+=d*j,v+=e*j,g+=f*j);0!=l&&(t+=c*l,v+=d*l,g+=e*l);0!=o&&(v+=c*o,g+=d*o);0!=m&&(g+=c*m);c=(r&4194303)+((y&511)<<13);r=(r>>22)+(y>>9)+((t&262143)<<4)+((v&31)<<17)+(c>>22);t=(t>>18)+(v>>5)+((g&4095)<<8)+(r>>22);return ow(c&4194303,r&\n4194303,t&1048575)}function ww(a){var b,c;b=~a.l+1&4194303;c=~a.m+(0==b?1:0)&4194303;return ow(b,c,~a.h+(0==b&&0==c?1:0)&1048575)}function Dw(a,b){var c,d,e,b=b&63;22>b?(c=a.l<>22-b,e=a.h<>22-b):44>b?(c=0,d=a.l<>44-b):(d=c=0,e=a.l<b?(e=c>>b,d=a.m>>b|c<<22-b,c=a.l>>b|a.m<<22-b):44>b?(e=d?1048575:0,d=c>>b-22,c=a.m>>b-22|c<<44-b):(e=d?1048575:0,d=d?4194303:0,c>>=b-44);return ow(c&4194303,d&4194303,e&1048575)}function Ew(a,b){var c,d;c=a.l-b.l;d=a.m-b.m+(c>>22);return ow(c&4194303,d&4194303,a.h-b.h+(d>>22)&1048575)}function P(a){return a.l|a.m<<22}\nfunction Ow(a){var b,c,d;if(0==a.l&&0==a.m&&0==a.h)return Fc;if(524288==a.h&&0==a.m&&0==a.l)return"-9223372036854775808";if(0!=a.h>>19)return rb+Ow(ww(a));for(c=n;!(0==a.l&&0==a.m&&0==a.h);){b=Jw(1E9);a=rw(a,b);b=n+P(tw);if(!(0==a.l&&0==a.m&&0==a.h))for(d=9-b.length;0d||d>a.p.c)throw new Oy;b.ob==a&&(f=a.we(b),fd||d>=c.c)throw new Oy;for(--c.c;dg&&l.charAt(g)==rb&&0==l.indexOf(f)&&(e[h]=d+l.substring(g))}c.className=e.join(ga)}bz(this,this.T);gz(this);gy(Xq(this.pb),kj,!1);gy(this.T.b,b+"Content",!0)}w(383,384,ll);_.oe=function(){xy(this.T)};_.pe=function(){Ay(this.T)};_.De=function(){return this.T.jb};_.ye=function(){return new dz(this.T)};_.ve=function(a){return this.T.ve(a)};_.Ee=function(a){bz(this.T,a);gz(this)};_.T=null;w(382,383,ll);_.se=Gy;\nfunction pz(){pz=x;qz=new rz(0,(lz(),mz));sz=new rz(1,tz);uz=new rz(2,vz);wz=z(xz,u,38,[qz,sz,uz])}function rz(a,b){this.b=a;this.a=b}w(386,193,{38:1,89:1,94:1,96:1},rz);_.a=null;var wz,qz,sz,uz;function yz(){yz=x;zz=z(hw,u,1,[nk,Bi,Ig])}\nfunction oz(a){var b;yz();var c,d;c=this.pb=$doc.createElement(Yj);this.c=$doc.createElement(ak);lx(c,this.c);c[Og]=0;for(c=c[Ng]=0;c";h=new Ww(c.a.a);g.innerHTML=h.a||n;g=Xq(g);a.kb&&(a.pb.__listener=\nnull);if(a.pb&&(h=a.pb,b=h.parentNode))b.insertBefore(g,h),b.removeChild(h);a.pb=g;a.kb&&(a.pb.__listener=a);-1==a.lb?(g=a.pb,a=133333119|(a.pb.__eventBits||0),tx(),dy(g,a)):a.lb|=133333119}w(417,418,{},fA);_.a=0;_.b=0;_.c=0;_.d=null;_.e=0;function gA(a,b){this.a=a;this.b=b}w(419,1,{},gA);_.pd=function(){var a;this.b.a!=this.a||this!=this.a.f||(this.a.f=null,this.b.kb?(a=Zq(li,!1),this.b.pb.dispatchEvent(a)):this.b.pb.__gwtLastUnhandledEvent=li)};_.a=null;_.b=null;w(421,348,Tl);\nfunction mA(a){this.a=a}w(423,421,Tl,mA);_.Sd=function(a){this.a.Ke(a.f,a.a)};function nA(a,b,c){var d;if(a.o){var e=d=$doc.createElement(sk);by(a.e,(mx(),nx(e)),b);a=(mx(),nx(c));d.appendChild(a)}else d=Tx(a.e,0),by(d,(mx(),nx(c)),b)}\nfunction oA(a,b,c){var d;b.b&&(pA(a,b),c&&b.a?(pA(a,null),a=b.a,b=(Gq(),Hq),b.c=Kq(b.c,[new qA(a),!1])):null!=b.d&&(a.j=new rA(a,b),c=(lz(),tz),a.j.U=c,a.j.ab=a.f,c=Rh,a.j.ie()[Tg]=c,d=ly(a.pb),H(Qh,d)||fy(a.j,d+"Popup"),wy(a.j,new mA(a),Qm?Qm:Qm=new Rm),a.n=b.d,d=a.j,a=new sA(a,b),d.pb.style[Ck]=Vh,iz(d),Sv(),a.a.o?hz(a.a.j,ar(a.a.pb)+Tq(a.a.pb,Xi)-1,br(a.b.pb)):hz(a.a.j,ar(a.b.pb),br(a.a.pb)+Tq(a.a.pb,Wi)-1),d.pb.style[Ck]=Dk))}\nfunction tA(a,b){!b&&a.k&&a.n==a.k.d||b&&!b.b||(pA(a,b),a.pb.focus(),b&&a.d&&oA(a,b,!1))}\nfunction uA(a,b){var c;a:{c=b.target;var d,e;for(e=new zv(a.i);e.bc&&(c=a.i.c-1),c==b){d=Dx(a.i,b);break}else if(d=Dx(a.i,c),d.b)break;pA(a,d)}}w(424,380,pl);_.ae=function(a){uA(this,a)};_.se=function(){this.j&&ez(this.j,!1);Ay(this)};_.Ke=function(a,b){yA(this,a,b)};_.d=!1;_.e=null;_.f=!1;_.j=null;_.k=null;_.n=null;_.o=!1;function qA(a){this.a=a}\nw(425,1,{},qA);_.pd=function(){BA(this.a)};_.a=null;function CA(a){this.a=a}w(426,1,{},CA);_.Hd=function(){pA(this.a,null)};_.a=null;function rA(a,b){this.a=a;this.b=b;jz.call(this,!0,wi);bz(this.T,this.b.d);gz(this);this.fb=!0;this.b.d.ei()}w(427,383,ll,rA);_.Yd=function(a){var b,c;if(!a.a)switch(rx(a.d.type)){case 4:c=a.d.target;b=this.b.c.pb;if(b.contains(c)){a.a=!0;break}a.a&&pA(this.a,null)}};_.a=null;_.b=null;function sA(a,b){this.a=a;this.b=b}w(428,1,{},sA);_.a=null;var DA=_.b=null;\nfunction EA(){EA=x;DA=new Qw((gx(),new fx((Sv(),"data:image/gif;base64,R0lGODlhBQAJAIAAAAAAAAAAACH5BAEAAAEALAAAAAAFAAkAAAIMRB5gp9v2YlJsJRQKADs="))),5,9)}function FA(a,b){if(b){var c=ly(a.pb)+dc;gy(a.ie(),c,!1)}else c=ly(a.pb)+dc,gy(a.ie(),c,!0);a.b=b}function GA(a,b){this.pb=$doc.createElement(bk);var c=ly(this.pb)+hc;gy(this.ie(),c,!1);this.pb.textContent=a||n;this.pb[Tg]="gwt-MenuItem";c=cr();this.pb.setAttribute(Xh,c);Un();this.pb.setAttribute("role",Bo.a);this.a=b}w(431,381,{42:1,46:1,49:1},GA);\n_.a=null;_.b=!0;_.c=null;_.d=null;function HA(){var a;this.pb=$doc.createElement(bk);this.pb[Tg]="gwt-MenuItemSeparator";a=$doc.createElement(ph);lx(this.pb,a);a[Tg]="menuSeparatorInner"}w(432,381,wl,HA);function IA(){var a,b,c,d,e;b=null.ei();e=er();d=dr();b[oh]=(Ur(),Qi);b[Fk]=0+(ps(),oj);b[Uh]=Hc;c=$doc;c=(H(c.compatMode,ne)?c.documentElement:c.body).scrollWidth||0;a=$doc;a=(H(a.compatMode,ne)?a.documentElement:a.body).scrollHeight||0;b[Fk]=(c>e?c:e)+oj;b[Uh]=(a>d?a:d)+oj;b[oh]="block"}\nfunction kz(){}w(433,1,{},kz);_.Ud=function(){IA()};function JA(a){this.a=a}w(434,1,{},JA);\n_.Yd=function(a){var b=this.a,c,d;if(a.a||!b.fb&&a.b)b.db&&(a.a=!0);else if(b.Yd(a),!a.a){d=a.d;c=d.target;var e;try{e=!!c&&!!c.nodeType}catch(f){e=!1}(c=e&&c&&1==c.nodeType?b.pb.contains(c):!1)&&(a.b=!0);b.db&&(a.a=!0);switch(rx(d.type)){case 4:case 1048576:if(qx){a.b=!0;break}if(!c&&b.V){b.Ge(!0);break}break;case 8:case 64:case 1:case 2:case 4194304:if(qx){a.b=!0;break}break;case 2048:d=d.target,b.db&&!c&&d&&(d.blur&&d!=$doc.body&&d.blur(),a.a=!0)}}};_.a=null;function KA(a){this.a=a}\nw(435,1,{},KA);_.a=null;function lz(){lz=x;mz=new LA(0);tz=new LA(1);vz=new LA(2);MA=z(NA,u,47,[mz,tz,vz])}function LA(a){this.b=a}w(436,193,{47:1,89:1,94:1,96:1},LA);var MA,mz,tz,vz;function OA(a){a.j?a.a.bb&&($doc.body.appendChild(a.a.Z),a.f=Gx(a.a.$),IA(),a.b=!0):a.b&&($doc.body.removeChild(a.a.Z),PA(a.f.a),a.f=null,a.b=!1)}function QA(a){a.j||(OA(a),a.c||(Cy(),Uy(RA(null),a.a)));a.a.pb.style[Wg]="rect(auto, auto, auto, auto)";a.a.pb.style[cj]=Dk}\nfunction SA(a,b){var c,d,e,f,g,h;a.j||(b=1-b);c=f=e=g=0;d=dw(b*a.d);h=dw(b*a.e);switch(a.a.U.b){case 2:f=a.e;c=d;break;case 0:g=a.d-d>>1;e=a.e-h>>1;f=e+h;c=g+d;break;case 1:Sv(),f=h,c=d}a.a.pb.style[Wg]="rect("+g+qj+f+qj+c+qj+e+"px)"}\nfunction fz(a,b,c){a.c=c;vm(a);a.i&&(xm(a.i),a.i=null,QA(a));a.a.hb=b;var d=a.a;d.eb&&(PA(d.eb.a),d.eb=null);d._&&(PA(d._.a),d._=null);if(d.hb){d.eb=sx(new JA(d));var e;e=new KA(d);zx();e=Ax?nv(Ax.a,(!mv&&(mv=new Rm),mv),e):null;d._=e}c=!c&&a.a.ab;a.a.U!=(lz(),mz)&&!b&&(c=!1);a.j=b;c?b?(OA(a),a.a.pb.style[lj]=gg,-1!=a.a.ib&&a.a.He(a.a.cb,a.a.ib),a.a.pb.style[Wg]=vj,Cy(),b=RA(null),Ly(b,a.a,b.pb),a.i=new TA(a),Em(a.i,1)):ym(a,200):(OA(a),a.j?(a.a.pb.style[lj]=gg,-1!=a.a.ib&&a.a.He(a.a.cb,a.a.ib),Cy(),\nb=RA(null),Ly(b,a.a,b.pb)):a.c||(Cy(),Uy(RA(null),a.a)),a.a.pb.style[cj]=Dk)}function nz(a){var b=(Gm(),Hm);this.k=new Fm(this);this.s=b;this.a=a}w(437,58,{},nz);_.rd=function(){QA(this)};_.sd=function(){this.d=Tq(this.a.pb,Wi);this.e=Tq(this.a.pb,Xi);this.a.pb.style[cj]=Vh;SA(this,(1+Math.cos(3.141592653589793))/2)};_.td=function(a){SA(this,a)};_.a=null;_.b=!1;_.c=!1;_.d=0;_.e=-1;_.f=null;_.i=null;_.j=!1;function TA(a){Lm();this.a=a}w(438,65,{},TA);_.vd=function(){this.a.i=null;ym(this.a,200)};\n_.a=null;function mx(){mx=x;UA()}function nx(a){return a.__gwt_resolve?a.__gwt_resolve():a}function UA(){function a(){}a.prototype={className:n,clientHeight:0,clientWidth:0,dir:n,getAttribute:function(a){return this[a]},href:n,id:n,lang:n,nodeType:1,removeAttribute:function(a){this[a]=void 0},setAttribute:function(a,c){this[a]=c},src:n,style:{},title:n};$wnd.GwtPotentialElementShim=a}function Cy(){Cy=x;VA=new WA;XA=new xp;Dy=new wv}function YA(a){this.p=new Zy(this);this.pb=a;xy(this)}\nfunction RA(a){Cy();var b,c;c=Fv(XA,a);b=null;if(null!=a&&!(b=$doc.getElementById(a)))return null;if(c&&(!b||c.pb==b))return c;if(0==XA.d){var d=new ZA;Om();Pm(Qm?Qm:Qm=new Rm,d);Sv()}!b?c=new $A:c=new YA(b);E(XA,a,c);xv(Dy,c);return c}w(440,377,ll,YA);var VA,XA,Dy;function WA(){}w(441,1,{},WA);_.Je=function(a){a.qe()&&a.se()};function ZA(){}w(442,1,{},ZA);_.Sd=function(){Cy();try{Hy(Dy,VA)}finally{aB(Dy.a),aB(XA)}};function $A(){YA.call(this,$doc.body)}w(443,440,ll,$A);\n_.Be=function(a,b,c){Xy(a,b-0,c-0)};function dz(a){this.c=a;this.a=!!this.c.jb}w(444,1,{},dz);_.Zd=Xw;_.$d=function(){if(!this.a||!this.c.jb)throw new Ry;this.a=!1;return this.b=this.c.jb};_._d=function(){this.b&&this.c.ve(this.b)};_.b=null;_.c=null;function bB(a,b){a.pb[Ak]=null!=b?b:n}w(447,395,pl);_.ae=function(a){0!=(rx(a.type)&896)?zy(this,a):zy(this,a)};_.te=Fy;function cB(){cB=x;dB()}w(446,447,pl);\nfunction eB(){cB();var a=Wq(gk);!kx&&(kx=new jx);!ix&&(ix=new hx);this.pb=a;Sv();this.pb[Tg]="gwt-TextBox"}w(448,446,pl,eB);function dB(){dB=x;fB=new gB;hB=new iB;jB=new kB;lB=new mB;nB=z(oB,u,50,[fB,hB,jB,lB])}w(449,193,Ol);var nB,fB,hB,jB,lB;function gB(){this.b=0}w(450,449,Ol,gB);function iB(){this.b=1}w(451,449,Ol,iB);function kB(){this.b=2}w(452,449,Ol,kB);function mB(){this.b=3}w(453,449,Ol,mB);function Qy(a,b){var c;for(c=0;cc||c>a.c)throw new Oy;if(a.c==a.a.length){e=D(pB,u,51,2*a.a.length,0);for(d=0;dc;--d)nq(a.a,d,a.a[d-1]);nq(a.a,c,b)}function Zy(a){this.b=a;this.a=D(pB,u,51,4,0)}w(455,1,{},Zy);_.ye=function(){return new Sy(this)};_.a=null;_.b=null;_.c=0;function qB(a){if(a.a>=a.b.c)throw new Ry;return a.b.a[++a.a]}function rB(a){if(0>a.a||a.a>=a.b.c)throw new sB;a.b.b.ve(a.b.a[a.a--])}function Sy(a){this.b=a}w(456,1,{},Sy);\n_.Zd=function(){return this.aa)throw new Sm("Missing message: awt.133");this.e=a;this.a=2;this.c=0;this.d=10;this.b=0}w(480,1,{56:1},BC);\n_.eQ=function(a){return a===this?!0:G(a,56)?a.e==this.e&&a.a==this.a&&a.c==this.c&&a.d==this.d&&a.b==this.b:!1};_.hC=function(){var a;a=new CC;a.a=31*a.a+dw((new DC(this.e)).a);a.a=31*a.a+this.a;a.a=31*a.a+this.c;a.a=31*a.a+dw((new DC(this.d)).a);return a.a};_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;\nfunction EC(){EC=x;FC=GC=new km(255,255,255);HC=new km(192,192,192);IC=new km(128,128,128);JC=new km(64,64,64);KC=LC=new km(0,0,0);MC=NC=new km(255,0,0);new km(255,175,175);OC=new km(255,200,0);PC=new km(255,255,0);new km(0,255,0);QC=new km(255,0,255);RC=new km(0,255,255);SC=TC=new km(0,0,255)}\nfunction UC(a){var b,c;c=a.d>>16&255;b=a.d&255;a=a.d>>8&255;if(0==c&&0==b&&0==a)return new km(3,3,3);3>c&&0!=c?c=3:(c=dw(c/0.7),c=255b&&0!=b?b=3:(b=dw(b/0.7),b=255a&&0!=a?a=3:(a=dw(a/0.7),a=255>16&255)),dw(0.7*(a.d>>8&255)),dw(0.7*(a.d&255)))}function WC(a,b){return G(b,59)?b.d==a.d:!1}function km(a,b,c){EC();if((a&255)!=a||(b&255)!=b||(c&255)!=c)throw new Sm(xe);this.d=c|b<<8|a<<16|-16777216}\nw(486,1,{59:1,68:1,71:1},km);_.eQ=function(a){return WC(this,a)};_.hC=XC;_.tS=function(){return YC.d+"[r="+(this.d>>16&255)+",g="+(this.d>>8&255)+",b="+(this.d&255)+cg};_.a=0;_.b=null;_.c=null;_.d=0;var KC,SC,MC,FC,LC,TC,RC,JC,IC,HC,QC,OC,NC,GC,PC;function SB(){SB=x;TB=new ZC(!0);$C=new wv;xv($C,"ar");xv($C,"fa");xv($C,"iw");xv($C,"ur")}function ZC(a){this.a=a}w(487,1,Pl,ZC);_.a=!1;var TB,$C;w(491,1,{77:1,93:1});function aD(){JB.call(this,0,0)}function JB(a,b){this.b=a;this.a=b}\nfunction LB(a){JB.call(this,a.b,a.a)}w(490,491,{62:1,77:1,89:1,93:1},aD,JB,LB);_.eQ=function(a){return a===this?!0:G(a,62)?a.b==this.b&&a.a==this.a:!1};_.hC=function(){var a;a=new CC;a.a=31*a.a+this.b;a.a=31*a.a+this.a;return a.a};_.tS=function(){return bD.d+"[width="+this.b+",height="+this.a+cg};_.a=0;_.b=0;function lu(a,b,c){this.f=a;this.c=b;this.e=this.d=this.j=this.i=0;this.b=c}w(492,1,Pl,lu,function(a,b,c,d){this.f=a;this.c=b;this.j=this.i=0;this.d=c;this.e=d;this.b=null});\n_.tf=function(){return 0!=(this.e&4)};_.uf=function(){return 0!=(this.e&1)};_.tS=function(){var a;return this.cZ.d+"[id="+this.c+",x="+this.i+",y="+this.j+(0!=this.d?",key="+this.d+(a=n,this.uf()&&(a+=",shift"),0!=(this.e&2)&&(a+=",control"),this.tf()&&(a+=",meta"),a):n)+",target="+this.f+(null!=this.b?",arg="+this.b:n)+cg};_.b=null;_.c=0;_.d=0;_.e=0;_.f=null;_.i=0;_.j=0;function cD(a){var b,c;for(c=b=0;cb.b&&(dD(this,l,b.b-(o-this.c),g.b,m,j,h),l.qg(),o=f,m+=j+this.d,j=0),e=!1,nq(l.b,l.c++,c),o+=a.b+this.c,j=Xm(j,a.a);dD(this,l,b.b-(o-this.c),g.b,m,\nj,h)}};_.qf=function(a){this.b=iD(a.Fc);return 0==cD(this)?$B(a,new JB(10,10)):$B(a,fD(this,!1))};_.rf=function(a){this.b=iD(a.Fc);return 0==cD(this)?$B(a,new JB(10,10)):$B(a,fD(this,!0))};_.sf=XB;_.tS=function(){var a;switch(this.a){case 0:a=fi;break;case 2:a=zj;break;case 1:a=Pg;break;case 4:a="trailing";break;default:a="leading"}return lD.d+"[hgap="+this.c+",vgap="+this.d+",align="+a+cg};_.a=0;_.b=null;_.c=0;_.d=0;function mD(){mD=x;nD=new oD(Ie,0,12)}\nfunction oD(a,b,c){mD();this.a=null!=a?a:"Default";this.b=0<=c?c:0;this.c=0==(b&-4)?b:0}w(494,1,{63:1,89:1},oD);_.a=null;_.b=0;_.c=0;var nD;w(495,1,bm);_.tS=function(){return pD.d+"[font="+this.b+"ascent="+qD(this.b).a+", descent="+qD(this.b).b+", height="+qD(this.b).c+cg};_.b=null;w(497,1,{});_.tS=function(){return"Graphics"};w(498,497,{});function sB(){}function yy(a){this.f=a}w(501,136,dm,sB,yy);function FB(){this.f="Missing message: awt.151"}w(500,501,dm,FB);w(502,1,{});\nfunction VB(a,b,c,d){this.d=a;this.b=b;this.a=c;this.c=d}w(503,1,{65:1,89:1,93:1},VB);_.eQ=function(a){return a===this?!0:G(a,65)?a.b==this.b&&a.a==this.a&&a.c==this.c&&a.d==this.d:!1};_.hC=function(){var a;a=31+this.d;a=31*a+this.b;a=31*a+this.a;return a=31*a+this.c};_.tS=function(){return rD.d+"[left="+this.b+",top="+this.d+",right="+this.c+",bottom="+this.a+cg};_.a=0;_.b=0;_.c=0;_.d=0;w(507,1,Pl);_.cf=function(){return this.j};_.tS=ZB;_.j=null;_.k=null;\nfunction sD(a){var b;b=a.j+",label="+a.f;a.e||(b+=",disabled");null!=a.c&&(b+=",command="+a.c);return b}function tD(a,b){a.e=b;FA(a.i.a,b)}function uD(a){this.n=(PB(),PB(),QB);var b;var c;b=this.cZ.d;-1!=my(b,ny(36))?b=null:(c=this.n.b.d++,b=py(b,zB(b,ny(46))+1)+n+c);this.j=b;this.d=new zC;this.f=a;this.e=!0;this.i=new vD(this)}w(506,507,Pl,uD);_.cf=function(){return sD(this)};_.c=null;_.e=!1;_.f=null;_.i=null;w(505,506,Rl);_.cf=function(){return sD(this)+(this.b?",tearOff":n)};_.b=!1;w(509,1,{78:1});\n_.eQ=function(a){return a===this?!0:G(a,78)?this.vf()==a.vf()&&this.wf()==a.wf():!1};_.hC=function(){var a;a=new CC;wD(a,this.vf());wD(a,this.wf());return a.a};function EB(){this.b=this.a=0}function xD(a,b){this.a=a;this.b=b}w(508,509,{69:1,78:1,89:1},EB,xD);_.eQ=function(a){return a===this?!0:G(a,69)?this.a==a.a&&this.b==a.b:!1};_.vf=Xw;_.wf=Bz;_.tS=function(){return yD.d+"[x="+this.a+",y="+this.b+cg};_.a=0;_.b=0;\nfunction zD(a,b){if(!b)throw new ov("Missing message: awt.70");var c=a.a;if(H(b.f,rb)){var c=c.a.a,d=new HA,e=c.c.c;if(0>e||e>c.c.c)throw new Oy;c.o&&(d.pb[Zg]=2);nA(c,e,d.pb);AD(c.c,e,d)}else{var d=c.a.a,c=b.i.a,e=d.c.c,f,g;if(0>e||e>d.c.c)throw new Oy;AD(d.c,e,c);for(f=g=0;fb?0:b;var c=this.Tc;bB(c.a,a);c.e.a=-1;c.e.b=-1}w(519,518,ul,MD,ND);_.Ne=function(){return"textfield"+this.Vc.b.f++};_.Pe=function(){return KD(this,Uq(this.Tc.a.pb,Ak).length)};_.Qe=function(){return!AB(this)?null:KD(this,Uq(this.Tc.a.pb,Ak).length)};_.Se=OD;_.Ue=PD;_.Ye=function(){this.Tc=(PB(),new QD)};_.af=OD;_.df=PD;_.a=0;function PB(){PB=x;QB=new RD}\nfunction SD(){var a=(PB(),PB(),QB);!a.c&&(a.c=new TD);return a.c}w(520,1,{});_.a=null;_.c=null;var QB;function UD(){}w(521,1,{},UD);_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;_.f=0;w(522,1,{});function VD(){VD=x;WD=new XD;YD=new XD}function ZD(a,b){return b==a?!0:!b?!1:!0}function XD(){}w(523,1,{73:1},XD);_.eQ=function(a){return null==a||!G(a,73)?!1:ZD(this,a)};_.hC=function(){var a;a=null.ei()+";class="+null.ei();a=!null.ei().ei()?a:a+";charset=";return $D(a)};\n_.tS=function(){return aE.d+"[MimeType=(null);humanPresentableName="+this.a+cg};_.a=null;var WD,YD;function bE(){bE=x;z(cE,u,73,[(VD(),YD),WD])}function dE(a){var b=(VD(),YD);if(ZD(b,(VD(),YD)))return a.a;if(ZD(b,WD))return new eE(a.a);throw new fE(b);}function gE(a){bE();this.a=a}w(524,1,{},gE);_.a=null;function fE(a){this.f="flavor = "+a}w(525,137,{74:1,89:1,97:1,106:1},fE);function hE(a,b,c){sC();iE.call(this,a,b,c,Lk)}\nfunction iE(a,b,c,d){sC();qC.call(this,a);this.k=b;this.a=c;this.c=d;this.b=0}w(526,473,Pl,hE,iE);_.cf=function(){var a,b;a=1001==this.k?"ACTION_PERFORMED":zk;b=n;0<(this.b&1)&&(b+="Shift");0<(this.b&2)&&(b+=0==b.length?"Ctrl":"+Ctrl");0<(this.b&4)&&(b+=0==b.length?"Meta":"+Meta");0<(this.b&8)&&(b+=0==b.length?"Alt":"+Alt");return a+",cmd="+this.a+",when="+Ow(this.c)+qb+b};_.a=null;_.b=0;_.c=Lk;function NB(a,b){sC();qC.call(this,a);this.k=b}w(527,473,Pl,NB);\n_.cf=function(){var a,b;a=this.n;switch(this.k){case 100:b="COMPONENT_MOVED";break;case 101:b="COMPONENT_RESIZED";break;case 102:return"COMPONENT_SHOWN";case 103:return"COMPONENT_HIDDEN";default:return zk}return b+" ("+a.We()+kb+a.Xe()+ga+a.Ve()+Gk+a.Re()+hb};w(530,527,Pl);_.j=0;\nfunction jE(a){var b;switch(a.k){case 503:b="MOUSE_MOVED";break;case 500:b="MOUSE_CLICKED";break;case 501:b="MOUSE_PRESSED";break;case 502:b="MOUSE_RELEASED";break;case 506:b="MOUSE_DRAGGED";break;case 504:b="MOUSE_ENTERED";break;case 505:b="MOUSE_EXITED";break;case 507:b="MOUSE_WHEEL";break;default:b=zk}b=b+",("+a.f+kb+a.i+"),button="+a.d;if(0<(a.j&16320)){var c=qb,d;d=a.j;var e;e=new Tw;0!=(d&4)&&Ap(Ap(e,(PB(),null)),jb);0!=(d&1)&&Ap(Ap(e,(PB(),null)),jb);0!=(d&2)&&Ap(Ap(e,(PB(),null)),jb);0!=(d&\n8)&&(0!=(d&2048)?0!=(d&512)&&Ap(Ap(e,(PB(),null)),jb):Ap(Ap(e,(PB(),null)),jb));0!=(d&32)&&Ap(Ap(e,(PB(),null)),jb);0!=(d&16)&&Ap(Ap(e,(PB(),null)),jb);0!=(d&8)&&Ap(Ap(e,(PB(),null)),jb);0!=(d&4)&&Ap(Ap(e,(PB(),null)),jb);d=0==e.a.a.length?e.a.a:kE(e.a.a,0,e.a.a.length-1);c=c+d+",extModifiers=";d=a.j;var f;e=(f=n,0!=(d&256)&&(f+=(PB(),null)),0!=(d&128)&&(f+=(0=this.k?0!=(this.j&16)?(this.d=1,501==this.k&&(this.j|=1024)):0!=(this.j&8)?(this.d=2,501==this.k&&(this.j|=2048)):0!=(this.j&4)&&(this.d=3,501==this.k&&(this.j|=4096)):(0!=(this.j&16)&&(this.j|=1024),0!=(this.j&8)&&(this.j|=\n2048),0!=(this.j&4)&&(this.j|=4096));else if(0!=(this.j&16320))if(this.j&=-64,0!=(this.j&64)&&(this.j|=1),0!=(this.j&128)&&(this.j|=2),0!=(this.j&256)&&(this.j|=4),0!=(this.j&512)&&(this.j|=8),0!=(this.j&8192)&&(this.j|=32),500<=this.k&&502>=this.k)switch(this.d){case 1:this.j|=16;break;case 2:this.j|=8;break;case 3:this.j|=4}else 0!=(this.j&1024)&&(this.j|=16),0!=(this.j&2048)&&(this.j|=8),0!=(this.j&4096)&&(this.j|=4);this.b=0;this.a=1;this.c=d}w(533,532,Pl,Nu);\n_.cf=function(){var a,b;a=jE(this);switch(this.b){case 0:b="WHEEL_UNIT_SCROLL";break;case 1:b="WHEEL_BLOCK_SCROLL";break;default:b=zk}return a+=",scrollType="+b+",scrollAmount="+this.a+",wheelRotation="+this.c};_.a=0;_.b=0;_.c=0;w(542,1,{});function eE(a){if(null==a)throw new lE;}w(543,542,{},eE);\nfunction oE(){oE=x;pE={};pE["java.vendor"]=Mh;pE["package.restrict.access.sun"]=xk;pE["sun.java.launcher"]=tf;pE["sun.management.compiler"]=Mh;pE["os.name"]=tf;pE[" sun.boot.class.path"]=tf;pE["path.separator.applet"]=tf;pE["java.vm.specification.vendor"]=Mh;pE["java.runtime.version"]=tf;pE["http.proxyPort"]=tf;pE["user.name"]=tf;pE["user.language"]=tf;pE["os.name.applet"]=tf;pE["browser.version"]=tf;pE["java.version"]=tf;pE["user.timezone"]=tf;pE["java.endorsed.dirs"]=tf;pE["java.specification.name"]=\n"GWT";pE["java.specification.version"]="2.5.0";pE[ai]=bf;!Qu&&(Qu=new Yu);Qu.a?pE[Zh]="yes":pE[Zh]=null}var pE;w(547,137,Jl);function qE(){}function rE(a){this.f=a}w(546,547,{83:1,89:1,97:1,106:1},qE,rE);function sE(){sE=x;tE=new uE}function vE(a){var b;if(a.k){var c;b=new Tw;Ap(b,a.f);b.a.a+=bd;c=a.a;null!=c&&0=b||65<=b&&90>=b;for(c=1;b&&c=b||65<=b&&90>=b||48<=b&&57>=b||43==b||45==b||46==b;if(b){c=this.f;xE();var f,g,h;h=c.length;b=new yE;for(g=0;g=f?zE(b,f+32&65535):Bp(b.a,String.fromCharCode(f));\nthis.f=b.a.a}else this.f=null,d=-1}if(null==this.f)throw new rE(Ze+a);if(!this.k&&(this.k=Fv(tE,this.f),this.k||(this.k=(PB(),new AE))&&E(tE,this.f,this.k),!this.k))throw new rE(Ze+a);try{c=a;var j=++d,l=a.length,o,m,r,t,y,v,s,A,F,M,N,$,U,V,da,la,sa,cc,K,pa,Ac;if(ll){if(-2147483647>=l&&(j>=c.length||0>j)||!(0>j||j>=c.length)&&c.indexOf(yc,j)==j&&-1==BE(c,ny(47),j+2))throw new CE(l);}else{N=c.substr(j,l-j);l-=j;v=0;s=this.c;$=this.e;cc=this.j;t=this.d;da=this.i;o=this.a;Ac=this.n;K=BE(N,ny(35),\n0);if(0==N.indexOf(yc)&&0!=N.indexOf("////")){F=2;$=-1;v=BE(N,ny(47),2);sa=BE(N,ny(63),2);-1!=sa&&(-1==v||v>sa)&&(v=sa);-1==v&&(v=l,t=n);A=v;-1!=K&&Kr+1?(m=N.charCodeAt(r+1),58==m?U=r+1:U=-1):U=-1}catch(tb){if(tb=xq(tb),!G(tb,97))throw tb;}-1==U||U>v?s=N.substr(F,A-F):(s=N.substr(F,U-F),V=N.substr(U+1,A-(U+1)),0==V.length?$=-1:$=DE(V,\n10))}-1v&&(null==t?t=n:H(t,n)?t=tc:t.indexOf(tc),M=zB(t,ny(47))+1,0==M?t=N.substr(v,y-v):t=t.substr(0,M-0)+N.substr(v,y-v)));null==t&&(t=n);null==s&&(s=n);d=s;var Ga;Ga=t;null!=da&&!H(da,n)&&(null!=t?Ga=t+Gd+da:Ga=Gd+da);null==this.f&&(this.f=\nthis.f);this.c=d;this.b=Ga;this.e=$;this.j=cc;var ub;null!=this.c&&0this.e)throw new rE("incorrect port: "+\nthis.e);}w(548,1,Pl,wE);_.tS=function(){return vE(this)};_.a=null;_.b=null;_.c=null;_.d=null;_.e=-1;_.f=null;_.i=null;_.j=null;_.k=null;_.n=null;var tE;w(549,1,{});function EE(a,b,c){var d,e;for(d=a.Of().ye();d.Zd();)if(a=d.$d(),e=a.xh(),null==b?null==e:Kp(b,e))return c&&(a=new FE(a.xh(),a.yh()),d._d()),a;return null}w(553,1,Nl);_.Nf=function(a){return!!EE(this,a,!1)};\n_.eQ=function(a){var b,c;if(a===this)return!0;if(!G(a,109)||this.Tf()!=a.Tf())return!1;for(a=a.Of().ye();a.Zd();)if(b=a.$d(),c=b.xh(),b=b.yh(),!this.Nf(c)||!GE(b,this.Pf(c)))return!1;return!0};_.Pf=function(a){a=EE(this,a,!1);return!a?null:a.yh()};_.hC=function(){var a,b,c;c=0;for(b=this.Of().ye();b.Zd();)a=b.$d(),c+=a.hC(),c=~~c;return c};_.Qf=HE;_.Rf=function(){throw new IE("Put not supported on this map");};_.Sf=function(a){a=EE(this,a,!0);return!a?null:a.yh()};_.Tf=function(){return this.Of().Tf()};\n_.tS=function(){var a,b,c,d;d=Ik;a=!1;for(c=this.Of().ye();c.Zd();)b=c.$d(),a?d+=nb:a=!0,d+=n+b.xh(),d+=Ed,d+=n+b.yh();return d+"}"};function aB(a){a.a=[];a.e={};a.c=!1;a.b=null;a.d=0}function Wx(a,b){var c;if(null==b)c=a.c;else if(G(b,1))c=bd+b in a.e;else a:{c=a.Wf(b);if(c=a.a[c])for(var d=0,e=c.length;d=a.i)break;c=RE(a,c);++b}return b}\nfunction SE(a,b){var c;for(c=0;c=a.i)throw new OE;b=a.a;a.a=RE(a,a.a);return kE(a.n,b,a.a)}\nfunction RE(a,b){var c,d;for(d=b;da.f||!SE(a,c))break;d+=65536<=c?2:1}else{c=a.n.charCodeAt(d);if(c>a.f||0>my(a.c,ny(c)))break;++d}return d}function VE(a){WE.call(this,a,ha,!1)}function XE(a){WE.call(this,a,kb,!1)}\nfunction WE(a,b,c){this.a=0;this.j=-1;this.d=!1;this.n=a;this.i=a.length;this.c=b;this.k=c;var d;if(null==this.c)this.f=0;else{for(c=b=d=0;c=a&&(a=UE(this.c,c,this.c.length),this.e=!0),d=a;++a)0=a;++a)b=Ef,33=j||b>a.Sb||c>a.Sb))){l=D(rG,nl,-1,99,1);h=m=o=0;for(g=b;g<=c;++g)f=sG(a.zb[g]),o+=f.c,m+=f.d,f.d>h&&(h=f.d),l[g]=f.c,2==d&&(l[g]=f.d);a.J&&(o+=25*(j+1),m+=25*(j+1),h+=25);j=g=1;a.J?r=tG(a):r=uG(a);f=dw(r.b);r=dw(r.a);1==d||3==d?f=~~((f-48)/2):2==d&&(r=~~(r/2));o>=f&&(g=f/o);h>=r&&(j=r/h);h=0;a.J&&(a.xb=gd)switch(GG(b,(EC(),LC)),f){case 101:GG(b,PC);KG(b,j+3,g+3,a.mb-6,a.mb-6);GG(b,LC);e=g+3;h=a.mb-6;c=\na.mb-6;d=b.a;f=P(J(Q((j+3)*R)));e=P(J(Q(e*R)));h=P(J(Q(h*R)));c=P(J(Q(c*R)));d.n&&(LG(d,!1),MG(d,NG(d,f,e,h,c)));OG(b,j+6,g+6,a.mb-12,a.mb-12);PG(b.a,P(J(Q((j+9)*(QG(),R)))),P(J(Q((g+9)*R))),P(J(Q(2*R))),P(J(Q(4*R))));HG(b,j+a.mb-10,g+9,2,4);0.04>Math.random()&&(GG(b,NC),PG(b.a,P(J(Q((j+10)*R))),P(J(Q((g+18)*R))),P(J(Q(4*R))),P(J(Q(4*R)))));0.96=e;++e)if(bo&&(GG(g,(FF(),NF)[o]),KG(g,f.b[A].q-\n12,f.b[A].r-12,24,24));for(A=1;A<=f.q;++A)l=f.c[A].i,m=f.c[A].j,0!=f.b[l].c&&f.b[l].c==f.b[m].c&&(GG(g,(FF(),NF)[f.b[l].c]),v=f.b[m].q-f.b[l].q,h=f.b[m].r-f.b[l].r,y=Math.sqrt(v*v+h*h),1>y&&(y=1),h/=y,y=v/y,v=9*h,t=9*y,o=iH(4),r=iH(4),o[0]=f.b[l].q+v,r[0]=f.b[l].r-t,o[1]=f.b[m].q+v,r[1]=f.b[m].r-t,o[2]=f.b[m].q-v,r[2]=f.b[m].r+t,o[3]=f.b[l].q-v,r[3]=f.b[l].r+t,VG(g,o,r,4))}for(A=1;A<=f.q;++A){GG(g,(EC(),KC));t=f.c[A];l=t.i;m=t.j;1==f.i&&0!=f.b[l].c&&f.b[l].c==f.b[m].c&&GG(g,(FF(),NF)[f.b[l].c]);if(3==\nt.f||4==t.f)o=l,l=m,m=o;o=f.b[l].q;r=f.b[l].r;N=f.b[m].q;M=f.b[m].r;if(1!=t.c||0!=t.f)v=N-o,h=M-r,y=Math.sqrt(v*v+h*h),1>y&&(y=1),h/=y,y=v/y;switch(t.c){case 2:10<=t.f&&GG(g,QC);v=2*h;t=2*y;SG(g.a,P(J(Q((o+v)*(QG(),R)))),P(J(Q((r-t)*R))),P(J(Q((N+v)*R))),P(J(Q((M-t)*R))));SG(g.a,P(J(Q((o-v)*R))),P(J(Q((r+t)*R))),P(J(Q((N-v)*R))),P(J(Q((M+t)*R))));GG(g,LC);break;case 3:SG(g.a,P(J(Q(o*(QG(),R)))),P(J(Q(r*R))),P(J(Q(N*R))),P(J(Q(M*R))));l=3*h;m=3*y;SG(g.a,P(J(Q((o+l)*R))),P(J(Q((r-m)*R))),P(J(Q((N+l)*\nR))),P(J(Q((M-m)*R))));SG(g.a,P(J(Q((o-l)*R))),P(J(Q((r+m)*R))),P(J(Q((N-l)*R))),P(J(Q((M+m)*R))));break;case 9:case 0:for(m=0;10>m;++m)l=o-(o-N)/10*m,s=r-(r-M)/10*m,SG(g.a,P(J(Q(l*(QG(),R)))),P(J(Q(s*R))),P(J(Q(l*R))),P(J(Q(s*R))));jH(g,f.k.v);m=kH(f.k.w);t=t.d;l=Gd;null!=t&&(l=t);t=LD(f.k.w,l);t=(o+N)/2-t/2;M=(r+M)/2+~~(m/2)-1;GG(g,QC);lH(g.a,l,P(J(Q(t*(QG(),R)))),P(J(Q(M*R))));GG(g,LC);break;default:if(1==t.f||3==t.f)v=3*h,t=3*y,s=iH(3),j=iH(3),s[0]=N+v,j[0]=M-t,s[1]=o,j[1]=r,s[2]=N-v,j[2]=M+t,\nVG(g,s,j,3);else if(2==t.f||4==t.f){v=3*h;t=3*y;for(m=0;10>m;++m)l=o-(o-N)/10*m,s=r-(r-M)/10*m,j=m/10,SG(g.a,P(J(Q((l+v*j)*(QG(),R)))),P(J(Q((s-t*j)*R))),P(J(Q((l-v*j)*R))),P(J(Q((s+t*j)*R))))}else SG(g.a,P(J(Q(o*(QG(),R)))),P(J(Q(r*R))),P(J(Q(N*R))),P(J(Q(M*R))))}}y=iH(f.p+1);h=iH(f.p+1);for(A=1;A<=f.q;++A)l=f.c[A].i,m=f.c[A].j,o=f.b[l].q,r=f.b[m].q,++h[l],++h[m],y[l]=y[l]/h[l]+r/h[l],y[m]=y[m]/h[m]+o/h[m];jH(g,f.k.v);m=kH(f.k.w);N=iH(f.p+1);r=iH(f.p+1);o=D(mH,u,121,f.p+1,0);for(A=1;A<=f.p;++A)l=\nnH(f,A),(null==l||1>l.length)&&(l=ib),j=f.b[A],3==f.b[A].a&&0pH(y[A]-f.b[A].q)&&(v=!1),2pH(y[A]-f.b[A].q)&&(M=!0),t=l,s=n,f.k.oc&&(F=f.b[A].i,0y&&(y=1),h/=y,y=v/y,v=4*h,t=4*y,s=iH(5),j=iH(5),s[0]=f.b[l].q+v,s[1]=f.b[m].q+v,j[0]=f.b[l].r-t,j[1]=f.b[m].r-t,s[3]=f.b[l].q-v,s[2]=f.b[m].q-v,j[3]=f.b[l].r+t,j[2]=f.b[m].r+t,s[4]=s[0],j[4]=j[0],106!=f.k.k&&sH(g,s,j,5),106==f.k.k&&tH(f,f.c[f.w].i,f.c[f.w].j))){h=0;for(A=1;A<=f.p;++A)0~~(f.p/2))for(A=1;A<=f.p;++A)0e;++e)if(d=a.zb[e])0b&&(b=c);return b}\nfunction DH(a,b,c,d){var e=OF?350:170,f,g,h,j;EH(d);b=FH(a,b);c=FH(a,c);h=e;for(g=1;g<=a.Sb;++g){j=new GH(e);f=a.zb[g];for(var l=b,o=c,m=j,r=void 0,t=void 0,y=void 0,v=void 0,s=r=r=r=v=r=void 0,A=void 0,F=void 0,M=t=y=r=r=void 0,N=void 0,$=void 0,s=0,F=m.a,A=1;A<=f.q;++A)r=HH(l,o,f.c[A].a,f.c[A].b),ry+F||(r=N*r+$*v,0>r||(y=Math.sqrt(y),t=Math.sqrt(t),r/=y*t,1<=r||(r=1.5707963267948966-Math.acos(r),r=t*Math.cos(r),r*=r,r=a.yb||0>=a.ub)&&(!a.M&&(a.M=nC(a)),IH(a,a.M));b=new JH;b.b=a.yb;b.a=a.ub;return b}function uG(a){var b;b=tG(a);b.b/=a.xb;b.a/=a.xb;return b}\nfunction KH(a,b,c,d){var e,f;if(!b||LH(b)){if((e=0=e;++e)b=hI(h,d);e=OH(DE(oy(b.substr(0,3)),10)).a;g=OH(DE(oy(b.substr(3,3)),10)).a;hI(h,d);for(b=1;b<=e+g;++b){for(f=n;!(j=hI(h,d),null==j||H(j,"$MOL"));)f+=j+d;a.zb[++a.Sb]=new iI(a,f)}a.xb=1;qG(a,1,e,1,!1);qG(a,e+1,e+g,3,!1);d="readRXNFile"}else{(a.J||a.Vb)&&(a.dc=!1);a.ob=new iI(a,b);if(!a.ob||0==a.ob.p)return!a.ob&&(mu(a,"ERROR - problems in reading/processing MOL input"),\na.bf(a.Ec.d)),!!a.ob;d=(a.dc||a.Fb)&&a.p||a.Mb;null!=a.t&&a.ob&&jI(a.ob,a.t,!0);null!=a.u&&a.ob&&jI(a.ob,a.u,!1);d||(a.Sb=0,a.xb=1);h=kI(a.ob);if(1>=h||a.J)a.zb[++a.Sb]=a.ob;else{a.Fb=!0;for(b=1;b<=h;++b)a.zb[++a.Sb]=new lI(a,a.ob,b)}d?a.o=a.Sb:a.o=1;a.ob=a.zb[a.o];a.J?qG(a,1,1,0,!0):qG(a,1,h,0,!d);d=uj}mI(a);null!=d&&(oF(a.r,Pd),a.r&&AG(Xp(a.r,d),0,0,0),a.hc=!0);a.Ib=!0;c&&a.bf(a.Ec.d);return!0}function mu(a,b){null==b&&(b=n);a.Gb=!0;a.X=b;a.ig("info: "+b)}\nfunction hH(a,b){var c;c=Math.round(b);100>c&&(!PF[c]&&(PF[c]=new oD(Ue,0,c)),!RF[c]&&nq(RF,c,BB(PF[c])),a.v=PF[c],a.w=RF[c])}function LH(a){var b;if(!a)return!1;b=a.tf();a=0!=(a.e&2);return b||a}function uH(a,b){return(a.mb+(a.Lb?1:0))*b}function ZG(a,b){var c,d;d=-1;for(c=0;c=b)switch(a.Kb=!0,a.Hb=!0,mu(a,n),b){case 102:yG(a,!0);RH(a,102);QH(a,102);d=!0;break;case 110:a.Ib=!0;a.k=c;a.pb.a!=a.pb.b&&a.pb.a.b!=a.pb.b?a.q&&(++a.Sb,a.o=a.Sb,a.q=!1):mu(a,"No more undo");if(!(a.pb.a!=a.pb.b&&a.pb.a.b!=a.pb.b))break;nI(a,oI(a.pb));a.r&&AG(Xp(a.r,yk),0,0,0);a.hc=!0;a.hc=!1;a.Ib=!0;break;case 111:a.k=c;if(a.pb.a.c)a.q&&(++a.Sb,a.o=a.Sb,a.q=!1);else{mu(a,"No more redo");break}if(!a.pb.a.c)break;e=a.pb;\nif(!e.a.c)throw new yy("Cannot redo. Index is out of range.");if(!e.a.c)throw new yy($e);e.a=e.a.c;nI(a,e.a.a);a.r&&AG(Xp(a.r,wj),0,0,0);a.hc=!0;a.hc=!1;a.Ib=!0;break;case 214:KH(a,null,a.R.a,a.R.b);a.k=c;break;case 151:case 152:case 154:case 153:e=null;a.k=c;switch(b){case 152:e=pI(a.jc);break;case 151:e=qI(a.jc);break;case 154:e=a.jc;e.a=e.c;e=pI(e);break;case 153:e=a.jc,e.a=-1,e=qI(e)}null==e?mu(a,"No more molecules in SDF buffer"):(BG(a),a.Vb=!0,rI(a,e,!1),a.Vb=!1,H(a.X,n)&&(mu(a,"MOL n. "+(a.jc.a+\n1)+" of "+a.jc.c),d=!0,a.r&&AG(Xp(a.r,"SDFstack"),0,0,0),a.hc=!0,a.hc=!1));break;case 101:rq(4,new sI(a));a.k=c;break;case 107:rq(2,new tI(a));break;case 114:rq(3,new uI(a));a.k=c;break;case 103:a.Mb=!0;a.k=c;break;case 105:a.A&&a.Bb&&(a.Bb=!1,vI(a.ob),a.Ib=!0,a.r&&AG(Xp(a.r,yg),0,0,0),d=a.hc=!0,a.k=c);a.I=1;break;case 109:a.k=c;e=wI(a.ob);if(2==e){mu(a,"Copying the agent not possible !");break}d=sG(a.ob);a.Ib=!0;a.ob=new WF(a.ob);d=dw((a.M.b-a.mb)/2-d.a);for(e=1;e<=a.ob.p;++e)wG(a.ob.b[e],2*d/a.xb,\n0/a.xb);a.zb[++a.Sb]=a.ob;a.o=a.Sb;a.r&&AG(Xp(a.r,"reactionCopy"),0,0,0);d=a.hc=!0;RH(a,109);QH(a,109);break;case 104:d=XF(a);break;case 213:a.k=c;if(!a.S){var f,g,h,j,l;l=new BD;for(f=a.U,g=0,h=f.length;g=b&&(a.n=33+(b-1301)),0=a.k)a.cb=2,BI(a.ob),d=!0,lG(a,kg,a.o,0,a.ob.w);else if(202==a.k||203==a.k||204==a.k)if(0=g;++g){f=0;for(c=1;c<=a.Sb;++c)wI(a.zb[c])==g&&(h[g][++f]=c);h[g][0]=f}e+=Oa;e+=EI(h[1][0],3)+EI(h[3][0],3)+ea;for(c=1;c<=h[1][0];++c)e+=Ja+FI(a.zb[h[1][c]],d,b);for(c=1;c<=h[3][0];++c)e+=Ja+FI(a.zb[h[3][c]],d,b)}else{1f&&(f=e.b[b].r),e.b[b].qb;++b)nq(g.b,g.c++,null),nq(f.b,f.c++,null);for(b=1;b<=e.p;++b)j=e.b[b].b,null==j||0==j.length||(H(j,fg)?Dm(c,new uC(b)):0==j.indexOf("mix")?(j=DE(py(j,3),10),l=null,f.c>j&&(l=(eD(j,f.c),f.b[j])),null==l?h=new Jm:h=l,Dm(h,new uC(b)),kD(f,j,h)):0==j.indexOf(aj)&&(j=DE(py(j,2),10),l=null,g.c>j&&(l=\n(eD(j,g.c),g.b[j])),null==l?h=new Jm:h=l,Dm(h,new uC(b)),kD(g,j,h)));d+=KI(of,c);if(0a.M.a-P(J(Q(a.mb*a.nb))))return!1;var b=a.Cc,f=a.Dc,g,h,j,l;l=0;if(0>b||0>f||f>a.ub||b>a.yb)b=0;else if(1==a.Sb)b=a.o;else{b=FH(a,b);f=FH(a,f);j=1.7976931348623157E308;for(h=1;h<=a.Sb;++h){g=a.zb[h];for(var o=void 0,m=void 0,r=void 0,m=1.7976931348623157E308,o=1;o<=g.p;++o)r=HH(b,f,g.b[o].q,g.b[o].r),r=a.k)a.cb=2,BI(a.ob),ZF(a,jg,a.ob.v);else if(230==a.k)a.cb=3,ZF(a,lg,a.ob.v);\nelse if(233<=a.k&&262>a.k)OI(a.ob,!1),ZF(a,ig,a.ob.v),a.cb=3;else if(107==a.k){if(a.bc.b)return!0;AI(a.ob,a.ob.v,Uq(a.bc.e.Tc.a.pb,Ak));a.ob.j=!0;ZF(a,"addAtomQuery",a.ob.v)}else if(105==a.k)(c=PI(a.ob))?ZF(a,"markAtom",a.ob.v):ZF(a,"unMarkAtom",a.ob.v);else if(113!=a.k)if(300c.length&&(c=Uf),AI(a.ob,a.ob.v,c)),ZF(a,Mj+a.n,a.ob.v)}else e=!1}else if(0<\na.ob.w)if(a.eb.c=a.o,104==a.k)XF(a);else if(106==a.k){c=a.ob;d=a.ob.w;if(0d&&(d=b);if(0==d)break;YF(c,d);c.a[d]=0}aG(a.ob);lG(a,"delBondGroup",a.o,0,a.ob.w);a.ob.w=0}else if(201==a.k)QI(a.ob,a.ob.w),lG(a,"setBondStereo",a.o,0,a.ob.w);else if(202==a.k||205==a.k)1==a.ob.c[a.ob.w].c&&0==a.ob.c[a.ob.w].f?(a.ob.c[a.ob.w].c=2,lG(a,Nj,a.o,0,a.ob.w)):(a.ob.c[a.ob.w].c=1,a.ob.c[a.ob.w].f=\n0,lG(a,Oj,a.o,0,a.ob.w)),a.ob.c[a.ob.w].f=0;else if(203==a.k)a.ob.c[a.ob.w].c=2,a.ob.c[a.ob.w].f=0,aG(a.ob),lG(a,Nj,a.o,0,a.ob.w);else if(204==a.k)a.ob.c[a.ob.w].c=3,a.ob.c[a.ob.w].f=0,aG(a.ob),lG(a,Pj,a.o,0,a.ob.w);else if(206<=a.k&&229>=a.k)a.cb=2,BI(a.ob),lG(a,kg,a.o,0,a.ob.w),aG(a.ob);else if(107==a.k){if(!a.bc.b)return!0;c=Uq(a.bc.e.Tc.a.pb,Ak);a.ob.c[a.ob.w].c=9;a.ob.c[a.ob.w].d=c;lG(a,"setQueryBond",a.o,0,a.ob.w)}else 105==a.k?(c=a.ob,b=a.ob.w,c.k.gb=!0,c.k.sc?(c.i=-1,d=c.c[b].i,b=c.c[b].j,\nf=c.b[d].c,h=c.b[b].c,j=4,f==h&&0=a.k)return!1;++a.Sb;a.o=a.Sb;a.zb[a.Sb]=new zG(a);a.ob=a.zb[a.Sb];a.eb.c=a.o;202<=a.k&&204>=a.k||205==a.k?(RI(a.ob,null),a.ob.q=0,SI(a.ob,1,c/a.xb,d/a.xb),a.ob.v=1,a.ob.x=1,a.cb=1,b=a.ob,CI(b,b.v,0),205==a.k?(SI(a.ob,2,(c+21.65)/a.xb,(d-12.5)/a.xb),a.ob.e[0]=1,a.ob.e[1]=2,a.ob.r=1,lG(a,"addChain",a.o,0,a.ob.w)):lG(a,\nhg,a.o,0,a.ob.w)):206<=a.k&&229>=a.k?(a.ob.z=FH(a,c),a.ob.A=FH(a,d),a.cb=2,BI(a.ob),a.r&&AG(Xp(a.r,jg),0,0,0),a.hc=!0):300c.length&&(c=Uf),AI(a.ob,1,c)),ZF(a,"addAtom",a.ob.v)):230==a.k?(bI(a,null,!0),a.r&&AG(Xp(a.r,lg),0,0,0),a.hc=!0):233<=a.k&&262>a.k?(RI(a.ob,null),a.ob.q=0,SI(a.ob,1,c/a.xb,d/a.xb),a.ob.v=1,OI(a.ob,!0),a.r&&AG(Xp(a.r,ig),0,0,0),a.hc=!0):oE()}else e=!1;e&&TI(a)}return a.Ab=\ne}\nfunction UI(a,b,c,d){var e,f,g,h;oE();if(!a.Db||VI(b))return!0;a.Gb=!1;c-=P(J(Q(uH(a,a.nb))));d-=P(J(Q(vH(a,a.nb))));f=FH(a,c-a.Cc);g=FH(a,d-a.Dc);e=FH(a,c);h=FH(a,d);if(2==a.cb||3==a.cb||9==a.cb)return!0;if(1==a.cb){f=!1;a.zb[a.eb.c].v=0;--a.ob.p;g=c;var b=d,j=a.Nb;0>g||0>b||b>a.ub||g>a.yb?EH(j):DH(a,g,b,j);++a.ob.p;if(0g&&(g=1);b/=g;j/=g;o=g/2/Math.tan(0.5235987755982988);m=e-f.b[l].q;r=h-f.b[l].r;l=-g/2+m*j+r*b;b=r*j-m*b;if(0>l)if(1f.b[2].r-f.b[1].r&&0h-f.b[1].r&&(f.b[2].r=f.b[1].r-g/2),0>f.b[2].q-f.b[1].q&&0e-f.b[1].q&&(f.b[2].q=f.b[1].q-0.866*g);else{if(2==f.b[f.e[0]].j&&(o=f.b[f.e[0]].p[1],o==f.e[1]&&(o=f.b[f.e[0]].p[2]),j=f.b[f.e[0]].q-f.b[o].q,b=f.b[f.e[0]].r-f.b[o].r,g=Math.sqrt(j*j+b*b),1>g&&(g=1),b/=g,j/=g,m=e-f.b[o].q,r=h-f.b[o].r,e=r*j-m*b,m=f.b[f.e[1]].q-f.b[o].q,r=f.b[f.e[1]].r-f.b[o].r,h=r*j-m*b,0h||0>e&&0=b?0-b:b)>e){++f.r;if(100g&&(g=1),SI(f,f.p,f.b[f.x].q+25*(j/g),f.b[f.x].r+25*(b/g))}a.B=!0}else if(113==a.k&&0c||0>d||d>a.ub||c>a.yb)&&5!=a.cb))e=uG(a),h=a.ob,j=sG(h),b=j.a,j=j.b,0>f&&be.b||0>g&&je.a||ZI(h,f,g),a.cb=5;dG(a,!1);a.Ib=!0;qF(a);a.Cc=c;a.Dc=d;return!0}\nfunction PH(a,b,c,d){var e,f;if(!a.J||a._f().a||a.ag().a||a.K)if(f=!1,e=$G(a,c,d),e!=a.Cb&&(f|=RH(a,a.Cb),f|=QH(a,e),a.Cb=e),!LH(b)){c-=P(J(Q(uH(a,a.nb))));d-=P(J(Q(vH(a,a.nb))));b=c;c=a.Nb;0>b||0>d||d>a.ub||b>a.yb?EH(c):DH(a,b,d,c);113==e&&0d.b[e].j&&(eJ(d,null),b=d.e[d.r-1],d.c[d.q].i=e,d.c[d.q].j=b,fJ(d.b[e],b),fJ(d.b[e],b)),YF(d,d.p)),d.u=!1,a.hc=!0;else if(0!=a.eb.c&&a.o!=a.eb.c){YF(a.ob,a.ob.p);b=a.ob.x;c=a.eb.a+a.ob.p;e=a.zb[a.eb.c];d=new GI(a,z(gJ,u,120,[null,a.ob,e]),2);d.b[0]=new hJ;iJ(d,b,c,1);b=D(gJ,\nu,120,a.zb.length,0);for(f=0,c=0;fd.c[b].c?(++d.c[b].c,d.c[b].f=0):mu(d.k,"Maximum allowed bond order is 3 !")):6==d.b[e].j?(--d.q,kJ(d,d.x),mu(d.k,"Not possible connection !")):(d.c[d.q].j=e,kJ(d,d.x),b=d.x,fJ(d.b[e],b),fJ(d.b[b],e),lJ(d.c[d.q],d.b)));xG(a.ob);a.B&&(d=a.pb,d.a!=d.b&&d.a.b!=d.b&&(e=d.a.c,oI(d),d.a.c=e),\nlG(a,hg,a.o,0,a.ob.w),a.B=!1);d=!0}else 5==a.cb&&(xG(a.ob),d=a.hc=!0);0=b&&0==c||b==c&&a.o==a.Zb)return-1;0>=b&&0lb))for(;Bc=fc[vc]*fc[vc];)0==Bc%fc[vc]?ic=!1:++vc;if(ic){oc[++ec]=Jw(Bc);if(ec>=lb)break;Ica&&(ca=0),0>ld&&(ld=0),Zd=28*ca+ld));fb=0;0!=m.b[T].n&&(-2>m.b[T].n?fb=1:-2==m.b[T].n?fb=2:-1==m.b[T].n?fb=3:1==m.b[T].n?fb=4:2==m.b[T].n?fb=5:2Bb&&(Bb=10-Bb));Yc=126;O=Bd;O+=126*m.b[T].i;Yc*=7;O+=fb*Yc;Yc*=7;0!=Bb&&(O+=Bb*Yc);Yc*=7;O+=Zd*Yc;Yc*=783;O+=m.b[T].j*Yc;S[T]=Jw(O)}for(nc=0;!uJ(m,Eb,S);){Rc=!1;for(T=1;T<=m.p;++T)Eb[T]!=db[T]&&(db[T]=Eb[T],Rc=!0);if(Rc){for(T=1;T<=m.p;++T){S[T]=Mk;for(eb=1;eb<=m.b[T].j;++eb)S[T]=Nw(S[T],Na[Eb[m.b[T].p[eb]]])}nc=\n0}else if(0m.c[T].j&&(Ra=m.c[T].i,m.c[T].i=m.c[T].j,m.c[T].j=Ra,1==m.c[T].f?m.c[T].f=3:2==m.c[T].f?m.c[T].f=4:3==m.c[T].f?m.c[T].f=1:4==m.c[T].f&&(m.c[T].f=2));for(T=1;Tm.a[v])&&M!=Ba[v]){Jc=!0;for(Ac=1;Ac<=ub;++Ac)if(da[Ac]==v&&la[Ac]==M||da[Ac]==M&&la[Ac]==v){Jc=!1;break}Jc&&(++ub,da[ub]=v,la[ub]=M)}}else V[++Ga]=M;if(0==Ga){if(aa==m.p)break;v=U[L--]}else if(1==Ga)Ba[V[1]]=v,v=V[1],m.a[v]=++aa;else{U[++L]=v;A=0;for(sa=1;sa<=Ga;++sa)if($=jJ(m,V[sa],v),!K[$]){A=V[sa];break}if(0==A)for(sa=1;sa<=Ga;++sa)if($=jJ(m,V[sa],v),2==m.d[$]||3==m.d[$]){A=V[sa];break}0==\nA&&(A=V[1]);Ba[A]=v;v=A;m.a[A]=++aa}}Ba=iH(m.p+1);y=iH(m.p+1);jd=[];kd=[];F=aa=L=0;for(sa=1;sa<=m.p;++sa)if(1==m.a[sa]){v=sa;break}b:for(;;){0m.b[Ob].j||4ya.b[Dd].j||3Jd[xb]&&\n(kc=ob,ob=xb,xb=kc);X=ob;0==ob&&(X=xb,$a=!0);for(wc=1;wc<=ya.b[Dd].j;++wc)Mc=ya.b[Dd].p[wc],Mc!=Cc[Ld-1]&&(0==mb?mb=Mc:gb=Mc);0Jd[gb]&&(kc=mb,mb=gb,gb=kc);Sb=mb;0==mb&&(Sb=gb,pe=!0);pb=0pb+Af?-(pb+Af):pb+Af)||0!=mg||0!=Bf?mu(ya.k,"Bad stereoinfo on allene !"):(Dc=ya.b[Cc[Ld-1]].q-ya.b[Dd].q,Kd=ya.b[Cc[Ld-1]].r-ya.b[Dd].r,nd=Math.sqrt(Dc*Dc+Kd*Kd),0.001>\nnd&&(nd=0.001),0<(ya.b[Sb].r-ya.b[Cc[Ld-1]].r)*(Dc/nd)-(ya.b[Sb].q-ya.b[Cc[Ld-1]].q)*(Kd/nd)?Rb[gc]=1:Rb[gc]=-1,$a&&(Rb[gc]*=-1),pe&&(Rb[gc]*=-1),X==ob&&0>pb&&(Rb[gc]*=-1),X==xb&&0>Af&&(Rb[gc]*=-1),Jd[X]>Jd[Sb]&&(Rb[gc]*=-1))}}else c:{var qc=m,Gb=Ob,Ce=fa,wd=fd,Tc=da,Tb=la,od=Id,qe=ta,$d=void 0,Zc=void 0,De=void 0,rc=void 0,Xa=void 0,sc=void 0,yb=void 0,he=void 0,Md=void 0,$c=void 0,Sa=void 0,Ta=void 0,Ec=void 0,Ub=void 0,pd=void 0,ba=void 0,qd=void 0,Ta=iH(4),Ub=iH(4),ae=void 0,xd=void 0,re=void 0,\nhf=void 0,jf=void 0,Xg=void 0,Xg=-1;0Xa;++Xa)0>=Ta[Xa]||($d=jJ(qc,Gb,Ta[Xa]),\nUb[Xa]=yJ(qc,$d,Gb),0Ub[Xa]?(++yb,rc=Ta[Xa],sc=Ta[Xa]):he=Ta[Xa]);Md=$c+yb;ba=iH(4);pd=0;if(3==qc.b[Gb].j){if(1==$c&&1==yb||3==Md&&0<$c&&0Xa;++Xa)$d=jJ(qc,Gb,Sa[Xa]),Zc[Xa]=yJ(qc,$d,Gb);if(4==Md){if(0==$c||0==yb){mu(qc.k,"Error in C4 stereospecification !");break c}if(1==$c||1==yb)ba[0]=Sa[0],ba[1]=Sa[3],ba[2]=Sa[2],ba[3]=Sa[1],pd=Zc[0];else{for(Xa=0;4>Xa;++Xa)-1==Zc[Xa]&&(Zc[Xa]=0);Md=2}}else if(3==Md)if(3==$c||3==yb)ba[0]=Sa[0],ba[1]=Sa[3],ba[2]=Sa[2],ba[3]=Sa[1],0<$c?pd=-1:pd=1;else{1==$c?$c=De=1:yb=De=-1;for(Xa=0;4>Xa;++Xa)Zc[Xa]==De&&(Zc[Xa]=0);Md=2}if(2==Md)if(1==$c&&1==yb)Sa[1]==\nrc?(Sa[1]=Sa[2],Sa[2]=Sa[3]):Sa[2]==rc&&(Sa[2]=Sa[3]),ba[0]=qd,ba[1]=rc,ba[2]=Sa[2],ba[3]=Sa[1],pd=1;else{if(Zc[0]==Zc[1]||Zc[1]==Zc[2]){mu(qc.k,"Error in C4 stereospecification ! 2/0r");break c}0!=Zc[0]?(ba[0]=Sa[0],ba[1]=Sa[2],ba[2]=Sa[1],ba[3]=Sa[3]):(ba[0]=Sa[1],ba[1]=Sa[3],ba[2]=Sa[2],ba[3]=Sa[0]);1<$c?pd=1:pd=-1}}var Kb=void 0;Ta[0]==ba[1]?(Kb=ba[0],ba[0]=ba[1],ba[1]=Kb,Kb=ba[2],ba[2]=ba[3],ba[3]=Kb):Ta[0]==ba[2]?(Kb=ba[2],ba[2]=ba[0],ba[0]=Kb,Kb=ba[1],ba[1]=ba[3],ba[3]=Kb):Ta[0]==ba[3]&&(Kb=\nba[3],ba[3]=ba[0],ba[0]=Kb,Kb=ba[1],ba[1]=ba[2],ba[2]=Kb);Ta[1]==ba[2]?(Kb=ba[1],ba[1]=ba[2],ba[2]=Kb,Kb=ba[2],ba[2]=ba[3],ba[3]=Kb):Ta[1]==ba[3]&&(Kb=ba[1],ba[1]=ba[3],ba[3]=Kb,Kb=ba[2],ba[2]=ba[3],ba[3]=Kb);ba[2]==Ta[2]?qe[Gb]=1:ba[2]==Ta[3]?qe[Gb]=-1:mu(qc.k,"Error in stereoprocessing ! - t30");qe[Gb]*=pd}}}Da=new BJ;N=iH(m.p+1);for(sa=1;sa<=m.p;++sa)N[y[sa]]=sa;for(sa=1;sa<=m.p;++sa){v=y[sa];jd[v]&&(Da.a.a+=cb);0=Se&&(sd=!0,Ea=(FF(),MF)[Se]);sd&&(0!=be?Ea=Wf+be+Ea:Ea=Wf+Ea,1==yd[Qe]?Ea+=Nd:-1==yd[Qe]&&(Ea+="@@"),1==Cf?Ea+=Pe:1ie?-ie:ie)&&(Ea+=0>ie?-ie:ie)),ng&&(Ea+=bd+Hg),Ea+=cg);Bp(Re.a,Ea);for(pa=1;pa<=ub;++pa)if(da[pa]==v||la[pa]==v)s=la[pa],s==v&&\n(s=da[pa]),N[v]",!0);j=-1c;++c)(d=b.d[c])?a.zb[c]=new WF(d):a.zb[c]=null;0b||b>a.Sb?(mu(a,"ERROR - invalid mol index: "+b),a.bf(a.Ec.d),null):a.zb[b]}function mI(a){var b,c,d;b=mG(a);for(d=1;d<=a.Sb;++d)c=a.zb[d],c.o=b}function HJ(a,b){b!=a.nb&&(a.nb=b,a.jg(),a.bf(a.Ec.d))}function IJ(a,b){var c,d,e;if(b!=a.xb){c=uG(a);a.xb=b;d=uG(a);e=P(J(Q((d.b-d.c)/2-(c.b-c.c)/2)));d=P(J(Q((d.a-d.d)/2-(c.a-c.d)/2)));for(c=1;c<=a.Sb;++c)ZI(a.zb[c],e,d),xG(a.zb[c]);a.Ib=!0;a.bf(a.Ec.d)}}\nfunction pG(a,b){var c;c=-1;H(b,"Select substituent")?(c=202,b=n):H(b,Ab)?c=235:H(b,Hb)?c=240:H(b,zb)?c=260:H(b,Pb)?c=261:H(b,$b)?c=241:H(b,Nb)?c=233:H(b,Mb)?c=236:H(b,Lb)?c=237:H(b,Zb)?c=234:H(b,Yb)?c=243:H(b,ac)?c=252:H(b,Vb)?c=244:H(b,bc)?c=239:H(b,"-PO3H2")?c=251:H(b,wb)?c=242:H(b,sb)?c=245:H(b,vb)&&(c=238);0=a.mb-1)for(g=f.b.b;j>=a.mb-1&&1=a.k&&(a.k=213);for(c=1;14>=c;++c)FG(a,b,c,1),FG(a,b,c,2);a.k=d;wH(a.Ec,a.wc.a,0,0)}var f;if(a.Hb){eH(a.fb.b.a,a.nb/R);b=a.fb.b;d=a.mb+(a.Lb?1:0);c=(a.M.a-P(J(Q(vH(a,a.nb)))))/a.nb;f=c-a.mb;GG(b,HF);PG(b.a,P(J(Q(0*(QG(),R)))),P(J(Q(0*R))),P(J(Q(d*R))),P(J(Q(c*\nR))));a.Lb?(GG(b,(EC(),JC)),e=aH*(a.mb+(a.Lb?1:0))+3,f>e&&(RG(b,0,e,a.mb-1,e),SG(b.a,P(J(Q(0*R))),P(J(Q(e*R))),P(J(Q(0*R))),P(J(Q((c-1)*R)))),RG(b,a.mb-1,e,a.mb-1,f),RG(b,a.mb-1,f,d,f))):(GG(b,IF),SG(b.a,P(J(Q(0*R))),P(J(Q(0*R))),P(J(Q(0*R))),P(J(Q((c-1)*R)))),RG(b,0,aH*a.mb,c-1,aH*a.mb),GG(b,VC(HF)),SG(b.a,P(J(Q((d-1)*R))),P(J(Q(0*R))),P(J(Q((d-1)*R))),P(J(Q((f+1)*R)))));SG(b.a,P(J(Q(0*R))),P(J(Q((c-1)*R))),P(J(Q(d*R))),P(J(Q((c-1)*R))));for(c=3;c<=aH+2;++c)FG(a,b,1,c);b=P(J(Q(vH(a,a.nb))));wH(a.Ec,\na.fb.a,0,b)}a.Jb&&(eH(a.fc.b.a,a.nb/R),d=a.fc.b,c=a.Lb?1:3,b=(a.M.a-P(J(Q(vH(a,a.nb))))-P(J(Q(a.mb*a.nb))))/a.nb,a.Lb?(GG(d,(EC(),JC)),PG(d.a,P(J(Q(0*(QG(),R)))),P(J(Q(0*R))),P(J(Q(c*R))),P(J(Q(b*R))))):(GG(d,VC(HF)),SG(d.a,P(J(Q((c-1)*(QG(),R)))),P(J(Q(0*R))),P(J(Q((c-1)*R))),P(J(Q(b*R)))),GG(d,HF),SG(d.a,P(J(Q((c-2)*R))),P(J(Q(0*R))),P(J(Q((c-2)*R))),P(J(Q(b*R)))),GG(d,IF),SG(d.a,P(J(Q((c-3)*R))),P(J(Q(0*R))),P(J(Q((c-3)*R))),P(J(Q(b*R))))),b=a.M.b-P(J(Q((a.Lb?1:3)*a.nb))),c=P(J(Q(vH(a,a.nb)))),\nwH(a.Ec,a.fc.a,b,c))}}function su(a,b){a.A?0==b&&(a.I=-1,mu(a,Vg),qF(a)):(a.gb?a.I=b:-1a.I?a.I=10*a.I+b:a.I=b,a.gb=!1,0==a.I?(a.I=-1,mu(a,Vg)):mu(a,a.I+ga),qF(a))}function IH(a,b){var c,d;d=b.b;c=b.a;a.J||(d-=P(J(Q(uH(a,a.nb))))+P(J(Q((a.Lb?1:3)*a.nb))),c-=P(J(Q(vH(a,a.nb))))+P(J(Q(a.mb*a.nb))));1>d&&(d=1);1>c&&(c=1);a.yb=dw(d);a.ub=dw(c)}function TF(a){FF();return 14<=a&&20>=a?1:21<=a&&28>=a?2:29<=a&&31>=a?3:0}w(577,469,Yl);_.zf=function(a){cG(this,a)};_.$f=LJ;\n_._f=function(){return iG(),null!=this.Pb?jG:kG};_.ag=function(){return iG(),iG(),kG};_.bg=XB;_.cg=function(a,b,c){return jC(this,b,c)};_.dg=XB;_.eg=function(){oE()};_.fg=hD;_.gg=MJ;_.hg=hD;_.ig=function(){oE()};\n_.Af=function(a){var b,c;if(this.s)if(c=a.c,b=a.f,a=a.i,c=(100+2*c)/100,this.J||!(bthis.M.a-P(J(Q(this.mb*this.nb)))||b>this.M.b-P(J(Q((this.Lb?1:3)*this.nb))))){if(b=this.xb*c,b>this.xb&&10>=b||b=b&&HJ(this,b)};_.bf=function(){KJ(this)};_.jg=function(){FJ(this)};_.kg=Fy;_.j=null;_.k=0;_.n=0;_.o=0;_.p=!1;_.q=!1;_.s=!0;_.t=null;_.u=null;_.v=null;_.w=null;_.x=13;_.y=null;_.z=!0;\n_.A=!1;_.B=!1;_.C=!0;_.F=null;_.G=null;_.I=1;_.J=!1;_.K=!1;_.L=!1;_.M=null;_.N=!0;_.O=!1;_.P=!0;_.Q=!0;_.R=null;_.S=null;_.T=null;_.V="http://peter-ertl.com/jsme/2013_03/help.html";_.W=null;_.X=null;_.Y=null;_._=null;_.ab=!1;_.bb=!0;_.cb=0;_.db=Lk;_.fb=null;_.gb=!0;_.hb=null;_.ib=null;_.jb=null;_.kb=null;_.lb=null;_.mb=24;_.nb=1;_.ob=null;_.pb=null;_.rb=null;_.sb=null;_.tb=!0;_.ub=0;_.vb=null;_.wb=1;_.xb=1;_.yb=0;_.Ab=!1;_.Bb=!1;_.Cb=0;_.Db=!1;_.Eb=!1;_.Fb=!0;_.Gb=!0;_.Hb=!0;_.Ib=!0;_.Jb=!0;\n_.Kb=!0;_.Lb=!1;_.Mb=!1;_.Ob=!1;_.Pb=null;_.Qb=null;_.Rb=!1;_.Sb=0;_.Tb=!0;_.Ub=null;_.Vb=!1;_.Wb=null;_.Xb=!1;_.Yb=null;_.Zb=0;_.$b=0;_._b=0;_.ac=!1;_.bc=null;_.cc=!1;_.dc=!1;_.ec=!1;_.fc=null;_.gc=!1;_.hc=!1;_.kc=!0;_.lc=!1;_.mc=!1;_.nc=!0;_.oc=!0;_.pc=null;_.qc=null;_.rc=!1;_.sc=!1;_.tc=!0;_.uc=null;_.vc=!1;_.wc=null;_.xc=null;_.yc=null;_.zc=!1;_.Ac=!0;_.Bc=!0;_.Cc=0;_.Dc=0;var aH=10,JF,PF,RF,HF,IF,KF,GF,OF,NJ=null,NF,MF;\nfunction NI(a,b,c,d,e){a.b[e]&&(zH(a.r),oF(a.r,Ne),a.r.a=e,a.r.d=c,a.r.e=d,a.r.f=b,OJ(a.c,a.r,e),zH(a.r))}function PJ(a,b,c){return a.b[c]?(zH(a.r),a.r.a=c,a.r.b=b,OJ(a.c,a.r,c),zH(a.r),!0):!1}function qF(a){KJ(a);a.f&&(QJ(a.Ec),a.f=!1)}function RJ(a,b,c){b in a.b?a.b[b]=c:$wnd.alert("Invalid callback name: "+b)}\nfunction SJ(){FF();hC.call(this);this.Ec=(PB(),PB(),QB).a;this.eb=new TJ;this.Nb=new TJ;this.H=new oD(null,0,8);this.Z=(this.mb-6)/1.5;this.r=new UJ;this.D=(EC(),GC);this.zb=D(gJ,u,120,99,0);this.qb=new fC;this.jc=new VJ;this.$=H((oE(),pE[ai]),bf);this.E=new WJ;this.U=z(hw,u,1,[Ab,Hb,$b,zb,Pb,Nb,Mb,Lb,Zb,ac,Vb,Yb,wb,vb,sb]);this.ic=new XJ;this.ob=new zG(this);NF[0]=IC;NF[1]=new km(255,153,153);NF[2]=new km(255,204,102);NF[3]=new km(255,255,153);NF[4]=new km(102,255,255);NF[5]=new km(51,204,255);NF[6]=\nnew km(255,153,255);this.eb.c=1;this.Nb.c=1;this.zb[1]=this.ob;this.Y=new YJ(this);this.a=z(hw,u,1,[ee,Qd,Wd,ke,Vd,fe,Ye]);var a,b,c,d;this.b={};for(b=this.a,c=0,d=b.length;cU&&(U=0),la=new pK(f,V,U,g),qK(la),Dm(f.k,la),N.c=V,N.b=da,N.d=24,N.a=U,N);da=$.c;V=$.b;hF(new mF(h),f);U=0>=$J();N=new rF(h);U?(U=new rK,ky(U,g.pb.alt),0<=da&&(U.pb.style[Fk]=da+oj),0<=V&&(U.pb.style[Uh]=\nV+oj),V=new sF(f,U,da,$),Ty(V.d.f,V.b,oC(V.d)-V.c-V.a.a,pC(V.d)-(V.a.d-V.a.a)),Dm(f.k,V),U.pb.draggable=xk,U.pb.style[ih]=(hr(),Ji),uy(U,N,(Nt(),Nt(),Ot)),U.pb.style[Tf]=Qi):(g.pb.draggable=xk,g.pb.style[ih]=(hr(),Ji),uy(g,N,(Nt(),Nt(),Ot)),g.pb.style[Tf]=Qi)}else dF("JSME initialization error: HTML id "+a+" not found.")}function sK(){return kw(null)}function tK(a){return kw(a)}w(581,1,Kl,gK,iK,jK,hK);_.lg=function(a){vy(this.d,new uK(this,a),(ut(),ut(),vt))};\n_.mg=function(a){vy(this.d,new vK(this,a),(uu(),uu(),vu))};_.ng=function(a){vy(this.d,new wK(this,a),(Au(),Au(),Bu))};_.og=function(a){vy(this.d,new xK(this,a),(Du(),Du(),Eu))};_.pg=function(a){rq(2,new yK(this.b,a))};_.qg=function(){yG(this.b,!0)};_.rg=function(){Jq((Gq(),Hq),new zK(this))};_.sg=function(){var a,b,c;c=[];for(b=new zv(this.d.a);b.ba&&(b.x=a,hH(b,a),AH(b))};_._g=function(a,b){var c=this.b,d;d=GJ(c,a);1>b||b>d.p?(mu(c,"ERROR - invalid atom index: "+b),qF(c)):(d.v=b,TI(c))};\n_.ah=function(a){RJ(this.b,ee,a)};_.bh=function(a,b){RJ(this.b,a,b)};_.le=function(a){hy(this.d,a);fK(this)};_.ch=function(a){this.b.V=a};_.dh=function(a){HJ(this.b,a)};_.eh=function(a){var b=this.b;b.tb=a;AH(b)};_.fh=function(a){var b=this.b;b.wb=a;AH(b)};_.gh=function(a){IJ(this.b,a)};_.hh=function(a){this.b.Pb=a};_.ih=function(a){this.b.Qb=a};_.jh=function(a){var b=this.b;b.Wb=a;b.F=CG(b,!1)};_.kh=function(a){this.b.Yb=a};_.lh=function(a,b){iy(this.d,a,b);fK(this)};\n_.mh=function(a,b,c){c&&iy(this.c,a,b);iy(this.d,a,b);fK(this)};_.nh=function(a,b){jy(this.d,a,b);fK(this)};_.oh=function(a,b,c){c&&jy(this.c,a,b);jy(this.d,a,b);fK(this)};_.ph=function(a){pG(this.b,a)};_.qh=function(a,b){var c=this.b,d;c.q=!1;d=c.sc;c.sc=!1;c.uc=new DJ(c,a);c.sc=d;c.k=253;mu(c,b);qF(c)};_.me=function(a){qy(this.c.pb,a)};_.rh=function(a){this.b.i=a};_.ne=function(a){this.d.pb.style[Fk]=a;fK(this)};_.sh=function(a){YI(this.b,a)};_.th=function(){return UF(this.b)};_.a=-1;_.b=null;\n_.c=null;_.d=null;var kK=0;function zK(a){this.a=a}w(582,1,{},zK);_.pd=function(){var a,b;for(b=new zv(this.a.d.a);b.b=a.c.length)return!1;c=a.c[a.b];g=c.getAttribute(Fk)||n;b=c.getAttribute(Uh)||n;f=c.getAttribute(Ni)||n;e=c.getAttribute(Xh)||n;var h,j,l;l={};for(d=0;d=d&&b=a;return c?65536+((d&1023)<<10)+(e&1023):d}function aL(a,b){return 2>b||36b?b:10)?a-48:97<=a&&aa?-a:a):a}\nfunction dL(a,b){var c;c=new bL;c.d=we+(eL(0!=a?-a:0)?cL(0!=a?-a:0):n+Op(c));fL(0!=a?-a:0)&&gL(0!=a?-a:0,c);c.b=4;c.a=b;return c}function W(a){var b;b=new bL;b.d=we+(eL(a)?cL(a):n+Op(b));fL(a)&&gL(a,b);return b}function hL(a,b){var c;c=new bL;c.d=we+(eL(a)?cL(a):n+Op(c));fL(a)&&gL(a,c);c.b=b?8:0;return c}function iL(){var a;a=new bL;a.d=we+(eL(0)?cL(0):n+Op(a));fL(0)&&gL(0,a);a.b=2;return a}function jL(a){var b;b=new bL;b.d=we+(eL(a)?cL(a):n+Op(b));fL(a)&&gL(a,b);b.b=1;return b}\nfunction fL(a){return typeof a==Ui&&0b||36c||2147483647a)return 0;if(0==a)return 32;b=-(a>>16)>>16&16;c=16-b;a>>=b;b=a-256>>16&8;c+=b;a<<=b;b=a-4096>>16&4;c+=b;a<<=b;b=a-16384>>16&2;c+=b;a=a<>14;return c+2-(a&~(a>>1))}function xw(a){var b,c;if(0==a)return 32;c=0;for(b=1;0==(b&a);b<<=1)++c;return c}function gm(a){var b,c,d;b=D(qL,sl,-1,8,1);c=(rL(),sL);d=7;if(0<=a)for(;15>=4;else for(;0>=4;b[d]=c[a&15];return tL(b,d,8)}\nfunction OH(a){var b,c;return-129a?(b=a+128,c=(uL(),vL)[b],!c&&(c=vL[b]=new uC(a)),c):new uC(a)}w(618,615,{89:1,94:1,100:1,102:1},uC);_.eQ=function(a){return G(a,100)&&a.a==this.a};_.hC=Xw;_.tS=pL;_.a=0;function uL(){uL=x;vL=D(aJ,u,100,256,0)}var vL;function pH(a){return 0>=a?0-a:a}function qH(a){return 0>a?-a:a}function Xm(a,b){return a>b?a:b}function Q(a){return Math.round(a)}function wL(a){return Math.sqrt(a)}function lE(){}function ov(a){this.f=a}\nw(622,136,{89:1,97:1,101:1,105:1,106:1},lE,ov);function rL(){rL=x;sL=z(qL,sl,-1,[48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122])}var sL;function mL(a){this.f=a}w(624,617,{89:1,97:1,99:1,103:1,105:1,106:1},mL);function $K(a,b){return a.charCodeAt(b)}function xL(a,b){return-1!=a.lastIndexOf(b)&&a.lastIndexOf(b)==a.length-b.length}function H(a,b){return!G(b,1)?!1:""+a==b}function my(a,b){return a.indexOf(b)}\nfunction BE(a,b,c){return a.indexOf(b,c)}function zB(a,b){return a.lastIndexOf(b)}function cK(a,b,c){var d;for(d=0;0<=(d=c.indexOf(Yf,d));)36==c.charCodeAt(d+1)?c=c.substr(0,d-0)+Ha+py(c,++d):c=c.substr(0,d-0)+py(c,++d);return a.replace(RegExp(b,Hh),c)}\nfunction yL(a,b){for(var c=RegExp(b,Hh),d=[],e=0,f=a,g=null;;){var h=c.exec(f);if(null==h||f==n){d[e]=f;break}else d[e]=f.substring(0,h.index),f=f.substring(h.index+h[0].length,f.length),c.lastIndex=0,g==f&&(d[e]=f.substring(0,1),f=f.substring(1)),g=f,e++}if(0ga&&a[a.length-1]>ga?a:a.replace(/^(\\s*)/,n).replace(/\\s*$/,n)}function tL(a,b,c){a=a.slice(b,c);return String.fromCharCode.apply(null,a)}\nfunction zL(a,b,c){if(128>c)return a[b]=(c&127)<<24>>24,1;if(2048>c)return a[b++]=(c>>6&31|192)<<24>>24,a[b]=(c&63|128)<<24>>24,2;if(65536>c)return a[b++]=(c>>12&15|224)<<24>>24,a[b++]=(c>>6&63|128)<<24>>24,a[b]=(c&63|128)<<24>>24,3;if(2097152>c)return a[b++]=(c>>18&7|240)<<24>>24,a[b++]=(c>>12&63|128)<<24>>24,a[b++]=(c>>6&63|128)<<24>>24,a[b]=(c&63|128)<<24>>24,4;if(67108864>c)return a[b++]=(c>>24&3|248)<<24>>24,a[b++]=(c>>18&63|128)<<24>>24,a[b++]=(c>>12&63|128)<<24>>24,a[b++]=(c>>6&63|128)<<24>>\n24,a[b]=(c&63|128)<<24>>24,5;throw new Sm("Character out of range: "+c);}function ny(a){var b;return 65536<=a?(b=56320+(a-65536&1023)&65535,String.fromCharCode(55296+(a-65536>>10&1023)&65535)+String.fromCharCode(b)):String.fromCharCode(a&65535)}function AL(a){var b,c,d,e,f;e=a.length;for(d=b=0;dc?++b:2048>c?b+=2:65536>c?b+=3:2097152>c?b+=4:67108864>c&&(b+=5);b=D(BL,rl,-1,b,1);for(d=f=0;da||a>=b)&&UL(a,b)}function UL(a,b){throw new YK("Index: "+a+", Size: "+b);}w(640,633,ql);\n_.Ah=function(){throw new IE("Add not supported on this list");};_.uh=function(a){this.Ah(this.Tf(),a);return!0};_.eQ=function(a){return TL(this,a)};_.hC=function(){var a,b,c;b=1;for(a=this.ye();a.Zd();)c=a.$d(),b=31*b+(null==c?0:Np(c)),b=~~b;return b};_.ye=function(){return new zv(this)};_.Ch=function(){return this.Dh(0)};_.Dh=function(a){return new VL(this,a)};_.Eh=function(){throw new IE("Remove not supported on this list");};function SL(a){return a.b=a.d.Tf())throw new Ry;return a.d.Bh(a.c=a.b++)}function PL(a){if(0>a.c)throw new sB;a.d.Eh(a.c);a.b=a.c;a.c=-1}function zv(a){this.d=a}w(641,1,{},zv);_.Zd=function(){return SL(this)};_.$d=function(){return Av(this)};_._d=function(){PL(this)};_.b=0;_.c=-1;_.d=null;function VL(a,b){var c;this.d=this.a=a;c=a.Tf();(0>b||b>c)&&UL(b,c);this.b=b}w(642,641,{},VL);_.Fh=function(){return 0=this.b)throw new Ry;return this.a.Bh(this.c=--this.b)};_.a=null;\nfunction WL(a){a=new ML(a.b.a);return new XL(a)}function YL(a,b){this.a=a;this.b=b}w(643,635,Il,YL);_.vh=ZL;_.ye=function(){return WL(this)};_.Tf=function(){return this.b.a.d};_.a=null;_.b=null;function XL(a){this.a=a}w(644,1,{},XL);_.Zd=function(){return SL(this.a.a)};_.$d=function(){return(this.a.b=Av(this.a.a)).xh()};_._d=function(){OL(this.a)};_.a=null;function $L(a){a.b=D(aM,u,0,0,0)}function AD(a,b,c){(0>b||b>a.c)&&UL(b,a.c);a.b.splice(b,0,c);++a.c}\nfunction Dm(a,b){nq(a.b,a.c++,b);return!0}function Dx(a,b){eD(b,a.c);return a.b[b]}function AA(a,b){for(var c=0;ca.c&&nq(b,a.c,null);return b}\nfunction Jm(){$L(this)}function jD(a){$L(this);this.b.length=a}function yC(a){$L(this);a=Wv(a.b,a.c);Array.prototype.splice.apply(this.b,[0,0].concat(a));this.c=this.b.length}w(648,640,kl,Jm,jD,yC);_.Ah=function(a,b){AD(this,a,b)};_.uh=function(a){return Dm(this,a)};_.qg=function(){this.b=D(aM,u,0,0,0);this.c=0};_.vh=function(a){return-1!=AA(this,a)};_.Bh=function(a){return Dx(this,a)};_.Qf=function(){return 0==this.c};_.Eh=function(a){return bM(this,a)};_.wh=function(a){return wm(this,a)};_.Tf=At;\n_.c=0;function Iv(){Iv=x;Jv=new cM}var Jv;function cM(){}w(651,640,$l,cM);_.vh=MJ;_.Bh=function(){throw new Oy;};_.Tf=function(){return 0};function dM(){this.a=new Date}function eM(a){return 10>a?Fc+a:n+a}w(654,1,{89:1,93:1,94:1,107:1},dM);_.eQ=function(a){return G(a,107)&&Gw(J(this.a.getTime()),J(a.a.getTime()))};\n_.hC=function(){var a;a=J(this.a.getTime());var b,c,d,e;c=32;d=a.h&1048575;22>c?(e=d>>>c,b=a.m>>c|d<<22-c,c=a.l>>c|a.m<<22-c):44>c?(e=0,b=d>>>c-22,c=a.m>>c-22|a.h<<44-c):(b=e=0,c=d>>>c-44);b=ow(c&4194303,b&4194303,e&1048575);a=ow(a.l^b.l,a.m^b.m,a.h^b.h);return P(a)};\n_.tS=function(){var a,b;b=-this.a.getTimezoneOffset();a=(0<=b?jb:n)+~~(b/60);b=10>(0>b?-b:b)%60?Fc+(0>b?-b:b)%60:n+(0>b?-b:b)%60;return(fM(),gM)[this.a.getDay()]+ga+hM[this.a.getMonth()]+ga+eM(this.a.getDate())+ga+eM(this.a.getHours())+bd+eM(this.a.getMinutes())+bd+eM(this.a.getSeconds())+" GMT"+a+b+ga+this.a.getFullYear()};_.a=null;function fM(){fM=x;gM=z(hw,u,1,"Sun,Mon,Tue,Wed,Thu,Fri,Sat".split(","));hM=z(hw,u,1,"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(","))}var gM,hM;\nfunction xv(a,b){return null==E(a.a,b,a)}function wv(){this.a=new xp}w(656,635,{89:1,93:1,112:1},wv);_.uh=function(a){return xv(this,a)};_.vh=ZL;_.Qf=function(){return 0==this.a.d};_.ye=function(){return WL(new YL(this.a,new NE(this.a)))};_.wh=function(a){return null!=Hv(this.a,a)};_.Tf=NL;_.tS=function(){return KL(new YL(this.a,new NE(this.a)))};_.a=null;function FE(a,b){this.a=a;this.b=b}w(660,638,Gl,FE);_.xh=Xw;_.yh=Bz;_.zh=function(a){var b;b=this.b;this.b=a;return b};_.a=null;_.b=null;\nfunction Ry(){}w(661,136,{89:1,97:1,105:1,106:1,111:1},Ry);function iM(a){var b,c;b=a.b;c=a.d.length;if(ba.j&&(++a.j,a.p[a.j]=b)}function qM(a){var b;b=new hJ;b.f=a.f;b.d=a.d;b.q=a.q;b.r=a.r;b.s=a.s;b.n=a.n;b.e=a.e;b.p=a.p.slice();b.j=a.j;b.c=a.c;b.a=a.a;b.b=a.b;b.i=a.i;b.o=a.o;b.k=a.k;return b}function II(a){return-99199!=a.f?a.f:0}function rM(a){return 4<=a.o&&2==a.j}\nfunction wG(a,b,c){a.q+=b;a.r+=c}function nG(a){var b;b=-99199!=a.f;a.f=-99199;return b}function hJ(){oM();this.p=iH(7)}w(681,1,{115:1},hJ);_.a=3;_.b=null;_.c=0;_.d=0;_.e=null;_.f=-99199;_.i=0;_.j=0;_.k=0;_.n=0;_.o=0;_.q=0;_.r=0;_.s=0;var pM;function tJ(a,b){var c;c=sM(a);return 0\\\\.]+$",2);DM=new nM("\\\\s+",2)}\nfunction TH(a){AM();var b,c,d,e;this.i=this.f=null;this.j=0;this.e=!1;this.a=this.c=null;var f,g,h;if(null==a||0==a.length)c=0;else{g=1;f=a.length;for(h=0;h=this.j?this.b=oy(a):this.b=a;c=new lM(DM,this.b);this.d=c.b.a.test(c.a);do if(4a.indexOf("j")&&((this.e=0=f.length)e=0;else{for(h=0,j=f.length;ho&&(o=0.001);r=g/o;e=f/o;l=iH(4);for(h=0;4>h;++h)d[h]==c||0>=d[h]||(0==l[1]?l[1]=d[h]:0==l[2]?l[2]=d[h]:0==l[3]&&(l[3]=d[h]));m=iH(4);d=iH(4);for(h=1;3>=h;++h)3==h&&0==l[3]||(f=(a.b[l[h]].q-a.b[b].q)*e+(a.b[l[h]].r-a.b[b].r)*r,g=(a.b[l[h]].r-a.b[b].r)*e-(a.b[l[h]].q-a.b[b].q)*r,o=Math.sqrt(f*f+g*g),0.001>o&&(o=0.001),m[h]=g/o,d[h]=f/o);a=gN(m[1],d[1],m[2],d[2]);0b?(j[1]=l[1],j[2]=l[3],j[3]=l[2]):0>a&&0d?(j[1]=l[2],j[2]=l[3],j[3]=l[1]):0>d&&0b&&0>a&&(j[1]=l[3],j[2]=l[2],j[3]=l[1])):0j&&(j=0.001);g/=j;f/=j;l=j+25*Math.cos(1.0471975511965976);o=25*Math.sin(1.0471975511965976);h=jJ(a,b,d);if(3==a.c[h].c||204==a.k.k||1!=a.c[h].c&&(203==a.k.k||204==a.k.k)||a.n)l=j+25,o=0;0o?o=-o:0>c&&0j&&(j=0.001),SI(a,a.p,a.b[b].q+25*f/j,a.b[b].r+25*g/j),0==XI(a,a.p,1,a.p)||h==a.b[b].j);++h);break;default:return--a.p,mu(a.k,"Are you trying to draw an hedgehog ?"),a.k.cb=9,!1}b=iJ(a,a.v,a.p,1);203==a.k.k&&(b.c=2);204==a.k.k&&\n(b.c=3);201==a.k.k&&QI(a,a.q);a.z=a.b[a.p].q;a.A=a.b[a.p].r;return e}function KI(a,b){var c,d;if(!b||0==b.c)return n;d=n;d+="M V30 BEGIN COLLECTION"+(FF(),ea);d+=nf+a+" [ATOMS=("+b.c;for(c=new zv(b);c.bj&&(j=0.001);1>pH((a.b[b].r-a.b[e].r)*(g/j)+(a.b[b].q-a.b[e].q)*(h/j))?(g=a.b[b].q-a.b[e].q,h=a.b[b].r-a.b[e].r,j=Math.sqrt(g*g+h*h),0.001>j&&(j=0.001),b=h/j,g/=j,d[0]=a.b[e].q+j*g-c*b,d[1]=a.b[e].r+c*g+j*b):(g=(a.b[e].q+a.b[f].q)/2,e=(a.b[e].r+a.b[f].r)/2,g=a.b[b].q-g,h=a.b[b].r-e,j=Math.sqrt(g*g+h*h),0.001>j&&(j=0.001),d[0]=a.b[b].q+c*g/j,d[1]=a.b[b].r+c*h/j)}\nfunction BI(a){var b,c,d,e,f,g,h,j,l,o,m,r,t,y;o=-1;j=6;switch(a.k.k){case 206:j=3;break;case 207:j=4;break;case 208:case 221:case 223:j=5;break;case 210:case 209:j=6;break;case 211:j=7;break;case 212:j=8;break;case 229:j=9}f=6.283185307179586/j;l=wL(312.5/(1-Math.cos(f)));if(0a.b[a.v].j)nN(a,j,f,l);else if(!a.k.Bb&&!a.k.rc)o=a.v,CI(a,a.v,0),a.v=a.p,nN(a,j,f,l);else{a.k.rc=!1;if(209==a.k.k||221==a.k.k||223==a.k.k){mu(a.k,"ERROR - cannot add aromatic spiro ring !");a.k.cb=9;return}for(d=\n1;d<=a.b[a.v].j;++d)if(b=a.c[jJ(a,a.v,a.b[a.v].p[d])].c,2m&&(m=0.001);g/=m;e/=m;for(d=1;d<=j;++d)h=RI(a,null),r=f*d+1.5707963267948966,WI(h,b[0]+l*(Math.sin(r)*e-Math.cos(r)*g),b[1]+l*(Math.cos(r)*e+Math.sin(r)*g))}else if(0m&&(m=0.001);g/=m;e/=m;h=m/2;r=l*Math.sin(0.5*(3.141592653589793-f));m=1;0<(a.b[d].r-a.b[b].r)*e-(a.b[d].q-a.b[b].q)*g&&(r=-r,m=0);t=a.b[b].q+h*e-r*g;y=a.b[b].r+r*e+h*g;for(d=1;d<=j;++d)h=RI(a,null),r=f*(d+0.5)+3.141592653589793*m,WI(h,t+l*(Math.sin(r)*e-Math.cos(r)*g),y+l*(Math.cos(r)*e+Math.sin(r)*g)),1==m?(d==j&&WI(h,a.b[b].q,a.b[b].r),\nd==j-1&&WI(h,a.b[c].q,a.b[c].r)):(d==j-1&&WI(h,a.b[b].q,a.b[b].r),d==j&&WI(h,a.b[c].q,a.b[c].r))}else{b=0.5;6==j&&(b=0);for(d=1;d<=j;++d)h=RI(a,null),r=f*(d-b),WI(h,a.z+l*Math.sin(r),a.A+l*Math.cos(r))}b=j;l=0;for(f=1;f<=b;++f)eJ(a,null),l=a.p-b+f,a.b[l].j=2,a.c[a.q].i=l,a.c[a.q].j=l+1;a.c[a.q].j=a.p-b+1;if(209==a.k.k){if(a.c[a.q-4].c=2,a.c[a.q-2].c=2,a.c[a.q].c=2,0e&&ed;--f)if(0g&&(g=0.001),e/=g,f/=g);l=a.b[a.v].q+d*f;o=a.b[a.v].r+d*e;for(g=1;g<=b;++g)h=RI(a,null),j=c*g-1.5707963267948966,WI(h,l+d*(Math.sin(j)*f-Math.cos(j)*e),o+d*(Math.cos(j)*f+Math.sin(j)*e))}function mN(a,b){var c,d;0==b&&(b=a.p);for(c=a.p;c>a.p-b;--c)d=XI(a,c,1,a.p),0!=d&&wG(a.b[c],6,6)}\nfunction jJ(a,b,c){var d,e,f;for(e=1;e<=a.q;++e)if(d=a.c[e],f=d.i,d=d.j,f==b&&d==c||f==c&&d==b)return e;return 0}function MH(a){var b;for(b=1;b<=a.q;++b)if(1==a.c[b].c&&0=c||0>=d?a.s=!0:(b=sG(a),c=c/2-b.a,b=d/2-b.b,a.k.Ob||ZI(a,c,b),xG(a))}\nfunction xI(a,b,c){var d,e,f;if(1==c)return a.b[b].n+=1,!0;if(-1==c)return a.b[b].n+=-1,!0;e=a.b[b].n;f=a.b[b].i;d=a.b[b].o;-1==d&&0==c&&(0==a.b[b].n?a.b[b].n=1:1==a.b[b].n?a.b[b].n=-1:-1==a.b[b].n&&(a.b[b].n=0));switch(a.b[b].a){case 1:0==d&&(0==a.b[b].n?a.b[b].n=1:1==a.b[b].n?a.b[b].n=-1:a.b[b].n=0);break;case 2:2d&&(0==\na.b[b].n?a.b[b].n=-1:-1==a.b[b].n?a.b[b].n=1:1==a.b[b].n&&(a.b[b].n=0));break;case 4:case 7:3d&&0==a.b[b].n?a.b[b].n=1:3>d&&1==a.b[b].n?a.b[b].n=-1:3>d&&-1==a.b[b].n&&(a.b[b].n=0);break;case 5:case 8:case 13:2d&&0==a.b[b].n?a.b[b].n=-1:\n2>d&&-1==a.b[b].n?a.b[b].n=1:2>d&&1==a.b[b].n&&(a.b[b].n=0);break;case 9:case 10:case 11:case 12:0==d&&0==a.b[b].n?a.b[b].n=-1:0==d&&-1==a.b[b].n?a.b[b].n=0:mu(a.k,"Charge change not possible on the halogen !");break;case 32:mu(a.k,"Use X button to change charge on the X atom !")}if(0e&&eb?e=2:0>a&&0>b?e=3:0>a&&0<=b&&(e=4);0<=c&&0<=d?f=1:0<=c&&0>d?f=2:0>c&&0>d?f=3:0>c&&0<=d&&(f=4);if(ef)return-1;switch(e){case 1:case 4:return ac?1:-1}return 0}function vJ(a){oN(a);xG(a);wJ(a)}\nfunction sG(a){var b,c,d,e,f,g;b=new yM;f=9999;d=-9999;g=9999;e=-9999;for(c=1;c<=a.p;++c)a.b[c].qd&&(d=a.b[c].q),a.b[c].re&&(e=a.b[c].r);b.a=f+(d-f)/2;b.b=g+(e-g)/2;b.c=d-f;b.d=e-g;25>b.c&&(b.c=25);25>b.d&&(b.d=25);return b}function lN(a,b,c){var d,e;e=0;for(d=1;d<=a.p;++d)d>=b&&d<=c||0!=XI(a,d,b,c)&&++e;return e}function iJ(a,b,c,d){var e;e=eJ(a,null);fJ(a.b[b],c);fJ(a.b[c],b);e.i=b;e.j=c;lJ(e,a.b);e.c=d;return e}\nfunction RI(a,b){++a.p;b?a.b[a.p]=qM(b):a.b[a.p]=new hJ;return a.b[a.p]}function oH(a,b,c,d,e,f){var g;g=a.b[b].q-c/2;f||(g-=d-c);a=a.b[b].r-~~(e/2);return new pN(g-1-2,a-2,d+1+4,e+4)}function eJ(a,b){var c;++a.q;c=new wM;b&&xM(c,b);return a.c[a.q]=c}\nfunction FI(a,b,c){var d,e,f,g,h,c=HI(a,b,c,!1);e=-1.7976931348623157E308;d=1.7976931348623157E308;for(b=1;b<=a.p;++b)a.b[b].r>e&&(e=a.b[b].r),a.b[b].qa.b[b].n?f=4-a.b[b].n:0>a.b[b].n&&-4=g&&(h=g)),\ng=EI(h,2)+EI(f,3)+" 0 0 0 0 0 0 0",f=pJ(a,b),g+=EI(f,3),c+=g+ja+(FF(),ea);for(b=1;b<=a.q;++b)d=a.c[b],g=e=d.c,1==a.c[b].c?g=1:2==a.c[b].c&&(g=2),f=EI(d.i,3)+EI(d.j,3),h=0,1==e&&1==d.f?h=1:1==e&&2==d.f&&(h=6),1==e&&3==d.f&&(h=1,f=EI(d.j,3)+EI(d.i,3)),1==e&&4==d.f&&(h=6,f=EI(d.j,3)+EI(d.i,3)),c+=f+EI(g,3)+EI(h,3)+ka+(FF(),ea);for(b=1;b<=a.p;++b)0!=a.b[b].n&&(c+="M CHG 1"+EI(b,4)+EI(a.b[b].n,4)+(FF(),ea)),0!=a.b[b].d&&(c+="M ISO 1"+EI(b,4)+EI(a.b[b].d,4)+(FF(),ea));return c+=ff+(FF(),ea)}\nfunction YF(a,b){var c,d,e,f,g,h,j;g=j=0;for(h=1;h<=a.q;++h)e=a.c[h],c=e.i,d=e.j,c!=b&&d!=b?(++j,f=a.c[j],xM(f,e),f.i=c,c>b&&--f.i,f.j=d,d>b&&--f.j):g+=e.c;a.q=j;for(h=b;hb&&--c,a.b[h].p[++d]=c);a.b[h].j=d}}\nfunction $F(a,b){var c,d,e,f;c=a.c[b].i;d=a.c[b].j;for(e=b;ea.b[b].a&&0==a.b[d].d){if(0!=(-99199!=a.b[d].f?a.b[d].f:0))continue a;b=jJ(a,d,b);if(1==a.c[b].c&&(0==a.c[b].f||!a.k.tc))YF(a,d),c=!0}return c}function qN(a,b){var c,d,e,f,g;g=z(B,q,-1,[0,0]);for(e=1,f=0;e<=a.b[b].j;++e)c=a.b[b].p[e],d=jJ(a,b,c),2!=a.c[d].c&&(g[f++]=c);return g}\nfunction oN(a){var b,c,d;for(d=1;d<=a.p;++d)a.b[d].j=0;for(d=1;d<=a.q;++d)b=a.c[d].i,c=a.c[d].j,fJ(a.b[b],c),fJ(a.b[c],b)}\nfunction sJ(a,b,c){var d,e,f,g,h,j,l,o,m;a.d=iH(a.q+1);m=[];for(j=1;j<=a.p;++j){m[j]=!1;b[j]=!1;a:{d=void 0;for(d=1;d<=a.b[j].j;++d)if(c[jJ(a,j,a.b[j].p[d])]){d=!0;break a}d=!1}if(d&&!(3d&&(d=c);return d}\nfunction nH(a,b){var c;c=(FF(),MF)[a.b[b].a];32==a.b[b].a&&(c=a.b[b].e);return c}function kJ(a,b){a.b[b].j+=-1}function tH(a,b,c){var d,e,f,g,h;h=1;a.a=iH(a.p+1);for(e=a.a[b]=1;e<=a.b[b].j;++e)d=a.b[b].p[e],d!=c&&(a.a[d]=++h);for(g=!1;;){for(d=1;d<=a.p;++d){g=!1;if(0~~(c/2)+24?3:2}function gG(a,b){var c,d,e,f,g,h,j;c=sG(a);d=c.a;e=c.b;g=Math.sin(3.141592653589793*b/180);c=Math.cos(3.141592653589793*b/180);for(f=1;f<=a.p;++f)h=a.b[f].q*c+a.b[f].r*g,j=-a.b[f].q*g+a.b[f].r*c,WI(a.b[f],h,j);c=sG(a);ZI(a,d-c.a,e-c.b)}\nfunction nJ(a){var b,c,d,e,f;e=f=0;for(d=1;d<=a.q;++d)b=a.b[a.c[d].i].q-a.b[a.c[d].j].q,c=a.b[a.c[d].i].r-a.b[a.c[d].j].r,f+=Math.sqrt(b*b+c*c);0=g;++g)if(H(f,(FF(),MF)[g])){f=g;break b}f=32}zI(a,b,f);32==a.b[b].a&&(a.b[b].e=d);c+=\nga;d=0;0=e&&(d=e-48));32==a.b[b].a&&(a.b[b].i=d)}}}function jI(a,b,c){var d,e;a.i=1;c&&(a.i=-1);b=new XE(b);try{for(;b.j=QE(b,b.a),b.jc||6a.b[c].j&&2>a.b[d].j)e.f=0,mu(a.k,"Stereomarking meaningless on this bond !");else switch(e.f){case 0:a.b[d].j<=a.b[c].j?e.f=1:e.f=3;break;case 1:e.f=2;break;case 2:2h||3c[b]&&(j=f,f=b,b=j);j=qN(a,f);h=j[0];l=j[1];e=0;o=!1;0c[l]&&(j=h,h=l,l=j);j=jJ(a,f,h);0!=d[j]?e=h:1==a.c[j].c&&5!=a.d[j]&&(e=h);0==e&&0c[f]&&(o=!0);j=qN(a,b);l=j[0];g=j[1];h=0;0g&&(g=0.001),j/=g,g=l/g,l=(a.b[e].r-a.b[f].r)*g-(a.b[e].q-a.b[f].q)*j,t=(a.b[h].r-a.b[f].r)*g-(a.b[h].q-a.b[f].q)*j,2>(0>=l?0-l:l)||2>(0>=t?0-t:t))mu(a.k,"Not unique E/Z geometry !");else{g=\njJ(a,e,f);h=jJ(a,h,b);r=1;if(0==d[g]){for(m=1;m<=a.b[e].j;++m)if(b=a.b[e].p[m],b!=f&&(j=jJ(a,e,b),0!=d[j])){c[b]>c[e]?r=-d[j]:r=d[j];break}d[g]=r}0==d[h]&&(0l&&0>t?d[h]=-d[g]:d[h]=d[g],o&&(d[h]=-d[h]))}}}function yJ(a,b,c){var d;d=a.c[b].f;return 1>d||4g?e.i=3-g-c.b[d].n:4==g?(c.b[d].n=-1,e.i=0):5g?0c.b[d].n?e.i=2-g-c.b[d].n:e.i=4-g:(c.b[d].n=g-4,e.i=4-g+c.b[d].n);break;case 4:case 7:3>g?e.i=3-g+c.b[d].n:3==g?0>c.b[d].n?(c.b[d].n=0,e.i=0):0c.b[d].n?(c.b[d].n=0,e.i=0):0g?e.i=2-g+c.b[d].n:2==g?0>c.b[d].n?(c.b[d].n=0,e.i=0):0f;)if(0e.i&&(e.i=0)}}}function zG(a){dN(this);this.b[0]=new hJ;this.t=this.q=this.p=0;this.k=a}\nfunction iI(a,b){var c,d,e,f,g,h,j,l,o;zG.call(this,a);if(null!=b&&(f=n,l=gI(b),null!=l)){o=new WE(b,l,!0);for(g=1;4>=g;++g)f=hI(o,l);e=OH(DE(oy(f.substr(0,3)),10)).a;j=OH(DE(oy(f.substr(3,3)),10)).a;g=0;try{g=OH(DE(oy(f.substr(14,1)),10)).a}catch(m){if(m=xq(m),!G(m,97))throw m;}hG(this,(iG(),1==g?jG:kG));for(g=1;g<=e;++g){d=RI(this,null);f=hI(o,l);d.q=(new nL(kL(oy(f.substr(0,10))))).a;d.r=-(new nL(kL(oy(f.substr(10,10))))).a;d=34;34>f.length&&(d=f.length);d=oy(f.substr(31,d-31));AI(this,g,d);62<=\nf.length&&(h=oy(f.substr(60,3)),0=h))){var r=void 0,r=sM(d);d=0d&&(d=0);this.b[g].d=d}if(39<=f.length&&(h=oy(f.substr(37,2)),0=h))){f=0;switch(h){case 1:f=3;break;case 2:f=2;break;case 3:f=1;break;case 4:f=0;break;case 5:f=-1;break;case 6:f=-2;break;case 7:f=-3}this.b[g].n=f}}for(g=1;g<=j;++g)e=eJ(this,null),f=\nhI(o,l),e.i=OH(DE(oy(f.substr(0,3)),10)).a,e.j=OH(DE(oy(f.substr(3,3)),10)).a,d=OH(DE(oy(f.substr(6,3)),10)).a,1==d?c=1:2==d?c=2:3==d?c=3:c=9,h=0,11b.length)this.p=0;else{try{j=new VE(b);g=OH(DE(TE(j),10)).a;h=OH(DE(TE(j),10)).a;for(f=1;f<=g;++f)o=TE(j),c=(m=RI(this,null),AI(this,this.p,o),m),c.q=(new nL(kL(TE(j)))).a,c.r=-(new nL(kL(TE(j)))).a;for(f=1;f<=h;++f){d=eJ(this,null);d.i=OH(DE(TE(j),10)).a;d.j=OH(DE(TE(j),10)).a;e=OH(DE(TE(j),10)).a;l=0;if(-1==e)l=e=1;else if(-2==e)e=1,l=2;else if(-5==e)e=2,l=10;else if(11==\ne||12==e||13==e||14==e)l=e,e=9;d.c=e;d.f=l}oN(this);nJ(this);vG(this)}catch(r){r=xq(r);if(G(r,97)){r.yd();this.p=0;return}throw r;}a&&!a.bb&&oG(this);vJ(this)}}function lI(a,b,c){var d,e,f,g;zG.call(this,a);g=iH(b.p+1);for(e=1;e<=b.p;++e)b.a[e]==c&&(RI(this,b.b[e]),g[e]=this.p);for(e=1;e<=b.q;++e)if(a=b.c[e].i,d=b.c[e].j,!(b.a[a]!=c&&b.a[d]!=c)&&!(b.a[a]!=c||b.a[d]!=c))f=eJ(this,b.c[e]),f.i=g[a],f.j=g[d];this.i=b.i;oN(this)}\nfunction rN(a,b,c){var d,e,f;zG.call(this,a);f=iH(b.p+1);for(d=1;d<=b.p;++d)b.b[d].k==c&&(RI(this,b.b[d]),f[d]=this.p);for(d=1;d<=b.q;++d)a=b.c[d],a.e==c&&(e=eJ(this,a),e.i=f[a.i],e.j=f[a.j]);hG(this,b.f);this.i=b.i;oN(this)}\nfunction GI(a,b,c){var d,e,f,g;zG.call(this,a);for(a=1;a<=c;++a)this.p+=b[a].p,this.q+=b[a].q,this.t+=b[a].t,b[a].f.a&&hG(this,(iG(),iG(),jG));this.b=D(eN,u,115,this.p+1,0);this.c=D(fN,u,116,this.q+1,0);f=g=e=0;for(a=1;a<=c;++a){for(d=1;d<=b[a].p;++d)++e,this.b[e]=qM(b[a].b[d]);for(d=1;d<=b[a].q;++d)++g,this.c[g]=vM(b[a].c[d]),this.c[g].i+=f,this.c[g].j+=f;f=e}oN(this)}\nfunction WF(a){var b;dN(this);this.k=a.k;this.p=a.p;this.q=a.q;this.t=a.t;this.b=D(eN,u,115,this.p+1,0);for(b=0;b(0>=a?0-a:a)&&(a=0);a=P(J(Q(a*Math.pow(10,c))))/Math.pow(10,c);e=n+(new nL(a)).a;d=my(e,ny(46));0>d&&(e+=lc,d=my(e,ny(46)));f=e.length;for(a=1;a<=c-f+d+1;++a)e+=Fc;if(0==b)return e;e.length>b&&(e=Gd);c=n;for(a=1;a<=b-e.length;++a)c+=ga;return c+e}function gI(a){var b;b=new WE(a,ea,!0);if(4b&&(d=Gd);e=n;for(c=1;c<=b-d.length;++c)e+=ga;return e+d}function hI(a,b){for(var c,d;a.j=QE(a,a.a),a.j>16&255)),dw(0.7*(g.d>>8&255)),dw(0.7*(g.d&255))),gH(a.a,g)):(h=new km(dw(0.7*(g.d>>16&255)),dw(0.7*(g.d>>8&255)),dw(0.7*(g.d&255))),f=UC(g),gH(a.a,h));g=P(J(Q(R)));d=P(J(Q(d*R)));e=P(J(Q(e*R)));b=P(J(Q(b*R)));c=P(J(Q(c*R)));d-=g;e-=g;PG(a.a,b+g,c+g,d-g,e-g);gH(a.a,h);PG(a.a,b,c,d,g);PG(a.a,b,c+g,g,e);gH(a.a,f);PG(a.a,b+d,c,g,e+g);PG(a.a,b+1,c+e,d,g)}\nfunction KG(a,b,c,d,e){a=a.a;b=P(J(Q(b*R)));c=P(J(Q(c*R)));d=P(J(Q(d*R)));e=P(J(Q(e*R)));LG(a,!0);MG(a,NG(a,b,c,d,e))}function VG(a,b,c,d){var e,f,g;f=D(B,q,-1,d,1);g=D(B,q,-1,d,1);for(e=0;e=b||b>=oC(this.a)-1||0>=c||c>=pC(this.a)-1)&&(this.a.j=!1);this.a.j?UI(this.a.c,a,b,c):PH(this.a.c,a,b,c);this.a.pb.focus()};_.a=null;function ON(a){this.a=a}w(732,1,{},ON);_.od=function(){this.a.j=!1;bJ(this.a.c)};_.a=null;function PN(a){this.a=a}\nw(733,1,{},PN);_.nd=function(){this.a.j&&(this.a.j=!1)};_.a=null;function QN(a){this.a=a}w(734,1,{},QN);_.a=null;function RN(a){this.a=a}w(735,1,{},RN);_.a=null;function DN(){BN.call(this);this.pb.style[Fk]=Kc;this.pb.style[Uh]=Kc}w(736,727,ll,DN);function SN(a){this.a=a}w(737,1,{},SN);_.Ud=function(){Jq((Gq(),Hq),new UN(this))};_.a=null;function UN(a){this.a=a}w(738,1,{},UN);_.pd=function(){this.a.a.c&&(mC(this.a.a.c),QJ(this.a.a))};_.a=null;\nfunction VN(a,b){var c;c=b.a;c.e=4;return LI(a.a.c,c,b.d,b.e)}function FN(a){this.a=a}w(739,1,{},FN);_.Lh=function(a){return VN(this,a)};_.a=null;function fv(a,b){PH(a.a.c,b.a,b.d,b.e);return LI(a.a.c,b.a,b.d,b.e)}function GN(a){this.a=a}w(740,1,{},GN);_.Lh=function(a){return fv(this,a)};_.a=null;function HN(a){this.a=a}w(741,1,{},HN);_.Lh=function(a){return UI(this.a.c,a.a,a.d,a.e)};_.a=null;function IN(a){this.a=a}w(742,1,{},IN);_.Lh=function(){return bJ(this.a.c)};_.a=null;\nfunction Yt(a,b){var c;c=J(Q(b.b));c=new iE(b,0,Aj,c);cG(a.a.c,c);return!0}function JN(a){this.a=a}w(743,1,{},JN);_.Lh=function(a){return Yt(this,a)};var WN=_.a=null;function XN(){XN=x;WN=new Qw((gx(),new fx("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAEklEQVR42mM4MzPtPzJmIF0AAOqfLKHtSuV7AAAAAElFTkSuQmCC")),4,4)}function YN(){YN=x;ZN={}}\nfunction $N(a,b,c){var d;c&&(b.style[Ch]=c.b+oj,d=c.a,d!=Ie&&(b.style[Bh]=d),0!=(c.c&1)&&(b.style[Eh]=Eg),0!=(c.c&2)&&(b.style[Dh]=$h));a.e.style[Ek]=Si}\nfunction qD(a){var b=aO,c,d,e,f,g,h,j,l,o,m,r,t,y;c=Op(a);c in ZN?a=ZN[c]:(d=$doc.getElementsByTagName("body")[0],e=$doc.createElement(Sj),f=$doc.createElement(Yh),f.style[oh]=(Ur(),"inline"),f.style[Bk]=(Ks(),"baseline"),f.style[pi]=Gc,f.style[qi]=Gc,f.width=1,f.height=1,g=(XN(),WN),f.src=g.d.a,a=(h=$doc.createTextNode(zf),$N(b,e,a),e.appendChild(h),e.appendChild(f),d.appendChild(e),j=br(e),l=br(e)+(e.offsetHeight||0),o=l-j,m=br(f)+(f.offsetHeight||0)+1,r=l-m,t=m-j,d.removeChild(e),y=new bO,y.a=\nt,y.b=r,y.c=o,y),ZN[c]=a);return a}function cO(){YN();var a,b,c,d,e;ps();this.a=z(hw,u,1,["monospace","sans-serif",Lj]);this.c={};this.b={};this.d=$doc.getElementsByTagName("body")[0];this.e=$doc.createElement(Sj);this.e.innerHTML=this.f||n;this.e.style[Ch]="72.0px";for(b=this.a,c=0,d=b.length;c=g?h=NG(a,b,c,d,e):h=(j=f+g,l=0,jg)&&(o=1),m=b+d/2,r=c+e/2,t=d/2,y=e/2,v=iO(m,r,t,y,f),s=iO(m,r,t,y,j),A=" text { cursor: default; } <\/style>":n;b=c+d+b+ud;b!==a.q&&(a.t.pb.innerHTML=\nb||n,a.q=b);a.o=!0;a.p=!1}}function gH(a,b){(a.e=b)&&(a.f=jO(b))}function JJ(a,b){var c,d,e;a.i=(c=b.b,d=b.a,e=n,12!=c&&(e=\' font-size="\'+c+\'px"\'),"Plain"!=d&&(e+=\' font-family="\'+d+na),0!=(b.c&1)&&(e+=\'font-weight="bold"\'),0!=(b.c&2)&&(e+=\'font-style="italic"\'),e)}function fH(a,b){(a.n=b)&&b&&(a.c=\'stroke-width="\'+(b.e==dw(b.e)?n+dw(b.e):n+b.e)+oa)}w(754,498,{});_.d=null;_.e=null;_.f=Bg;_.i=null;_.j=!0;_.k=null;_.o=!1;_.p=!1;_.q=n;_.r=0;_.s=0;_.t=null;_.u=null;var hO,gO;\nfunction bv(a,b){var c;c=b.a.targetTouches;return 1==c.length?(c=c[0],a.b.d=c.clientX-ar(a.o.pb)+(a.o.pb.scrollLeft||0)+fr(a.o.pb.ownerDocument),a.b.e=c.clientY-br(a.o.pb)+(a.o.pb.scrollTop||0)+gr(a.o.pb.ownerDocument),a.b.a=new TN(b),b.a.preventDefault(),!0):!1}\nfunction EN(a){this.o=a;this.b=new kO;this.c=new lO(this);vy(this.o,new mO(this),(cv(),cv(),dv));vy(this.o,new nO(this),(Vu(),Vu(),Wu));vy(this.o,new oO(this),(Zu(),Zu(),$u));vy(this.o,new pO(this),(Ru(),Ru(),Su));vy(this.o,new qO,(du(),du(),eu));vy(this.o,new rO(this),($t(),$t(),au));vy(this.o,new sO(this),(Vt(),Vt(),Wt))}w(755,1,{},EN);_.a=null;_.b=null;_.c=null;_.d=!1;_.e=null;_.f=null;_.i=null;_.j=null;_.k=null;_.n=null;_.o=null;function lO(a){Lm();this.a=a}w(756,65,{},lO);\n_.vd=function(){!this.a.d&&this.a.i&&VN(this.a.i,this.a.b)};_.a=null;function mO(a){this.a=a}w(757,1,{},mO);_.a=null;function nO(a){this.a=a}w(758,1,{},nO);_.a=null;function oO(a){this.a=a}w(759,1,{},oO);_.a=null;function pO(a){this.a=a}w(760,1,{},pO);_.a=null;function qO(){}w(761,1,{},qO);function rO(a){this.a=a}w(762,1,{},rO);_.a=null;function sO(a){this.a=a}w(763,1,{},sO);_.a=null;function kO(){}w(764,1,{},kO);_.a=null;_.b=0;_.c=0;_.d=0;_.e=0;\nfunction jO(a){var b,c;c=a.d>>16&255;b=a.d>>8&255;a=a.d&255;if(0==c*b*a){if(0==c&&0==b&&0==a)return Bg;if(255==c&&0==b&&0==a)return"red";if(0==c&&255==b&&0==a)return"green";if(0==c&&0==b&&255==a)return Cg}return 255==c&&255==b&&255==a?"white":yj+c+kb+b+kb+a+hb}function $J(){var a=$wnd.navigator.userAgent.match(/MSIE\\s+(\\d+\\.\\d+)/);return a?parseFloat(a[1]):-1}\nfunction tO(a){var b,c,d,e,f;By(a);d=(Cy(),RA(null));e=new eO;Yz(e,a);Ly(d,e,d.pb);f=a.he();b=a.ge();c=$J();9<=c?(++f,++b):7==c&&G(a,39)&&(c=a.pb.textContent,2>=c.length&&(f+=8));$z(e,a);Uy(d,e);return new JB(f,b)}function dF(a){try{$wnd.console.log(a)}catch(b){}}function uO(){this.pb=$doc.createElement(ph);this.pb[Tg]=bi;this.pb.style[cj]=Vh;this.pb.style[lj]=gg;this.pb.style[Fk]=Kc;this.pb.style[Uh]=Kc;this.pb.setAttribute("contenteditable",zh)}w(766,380,pl,uO);\nfunction iO(a,b,c,d,e){e*=0.017453292519943295;a+=c*Math.cos(e);b+=-d*Math.sin(e);return new dO(new nL(a),new nL(b))}function NG(a,b,c,d,e){return\'=f.k||(701==f.k?null.ei():401==f.k||402==f.k?(null.ei(),null.ei(),null.ei(),null.ei(),null.ei()):500<=f.k&&507>=f.k&&(g=null.fi,500!=g&&(g=new lu(null.fi,g,null),g.i=f.f,g.j=f.i,f=f.j&63,g.e=f&12)))}function yO(a){this.a=a}w(776,1,Dl,yO);_.pd=function(){BA(this)};_.a=null;function QD(){vO();xO.call(this);this.a=new eB}w(777,769,{},QD);_.If=Xw;_.a=null;function TD(){new wv;var a;a:{switch(ew){case 1:case 3:case 5:case 7:a=new AO;break a}a=new BO}this.a=a}w(790,522,{},TD);_.a=null;\nfunction BO(){}w(792,1,{},BO);_.ai=function(a){a&&a&&rq(8,new CO(a));return null};_.bi=function(a){rq(8,new DO(a))};function AO(){}w(791,792,{},AO);_.ai=function(){return $wnd.clipboardData.getData("Text")};_.bi=function(a){$wnd.clipboardData.setData("Text",a)};function CO(a){this.a=a}w(795,1,Ul,CO);_.zd=XB;_.a=null;function DO(a){this.a=a}w(797,1,Ul,DO);_.zd=XB;_.a=null;function Ut(a,b){a.onloadend=function(a){b.Xf(a.target.result)}}function lF(a){this.a=a}w(802,1,{},lF);_.a=null;\nfunction iF(){}w(803,1,{},iF);function jF(){}w(804,1,{},jF);function kF(){}w(805,1,{},kF);function RD(){this.b=new UD;this.d=new wC}w(808,520,{},RD);function NH(a,b,c,d){b=DB(b);c+=b.a;d+=b.b;hz(a.a,c,d);iz(a.a)}function CD(){vO();xO.call(this);var a=this.a=new EO;a.ab=!0;a.a.f=!0;this.a.db=!0}w(810,769,{},CD);_.If=Xw;_.a=null;function AE(){}w(818,549,{},AE);\nfunction xE(){xE=x;var a;a=(oE(),pE["os.encoding"]);if(null!=a)try{if(H("UTF-8",a))AL(n);else if(H("ISO-8859-1",a)||H("ISO-LATIN-1",a))D(BL,rl,-1,0,1);else throw new XK(a+ma);}catch(b){if(b=xq(b),!G(b,106))throw b;}}function wD(a,b){a.a=31*a.a+dw((new nL(b)).a)}function CC(){}w(823,1,{},CC);_.hC=Xw;_.a=1;\nfunction EO(){var a=(pz(),sz);jz.call(this,!0,wi);this.U=a.a;this.a=new FO(this);this.a.d=!0;$y(this,this.a);this.ab=!0;this.a.f=!0;if(-1==this.lb){var a=this.pb,b=1|(this.pb.__eventBits||0);tx();dy(a,b)}else this.lb|=1;Yq(Xq(this.pb))[Tg]=Rh;this.pb.style[Hk]="2147483647"}w(854,382,ll,EO);_.ae=function(a){zy(this,a);1==rx(a.type)&&ez(this,!1)};_.a=null;\nfunction FO(a){this.b=a;this.c=new Jm;this.i=new Jm;a=(EA(),DA);new uB(a.d,a.b,a.c,a.e,a.a);var b;b=$doc.createElement(Yj);this.e=$doc.createElement(ak);lx(b,this.e);this.o=!0;a=Lz();b=(mx(),nx(b));a.appendChild(b);this.pb=a;Un();this.pb.setAttribute("role",yo.a);-1==this.lb?(a=this.pb,b=2225|(this.pb.__eventBits||0),tx(),dy(a,b)):this.lb|=2225;this.pb[Tg]=Qh;a=ly(this.pb)+"-vertical";gy(this.ie(),a,!0);this.pb.style[bj]=Hc;this.pb.setAttribute("hideFocus",xk);vy(this,new CA(this),(mt(),mt(),nt))}\nw(855,424,pl,FO);_.ae=function(a){switch(rx(a.type)){case 16:this.a=!1;break;case 32:this.a=!0}uA(this,a)};_.Ke=function(a,b){yA(this,a,b);b||this.a&&ez(this.b,!1)};_.a=!0;_.b=null;w(903,1,{});\nfunction GO(a,b,c,d){var e,f,g,h,j,l;h=(!c?b.b:JE(b,c,~~Op(c)))[0][d.length];b=j=e=null;for(c=0,f=!h?0:h.length;c\',Ca=\'">\',Fa="#",Ha="$",Ia="$$$$",Ja="$MOL\\n",La="$RXN",Oa="$RXN\\n\\n\\nJME Molecular Editor\\n",Pa="%",Qa="&",Ua="&",Ya=">",ab="<",bb="\'",cb="(",hb=")",ib="*",jb="+",kb=",",nb=", ",qb=",modifiers=",rb="-",sb="-C#C-Me",vb="-C#CH",wb="-C#N",zb="-C(=O)N",Ab="-C(=O)OH",Hb="-C(=O)OMe",\nLb="-CCl3",Mb="-CF3",Nb="-CMe3",Pb="-NC=O",Vb="-NH-SO2-Me",Yb="-NMe2",Zb="-NO2",$b="-OC(=O)Me",ac="-SO2-NH2",bc="-SO3H",dc="-disabled",hc="-selected",lc=".",mc="...",tc="/",yc="//",zc="/>",Fc="0",Gc="0.0px",Hc="0px",Ic="1",Kc="100%",Nc="2",Oc="3",Pc="4",Uc="5",Vc="6",Wc="7",Xc="8",ad="9",bd=":",gd=": ",hd=";",id="<",td="<\/g>",ud="<\/svg>",vd="<\/text>",zd=\'b?{}:new hl[b],_.cM=c);for(var e=3;e=a.t+a.n;if(a.p&&!d)return d=(b-a.t)/a.n,a.td((1+Math.cos(3.141592653589793+3.141592653589793*d))/2),a.o&&a.r==c;if(!a.p&&b>=a.t&&(a.p=!0,a.sd(),!(a.o&&a.r==c)))return!1;return d?(a.o=!1,a.p=!1,a.rd(),!1):!0}w(58,1,{});_.qd=function(){this.u&&this.rd()};\n_.rd=function(){this.td((1+Math.cos(6.283185307179586))/2)};_.sd=function(){this.td((1+Math.cos(3.141592653589793))/2)};_.n=-1;_.o=!1;_.p=!1;_.q=null;_.r=-1;_.s=null;_.t=-1;_.u=!1;function Am(a,b){if(Bm(a.a,b)){var c=a.a,d=a.a.s,e;e=new Cm(d,a.a.k);Dm(d.a,e);1==d.a.c&&Em(d.b,16);c.q=e}else a.a.q=null}function Fm(a){this.a=a}w(59,1,{},Fm);_.a=null;w(60,1,{});w(61,1,{13:1});function Gm(){Gm=x;Hm=new Im}w(62,60,{});var Hm=null;function Im(){this.a=new Jm;this.b=new Km(this)}w(63,62,{},Im);\nfunction Lm(){Lm=x;Mm=new Jm;var a=new Nm;Om();Pm(Qm?Qm:Qm=new Rm,a)}function xm(a){a.b?$wnd.clearInterval(a.c):$wnd.clearTimeout(a.c);wm(Mm,a)}function Em(a,b){if(0>b)throw new Sm("must be non-negative");a.b?$wnd.clearInterval(a.c):$wnd.clearTimeout(a.c);wm(Mm,a);a.b=!1;a.c=Tm(a,b);Dm(Mm,a)}function Tm(a,b){return $wnd.setTimeout(C(function(){a.ud()}),b)}w(65,1,{});_.ud=function(){this.b||wm(Mm,this);this.vd()};_.b=!1;_.c=0;var Mm;function Km(a){Lm();this.a=a}w(64,65,{},Km);\n_.vd=function(){var a=this.a,b,c,d,e,f;b=D(Um,u,14,a.a.c,0);b=Vm(a.a,b);c=new Wm;for(e=0,f=b.length;ezm()-d.a;){e=!1;for(f=0;f=a.a.d)break a;b=d[e];c=new FileReader;Ut(c,a.a.b);1==a.a.c&&c.readAsText(b)}0==d.length&&(b=(this.a.dataTransfer||null).getData(gk),a.a.b.Xf(b))};_.Gd=function(){return St};var St;function Vt(){Vt=x;Wt=new ot(Ih,new Xt)}function Xt(){}w(278,259,{},Xt);\n_.Dd=function(a){var b,c;b=this.a.rotation;c=this.a.scale;a.a.e&&(0!=b&&a.a.b.b!=b&&(a.a.b.b=b,a.a.b.a=null,Yt(a.a.e,a.a.b)&&this.a.preventDefault()),a.a.d=!0);a.a.f&&(1!=c&&a.a.b.c!=c&&(a.a.b.a=null,a.a.b.c=c,Zt(a.a.f,a.a.b)&&this.a.preventDefault()),a.a.d=!0)};_.Gd=function(){return Wt};var Wt;function $t(){$t=x;au=new ot(Jh,new bu)}function bu(){}w(279,259,{},bu);_.Dd=function(a){a.a.a&&(a.a.b.a=null,cu(a.a.a,a.a.b))};_.Gd=function(){return au};var au;function du(){du=x;eu=new ot(Lh,new fu)}\nfunction fu(){}w(280,259,{},fu);_.Dd=function(){this.a.preventDefault()};_.Gd=function(){return eu};var eu;w(282,259,{});w(281,282,{});function gu(){gu=x;hu=new ot(ci,new iu)}function iu(){}w(283,281,{},iu);\n_.Dd=function(a){var b,c;c=this.a.keyCode||0;0<=c&&c<(ju(),ku).length&&-999!=(ju(),ku)[c]&&(c=(ju(),ku)[c]);b=new lu(null,c,null);if(this.a.ctrlKey||this.a.shiftKey||this.a.metaKey||this.a.altKey)this.a.ctrlKey&&(b.e|=2),this.a.altKey&&(b.e|=8),this.a.metaKey&&(b.e|=4),this.a.shiftKey&&(b.e|=1);a:{var a=a.a.c,d=c,e;a.Gb=!1;if(!a.J||a.K){mu(a,n);c=0;e=8==b.e;b=0!=(b.e&2);switch(d){case 99:case 67:b?nu(Qt(a,!0,!1)):c=301;break;case 118:case 86:b&&a.Tb&&(b=a.r,null==b.i&&(b.i="PASTE"),ou(a.E,(!a.Ub&&\n(a.Ub=new pu(a)),a.Ub)));break;case 110:case 78:c=401;break;case 111:case 79:c=501;break;case 115:case 83:c=601;break;case 112:case 80:c=1101;break;case 102:case 70:c=701;break;case 108:case 76:c=801;break;case 98:case 66:c=901;break;case 105:case 73:c=1001;break;case 120:case 88:a.Bc&&(mu(a,Uq((qu(),ru).Tc.a.pb,Ak)),c=1201,a.n=32);break;case 104:case 72:mu(a,Pe);c=1300;break;case 114:case 82:mu(a,"-R");c=1301;break;case 116:case 84:701==a.k?(c=236,mu(a,Mb)):801==a.k?(c=237,mu(a,Lb)):(c=233,mu(a,\n"-tBu"));break;case 121:case 89:b?c=111:(c=234,mu(a,Zb));break;case 122:case 90:b?c=110:(c=239,mu(a,bc));break;case 97:case 65:c=235;mu(a,"-COOH");break;case 101:case 69:c=238;mu(a,vb);break;case 117:case 85:c=110;break;case 113:case 81:c=242;mu(a,wb);break;case 103:a=!0;break a;case 27:c=202;break;case 45:701==a.k?(c=254,mu(a,"-F")):801==a.k?(c=255,mu(a,"-Cl")):901==a.k?(c=256,mu(a,"-Br")):1001==a.k?(c=257,mu(a,"-I")):501==a.k?(c=259,mu(a,"-OH")):401==a.k?(c=258,mu(a,"-NH2")):c=202;break;case 43:c=\n108;break;case 35:c=204;break;case 48:105==a.k?su(a,0):e?(c=223,mu(a,"-3-Furyl")):(c=221,mu(a,"-Furyl"));break;case 49:105==a.k?su(a,1):c=209;break;case 50:case 61:50==d&&105==a.k?su(a,2):501==a.k?(c=250,mu(a,"=O")):c=203;break;case 51:105==a.k?su(a,3):c=206;break;case 52:105==a.k?su(a,4):c=207;break;case 53:105==a.k?su(a,5):c=208;break;case 54:105==a.k?su(a,6):c=210;break;case 55:105==a.k?su(a,7):c=211;break;case 56:105==a.k?su(a,8):c=212;break;case 57:105==a.k?su(a,9):(mu(a,"9 ring"),c=229);break;\ncase 100:case 68:case 8:case 127:c=104;break;case 32:c=205;break;case 109:case 77:case 1002:c=151;break;case 119:case 87:case 1003:c=152;break;case 1E3:c=153;break;case 1001:c=154}d=d+1-49;0<=d&&9>=d&&0=b&&(c=1301+d));tu(a,c)}a=!0}a&&this.a.preventDefault()};_.Gd=function(){return hu};var hu;function uu(){uu=x;vu=new ot(Di,new wu)}function wu(){}w(284,264,Cl,wu);_.Dd=function(a){a.ld(this)};_.Gd=function(){return vu};var vu;\nfunction xu(){xu=x;yu=new ot(Ei,new zu)}function zu(){}w(285,264,Cl,zu);_.Dd=function(a){a.md(this)};_.Gd=function(){return yu};var yu;function Au(){Au=x;Bu=new ot(Fi,new Cu)}function Cu(){}w(286,264,Cl,Cu);_.Dd=function(a){a.nd(this)};_.Gd=function(){return Bu};var Bu;function Du(){Du=x;Eu=new ot(Gi,new Fu)}function Fu(){}w(287,264,Cl,Fu);_.Dd=function(a){var b;b=this.a;Jq((Gq(),Hq),new Gu(a,a.b,b))};_.Gd=function(){return Eu};var Eu;function Hu(){Hu=x;Iu=new ot(Hi,new Ju)}function Ju(){}\nw(288,264,Cl,Ju);_.Dd=function(a){a.od(this)};_.Gd=function(){return Iu};var Iu;function Ku(){Ku=x;Lu=new ot(Ii,new Mu);new ot(Fe,new Mu)}function Mu(){}w(289,264,Cl,Mu);_.Dd=function(a){var b,c,d,e,f;b=new Nu(a.a.i,st(this),tt(this),4*this.a.detail||0);f=0;for(c=Ou(a.a.i.Pc,D(Pu,u,76,0,0)),d=0,e=c.length;da.qI&&(c.tM==x||c.cM&&c.cM[1])&&(!c.cM||!c.cM[-a.qI]))throw new bw;}return a[b]=c}w(319,1,{},Vv);_.qI=0;function Zv(){Zv=x;$v=[];aw=[];var a=new Vv,b=$v,c=aw,d=0,e,f;for(f in a)if(e=a[f])b[d]=f,c[d]=e,++d}var $v,aw;function G(a,b){return null!=a&&a.cM&&!!a.cM[b]}function Ip(a){return null!=a&&a.tM!=x&&!(a.cM&&a.cM[1])}function Lp(a){return a.tM==x||a.cM&&!!a.cM[1]}\nfunction cw(a){return null==a?null:a}function dw(a){return~~Math.max(Math.min(a,2147483647),-2147483648)}var ew=-1;\nfunction fw(){var a;$stats&&gw("com.google.gwt.useragent.client.UserAgentAsserter");a=navigator.userAgent.toLowerCase();if(-1!=a.indexOf(Zi))a=Zi;else if(-1!=a.indexOf("webkit"))a="safari";else if(-1!=a.indexOf(Ki)&&9<=$doc.documentMode)a="ie9";else if(-1!=a.indexOf(Ki)&&8<=$doc.documentMode)a="ie8";else{var b;var c=/msie ([0-9]+)\\.([0-9]+)/.exec(a);c&&3==c.length&&(b=6E3<=1E3*parseInt(c[1])+parseInt(c[2]));a=b?"ie6":-1!=a.indexOf("gecko")?"gecko1_8":"unknown"}H(Zi,a)||$wnd.alert("ERROR: Possible problem with your *.gwt.xml module file.\\nThe compile time user.agent value (opera) does not match the runtime user.agent value ("+\na+"). Expect more errors.\\n");$stats&&gw("com.google.gwt.user.client.DocumentModeAsserter");b=$doc.compatMode;a=z(hw,u,1,[ne]);for(c=0;c>22&4194303,0>a?1048575:0)}\nfunction pw(a){return ow(a.l,a.m,a.h)}function ow(a,b,c){return _=new qw,_.l=a,_.m=b,_.h=c,_}\nfunction rw(a,b){var c,d,e,f,g;if(0==b.l&&0==b.m&&0==b.h)throw new sw;if(0==a.l&&0==a.m&&0==a.h)return tw=ow(0,0,0),ow(0,0,0);if(524288==b.h&&0==b.m&&0==b.l)return c=a,524288==c.h&&0==c.m&&0==c.l?(tw=ow(0,0,0),c=pw((uw(),vw))):(tw=ow(c.l,c.m,c.h),c=ow(0,0,0)),c;g=!1;0!=b.h>>19&&(b=ww(b),g=!0);e=b.l;0!=(e&e-1)?f=-1:(d=b.m,0!=(d&d-1)?f=-1:(c=b.h,f=0!=(c&c-1)||0==c&&0==d&&0==e?-1:0==c&&0==d&&0!=e?xw(e):0==c&&0!=d&&0==e?xw(d)+22:0!=c&&0==d&&0==e?xw(c)+44:-1));c=d=e=!1;if(524288==a.h&&0==a.m&&0==a.l)if(e=\nd=!0,-1==f)a=pw((uw(),yw)),c=!0,g=!g;else return c=zw(a,f),g&&Aw(c),tw=ow(0,0,0),c;else 0!=a.h>>19&&(e=!0,a=ww(a),c=!0,g=!g);if(-1!=f){c=a;d=f;f=g;g=e;e=zw(c,d);f&&Aw(e);var h;22>=d?(f=c.l&(1<=d?(f=c.l,h=c.m&(1<r?j=\n!1:(o=j.l-f.l,m=j.m-f.m+(o>>22),r+=m>>22,0>r?j=!1:(j.l=o&4194303,j.m=m&4194303,j.h=r&1048575,j=!0));if(j&&(22>l?h.l|=1<l?h.m|=1<>>1;f.m=j>>>1|(o&1)<<21;f.l=m>>>1|(j&1)<<21;--l}g&&Aw(h);e?(tw=ww(c),d&&(tw=Ew(tw,(uw(),vw)))):tw=ow(c.l,c.m,c.h);return h}function Aw(a){var b,c,d;b=~a.l+1&4194303;c=~a.m+(0==b?1:0)&4194303;d=~a.h+(0==b&&0==c?1:0)&1048575;a.l=b;a.m=c;a.h=d}\nfunction Cw(a){var b;b=Fw(a.h);return 32==b?(b=Fw(a.m),32==b?Fw(a.l)+32:b+20-10):b-12}var tw=null;function Gw(a,b){return a.l==b.l&&a.m==b.m&&a.h==b.h}function J(a){var b,c,d;if(isNaN(a))return uw(),Hw;if(-9223372036854775E3>a)return uw(),Iw;if(9223372036854775E3<=a)return uw(),yw;d=!1;0>a&&(d=!0,a=-a);c=0;17592186044416<=a&&(c=dw(a/17592186044416),a-=17592186044416*c);b=0;4194304<=a&&(b=dw(a/4194304),a-=4194304*b);a=dw(a);b=ow(a,b,c);d&&Aw(b);return b}\nfunction Jw(a){var b,c;return-129a?(b=a+128,null==Kw&&(Kw=D(Lw,u,31,256,0)),c=Kw[b],!c&&(c=Kw[b]=nw(a)),c):nw(a)}function Mw(a){var b=Lk,c,d;c=a.h>>19;d=b.h>>19;return 0==c?0!=d||a.h>b.h||a.h==b.h&&a.m>b.m||a.h==b.h&&a.m==b.m&&a.l>b.l:!(0==d||a.h>19;d=b.h>>19;return 0==c?0!=d||a.h>b.h||a.h==b.h&&a.m>b.m||a.h==b.h&&a.m==b.m&&a.l>=b.l:!(0==d||a.h>13|(a.m&15)<<9;e=a.m>>4&8191;f=a.m>>17|(a.h&255)<<5;g=(a.h&1048320)>>8;h=b.l&8191;j=b.l>>13|(b.m&15)<<9;l=b.m>>4&8191;o=b.m>>17|(b.h&255)<<5;m=(b.h&1048320)>>8;r=c*h;y=d*h;t=e*h;v=f*h;g*=h;0!=j&&(y+=c*j,t+=d*j,v+=e*j,g+=f*j);0!=l&&(t+=c*l,v+=d*l,g+=e*l);0!=o&&(v+=c*o,g+=d*o);0!=m&&(g+=c*m);c=(r&4194303)+((y&511)<<13);r=(r>>22)+(y>>9)+((t&262143)<<4)+((v&31)<<17)+(c>>22);t=(t>>18)+(v>>5)+((g&4095)<<8)+(r>>22);return ow(c&4194303,r&\n4194303,t&1048575)}function ww(a){var b,c;b=~a.l+1&4194303;c=~a.m+(0==b?1:0)&4194303;return ow(b,c,~a.h+(0==b&&0==c?1:0)&1048575)}function Dw(a,b){var c,d,e,b=b&63;22>b?(c=a.l<>22-b,e=a.h<>22-b):44>b?(c=0,d=a.l<>44-b):(d=c=0,e=a.l<b?(e=c>>b,d=a.m>>b|c<<22-b,c=a.l>>b|a.m<<22-b):44>b?(e=d?1048575:0,d=c>>b-22,c=a.m>>b-22|c<<44-b):(e=d?1048575:0,d=d?4194303:0,c>>=b-44);return ow(c&4194303,d&4194303,e&1048575)}function Ew(a,b){var c,d;c=a.l-b.l;d=a.m-b.m+(c>>22);return ow(c&4194303,d&4194303,a.h-b.h+(d>>22)&1048575)}function P(a){return a.l|a.m<<22}\nfunction Ow(a){var b,c,d;if(0==a.l&&0==a.m&&0==a.h)return Fc;if(524288==a.h&&0==a.m&&0==a.l)return"-9223372036854775808";if(0!=a.h>>19)return rb+Ow(ww(a));for(c=n;!(0==a.l&&0==a.m&&0==a.h);){b=Jw(1E9);a=rw(a,b);b=n+P(tw);if(!(0==a.l&&0==a.m&&0==a.h))for(d=9-b.length;0d||d>a.p.c)throw new Oy;b.ob==a&&(f=a.we(b),fd||d>=c.c)throw new Oy;for(--c.c;dg&&l.charAt(g)==rb&&0==l.indexOf(f)&&(e[h]=d+l.substring(g))}c.className=e.join(ga)}bz(this,this.T);gz(this);gy(Xq(this.pb),kj,!1);gy(this.T.b,b+"Content",!0)}w(383,384,ll);_.oe=function(){xy(this.T)};_.pe=function(){Ay(this.T)};_.De=function(){return this.T.jb};_.ye=function(){return new dz(this.T)};_.ve=function(a){return this.T.ve(a)};_.Ee=function(a){bz(this.T,a);gz(this)};_.T=null;w(382,383,ll);_.se=Gy;\nfunction pz(){pz=x;qz=new rz(0,(lz(),mz));sz=new rz(1,tz);uz=new rz(2,vz);wz=z(xz,u,38,[qz,sz,uz])}function rz(a,b){this.b=a;this.a=b}w(386,193,{38:1,89:1,94:1,96:1},rz);_.a=null;var wz,qz,sz,uz;function yz(){yz=x;zz=z(hw,u,1,[nk,Bi,Ig])}\nfunction oz(a){var b;yz();var c,d;c=this.pb=$doc.createElement(Yj);this.c=$doc.createElement(ak);lx(c,this.c);c[Og]=0;for(c=c[Ng]=0;c";h=new Ww(c.a.a);g.innerHTML=h.a||n;g=Xq(g);a.kb&&(a.pb.__listener=\nnull);if(a.pb&&(h=a.pb,b=h.parentNode))b.insertBefore(g,h),b.removeChild(h);a.pb=g;a.kb&&(a.pb.__listener=a);-1==a.lb?(g=a.pb,a=133333119|(a.pb.__eventBits||0),tx(),dy(g,a)):a.lb|=133333119}w(417,418,{},fA);_.a=0;_.b=0;_.c=0;_.d=null;_.e=0;function gA(a,b){this.a=a;this.b=b}w(419,1,{},gA);_.pd=function(){var a;this.b.a!=this.a||this!=this.a.f||(this.a.f=null,this.b.kb?(a=Zq(li,!1),this.b.pb.dispatchEvent(a)):this.b.pb.__gwtLastUnhandledEvent=li)};_.a=null;_.b=null;w(421,348,Tl);\nfunction mA(a){this.a=a}w(423,421,Tl,mA);_.Sd=function(a){this.a.Ke(a.f,a.a)};function nA(a,b,c){var d;if(a.o){var e=d=$doc.createElement(sk);by(a.e,(mx(),nx(e)),b);a=(mx(),nx(c));d.appendChild(a)}else d=Tx(a.e,0),by(d,(mx(),nx(c)),b)}\nfunction oA(a,b,c){var d;b.b&&(pA(a,b),c&&b.a?(pA(a,null),a=b.a,b=(Gq(),Hq),b.c=Kq(b.c,[new qA(a),!1])):null!=b.d&&(a.j=new rA(a,b),c=(lz(),tz),a.j.U=c,a.j.ab=a.f,c=Rh,a.j.ie()[Tg]=c,d=ly(a.pb),H(Qh,d)||fy(a.j,d+"Popup"),wy(a.j,new mA(a),Qm?Qm:Qm=new Rm),a.n=b.d,d=a.j,a=new sA(a,b),d.pb.style[Ck]=Vh,iz(d),Sv(),a.a.o?hz(a.a.j,ar(a.a.pb)+Tq(a.a.pb,Xi)-1,br(a.b.pb)):hz(a.a.j,ar(a.b.pb),br(a.a.pb)+Tq(a.a.pb,Wi)-1),d.pb.style[Ck]=Dk))}\nfunction tA(a,b){!b&&a.k&&a.n==a.k.d||b&&!b.b||(pA(a,b),a.pb.focus(),b&&a.d&&oA(a,b,!1))}\nfunction uA(a,b){var c;a:{c=b.target;var d,e;for(e=new zv(a.i);e.bc&&(c=a.i.c-1),c==b){d=Dx(a.i,b);break}else if(d=Dx(a.i,c),d.b)break;pA(a,d)}}w(424,380,pl);_.ae=function(a){uA(this,a)};_.se=function(){this.j&&ez(this.j,!1);Ay(this)};_.Ke=function(a,b){yA(this,a,b)};_.d=!1;_.e=null;_.f=!1;_.j=null;_.k=null;_.n=null;_.o=!1;function qA(a){this.a=a}\nw(425,1,{},qA);_.pd=function(){BA(this.a)};_.a=null;function CA(a){this.a=a}w(426,1,{},CA);_.Hd=function(){pA(this.a,null)};_.a=null;function rA(a,b){this.a=a;this.b=b;jz.call(this,!0,wi);bz(this.T,this.b.d);gz(this);this.fb=!0;this.b.d.ei()}w(427,383,ll,rA);_.Yd=function(a){var b,c;if(!a.a)switch(rx(a.d.type)){case 4:c=a.d.target;b=this.b.c.pb;if(b.contains(c)){a.a=!0;break}a.a&&pA(this.a,null)}};_.a=null;_.b=null;function sA(a,b){this.a=a;this.b=b}w(428,1,{},sA);_.a=null;var DA=_.b=null;\nfunction EA(){EA=x;DA=new Qw((gx(),new fx((Sv(),"data:image/gif;base64,R0lGODlhBQAJAIAAAAAAAAAAACH5BAEAAAEALAAAAAAFAAkAAAIMRB5gp9v2YlJsJRQKADs="))),5,9)}function FA(a,b){if(b){var c=ly(a.pb)+dc;gy(a.ie(),c,!1)}else c=ly(a.pb)+dc,gy(a.ie(),c,!0);a.b=b}function GA(a,b){this.pb=$doc.createElement(bk);var c=ly(this.pb)+hc;gy(this.ie(),c,!1);this.pb.textContent=a||n;this.pb[Tg]="gwt-MenuItem";c=cr();this.pb.setAttribute(Xh,c);Un();this.pb.setAttribute("role",Bo.a);this.a=b}w(431,381,{42:1,46:1,49:1},GA);\n_.a=null;_.b=!0;_.c=null;_.d=null;function HA(){var a;this.pb=$doc.createElement(bk);this.pb[Tg]="gwt-MenuItemSeparator";a=$doc.createElement(ph);lx(this.pb,a);a[Tg]="menuSeparatorInner"}w(432,381,Al,HA);function IA(){var a,b,c,d,e;b=null.ei();e=er();d=dr();b[oh]=(Ur(),Qi);b[Fk]=0+(ps(),oj);b[Uh]=Hc;c=$doc;c=(H(c.compatMode,ne)?c.documentElement:c.body).scrollWidth||0;a=$doc;a=(H(a.compatMode,ne)?a.documentElement:a.body).scrollHeight||0;b[Fk]=(c>e?c:e)+oj;b[Uh]=(a>d?a:d)+oj;b[oh]="block"}\nfunction kz(){}w(433,1,{},kz);_.Ud=function(){IA()};function JA(a){this.a=a}w(434,1,{},JA);\n_.Yd=function(a){var b=this.a,c,d;if(a.a||!b.fb&&a.b)b.db&&(a.a=!0);else if(b.Yd(a),!a.a){d=a.d;c=d.target;var e;try{e=!!c&&!!c.nodeType}catch(f){e=!1}(c=e&&c&&1==c.nodeType?b.pb.contains(c):!1)&&(a.b=!0);b.db&&(a.a=!0);switch(rx(d.type)){case 4:case 1048576:if(qx){a.b=!0;break}if(!c&&b.V){b.Ge(!0);break}break;case 8:case 64:case 1:case 2:case 4194304:if(qx){a.b=!0;break}break;case 2048:d=d.target,b.db&&!c&&d&&(d.blur&&d!=$doc.body&&d.blur(),a.a=!0)}}};_.a=null;function KA(a){this.a=a}\nw(435,1,{},KA);_.a=null;function lz(){lz=x;mz=new LA(0);tz=new LA(1);vz=new LA(2);MA=z(NA,u,47,[mz,tz,vz])}function LA(a){this.b=a}w(436,193,{47:1,89:1,94:1,96:1},LA);var MA,mz,tz,vz;function OA(a){a.j?a.a.bb&&($doc.body.appendChild(a.a.Z),a.f=Gx(a.a.$),IA(),a.b=!0):a.b&&($doc.body.removeChild(a.a.Z),PA(a.f.a),a.f=null,a.b=!1)}function QA(a){a.j||(OA(a),a.c||(Cy(),Uy(RA(null),a.a)));a.a.pb.style[Wg]="rect(auto, auto, auto, auto)";a.a.pb.style[cj]=Dk}\nfunction SA(a,b){var c,d,e,f,g,h;a.j||(b=1-b);c=f=e=g=0;d=dw(b*a.d);h=dw(b*a.e);switch(a.a.U.b){case 2:f=a.e;c=d;break;case 0:g=a.d-d>>1;e=a.e-h>>1;f=e+h;c=g+d;break;case 1:Sv(),f=h,c=d}a.a.pb.style[Wg]="rect("+g+qj+f+qj+c+qj+e+"px)"}\nfunction fz(a,b,c){a.c=c;vm(a);a.i&&(xm(a.i),a.i=null,QA(a));a.a.hb=b;var d=a.a;d.eb&&(PA(d.eb.a),d.eb=null);d._&&(PA(d._.a),d._=null);if(d.hb){d.eb=sx(new JA(d));var e;e=new KA(d);zx();e=Ax?nv(Ax.a,(!mv&&(mv=new Rm),mv),e):null;d._=e}c=!c&&a.a.ab;a.a.U!=(lz(),mz)&&!b&&(c=!1);a.j=b;c?b?(OA(a),a.a.pb.style[lj]=gg,-1!=a.a.ib&&a.a.He(a.a.cb,a.a.ib),a.a.pb.style[Wg]=vj,Cy(),b=RA(null),Ly(b,a.a,b.pb),a.i=new TA(a),Em(a.i,1)):ym(a,200):(OA(a),a.j?(a.a.pb.style[lj]=gg,-1!=a.a.ib&&a.a.He(a.a.cb,a.a.ib),Cy(),\nb=RA(null),Ly(b,a.a,b.pb)):a.c||(Cy(),Uy(RA(null),a.a)),a.a.pb.style[cj]=Dk)}function nz(a){var b=(Gm(),Hm);this.k=new Fm(this);this.s=b;this.a=a}w(437,58,{},nz);_.rd=function(){QA(this)};_.sd=function(){this.d=Tq(this.a.pb,Wi);this.e=Tq(this.a.pb,Xi);this.a.pb.style[cj]=Vh;SA(this,(1+Math.cos(3.141592653589793))/2)};_.td=function(a){SA(this,a)};_.a=null;_.b=!1;_.c=!1;_.d=0;_.e=-1;_.f=null;_.i=null;_.j=!1;function TA(a){Lm();this.a=a}w(438,65,{},TA);_.vd=function(){this.a.i=null;ym(this.a,200)};\n_.a=null;function mx(){mx=x;UA()}function nx(a){return a.__gwt_resolve?a.__gwt_resolve():a}function UA(){function a(){}a.prototype={className:n,clientHeight:0,clientWidth:0,dir:n,getAttribute:function(a){return this[a]},href:n,id:n,lang:n,nodeType:1,removeAttribute:function(a){this[a]=void 0},setAttribute:function(a,c){this[a]=c},src:n,style:{},title:n};$wnd.GwtPotentialElementShim=a}function Cy(){Cy=x;VA=new WA;XA=new xp;Dy=new wv}function YA(a){this.p=new Zy(this);this.pb=a;xy(this)}\nfunction RA(a){Cy();var b,c;c=Fv(XA,a);b=null;if(null!=a&&!(b=$doc.getElementById(a)))return null;if(c&&(!b||c.pb==b))return c;if(0==XA.d){var d=new ZA;Om();Pm(Qm?Qm:Qm=new Rm,d);Sv()}!b?c=new $A:c=new YA(b);E(XA,a,c);xv(Dy,c);return c}w(440,377,ll,YA);var VA,XA,Dy;function WA(){}w(441,1,{},WA);_.Je=function(a){a.qe()&&a.se()};function ZA(){}w(442,1,{},ZA);_.Sd=function(){Cy();try{Hy(Dy,VA)}finally{aB(Dy.a),aB(XA)}};function $A(){YA.call(this,$doc.body)}w(443,440,ll,$A);\n_.Be=function(a,b,c){Xy(a,b-0,c-0)};function dz(a){this.c=a;this.a=!!this.c.jb}w(444,1,{},dz);_.Zd=Xw;_.$d=function(){if(!this.a||!this.c.jb)throw new Ry;this.a=!1;return this.b=this.c.jb};_._d=function(){this.b&&this.c.ve(this.b)};_.b=null;_.c=null;function bB(a,b){a.pb[Ak]=null!=b?b:n}w(447,395,pl);_.ae=function(a){0!=(rx(a.type)&896)?zy(this,a):zy(this,a)};_.te=Fy;function cB(){cB=x;dB()}w(446,447,pl);\nfunction eB(){cB();var a=Wq(gk);!kx&&(kx=new jx);!ix&&(ix=new hx);this.pb=a;Sv();this.pb[Tg]="gwt-TextBox"}w(448,446,pl,eB);function dB(){dB=x;fB=new gB;hB=new iB;jB=new kB;lB=new mB;nB=z(oB,u,50,[fB,hB,jB,lB])}w(449,193,Pl);var nB,fB,hB,jB,lB;function gB(){this.b=0}w(450,449,Pl,gB);function iB(){this.b=1}w(451,449,Pl,iB);function kB(){this.b=2}w(452,449,Pl,kB);function mB(){this.b=3}w(453,449,Pl,mB);function Qy(a,b){var c;for(c=0;cc||c>a.c)throw new Oy;if(a.c==a.a.length){e=D(pB,u,51,2*a.a.length,0);for(d=0;dc;--d)nq(a.a,d,a.a[d-1]);nq(a.a,c,b)}function Zy(a){this.b=a;this.a=D(pB,u,51,4,0)}w(455,1,{},Zy);_.ye=function(){return new Sy(this)};_.a=null;_.b=null;_.c=0;function qB(a){if(a.a>=a.b.c)throw new Ry;return a.b.a[++a.a]}function rB(a){if(0>a.a||a.a>=a.b.c)throw new sB;a.b.b.ve(a.b.a[a.a--])}function Sy(a){this.b=a}w(456,1,{},Sy);\n_.Zd=function(){return this.aa)throw new Sm("Missing message: awt.133");this.e=a;this.a=2;this.c=0;this.d=10;this.b=0}w(480,1,{56:1},BC);\n_.eQ=function(a){return a===this?!0:G(a,56)?a.e==this.e&&a.a==this.a&&a.c==this.c&&a.d==this.d&&a.b==this.b:!1};_.hC=function(){var a;a=new CC;a.a=31*a.a+dw((new DC(this.e)).a);a.a=31*a.a+this.a;a.a=31*a.a+this.c;a.a=31*a.a+dw((new DC(this.d)).a);return a.a};_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;\nfunction EC(){EC=x;FC=GC=new km(255,255,255);HC=new km(192,192,192);IC=new km(128,128,128);JC=new km(64,64,64);KC=LC=new km(0,0,0);MC=NC=new km(255,0,0);new km(255,175,175);OC=new km(255,200,0);PC=new km(255,255,0);new km(0,255,0);QC=new km(255,0,255);RC=new km(0,255,255);SC=TC=new km(0,0,255)}\nfunction UC(a){var b,c;c=a.d>>16&255;b=a.d&255;a=a.d>>8&255;if(0==c&&0==b&&0==a)return new km(3,3,3);3>c&&0!=c?c=3:(c=dw(c/0.7),c=255b&&0!=b?b=3:(b=dw(b/0.7),b=255a&&0!=a?a=3:(a=dw(a/0.7),a=255>16&255)),dw(0.7*(a.d>>8&255)),dw(0.7*(a.d&255)))}function WC(a,b){return G(b,59)?b.d==a.d:!1}function km(a,b,c){EC();if((a&255)!=a||(b&255)!=b||(c&255)!=c)throw new Sm(xe);this.d=c|b<<8|a<<16|-16777216}\nw(486,1,{59:1,68:1,71:1},km);_.eQ=function(a){return WC(this,a)};_.hC=XC;_.tS=function(){return YC.d+"[r="+(this.d>>16&255)+",g="+(this.d>>8&255)+",b="+(this.d&255)+cg};_.a=0;_.b=null;_.c=null;_.d=0;var KC,SC,MC,FC,LC,TC,RC,JC,IC,HC,QC,OC,NC,GC,PC;function SB(){SB=x;TB=new ZC(!0);$C=new wv;xv($C,"ar");xv($C,"fa");xv($C,"iw");xv($C,"ur")}function ZC(a){this.a=a}w(487,1,Ql,ZC);_.a=!1;var TB,$C;w(491,1,{77:1,93:1});function aD(){JB.call(this,0,0)}function JB(a,b){this.b=a;this.a=b}\nfunction LB(a){JB.call(this,a.b,a.a)}w(490,491,{62:1,77:1,89:1,93:1},aD,JB,LB);_.eQ=function(a){return a===this?!0:G(a,62)?a.b==this.b&&a.a==this.a:!1};_.hC=function(){var a;a=new CC;a.a=31*a.a+this.b;a.a=31*a.a+this.a;return a.a};_.tS=function(){return bD.d+"[width="+this.b+",height="+this.a+cg};_.a=0;_.b=0;function lu(a,b,c){this.f=a;this.c=b;this.e=this.d=this.j=this.i=0;this.b=c}w(492,1,Ql,lu,function(a,b,c,d){this.f=a;this.c=b;this.j=this.i=0;this.d=c;this.e=d;this.b=null});\n_.tf=function(){return 0!=(this.e&4)};_.uf=function(){return 0!=(this.e&1)};_.tS=function(){var a;return this.cZ.d+"[id="+this.c+",x="+this.i+",y="+this.j+(0!=this.d?",key="+this.d+(a=n,this.uf()&&(a+=",shift"),0!=(this.e&2)&&(a+=",control"),this.tf()&&(a+=",meta"),a):n)+",target="+this.f+(null!=this.b?",arg="+this.b:n)+cg};_.b=null;_.c=0;_.d=0;_.e=0;_.f=null;_.i=0;_.j=0;function cD(a){var b,c;for(c=b=0;cb.b&&(dD(this,l,b.b-(o-this.c),g.b,m,j,h),l.qg(),o=f,m+=j+this.d,j=0),e=!1,nq(l.b,l.c++,c),o+=a.b+this.c,j=Xm(j,a.a);dD(this,l,b.b-(o-this.c),g.b,m,\nj,h)}};_.qf=function(a){this.b=iD(a.Fc);return 0==cD(this)?$B(a,new JB(10,10)):$B(a,fD(this,!1))};_.rf=function(a){this.b=iD(a.Fc);return 0==cD(this)?$B(a,new JB(10,10)):$B(a,fD(this,!0))};_.sf=XB;_.tS=function(){var a;switch(this.a){case 0:a=fi;break;case 2:a=zj;break;case 1:a=Pg;break;case 4:a="trailing";break;default:a="leading"}return lD.d+"[hgap="+this.c+",vgap="+this.d+",align="+a+cg};_.a=0;_.b=null;_.c=0;_.d=0;function mD(){mD=x;nD=new oD(Ie,0,12)}\nfunction oD(a,b,c){mD();this.a=null!=a?a:"Default";this.b=0<=c?c:0;this.c=0==(b&-4)?b:0}w(494,1,{63:1,89:1},oD);_.a=null;_.b=0;_.c=0;var nD;w(495,1,bm);_.tS=function(){return pD.d+"[font="+this.b+"ascent="+qD(this.b).a+", descent="+qD(this.b).b+", height="+qD(this.b).c+cg};_.b=null;w(497,1,{});_.tS=function(){return"Graphics"};w(498,497,{});function sB(){}function yy(a){this.f=a}w(501,136,dm,sB,yy);function FB(){this.f="Missing message: awt.151"}w(500,501,dm,FB);w(502,1,{});\nfunction VB(a,b,c,d){this.d=a;this.b=b;this.a=c;this.c=d}w(503,1,{65:1,89:1,93:1},VB);_.eQ=function(a){return a===this?!0:G(a,65)?a.b==this.b&&a.a==this.a&&a.c==this.c&&a.d==this.d:!1};_.hC=function(){var a;a=31+this.d;a=31*a+this.b;a=31*a+this.a;return a=31*a+this.c};_.tS=function(){return rD.d+"[left="+this.b+",top="+this.d+",right="+this.c+",bottom="+this.a+cg};_.a=0;_.b=0;_.c=0;_.d=0;w(507,1,Ql);_.cf=function(){return this.j};_.tS=ZB;_.j=null;_.k=null;\nfunction sD(a){var b;b=a.j+",label="+a.f;a.e||(b+=",disabled");null!=a.c&&(b+=",command="+a.c);return b}function tD(a,b){a.e=b;FA(a.i.a,b)}function uD(a){this.n=(PB(),PB(),QB);var b;var c;b=this.cZ.d;-1!=my(b,ny(36))?b=null:(c=this.n.b.d++,b=py(b,zB(b,ny(46))+1)+n+c);this.j=b;this.d=new zC;this.f=a;this.e=!0;this.i=new vD(this)}w(506,507,Ql,uD);_.cf=function(){return sD(this)};_.c=null;_.e=!1;_.f=null;_.i=null;w(505,506,Sl);_.cf=function(){return sD(this)+(this.b?",tearOff":n)};_.b=!1;w(509,1,{78:1});\n_.eQ=function(a){return a===this?!0:G(a,78)?this.vf()==a.vf()&&this.wf()==a.wf():!1};_.hC=function(){var a;a=new CC;wD(a,this.vf());wD(a,this.wf());return a.a};function EB(){this.b=this.a=0}function xD(a,b){this.a=a;this.b=b}w(508,509,{69:1,78:1,89:1},EB,xD);_.eQ=function(a){return a===this?!0:G(a,69)?this.a==a.a&&this.b==a.b:!1};_.vf=Xw;_.wf=Bz;_.tS=function(){return yD.d+"[x="+this.a+",y="+this.b+cg};_.a=0;_.b=0;\nfunction zD(a,b){if(!b)throw new ov("Missing message: awt.70");var c=a.a;if(H(b.f,rb)){var c=c.a.a,d=new HA,e=c.c.c;if(0>e||e>c.c.c)throw new Oy;c.o&&(d.pb[Zg]=2);nA(c,e,d.pb);AD(c.c,e,d)}else{var d=c.a.a,c=b.i.a,e=d.c.c,f,g;if(0>e||e>d.c.c)throw new Oy;AD(d.c,e,c);for(f=g=0;fb?0:b;var c=this.Tc;bB(c.a,a);c.e.a=-1;c.e.b=-1}w(519,518,ul,MD,ND);_.Ne=function(){return"textfield"+this.Vc.b.f++};_.Pe=function(){return KD(this,Uq(this.Tc.a.pb,Ak).length)};_.Qe=function(){return!AB(this)?null:KD(this,Uq(this.Tc.a.pb,Ak).length)};_.Se=OD;_.Ue=PD;_.Ye=function(){this.Tc=(PB(),new QD)};_.af=OD;_.df=PD;_.a=0;function PB(){PB=x;QB=new RD}\nfunction SD(){var a=(PB(),PB(),QB);!a.c&&(a.c=new TD);return a.c}w(520,1,{});_.a=null;_.c=null;var QB;function UD(){}w(521,1,{},UD);_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;_.f=0;w(522,1,{});function VD(){VD=x;WD=new XD;YD=new XD}function ZD(a,b){return b==a?!0:!b?!1:!0}function XD(){}w(523,1,{73:1},XD);_.eQ=function(a){return null==a||!G(a,73)?!1:ZD(this,a)};_.hC=function(){var a;a=null.ei()+";class="+null.ei();a=!null.ei().ei()?a:a+";charset=";return $D(a)};\n_.tS=function(){return aE.d+"[MimeType=(null);humanPresentableName="+this.a+cg};_.a=null;var WD,YD;function bE(){bE=x;z(cE,u,73,[(VD(),YD),WD])}function dE(a){var b=(VD(),YD);if(ZD(b,(VD(),YD)))return a.a;if(ZD(b,WD))return new eE(a.a);throw new fE(b);}function gE(a){bE();this.a=a}w(524,1,{},gE);_.a=null;function fE(a){this.f="flavor = "+a}w(525,137,{74:1,89:1,97:1,106:1},fE);function hE(a,b,c){sC();iE.call(this,a,b,c,Lk)}\nfunction iE(a,b,c,d){sC();qC.call(this,a);this.k=b;this.a=c;this.c=d;this.b=0}w(526,473,Ql,hE,iE);_.cf=function(){var a,b;a=1001==this.k?"ACTION_PERFORMED":zk;b=n;0<(this.b&1)&&(b+="Shift");0<(this.b&2)&&(b+=0==b.length?"Ctrl":"+Ctrl");0<(this.b&4)&&(b+=0==b.length?"Meta":"+Meta");0<(this.b&8)&&(b+=0==b.length?"Alt":"+Alt");return a+",cmd="+this.a+",when="+Ow(this.c)+qb+b};_.a=null;_.b=0;_.c=Lk;function NB(a,b){sC();qC.call(this,a);this.k=b}w(527,473,Ql,NB);\n_.cf=function(){var a,b;a=this.n;switch(this.k){case 100:b="COMPONENT_MOVED";break;case 101:b="COMPONENT_RESIZED";break;case 102:return"COMPONENT_SHOWN";case 103:return"COMPONENT_HIDDEN";default:return zk}return b+" ("+a.We()+kb+a.Xe()+ga+a.Ve()+Gk+a.Re()+hb};w(530,527,Ql);_.j=0;\nfunction jE(a){var b;switch(a.k){case 503:b="MOUSE_MOVED";break;case 500:b="MOUSE_CLICKED";break;case 501:b="MOUSE_PRESSED";break;case 502:b="MOUSE_RELEASED";break;case 506:b="MOUSE_DRAGGED";break;case 504:b="MOUSE_ENTERED";break;case 505:b="MOUSE_EXITED";break;case 507:b="MOUSE_WHEEL";break;default:b=zk}b=b+",("+a.f+kb+a.i+"),button="+a.d;if(0<(a.j&16320)){var c=qb,d;d=a.j;var e;e=new Tw;0!=(d&4)&&Ap(Ap(e,(PB(),null)),jb);0!=(d&1)&&Ap(Ap(e,(PB(),null)),jb);0!=(d&2)&&Ap(Ap(e,(PB(),null)),jb);0!=(d&\n8)&&(0!=(d&2048)?0!=(d&512)&&Ap(Ap(e,(PB(),null)),jb):Ap(Ap(e,(PB(),null)),jb));0!=(d&32)&&Ap(Ap(e,(PB(),null)),jb);0!=(d&16)&&Ap(Ap(e,(PB(),null)),jb);0!=(d&8)&&Ap(Ap(e,(PB(),null)),jb);0!=(d&4)&&Ap(Ap(e,(PB(),null)),jb);d=0==e.a.a.length?e.a.a:mE(e.a.a,0,e.a.a.length-1);c=c+d+",extModifiers=";d=a.j;var f;e=(f=n,0!=(d&256)&&(f+=(PB(),null)),0!=(d&128)&&(f+=(0=this.k?0!=(this.j&16)?(this.d=1,501==this.k&&(this.j|=1024)):0!=(this.j&8)?(this.d=2,501==this.k&&(this.j|=2048)):0!=(this.j&4)&&(this.d=3,501==this.k&&(this.j|=4096)):(0!=(this.j&16)&&(this.j|=1024),0!=(this.j&8)&&(this.j|=\n2048),0!=(this.j&4)&&(this.j|=4096));else if(0!=(this.j&16320))if(this.j&=-64,0!=(this.j&64)&&(this.j|=1),0!=(this.j&128)&&(this.j|=2),0!=(this.j&256)&&(this.j|=4),0!=(this.j&512)&&(this.j|=8),0!=(this.j&8192)&&(this.j|=32),500<=this.k&&502>=this.k)switch(this.d){case 1:this.j|=16;break;case 2:this.j|=8;break;case 3:this.j|=4}else 0!=(this.j&1024)&&(this.j|=16),0!=(this.j&2048)&&(this.j|=8),0!=(this.j&4096)&&(this.j|=4);this.b=0;this.a=1;this.c=d}w(533,532,Ql,Nu);\n_.cf=function(){var a,b;a=jE(this);switch(this.b){case 0:b="WHEEL_UNIT_SCROLL";break;case 1:b="WHEEL_BLOCK_SCROLL";break;default:b=zk}return a+=",scrollType="+b+",scrollAmount="+this.a+",wheelRotation="+this.c};_.a=0;_.b=0;_.c=0;w(542,1,{});function eE(a){if(null==a)throw new nE;}w(543,542,{},eE);\nfunction oE(){oE=x;pE={};pE["java.vendor"]=Mh;pE["package.restrict.access.sun"]=xk;pE["sun.java.launcher"]=tf;pE["sun.management.compiler"]=Mh;pE["os.name"]=tf;pE[" sun.boot.class.path"]=tf;pE["path.separator.applet"]=tf;pE["java.vm.specification.vendor"]=Mh;pE["java.runtime.version"]=tf;pE["http.proxyPort"]=tf;pE["user.name"]=tf;pE["user.language"]=tf;pE["os.name.applet"]=tf;pE["browser.version"]=tf;pE["java.version"]=tf;pE["user.timezone"]=tf;pE["java.endorsed.dirs"]=tf;pE["java.specification.name"]=\n"GWT";pE["java.specification.version"]="2.5.0";pE[ai]=bf;!Qu&&(Qu=new Yu);Qu.a?pE[Zh]="yes":pE[Zh]=null}var pE;w(547,137,Jl);function qE(){}function rE(a){this.f=a}w(546,547,{83:1,89:1,97:1,106:1},qE,rE);function sE(){sE=x;tE=new uE}function vE(a){var b;if(a.k){var c;b=new Tw;Ap(b,a.f);b.a.a+=bd;c=a.a;null!=c&&0=b||65<=b&&90>=b;for(c=1;b&&c=b||65<=b&&90>=b||48<=b&&57>=b||43==b||45==b||46==b;if(b){c=this.f;xE();var f,g,h;h=c.length;b=new yE;for(g=0;g=f?zE(b,f+32&65535):Bp(b.a,String.fromCharCode(f));\nthis.f=b.a.a}else this.f=null,d=-1}if(null==this.f)throw new rE(Ze+a);if(!this.k&&(this.k=Fv(tE,this.f),this.k||(this.k=(PB(),new AE))&&E(tE,this.f,this.k),!this.k))throw new rE(Ze+a);try{c=a;var j=++d,l=a.length,o,m,r,t,y,v,s,A,F,M,N,$,U,V,da,la,sa,cc,K,pa,Ac;if(ll){if(-2147483647>=l&&(j>=c.length||0>j)||!(0>j||j>=c.length)&&c.indexOf(yc,j)==j&&-1==BE(c,ny(47),j+2))throw new CE(l);}else{N=c.substr(j,l-j);l-=j;v=0;s=this.c;$=this.e;cc=this.j;t=this.d;da=this.i;o=this.a;Ac=this.n;K=BE(N,ny(35),\n0);if(0==N.indexOf(yc)&&0!=N.indexOf("////")){F=2;$=-1;v=BE(N,ny(47),2);sa=BE(N,ny(63),2);-1!=sa&&(-1==v||v>sa)&&(v=sa);-1==v&&(v=l,t=n);A=v;-1!=K&&Kr+1?(m=N.charCodeAt(r+1),58==m?U=r+1:U=-1):U=-1}catch(tb){if(tb=yq(tb),!G(tb,97))throw tb;}-1==U||U>v?s=N.substr(F,A-F):(s=N.substr(F,U-F),V=N.substr(U+1,A-(U+1)),0==V.length?$=-1:$=DE(V,\n10))}-1v&&(null==t?t=n:H(t,n)?t=tc:t.indexOf(tc),M=zB(t,ny(47))+1,0==M?t=N.substr(v,y-v):t=t.substr(0,M-0)+N.substr(v,y-v)));null==t&&(t=n);null==s&&(s=n);d=s;var Ga;Ga=t;null!=da&&!H(da,n)&&(null!=t?Ga=t+Gd+da:Ga=Gd+da);null==this.f&&(this.f=\nthis.f);this.c=d;this.b=Ga;this.e=$;this.j=cc;var ub;null!=this.c&&0this.e)throw new rE("incorrect port: "+\nthis.e);}w(548,1,Ql,wE);_.tS=function(){return vE(this)};_.a=null;_.b=null;_.c=null;_.d=null;_.e=-1;_.f=null;_.i=null;_.j=null;_.k=null;_.n=null;var tE;w(549,1,{});function EE(a,b,c){var d,e;for(d=a.Of().ye();d.Zd();)if(a=d.$d(),e=a.xh(),null==b?null==e:Kp(b,e))return c&&(a=new FE(a.xh(),a.yh()),d._d()),a;return null}w(553,1,Nl);_.Nf=function(a){return!!EE(this,a,!1)};\n_.eQ=function(a){var b,c;if(a===this)return!0;if(!G(a,109)||this.Tf()!=a.Tf())return!1;for(a=a.Of().ye();a.Zd();)if(b=a.$d(),c=b.xh(),b=b.yh(),!this.Nf(c)||!GE(b,this.Pf(c)))return!1;return!0};_.Pf=function(a){a=EE(this,a,!1);return!a?null:a.yh()};_.hC=function(){var a,b,c;c=0;for(b=this.Of().ye();b.Zd();)a=b.$d(),c+=a.hC(),c=~~c;return c};_.Qf=HE;_.Rf=function(){throw new IE("Put not supported on this map");};_.Sf=function(a){a=EE(this,a,!0);return!a?null:a.yh()};_.Tf=function(){return this.Of().Tf()};\n_.tS=function(){var a,b,c,d;d=Ik;a=!1;for(c=this.Of().ye();c.Zd();)b=c.$d(),a?d+=nb:a=!0,d+=n+b.xh(),d+=Ed,d+=n+b.yh();return d+"}"};function aB(a){a.a=[];a.e={};a.c=!1;a.b=null;a.d=0}function Wx(a,b){var c;if(null==b)c=a.c;else if(G(b,1))c=bd+b in a.e;else a:{c=a.Wf(b);if(c=a.a[c])for(var d=0,e=c.length;d=a.i)break;c=RE(a,c);++b}return b}\nfunction SE(a,b){var c;for(c=0;c=a.i)throw new OE;b=a.a;a.a=RE(a,a.a);return mE(a.n,b,a.a)}\nfunction RE(a,b){var c,d;for(d=b;da.f||!SE(a,c))break;d+=65536<=c?2:1}else{c=a.n.charCodeAt(d);if(c>a.f||0>my(a.c,ny(c)))break;++d}return d}function VE(a){WE.call(this,a,ha,!1)}function XE(a){WE.call(this,a,kb,!1)}\nfunction WE(a,b,c){this.a=0;this.j=-1;this.d=!1;this.n=a;this.i=a.length;this.c=b;this.k=c;var d;if(null==this.c)this.f=0;else{for(c=b=d=0;c=a&&(a=UE(this.c,c,this.c.length),this.e=!0),d=a;++a)0=a;++a)b=Ef,33=j||b>a.Sb||c>a.Sb))){l=D(rG,nl,-1,99,1);h=m=o=0;for(g=b;g<=c;++g)f=sG(a.zb[g]),o+=f.c,m+=f.d,f.d>h&&(h=f.d),l[g]=f.c,2==d&&(l[g]=f.d);a.J&&(o+=25*(j+1),m+=25*(j+1),h+=25);j=g=1;a.J?r=tG(a):r=uG(a);f=dw(r.b);r=dw(r.a);1==d||3==d?f=~~((f-48)/2):2==d&&(r=~~(r/2));o>=f&&(g=f/o);h>=r&&(j=r/h);h=0;a.J&&(a.xb=gd)switch(GG(b,(EC(),LC)),f){case 101:GG(b,PC);KG(b,j+3,g+3,a.mb-6,a.mb-6);GG(b,LC);e=g+3;h=a.mb-6;c=\na.mb-6;d=b.a;f=P(J(Q((j+3)*R)));e=P(J(Q(e*R)));h=P(J(Q(h*R)));c=P(J(Q(c*R)));d.n&&(LG(d,!1),MG(d,NG(d,f,e,h,c)));OG(b,j+6,g+6,a.mb-12,a.mb-12);PG(b.a,P(J(Q((j+9)*(QG(),R)))),P(J(Q((g+9)*R))),P(J(Q(2*R))),P(J(Q(4*R))));HG(b,j+a.mb-10,g+9,2,4);0.04>Math.random()&&(GG(b,NC),PG(b.a,P(J(Q((j+10)*R))),P(J(Q((g+18)*R))),P(J(Q(4*R))),P(J(Q(4*R)))));0.96=e;++e)if(bo&&(GG(g,(FF(),NF)[o]),KG(g,f.b[A].q-\n12,f.b[A].r-12,24,24));for(A=1;A<=f.q;++A)l=f.c[A].i,m=f.c[A].j,0!=f.b[l].c&&f.b[l].c==f.b[m].c&&(GG(g,(FF(),NF)[f.b[l].c]),v=f.b[m].q-f.b[l].q,h=f.b[m].r-f.b[l].r,y=Math.sqrt(v*v+h*h),1>y&&(y=1),h/=y,y=v/y,v=9*h,t=9*y,o=iH(4),r=iH(4),o[0]=f.b[l].q+v,r[0]=f.b[l].r-t,o[1]=f.b[m].q+v,r[1]=f.b[m].r-t,o[2]=f.b[m].q-v,r[2]=f.b[m].r+t,o[3]=f.b[l].q-v,r[3]=f.b[l].r+t,VG(g,o,r,4))}for(A=1;A<=f.q;++A){GG(g,(EC(),KC));t=f.c[A];l=t.i;m=t.j;1==f.i&&0!=f.b[l].c&&f.b[l].c==f.b[m].c&&GG(g,(FF(),NF)[f.b[l].c]);if(3==\nt.f||4==t.f)o=l,l=m,m=o;o=f.b[l].q;r=f.b[l].r;N=f.b[m].q;M=f.b[m].r;if(1!=t.c||0!=t.f)v=N-o,h=M-r,y=Math.sqrt(v*v+h*h),1>y&&(y=1),h/=y,y=v/y;switch(t.c){case 2:10<=t.f&&GG(g,QC);v=2*h;t=2*y;SG(g.a,P(J(Q((o+v)*(QG(),R)))),P(J(Q((r-t)*R))),P(J(Q((N+v)*R))),P(J(Q((M-t)*R))));SG(g.a,P(J(Q((o-v)*R))),P(J(Q((r+t)*R))),P(J(Q((N-v)*R))),P(J(Q((M+t)*R))));GG(g,LC);break;case 3:SG(g.a,P(J(Q(o*(QG(),R)))),P(J(Q(r*R))),P(J(Q(N*R))),P(J(Q(M*R))));l=3*h;m=3*y;SG(g.a,P(J(Q((o+l)*R))),P(J(Q((r-m)*R))),P(J(Q((N+l)*\nR))),P(J(Q((M-m)*R))));SG(g.a,P(J(Q((o-l)*R))),P(J(Q((r+m)*R))),P(J(Q((N-l)*R))),P(J(Q((M+m)*R))));break;case 9:case 0:for(m=0;10>m;++m)l=o-(o-N)/10*m,s=r-(r-M)/10*m,SG(g.a,P(J(Q(l*(QG(),R)))),P(J(Q(s*R))),P(J(Q(l*R))),P(J(Q(s*R))));jH(g,f.k.v);m=kH(f.k.w);t=t.d;l=Gd;null!=t&&(l=t);t=LD(f.k.w,l);t=(o+N)/2-t/2;M=(r+M)/2+~~(m/2)-1;GG(g,QC);lH(g.a,l,P(J(Q(t*(QG(),R)))),P(J(Q(M*R))));GG(g,LC);break;default:if(1==t.f||3==t.f)v=3*h,t=3*y,s=iH(3),j=iH(3),s[0]=N+v,j[0]=M-t,s[1]=o,j[1]=r,s[2]=N-v,j[2]=M+t,\nVG(g,s,j,3);else if(2==t.f||4==t.f){v=3*h;t=3*y;for(m=0;10>m;++m)l=o-(o-N)/10*m,s=r-(r-M)/10*m,j=m/10,SG(g.a,P(J(Q((l+v*j)*(QG(),R)))),P(J(Q((s-t*j)*R))),P(J(Q((l-v*j)*R))),P(J(Q((s+t*j)*R))))}else SG(g.a,P(J(Q(o*(QG(),R)))),P(J(Q(r*R))),P(J(Q(N*R))),P(J(Q(M*R))))}}y=iH(f.p+1);h=iH(f.p+1);for(A=1;A<=f.q;++A)l=f.c[A].i,m=f.c[A].j,o=f.b[l].q,r=f.b[m].q,++h[l],++h[m],y[l]=y[l]/h[l]+r/h[l],y[m]=y[m]/h[m]+o/h[m];jH(g,f.k.v);m=kH(f.k.w);N=iH(f.p+1);r=iH(f.p+1);o=D(mH,u,121,f.p+1,0);for(A=1;A<=f.p;++A)l=\nnH(f,A),(null==l||1>l.length)&&(l=ib),j=f.b[A],3==f.b[A].a&&0pH(y[A]-f.b[A].q)&&(v=!1),2pH(y[A]-f.b[A].q)&&(M=!0),t=l,s=n,f.k.oc&&(F=f.b[A].i,0y&&(y=1),h/=y,y=v/y,v=4*h,t=4*y,s=iH(5),j=iH(5),s[0]=f.b[l].q+v,s[1]=f.b[m].q+v,j[0]=f.b[l].r-t,j[1]=f.b[m].r-t,s[3]=f.b[l].q-v,s[2]=f.b[m].q-v,j[3]=f.b[l].r+t,j[2]=f.b[m].r+t,s[4]=s[0],j[4]=j[0],106!=f.k.k&&sH(g,s,j,5),106==f.k.k&&tH(f,f.c[f.w].i,f.c[f.w].j))){h=0;for(A=1;A<=f.p;++A)0~~(f.p/2))for(A=1;A<=f.p;++A)0e;++e)if(d=a.zb[e])0b&&(b=c);return b}\nfunction DH(a,b,c,d){var e=OF?350:170,f,g,h,j;EH(d);b=FH(a,b);c=FH(a,c);h=e;for(g=1;g<=a.Sb;++g){j=new GH(e);f=a.zb[g];for(var l=b,o=c,m=j,r=void 0,t=void 0,y=void 0,v=void 0,s=r=r=r=v=r=void 0,A=void 0,F=void 0,M=t=y=r=r=void 0,N=void 0,$=void 0,s=0,F=m.a,A=1;A<=f.q;++A)r=HH(l,o,f.c[A].a,f.c[A].b),ry+F||(r=N*r+$*v,0>r||(y=Math.sqrt(y),t=Math.sqrt(t),r/=y*t,1<=r||(r=1.5707963267948966-Math.acos(r),r=t*Math.cos(r),r*=r,r=a.yb||0>=a.ub)&&(!a.M&&(a.M=nC(a)),IH(a,a.M));b=new JH;b.b=a.yb;b.a=a.ub;return b}function uG(a){var b;b=tG(a);b.b/=a.xb;b.a/=a.xb;return b}\nfunction KH(a,b,c,d){var e,f;if(!b||LH(b)){if((e=0=e;++e)b=hI(h,d);e=OH(DE(oy(b.substr(0,3)),10)).a;g=OH(DE(oy(b.substr(3,3)),10)).a;hI(h,d);for(b=1;b<=e+g;++b){for(f=n;!(j=hI(h,d),null==j||H(j,"$MOL"));)f+=j+d;a.zb[++a.Sb]=new iI(a,f)}a.xb=1;qG(a,1,e,1,!1);qG(a,e+1,e+g,3,!1);d="readRXNFile"}else{(a.J||a.Vb)&&(a.dc=!1);a.ob=new iI(a,b);if(!a.ob||0==a.ob.p)return!a.ob&&(mu(a,"ERROR - problems in reading/processing MOL input"),\na.bf(a.Ec.d)),!!a.ob;d=(a.dc||a.Fb)&&a.p||a.Mb;null!=a.t&&a.ob&&jI(a.ob,a.t,!0);null!=a.u&&a.ob&&jI(a.ob,a.u,!1);d||(a.Sb=0,a.xb=1);h=kI(a.ob);if(1>=h||a.J)a.zb[++a.Sb]=a.ob;else{a.Fb=!0;for(b=1;b<=h;++b)a.zb[++a.Sb]=new lI(a,a.ob,b)}d?a.o=a.Sb:a.o=1;a.ob=a.zb[a.o];a.J?qG(a,1,1,0,!0):qG(a,1,h,0,!d);d=uj}mI(a);null!=d&&(oF(a.r,Pd),a.r&&AG(Xp(a.r,d),0,0,0),a.hc=!0);a.Ib=!0;c&&a.bf(a.Ec.d);return!0}function mu(a,b){null==b&&(b=n);a.Gb=!0;a.X=b;a.ig("info: "+b)}\nfunction hH(a,b){var c;c=Math.round(b);100>c&&(!PF[c]&&(PF[c]=new oD(Ue,0,c)),!RF[c]&&nq(RF,c,BB(PF[c])),a.v=PF[c],a.w=RF[c])}function LH(a){var b;if(!a)return!1;b=a.tf();a=0!=(a.e&2);return b||a}function uH(a,b){return(a.mb+(a.Lb?1:0))*b}function ZG(a,b){var c,d;d=-1;for(c=0;c=b)switch(a.Kb=!0,a.Hb=!0,mu(a,n),b){case 102:yG(a,!0);RH(a,102);QH(a,102);d=!0;break;case 110:a.Ib=!0;a.k=c;a.pb.a!=a.pb.b&&a.pb.a.b!=a.pb.b?a.q&&(++a.Sb,a.o=a.Sb,a.q=!1):mu(a,"No more undo");if(!(a.pb.a!=a.pb.b&&a.pb.a.b!=a.pb.b))break;nI(a,oI(a.pb));a.r&&AG(Xp(a.r,yk),0,0,0);a.hc=!0;a.hc=!1;a.Ib=!0;break;case 111:a.k=c;if(a.pb.a.c)a.q&&(++a.Sb,a.o=a.Sb,a.q=!1);else{mu(a,"No more redo");break}if(!a.pb.a.c)break;e=a.pb;\nif(!e.a.c)throw new yy("Cannot redo. Index is out of range.");if(!e.a.c)throw new yy($e);e.a=e.a.c;nI(a,e.a.a);a.r&&AG(Xp(a.r,wj),0,0,0);a.hc=!0;a.hc=!1;a.Ib=!0;break;case 214:KH(a,null,a.R.a,a.R.b);a.k=c;break;case 151:case 152:case 154:case 153:e=null;a.k=c;switch(b){case 152:e=pI(a.jc);break;case 151:e=qI(a.jc);break;case 154:e=a.jc;e.a=e.c;e=pI(e);break;case 153:e=a.jc,e.a=-1,e=qI(e)}null==e?mu(a,"No more molecules in SDF buffer"):(BG(a),a.Vb=!0,rI(a,e,!1),a.Vb=!1,H(a.X,n)&&(mu(a,"MOL n. "+(a.jc.a+\n1)+" of "+a.jc.c),d=!0,a.r&&AG(Xp(a.r,"SDFstack"),0,0,0),a.hc=!0,a.hc=!1));break;case 101:rq(4,new sI(a));a.k=c;break;case 107:rq(2,new tI(a));break;case 114:rq(3,new uI(a));a.k=c;break;case 103:a.Mb=!0;a.k=c;break;case 105:a.A&&a.Bb&&(a.Bb=!1,vI(a.ob),a.Ib=!0,a.r&&AG(Xp(a.r,yg),0,0,0),d=a.hc=!0,a.k=c);a.I=1;break;case 109:a.k=c;e=wI(a.ob);if(2==e){mu(a,"Copying the agent not possible !");break}d=sG(a.ob);a.Ib=!0;a.ob=new WF(a.ob);d=dw((a.M.b-a.mb)/2-d.a);for(e=1;e<=a.ob.p;++e)wG(a.ob.b[e],2*d/a.xb,\n0/a.xb);a.zb[++a.Sb]=a.ob;a.o=a.Sb;a.r&&AG(Xp(a.r,"reactionCopy"),0,0,0);d=a.hc=!0;RH(a,109);QH(a,109);break;case 104:d=XF(a);break;case 213:a.k=c;if(!a.S){var f,g,h,j,l;l=new BD;for(f=a.U,g=0,h=f.length;g=b&&(a.n=33+(b-1301)),0=a.k)a.cb=2,BI(a.ob),d=!0,lG(a,kg,a.o,0,a.ob.w);else if(202==a.k||203==a.k||204==a.k)if(0=g;++g){f=0;for(c=1;c<=a.Sb;++c)wI(a.zb[c])==g&&(h[g][++f]=c);h[g][0]=f}e+=Oa;e+=EI(h[1][0],3)+EI(h[3][0],3)+ea;for(c=1;c<=h[1][0];++c)e+=Ja+FI(a.zb[h[1][c]],d,b);for(c=1;c<=h[3][0];++c)e+=Ja+FI(a.zb[h[3][c]],d,b)}else{1f&&(f=e.b[b].r),e.b[b].qb;++b)nq(g.b,g.c++,null),nq(f.b,f.c++,null);for(b=1;b<=e.p;++b)j=e.b[b].b,null==j||0==j.length||(H(j,fg)?Dm(c,new uC(b)):0==j.indexOf("mix")?(j=DE(py(j,3),10),l=null,f.c>j&&(l=(eD(j,f.c),f.b[j])),null==l?h=new Jm:h=l,Dm(h,new uC(b)),kD(f,j,h)):0==j.indexOf(aj)&&(j=DE(py(j,2),10),l=null,g.c>j&&(l=\n(eD(j,g.c),g.b[j])),null==l?h=new Jm:h=l,Dm(h,new uC(b)),kD(g,j,h)));d+=KI(of,c);if(0a.M.a-P(J(Q(a.mb*a.nb))))return!1;var b=a.Cc,f=a.Dc,g,h,j,l;l=0;if(0>b||0>f||f>a.ub||b>a.yb)b=0;else if(1==a.Sb)b=a.o;else{b=FH(a,b);f=FH(a,f);j=1.7976931348623157E308;for(h=1;h<=a.Sb;++h){g=a.zb[h];for(var o=void 0,m=void 0,r=void 0,m=1.7976931348623157E308,o=1;o<=g.p;++o)r=HH(b,f,g.b[o].q,g.b[o].r),r=a.k)a.cb=2,BI(a.ob),ZF(a,jg,a.ob.v);else if(230==a.k)a.cb=3,ZF(a,ng,a.ob.v);\nelse if(233<=a.k&&262>a.k)OI(a.ob,!1),ZF(a,ig,a.ob.v),a.cb=3;else if(107==a.k){if(a.bc.b)return!0;AI(a.ob,a.ob.v,Uq(a.bc.e.Tc.a.pb,Ak));a.ob.j=!0;ZF(a,"addAtomQuery",a.ob.v)}else if(105==a.k)(c=PI(a.ob))?ZF(a,"markAtom",a.ob.v):ZF(a,"unMarkAtom",a.ob.v);else if(113!=a.k)if(300c.length&&(c=Uf),AI(a.ob,a.ob.v,c)),ZF(a,Mj+a.n,a.ob.v)}else e=!1}else if(0<\na.ob.w)if(a.eb.c=a.o,104==a.k)XF(a);else if(106==a.k){c=a.ob;d=a.ob.w;if(0d&&(d=b);if(0==d)break;YF(c,d);c.a[d]=0}aG(a.ob);lG(a,"delBondGroup",a.o,0,a.ob.w);a.ob.w=0}else if(201==a.k)QI(a.ob,a.ob.w),lG(a,"setBondStereo",a.o,0,a.ob.w);else if(202==a.k||205==a.k)1==a.ob.c[a.ob.w].c&&0==a.ob.c[a.ob.w].f?(a.ob.c[a.ob.w].c=2,lG(a,Nj,a.o,0,a.ob.w)):(a.ob.c[a.ob.w].c=1,a.ob.c[a.ob.w].f=\n0,lG(a,Oj,a.o,0,a.ob.w)),a.ob.c[a.ob.w].f=0;else if(203==a.k)a.ob.c[a.ob.w].c=2,a.ob.c[a.ob.w].f=0,aG(a.ob),lG(a,Nj,a.o,0,a.ob.w);else if(204==a.k)a.ob.c[a.ob.w].c=3,a.ob.c[a.ob.w].f=0,aG(a.ob),lG(a,Pj,a.o,0,a.ob.w);else if(206<=a.k&&229>=a.k)a.cb=2,BI(a.ob),lG(a,kg,a.o,0,a.ob.w),aG(a.ob);else if(107==a.k){if(!a.bc.b)return!0;c=Uq(a.bc.e.Tc.a.pb,Ak);a.ob.c[a.ob.w].c=9;a.ob.c[a.ob.w].d=c;lG(a,"setQueryBond",a.o,0,a.ob.w)}else 105==a.k?(c=a.ob,b=a.ob.w,c.k.gb=!0,c.k.sc?(c.i=-1,d=c.c[b].i,b=c.c[b].j,\nf=c.b[d].c,h=c.b[b].c,j=4,f==h&&0=a.k)return!1;++a.Sb;a.o=a.Sb;a.zb[a.Sb]=new zG(a);a.ob=a.zb[a.Sb];a.eb.c=a.o;202<=a.k&&204>=a.k||205==a.k?(RI(a.ob,null),a.ob.q=0,SI(a.ob,1,c/a.xb,d/a.xb),a.ob.v=1,a.ob.x=1,a.cb=1,b=a.ob,CI(b,b.v,0),205==a.k?(SI(a.ob,2,(c+21.65)/a.xb,(d-12.5)/a.xb),a.ob.e[0]=1,a.ob.e[1]=2,a.ob.r=1,lG(a,"addChain",a.o,0,a.ob.w)):lG(a,\nhg,a.o,0,a.ob.w)):206<=a.k&&229>=a.k?(a.ob.z=FH(a,c),a.ob.A=FH(a,d),a.cb=2,BI(a.ob),a.r&&AG(Xp(a.r,jg),0,0,0),a.hc=!0):300c.length&&(c=Uf),AI(a.ob,1,c)),ZF(a,"addAtom",a.ob.v)):230==a.k?(bI(a,null,!0),a.r&&AG(Xp(a.r,ng),0,0,0),a.hc=!0):233<=a.k&&262>a.k?(RI(a.ob,null),a.ob.q=0,SI(a.ob,1,c/a.xb,d/a.xb),a.ob.v=1,OI(a.ob,!0),a.r&&AG(Xp(a.r,ig),0,0,0),a.hc=!0):oE()}else e=!1;e&&TI(a)}return a.Ab=\ne}\nfunction UI(a,b,c,d){var e,f,g,h;oE();if(!a.Db||VI(b))return!0;a.Gb=!1;c-=P(J(Q(uH(a,a.nb))));d-=P(J(Q(vH(a,a.nb))));f=FH(a,c-a.Cc);g=FH(a,d-a.Dc);e=FH(a,c);h=FH(a,d);if(2==a.cb||3==a.cb||9==a.cb)return!0;if(1==a.cb){f=!1;a.zb[a.eb.c].v=0;--a.ob.p;g=c;var b=d,j=a.Nb;0>g||0>b||b>a.ub||g>a.yb?EH(j):DH(a,g,b,j);++a.ob.p;if(0g&&(g=1);b/=g;j/=g;o=g/2/Math.tan(0.5235987755982988);m=e-f.b[l].q;r=h-f.b[l].r;l=-g/2+m*j+r*b;b=r*j-m*b;if(0>l)if(1f.b[2].r-f.b[1].r&&0h-f.b[1].r&&(f.b[2].r=f.b[1].r-g/2),0>f.b[2].q-f.b[1].q&&0e-f.b[1].q&&(f.b[2].q=f.b[1].q-0.866*g);else{if(2==f.b[f.e[0]].j&&(o=f.b[f.e[0]].p[1],o==f.e[1]&&(o=f.b[f.e[0]].p[2]),j=f.b[f.e[0]].q-f.b[o].q,b=f.b[f.e[0]].r-f.b[o].r,g=Math.sqrt(j*j+b*b),1>g&&(g=1),b/=g,j/=g,m=e-f.b[o].q,r=h-f.b[o].r,e=r*j-m*b,m=f.b[f.e[1]].q-f.b[o].q,r=f.b[f.e[1]].r-f.b[o].r,h=r*j-m*b,0h||0>e&&0=b?0-b:b)>e){++f.r;if(100g&&(g=1),SI(f,f.p,f.b[f.x].q+25*(j/g),f.b[f.x].r+25*(b/g))}a.B=!0}else if(113==a.k&&0c||0>d||d>a.ub||c>a.yb)&&5!=a.cb))e=uG(a),h=a.ob,j=sG(h),b=j.a,j=j.b,0>f&&be.b||0>g&&je.a||ZI(h,f,g),a.cb=5;dG(a,!1);a.Ib=!0;qF(a);a.Cc=c;a.Dc=d;return!0}\nfunction PH(a,b,c,d){var e,f;if(!a.J||a._f().a||a.ag().a||a.K)if(f=!1,e=$G(a,c,d),e!=a.Cb&&(f|=RH(a,a.Cb),f|=QH(a,e),a.Cb=e),!LH(b)){c-=P(J(Q(uH(a,a.nb))));d-=P(J(Q(vH(a,a.nb))));b=c;c=a.Nb;0>b||0>d||d>a.ub||b>a.yb?EH(c):DH(a,b,d,c);113==e&&0d.b[e].j&&(eJ(d,null),b=d.e[d.r-1],d.c[d.q].i=e,d.c[d.q].j=b,fJ(d.b[e],b),fJ(d.b[e],b)),YF(d,d.p)),d.u=!1,a.hc=!0;else if(0!=a.eb.c&&a.o!=a.eb.c){YF(a.ob,a.ob.p);b=a.ob.x;c=a.eb.a+a.ob.p;e=a.zb[a.eb.c];d=new GI(a,z(gJ,u,120,[null,a.ob,e]),2);d.b[0]=new hJ;iJ(d,b,c,1);b=D(gJ,\nu,120,a.zb.length,0);for(f=0,c=0;fd.c[b].c?(++d.c[b].c,d.c[b].f=0):mu(d.k,"Maximum allowed bond order is 3 !")):6==d.b[e].j?(--d.q,kJ(d,d.x),mu(d.k,"Not possible connection !")):(d.c[d.q].j=e,kJ(d,d.x),b=d.x,fJ(d.b[e],b),fJ(d.b[b],e),lJ(d.c[d.q],d.b)));xG(a.ob);a.B&&(d=a.pb,d.a!=d.b&&d.a.b!=d.b&&(e=d.a.c,oI(d),d.a.c=e),\nlG(a,hg,a.o,0,a.ob.w),a.B=!1);d=!0}else 5==a.cb&&(xG(a.ob),d=a.hc=!0);0=b&&0==c||b==c&&a.o==a.Zb)return-1;0>=b&&0lb))for(;Bc=fc[vc]*fc[vc];)0==Bc%fc[vc]?ic=!1:++vc;if(ic){oc[++ec]=Jw(Bc);if(ec>=lb)break;Ica&&(ca=0),0>ld&&(ld=0),Yd=28*ca+ld));fb=0;0!=m.b[T].n&&(-2>m.b[T].n?fb=1:-2==m.b[T].n?fb=2:-1==m.b[T].n?fb=3:1==m.b[T].n?fb=4:2==m.b[T].n?fb=5:2Bb&&(Bb=10-Bb));Yc=126;O=Bd;O+=126*m.b[T].i;Yc*=7;O+=fb*Yc;Yc*=7;0!=Bb&&(O+=Bb*Yc);Yc*=7;O+=Yd*Yc;Yc*=783;O+=m.b[T].j*Yc;S[T]=Jw(O)}for(nc=0;!uJ(m,Eb,S);){Rc=!1;for(T=1;T<=m.p;++T)Eb[T]!=db[T]&&(db[T]=Eb[T],Rc=!0);if(Rc){for(T=1;T<=m.p;++T){S[T]=Mk;for(eb=1;eb<=m.b[T].j;++eb)S[T]=Nw(S[T],Na[Eb[m.b[T].p[eb]]])}nc=\n0}else if(0m.c[T].j&&(Ra=m.c[T].i,m.c[T].i=m.c[T].j,m.c[T].j=Ra,1==m.c[T].f?m.c[T].f=3:2==m.c[T].f?m.c[T].f=4:3==m.c[T].f?m.c[T].f=1:4==m.c[T].f&&(m.c[T].f=2));for(T=1;Tm.a[v])&&M!=Ba[v]){Jc=!0;for(Ac=1;Ac<=ub;++Ac)if(da[Ac]==v&&la[Ac]==M||da[Ac]==M&&la[Ac]==v){Jc=!1;break}Jc&&(++ub,da[ub]=v,la[ub]=M)}}else V[++Ga]=M;if(0==Ga){if(aa==m.p)break;v=U[L--]}else if(1==Ga)Ba[V[1]]=v,v=V[1],m.a[v]=++aa;else{U[++L]=v;A=0;for(sa=1;sa<=Ga;++sa)if($=jJ(m,V[sa],v),!K[$]){A=V[sa];break}if(0==A)for(sa=1;sa<=Ga;++sa)if($=jJ(m,V[sa],v),2==m.d[$]||3==m.d[$]){A=V[sa];break}0==\nA&&(A=V[1]);Ba[A]=v;v=A;m.a[A]=++aa}}Ba=iH(m.p+1);y=iH(m.p+1);jd=[];kd=[];F=aa=L=0;for(sa=1;sa<=m.p;++sa)if(1==m.a[sa]){v=sa;break}b:for(;;){0m.b[Ob].j||4ya.b[Dd].j||3Jd[xb]&&\n(kc=ob,ob=xb,xb=kc);X=ob;0==ob&&(X=xb,$a=!0);for(wc=1;wc<=ya.b[Dd].j;++wc)Mc=ya.b[Dd].p[wc],Mc!=Cc[Ld-1]&&(0==mb?mb=Mc:gb=Mc);0Jd[gb]&&(kc=mb,mb=gb,gb=kc);Sb=mb;0==mb&&(Sb=gb,oe=!0);pb=0pb+Af?-(pb+Af):pb+Af)||0!=lg||0!=Bf?mu(ya.k,"Bad stereoinfo on allene !"):(Dc=ya.b[Cc[Ld-1]].q-ya.b[Dd].q,Kd=ya.b[Cc[Ld-1]].r-ya.b[Dd].r,nd=Math.sqrt(Dc*Dc+Kd*Kd),0.001>\nnd&&(nd=0.001),0<(ya.b[Sb].r-ya.b[Cc[Ld-1]].r)*(Dc/nd)-(ya.b[Sb].q-ya.b[Cc[Ld-1]].q)*(Kd/nd)?Rb[gc]=1:Rb[gc]=-1,$a&&(Rb[gc]*=-1),oe&&(Rb[gc]*=-1),X==ob&&0>pb&&(Rb[gc]*=-1),X==xb&&0>Af&&(Rb[gc]*=-1),Jd[X]>Jd[Sb]&&(Rb[gc]*=-1))}}else c:{var qc=m,Gb=Ob,Ae=fa,wd=fd,Tc=da,Tb=la,od=Id,pe=ta,Zd=void 0,Zc=void 0,Be=void 0,rc=void 0,Xa=void 0,sc=void 0,yb=void 0,he=void 0,Md=void 0,$c=void 0,Sa=void 0,Ta=void 0,Ec=void 0,Ub=void 0,pd=void 0,ba=void 0,qd=void 0,Ta=iH(4),Ub=iH(4),$d=void 0,xd=void 0,qe=void 0,\nhf=void 0,jf=void 0,Xg=void 0,Xg=-1;0Xa;++Xa)0>=Ta[Xa]||(Zd=jJ(qc,Gb,Ta[Xa]),\nUb[Xa]=yJ(qc,Zd,Gb),0Ub[Xa]?(++yb,rc=Ta[Xa],sc=Ta[Xa]):he=Ta[Xa]);Md=$c+yb;ba=iH(4);pd=0;if(3==qc.b[Gb].j){if(1==$c&&1==yb||3==Md&&0<$c&&0Xa;++Xa)Zd=jJ(qc,Gb,Sa[Xa]),Zc[Xa]=yJ(qc,Zd,Gb);if(4==Md){if(0==$c||0==yb){mu(qc.k,"Error in C4 stereospecification !");break c}if(1==$c||1==yb)ba[0]=Sa[0],ba[1]=Sa[3],ba[2]=Sa[2],ba[3]=Sa[1],pd=Zc[0];else{for(Xa=0;4>Xa;++Xa)-1==Zc[Xa]&&(Zc[Xa]=0);Md=2}}else if(3==Md)if(3==$c||3==yb)ba[0]=Sa[0],ba[1]=Sa[3],ba[2]=Sa[2],ba[3]=Sa[1],0<$c?pd=-1:pd=1;else{1==$c?$c=Be=1:yb=Be=-1;for(Xa=0;4>Xa;++Xa)Zc[Xa]==Be&&(Zc[Xa]=0);Md=2}if(2==Md)if(1==$c&&1==yb)Sa[1]==\nrc?(Sa[1]=Sa[2],Sa[2]=Sa[3]):Sa[2]==rc&&(Sa[2]=Sa[3]),ba[0]=qd,ba[1]=rc,ba[2]=Sa[2],ba[3]=Sa[1],pd=1;else{if(Zc[0]==Zc[1]||Zc[1]==Zc[2]){mu(qc.k,"Error in C4 stereospecification ! 2/0r");break c}0!=Zc[0]?(ba[0]=Sa[0],ba[1]=Sa[2],ba[2]=Sa[1],ba[3]=Sa[3]):(ba[0]=Sa[1],ba[1]=Sa[3],ba[2]=Sa[2],ba[3]=Sa[0]);1<$c?pd=1:pd=-1}}var Kb=void 0;Ta[0]==ba[1]?(Kb=ba[0],ba[0]=ba[1],ba[1]=Kb,Kb=ba[2],ba[2]=ba[3],ba[3]=Kb):Ta[0]==ba[2]?(Kb=ba[2],ba[2]=ba[0],ba[0]=Kb,Kb=ba[1],ba[1]=ba[3],ba[3]=Kb):Ta[0]==ba[3]&&(Kb=\nba[3],ba[3]=ba[0],ba[0]=Kb,Kb=ba[1],ba[1]=ba[2],ba[2]=Kb);Ta[1]==ba[2]?(Kb=ba[1],ba[1]=ba[2],ba[2]=Kb,Kb=ba[2],ba[2]=ba[3],ba[3]=Kb):Ta[1]==ba[3]&&(Kb=ba[1],ba[1]=ba[3],ba[3]=Kb,Kb=ba[2],ba[2]=ba[3],ba[3]=Kb);ba[2]==Ta[2]?pe[Gb]=1:ba[2]==Ta[3]?pe[Gb]=-1:mu(qc.k,"Error in stereoprocessing ! - t30");pe[Gb]*=pd}}}Da=new BJ;N=iH(m.p+1);for(sa=1;sa<=m.p;++sa)N[y[sa]]=sa;for(sa=1;sa<=m.p;++sa){v=y[sa];jd[v]&&(Da.a.a+=cb);0=Se&&(sd=!0,Ea=(FF(),MF)[Se]);sd&&(0!=ae?Ea=Wf+ae+Ea:Ea=Wf+Ea,1==yd[Qe]?Ea+=Nd:-1==yd[Qe]&&(Ea+="@@"),1==Cf?Ea+=Pe:1ie?-ie:ie)&&(Ea+=0>ie?-ie:ie)),mg&&(Ea+=bd+Hg),Ea+=cg);Bp(Re.a,Ea);for(pa=1;pa<=ub;++pa)if(da[pa]==v||la[pa]==v)s=la[pa],s==v&&\n(s=da[pa]),N[v]",!0);j=-1c;++c)(d=b.d[c])?a.zb[c]=new WF(d):a.zb[c]=null;0b||b>a.Sb?(mu(a,"ERROR - invalid mol index: "+b),a.bf(a.Ec.d),null):a.zb[b]}function mI(a){var b,c,d;b=mG(a);for(d=1;d<=a.Sb;++d)c=a.zb[d],c.o=b}function HJ(a,b){b!=a.nb&&(a.nb=b,a.jg(),a.bf(a.Ec.d))}function IJ(a,b){var c,d,e;if(b!=a.xb){c=uG(a);a.xb=b;d=uG(a);e=P(J(Q((d.b-d.c)/2-(c.b-c.c)/2)));d=P(J(Q((d.a-d.d)/2-(c.a-c.d)/2)));for(c=1;c<=a.Sb;++c)ZI(a.zb[c],e,d),xG(a.zb[c]);a.Ib=!0;a.bf(a.Ec.d)}}\nfunction pG(a,b){var c;c=-1;H(b,"Select substituent")?(c=202,b=n):H(b,Ab)?c=235:H(b,Hb)?c=240:H(b,zb)?c=260:H(b,Pb)?c=261:H(b,$b)?c=241:H(b,Nb)?c=233:H(b,Mb)?c=236:H(b,Lb)?c=237:H(b,Zb)?c=234:H(b,Yb)?c=243:H(b,ac)?c=252:H(b,Vb)?c=244:H(b,bc)?c=239:H(b,"-PO3H2")?c=251:H(b,wb)?c=242:H(b,sb)?c=245:H(b,vb)&&(c=238);0=a.mb-1)for(g=f.b.b;j>=a.mb-1&&1=a.k&&(a.k=213);for(c=1;14>=c;++c)FG(a,b,c,1),FG(a,b,c,2);a.k=d;wH(a.Ec,a.wc.a,0,0)}var f;if(a.Hb){eH(a.fb.b.a,a.nb/R);b=a.fb.b;d=a.mb+(a.Lb?1:0);c=(a.M.a-P(J(Q(vH(a,a.nb)))))/a.nb;f=c-a.mb;GG(b,HF);PG(b.a,P(J(Q(0*(QG(),R)))),P(J(Q(0*R))),P(J(Q(d*R))),P(J(Q(c*\nR))));a.Lb?(GG(b,(EC(),JC)),e=aH*(a.mb+(a.Lb?1:0))+3,f>e&&(RG(b,0,e,a.mb-1,e),SG(b.a,P(J(Q(0*R))),P(J(Q(e*R))),P(J(Q(0*R))),P(J(Q((c-1)*R)))),RG(b,a.mb-1,e,a.mb-1,f),RG(b,a.mb-1,f,d,f))):(GG(b,IF),SG(b.a,P(J(Q(0*R))),P(J(Q(0*R))),P(J(Q(0*R))),P(J(Q((c-1)*R)))),RG(b,0,aH*a.mb,c-1,aH*a.mb),GG(b,VC(HF)),SG(b.a,P(J(Q((d-1)*R))),P(J(Q(0*R))),P(J(Q((d-1)*R))),P(J(Q((f+1)*R)))));SG(b.a,P(J(Q(0*R))),P(J(Q((c-1)*R))),P(J(Q(d*R))),P(J(Q((c-1)*R))));for(c=3;c<=aH+2;++c)FG(a,b,1,c);b=P(J(Q(vH(a,a.nb))));wH(a.Ec,\na.fb.a,0,b)}a.Jb&&(eH(a.fc.b.a,a.nb/R),d=a.fc.b,c=a.Lb?1:3,b=(a.M.a-P(J(Q(vH(a,a.nb))))-P(J(Q(a.mb*a.nb))))/a.nb,a.Lb?(GG(d,(EC(),JC)),PG(d.a,P(J(Q(0*(QG(),R)))),P(J(Q(0*R))),P(J(Q(c*R))),P(J(Q(b*R))))):(GG(d,VC(HF)),SG(d.a,P(J(Q((c-1)*(QG(),R)))),P(J(Q(0*R))),P(J(Q((c-1)*R))),P(J(Q(b*R)))),GG(d,HF),SG(d.a,P(J(Q((c-2)*R))),P(J(Q(0*R))),P(J(Q((c-2)*R))),P(J(Q(b*R)))),GG(d,IF),SG(d.a,P(J(Q((c-3)*R))),P(J(Q(0*R))),P(J(Q((c-3)*R))),P(J(Q(b*R))))),b=a.M.b-P(J(Q((a.Lb?1:3)*a.nb))),c=P(J(Q(vH(a,a.nb)))),\nwH(a.Ec,a.fc.a,b,c))}}function su(a,b){a.A?0==b&&(a.I=-1,mu(a,Vg),qF(a)):(a.gb?a.I=b:-1a.I?a.I=10*a.I+b:a.I=b,a.gb=!1,0==a.I?(a.I=-1,mu(a,Vg)):mu(a,a.I+ga),qF(a))}function IH(a,b){var c,d;d=b.b;c=b.a;a.J||(d-=P(J(Q(uH(a,a.nb))))+P(J(Q((a.Lb?1:3)*a.nb))),c-=P(J(Q(vH(a,a.nb))))+P(J(Q(a.mb*a.nb))));1>d&&(d=1);1>c&&(c=1);a.yb=dw(d);a.ub=dw(c)}function TF(a){FF();return 14<=a&&20>=a?1:21<=a&&28>=a?2:29<=a&&31>=a?3:0}w(577,469,Yl);_.zf=function(a){cG(this,a)};_.$f=LJ;\n_._f=function(){return iG(),null!=this.Pb?jG:kG};_.ag=function(){return iG(),iG(),kG};_.bg=XB;_.cg=function(a,b,c){return jC(this,b,c)};_.dg=XB;_.eg=function(){oE()};_.fg=hD;_.gg=MJ;_.hg=hD;_.ig=function(){oE()};\n_.Af=function(a){var b,c;if(this.s)if(c=a.c,b=a.f,a=a.i,c=(100+2*c)/100,this.J||!(bthis.M.a-P(J(Q(this.mb*this.nb)))||b>this.M.b-P(J(Q((this.Lb?1:3)*this.nb))))){if(b=this.xb*c,b>this.xb&&10>=b||b=b&&HJ(this,b)};_.bf=function(){KJ(this)};_.jg=function(){FJ(this)};_.kg=Fy;_.j=null;_.k=0;_.n=0;_.o=0;_.p=!1;_.q=!1;_.s=!0;_.t=null;_.u=null;_.v=null;_.w=null;_.x=13;_.y=null;_.z=!0;\n_.A=!1;_.B=!1;_.C=!0;_.F=null;_.G=null;_.I=1;_.J=!1;_.K=!1;_.L=!1;_.M=null;_.N=!0;_.O=!1;_.P=!0;_.Q=!0;_.R=null;_.S=null;_.T=null;_.V="http://peter-ertl.com/jsme/2013_03/help.html";_.W=null;_.X=null;_.Y=null;_._=null;_.ab=!1;_.bb=!0;_.cb=0;_.db=Lk;_.fb=null;_.gb=!0;_.hb=null;_.ib=null;_.jb=null;_.kb=null;_.lb=null;_.mb=24;_.nb=1;_.ob=null;_.pb=null;_.rb=null;_.sb=null;_.tb=!0;_.ub=0;_.vb=null;_.wb=1;_.xb=1;_.yb=0;_.Ab=!1;_.Bb=!1;_.Cb=0;_.Db=!1;_.Eb=!1;_.Fb=!0;_.Gb=!0;_.Hb=!0;_.Ib=!0;_.Jb=!0;\n_.Kb=!0;_.Lb=!1;_.Mb=!1;_.Ob=!1;_.Pb=null;_.Qb=null;_.Rb=!1;_.Sb=0;_.Tb=!0;_.Ub=null;_.Vb=!1;_.Wb=null;_.Xb=!1;_.Yb=null;_.Zb=0;_.$b=0;_._b=0;_.ac=!1;_.bc=null;_.cc=!1;_.dc=!1;_.ec=!1;_.fc=null;_.gc=!1;_.hc=!1;_.kc=!0;_.lc=!1;_.mc=!1;_.nc=!0;_.oc=!0;_.pc=null;_.qc=null;_.rc=!1;_.sc=!1;_.tc=!0;_.uc=null;_.vc=!1;_.wc=null;_.xc=null;_.yc=null;_.zc=!1;_.Ac=!0;_.Bc=!0;_.Cc=0;_.Dc=0;var aH=10,JF,PF,RF,HF,IF,KF,GF,OF,NJ=null,NF,MF;\nfunction NI(a,b,c,d,e){a.b[e]&&(zH(a.r),oF(a.r,Ne),a.r.a=e,a.r.d=c,a.r.e=d,a.r.f=b,OJ(a.c,a.r,e),zH(a.r))}function PJ(a,b,c){return a.b[c]?(zH(a.r),a.r.a=c,a.r.b=b,OJ(a.c,a.r,c),zH(a.r),!0):!1}function qF(a){KJ(a);a.f&&(QJ(a.Ec),a.f=!1)}function RJ(a,b,c){b in a.b?a.b[b]=c:$wnd.alert("Invalid callback name: "+b)}\nfunction SJ(){FF();hC.call(this);this.Ec=(PB(),PB(),QB).a;this.eb=new TJ;this.Nb=new TJ;this.H=new oD(null,0,8);this.Z=(this.mb-6)/1.5;this.r=new UJ;this.D=(EC(),GC);this.zb=D(gJ,u,120,99,0);this.qb=new fC;this.jc=new VJ;this.$=H((oE(),pE[ai]),bf);this.E=new WJ;this.U=z(hw,u,1,[Ab,Hb,$b,zb,Pb,Nb,Mb,Lb,Zb,ac,Vb,Yb,wb,vb,sb]);this.ic=new XJ;this.ob=new zG(this);NF[0]=IC;NF[1]=new km(255,153,153);NF[2]=new km(255,204,102);NF[3]=new km(255,255,153);NF[4]=new km(102,255,255);NF[5]=new km(51,204,255);NF[6]=\nnew km(255,153,255);this.eb.c=1;this.Nb.c=1;this.zb[1]=this.ob;this.Y=new YJ(this);this.a=z(hw,u,1,[ee,Qd,Wd,ke,Vd,fe,Ye]);var a,b,c,d;this.b={};for(b=this.a,c=0,d=b.length;cU&&(U=0),la=new pK(f,V,U,g),qK(la),Dm(f.k,la),N.c=V,N.b=da,N.d=24,N.a=U,N);da=$.c;V=$.b;hF(new mF(h),f);U=0>=$J();N=new rF(h);U?(U=new rK,ky(U,g.pb.alt),0<=da&&(U.pb.style[Fk]=da+oj),0<=V&&(U.pb.style[Uh]=\nV+oj),V=new sF(f,U,da,$),Ty(V.d.f,V.b,oC(V.d)-V.c-V.a.a,pC(V.d)-(V.a.d-V.a.a)),Dm(f.k,V),U.pb.draggable=xk,U.pb.style[ih]=(hr(),Ji),uy(U,N,(Nt(),Nt(),Ot)),U.pb.style[Tf]=Qi):(g.pb.draggable=xk,g.pb.style[ih]=(hr(),Ji),uy(g,N,(Nt(),Nt(),Ot)),g.pb.style[Tf]=Qi)}else dF("JSME initialization error: HTML id "+a+" not found.")}function sK(){return kw(null)}function tK(a){return kw(a)}w(581,1,Kl,gK,iK,jK,hK);_.lg=function(a){vy(this.d,new uK(this,a),(ut(),ut(),vt))};\n_.mg=function(a){vy(this.d,new vK(this,a),(uu(),uu(),vu))};_.ng=function(a){vy(this.d,new wK(this,a),(Au(),Au(),Bu))};_.og=function(a){vy(this.d,new xK(this,a),(Du(),Du(),Eu))};_.pg=function(a){rq(2,new yK(this.b,a))};_.qg=function(){yG(this.b,!0)};_.rg=function(){Jq((Gq(),Hq),new zK(this))};_.sg=function(){var a,b,c;c=[];for(b=new zv(this.d.a);b.ba&&(b.x=a,hH(b,a),AH(b))};_._g=function(a,b){var c=this.b,d;d=GJ(c,a);1>b||b>d.p?(mu(c,"ERROR - invalid atom index: "+b),qF(c)):(d.v=b,TI(c))};\n_.ah=function(a){RJ(this.b,ee,a)};_.bh=function(a,b){RJ(this.b,a,b)};_.le=function(a){hy(this.d,a);fK(this)};_.ch=function(a){this.b.V=a};_.dh=function(a){HJ(this.b,a)};_.eh=function(a){var b=this.b;b.tb=a;AH(b)};_.fh=function(a){var b=this.b;b.wb=a;AH(b)};_.gh=function(a){IJ(this.b,a)};_.hh=function(a){this.b.Pb=a};_.ih=function(a){this.b.Qb=a};_.jh=function(a){var b=this.b;b.Wb=a;b.F=CG(b,!1)};_.kh=function(a){this.b.Yb=a};_.lh=function(a,b){iy(this.d,a,b);fK(this)};\n_.mh=function(a,b,c){c&&iy(this.c,a,b);iy(this.d,a,b);fK(this)};_.nh=function(a,b){jy(this.d,a,b);fK(this)};_.oh=function(a,b,c){c&&jy(this.c,a,b);jy(this.d,a,b);fK(this)};_.ph=function(a){pG(this.b,a)};_.qh=function(a,b){var c=this.b,d;c.q=!1;d=c.sc;c.sc=!1;c.uc=new DJ(c,a);c.sc=d;c.k=253;mu(c,b);qF(c)};_.me=function(a){qy(this.c.pb,a)};_.rh=function(a){this.b.i=a};_.ne=function(a){this.d.pb.style[Fk]=a;fK(this)};_.sh=function(a){YI(this.b,a)};_.th=function(){return UF(this.b)};_.a=-1;_.b=null;\n_.c=null;_.d=null;var kK=0;function zK(a){this.a=a}w(582,1,{},zK);_.pd=function(){var a,b;for(b=new zv(this.a.d.a);b.b=a.c.length)return!1;c=a.c[a.b];g=c.getAttribute(Fk)||n;b=c.getAttribute(Uh)||n;f=c.getAttribute(Ni)||n;e=c.getAttribute(Xh)||n;var h,j,l;l={};for(d=0;d=d&&b=a;return c?65536+((d&1023)<<10)+(e&1023):d}function aL(a,b){return 2>b||36b?b:10)?a-48:97<=a&&aa?-a:a):a}\nfunction dL(a,b){var c;c=new bL;c.d=we+(eL(0!=a?-a:0)?cL(0!=a?-a:0):n+Op(c));fL(0!=a?-a:0)&&gL(0!=a?-a:0,c);c.b=4;c.a=b;return c}function W(a){var b;b=new bL;b.d=we+(eL(a)?cL(a):n+Op(b));fL(a)&&gL(a,b);return b}function hL(a,b){var c;c=new bL;c.d=we+(eL(a)?cL(a):n+Op(c));fL(a)&&gL(a,c);c.b=b?8:0;return c}function iL(){var a;a=new bL;a.d=we+(eL(0)?cL(0):n+Op(a));fL(0)&&gL(0,a);a.b=2;return a}function jL(a){var b;b=new bL;b.d=we+(eL(a)?cL(a):n+Op(b));fL(a)&&gL(a,b);b.b=1;return b}\nfunction fL(a){return typeof a==Ui&&0b||36c||2147483647a)return 0;if(0==a)return 32;b=-(a>>16)>>16&16;c=16-b;a>>=b;b=a-256>>16&8;c+=b;a<<=b;b=a-4096>>16&4;c+=b;a<<=b;b=a-16384>>16&2;c+=b;a=a<>14;return c+2-(a&~(a>>1))}function xw(a){var b,c;if(0==a)return 32;c=0;for(b=1;0==(b&a);b<<=1)++c;return c}function gm(a){var b,c,d;b=D(qL,sl,-1,8,1);c=(rL(),sL);d=7;if(0<=a)for(;15>=4;else for(;0>=4;b[d]=c[a&15];return tL(b,d,8)}\nfunction OH(a){var b,c;return-129a?(b=a+128,c=(uL(),vL)[b],!c&&(c=vL[b]=new uC(a)),c):new uC(a)}w(618,615,{89:1,94:1,100:1,102:1},uC);_.eQ=function(a){return G(a,100)&&a.a==this.a};_.hC=Xw;_.tS=pL;_.a=0;function uL(){uL=x;vL=D(aJ,u,100,256,0)}var vL;function pH(a){return 0>=a?0-a:a}function qH(a){return 0>a?-a:a}function Xm(a,b){return a>b?a:b}function Q(a){return Math.round(a)}function wL(a){return Math.sqrt(a)}function nE(){}function ov(a){this.f=a}\nw(622,136,{89:1,97:1,101:1,105:1,106:1},nE,ov);function rL(){rL=x;sL=z(qL,sl,-1,[48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122])}var sL;function mL(a){this.f=a}w(624,617,{89:1,97:1,99:1,103:1,105:1,106:1},mL);function $K(a,b){return a.charCodeAt(b)}function xL(a,b){return-1!=a.lastIndexOf(b)&&a.lastIndexOf(b)==a.length-b.length}function H(a,b){return!G(b,1)?!1:""+a==b}function my(a,b){return a.indexOf(b)}\nfunction BE(a,b,c){return a.indexOf(b,c)}function zB(a,b){return a.lastIndexOf(b)}function cK(a,b,c){var d;for(d=0;0<=(d=c.indexOf(Yf,d));)36==c.charCodeAt(d+1)?c=c.substr(0,d-0)+Ha+py(c,++d):c=c.substr(0,d-0)+py(c,++d);return a.replace(RegExp(b,Hh),c)}\nfunction yL(a,b){for(var c=RegExp(b,Hh),d=[],e=0,f=a,g=null;;){var h=c.exec(f);if(null==h||f==n){d[e]=f;break}else d[e]=f.substring(0,h.index),f=f.substring(h.index+h[0].length,f.length),c.lastIndex=0,g==f&&(d[e]=f.substring(0,1),f=f.substring(1)),g=f,e++}if(0ga&&a[a.length-1]>ga?a:a.replace(/^(\\s*)/,n).replace(/\\s*$/,n)}function tL(a,b,c){a=a.slice(b,c);return String.fromCharCode.apply(null,a)}\nfunction zL(a,b,c){if(128>c)return a[b]=(c&127)<<24>>24,1;if(2048>c)return a[b++]=(c>>6&31|192)<<24>>24,a[b]=(c&63|128)<<24>>24,2;if(65536>c)return a[b++]=(c>>12&15|224)<<24>>24,a[b++]=(c>>6&63|128)<<24>>24,a[b]=(c&63|128)<<24>>24,3;if(2097152>c)return a[b++]=(c>>18&7|240)<<24>>24,a[b++]=(c>>12&63|128)<<24>>24,a[b++]=(c>>6&63|128)<<24>>24,a[b]=(c&63|128)<<24>>24,4;if(67108864>c)return a[b++]=(c>>24&3|248)<<24>>24,a[b++]=(c>>18&63|128)<<24>>24,a[b++]=(c>>12&63|128)<<24>>24,a[b++]=(c>>6&63|128)<<24>>\n24,a[b]=(c&63|128)<<24>>24,5;throw new Sm("Character out of range: "+c);}function ny(a){var b;return 65536<=a?(b=56320+(a-65536&1023)&65535,String.fromCharCode(55296+(a-65536>>10&1023)&65535)+String.fromCharCode(b)):String.fromCharCode(a&65535)}function AL(a){var b,c,d,e,f;e=a.length;for(d=b=0;dc?++b:2048>c?b+=2:65536>c?b+=3:2097152>c?b+=4:67108864>c&&(b+=5);b=D(BL,rl,-1,b,1);for(d=f=0;da||a>=b)&&UL(a,b)}function UL(a,b){throw new YK("Index: "+a+", Size: "+b);}w(640,633,ql);\n_.Ah=function(){throw new IE("Add not supported on this list");};_.uh=function(a){this.Ah(this.Tf(),a);return!0};_.eQ=function(a){return TL(this,a)};_.hC=function(){var a,b,c;b=1;for(a=this.ye();a.Zd();)c=a.$d(),b=31*b+(null==c?0:Np(c)),b=~~b;return b};_.ye=function(){return new zv(this)};_.Ch=function(){return this.Dh(0)};_.Dh=function(a){return new VL(this,a)};_.Eh=function(){throw new IE("Remove not supported on this list");};function SL(a){return a.b=a.d.Tf())throw new Ry;return a.d.Bh(a.c=a.b++)}function PL(a){if(0>a.c)throw new sB;a.d.Eh(a.c);a.b=a.c;a.c=-1}function zv(a){this.d=a}w(641,1,{},zv);_.Zd=function(){return SL(this)};_.$d=function(){return Av(this)};_._d=function(){PL(this)};_.b=0;_.c=-1;_.d=null;function VL(a,b){var c;this.d=this.a=a;c=a.Tf();(0>b||b>c)&&UL(b,c);this.b=b}w(642,641,{},VL);_.Fh=function(){return 0=this.b)throw new Ry;return this.a.Bh(this.c=--this.b)};_.a=null;\nfunction WL(a){a=new ML(a.b.a);return new XL(a)}function YL(a,b){this.a=a;this.b=b}w(643,635,Il,YL);_.vh=ZL;_.ye=function(){return WL(this)};_.Tf=function(){return this.b.a.d};_.a=null;_.b=null;function XL(a){this.a=a}w(644,1,{},XL);_.Zd=function(){return SL(this.a.a)};_.$d=function(){return(this.a.b=Av(this.a.a)).xh()};_._d=function(){OL(this.a)};_.a=null;function $L(a){a.b=D(aM,u,0,0,0)}function AD(a,b,c){(0>b||b>a.c)&&UL(b,a.c);a.b.splice(b,0,c);++a.c}\nfunction Dm(a,b){nq(a.b,a.c++,b);return!0}function Dx(a,b){eD(b,a.c);return a.b[b]}function AA(a,b){for(var c=0;ca.c&&nq(b,a.c,null);return b}\nfunction Jm(){$L(this)}function jD(a){$L(this);this.b.length=a}function yC(a){$L(this);a=Wv(a.b,a.c);Array.prototype.splice.apply(this.b,[0,0].concat(a));this.c=this.b.length}w(648,640,kl,Jm,jD,yC);_.Ah=function(a,b){AD(this,a,b)};_.uh=function(a){return Dm(this,a)};_.qg=function(){this.b=D(aM,u,0,0,0);this.c=0};_.vh=function(a){return-1!=AA(this,a)};_.Bh=function(a){return Dx(this,a)};_.Qf=function(){return 0==this.c};_.Eh=function(a){return bM(this,a)};_.wh=function(a){return wm(this,a)};_.Tf=At;\n_.c=0;function Iv(){Iv=x;Ov=new cM}var Ov;function cM(){}w(651,640,$l,cM);_.vh=MJ;_.Bh=function(){throw new Oy;};_.Tf=function(){return 0};function dM(){this.a=new Date}function eM(a){return 10>a?Fc+a:n+a}w(654,1,{89:1,93:1,94:1,107:1},dM);_.eQ=function(a){return G(a,107)&&Gw(J(this.a.getTime()),J(a.a.getTime()))};\n_.hC=function(){var a;a=J(this.a.getTime());var b,c,d,e;c=32;d=a.h&1048575;22>c?(e=d>>>c,b=a.m>>c|d<<22-c,c=a.l>>c|a.m<<22-c):44>c?(e=0,b=d>>>c-22,c=a.m>>c-22|a.h<<44-c):(b=e=0,c=d>>>c-44);b=ow(c&4194303,b&4194303,e&1048575);a=ow(a.l^b.l,a.m^b.m,a.h^b.h);return P(a)};\n_.tS=function(){var a,b;b=-this.a.getTimezoneOffset();a=(0<=b?jb:n)+~~(b/60);b=10>(0>b?-b:b)%60?Fc+(0>b?-b:b)%60:n+(0>b?-b:b)%60;return(fM(),gM)[this.a.getDay()]+ga+hM[this.a.getMonth()]+ga+eM(this.a.getDate())+ga+eM(this.a.getHours())+bd+eM(this.a.getMinutes())+bd+eM(this.a.getSeconds())+" GMT"+a+b+ga+this.a.getFullYear()};_.a=null;function fM(){fM=x;gM=z(hw,u,1,"Sun,Mon,Tue,Wed,Thu,Fri,Sat".split(","));hM=z(hw,u,1,"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(","))}var gM,hM;\nfunction xv(a,b){return null==E(a.a,b,a)}function wv(){this.a=new xp}w(656,635,{89:1,93:1,112:1},wv);_.uh=function(a){return xv(this,a)};_.vh=ZL;_.Qf=function(){return 0==this.a.d};_.ye=function(){return WL(new YL(this.a,new NE(this.a)))};_.wh=function(a){return null!=Hv(this.a,a)};_.Tf=NL;_.tS=function(){return KL(new YL(this.a,new NE(this.a)))};_.a=null;function FE(a,b){this.a=a;this.b=b}w(660,638,Gl,FE);_.xh=Xw;_.yh=Bz;_.zh=function(a){var b;b=this.b;this.b=a;return b};_.a=null;_.b=null;\nfunction Ry(){}w(661,136,{89:1,97:1,105:1,106:1,111:1},Ry);function iM(a){var b,c;b=a.b;c=a.d.length;if(ba.j&&(++a.j,a.p[a.j]=b)}function qM(a){var b;b=new hJ;b.f=a.f;b.d=a.d;b.q=a.q;b.r=a.r;b.s=a.s;b.n=a.n;b.e=a.e;b.p=a.p.slice();b.j=a.j;b.c=a.c;b.a=a.a;b.b=a.b;b.i=a.i;b.o=a.o;b.k=a.k;return b}function II(a){return-99199!=a.f?a.f:0}function rM(a){return 4<=a.o&&2==a.j}\nfunction wG(a,b,c){a.q+=b;a.r+=c}function nG(a){var b;b=-99199!=a.f;a.f=-99199;return b}function hJ(){oM();this.p=iH(7)}w(681,1,{115:1},hJ);_.a=3;_.b=null;_.c=0;_.d=0;_.e=null;_.f=-99199;_.i=0;_.j=0;_.k=0;_.n=0;_.o=0;_.q=0;_.r=0;_.s=0;var pM;function tJ(a,b){var c;c=sM(a);return 0\\\\.]+$",2);DM=new nM("\\\\s+",2)}\nfunction TH(a){AM();var b,c,d,e;this.i=this.f=null;this.j=0;this.e=!1;this.a=this.c=null;var f,g,h;if(null==a||0==a.length)c=0;else{g=1;f=a.length;for(h=0;h=this.j?this.b=oy(a):this.b=a;c=new lM(DM,this.b);this.d=c.b.a.test(c.a);do if(4a.indexOf("j")&&((this.e=0=f.length)e=0;else{for(h=0,j=f.length;ho&&(o=0.001);r=g/o;e=f/o;l=iH(4);for(h=0;4>h;++h)d[h]==c||0>=d[h]||(0==l[1]?l[1]=d[h]:0==l[2]?l[2]=d[h]:0==l[3]&&(l[3]=d[h]));m=iH(4);d=iH(4);for(h=1;3>=h;++h)3==h&&0==l[3]||(f=(a.b[l[h]].q-a.b[b].q)*e+(a.b[l[h]].r-a.b[b].r)*r,g=(a.b[l[h]].r-a.b[b].r)*e-(a.b[l[h]].q-a.b[b].q)*r,o=Math.sqrt(f*f+g*g),0.001>o&&(o=0.001),m[h]=g/o,d[h]=f/o);a=gN(m[1],d[1],m[2],d[2]);0b?(j[1]=l[1],j[2]=l[3],j[3]=l[2]):0>a&&0d?(j[1]=l[2],j[2]=l[3],j[3]=l[1]):0>d&&0b&&0>a&&(j[1]=l[3],j[2]=l[2],j[3]=l[1])):0j&&(j=0.001);g/=j;f/=j;l=j+25*Math.cos(1.0471975511965976);o=25*Math.sin(1.0471975511965976);h=jJ(a,b,d);if(3==a.c[h].c||204==a.k.k||1!=a.c[h].c&&(203==a.k.k||204==a.k.k)||a.n)l=j+25,o=0;0o?o=-o:0>c&&0j&&(j=0.001),SI(a,a.p,a.b[b].q+25*f/j,a.b[b].r+25*g/j),0==XI(a,a.p,1,a.p)||h==a.b[b].j);++h);break;default:return--a.p,mu(a.k,"Are you trying to draw an hedgehog ?"),a.k.cb=9,!1}b=iJ(a,a.v,a.p,1);203==a.k.k&&(b.c=2);204==a.k.k&&\n(b.c=3);201==a.k.k&&QI(a,a.q);a.z=a.b[a.p].q;a.A=a.b[a.p].r;return e}function KI(a,b){var c,d;if(!b||0==b.c)return n;d=n;d+="M V30 BEGIN COLLECTION"+(FF(),ea);d+=nf+a+" [ATOMS=("+b.c;for(c=new zv(b);c.bj&&(j=0.001);1>pH((a.b[b].r-a.b[e].r)*(g/j)+(a.b[b].q-a.b[e].q)*(h/j))?(g=a.b[b].q-a.b[e].q,h=a.b[b].r-a.b[e].r,j=Math.sqrt(g*g+h*h),0.001>j&&(j=0.001),b=h/j,g/=j,d[0]=a.b[e].q+j*g-c*b,d[1]=a.b[e].r+c*g+j*b):(g=(a.b[e].q+a.b[f].q)/2,e=(a.b[e].r+a.b[f].r)/2,g=a.b[b].q-g,h=a.b[b].r-e,j=Math.sqrt(g*g+h*h),0.001>j&&(j=0.001),d[0]=a.b[b].q+c*g/j,d[1]=a.b[b].r+c*h/j)}\nfunction BI(a){var b,c,d,e,f,g,h,j,l,o,m,r,t,y;o=-1;j=6;switch(a.k.k){case 206:j=3;break;case 207:j=4;break;case 208:case 221:case 223:j=5;break;case 210:case 209:j=6;break;case 211:j=7;break;case 212:j=8;break;case 229:j=9}f=6.283185307179586/j;l=wL(312.5/(1-Math.cos(f)));if(0a.b[a.v].j)nN(a,j,f,l);else if(!a.k.Bb&&!a.k.rc)o=a.v,CI(a,a.v,0),a.v=a.p,nN(a,j,f,l);else{a.k.rc=!1;if(209==a.k.k||221==a.k.k||223==a.k.k){mu(a.k,"ERROR - cannot add aromatic spiro ring !");a.k.cb=9;return}for(d=\n1;d<=a.b[a.v].j;++d)if(b=a.c[jJ(a,a.v,a.b[a.v].p[d])].c,2m&&(m=0.001);g/=m;e/=m;for(d=1;d<=j;++d)h=RI(a,null),r=f*d+1.5707963267948966,WI(h,b[0]+l*(Math.sin(r)*e-Math.cos(r)*g),b[1]+l*(Math.cos(r)*e+Math.sin(r)*g))}else if(0m&&(m=0.001);g/=m;e/=m;h=m/2;r=l*Math.sin(0.5*(3.141592653589793-f));m=1;0<(a.b[d].r-a.b[b].r)*e-(a.b[d].q-a.b[b].q)*g&&(r=-r,m=0);t=a.b[b].q+h*e-r*g;y=a.b[b].r+r*e+h*g;for(d=1;d<=j;++d)h=RI(a,null),r=f*(d+0.5)+3.141592653589793*m,WI(h,t+l*(Math.sin(r)*e-Math.cos(r)*g),y+l*(Math.cos(r)*e+Math.sin(r)*g)),1==m?(d==j&&WI(h,a.b[b].q,a.b[b].r),\nd==j-1&&WI(h,a.b[c].q,a.b[c].r)):(d==j-1&&WI(h,a.b[b].q,a.b[b].r),d==j&&WI(h,a.b[c].q,a.b[c].r))}else{b=0.5;6==j&&(b=0);for(d=1;d<=j;++d)h=RI(a,null),r=f*(d-b),WI(h,a.z+l*Math.sin(r),a.A+l*Math.cos(r))}b=j;l=0;for(f=1;f<=b;++f)eJ(a,null),l=a.p-b+f,a.b[l].j=2,a.c[a.q].i=l,a.c[a.q].j=l+1;a.c[a.q].j=a.p-b+1;if(209==a.k.k){if(a.c[a.q-4].c=2,a.c[a.q-2].c=2,a.c[a.q].c=2,0e&&ed;--f)if(0g&&(g=0.001),e/=g,f/=g);l=a.b[a.v].q+d*f;o=a.b[a.v].r+d*e;for(g=1;g<=b;++g)h=RI(a,null),j=c*g-1.5707963267948966,WI(h,l+d*(Math.sin(j)*f-Math.cos(j)*e),o+d*(Math.cos(j)*f+Math.sin(j)*e))}function mN(a,b){var c,d;0==b&&(b=a.p);for(c=a.p;c>a.p-b;--c)d=XI(a,c,1,a.p),0!=d&&wG(a.b[c],6,6)}\nfunction jJ(a,b,c){var d,e,f;for(e=1;e<=a.q;++e)if(d=a.c[e],f=d.i,d=d.j,f==b&&d==c||f==c&&d==b)return e;return 0}function MH(a){var b;for(b=1;b<=a.q;++b)if(1==a.c[b].c&&0=c||0>=d?a.s=!0:(b=sG(a),c=c/2-b.a,b=d/2-b.b,a.k.Ob||ZI(a,c,b),xG(a))}\nfunction xI(a,b,c){var d,e,f;if(1==c)return a.b[b].n+=1,!0;if(-1==c)return a.b[b].n+=-1,!0;e=a.b[b].n;f=a.b[b].i;d=a.b[b].o;-1==d&&0==c&&(0==a.b[b].n?a.b[b].n=1:1==a.b[b].n?a.b[b].n=-1:-1==a.b[b].n&&(a.b[b].n=0));switch(a.b[b].a){case 1:0==d&&(0==a.b[b].n?a.b[b].n=1:1==a.b[b].n?a.b[b].n=-1:a.b[b].n=0);break;case 2:2d&&(0==\na.b[b].n?a.b[b].n=-1:-1==a.b[b].n?a.b[b].n=1:1==a.b[b].n&&(a.b[b].n=0));break;case 4:case 7:3d&&0==a.b[b].n?a.b[b].n=1:3>d&&1==a.b[b].n?a.b[b].n=-1:3>d&&-1==a.b[b].n&&(a.b[b].n=0);break;case 5:case 8:case 13:2d&&0==a.b[b].n?a.b[b].n=-1:\n2>d&&-1==a.b[b].n?a.b[b].n=1:2>d&&1==a.b[b].n&&(a.b[b].n=0);break;case 9:case 10:case 11:case 12:0==d&&0==a.b[b].n?a.b[b].n=-1:0==d&&-1==a.b[b].n?a.b[b].n=0:mu(a.k,"Charge change not possible on the halogen !");break;case 32:mu(a.k,"Use X button to change charge on the X atom !")}if(0e&&eb?e=2:0>a&&0>b?e=3:0>a&&0<=b&&(e=4);0<=c&&0<=d?f=1:0<=c&&0>d?f=2:0>c&&0>d?f=3:0>c&&0<=d&&(f=4);if(ef)return-1;switch(e){case 1:case 4:return ac?1:-1}return 0}function vJ(a){oN(a);xG(a);wJ(a)}\nfunction sG(a){var b,c,d,e,f,g;b=new yM;f=9999;d=-9999;g=9999;e=-9999;for(c=1;c<=a.p;++c)a.b[c].qd&&(d=a.b[c].q),a.b[c].re&&(e=a.b[c].r);b.a=f+(d-f)/2;b.b=g+(e-g)/2;b.c=d-f;b.d=e-g;25>b.c&&(b.c=25);25>b.d&&(b.d=25);return b}function lN(a,b,c){var d,e;e=0;for(d=1;d<=a.p;++d)d>=b&&d<=c||0!=XI(a,d,b,c)&&++e;return e}function iJ(a,b,c,d){var e;e=eJ(a,null);fJ(a.b[b],c);fJ(a.b[c],b);e.i=b;e.j=c;lJ(e,a.b);e.c=d;return e}\nfunction RI(a,b){++a.p;b?a.b[a.p]=qM(b):a.b[a.p]=new hJ;return a.b[a.p]}function oH(a,b,c,d,e,f){var g;g=a.b[b].q-c/2;f||(g-=d-c);a=a.b[b].r-~~(e/2);return new pN(g-1-2,a-2,d+1+4,e+4)}function eJ(a,b){var c;++a.q;c=new wM;b&&xM(c,b);return a.c[a.q]=c}\nfunction FI(a,b,c){var d,e,f,g,h,c=HI(a,b,c,!1);e=-1.7976931348623157E308;d=1.7976931348623157E308;for(b=1;b<=a.p;++b)a.b[b].r>e&&(e=a.b[b].r),a.b[b].qa.b[b].n?f=4-a.b[b].n:0>a.b[b].n&&-4=g&&(h=g)),\ng=EI(h,2)+EI(f,3)+" 0 0 0 0 0 0 0",f=pJ(a,b),g+=EI(f,3),c+=g+ja+(FF(),ea);for(b=1;b<=a.q;++b)d=a.c[b],g=e=d.c,1==a.c[b].c?g=1:2==a.c[b].c&&(g=2),f=EI(d.i,3)+EI(d.j,3),h=0,1==e&&1==d.f?h=1:1==e&&2==d.f&&(h=6),1==e&&3==d.f&&(h=1,f=EI(d.j,3)+EI(d.i,3)),1==e&&4==d.f&&(h=6,f=EI(d.j,3)+EI(d.i,3)),c+=f+EI(g,3)+EI(h,3)+ka+(FF(),ea);for(b=1;b<=a.p;++b)0!=a.b[b].n&&(c+="M CHG 1"+EI(b,4)+EI(a.b[b].n,4)+(FF(),ea)),0!=a.b[b].d&&(c+="M ISO 1"+EI(b,4)+EI(a.b[b].d,4)+(FF(),ea));return c+=ff+(FF(),ea)}\nfunction YF(a,b){var c,d,e,f,g,h,j;g=j=0;for(h=1;h<=a.q;++h)e=a.c[h],c=e.i,d=e.j,c!=b&&d!=b?(++j,f=a.c[j],xM(f,e),f.i=c,c>b&&--f.i,f.j=d,d>b&&--f.j):g+=e.c;a.q=j;for(h=b;hb&&--c,a.b[h].p[++d]=c);a.b[h].j=d}}\nfunction $F(a,b){var c,d,e,f;c=a.c[b].i;d=a.c[b].j;for(e=b;ea.b[b].a&&0==a.b[d].d){if(0!=(-99199!=a.b[d].f?a.b[d].f:0))continue a;b=jJ(a,d,b);if(1==a.c[b].c&&(0==a.c[b].f||!a.k.tc))YF(a,d),c=!0}return c}function qN(a,b){var c,d,e,f,g;g=z(B,q,-1,[0,0]);for(e=1,f=0;e<=a.b[b].j;++e)c=a.b[b].p[e],d=jJ(a,b,c),2!=a.c[d].c&&(g[f++]=c);return g}\nfunction oN(a){var b,c,d;for(d=1;d<=a.p;++d)a.b[d].j=0;for(d=1;d<=a.q;++d)b=a.c[d].i,c=a.c[d].j,fJ(a.b[b],c),fJ(a.b[c],b)}\nfunction sJ(a,b,c){var d,e,f,g,h,j,l,o,m;a.d=iH(a.q+1);m=[];for(j=1;j<=a.p;++j){m[j]=!1;b[j]=!1;a:{d=void 0;for(d=1;d<=a.b[j].j;++d)if(c[jJ(a,j,a.b[j].p[d])]){d=!0;break a}d=!1}if(d&&!(3d&&(d=c);return d}\nfunction nH(a,b){var c;c=(FF(),MF)[a.b[b].a];32==a.b[b].a&&(c=a.b[b].e);return c}function kJ(a,b){a.b[b].j+=-1}function tH(a,b,c){var d,e,f,g,h;h=1;a.a=iH(a.p+1);for(e=a.a[b]=1;e<=a.b[b].j;++e)d=a.b[b].p[e],d!=c&&(a.a[d]=++h);for(g=!1;;){for(d=1;d<=a.p;++d){g=!1;if(0~~(c/2)+24?3:2}function gG(a,b){var c,d,e,f,g,h,j;c=sG(a);d=c.a;e=c.b;g=Math.sin(3.141592653589793*b/180);c=Math.cos(3.141592653589793*b/180);for(f=1;f<=a.p;++f)h=a.b[f].q*c+a.b[f].r*g,j=-a.b[f].q*g+a.b[f].r*c,WI(a.b[f],h,j);c=sG(a);ZI(a,d-c.a,e-c.b)}\nfunction nJ(a){var b,c,d,e,f;e=f=0;for(d=1;d<=a.q;++d)b=a.b[a.c[d].i].q-a.b[a.c[d].j].q,c=a.b[a.c[d].i].r-a.b[a.c[d].j].r,f+=Math.sqrt(b*b+c*c);0=g;++g)if(H(f,(FF(),MF)[g])){f=g;break b}f=32}zI(a,b,f);32==a.b[b].a&&(a.b[b].e=d);c+=\nga;d=0;0=e&&(d=e-48));32==a.b[b].a&&(a.b[b].i=d)}}}function jI(a,b,c){var d,e;a.i=1;c&&(a.i=-1);b=new XE(b);try{for(;b.j=QE(b,b.a),b.jc||6a.b[c].j&&2>a.b[d].j)e.f=0,mu(a.k,"Stereomarking meaningless on this bond !");else switch(e.f){case 0:a.b[d].j<=a.b[c].j?e.f=1:e.f=3;break;case 1:e.f=2;break;case 2:2h||3c[b]&&(j=f,f=b,b=j);j=qN(a,f);h=j[0];l=j[1];e=0;o=!1;0c[l]&&(j=h,h=l,l=j);j=jJ(a,f,h);0!=d[j]?e=h:1==a.c[j].c&&5!=a.d[j]&&(e=h);0==e&&0c[f]&&(o=!0);j=qN(a,b);l=j[0];g=j[1];h=0;0g&&(g=0.001),j/=g,g=l/g,l=(a.b[e].r-a.b[f].r)*g-(a.b[e].q-a.b[f].q)*j,t=(a.b[h].r-a.b[f].r)*g-(a.b[h].q-a.b[f].q)*j,2>(0>=l?0-l:l)||2>(0>=t?0-t:t))mu(a.k,"Not unique E/Z geometry !");else{g=\njJ(a,e,f);h=jJ(a,h,b);r=1;if(0==d[g]){for(m=1;m<=a.b[e].j;++m)if(b=a.b[e].p[m],b!=f&&(j=jJ(a,e,b),0!=d[j])){c[b]>c[e]?r=-d[j]:r=d[j];break}d[g]=r}0==d[h]&&(0l&&0>t?d[h]=-d[g]:d[h]=d[g],o&&(d[h]=-d[h]))}}}function yJ(a,b,c){var d;d=a.c[b].f;return 1>d||4g?e.i=3-g-c.b[d].n:4==g?(c.b[d].n=-1,e.i=0):5g?0c.b[d].n?e.i=2-g-c.b[d].n:e.i=4-g:(c.b[d].n=g-4,e.i=4-g+c.b[d].n);break;case 4:case 7:3>g?e.i=3-g+c.b[d].n:3==g?0>c.b[d].n?(c.b[d].n=0,e.i=0):0c.b[d].n?(c.b[d].n=0,e.i=0):0g?e.i=2-g+c.b[d].n:2==g?0>c.b[d].n?(c.b[d].n=0,e.i=0):0f;)if(0e.i&&(e.i=0)}}}function zG(a){dN(this);this.b[0]=new hJ;this.t=this.q=this.p=0;this.k=a}\nfunction iI(a,b){var c,d,e,f,g,h,j,l,o;zG.call(this,a);if(null!=b&&(f=n,l=gI(b),null!=l)){o=new WE(b,l,!0);for(g=1;4>=g;++g)f=hI(o,l);e=OH(DE(oy(f.substr(0,3)),10)).a;j=OH(DE(oy(f.substr(3,3)),10)).a;g=0;try{g=OH(DE(oy(f.substr(14,1)),10)).a}catch(m){if(m=yq(m),!G(m,97))throw m;}hG(this,(iG(),1==g?jG:kG));for(g=1;g<=e;++g){d=RI(this,null);f=hI(o,l);d.q=(new nL(kL(oy(f.substr(0,10))))).a;d.r=-(new nL(kL(oy(f.substr(10,10))))).a;d=34;34>f.length&&(d=f.length);d=oy(f.substr(31,d-31));AI(this,g,d);62<=\nf.length&&(h=oy(f.substr(60,3)),0=h))){var r=void 0,r=sM(d);d=0d&&(d=0);this.b[g].d=d}if(39<=f.length&&(h=oy(f.substr(37,2)),0=h))){f=0;switch(h){case 1:f=3;break;case 2:f=2;break;case 3:f=1;break;case 4:f=0;break;case 5:f=-1;break;case 6:f=-2;break;case 7:f=-3}this.b[g].n=f}}for(g=1;g<=j;++g)e=eJ(this,null),f=\nhI(o,l),e.i=OH(DE(oy(f.substr(0,3)),10)).a,e.j=OH(DE(oy(f.substr(3,3)),10)).a,d=OH(DE(oy(f.substr(6,3)),10)).a,1==d?c=1:2==d?c=2:3==d?c=3:c=9,h=0,11b.length)this.p=0;else{try{j=new VE(b);g=OH(DE(TE(j),10)).a;h=OH(DE(TE(j),10)).a;for(f=1;f<=g;++f)o=TE(j),c=(m=RI(this,null),AI(this,this.p,o),m),c.q=(new nL(kL(TE(j)))).a,c.r=-(new nL(kL(TE(j)))).a;for(f=1;f<=h;++f){d=eJ(this,null);d.i=OH(DE(TE(j),10)).a;d.j=OH(DE(TE(j),10)).a;e=OH(DE(TE(j),10)).a;l=0;if(-1==e)l=e=1;else if(-2==e)e=1,l=2;else if(-5==e)e=2,l=10;else if(11==\ne||12==e||13==e||14==e)l=e,e=9;d.c=e;d.f=l}oN(this);nJ(this);vG(this)}catch(r){r=yq(r);if(G(r,97)){r.yd();this.p=0;return}throw r;}a&&!a.bb&&oG(this);vJ(this)}}function lI(a,b,c){var d,e,f,g;zG.call(this,a);g=iH(b.p+1);for(e=1;e<=b.p;++e)b.a[e]==c&&(RI(this,b.b[e]),g[e]=this.p);for(e=1;e<=b.q;++e)if(a=b.c[e].i,d=b.c[e].j,!(b.a[a]!=c&&b.a[d]!=c)&&!(b.a[a]!=c||b.a[d]!=c))f=eJ(this,b.c[e]),f.i=g[a],f.j=g[d];this.i=b.i;oN(this)}\nfunction rN(a,b,c){var d,e,f;zG.call(this,a);f=iH(b.p+1);for(d=1;d<=b.p;++d)b.b[d].k==c&&(RI(this,b.b[d]),f[d]=this.p);for(d=1;d<=b.q;++d)a=b.c[d],a.e==c&&(e=eJ(this,a),e.i=f[a.i],e.j=f[a.j]);hG(this,b.f);this.i=b.i;oN(this)}\nfunction GI(a,b,c){var d,e,f,g;zG.call(this,a);for(a=1;a<=c;++a)this.p+=b[a].p,this.q+=b[a].q,this.t+=b[a].t,b[a].f.a&&hG(this,(iG(),iG(),jG));this.b=D(eN,u,115,this.p+1,0);this.c=D(fN,u,116,this.q+1,0);f=g=e=0;for(a=1;a<=c;++a){for(d=1;d<=b[a].p;++d)++e,this.b[e]=qM(b[a].b[d]);for(d=1;d<=b[a].q;++d)++g,this.c[g]=vM(b[a].c[d]),this.c[g].i+=f,this.c[g].j+=f;f=e}oN(this)}\nfunction WF(a){var b;dN(this);this.k=a.k;this.p=a.p;this.q=a.q;this.t=a.t;this.b=D(eN,u,115,this.p+1,0);for(b=0;b(0>=a?0-a:a)&&(a=0);a=P(J(Q(a*Math.pow(10,c))))/Math.pow(10,c);e=n+(new nL(a)).a;d=my(e,ny(46));0>d&&(e+=lc,d=my(e,ny(46)));f=e.length;for(a=1;a<=c-f+d+1;++a)e+=Fc;if(0==b)return e;e.length>b&&(e=Gd);c=n;for(a=1;a<=b-e.length;++a)c+=ga;return c+e}function gI(a){var b;b=new WE(a,ea,!0);if(4b&&(d=Gd);e=n;for(c=1;c<=b-d.length;++c)e+=ga;return e+d}function hI(a,b){for(var c,d;a.j=QE(a,a.a),a.j>16&255)),dw(0.7*(g.d>>8&255)),dw(0.7*(g.d&255))),gH(a.a,g)):(h=new km(dw(0.7*(g.d>>16&255)),dw(0.7*(g.d>>8&255)),dw(0.7*(g.d&255))),f=UC(g),gH(a.a,h));g=P(J(Q(R)));d=P(J(Q(d*R)));e=P(J(Q(e*R)));b=P(J(Q(b*R)));c=P(J(Q(c*R)));d-=g;e-=g;PG(a.a,b+g,c+g,d-g,e-g);gH(a.a,h);PG(a.a,b,c,d,g);PG(a.a,b,c+g,g,e);gH(a.a,f);PG(a.a,b+d,c,g,e+g);PG(a.a,b+1,c+e,d,g)}\nfunction KG(a,b,c,d,e){a=a.a;b=P(J(Q(b*R)));c=P(J(Q(c*R)));d=P(J(Q(d*R)));e=P(J(Q(e*R)));LG(a,!0);MG(a,NG(a,b,c,d,e))}function VG(a,b,c,d){var e,f,g;f=D(B,q,-1,d,1);g=D(B,q,-1,d,1);for(e=0;e=b||b>=oC(this.a)-1||0>=c||c>=pC(this.a)-1)&&(this.a.j=!1);this.a.j?UI(this.a.c,a,b,c):PH(this.a.c,a,b,c);this.a.pb.focus()};_.a=null;function ON(a){this.a=a}w(732,1,{},ON);_.od=function(){this.a.j=!1;bJ(this.a.c)};_.a=null;function PN(a){this.a=a}\nw(733,1,{},PN);_.nd=function(){this.a.j&&(this.a.j=!1)};_.a=null;function QN(a){this.a=a}w(734,1,{},QN);_.a=null;function RN(a){this.a=a}w(735,1,{},RN);_.a=null;function DN(){BN.call(this);this.pb.style[Fk]=Kc;this.pb.style[Uh]=Kc}w(736,727,ll,DN);function SN(a){this.a=a}w(737,1,{},SN);_.Ud=function(){Jq((Gq(),Hq),new UN(this))};_.a=null;function UN(a){this.a=a}w(738,1,{},UN);_.pd=function(){this.a.a.c&&(mC(this.a.a.c),QJ(this.a.a))};_.a=null;\nfunction VN(a,b){var c;c=b.a;c.e=4;return LI(a.a.c,c,b.d,b.e)}function FN(a){this.a=a}w(739,1,{},FN);_.Lh=function(a){return VN(this,a)};_.a=null;function fv(a,b){PH(a.a.c,b.a,b.d,b.e);return LI(a.a.c,b.a,b.d,b.e)}function GN(a){this.a=a}w(740,1,{},GN);_.Lh=function(a){return fv(this,a)};_.a=null;function HN(a){this.a=a}w(741,1,{},HN);_.Lh=function(a){return UI(this.a.c,a.a,a.d,a.e)};_.a=null;function IN(a){this.a=a}w(742,1,{},IN);_.Lh=function(){return bJ(this.a.c)};_.a=null;\nfunction Yt(a,b){var c;c=J(Q(b.b));c=new iE(b,0,Aj,c);cG(a.a.c,c);return!0}function JN(a){this.a=a}w(743,1,{},JN);_.Lh=function(a){return Yt(this,a)};var WN=_.a=null;function XN(){XN=x;WN=new Qw((gx(),new fx("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAEklEQVR42mM4MzPtPzJmIF0AAOqfLKHtSuV7AAAAAElFTkSuQmCC")),4,4)}function YN(){YN=x;ZN={}}\nfunction $N(a,b,c){var d;c&&(b.style[Ch]=c.b+oj,d=c.a,d!=Ie&&(b.style[Bh]=d),0!=(c.c&1)&&(b.style[Eh]=Eg),0!=(c.c&2)&&(b.style[Dh]=$h));a.e.style[Ek]=Si}\nfunction qD(a){var b=aO,c,d,e,f,g,h,j,l,o,m,r,t,y;c=Op(a);c in ZN?a=ZN[c]:(d=$doc.getElementsByTagName("body")[0],e=$doc.createElement(Sj),f=$doc.createElement(Yh),f.style[oh]=(Ur(),"inline"),f.style[Bk]=(Ks(),"baseline"),f.style[pi]=Gc,f.style[qi]=Gc,f.width=1,f.height=1,g=(XN(),WN),f.src=g.d.a,a=(h=$doc.createTextNode(zf),$N(b,e,a),e.appendChild(h),e.appendChild(f),d.appendChild(e),j=br(e),l=br(e)+(e.offsetHeight||0),o=l-j,m=br(f)+(f.offsetHeight||0)+1,r=l-m,t=m-j,d.removeChild(e),y=new bO,y.a=\nt,y.b=r,y.c=o,y),ZN[c]=a);return a}function cO(){YN();var a,b,c,d,e;ps();this.a=z(hw,u,1,["monospace","sans-serif",Lj]);this.c={};this.b={};this.d=$doc.getElementsByTagName("body")[0];this.e=$doc.createElement(Sj);this.e.innerHTML=this.f||n;this.e.style[Ch]="72.0px";for(b=this.a,c=0,d=b.length;c=g?h=NG(a,b,c,d,e):h=(j=f+g,l=0,jg)&&(o=1),m=b+d/2,r=c+e/2,t=d/2,y=e/2,v=iO(m,r,t,y,f),s=iO(m,r,t,y,j),A=" text { cursor: default; } <\/style>":n;b=c+d+b+ud;b!==a.q&&(a.t.pb.innerHTML=\nb||n,a.q=b);a.o=!0;a.p=!1}}function gH(a,b){(a.e=b)&&(a.f=jO(b))}function JJ(a,b){var c,d,e;a.i=(c=b.b,d=b.a,e=n,12!=c&&(e=\' font-size="\'+c+\'px"\'),"Plain"!=d&&(e+=\' font-family="\'+d+na),0!=(b.c&1)&&(e+=\'font-weight="bold"\'),0!=(b.c&2)&&(e+=\'font-style="italic"\'),e)}function fH(a,b){(a.n=b)&&b&&(a.c=\'stroke-width="\'+(b.e==dw(b.e)?n+dw(b.e):n+b.e)+oa)}w(754,498,{});_.d=null;_.e=null;_.f=Bg;_.i=null;_.j=!0;_.k=null;_.o=!1;_.p=!1;_.q=n;_.r=0;_.s=0;_.t=null;_.u=null;var hO,gO;\nfunction bv(a,b){var c;c=b.a.targetTouches;return 1==c.length?(c=c[0],a.b.d=c.clientX-ar(a.o.pb)+(a.o.pb.scrollLeft||0)+fr(a.o.pb.ownerDocument),a.b.e=c.clientY-br(a.o.pb)+(a.o.pb.scrollTop||0)+gr(a.o.pb.ownerDocument),a.b.a=new TN(b),b.a.preventDefault(),!0):!1}\nfunction EN(a){this.o=a;this.b=new kO;this.c=new lO(this);vy(this.o,new mO(this),(cv(),cv(),dv));vy(this.o,new nO(this),(Vu(),Vu(),Wu));vy(this.o,new oO(this),(Zu(),Zu(),$u));vy(this.o,new pO(this),(Ru(),Ru(),Su));vy(this.o,new qO,(du(),du(),eu));vy(this.o,new rO(this),($t(),$t(),au));vy(this.o,new sO(this),(Vt(),Vt(),Wt))}w(755,1,{},EN);_.a=null;_.b=null;_.c=null;_.d=!1;_.e=null;_.f=null;_.i=null;_.j=null;_.k=null;_.n=null;_.o=null;function lO(a){Lm();this.a=a}w(756,65,{},lO);\n_.vd=function(){!this.a.d&&this.a.i&&VN(this.a.i,this.a.b)};_.a=null;function mO(a){this.a=a}w(757,1,{},mO);_.a=null;function nO(a){this.a=a}w(758,1,{},nO);_.a=null;function oO(a){this.a=a}w(759,1,{},oO);_.a=null;function pO(a){this.a=a}w(760,1,{},pO);_.a=null;function qO(){}w(761,1,{},qO);function rO(a){this.a=a}w(762,1,{},rO);_.a=null;function sO(a){this.a=a}w(763,1,{},sO);_.a=null;function kO(){}w(764,1,{},kO);_.a=null;_.b=0;_.c=0;_.d=0;_.e=0;\nfunction jO(a){var b,c;c=a.d>>16&255;b=a.d>>8&255;a=a.d&255;if(0==c*b*a){if(0==c&&0==b&&0==a)return Bg;if(255==c&&0==b&&0==a)return"red";if(0==c&&255==b&&0==a)return"green";if(0==c&&0==b&&255==a)return Cg}return 255==c&&255==b&&255==a?"white":yj+c+kb+b+kb+a+hb}function $J(){var a=$wnd.navigator.userAgent.match(/MSIE\\s+(\\d+\\.\\d+)/);return a?parseFloat(a[1]):-1}\nfunction tO(a){var b,c,d,e,f;By(a);d=(Cy(),RA(null));e=new eO;Yz(e,a);Ly(d,e,d.pb);f=a.he();b=a.ge();c=$J();9<=c?(++f,++b):7==c&&G(a,39)&&(c=a.pb.textContent,2>=c.length&&(f+=8));$z(e,a);Uy(d,e);return new JB(f,b)}function dF(a){try{$wnd.console.log(a)}catch(b){}}function uO(){this.pb=$doc.createElement(ph);this.pb[Tg]=bi;this.pb.style[cj]=Vh;this.pb.style[lj]=gg;this.pb.style[Fk]=Kc;this.pb.style[Uh]=Kc;this.pb.setAttribute("contenteditable",zh)}w(766,380,pl,uO);\nfunction iO(a,b,c,d,e){e*=0.017453292519943295;a+=c*Math.cos(e);b+=-d*Math.sin(e);return new dO(new nL(a),new nL(b))}function NG(a,b,c,d,e){return\'=f.k||(701==f.k?null.ei():401==f.k||402==f.k?(null.ei(),null.ei(),null.ei(),null.ei(),null.ei()):500<=f.k&&507>=f.k&&(g=null.fi,500!=g&&(g=new lu(null.fi,g,null),g.i=f.f,g.j=f.i,f=f.j&63,g.e=f&12)))}function yO(a){this.a=a}w(776,1,Dl,yO);_.pd=function(){BA(this)};_.a=null;function QD(){vO();xO.call(this);this.a=new eB}w(777,769,{},QD);_.If=Xw;_.a=null;function TD(){new wv;var a;a:{switch(ew){case 1:case 3:case 5:case 7:a=new AO;break a}a=new BO}this.a=a}w(790,522,{},TD);_.a=null;\nfunction BO(){}w(792,1,{},BO);_.ai=function(a){a&&a&&rq(8,new CO(a));return null};_.bi=function(a){rq(8,new DO(a))};function AO(){}w(791,792,{},AO);_.ai=function(){return $wnd.clipboardData.getData("Text")};_.bi=function(a){$wnd.clipboardData.setData("Text",a)};function CO(a){this.a=a}w(795,1,Ul,CO);_.zd=XB;_.a=null;function DO(a){this.a=a}w(797,1,Ul,DO);_.zd=XB;_.a=null;function Ut(a,b){a.onloadend=function(a){b.Xf(a.target.result)}}function lF(a){this.a=a}w(802,1,{},lF);_.a=null;\nfunction iF(){}w(803,1,{},iF);function jF(){}w(804,1,{},jF);function kF(){}w(805,1,{},kF);function RD(){this.b=new UD;this.d=new wC}w(808,520,{},RD);function NH(a,b,c,d){b=DB(b);c+=b.a;d+=b.b;hz(a.a,c,d);iz(a.a)}function CD(){vO();xO.call(this);var a=this.a=new EO;a.ab=!0;a.a.f=!0;this.a.db=!0}w(810,769,{},CD);_.If=Xw;_.a=null;function AE(){}w(818,549,{},AE);\nfunction xE(){xE=x;var a;a=(oE(),pE["os.encoding"]);if(null!=a)try{if(H("UTF-8",a))AL(n);else if(H("ISO-8859-1",a)||H("ISO-LATIN-1",a))D(BL,rl,-1,0,1);else throw new XK(a+ma);}catch(b){if(b=yq(b),!G(b,106))throw b;}}function wD(a,b){a.a=31*a.a+dw((new nL(b)).a)}function CC(){}w(823,1,{},CC);_.hC=Xw;_.a=1;\nfunction EO(){var a=(pz(),sz);jz.call(this,!0,wi);this.U=a.a;this.a=new FO(this);this.a.d=!0;$y(this,this.a);this.ab=!0;this.a.f=!0;if(-1==this.lb){var a=this.pb,b=1|(this.pb.__eventBits||0);tx();dy(a,b)}else this.lb|=1;Yq(Xq(this.pb))[Tg]=Rh;this.pb.style[Hk]="2147483647"}w(854,382,ll,EO);_.ae=function(a){zy(this,a);1==rx(a.type)&&ez(this,!1)};_.a=null;\nfunction FO(a){this.b=a;this.c=new Jm;this.i=new Jm;a=(EA(),DA);new uB(a.d,a.b,a.c,a.e,a.a);var b;b=$doc.createElement(Yj);this.e=$doc.createElement(ak);lx(b,this.e);this.o=!0;a=Lz();b=(mx(),nx(b));a.appendChild(b);this.pb=a;Un();this.pb.setAttribute("role",yo.a);-1==this.lb?(a=this.pb,b=2225|(this.pb.__eventBits||0),tx(),dy(a,b)):this.lb|=2225;this.pb[Tg]=Qh;a=ly(this.pb)+"-vertical";gy(this.ie(),a,!0);this.pb.style[bj]=Hc;this.pb.setAttribute("hideFocus",xk);vy(this,new CA(this),(mt(),mt(),nt))}\nw(855,424,pl,FO);_.ae=function(a){switch(rx(a.type)){case 16:this.a=!1;break;case 32:this.a=!0}uA(this,a)};_.Ke=function(a,b){yA(this,a,b);b||this.a&&ez(this.b,!1)};_.a=!0;_.b=null;w(903,1,{});\nfunction GO(a,b,c,d){var e,f,g,h,j,l;h=(!c?b.b:JE(b,c,~~Op(c)))[0][d.length];b=j=e=null;for(c=0,f=!h?0:h.length;c",We="/>\\n",Xe="0",Ye="0.0px",Ze="0px",$e="1",af="100%",bf="123",cf="144.0pt",df="144.0px",ef="2",ff="2.5.0",gf="2147483647",hf="3",jf="3.0.0",kf="4",lf="4841BDE9DC293BA35F7762B4D8EFD236.cache.png",mf="5",nf="6",of="7",tf="72.0px",uf="8",wf="9",xf="96E40B969193BD74B8A621486920E79C.cache.js",yf="9p",zf=":",Af=": ",Bf=":moduleBase",Cf=";",Df="; ",Ef=";\'>",Ff="<",Lf="<\/chemical:x-mdl-molfile",Mf="<\/div><\/body><\/html>",Nf="<\/span>",\nOf="
\',Sf="",Xf="?",bg="@",cg="@@",dg="A",eg="A JavaScript function name is expected, not a the function itself",fg="A6DBDE07E3A8F66E8959A4F32505E16B.cache.png",\ngg="API",hg="AfterStructureModified",ig="Ag",jg="Al",kg="All rights reserved.",lg="Apr",mg="Are you trying to draw an hedgehog ?",ng="AtomClicked",og="AtomHighlight",pg="Au",qg="Aug",rg="Auto atom map molecule",sg="B",tg="Ba",wg="BackgroundImageCache",zg="Bad stereoinfo on allene !",Ag="BeforePaste",Bg="BondClicked",Cg="BondHighlight",Dg="Bottom",Eg="Br",Fg="C",Gg="CSS1Compat",Hg="Ca",Ig="Can\'t find exported method for given arguments: ",Jg="Cannot add a handler with a null type",Kg="Cannot add a null handler",\nLg="Cannot fire null event",Mg="Cannot redo. Index is out of range.",Ng="Cannot set a new parent without first clearing the old parent",Og="Cannot undo. Index is out of range.",Qg="Caused by: ",Ug="Cd",Wg="Center",Xg="Change atom map",Yg="Character out of range: ",Zg="Charge change not possible on ",$g="Charge change not possible on multibonded ",ah="Charge change not possible on multibonded N or P !",bh="Charge change not possible on the halogen !",ch="Charge change not possible on this boron !",\ndh="Charge change not possible on this carbon !",eh="Chiral flag is set",fh="Cl",gh="Class$",hh="Clear canvas",ih="Color parameter outside of expected range",mh="Content",nh="Copy as ",oh="Copy as InChI",ph="Copy as InChI auxinfo",qh="Copy as InChI key",rh="Copy as OCL ID code",sh="Copy as Scalar Vector Graphics",th="Copy selected (blue) molecule to the other side of the reaction",uh="Copying the agent not possible !",vh="Copyright (c) 2017, Novartis Institutes for BioMedical Research Inc. and Bruno Bienfait.",\nwh="Cs",xh="Cu",yh="DF7764EEC1903CD03C9545B354D8D8E4.cache.png",zh="DOMMouseScroll",Ah="Dec",Bh="Default",Ch="Delete all atom map molecule",Dh="Delete hydrogens",Eh="Delete selected molecule (red)",Fh="Dialog",Gh="Download of ",Hh="ERROR - ",Ih="ERROR - cannot add aromatic spiro ring !",Jh="ERROR - invalid mol index: ",Lh="ERROR - problems in reading/processing MOL input",Mh="ERROR - problems in reading/processing molecule !",Nh="ERROR - spiro ring not possible here !",Oh="ERROR - strange reaction !",\nPh="ERROR - strange reaction - fixing !",Qh="ERROR: ",Rh="ERROR: Possible problem with your *.gwt.xml module file.\\nThe compile time user.agent value (ie6) does not match the runtime user.agent value (",Wh="Error in C3H stereospecification !",Xh="Error in C4 stereospecification !",Yh="Error in C4 stereospecification ! 2/0r",Zh="Error in stereoprocessing ! - t30",$h="Exception caught: ",ai="F",bi="FG",ci="Feb",di=\'For input string: "\',ei="Fr",fi="Fri",gi="GUI",hi="GWT",ii="Ga",ji="H",ki="H.1,2,3.He.3,4.Li.6,7.Be.9.B.10,11.C.12,13,14.N.14,15.O.16,17,18.F.19.Ne.20,21,22.Na.23.Mg.24,25,26.Al.27.Si.28,29,30.P.31.S.32,33,34,36.Cl.35,37.Ar.36,38,40.K.39,40,41.Ca.40,42,43,44,46,48.Sc.45.Ti.46,47,48,49,50.V.50,51.Cr.50,52,53,54.Mn.55.Fe.54,56,57,58.Co.59.Ni.58,60,61,62,64.Cu.63,65.Zn.64,66,67,68,70.Ga.69,71.Ge.70,72,73,74,76.As.75.Se.74,76,77,78,80,82.Br.79,81.Kr.78,80,82,83,84,86.Rb.85,87.Sr.84,86,87,88.Y.90.Zr.90,91,92,94,96.Nb.93.Mo.92,94,95,96,97,98,100.Tc.99.Ru.96,98,99,100,101,102,104.Rh.103.Pd.102,104,105,106,108,110.Ag.107,109.Cd.106,108,110,111,112,113,114,116.In.113,115.Sn.112,114,115,116,117,118,119,120,122,124.Sb.121,123.Te.120,122,123,124,125,126,128,130.I.127.Xe.124,126,128,129,130,131,132,134,136.Cs.133.Ba.130,132,134,135,136,137,138.La.138,139.Ce.136,138,140,142.Pr.141.Nd.142,143,144,145,146,148,150.Pm.145.Sm.144,147,148,149,150,152,154.Eu.151,153.Gd.152,154,155,156,157,158,160.Tb.159.Dy.156,158,160,161,162,163,164.Ho.165.Er.162,164,166,167,168,170.Tm.169.Yb.168,170,171,172,173,174,176.Lu.175,176.Hf.174,176,177,178,179,180.Ta.180,181.W.180,182,183,184,186.Re.185,187.Os.184,186,187,188,189,190,192.Ir.191,193.Pt.190,192,194,195,196,198.Au.197.Hg.197,198,199,200,201,202,204.Tl.203,205.Pb.204,206,207,208.Bi.209.Po.209.At.210.Rn.222.Fr.223.Ra.226.Ac.227.Th.232.Pa.231.U.234,235,238.Np.237.Pu.244.Am.243.Cm.247.Bk.247.Cf.251.Es.254.Fm.257.Md.258.No.255.Lr.256.Ku.261",\nli="HTML{margin:0 !important;border:none !important;}.dragdrop-handle{cursor:move;user-select:none;-khtml-user-select:none;-moz-user-select:none;}.GBVTBU-BB{zoom:1;}.dragdrop-dragging{zoom:normal;}.GBVTBU-BI{border:1px dashed #1e90ff;margin:0 !important;zoom:1;z-index:100;}.dragdrop-flow-panel-positioner{color:#1e90ff;display:inline;text-align:center;vertical-align:middle;}.dragdrop-proxy{background-color:#7af;}.dragdrop-selected,.dragdrop-dragging,.dragdrop-proxy{filter:alpha(opacity \\\\= 30);opacity:0.3;}.dragdrop-movable-panel{z-index:200;margin:0 !important;border:none !important;}",\nmi="Helvetica",ni="I",oi="IFRAME",pi="INPUT",qi="ISO-8859-1",ri="ISO-LATIN-1",si="InChI=",ti="InchiKeySearch",ui="Incorrect URL: ",vi="Index: ",wi="Inner",xi="Install of ",yi="Internal index set to null.",zi="Invalid JME string",Ai="Invalid V2000 molfile",Bi="Invalid callback name: ",Ci="JME",Ei="JME\\n\\n",Fi="JME 2017-02-26 ",Gi="JME.class",Hi="JSApplet.Inchi.",Ii="JSApplet.JSME",Ji="JSApplet.Utils",Ki="JSME",Li=\'JSME initialization error: Due to an Internet Explorer bug, HTML id argument can not be "JSME".\',\nMi="JSME initialization error: HTML id ",Ni="JSME initialization error: HTML id argument is null.",Oi=\'JSME installation warning: invalid size or not specified size of DOM element: "\',Pi="Jan",Qi="JavaScript",Ri="Jul",Si="Jun",Ti="K",Ui="Left",Vi="Li",Wi="M APO",Xi="M CHG",Yi="M CHG 1",Zi="M END",$i="M END\\n",aj="M ISO",bj="M ISO 1",cj="M V30 ",dj="M V30 BEGIN ATOM\\n",ej="M V30 BEGIN BOND\\n",fj="M V30 BEGIN COLLECTION",gj="M V30 BEGIN CTAB",hj="M V30 COUNTS ",ij="M V30 END ATOM\\n",\njj="M V30 END BOND\\n",kj="M V30 END COLLECTION\\n",lj="M V30 END CTAB\\n",nj="MDLV30/STEABS",oj="MDLV30/STERAC",pj="MDLV30/STEREL",qj="MOL",rj="MOL n. ",sj="MOL or SDF",tj="MOUSE_CLICKED",uj="MOUSE_DRAGGED",vj="MOUSE_ENTERED",wj="MOUSE_EXITED",xj="MOUSE_MOVED",yj="MOUSE_PRESSED",zj="MOUSE_RELEASED",Aj="MOUSE_WHEEL",Bj="Mar",Cj="Maximum allowed bond order is 3 !",Dj="May",Ej="Metallic ",Fj="Mg",Gj="Middle",Hj="Missing message: awt.133",Ij="Missing message: awt.151",Jj="Missing message: awt.70",Kj=\n"Mon",Lj="Move one atom",Mj="Must call next() before remove().",Nj="N",Oj="NA",Pj="NEW",Qj="Na",Rj="Next ring will be added as spiro",Sj="Ni",Tj="No Chiral flag",Uj="No more molecules in SDF buffer",Vj="No more redo",Wj="No more undo",Xj="Not known group!",Yj="Not possible connection !",Zj="Not unique E/Z geometry !",$j="Nov",ak="Null widget handle. If you are creating a composite, ensure that initWidget() has been called.",bk="O",ck="Oct",dk="P",ek="PARAM",fk="PASTE",gk="Paste ",hk="Popup",ik="Q",\njk="Q ",kk="R",nk="RXN",ok="Rb",pk="Reading ",qk="Removal of substituent not possible.",rk="Right",sk="S",tk="SDFstack",uk="SMILES",vk="SMIRKS",wk="Sat",xk="Se",yk="Search chemical structure (through InChIKey)",zk="Select substituent",Bk="Sep",Ck="Set molecule Chiral flag",Dk="Should only call onAttach when the widget is detached from the browser\'s document",Ek="Should only call onDetach when the widget is attached to the browser\'s document",Fk="Si",Gk="SimplePanel can only contain one child widget",\nHk="Sr",Ik="Stereomarking allowed only on single and double bonds!",Jk="Stereomarking meaningless on this bond !",Kk="String index out of range: ",Lk="Structure pasted. ",Mk="Style names cannot be empty",Nk="Sun",Ok="Text",Pk="This widget\'s parent does not implement HasWidgets",Qk="Thu",Rk="Top",Sk="Tue",Tk="UTF-8",Uk="Unset molecule chiral flag",Vk="Use X button to change charge on the X atom !",Wk="V1",Xk="V2",Yk="V2000",Zk="V3000",$k=\'Warning: the global function "jsmeOnLoad" is not defined.\\n If you have defined it, there might be a syntax error in your javascript code.\',\nal="Wed",bl="Widget must be a child of this panel.",cl="Windows NT",dl="X",el="You are too focused on chains, enough of it for now !",fl="Zn",gl="[",hl="[JavaScriptObject]",il="[object Array]",jl="\\\\",kl=\'\\\\"\',ll="\\\\$\\\\$\\\\$\\\\$\\r?\\n?",ml="\\\\.",nl="\\\\:",ol="\\\\\\\\",pl="\\\\\\\\n",ql="\\\\b",rl="\\\\bno",sl="\\\\f",tl="\\\\n",ul="\\\\r",vl="\\\\s+",wl="\\\\t",xl="\\\\u0000",yl="\\\\u0001",zl="\\\\u0002",Al="\\\\u0003",Bl="\\\\u0004",Cl="\\\\u0005",Dl="\\\\u0006",Hl="\\\\u0007",Il="\\\\u000B",Jl="\\\\u000E",Kl="\\\\u000F",Ll="\\\\u0010",Ml="\\\\u0011",\nNl="\\\\u0012",Ol="\\\\u0013",Pl="\\\\u0014",Ql="\\\\u0015",Rl="\\\\u0016",Sl="\\\\u0017",Tl="\\\\u0018",Ul="\\\\u0019",Vl="\\\\u001A",Xl="\\\\u001B",Yl="\\\\u001C",Zl="\\\\u001D",$l="\\\\u001E",am="\\\\u001F",bm="\\\\u00ad",cm="\\\\u0600",dm="\\\\u0601",em="\\\\u0602",fm="\\\\u0603",gm="\\\\u06dd",hm="\\\\u070f",im="\\\\u17b4",jm="\\\\u17b5",km="\\\\u200b",lm="\\\\u200c",mm="\\\\u200d",nm="\\\\u200e",om="\\\\u200f",pm="\\\\u2028",qm="\\\\u2029",rm="\\\\u202a",sm="\\\\u202b",tm="\\\\u202c",um="\\\\u202d",vm="\\\\u202e",wm="\\\\u2060",xm="\\\\u2061",ym="\\\\u2062",zm="\\\\u2063",\nAm="\\\\u2064",Bm="\\\\u206a",Cm="\\\\u206b",Dm="\\\\u206c",Em="\\\\u206d",Fm="\\\\u206e",Gm="\\\\u206f",Hm="\\\\ufeff",Im="\\\\ufff9",Jm="\\\\ufffa",Km="\\\\ufffb",Lm="]",Mm="^(\\\\d+)([A-Z][a-z]?)(\\\\b.*)",Nm="^(\\\\d+)?\\\\s*([A-Z][a-z]?)\\\\s*(?:(?:(\\\\d+)([+-]))|((?:\\\\++)|(?:-+)))?([^:+-]+?([,;#!])?[^:+-]+?)?(?::(\\\\d+))?$",Om="^[A-Z]{14}\\\\-[A-Z]{10}\\\\-[A-Z]$",Pm="^[a-z0-9@+\\\\-\\\\[\\\\]\\\\(\\\\)\\\\\\\\\\\\/%=#$:>\\\\.]+$",Qm="_",Rm="__gwtDevModeHook:",Sm="__gwt_dispatchDblClickEvent_",Tm="__gwt_dispatchEvent_",Um="__gwt_dispatchUnhandledEvent_",\nVm="__gwt_historyFrame",Wm="__gwt_historyToken",Xm="__gwtex_wrap",Ym="__local_ff",Zm="_blank",$m="a",an="abs",bn="absolute",cn="addAtom",dn="addAtomQuery",en="addBond",fn="addChain",gn="addGroup",hn="addNewPart",jn="addRing",kn="addRingBond",ln="addTemplate",mn="alert",nn="alertdialog",on="align",pn="alignMolecules Depict: molecularAreaScale=",qn="alpha(opacity=0)",rn="antialias",sn="application",tn="ar",un="arc",vn=\'arc startangle="\',wn="archive",xn="aria-activedescendant",yn="aria-hidden",zn="array",\nAn="article",Bn="atombg",Cn="atomcolors",Dn="atommovebutton",En="auto",Fn="autoRetry=",Gn="autoez",Hn="autonumber",In="background:url(",Jn="bad hex encoding",Kn="banner",Ln="baseline",Mn="begin",Nn="behavior:url(#default#VML); position:absolute; antialias:",On="black",Pn="block",Sn="blue",Tn="blur",Un="body",Vn="bolder",Wn="boolean",Xn="border",Yn="bottom",Zn="browser.version",$n="button",ao="c",bo="canonize",co="cellPadding",eo="cellSpacing",fo="center",go="change",ho="changeChiral",io="changeManyAtomMap",\njo="chargeAtom0",ko="check option ",lo="checkbox",mo="chemical:x-mdl-molfile",no="className",oo="clear",po="clear.cache.gif",qo=\'clear.cache.gif"\\\' style="\',ro="click",so="click marked atom to delete mark",to="client",uo="clip",vo="code",wo="codebase",xo="colSpan",yo="color:",zo="columnheader",Ao="com.allen_sauer.gwt.dnd.client.util.DragEntryPoint",Bo="com.google.gwt.user.client.DocumentModeAsserter",Co="com.google.gwt.useragent.client.UserAgentAsserter",Do="combobox",Eo="complementary",Fo="complete",\nGo="contenteditable",Ho="contentinfo",Io="contextmenu",Jo="copy",Ko="css is null",Lo="dblclick",Mo="definition",No="delAtom",Oo="delBond",Po="delBondGroup",Qo="deleteAtom",Ro="deleteAtomMaps",So="deleteHydrogens",To="depict",Uo="depictaction",Vo="depictbg",Wo="depictcgi",Xo="dialog",Yo="directory",Zo="display",$o="div",ap="divide by zero",bp="document",cp="download",dp="drag out MOL or RXN file",ep="drawInfo: ",fp="drawMolecularArea ",gp="drawMolecularArea mustReDrawMolecularArea=",hp="end_gesture",\nip="error",jp="export.client.JSME_export",kp="exportInchi",lp="exportInchiAuxInfo",mp="exportInchiKey",np="exportSVG",op="fa",pp="false",qp="filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'",rp="flavor = ",sp="focus",tp="font-family:",up="font-size:",vp="font-style:italic;",wp="font-weight:bolder;",xp="fontFamily",yp="fontSize",zp="fontStyle",Ap="fontWeight",Bp="form",Cp="function",Dp=\'function __gwt_initWindowCloseHandler(beforeunload, unload) {\\n var wnd = window\\n , oldOnBeforeUnload = wnd.onbeforeunload\\n , oldOnUnload = wnd.onunload;\\n \\n wnd.onbeforeunload = function(evt) {\\n var ret, oldRet;\\n try {\\n ret = beforeunload();\\n } finally {\\n oldRet = oldOnBeforeUnload && oldOnBeforeUnload(evt);\\n }\\n // Avoid returning null as IE6 will coerce it into a string.\\n // Ensure that "" gets returned properly.\\n if (ret != null) {\\n return ret;\\n }\\n if (oldRet != null) {\\n return oldRet;\\n }\\n // returns undefined.\\n };\\n \\n wnd.onunload = function(evt) {\\n try {\\n unload();\\n } finally {\\n oldOnUnload && oldOnUnload(evt);\\n wnd.onresize = null;\\n wnd.onscroll = null;\\n wnd.onbeforeunload = null;\\n wnd.onunload = null;\\n }\\n };\\n \\n // Remove the reference once we\\\'ve initialize the handler\\n wnd.__gwt_initWindowCloseHandler = undefined;\\n}\\n\',\nEp="function __gwt_initWindowResizeHandler(resize) {\\n var wnd = window, oldOnResize = wnd.onresize;\\n \\n wnd.onresize = function(evt) {\\n try {\\n resize();\\n } finally {\\n oldOnResize && oldOnResize(evt);\\n }\\n };\\n \\n // Remove the reference once we\'ve initialize the handler\\n wnd.__gwt_initWindowResizeHandler = undefined;\\n}\\n",Fp="g",Gp="gecko",Hp="gecko1_8",Ip="gesturechange",Jp="gestureend",Kp="gesturestart",Lp="google",Mp="green",Np="grid",Op="gridcell",Pp="group",\nQp="gwt-DecoratedPopupPanel",Rp="gwt-DecoratorPanel",Sp="gwt-Image",Tp="gwt-MenuBar",Up="gwt-MenuBarPopup",Vp="gwt-MenuItem",Wp="gwt-MenuItemSeparator",Xp="gwt-PopupPanel",Yp="gwt-TextBox",Zp="gwt-uid-",$p="head",aq="heading",bq="height",cq="height:",dq="hidden",eq="hideFocus",fq="hspace",gq="html is null",hq="http.proxyPort",iq="http://",jq="https",kq="https://",lq="hydrogens",mq="i",nq="id",oq="ie6",pq="ie8",qq="ie9",rq="iframe",sq="img",tq="incorrect port: ",uq="info: ",vq="inline",wq="is_touch_supported",\nxq="italic",yq="iw",zq="j",Aq="java.endorsed.dirs",Bq="java.runtime.version",Cq="java.specification.name",Dq="java.specification.version",Eq="java.vendor",Fq="java.version",Gq="java.vm.name",Hq="java.vm.specification.vendor",Iq="javascript:\'\'",Jq="jme",Kq="jmeh",Lq="jsa-resetDiv",Mq="jsa-resetTable",Nq="keephs",Oq="keydown",Pq="keypress",Qq="keyup",Rq="left",Sq="leftoversDownload",Tq="line",Uq=\'line from="\',Vq="link",Wq="list",Xq="listbox",Yq="listitem",Zq="load",$q="loaded",ar="log",br="losecapture",\ncr="m",dr="main",er="manualRetry=",fr="margin",gr="marginBottom",hr="markAtom",ir="markBond",jr="marquee",kr="math",lr="menu",mr="menuPopup",nr="menuSeparatorInner",or="menubar",pr="menuitem",qr="menuitemcheckbox",rr="menuitemradio",sr="middle",tr="mix",ur="moduleStartup",vr="mol",wr="monospace",xr="mousedown",yr="mousemove",zr="mouseout",Ar="mouseover",Br="mouseup",Cr="mousewheel",Dr="msie",Er="multipart",Fr="must be non-negative",Gr="n",Hr="name",Ir="navigation",Jr="newlook",Kr="no",Lr="nocenter",\nMr="nodepict",Nr="none",Or="note",Pr="notify_structural_change_js_function",Qr="nowrap",Rr="null",Sr="number",Tr="o",Ur="object",Vr="offsetHeight",Wr="offsetWidth",Xr="oldlook",Yr="onModuleLoadStart",Zr="onblur",$r="onclick",as="oncontextmenu",bs="ondblclick",cs="onerror() called.",ds="onfocus",es="onkeydown",fs="onkeypress",gs="onkeyup",hs="onload",is="onmousedown",js="onmousemove",ks="onmouseup",ls="onmousewheel",ms="ontouchstart",ns="opera",os="option",ps="options",qs="or",rs="os.encoding",ss=\n"os.name",ts="os.name.applet",us="outline",vs="oval",ws=\'oval style="position:absolute;left:\',xs="overflow",ys="overflow: hidden; width: ",zs="p",As="package.restrict.access.sun",Bs="padding",Cs="paste",Ds="path.separator.applet",Es="polarnitro",aaa="polyline",baa=\'polyline points="\',Fs="popupContent",Gs="position",Hs="presentation",Is="progressbar",Js="px",Ks="px ",Ls=\'px"\',caa=\'px" \',daa=\'px"+\',eaa="px)",Ms="px,",Ns="px, ",Os="px;",faa="px; border: none",gaa="px; height: ",haa="px; margin-top: ",\niaa="px; padding: 0px; zoom: 1",Ps="px;height:",jaa="px;left:",Qs="px;top:",Rs="px;width:",kaa="query",Ss="radio",Ts="radiogroup",laa="radix ",maa="rbutton",naa="reaction",oaa="reactionCopy",paa="readJME",Us="readMolFile",qaa="readRXNFile",raa="rect",Vs=\'rect style="position:absolute;left:\',saa="rect(",Ws="rect(0px, 0px, 0px, 0px)",taa="rect(auto, auto, auto, auto)",uaa="red",Xs="redo",Ys="region",vaa="relative",waa="removehs",xaa="removehsc",yaa="reset",zaa="return function() { w.__gwt_dispatchDblClickEvent_",\nAaa="return function() { w.__gwt_dispatchEvent_",Zs="return function() { w.__gwt_dispatchUnhandledEvent_",Baa="return;",$s="rgb(",at="right",bt="role",ct="rotation",Caa="roundrect",dt="row",et="rowgroup",ft="rowheader",gt="rtl",Daa="runAsync",ht="runAsyncCallback",it="s",Eaa="safari",Faa="sans-serif",jt="scale100",kt="script",Gaa="scroll",lt="scrollbar",mt="se",nt="search",Haa="searchInchiKey",ot="separator",pt="serif",qt="setAtom",rt="setBondDouble",st="setBondSingle",Iaa="setBondStereo",tt="setBondTriple",\nJaa="setQueryBond",Kaa="showDragAndDropSymbolInDepictMode",Laa="showan",ut="slider",Maa="smiles",vt="span",wt="spinbutton",Naa="star",Oaa="startup",xt="status",Paa="stereo",yt="string",zt="subMenuIcon-selected",Qaa="sun.java.launcher",Raa="sun.management.compiler",At="tab",Bt="table",Ct="tablist",Dt="tabpanel",Et="tbody",Ft="td",Gt="text",Saa="text/javascript",Ht="textAlign",It="textbox",Taa="this.__popup.currentStyle.zIndex",Jt="timer",Kt="title",Uaa="toggle",Lt="toolbar",Mt="tooltip",Nt="top",Vaa=\n"touch",Ot="touchcancel",Pt="touchend",Qt="touchmove",Rt="touchstart",St="tr",Tt="tree",Ut="treegrid",Vt="treeitem",Wt="true",Waa="unMarkAtom",Xaa="unMarkBond",Xt="undo",Yaa="unknown",Yt="unknown protocol(",Zt="unknown type",Zaa="update() in depict mode: oldMolecularAreaScale = ",$aa="update(): ",aba="ur",bba="uri is null",$t="urn:schemas-microsoft-com:vml",cba="useOclIDCode",dba="useopenchemlib",eba="user.language",fba="user.name",gba="user.timezone",au="value",bu="verticalAlign",cu="visibility",\ndu="visible",hba="vspace",eu="w",iba="webkit",jba="white",kba="white-space:nowrap;",fu="whiteSpace",gu="width",lba="width:",hu="x",mba="xbutton",nba="yes",iu="zIndex",ju="zoom",ku="{",lu="|",oba="|>",_,mu={l:4194303,m:4194303,h:1048575},nu={l:0,m:0,h:0},ou={l:1,m:0,h:0},pu={l:2,m:0,h:0},pba={l:3,m:0,h:0},qu={l:4,m:0,h:0},ru={l:8,m:0,h:0},qba={l:10,m:0,h:0},su={l:16,m:0,h:0},tu={l:32,m:0,h:0},uu={l:64,m:0,h:0},vu={l:128,m:0,h:0},wu={l:256,m:0,h:0},rba={l:512,m:0,h:0},xu={l:1024,m:0,h:0},yu={l:2048,\nm:0,h:0},zu={l:8192,m:0,h:0},sba={l:16384,m:0,h:0},tba={l:32768,m:0,h:0},Au={l:65536,m:0,h:0},uba={l:131072,m:0,h:0},vba={l:262144,m:0,h:0},Bu={l:524288,m:0,h:0},Cu={},Du={25:1},q={88:1,92:1,103:1},Eu={74:1,83:1},Fu={35:1},Gu={20:1,21:1,88:1,93:1,95:1},Hu={66:1,88:1},Iu={32:1,88:1},Ju={87:1,88:1,92:1,103:1},Ku={26:1,28:1,36:1,41:1,44:1,48:1,50:1},Lu={52:1,88:1,96:1,104:1,105:1},Mu={49:1,88:1,93:1,95:1},Nu={59:1,60:1,66:1,80:1,88:1},Ou={63:1,88:1},u={86:1,88:1,92:1},Pu={88:1,107:1},Qu={107:1},Ru={2:1,\n88:1,92:1},Su={26:1,28:1,36:1,41:1,42:1,44:1,48:1,50:1},Tu={28:1},Uu={26:1,28:1,36:1,40:1,41:1,42:1,44:1,48:1,50:1},Vu={91:1},Wu={88:1,92:1,108:1},Xu={21:1,24:1,88:1,93:1,95:1},Yu={88:1,92:1},Zu={27:1,51:1},$u={132:1},av={111:1},bv={88:1,96:1,104:1,105:1},cv={23:1,88:1,93:1,95:1},dv={79:1,92:1},ev={17:1},fv={3:1,88:1,92:1},gv={},hv={108:1},iv={109:1},jv={53:1,88:1,92:1},kv={21:1,22:1,88:1,93:1,95:1},lv={59:1,66:1,80:1,88:1},mv={18:1},nv={41:1,48:1},ov={88:1},pv={88:1,96:1,105:1},qv={88:1,92:1,107:1},\nrv={34:1},sv={54:1,59:1,60:1,66:1,74:1,75:1,80:1,83:1,88:1};function w(a,b,c){var d=Cu[a];d&&!d.cZ?_=d.prototype:(!d&&(d=Cu[a]=function(){}),_=d.prototype=0>b?{}:new Cu[b],_.cM=c);for(var e=3;e=a.t+a.n;if(a.p&&!d)return d=(b-a.t)/a.n,a.td((1+Math.cos(3.141592653589793+3.141592653589793*d))/2),a.o&&a.r==c;if(!a.p&&b>=a.t&&(a.p=!0,a.sd(),!(a.o&&a.r==c)))return!1;return d?(a.o=!1,a.p=!1,a.rd(),!1):!0}w(58,1,{});_.qd=function(){this.u&&this.rd()};\n_.rd=function(){this.td((1+Math.cos(6.283185307179586))/2)};_.sd=function(){this.td((1+Math.cos(3.141592653589793))/2)};_.n=-1;_.o=!1;_.p=!1;_.q=null;_.r=-1;_.s=null;_.t=-1;_.u=!1;function Uv(a,b){if(wba(a.a,b)){var c=a.a,d=a.a.s,e;e=new Vv(d,a.a.k);Wv(d.a,e);1==d.a.c&&Xv(d.b,16);c.q=e}else a.a.q=null}function Yv(a){this.a=a}w(59,1,{},Yv);_.a=null;w(60,1,{});w(61,1,{13:1});function Zv(){Zv=x;$v=new aw}w(62,60,{});var $v=null;function aw(){this.a=new bw;this.b=new cw(this)}w(63,62,{},aw);\nfunction dw(){dw=x;ew=new bw;var a=new fw;gw();hw(iw?iw:iw=new jw,a)}function Rv(a){a.b?$wnd.clearInterval(a.c):$wnd.clearTimeout(a.c);Qv(ew,a)}function Xv(a,b){if(0>b)throw new kw(Fr);a.b?$wnd.clearInterval(a.c):$wnd.clearTimeout(a.c);Qv(ew,a);a.b=!1;a.c=xba(a,b);Wv(ew,a)}function xba(a,b){return $wnd.setTimeout(B(function(){a.ud()}),b)}w(65,1,{});_.ud=function(){this.b||Qv(ew,this);this.vd()};_.b=!1;_.c=0;var ew;function cw(a){dw();this.a=a}w(64,65,{},cw);\n_.vd=function(){var a=this.a,b,c,d,e,f;b=C(yba,q,14,a.a.c,0);b=lw(a.a,b);c=new mw;for(e=0,f=b.length;eTv()-d.a;){e=!1;for(f=0;f1E3*parseInt(a[1])+parseInt(a[2])){oA=!0;break a}oA=!1}nA=!0}return oA}var oA=!1,nA=!1;function pA(){var a=$doc;!a.gwt_uid&&(a.gwt_uid=1);return Zp+a.gwt_uid++}\nfunction qA(){var a=$doc;return(J(a.compatMode,Gg)?a.documentElement:a.body).clientLeft}function rA(){var a=$doc;return(J(a.compatMode,Gg)?a.documentElement:a.body).clientTop}function sA(){var a=$doc;return(J(a.compatMode,Gg)?a.documentElement:a.body).clientHeight}function tA(){var a=$doc;return(J(a.compatMode,Gg)?a.documentElement:a.body).clientWidth}function uA(a){return kA(J(a.compatMode,Gg)?a.documentElement:a.body)}\nfunction vA(a){return(J(a.compatMode,Gg)?a.documentElement:a.body).scrollTop||0}function wA(){wA=x;try{$doc.execCommand(wg,!1,!0)}catch(a){}}\nfunction xA(a,b,c){function d(a){var d=b.__kids;b.__cleanup();window.setTimeout(function(){for(var a=0;a=d&&0=b&&(c=1301+d));EC(a,c)}a=!0}a&&eA(this.a)};_.Gd=function(){return rC};var rC;function FC(){FC=x;GC=new QB(xr,new HC)}function HC(){}w(266,247,Du,HC);_.Dd=function(a){a.ld(this)};_.Gd=function(){return GC};var GC;function IC(){IC=x;JC=new QB(yr,new KC)}function KC(){}w(267,247,Du,KC);_.Dd=function(a){a.md(this)};\n_.Gd=function(){return JC};var JC;function LC(){LC=x;MC=new QB(zr,new NC)}function NC(){}w(268,247,Du,NC);_.Dd=function(a){a.nd(this)};_.Gd=function(){return MC};var MC;function OC(){OC=x;PC=new QB(Ar,new QC)}function QC(){}w(269,247,Du,QC);_.Dd=function(a){var b;b=this.a;Mz((Jz(),Kz),new RC(a,a.b,b))};_.Gd=function(){return PC};var PC;function SC(){SC=x;TC=new QB(Br,new UC)}function UC(){}w(270,247,Du,UC);_.Dd=function(a){a.od(this)};_.Gd=function(){return TC};var TC;\nfunction VC(){VC=x;WC=new QB(Cr,new XC);new QB(zh,new XC)}function XC(){}w(271,247,Du,XC);_.Dd=function(a){var b,c,d,e,f;b=Math.round(-this.a.wheelDelta/40)||0;b=new YC(a.a.i,UB(this),VB(this),b);f=0;for(c=ZC(a.a.i.Pc,C(Mba,q,75,0,0)),d=0,e=c.length;da.qI&&(c.tM==x||c.cM&&c.cM[1])&&(!c.cM||!c.cM[-a.qI]))throw new gE;}return a[b]=c}w(301,1,{},YD);_.qI=0;\nfunction dE(){dE=x;eE=[];fE=[];var a=new YD,b=eE,c=fE,d=0,e,f;for(f in a)if(e=a[f])b[d]=f,c[d]=e,++d}var eE,fE;function H(a,b){return null!=a&&a.cM&&!!a.cM[b]}function Vy(a){return null!=a&&a.tM!=x&&!(a.cM&&a.cM[1])}function Yy(a){return a.tM==x||a.cM&&!!a.cM[1]}function hE(a){return null==a?null:a}function iA(a){return~~Math.max(Math.min(a,2147483647),-2147483648)}var iE=-1;\nfunction jE(){var a;$stats&&kE(Co);a=navigator.userAgent.toLowerCase();if(-1!=a.indexOf(ns))a=ns;else if(-1!=a.indexOf(iba))a=Eaa;else if(-1!=a.indexOf(Dr)&&9<=$doc.documentMode)a=qq;else if(-1!=a.indexOf(Dr)&&8<=$doc.documentMode)a=pq;else{var b;var c=/msie ([0-9]+)\\.([0-9]+)/.exec(a);c&&3==c.length&&(b=6E3<=1E3*parseInt(c[1])+parseInt(c[2]));a=b?oq:-1!=a.indexOf(Gp)?Hp:Yaa}J(oq,a)||$wnd.alert(Rh+a+td);$stats&&kE(Bo);b=$doc.compatMode;a=y(lE,q,1,[Gg]);for(c=0;cd)$doc.createStyleSheet().cssText=a;else{f=2147483647;e=-1;for(b=0;b>22&4194303,0>a?1048575:0)}function tE(a){return sE(a.l,a.m,a.h)}function sE(a,b,c){return _=new uE,_.l=a,_.m=b,_.h=c,_}\nfunction Pba(a,b){var c,d,e,f,g;if(0==b.l&&0==b.m&&0==b.h)throw new vE;if(0==a.l&&0==a.m&&0==a.h)return wE=sE(0,0,0),sE(0,0,0);if(524288==b.h&&0==b.m&&0==b.l)return c=a,524288==c.h&&0==c.m&&0==c.l?(wE=sE(0,0,0),c=tE((xE(),yE))):(wE=sE(c.l,c.m,c.h),c=sE(0,0,0)),c;g=!1;0!=b.h>>19&&(b=zE(b),g=!0);e=b.l;0!=(e&e-1)?f=-1:(d=b.m,0!=(d&d-1)?f=-1:(c=b.h,f=0!=(c&c-1)||0==c&&0==d&&0==e?-1:0==c&&0==d&&0!=e?AE(e):0==c&&0!=d&&0==e?AE(d)+22:0!=c&&0==d&&0==e?AE(c)+44:-1));c=d=e=!1;if(524288==a.h&&0==a.m&&0==a.l)if(e=\nd=!0,-1==f)a=tE((xE(),BE)),c=!0,g=!g;else return c=CE(a,f),g&&DE(c),wE=sE(0,0,0),c;else 0!=a.h>>19&&(e=!0,a=zE(a),c=!0,g=!g);if(-1!=f){c=a;d=f;f=g;g=e;e=CE(c,d);f&&DE(e);var h;22>=d?(f=c.l&(1<=d?(f=c.l,h=c.m&(1<r?j=\n!1:(n=j.l-f.l,o=j.m-f.m+(n>>22),r+=o>>22,0>r?j=!1:(j.l=n&4194303,j.m=o&4194303,j.h=r&1048575,j=!0));if(j&&(22>l?h.l|=1<l?h.m|=1<>>1;f.m=j>>>1|(n&1)<<21;f.l=o>>>1|(j&1)<<21;--l}g&&DE(h);e?(wE=zE(c),d&&(wE=HE(wE,(xE(),yE)))):wE=sE(c.l,c.m,c.h);return h}function DE(a){var b,c,d;b=~a.l+1&4194303;c=~a.m+(0==b?1:0)&4194303;d=~a.h+(0==b&&0==c?1:0)&1048575;a.l=b;a.m=c;a.h=d}\nfunction FE(a){var b;b=IE(a.h);return 32==b?(b=IE(a.m),32==b?IE(a.l)+32:b+20-10):b-12}var wE=null;function JE(a,b){return a.l==b.l&&a.m==b.m&&a.h==b.h}function L(a){var b,c,d;if(isNaN(a))return xE(),KE;if(-9223372036854775E3>a)return xE(),LE;if(9223372036854775E3<=a)return xE(),BE;d=!1;0>a&&(d=!0,a=-a);c=0;17592186044416<=a&&(c=iA(a/17592186044416),a-=17592186044416*c);b=0;4194304<=a&&(b=iA(a/4194304),a-=4194304*b);a=iA(a);b=sE(a,b,c);d&&DE(b);return b}\nfunction ME(a){var b,c;return-129a?(b=a+128,null==NE&&(NE=C(Qba,q,30,256,0)),c=NE[b],!c&&(c=NE[b]=rE(a)),c):rE(a)}function OE(a){var b=nu,c,d;c=a.h>>19;d=b.h>>19;return 0==c?0!=d||a.h>b.h||a.h==b.h&&a.m>b.m||a.h==b.h&&a.m==b.m&&a.l>b.l:!(0==d||a.h>19;d=b.h>>19;return 0==c?0!=d||a.h>b.h||a.h==b.h&&a.m>b.m||a.h==b.h&&a.m==b.m&&a.l>=b.l:!(0==d||a.h>13|(a.m&15)<<9;e=a.m>>4&8191;f=a.m>>17|(a.h&255)<<5;g=(a.h&1048320)>>8;h=b.l&8191;j=b.l>>13|(b.m&15)<<9;l=b.m>>4&8191;n=b.m>>17|(b.h&255)<<5;o=(b.h&1048320)>>8;r=c*h;z=d*h;t=e*h;v=f*h;g*=h;0!=j&&(z+=c*j,t+=d*j,v+=e*j,g+=f*j);0!=l&&(t+=c*l,v+=d*l,g+=e*l);0!=n&&(v+=c*n,g+=d*n);0!=o&&(g+=c*o);c=(r&4194303)+((z&511)<<13);r=(r>>22)+(z>>9)+((t&262143)<<4)+((v&31)<<17)+(c>>22);t=(t>>18)+(v>>5)+((g&4095)<<8)+(r>>22);return sE(c&4194303,r&\n4194303,t&1048575)}function zE(a){var b,c;b=~a.l+1&4194303;c=~a.m+(0==b?1:0)&4194303;return sE(b,c,~a.h+(0==b&&0==c?1:0)&1048575)}function GE(a,b){var c,d,e,b=b&63;22>b?(c=a.l<>22-b,e=a.h<>22-b):44>b?(c=0,d=a.l<>44-b):(d=c=0,e=a.l<b?(e=c>>b,d=a.m>>b|c<<22-b,c=a.l>>b|a.m<<22-b):44>b?(e=d?1048575:0,d=c>>b-22,c=a.m>>b-22|c<<44-b):(e=d?1048575:0,d=d?4194303:0,c>>=b-44);return sE(c&4194303,d&4194303,e&1048575)}function HE(a,b){var c,d;c=a.l-b.l;d=a.m-b.m+(c>>22);return sE(c&4194303,d&4194303,a.h-b.h+(d>>22)&1048575)}function Q(a){return a.l|a.m<<22}\nfunction QE(a){var b,c,d;if(0==a.l&&0==a.m&&0==a.h)return Xe;if(524288==a.h&&0==a.m&&0==a.l)return fe;if(0!=a.h>>19)return Zd+QE(zE(a));for(c=m;!(0==a.l&&0==a.m&&0==a.h);){b=ME(1E9);a=Pba(a,b);b=m+Q(wE);if(!(0==a.l&&0==a.m&&0==a.h))for(d=9-b.length;0=a.children.length?a.appendChild(b):a.insertBefore(b,a.children[c])}\nfunction bG(a,b){var c=(a.__eventBits||0)^b;a.__eventBits=b;c&&(c&1&&(a.onclick=b&1?XF:null),c&3&&(a.ondblclick=b&3?YF:null),c&4&&(a.onmousedown=b&4?XF:null),c&8&&(a.onmouseup=b&8?XF:null),c&16&&(a.onmouseover=b&16?XF:null),c&32&&(a.onmouseout=b&32?XF:null),c&64&&(a.onmousemove=b&64?XF:null),c&128&&(a.onkeydown=b&128?XF:null),c&256&&(a.onkeypress=b&256?XF:null),c&512&&(a.onkeyup=b&512?XF:null),c&1024&&(a.onchange=b&1024?XF:null),c&2048&&(a.onfocus=b&2048?XF:null),c&4096&&(a.onblur=b&4096?XF:null),\nc&8192&&(a.onlosecapture=b&8192?XF:null),c&16384&&(a.onscroll=b&16384?XF:null),c&32768&&(a.nodeName==oi?b&32768?a.attachEvent(hs,$F):a.detachEvent(hs,$F):a.onload=b&32768?ZF:null),c&65536&&(a.onerror=b&65536?XF:null),c&131072&&(a.onmousewheel=b&131072?XF:null),c&262144&&(a.oncontextmenu=b&262144?XF:null),c&524288&&(a.onpaste=b&524288?XF:null))}function WF(){for(var a=!1,b=0;b<$wnd.__gwt_globalEventArray.length;b++)!$wnd.__gwt_globalEventArray[b]()&&(a=!0);return!a}var YF=null,XF=null,$F=null,ZF=null;\nw(356,1,Tu);_.$d=function(a){return decodeURI(a.replace("%23",Wb))};_._d=function(a){return encodeURI(a).replace(Wb,"%23")};_.Sd=function(a){ED(this.c,a)};_.ae=cG;_.be=function(a){a=null==a?m:a;if(!J(a,null==EF?m:EF))EF=a,this.ae(a),wD&&(a=new vD,ED(this.c,a))};var EF=m;function Sba(a){var b=B(function(){$wnd.setTimeout(b,250);if(!a.ce()){var c=DF();if(0d||d>a.p.c)throw new KG;b.ob==a&&(f=a.we(b),fd||d>=c.c)throw new KG;for(--c.c;dg&&l.charAt(g)==Zd&&0==l.indexOf(f)&&\n(e[h]=d+l.substring(g))}c.className=e.join(fa)}YG(this,this.T);cH(this);eG(bA(this.pb),Fs,!1);eG(this.T.b,b+mh,!0)}w(368,369,Su);_.oe=function(){tG(this.T)};_.pe=function(){wG(this.T)};_.De=function(){return this.T.jb};_.ye=function(){return new $G(this.T)};_.ve=function(a){return this.T.ve(a)};_.Ee=function(a){YG(this.T,a);cH(this)};_.T=null;w(367,368,Su);_.se=CG;function lH(){lH=x;mH=new nH(0,(hH(),iH));oH=new nH(1,pH);qH=new nH(2,rH);sH=y(Xba,q,37,[mH,oH,qH])}\nfunction nH(a,b){this.b=a;this.a=b}w(371,194,{37:1,88:1,93:1,95:1},nH);_.a=null;var sH,mH,oH,qH;function tH(){tH=x;uH=y(lE,q,1,[Nt,sr,Yn])}function kH(a){var b;tH();var c,d;c=this.pb=dA(Bt);this.c=dA(Et);oF(c,this.c);c[eo]=0;for(c=c[co]=0;cc&&(c=a.i.c-1),c==b){d=FF(a.i,b);break}else if(d=FF(a.i,c),d.b)break;fI(a,d)}}w(407,365,Ku);_.Yd=function(a){mI(this,a)};_.se=function(){this.j&&aH(this.j,!1);wG(this)};_.Ke=function(a,b){qI(this,a,b)};_.d=!1;_.e=null;_.f=!1;_.j=null;_.k=null;_.n=null;_.o=!1;function gI(a){this.a=a}\nw(408,1,{},gI);_.pd=function(){sI(this.a)};_.a=null;function tI(a){this.a=a}w(409,1,{},tI);_.Hd=function(){fI(this.a,null)};_.a=null;function hI(a,b){this.a=a;this.b=b;fH.call(this,!0,mr);YG(this.T,this.b.d);cH(this);this.fb=!0;this.b.d.fi()}w(410,368,Su,hI);_.Ud=function(a){var b,c;if(!a.a)switch(TF(a.d.type)){case 4:c=a.d.srcElement;b=this.b.c.pb;if(gA(b,c)){a.a=!0;break}a.a&&fI(this.a,null)}};_.a=null;_.b=null;function iI(a,b){this.a=a;this.b=b}w(411,1,{},iI);_.a=null;_.b=null;\nfunction uI(){uI=x;vI=$moduleBase+yh}var vI,wI=null;function xI(){xI=x;uI();wI=new SE((jF(),new iF((VD(),vI))),5,9)}function yI(a,b){if(b){var c=iG(a.pb)+Fe;eG(a.ie(),c,!1)}else c=iG(a.pb)+Fe,eG(a.ie(),c,!0);a.b=b}function zI(a,b){this.pb=dA(Ft);var c=iG(this.pb)+Ge;eG(this.ie(),c,!1);this.pb.innerText=a||m;this.pb[no]=Vp;c=pA();this.pb.setAttribute(nq,c);hx();this.pb.setAttribute(bt,Ox.a);this.a=b}w(414,366,{41:1,45:1,48:1},zI);_.a=null;_.b=!0;_.c=null;_.d=null;\nfunction AI(){var a;this.pb=dA(Ft);this.pb[no]=Wp;a=dA($o);oF(this.pb,a);a[no]=nr}w(415,366,nv,AI);function BI(){var a,b,c,d,e;b=null.fi();e=tA();d=sA();b[Zo]=(AA(),Nr);b[gu]=0+(UA(),Js);b[bq]=Ze;c=$doc;c=(J(c.compatMode,Gg)?c.documentElement:c.body).scrollWidth||0;a=$doc;a=(J(a.compatMode,Gg)?a.documentElement:a.body).scrollHeight||0;b[gu]=(c>e?c:e)+Js;b[bq]=(a>d?a:d)+Js;b[Zo]=Pn}function gH(){}w(416,1,{},gH);_.Qd=function(){BI()};function CI(a){this.a=a}w(417,1,{},CI);\n_.Ud=function(a){var b=this.a,c,d;if(a.a||!b.fb&&a.b)b.db&&(a.a=!0);else if(b.Ud(a),!a.a){d=a.d;c=d.srcElement;var e;try{e=!!c&&!!c.nodeType}catch(f){e=!1}(c=e&&c&&1==c.nodeType?gA(b.pb,c):!1)&&(a.b=!0);b.db&&(a.a=!0);switch(TF(d.type)){case 4:case 1048576:if(sF){a.b=!0;break}if(!c&&b.V){b.Ge(!0);break}break;case 8:case 64:case 1:case 2:case 4194304:if(sF){a.b=!0;break}break;case 2048:d=d.srcElement,b.db&&!c&&d&&(d.blur&&d!=$doc.body&&d.blur(),a.a=!0)}}};_.a=null;function DI(a){this.a=a}\nw(418,1,{},DI);_.a=null;function hH(){hH=x;iH=new EI(0);pH=new EI(1);rH=new EI(2);FI=y(Zba,q,46,[iH,pH,rH])}function EI(a){this.b=a}w(419,194,{46:1,88:1,93:1,95:1},EI);var FI,iH,pH,rH;function GI(a){a.j?a.a.bb&&($doc.body.appendChild(a.a.Z),HI(a.a.Z),a.f=IF(a.a.$),BI(),a.b=!0):a.b&&($doc.body.removeChild(a.a.Z),II(a.a.Z),JI(a.f.a),a.f=null,a.b=!1)}function KI(a){a.j||(GI(a),a.c||(yG(),QG(LI(null),a.a)),II(a.a.pb));a.a.pb.style[uo]=taa;a.a.pb.style[xs]=du}\nfunction MI(a,b){var c,d,e,f,g,h;a.j||(b=1-b);c=f=e=g=0;d=iA(b*a.d);h=iA(b*a.e);switch(a.a.U.b){case 2:f=a.e;c=d;break;case 0:g=a.d-d>>1;e=a.e-h>>1;f=e+h;c=g+d;break;case 1:VD(),f=h,c=d}a.a.pb.style[uo]=saa+g+Ns+f+Ns+c+Ns+e+eaa}\nfunction bH(a,b,c){a.c=c;Pv(a);a.i&&(Rv(a.i),a.i=null,KI(a));a.a.hb=b;var d=a.a;d.eb&&(JI(d.eb.a),d.eb=null);d._&&(JI(d._.a),d._=null);if(d.hb){d.eb=tF(new CI(d));var e;e=new DI(d);AF();e=BF?xD(BF.c,(!wD&&(wD=new jw),wD),e):null;d._=e}c=!c&&a.a.ab;a.a.U!=(hH(),iH)&&!b&&(c=!1);a.j=b;c?b?(GI(a),a.a.pb.style[Gs]=bn,-1!=a.a.ib&&a.a.He(a.a.cb,a.a.ib),a.a.pb.style[uo]=Ws,yG(),b=LI(null),HG(b,a.a,b.pb),HI(a.a.pb),a.i=new NI(a),Xv(a.i,1)):Sv(a,200):(GI(a),a.j?(a.a.pb.style[Gs]=bn,-1!=a.a.ib&&a.a.He(a.a.cb,\na.a.ib),yG(),b=LI(null),HG(b,a.a,b.pb),HI(a.a.pb)):(a.c||(yG(),QG(LI(null),a.a)),II(a.a.pb)),a.a.pb.style[xs]=du)}function jH(a){var b=(Zv(),$v);this.k=new Yv(this);this.s=b;this.a=a}w(420,58,{},jH);_.rd=function(){KI(this)};_.sd=function(){this.d=Yz(this.a.pb,Vr);this.e=Yz(this.a.pb,Wr);this.a.pb.style[xs]=dq;MI(this,(1+Math.cos(3.141592653589793))/2)};_.td=function(a){MI(this,a)};_.a=null;_.b=!1;_.c=!1;_.d=0;_.e=-1;_.f=null;_.i=null;_.j=!1;function NI(a){dw();this.a=a}w(421,65,{},NI);\n_.vd=function(){this.a.i=null;Sv(this.a,200)};_.a=null;function pF(){pF=x;$ba()}function qF(a){return a.__gwt_resolve?a.__gwt_resolve():a}function $ba(){function a(){}a.prototype={className:m,clientHeight:0,clientWidth:0,dir:m,getAttribute:function(a){return this[a]},href:m,id:m,lang:m,nodeType:1,removeAttribute:function(a){this[a]=void 0},setAttribute:function(a,c){this[a]=c},src:m,style:{},title:m};$wnd.GwtPotentialElementShim=a}function yG(){yG=x;OI=new PI;QI=new Ky;zG=new GD}\nfunction RI(a){this.p=new VG(this);this.pb=a;tG(this)}function LI(a){yG();var b,c;c=PD(QI,a);b=null;if(null!=a&&!(b=$doc.getElementById(a)))return null;if(c&&(!b||c.pb==b))return c;if(0==QI.d){var d=new SI;gw();hw(iw?iw:iw=new jw,d);VD()}!b?c=new TI:c=new RI(b);D(QI,a,c);HD(zG,c);return c}w(423,362,Su,RI);var OI,QI,zG;function PI(){}w(424,1,{},PI);_.Je=function(a){a.qe()&&a.se()};function SI(){}w(425,1,{},SI);_.Od=function(){yG();try{DG(zG,OI)}finally{UI(zG.a),UI(QI)}};\nfunction TI(){RI.call(this,$doc.body)}w(426,423,Su,TI);_.Be=function(a,b,c){b-=qA();c-=rA();TG(a,b,c)};function $G(a){this.c=a;this.a=!!this.c.jb}w(427,1,{},$G);_.Vd=ZE;_.Wd=function(){if(!this.a||!this.c.jb)throw new NG;this.a=!1;return this.b=this.c.jb};_.Xd=function(){this.b&&this.c.ve(this.b)};_.b=null;_.c=null;function VI(a,b){a.pb[au]=null!=b?b:m}w(430,380,Ku);_.Yd=function(a){0!=(TF(a.type)&896)?vG(this,a):vG(this,a)};_.te=BG;function WI(){WI=x;XI()}w(429,430,Ku);\nfunction YI(){WI();var a=aA(Gt);!nF&&(nF=new mF);!lF&&(lF=new kF);this.pb=a;VD();this.pb[no]=Yp}w(431,429,Ku,YI);function XI(){XI=x;ZI=new $I;aJ=new bJ;cJ=new dJ;eJ=new fJ;gJ=y(aca,q,49,[ZI,aJ,cJ,eJ])}w(432,194,Mu);var gJ,ZI,aJ,cJ,eJ;function $I(){this.b=0}w(433,432,Mu,$I);function bJ(){this.b=1}w(434,432,Mu,bJ);function dJ(){this.b=2}w(435,432,Mu,dJ);function fJ(){this.b=3}w(436,432,Mu,fJ);function MG(a,b){var c;for(c=0;cc||c>a.c)throw new KG;if(a.c==a.a.length){e=C(hJ,q,50,2*a.a.length,0);for(d=0;dc;--d)vz(a.a,d,a.a[d-1]);vz(a.a,c,b)}function VG(a){this.b=a;this.a=C(hJ,q,50,4,0)}w(438,1,{},VG);_.ye=function(){return new OG(this)};_.a=null;_.b=null;_.c=0;function iJ(a){if(a.a>=a.b.c)throw new NG;return a.b.a[++a.a]}function jJ(a){if(0>a.a||a.a>=a.b.c)throw new kJ;a.b.b.ve(a.b.a[a.a--])}function OG(a){this.b=a}w(439,1,{},OG);\n_.Vd=function(){return this.aa)throw new kw(Hj);this.e=a;this.a=2;this.c=0;this.d=10;this.b=0}w(467,1,{55:1},yK);_.eQ=function(a){return a===this?!0:H(a,55)?a.e==this.e&&a.a==this.a&&a.c==this.c&&a.d==this.d&&a.b==this.b:!1};\n_.hC=function(){var a;a=new zK;a.a=31*a.a+iA((new AK(this.e)).a);a.a=31*a.a+this.a;a.a=31*a.a+this.c;a.a=31*a.a+iA((new AK(this.d)).a);return a.a};_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;function BK(){BK=x;CK=DK=new zv(255,255,255);EK=new zv(192,192,192);FK=new zv(128,128,128);GK=new zv(64,64,64);HK=IK=new zv(0,0,0);JK=KK=new zv(255,0,0);new zv(255,175,175);LK=new zv(255,200,0);MK=new zv(255,255,0);new zv(0,255,0);NK=new zv(255,0,255);OK=new zv(0,255,255);PK=QK=new zv(0,0,255)}\nfunction RK(a){var b,c;c=a.d>>16&255;b=a.d&255;a=a.d>>8&255;if(0==c&&0==b&&0==a)return new zv(3,3,3);3>c&&0!=c?c=3:(c=iA(c/0.7),c=255b&&0!=b?b=3:(b=iA(b/0.7),b=255a&&0!=a?a=3:(a=iA(a/0.7),a=255>16&255)),iA(0.7*(a.d>>8&255)),iA(0.7*(a.d&255)))}function TK(a,b){return H(b,58)?b.d==a.d:!1}function zv(a,b,c){BK();if((a&255)!=a||(b&255)!=b||(c&255)!=c)throw new kw(ih);this.d=c|b<<8|a<<16|-16777216}\nw(473,1,{58:1,67:1,70:1},zv);_.eQ=function(a){return TK(this,a)};_.hC=UK;_.tS=function(){return VK.d+"[r="+(this.d>>16&255)+",g="+(this.d>>8&255)+",b="+(this.d&255)+Lm};_.a=0;_.b=null;_.c=null;_.d=0;var HK,PK,JK,CK,IK,QK,OK,GK,FK,EK,NK,LK,KK,DK,MK;function QJ(){QJ=x;RJ=new WK(!0);XK=new GD;HD(XK,tn);HD(XK,op);HD(XK,yq);HD(XK,aba)}function WK(a){this.a=a}w(474,1,ov,WK);_.a=!1;var RJ,XK;w(478,1,{76:1,92:1});function YK(){HJ.call(this,0,0)}function HJ(a,b){this.b=a;this.a=b}\nfunction JJ(a){HJ.call(this,a.b,a.a)}w(477,478,{61:1,76:1,88:1,92:1},YK,HJ,JJ);_.eQ=function(a){return a===this?!0:H(a,61)?a.b==this.b&&a.a==this.a:!1};_.hC=function(){var a;a=new zK;a.a=31*a.a+this.b;a.a=31*a.a+this.a;return a.a};_.tS=function(){return ZK.d+"[width="+this.b+",height="+this.a+Lm};_.a=0;_.b=0;function vC(a,b,c){this.f=a;this.c=b;this.e=this.d=this.j=this.i=0;this.b=c}w(479,1,ov,vC,function(a,b,c,d){this.f=a;this.c=b;this.j=this.i=0;this.d=c;this.e=d;this.b=null});\n_.tf=function(){return 0!=(this.e&4)};_.uf=function(){return 0!=(this.e&1)};_.tS=function(){var a;return this.cZ.d+"[id="+this.c+",x="+this.i+",y="+this.j+(0!=this.d?",key="+this.d+(a=m,this.uf()&&(a+=",shift"),0!=(this.e&2)&&(a+=",control"),this.tf()&&(a+=",meta"),a):m)+",target="+this.f+(null!=this.b?",arg="+this.b:m)+Lm};_.b=null;_.c=0;_.d=0;_.e=0;_.f=null;_.i=0;_.j=0;function $K(a){var b,c;for(c=b=0;cb.b&&(aL(this,l,b.b-(n-this.c),g.b,o,j,h),l.qg(),n=f,o+=j+this.d,j=0),e=!1,vz(l.b,l.c++,c),n+=a.b+this.c,j=nw(j,a.a);aL(this,l,b.b-(n-this.c),g.b,o,\nj,h)}};_.qf=function(a){this.b=fL(a.Fc);return 0==$K(this)?XJ(a,new HJ(10,10)):XJ(a,cL(this,!1))};_.rf=function(a){this.b=fL(a.Fc);return 0==$K(this)?XJ(a,new HJ(10,10)):XJ(a,cL(this,!0))};_.sf=cG;_.tS=function(){var a;switch(this.a){case 0:a=Rq;break;case 2:a=at;break;case 1:a=fo;break;case 4:a="trailing";break;default:a="leading"}return cca.d+"[hgap="+this.c+",vgap="+this.d+",align="+a+Lm};_.a=0;_.b=null;_.c=0;_.d=0;function iL(){iL=x;jL=new kL(Fh,0,12)}\nfunction kL(a,b,c){iL();this.a=null!=a?a:Bh;this.b=0<=c?c:0;this.c=0==(b&-4)?b:0}w(481,1,{62:1,88:1},kL);_.a=null;_.b=0;_.c=0;var jL;w(482,1,Ou);_.tS=function(){return dca.d+"[font="+this.b+"ascent="+lL(mL,this.b).a+", descent="+lL(mL,this.b).b+", height="+lL(mL,this.b).c+Lm};_.b=null;w(484,1,{});_.tS=function(){return"Graphics"};w(485,484,{});function kJ(){}function uG(a){this.f=a}w(488,136,bv,kJ,uG);function DJ(){this.f=Ij}w(487,488,bv,DJ);w(489,1,{});\nfunction TJ(a,b,c,d){this.d=a;this.b=b;this.a=c;this.c=d}w(490,1,{64:1,88:1,92:1},TJ);_.eQ=function(a){return a===this?!0:H(a,64)?a.b==this.b&&a.a==this.a&&a.c==this.c&&a.d==this.d:!1};_.hC=function(){var a;a=31+this.d;a=31*a+this.b;a=31*a+this.a;return a=31*a+this.c};_.tS=function(){return eca.d+"[left="+this.b+",top="+this.d+",right="+this.c+",bottom="+this.a+Lm};_.a=0;_.b=0;_.c=0;_.d=0;w(494,1,ov);_.cf=function(){return this.j};_.tS=WJ;_.j=null;_.k=null;\nfunction nL(a){var b;b=a.j+Xd+a.f;a.e||(b+=Rd);null!=a.c&&(b+=Qd+a.c);return b}function oL(a,b){a.e=b;yI(a.i.a,b)}function pL(a){this.n=(NJ(),NJ(),OJ);var b;var c;b=this.cZ.d;-1!=jG(b,kG(36))?b=null:(c=this.n.b.d++,b=mG(b,xJ(b,kG(46))+1)+m+c);this.j=b;this.d=new wK;this.f=a;this.e=!0;this.i=new qL(this)}w(493,494,ov,pL);_.cf=function(){return nL(this)};_.c=null;_.e=!1;_.f=null;_.i=null;w(492,493,Hu);_.cf=function(){return nL(this)+(this.b?",tearOff":m)};_.b=!1;w(496,1,{77:1});\n_.eQ=function(a){return a===this?!0:H(a,77)?this.vf()==a.vf()&&this.wf()==a.wf():!1};_.hC=function(){var a;a=new zK;rL(a,this.vf());rL(a,this.wf());return a.a};function CJ(){this.b=this.a=0}function sL(a,b){this.a=a;this.b=b}w(495,496,{68:1,77:1,88:1},CJ,sL);_.eQ=function(a){return a===this?!0:H(a,68)?this.a==a.a&&this.b==a.b:!1};_.vf=ZE;_.wf=wH;_.tS=function(){return fca.d+"[x="+this.a+",y="+this.b+Lm};_.a=0;_.b=0;\nfunction tL(a,b){if(!b)throw new yD(Jj);var c=a.a;if(J(b.f,Zd)){var c=c.a.a,d=new AI,e=c.c.c;if(0>e||e>c.c.c)throw new KG;c.o&&(d.pb[xo]=2);dI(c,e,d.pb);uL(c.c,e,d)}else{var d=c.a.a,c=b.i.a,e=d.c.c,f,g;if(0>e||e>d.c.c)throw new KG;uL(d.c,e,c);for(f=g=0;f=this.k?0!=(this.j&16)?(this.d=1,501==this.k&&(this.j|=1024)):0!=(this.j&8)?(this.d=2,501==this.k&&(this.j|=2048)):0!=(this.j&4)&&(this.d=3,501==this.k&&(this.j|=4096)):(0!=(this.j&16)&&(this.j|=1024),0!=(this.j&8)&&(this.j|=\n2048),0!=(this.j&4)&&(this.j|=4096));else if(0!=(this.j&16320))if(this.j&=-64,0!=(this.j&64)&&(this.j|=1),0!=(this.j&128)&&(this.j|=2),0!=(this.j&256)&&(this.j|=4),0!=(this.j&512)&&(this.j|=8),0!=(this.j&8192)&&(this.j|=32),500<=this.k&&502>=this.k)switch(this.d){case 1:this.j|=16;break;case 2:this.j|=8;break;case 3:this.j|=4}else 0!=(this.j&1024)&&(this.j|=16),0!=(this.j&2048)&&(this.j|=8),0!=(this.j&4096)&&(this.j|=4);this.b=0;this.a=1;this.c=d}w(520,519,ov,YC);\n_.cf=function(){var a,b;a=bM(this);switch(this.b){case 0:b="WHEEL_UNIT_SCROLL";break;case 1:b="WHEEL_BLOCK_SCROLL";break;default:b=Zt}return a+=",scrollType="+b+",scrollAmount="+this.a+",wheelRotation="+this.c};_.a=0;_.b=0;_.c=0;w(529,1,{});function XL(a){if(null==a)throw new dM;}w(530,529,{},XL);\nfunction eM(){eM=x;fM={};fM[Eq]=Lp;fM[As]=Wt;fM[Qaa]=Oj;fM[Raa]=Lp;fM[ss]=Oj;fM[wb]=Oj;fM[Ds]=Oj;fM[Hq]=Lp;fM[Bq]=Oj;fM[hq]=Oj;fM[fba]=Oj;fM[eba]=Oj;fM[ts]=Oj;fM[Zn]=Oj;fM[Fq]=Oj;fM[gba]=Oj;fM[Aq]=Oj;fM[Cq]=hi;fM[Dq]=ff;fM[Gq]=Qi;!$C&&($C=new hD);$C.a?fM[wq]=nba:fM[wq]=null}var fM;w(534,137,pv);function gM(){}function hM(a){this.f=a}w(533,534,{82:1,88:1,96:1,105:1},gM,hM);function iM(){iM=x;jM=new kM}\nfunction lM(a){iM();var b,c,d;if(null==a)throw new gM;a=lG(a);try{d=jG(a,kG(58))}catch(e){e=Dz(e);if(H(e,100))throw new hM(Py(e));throw e;}c=jG(a,kG(91));if(0<=d&&(-1==c||d=b||65<=b&&90>=b;for(c=1;b&&c=b||65<=b&&90>=b||48<=b&&57>=b||43==b||45==b||46==b;if(b){c=this.f;mM();var f,g,h;h=c.length;b=new nM;for(g=0;g=f?oM(b,f+32&65535):Uz(b.a,String.fromCharCode(f));\nthis.f=Xz(b.a)}else this.f=null,d=-1}if(null==this.f)throw new hM(ui+a);if(!this.k&&(this.k=PD(jM,this.f),this.k||(this.k=(NJ(),new pM))&&D(jM,this.f,this.k),!this.k))throw new hM(ui+a);try{c=a;var j=++d,l=a.length,n,o,r,t,z,v,E,s,F,P,M,$,da,Z,ca,Hb,aa,sb,Mb,K,Ja;if(ll){if(-2147483647>=l&&(j>=c.length||0>j)||!(0>j||j>=c.length)&&c.indexOf(Te,j)==j&&-1==qM(c,kG(47),j+2))throw new rM(l);}else{M=c.substr(j,l-j);l-=j;v=0;E=this.c;$=this.e;sb=this.j;t=this.d;ca=this.i;n=this.a;Ja=this.n;Mb=qM(M,\nkG(35),0);if(0==M.indexOf(Te)&&0!=M.indexOf(Ue)){F=2;$=-1;v=qM(M,kG(47),2);aa=qM(M,kG(63),2);-1!=aa&&(-1==v||v>aa)&&(v=aa);-1==v&&(v=l,t=m);s=v;-1!=Mb&&Mbr+1?(o=M.charCodeAt(r+1),58==o?da=r+1:da=-1):da=-1}catch(Ub){if(Ub=Dz(Ub),!H(Ub,96))throw Ub;}-1==da||da>v?E=M.substr(F,s-F):(E=M.substr(F,da-F),Z=M.substr(da+1,s-(da+1)),0==Z.length?$=-1:\n$=sM(Z,10))}-1v&&(null==t?t=m:J(t,m)?t=Se:t.indexOf(Se),P=xJ(t,kG(47))+1,0==P?t=M.substr(v,z-v):t=t.substr(0,P-0)+M.substr(v,z-v)));null==t&&(t=m);null==E&&(E=m);d=E;var N;N=t;null!=ca&&!J(ca,m)&&(null!=t?N=t+Xf+ca:N=Xf+ca);null==\nthis.f&&(this.f=this.f);this.c=d;this.b=N;this.e=$;this.j=sb;var za;null!=this.c&&0this.e)throw new hM(tq+this.e);\n}w(535,1,ov,lM);_.tS=function(){return!this.k?Yt+this.f+ud+this.c+this.b:tM(this)};_.a=null;_.b=null;_.c=null;_.d=null;_.e=-1;_.f=null;_.i=null;_.j=null;_.k=null;_.n=null;var jM;function tM(a){var b,c;b=new VE;Oy(b,a.f);Uz(b.a,zf);c=a.a;null!=c&&0=a.i)break;c=HM(a,c);++b}return b}function IM(a,b){var c;for(c=0;c=a.i)throw new EM;b=a.a;a.a=HM(a,a.a);return cM(a.n,b,a.a)}function HM(a,b){var c,d;for(d=b;da.f||!IM(a,c))break;d+=65536<=c?2:1}else{c=a.n.charCodeAt(d);if(c>a.f||0>jG(a.c,kG(c)))break;++d}return d}function LM(a){MM.call(this,a,ha,!1)}function NM(a){MM.call(this,a,Jd,!1)}\nfunction MM(a,b,c){this.a=0;this.j=-1;this.d=!1;this.n=a;this.i=a.length;this.c=b;this.k=c;var d;if(null==this.c)this.f=0;else{for(c=b=d=0;c=a&&(a=KM(this.c,c,this.c.length),this.e=!0),d=a;++a)0=a;++a)b=kk,33=j||b>a.Sb||c>a.Sb))){l=C(VN,jv,-1,99,1);h=o=n=0;for(g=b;g<=c;++g)f=WN(a.zb[g]),n+=f.c,o+=f.d,f.d>h&&(h=f.d),l[g]=f.c,2==d&&(l[g]=f.d);a.J&&(n+=25*(j+1),o+=25*(j+1),h+=25);j=g=1;a.J?r=XN(a):r=YN(a);f=iA(r.b);r=iA(r.a);1==d||3==d?f=~~((f-48)/2):2==d&&(r=~~(r/2));n>=f&&(g=f/n);h>=r&&(j=r/h);h=0;a.J&&(a.xb=gd)switch(jO(b,(BK(),IK)),f){case 101:jO(b,MK);nO(b,j+3,g+3,a.mb-6,a.mb-6);jO(b,IK);e=g+3;h=a.mb-6;c=\na.mb-6;d=b.a;f=Q(L(R((j+3)*S)));e=Q(L(R(e*S)));h=Q(L(R(h*S)));c=Q(L(R(c*S)));d.o&&(oO(d,!1),pO(d,qO(d,f,e,h,c)));rO(b,j+6,g+6,a.mb-12,a.mb-12);sO(b.a,Q(L(R((j+9)*(tO(),S)))),Q(L(R((g+9)*S))),Q(L(R(2*S))),Q(L(R(4*S))));kO(b,j+a.mb-10,g+9,2,4);0.04>Math.random()&&(jO(b,KK),sO(b.a,Q(L(R((j+10)*S))),Q(L(R((g+18)*S))),Q(L(R(4*S))),Q(L(R(4*S)))));0.96=e;++e)if(bn&&(jO(g,(kN(),sN)[n]),nO(g,f.b[s].q-12,f.b[s].r-12,24,24));for(s=1;s<=f.q;++s)l=f.c[s].i,o=f.c[s].j,0!=f.b[l].c&&\nf.b[l].c==f.b[o].c&&(jO(g,(kN(),sN)[f.b[l].c]),v=f.b[o].q-f.b[l].q,h=f.b[o].r-f.b[l].r,z=Math.sqrt(v*v+h*h),1>z&&(z=1),h/=z,z=v/z,v=9*h,t=9*z,n=MO(4),r=MO(4),n[0]=f.b[l].q+v,r[0]=f.b[l].r-t,n[1]=f.b[o].q+v,r[1]=f.b[o].r-t,n[2]=f.b[o].q-v,r[2]=f.b[o].r+t,n[3]=f.b[l].q-v,r[3]=f.b[l].r+t,yO(g,n,r,4))}for(s=1;s<=f.q;++s){jO(g,(BK(),HK));t=f.c[s];l=t.i;o=t.j;1==f.i&&0!=f.b[l].c&&f.b[l].c==f.b[o].c&&jO(g,(kN(),sN)[f.b[l].c]);if(3==t.f||4==t.f)n=l,l=o,o=n;n=f.b[l].q;r=f.b[l].r;M=f.b[o].q;P=f.b[o].r;if(1!=\nt.c||0!=t.f)v=M-n,h=P-r,z=Math.sqrt(v*v+h*h),1>z&&(z=1),h/=z,z=v/z;switch(t.c){case 2:10<=t.f&&jO(g,NK);v=2*h;t=2*z;vO(g.a,Q(L(R((n+v)*(tO(),S)))),Q(L(R((r-t)*S))),Q(L(R((M+v)*S))),Q(L(R((P-t)*S))));vO(g.a,Q(L(R((n-v)*S))),Q(L(R((r+t)*S))),Q(L(R((M-v)*S))),Q(L(R((P+t)*S))));jO(g,IK);break;case 3:vO(g.a,Q(L(R(n*(tO(),S)))),Q(L(R(r*S))),Q(L(R(M*S))),Q(L(R(P*S))));l=3*h;o=3*z;vO(g.a,Q(L(R((n+l)*S))),Q(L(R((r-o)*S))),Q(L(R((M+l)*S))),Q(L(R((P-o)*S))));vO(g.a,Q(L(R((n-l)*S))),Q(L(R((r+o)*S))),Q(L(R((M-\nl)*S))),Q(L(R((P+o)*S))));break;case 9:case 0:for(o=0;10>o;++o)l=n-(n-M)/10*o,E=r-(r-P)/10*o,vO(g.a,Q(L(R(l*(tO(),S)))),Q(L(R(E*S))),Q(L(R(l*S))),Q(L(R(E*S))));NO(g,f.k.v);o=OO(f.k.w);t=t.d;l=Xf;null!=t&&(l=t);t=EL(f.k.w,l);t=(n+M)/2-t/2;P=(r+P)/2+~~(o/2)-1;jO(g,NK);PO(g.a,l,Q(L(R(t*(tO(),S)))),Q(L(R(P*S))));jO(g,IK);break;default:if(1==t.f||3==t.f)v=3*h,t=3*z,E=MO(3),j=MO(3),E[0]=M+v,j[0]=P-t,E[1]=n,j[1]=r,E[2]=M-v,j[2]=P+t,yO(g,E,j,3);else if(2==t.f||4==t.f){v=3*h;t=3*z;for(o=0;10>o;++o)l=n-(n-\nM)/10*o,E=r-(r-P)/10*o,j=o/10,vO(g.a,Q(L(R((l+v*j)*(tO(),S)))),Q(L(R((E-t*j)*S))),Q(L(R((l-v*j)*S))),Q(L(R((E+t*j)*S))))}else vO(g.a,Q(L(R(n*(tO(),S)))),Q(L(R(r*S))),Q(L(R(M*S))),Q(L(R(P*S))))}}z=MO(f.p+1);h=MO(f.p+1);for(s=1;s<=f.q;++s)l=f.c[s].i,o=f.c[s].j,n=f.b[l].q,r=f.b[o].q,++h[l],++h[o],z[l]=z[l]/h[l]+r/h[l],z[o]=z[o]/h[o]+n/h[o];NO(g,f.k.v);o=OO(f.k.w);M=MO(f.p+1);r=MO(f.p+1);n=C(nca,q,120,f.p+1,0);for(s=1;s<=f.p;++s)l=QO(f,s),(null==l||1>l.length)&&(l=Dd),j=f.b[s],3==f.b[s].a&&0SO(z[s]-f.b[s].q)&&(v=!1),2SO(z[s]-f.b[s].q)&&(P=!0),t=l,E=m,f.k.oc&&(F=f.b[s].i,0z&&(z=1),h/=z,z=v/z,v=4*h,t=4*z,E=MO(5),j=MO(5),E[0]=f.b[l].q+v,E[1]=f.b[o].q+v,j[0]=f.b[l].r-t,j[1]=f.b[o].r-t,E[3]=f.b[l].q-v,E[2]=f.b[o].q-v,j[3]=f.b[l].r+t,j[2]=f.b[o].r+t,E[4]=E[0],j[4]=j[0],106!=f.k.k&&VO(g,E,j,5),106==f.k.k&&WO(f,f.c[f.w].i,f.c[f.w].j))){h=0;for(s=1;s<=f.p;++s)0~~(f.p/2))for(s=1;s<=f.p;++s)0e;++e)if(d=a.zb[e])0b&&(b=c);return b}\nfunction gP(a,b,c,d){var e=tN?350:170,f,g,h,j;hP(d);b=iP(a,b);c=iP(a,c);h=e;for(g=1;g<=a.Sb;++g){j=new jP(e);f=a.zb[g];for(var l=b,n=c,o=j,r=void 0,t=void 0,z=void 0,v=void 0,E=r=r=r=v=r=void 0,s=void 0,F=void 0,P=t=z=r=r=void 0,M=void 0,$=void 0,E=0,F=o.a,s=1;s<=f.q;++s)r=kP(l,n,f.c[s].a,f.c[s].b),rz+F||(r=M*r+$*v,0>r||(z=Math.sqrt(z),t=Math.sqrt(t),r/=z*t,1<=r||(r=1.5707963267948966-Math.acos(r),r=t*Math.cos(r),r*=r,r=a.yb||0>=a.ub)&&(!a.M&&(a.M=kK(a)),lP(a,a.M));b=new mP;b.b=a.yb;b.a=a.ub;return b}function YN(a){var b;b=XN(a);b.b/=a.xb;b.a/=a.xb;return b}function IO(a,b){a.b.a.a=b/S;return a.b}\nfunction nP(a,b,c,d){var e,f;if(!b||oP(b)){if((e=0=e;++e)b=MP(h,d);e=rP(sM(lG(b.substr(0,3)),10)).a;g=rP(sM(lG(b.substr(3,3)),10)).a;MP(h,d);for(b=1;b<=e+g;++b){for(f=m;!(j=MP(h,d),null==j||J(j,fc));)f+=j+d;a.zb[++a.Sb]=new NP(a,f)}a.xb=1;UN(a,1,e,1,!1);UN(a,e+1,e+g,3,!1);d=qaa}else{(a.J||a.Vb)&&(a.dc=!1);a.ob=new NP(a,b);if(!a.ob||0==a.ob.p)return!a.ob&&(wC(a,Lh),a.bf(a.Ec.d)),!!a.ob;d=(a.dc||a.Fb)&&a.p||a.Mb;null!=a.t&&\na.ob&&OP(a.ob,a.t,!0);null!=a.u&&a.ob&&OP(a.ob,a.u,!1);d||(a.Sb=0,a.xb=1);h=PP(a.ob);if(1>=h||a.J)a.zb[++a.Sb]=a.ob;else{a.Fb=!0;for(b=1;b<=h;++b)a.zb[++a.Sb]=new QP(a,a.ob,b)}d?a.o=a.Sb:a.o=1;a.ob=a.zb[a.o];a.J?UN(a,1,1,0,!0):UN(a,1,h,0,!d);d=Us}RP(a);null!=d&&(xP(a.r,gg),a.r&&dO(fz(a.r,d),0,0,0),a.hc=!0);a.Ib=!0;c&&a.bf(a.Ec.d);return!0}function wC(a,b){null==b&&(b=m);a.Gb=!0;a.X=b;a.gg(uq+b)}\nfunction LO(a,b){var c;c=Math.round(b);100>c&&(!uN[c]&&(uN[c]=new kL(mi,0,c)),!vN[c]&&vz(vN,c,zJ(uN[c])),a.v=uN[c],a.w=vN[c])}function oP(a){var b;if(!a)return!1;b=a.tf();a=0!=(a.e&2);return b||a}function XO(a,b){return(a.mb+(a.Lb?1:0))*b}function CO(a,b){var c,d;d=-1;for(c=0;c=b)switch(a.Kb=!0,a.Hb=!0,wC(a,m),b){case 102:bO(a,!0);uP(a,102);tP(a,102);d=!0;break;case 110:a.Ib=!0;a.k=c;a.pb.a!=a.pb.b&&a.pb.a.b!=a.pb.b?a.q&&(++a.Sb,a.o=a.Sb,a.q=!1):wC(a,Wj);if(!(a.pb.a!=a.pb.b&&a.pb.a.b!=a.pb.b))break;SP(a,TP(a.pb));a.r&&dO(fz(a.r,Xt),0,0,0);a.hc=!0;a.hc=!1;a.Ib=!0;break;case 111:a.k=c;if(a.pb.a.c)a.q&&(++a.Sb,a.o=a.Sb,a.q=!1);else{wC(a,Vj);break}if(!a.pb.a.c)break;e=a.pb;if(!e.a.c)throw new uG(Mg);\nif(!e.a.c)throw new uG(yi);e.a=e.a.c;SP(a,e.a.a);a.r&&dO(fz(a.r,Xs),0,0,0);a.hc=!0;a.hc=!1;a.Ib=!0;break;case 214:nP(a,null,a.R.a,a.R.b);a.k=c;break;case 151:case 152:case 154:case 153:e=null;a.k=c;switch(b){case 152:e=UP(a.jc);break;case 151:e=VP(a.jc);break;case 154:e=a.jc;e.a=e.c;e=UP(e);break;case 153:e=a.jc,e.a=-1,e=VP(e)}null==e?wC(a,Uj):(eO(a),a.Vb=!0,WP(a,e,!1),a.Vb=!1,J(a.X,m)&&(wC(a,rj+(a.jc.a+1)+jb+a.jc.c),d=!0,a.r&&dO(fz(a.r,tk),0,0,0),a.hc=!0,a.hc=!1));break;case 101:yz(4,new XP(a));\na.k=c;break;case 107:yz(2,new YP(a));break;case 114:yz(3,new ZP(a));a.k=c;break;case 103:a.Mb=!0;a.k=c;break;case 105:a.A&&a.Bb&&(a.Bb=!1,$P(a.ob),a.Ib=!0,a.r&&dO(fz(a.r,Hn),0,0,0),d=a.hc=!0,a.k=c);a.I=1;break;case 109:a.k=c;e=aQ(a.ob);if(2==e){wC(a,uh);break}d=WN(a.ob);a.Ib=!0;a.ob=new zN(a.ob);d=iA((a.M.b-a.mb)/2-d.a);for(e=1;e<=a.ob.p;++e)$N(a.ob.b[e],2*d/a.xb,0/a.xb);a.zb[++a.Sb]=a.ob;a.o=a.Sb;a.r&&dO(fz(a.r,oaa),0,0,0);d=a.hc=!0;uP(a,109);tP(a,109);break;case 104:d=AN(a);break;case 213:a.k=c;\nif(!a.S){var f,g,h,j,l;l=new vL;for(f=a.U,g=0,h=f.length;g=b&&(a.n=33+(b-1301)),0=a.k)a.cb=2,fQ(a.ob),d=!0,PN(a,kn,a.o,0,a.ob.w);else if(202==a.k||203==a.k||204==a.k)if(0=g;++g){f=0;for(c=1;c<=a.Sb;++c)aQ(a.zb[c])==g&&(h[g][++f]=c);h[g][0]=f}e+=rc;e+=iQ(h[1][0],3)+iQ(h[3][0],3)+ba;for(c=1;c<=h[1][0];++c)e+=gc+jQ(a.zb[h[1][c]],d,b);for(c=1;c<=h[3][0];++c)e+=gc+jQ(a.zb[h[3][c]],d,b)}else{1f&&(f=e.b[b].r),e.b[b].qb;++b)vz(g.b,g.c++,null),vz(f.b,f.c++,null);for(b=1;b<=e.p;++b)j=e.b[b].b,null==j||0==j.length||(J(j,an)?Wv(c,new rK(b)):0==j.indexOf(tr)?(j=sM(mG(j,3),10),l=null,f.c>j&&(l=(bL(j,f.c),f.b[j])),null==l?h=new bw:h=l,Wv(h,new rK(b)),hL(f,j,h)):0==j.indexOf(qs)&&(j=sM(mG(j,2),10),l=null,g.c>j&&(l=(bL(j,g.c),g.b[j])),null==l?h=new bw:h=l,Wv(h,new rK(b)),hL(g,j,h)));d+=oQ(nj,c);if(0a.M.a-Q(L(R(a.mb*a.nb))))return!1;var b=\na.Cc,f=a.Dc,g,h,j,l;l=0;if(0>b||0>f||f>a.ub||b>a.yb)b=0;else if(1==a.Sb)b=a.o;else{b=iP(a,b);f=iP(a,f);j=1.7976931348623157E308;for(h=1;h<=a.Sb;++h){g=a.zb[h];for(var n=void 0,o=void 0,r=void 0,o=1.7976931348623157E308,n=1;n<=g.p;++n)r=kP(b,f,g.b[n].q,g.b[n].r),r=a.k)a.cb=2,fQ(a.ob),CN(a,jn,a.ob.v);else if(230==a.k)a.cb=3,CN(a,ln,a.ob.v);else if(233<=a.k&&262>a.k)sQ(a.ob,!1),\nCN(a,gn,a.ob.v),a.cb=3;else if(107==a.k){if(a.bc.b)return!0;eQ(a.ob,a.ob.v,Zz(a.bc.e.Tc.a.pb,au));a.ob.j=!0;CN(a,dn,a.ob.v)}else if(105==a.k)(c=tQ(a.ob))?CN(a,hr,a.ob.v):CN(a,Waa,a.ob.v);else if(113!=a.k)if(300c.length&&(c=dl),eQ(a.ob,a.ob.v,c)),CN(a,qt+a.n,a.ob.v)}else e=!1}else if(0d&&(d=b);if(0==d)break;BN(c,d);c.a[d]=0}EN(a.ob);PN(a,Po,a.o,0,a.ob.w);a.ob.w=0}else if(201==a.k)uQ(a.ob,a.ob.w),PN(a,Iaa,a.o,0,a.ob.w);else if(202==a.k||205==a.k)1==a.ob.c[a.ob.w].c&&0==a.ob.c[a.ob.w].f?(a.ob.c[a.ob.w].c=2,PN(a,rt,a.o,0,a.ob.w)):(a.ob.c[a.ob.w].c=1,a.ob.c[a.ob.w].f=0,PN(a,st,a.o,0,a.ob.w)),a.ob.c[a.ob.w].f=0;else if(203==a.k)a.ob.c[a.ob.w].c=2,a.ob.c[a.ob.w].f=0,EN(a.ob),PN(a,\nrt,a.o,0,a.ob.w);else if(204==a.k)a.ob.c[a.ob.w].c=3,a.ob.c[a.ob.w].f=0,EN(a.ob),PN(a,tt,a.o,0,a.ob.w);else if(206<=a.k&&229>=a.k)a.cb=2,fQ(a.ob),PN(a,kn,a.o,0,a.ob.w),EN(a.ob);else if(107==a.k){if(!a.bc.b)return!0;c=Zz(a.bc.e.Tc.a.pb,au);a.ob.c[a.ob.w].c=9;a.ob.c[a.ob.w].d=c;PN(a,Jaa,a.o,0,a.ob.w)}else 105==a.k?(c=a.ob,b=a.ob.w,c.k.gb=!0,c.k.sc?(c.i=-1,d=c.c[b].i,b=c.c[b].j,f=c.b[d].c,h=c.b[b].c,j=4,f==h&&0=a.k)return!1;++a.Sb;a.o=a.Sb;a.zb[a.Sb]=new cO(a);a.ob=a.zb[a.Sb];a.eb.c=a.o;202<=a.k&&204>=a.k||205==a.k?(vQ(a.ob,null),a.ob.q=0,wQ(a.ob,1,c/a.xb,d/a.xb),a.ob.v=1,a.ob.x=1,a.cb=1,b=a.ob,gQ(b,b.v,0),205==a.k?(wQ(a.ob,2,(c+21.65)/a.xb,(d-12.5)/a.xb),a.ob.e[0]=1,a.ob.e[1]=2,a.ob.r=1,PN(a,fn,a.o,0,a.ob.w)):PN(a,en,a.o,0,a.ob.w)):206<=a.k&&229>=a.k?(a.ob.z=iP(a,c),a.ob.A=iP(a,d),a.cb=2,fQ(a.ob),a.r&&dO(fz(a.r,jn),0,0,0),a.hc=!0):300c.length&&(c=dl),eQ(a.ob,1,c)),CN(a,cn,a.ob.v)):230==a.k?(GP(a,null,!0),a.r&&dO(fz(a.r,ln),0,0,0),a.hc=!0):233<=a.k&&262>a.k?(vQ(a.ob,null),a.ob.q=0,wQ(a.ob,1,c/a.xb,d/a.xb),a.ob.v=1,sQ(a.ob,!0),a.r&&dO(fz(a.r,gn),0,0,0),a.hc=!0):eM()}else e=!1;e&&xQ(a)}return a.Ab=e}\nfunction yQ(a,b,c,d){var e,f,g,h;eM();if(!a.Db||zQ(b))return!0;a.Gb=!1;c-=Q(L(R(XO(a,a.nb))));d-=Q(L(R(YO(a,a.nb))));f=iP(a,c-a.Cc);g=iP(a,d-a.Dc);e=iP(a,c);h=iP(a,d);if(2==a.cb||3==a.cb||9==a.cb)return!0;if(1==a.cb){f=!1;a.zb[a.eb.c].v=0;--a.ob.p;g=c;var b=d,j=a.Nb;0>g||0>b||b>a.ub||g>a.yb?hP(j):gP(a,g,b,j);++a.ob.p;if(0g&&(g=1);b/=g;j/=g;n=g/2/Math.tan(0.5235987755982988);o=e-f.b[l].q;r=h-f.b[l].r;l=-g/2+o*j+r*b;b=r*j-o*b;if(0>l)if(1f.b[2].r-f.b[1].r&&0h-f.b[1].r&&\n(f.b[2].r=f.b[1].r-g/2),0>f.b[2].q-f.b[1].q&&0e-f.b[1].q&&(f.b[2].q=f.b[1].q-0.866*g);else{if(2==f.b[f.e[0]].j&&(n=f.b[f.e[0]].p[1],n==f.e[1]&&(n=f.b[f.e[0]].p[2]),j=f.b[f.e[0]].q-f.b[n].q,b=f.b[f.e[0]].r-f.b[n].r,g=Math.sqrt(j*j+b*b),1>g&&(g=1),b/=g,j/=g,o=e-f.b[n].q,r=h-f.b[n].r,e=r*j-o*b,o=f.b[f.e[1]].q-f.b[n].q,r=f.b[f.e[1]].r-f.b[n].r,h=r*j-o*b,0h||0>e&&0=b?0-b:b)>e){++f.r;if(100g&&(g=1),wQ(f,f.p,f.b[f.x].q+25*(j/g),f.b[f.x].r+25*(b/g))}a.B=!0}else if(113==a.k&&0c||0>d||d>a.ub||c>a.yb)&&5!=a.cb))e=YN(a),h=a.ob,j=WN(h),b=j.a,j=j.b,0>f&&be.b||0>g&&je.a||DQ(h,f,g),a.cb=5;HN(a,!1);a.Ib=!0;dP(a);a.Cc=c;a.Dc=d;return!0}\nfunction sP(a,b,c,d){var e,f;if(!a.J||a.Zf().a||a.$f().a||a.K)if(f=!1,e=DO(a,c,d),e!=a.Cb&&(f|=uP(a,a.Cb),f|=tP(a,e),a.Cb=e),!oP(b)){c-=Q(L(R(XO(a,a.nb))));d-=Q(L(R(YO(a,a.nb))));b=c;c=a.Nb;0>b||0>d||d>a.ub||b>a.yb?hP(c):gP(a,b,d,c);113==e&&0d.b[e].j&&(JQ(d,null),b=d.e[d.r-1],d.c[d.q].i=e,d.c[d.q].j=b,KQ(d.b[e],b),KQ(d.b[e],b)),BN(d,d.p)),d.u=!1,a.hc=!0;else if(0!=a.eb.c&&a.o!=a.eb.c){BN(a.ob,a.ob.p);b=a.ob.x;c=a.eb.a+a.ob.p;e=a.zb[a.eb.c];d=new kQ(a,y(LQ,q,119,[null,a.ob,e]),2);d.b[0]=new MQ;NQ(d,b,c,1);b=C(LQ,\nq,119,a.zb.length,0);for(f=0,c=0;fd.c[b].c?(++d.c[b].c,d.c[b].f=0):wC(d.k,Cj)):6==d.b[e].j?(--d.q,PQ(d,d.x),wC(d.k,Yj)):(d.c[d.q].j=e,PQ(d,d.x),b=d.x,KQ(d.b[e],b),KQ(d.b[b],e),QQ(d.c[d.q],d.b)));aO(a.ob);a.B&&(d=a.pb,d.a!=d.b&&d.a.b!=d.b&&(e=d.a.c,TP(d),d.a.c=e),PN(a,en,a.o,0,a.ob.w),a.B=!1);d=!0}else 5==a.cb&&(aO(a.ob),\nd=a.hc=!0);0=b&&0==c||b==c&&a.o==a.Zb)return-1;0>=b&&0Vb))for(;wc=pb[ed]*pb[ed];)0==wc%pb[ed]?eb=!1:++ed;if(eb){I[++Yb]=ME(wc);if(Yb>=Vb)break;Yctc&&(tc=0),0>Y&&(Y=0),Fd=28*tc+Y));Qc=0;0!=G.b[T].n&&(-2>G.b[T].n?Qc=1:-2==G.b[T].n?Qc=2:-1==G.b[T].n?Qc=3:1==G.b[T].n?Qc=4:2==G.b[T].n?Qc=5:2Bb&&(Bb=10-Bb));Ec=126;db=ie;db+=126*G.b[T].i;Ec*=7;db+=Qc*Ec;Ec*=7;0!=Bb&&(db+=Bb*Ec);Ec*=7;db+=Fd*Ec;Ec*=783;db+=G.b[T].j*Ec;O[T]=ME(db)}for(ga=0;!ZQ(G,Sa,O);){Da=!1;for(T=1;T<=G.p;++T)Sa[T]!=ob[T]&&(ob[T]=Sa[T],Da=!0);if(Da){for(T=1;T<=G.p;++T){O[T]=ou;for(Aa=1;Aa<=G.b[T].j;++Aa)O[T]=PE(O[T],I[Sa[G.b[T].p[Aa]]])}ga=\n0}else if(0G.c[T].j&&(Nb=G.c[T].i,G.c[T].i=G.c[T].j,G.c[T].j=Nb,1==G.c[T].f?G.c[T].f=3:2==G.c[T].f?G.c[T].f=4:3==G.c[T].f?G.c[T].f=1:4==G.c[T].f&&(G.c[T].f=2));for(T=1;To.a[v])&&P!=qa[v]){mc=!0;for(Ja=1;Ja<=za;++Ja)if(ca[Ja]==v&&Hb[Ja]==P||ca[Ja]==P&&Hb[Ja]==v){mc=!1;break}mc&&(++za,ca[za]=v,Hb[za]=P)}}else Z[++N]=P;if(0==N){if(Ab==o.p)break;v=da[tb--]}else if(1==N)qa[Z[1]]=v,v=Z[1],o.a[v]=++Ab;else{da[++tb]=v;s=0;for(aa=1;aa<=N;++aa)if($=OQ(o,Z[aa],v),!Mb[$]){s=Z[aa];break}if(0==s)for(aa=1;aa<=N;++aa)if($=OQ(o,Z[aa],v),2==o.d[$]||3==o.d[$]){s=\nZ[aa];break}0==s&&(s=Z[1]);qa[s]=v;v=s;o.a[s]=++Ab}}qa=MO(o.p+1);z=MO(o.p+1);Zc=[];cd=[];F=Ab=tb=0;for(aa=1;aa<=o.p;++aa)if(1==o.a[aa]){v=aa;break}b:for(;;){0Cb.b[Na].j||4Qa.b[Rc].j||3Gc[fb]&&(de=nc,nc=fb,fb=de);Xa=nc;0==nc&&(Xa=fb,Me=!0);for(kc=1;kc<=Qa.b[Rc].j;++kc)zd=Qa.b[Rc].p[kc],zd!=Qb[zc-1]&&(0==ke?ke=zd:le=zd);0Gc[le]&&(de=ke,ke=le,le=de);Ad=ke;0==ke&&(Ad=le,Td=!0);pf=0pf+je?-(pf+je):pf+je)||0!=vc||0!=ld?wC(Qa.k,zg):(Hc=Qa.b[Qb[zc-1]].q-Qa.b[Rc].q,V=Qa.b[Qb[zc-1]].r-Qa.b[Rc].r,\noc=Math.sqrt(Hc*Hc+V*V),0.001>oc&&(oc=0.001),0<(Qa.b[Ad].r-Qa.b[Qb[zc-1]].r)*(Hc/oc)-(Qa.b[Ad].q-Qa.b[Qb[zc-1]].q)*(V/oc)?gd[Pb]=1:gd[Pb]=-1,Me&&(gd[Pb]*=-1),Td&&(gd[Pb]*=-1),Xa==nc&&0>pf&&(gd[Pb]*=-1),Xa==fb&&0>je&&(gd[Pb]*=-1),Gc[Xa]>Gc[Ad]&&(gd[Pb]*=-1))}}else c:{var qb=Cb,Ac=Na,Ne=fd,Oe=void 0,lc=void 0,Jc=void 0,Bc=void 0,gb=void 0,$b=void 0,ee=void 0,xe=void 0,Bd=void 0,Sc=void 0,Ba=void 0,hb=void 0,Hd=void 0,Cd=void 0,Kc=void 0,Za=void 0,me=void 0,hb=MO(4),Cd=MO(4),Gf=qb,md=Ac,Yf=kb,Zf=Ld,\nHf=ic,Pe=ce,ug=Ta,Gb=hb,hd=void 0,Id=void 0,qf=void 0,vg=void 0,Pg=void 0,If=void 0,If=-1;0gb;++gb)0>=hb[gb]||(Oe=OQ(qb,Ac,hb[gb]),Cd[gb]=cR(qb,Oe,Ac),0Cd[gb]?(++ee,Bc=hb[gb],$b=hb[gb]):xe=hb[gb]);Bd=Sc+ee;Za=MO(4);Kc=0;if(3==qb.b[Ac].j){if(1==Sc&&1==ee||3==Bd&&0gb;++gb)Oe=OQ(qb,Ac,Ba[gb]),lc[gb]=cR(qb,Oe,Ac);if(4==Bd){if(0==Sc||0==ee){wC(qb.k,Xh);break c}if(1==Sc||1==ee)Za[0]=Ba[0],Za[1]=Ba[3],Za[2]=Ba[2],Za[3]=Ba[1],Kc=lc[0];else{for(gb=0;4>gb;++gb)-1==lc[gb]&&(lc[gb]=0);Bd=2}}else if(3==Bd)if(3==Sc||3==ee)Za[0]=Ba[0],Za[1]=Ba[3],Za[2]=Ba[2],Za[3]=Ba[1],0gb;++gb)lc[gb]==Jc&&(lc[gb]=0);Bd=2}if(2==Bd)if(1==Sc&&1==ee)Ba[1]==Bc?\n(Ba[1]=Ba[2],Ba[2]=Ba[3]):Ba[2]==Bc&&(Ba[2]=Ba[3]),Za[0]=me,Za[1]=Bc,Za[2]=Ba[2],Za[3]=Ba[1],Kc=1;else{if(lc[0]==lc[1]||lc[1]==lc[2]){wC(qb.k,Yh);break c}0!=lc[0]?(Za[0]=Ba[0],Za[1]=Ba[2],Za[2]=Ba[1],Za[3]=Ba[3]):(Za[0]=Ba[1],Za[1]=Ba[3],Za[2]=Ba[2],Za[3]=Ba[0]);1=Kf&&(Md=!0,ya=(kN(),rN)[Kf]);Md&&(0!=Ud?ya=gl+Ud+ya:ya=gl+ya,1==Kh[rf]?ya+=bg:-1==Kh[rf]&&(ya+=cg),1==ag?ya+=ji:1nd?-nd:nd)&&(ya+=0>nd?-nd:nd)),ne&&(ya+=zf+ib),ya+=Lm);Ny(Jb.a,ya);for(K=1;K<=za;++K)if(ca[K]==v||Hb[K]==v)E=Hb[K],E==v&&(E=ca[K]),M[v]c;++c)(d=b.d[c])?a.zb[c]=new zN(d):a.zb[c]=null;0b||b>a.Sb?(wC(a,Jh+b),a.bf(a.Ec.d),null):a.zb[b]}function RP(a){var b,c,d;b=QN(a);for(d=1;d<=a.Sb;++d)c=a.zb[d],c.o=b}function lR(a,b){b!=a.nb&&(a.nb=b,a.jg(),a.bf(a.Ec.d))}function mR(a,b){var c,d,e;if(b!=a.xb){c=YN(a);a.xb=b;d=YN(a);e=Q(L(R((d.b-d.c)/2-(c.b-c.c)/2)));d=Q(L(R((d.a-d.d)/2-(c.a-c.d)/2)));for(c=1;c<=a.Sb;++c)DQ(a.zb[c],e,d),aO(a.zb[c]);a.Ib=!0;a.bf(a.Ec.d)}}\nfunction TN(a,b){var c;c=-1;J(b,zk)?(c=202,b=m):J(b,qe)?c=235:J(b,re)?c=240:J(b,pe)?c=260:J(b,ve)?c=261:J(b,Be)?c=241:J(b,ue)?c=233:J(b,te)?c=236:J(b,se)?c=237:J(b,Ae)?c=234:J(b,ze)?c=243:J(b,De)?c=252:J(b,we)?c=244:J(b,Ee)?c=239:J(b,Ce)?c=251:J(b,oe)?c=242:J(b,ge)?c=245:J(b,he)&&(c=238);0=a.mb-1)for(g=f.b.b;j>=a.mb-1&&1b&&(b=1),a.fb=gO(a,a.fb,Q(L(R(XO(a,a.nb)))),b),a.W=gO(a,a.W,a.yb+Q(L(R((a.Lb?1:3)*a.nb))),Q(L(R(a.mb*a.nb)))),a.fc=gO(a,a.fc,Q(L(R((a.Lb?1:3)*a.nb))),a.ub)));HO(a);if(!a.J){var d;a.gg(ep+a.Gb+na+a.X);a.Gb&&(null==a.X&&\n(a.X=m),d=IO(a.W,a.nb),c=a.M.b/a.nb-(a.mb+(a.Lb?1:0)),b=a.mb,jO(d,mN),sO(d.a,Q(L(R(0*(tO(),S)))),Q(L(R(0*S))),Q(L(R(c*S))),Q(L(R(b*S)))),a.Lb?(jO(d,(BK(),GK)),wO(d.a,Q(L(R(-10*S))),Q(L(R(0*S))),Q(L(R((c-1+10)*S))),Q(L(R((b-1)*S))))):(jO(d,nN),uO(d,0,0,c-(a.Lb?1:3)+1,0),jO(d,SK(mN)),vO(d.a,Q(L(R(0*S))),Q(L(R((b-1)*S))),Q(L(R((c-1)*S))),Q(L(R((b-1)*S)))),vO(d.a,Q(L(R((c-1)*S))),Q(L(R(0*S))),Q(L(R((c-1)*S))),Q(L(R((b-1)*S))))),NO(d,a.lb),jO(d,(BK(),IK)),-1!=a.X.toLowerCase().indexOf(ip)&&jO(d,KK),UO(d,\na.X,10,15),a.J||GO(a,d,c,b,1),b=Q(L(R(XO(a,a.nb)))),c=a.M.a-Q(L(R(a.mb*a.nb))),ZO(a.Ec,a.W.a,b,c));var e;if(a.Kb){b=IO(a.wc,a.nb);d=a.M.b/a.nb;c=2*a.mb+(a.Lb?1:0);jO(b,mN);sO(b.a,Q(L(R(0*(tO(),S)))),Q(L(R(0*S))),Q(L(R(d*S))),Q(L(R(c*S))));a.Lb?(jO(b,(BK(),GK)),e=14*(a.mb+(a.Lb?1:0)),wO(b.a,Q(L(R(e*S))),Q(L(R(0*S))),Q(L(R((d-e-1)*S))),Q(L(R((c-1)*S))))):(jO(b,SK(mN)),vO(b.a,Q(L(R((d-1)*S))),Q(L(R(0*S))),Q(L(R((d-1)*S))),Q(L(R((c-1)*S)))),vO(b.a,Q(L(R(0*S))),Q(L(R((c-1)*S))),Q(L(R((d-1)*S))),Q(L(R((c-\n1)*S)))),jO(b,nN),vO(b.a,Q(L(R(0*S))),Q(L(R(0*S))),Q(L(R((d-1)*S))),Q(L(R(0*S)))));d=a.k;233<=a.k&&262>=a.k&&(a.k=213);for(c=1;14>=c;++c)iO(a,b,c,1),iO(a,b,c,2);a.k=d;ZO(a.Ec,a.wc.a,0,0)}var f;if(a.Hb){b=IO(a.fb,a.nb);d=a.mb+(a.Lb?1:0);c=(a.M.a-Q(L(R(YO(a,a.nb)))))/a.nb;f=c-a.mb;jO(b,mN);sO(b.a,Q(L(R(0*(tO(),S)))),Q(L(R(0*S))),Q(L(R(d*S))),Q(L(R(c*S))));a.Lb?(jO(b,(BK(),GK)),e=EO*(a.mb+(a.Lb?1:0))+3,f>e&&(uO(b,0,e,a.mb-1,e),vO(b.a,Q(L(R(0*S))),Q(L(R(e*S))),Q(L(R(0*S))),Q(L(R((c-1)*S)))),uO(b,a.mb-\n1,e,a.mb-1,f),uO(b,a.mb-1,f,d,f))):(jO(b,nN),vO(b.a,Q(L(R(0*S))),Q(L(R(0*S))),Q(L(R(0*S))),Q(L(R((c-1)*S)))),uO(b,0,EO*a.mb,c-1,EO*a.mb),jO(b,SK(mN)),vO(b.a,Q(L(R((d-1)*S))),Q(L(R(0*S))),Q(L(R((d-1)*S))),Q(L(R((f+1)*S)))));vO(b.a,Q(L(R(0*S))),Q(L(R((c-1)*S))),Q(L(R(d*S))),Q(L(R((c-1)*S))));for(c=3;c<=EO+2;++c)iO(a,b,1,c);b=Q(L(R(YO(a,a.nb))));ZO(a.Ec,a.fb.a,0,b)}a.Jb&&(d=IO(a.fc,a.nb),c=a.Lb?1:3,b=(a.M.a-Q(L(R(YO(a,a.nb))))-Q(L(R(a.mb*a.nb))))/a.nb,a.Lb?(jO(d,(BK(),GK)),sO(d.a,Q(L(R(0*(tO(),S)))),\nQ(L(R(0*S))),Q(L(R(c*S))),Q(L(R(b*S))))):(jO(d,SK(mN)),vO(d.a,Q(L(R((c-1)*(tO(),S)))),Q(L(R(0*S))),Q(L(R((c-1)*S))),Q(L(R(b*S)))),jO(d,mN),vO(d.a,Q(L(R((c-2)*S))),Q(L(R(0*S))),Q(L(R((c-2)*S))),Q(L(R(b*S)))),jO(d,nN),vO(d.a,Q(L(R((c-3)*S))),Q(L(R(0*S))),Q(L(R((c-3)*S))),Q(L(R(b*S))))),b=a.M.b-Q(L(R((a.Lb?1:3)*a.nb))),c=Q(L(R(YO(a,a.nb)))),ZO(a.Ec,a.fc.a,b,c))}}\nfunction DC(a,b){a.A?0==b&&(a.I=-1,wC(a,so),dP(a)):(a.gb?a.I=b:-1a.I?a.I=10*a.I+b:a.I=b,a.gb=!1,0==a.I?(a.I=-1,wC(a,so)):wC(a,a.I+fa),dP(a))}function lP(a,b){var c,d;d=b.b;c=b.a;a.J||(d-=Q(L(R(XO(a,a.nb))))+Q(L(R((a.Lb?1:3)*a.nb))),c-=Q(L(R(YO(a,a.nb))))+Q(L(R(a.mb*a.nb))));1>d&&(d=1);1>c&&(c=1);a.yb=iA(d);a.ub=iA(c)}function wN(a){kN();return 14<=a&&20>=a?1:21<=a&&28>=a?2:29<=a&&31>=a?3:0}w(558,456,sv);_.zf=function(a){GN(this,a)};_.Yf=pR;_.Zf=function(){return MN(),null!=this.Pb?NN:ON};\n_.$f=function(){return MN(),MN(),ON};_._f=cG;_.ag=function(a,b,c){return gK(this,b,c)};_.bg=cG;_.cg=function(){eM()};_.dg=eL;_.eg=qR;_.fg=eL;_.gg=function(){eM()};_.hg=function(){return yC(this,!0,!1)};\n_.Af=function(a){var b,c;if(this.s)if(c=a.c,b=a.f,a=a.i,c=(100+2*c)/100,this.J||!(bthis.M.a-Q(L(R(this.mb*this.nb)))||b>this.M.b-Q(L(R((this.Lb?1:3)*this.nb))))){if(b=this.xb*c,b>this.xb&&10>=b||b=b&&lR(this,b)};_.bf=function(){oR(this)};\n_.ig=function(a){this.Tb&&(null!=a&&0j&&(j=0);h=new UR(g,h,j,M);VR(h);Wv(g.k,h);jca(f,M.pb);ica(f,g.pb)}else UM(Mi+a+cb)}function oca(){return oE(null)}function pca(a){return oE(a)}w(562,1,$u,MR,OR,PR,NR);_.lg=function(a){rG(this.d,new WR(this,a),(WB(),WB(),XB))};_.mg=function(a){rG(this.d,new XR(this,a),(FC(),FC(),GC))};_.ng=function(a){rG(this.d,new YR(this,a),(LC(),LC(),MC))};_.og=function(a){rG(this.d,new ZR(this,a),(OC(),OC(),PC))};_.pg=function(a){yz(2,new $R(this.b,a))};_.qg=function(){bO(this.b,!0)};\n_.rg=function(){Mz((Jz(),Kz),new aS(this))};_.sg=function(){var a,b,c;c=[];for(b=new JD(this.d.a);b.ba&&(b.x=a,LO(b,a),cP(b))};_._g=function(a,b){var c=this.b,d;d=kR(c,a);1>b||b>d.p?(wC(c,"ERROR - invalid atom index: "+b),dP(c)):(d.v=b,xQ(c))};_.ah=function(a){wR(this.b,Ag,a)};_.bh=function(a,b){wR(this.b,a,b)};_.le=function(a){fG(this.d,a);LR(this)};_.ch=function(a){this.b.V=a};_.dh=function(a){lR(this.b,a)};_.eh=function(a){var b=this.b;b.tb=a;cP(b)};\n_.fh=function(a){var b=this.b;b.wb=a;cP(b)};_.gh=function(a){mR(this.b,a)};_.hh=function(a){this.b.Pb=a};_.ih=function(a){this.b.Qb=a};_.jh=function(a){var b=this.b;b.Wb=a;b.F=fO(b,!1)};_.kh=function(a){this.b.Yb=a};_.lh=function(a,b){gG(this.d,a,b);LR(this)};_.mh=function(a,b,c){c&&gG(this.c,a,b);gG(this.d,a,b);LR(this)};_.nh=function(a,b){hG(this.d,a,b);LR(this)};_.oh=function(a,b,c){c&&hG(this.c,a,b);hG(this.d,a,b);LR(this)};_.ph=function(a){TN(this.b,a)};\n_.qh=function(a,b){var c=this.b,d;c.q=!1;d=c.sc;c.sc=!1;c.uc=new hR(c,a);c.sc=d;c.k=253;wC(c,b);dP(c)};_.me=function(a){nG(this.c.pb,a)};_.rh=function(a){this.b.i=a};_.ne=function(a){this.d.pb.style[gu]=a;LR(this)};_.sh=function(a){CQ(this.b,a)};_.th=function(){return xN(this.b)};_.a=-1;_.b=null;_.c=null;_.d=null;var QR=0;function aS(a){this.a=a}w(563,1,{},aS);_.pd=function(){var a,b;for(b=new JD(this.a.d.a);b.b=a.c.length)return!1;c=a.c[a.b];g=fA(c,gu);b=fA(c,bq);f=fA(c,Hr);e=fA(c,nq);var h,j,l;l={};for(d=0;d=d&&b=a;return c?65536+((d&1023)<<10)+(e&1023):d}function AS(a,b){return 2>b||36b?b:10)?a-48:97<=a&&aa?-a:a):a}\nfunction DS(a,b){var c;c=new BS;c.d=gh+(ES(0!=a?-a:0)?CS(0!=a?-a:0):m+$y(c));FS(0!=a?-a:0)&&GS(0!=a?-a:0,c);c.b=4;c.a=b;return c}function U(a){var b;b=new BS;b.d=gh+(ES(a)?CS(a):m+$y(b));FS(a)&&GS(a,b);return b}function HS(a,b){var c;c=new BS;c.d=gh+(ES(a)?CS(a):m+$y(c));FS(a)&&GS(a,c);c.b=b?8:0;return c}function IS(){var a;a=new BS;a.d=gh+(ES(0)?CS(0):m+$y(a));FS(0)&&GS(0,a);a.b=2;return a}function JS(a){var b;b=new BS;b.d=gh+(ES(a)?CS(a):m+$y(b));FS(a)&&GS(a,b);b.b=1;return b}\nfunction FS(a){return typeof a==Sr&&0b||36c||2147483647a)return 0;if(0==a)return 32;b=-(a>>16)>>16&16;c=16-b;a>>=b;b=a-256>>16&8;c+=b;a<<=b;b=a-4096>>16&4;c+=b;a<<=b;b=a-16384>>16&2;c+=b;a=a<>14;return c+2-(a&~(a>>1))}function AE(a){var b,c;if(0==a)return 32;c=0;for(b=1;0==(b&a);b<<=1)++c;return c}function vv(a){var b,c,d;b=C(QS,Yu,-1,8,1);c=(RS(),SS);d=7;if(0<=a)for(;15>=4;else for(;0>=4;b[d]=c[a&15];return TS(b,d,8)}\nfunction rP(a){var b,c;return-129a?(b=a+128,c=(US(),VS)[b],!c&&(c=VS[b]=new rK(a)),c):new rK(a)}w(599,596,{88:1,93:1,99:1,101:1},rK);_.eQ=function(a){return H(a,99)&&a.a==this.a};_.hC=ZE;_.tS=PS;_.a=0;function US(){US=x;VS=C(FQ,q,99,256,0)}var VS;function SO(a){return 0>=a?0-a:a}function TO(a){return 0>a?-a:a}function nw(a,b){return a>b?a:b}function R(a){return Math.round(a)}function WS(a){return Math.sqrt(a)}function dM(){}function yD(a){this.f=a}\nw(603,136,{88:1,96:1,100:1,104:1,105:1},dM,yD);function RS(){RS=x;SS=y(QS,Yu,-1,[48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122])}var SS;function MS(a){this.f=a}w(605,598,{88:1,96:1,98:1,102:1,104:1,105:1},MS);function zS(a,b){return a.charCodeAt(b)}function XS(a,b){return-1!=a.lastIndexOf(b)&&a.lastIndexOf(b)==a.length-b.length}function J(a,b){return!H(b,1)?!1:""+a==b}function jG(a,b){return a.indexOf(b)}\nfunction qM(a,b,c){return a.indexOf(b,c)}function xJ(a,b){return a.lastIndexOf(b)}function IR(a,b,c){var d;for(d=0;0<=(d=c.indexOf(jl,d));)36==c.charCodeAt(d+1)?c=c.substr(0,d-0)+dc+mG(c,++d):c=c.substr(0,d-0)+mG(c,++d);return a.replace(RegExp(b,Fp),c)}\nfunction YS(a,b){for(var c=RegExp(b,Fp),d=[],e=0,f=a,g=null;;){var h=c.exec(f);if(null==h||f==m){d[e]=f;break}else d[e]=f.substring(0,h.index),f=f.substring(h.index+h[0].length,f.length),c.lastIndex=0,g==f&&(d[e]=f.substring(0,1),f=f.substring(1)),g=f,e++}if(0fa&&a[a.length-1]>fa?a:a.replace(/^(\\s*)/,m).replace(/\\s*$/,m)}function TS(a,b,c){a=a.slice(b,c);return String.fromCharCode.apply(null,a)}\nfunction sca(a,b,c){if(128>c)return a[b]=(c&127)<<24>>24,1;if(2048>c)return a[b++]=(c>>6&31|192)<<24>>24,a[b]=(c&63|128)<<24>>24,2;if(65536>c)return a[b++]=(c>>12&15|224)<<24>>24,a[b++]=(c>>6&63|128)<<24>>24,a[b]=(c&63|128)<<24>>24,3;if(2097152>c)return a[b++]=(c>>18&7|240)<<24>>24,a[b++]=(c>>12&63|128)<<24>>24,a[b++]=(c>>6&63|128)<<24>>24,a[b]=(c&63|128)<<24>>24,4;if(67108864>c)return a[b++]=(c>>24&3|248)<<24>>24,a[b++]=(c>>18&63|128)<<24>>24,a[b++]=(c>>12&63|128)<<24>>24,a[b++]=(c>>6&63|128)<<24>>\n24,a[b]=(c&63|128)<<24>>24,5;throw new kw(Yg+c);}function kG(a){var b;return 65536<=a?(b=56320+(a-65536&1023)&65535,String.fromCharCode(55296+(a-65536>>10&1023)&65535)+String.fromCharCode(b)):String.fromCharCode(a&65535)}function ZS(a){var b,c,d,e,f;e=a.length;for(d=b=0;dc?++b:2048>c?b+=2:65536>c?b+=3:2097152>c?b+=4:67108864>c&&(b+=5);b=C($S,fv,-1,b,1);for(d=f=0;da||a>=b)&&qT(a,b)}function qT(a,b){throw new xS(vi+a+Nd+b);}w(621,614,Qu);_.Ah=function(){throw new yM("Add not supported on this list");};\n_.uh=function(a){this.Ah(this.Tf(),a);return!0};_.eQ=function(a){return tca(this,a)};_.hC=function(){var a,b,c;b=1;for(a=this.ye();a.Vd();)c=a.Wd(),b=31*b+(null==c?0:Zy(c)),b=~~b;return b};_.ye=function(){return new JD(this)};_.Ch=function(){return this.Dh(0)};_.Dh=function(a){return new rT(this,a)};_.Eh=function(){throw new yM("Remove not supported on this list");};function pT(a){return a.b=a.d.Tf())throw new NG;return a.d.Bh(a.c=a.b++)}\nfunction mT(a){if(0>a.c)throw new kJ;a.d.Eh(a.c);a.b=a.c;a.c=-1}function JD(a){this.d=a}w(622,1,{},JD);_.Vd=function(){return pT(this)};_.Wd=function(){return KD(this)};_.Xd=function(){mT(this)};_.b=0;_.c=-1;_.d=null;function rT(a,b){var c;this.d=this.a=a;c=a.Tf();(0>b||b>c)&&qT(b,c);this.b=b}w(623,622,{},rT);_.Fh=function(){return 0=this.b)throw new NG;return this.a.Bh(this.c=--this.b)};_.a=null;function sT(a){a=new jT(a.b.a);return new tT(a)}\nfunction uT(a,b){this.a=a;this.b=b}w(624,616,av,uT);_.vh=vT;_.ye=function(){return sT(this)};_.Tf=function(){return this.b.a.d};_.a=null;_.b=null;function tT(a){this.a=a}w(625,1,{},tT);_.Vd=function(){return pT(this.a.a)};_.Wd=function(){return(this.a.b=KD(this.a.a)).xh()};_.Xd=function(){lT(this.a)};_.a=null;function wT(a){a.b=C(xT,q,0,0,0)}function uL(a,b,c){(0>b||b>a.c)&&qT(b,a.c);a.b.splice(b,0,c);++a.c}function Wv(a,b){vz(a.b,a.c++,b);return!0}function FF(a,b){bL(b,a.c);return a.b[b]}\nfunction rI(a,b){for(var c=0;ca.c&&vz(b,a.c,null);return b}function bw(){wT(this)}function gL(a){wT(this);this.b.length=a}\nfunction vK(a){wT(this);a=ZD(a.b,a.c);Array.prototype.splice.apply(this.b,[0,0].concat(a));this.c=this.b.length}w(629,621,qv,bw,gL,vK);_.Ah=function(a,b){uL(this,a,b)};_.uh=function(a){return Wv(this,a)};_.qg=function(){this.b=C(xT,q,0,0,0);this.c=0};_.vh=function(a){return-1!=rI(this,a)};_.Bh=function(a){return FF(this,a)};_.Qf=function(){return 0==this.c};_.Eh=function(a){return yT(this,a)};_.wh=function(a){return Qv(this,a)};_.Tf=bC;_.c=0;function SD(){SD=x;TD=new zT}var TD;function zT(){}\nw(632,621,Pu,zT);_.vh=qR;_.Bh=function(){throw new KG;};_.Tf=function(){return 0};function AT(){this.a=new Date}function BT(a){return 10>a?Xe+a:m+a}w(635,1,{88:1,92:1,93:1,106:1},AT);_.eQ=function(a){return H(a,106)&&JE(L(this.a.getTime()),L(a.a.getTime()))};\n_.hC=function(){var a;a=L(this.a.getTime());var b,c,d,e;c=32;d=a.h&1048575;22>c?(e=d>>>c,b=a.m>>c|d<<22-c,c=a.l>>c|a.m<<22-c):44>c?(e=0,b=d>>>c-22,c=a.m>>c-22|a.h<<44-c):(b=e=0,c=d>>>c-44);b=sE(c&4194303,b&4194303,e&1048575);a=sE(a.l^b.l,a.m^b.m,a.h^b.h);return Q(a)};\n_.tS=function(){var a,b;b=-this.a.getTimezoneOffset();a=(0<=b?Ed:m)+~~(b/60);b=10>(0>b?-b:b)%60?Xe+(0>b?-b:b)%60:m+(0>b?-b:b)%60;return(CT(),DT)[this.a.getDay()]+fa+ET[this.a.getMonth()]+fa+BT(this.a.getDate())+fa+BT(this.a.getHours())+zf+BT(this.a.getMinutes())+zf+BT(this.a.getSeconds())+" GMT"+a+b+fa+this.a.getFullYear()};_.a=null;function CT(){CT=x;DT=y(lE,q,1,[Nk,Kj,Sk,al,Qk,fi,wk]);ET=y(lE,q,1,[Pi,ci,Bj,lg,Dj,Si,Ri,qg,Bk,ck,$j,Ah])}var DT,ET;function HD(a,b){return null==D(a.a,b,a)}\nfunction GD(){this.a=new Ky}w(637,616,{88:1,92:1,111:1},GD);_.uh=function(a){return HD(this,a)};_.vh=vT;_.Qf=function(){return 0==this.a.d};_.ye=function(){return sT(new uT(this.a,new DM(this.a)))};_.wh=function(a){return null!=RD(this.a,a)};_.Tf=kT;_.tS=function(){return hT(new uT(this.a,new DM(this.a)))};_.a=null;function vM(a,b){this.a=a;this.b=b}w(641,619,iv,vM);_.xh=ZE;_.yh=wH;_.zh=function(a){var b;b=this.b;this.b=a;return b};_.a=null;_.b=null;function NG(){}\nw(642,136,{88:1,96:1,104:1,105:1,110:1},NG);function FT(a){var b,c;b=a.b;c=a.d.length;if(ba.j&&(++a.j,a.p[a.j]=b)}\nfunction NT(a){var b;b=new MQ;b.f=a.f;b.d=a.d;b.q=a.q;b.r=a.r;b.s=a.s;b.n=a.n;b.e=a.e;b.p=a.p.slice();b.j=a.j;b.c=a.c;b.a=a.a;b.b=a.b;b.i=a.i;b.o=a.o;b.k=a.k;return b}function mQ(a){return-99199!=a.f?a.f:0}function OT(a){return 4<=a.o&&2==a.j}function $N(a,b,c){a.q+=b;a.r+=c}function RN(a){var b;b=-99199!=a.f;a.f=-99199;return b}function MQ(){LT();this.p=MO(7)}w(662,1,{114:1},MQ);_.a=3;_.b=null;_.c=0;_.d=0;_.e=null;_.f=-99199;_.i=0;_.j=0;_.k=0;_.n=0;_.o=0;_.q=0;_.r=0;_.s=0;var MT;\nfunction YQ(a,b){var c;c=PT(a);return 0=this.j?this.b=lG(a):this.b=a;c=new IT($T,this.b);this.d=c.b.a.test(c.a);do if(4a.indexOf(zq)&&((this.e=0=f.length)e=0;else{for(h=0,j=f.length;hn&&(n=0.001);r=g/n;e=f/n;l=MO(4);for(h=0;4>h;++h)d[h]==c||0>=d[h]||(0==l[1]?l[1]=d[h]:0==l[2]?l[2]=d[h]:0==l[3]&&(l[3]=d[h]));o=MO(4);d=MO(4);for(h=1;3>=h;++h)3==h&&0==l[3]||(f=(a.b[l[h]].q-a.b[b].q)*e+(a.b[l[h]].r-a.b[b].r)*r,g=(a.b[l[h]].r-a.b[b].r)*e-(a.b[l[h]].q-a.b[b].q)*r,n=Math.sqrt(f*f+g*g),0.001>n&&(n=0.001),o[h]=g/n,d[h]=f/n);a=AU(o[1],d[1],o[2],d[2]);0b?(j[1]=l[1],j[2]=l[3],j[3]=l[2]):0>a&&0d?(j[1]=l[2],j[2]=l[3],j[3]=l[1]):0>d&&0b&&0>a&&(j[1]=l[3],j[2]=l[2],j[3]=l[1])):0j&&(j=0.001);g/=j;f/=j;l=j+25*Math.cos(1.0471975511965976);n=25*Math.sin(1.0471975511965976);h=OQ(a,b,d);if(3==a.c[h].c||204==a.k.k||1!=a.c[h].c&&(203==a.k.k||204==a.k.k)||a.n)l=j+25,n=0;0n?n=-n:0>c&&0j&&(j=0.001),wQ(a,a.p,a.b[b].q+25*f/j,a.b[b].r+25*g/j),0==BQ(a,a.p,1,a.p)||h==a.b[b].j);++h);break;default:return--a.p,wC(a.k,mg),a.k.cb=9,!1}b=NQ(a,a.v,a.p,1);203==a.k.k&&(b.c=2);204==a.k.k&&(b.c=3);201==a.k.k&&uQ(a,a.q);a.z=\na.b[a.p].q;a.A=a.b[a.p].r;return e}function oQ(a,b){var c,d;if(!b||0==b.c)return m;d=m;d+=fj+(kN(),ba);d+=cj+a+Ha+b.c;for(c=new JD(b);c.bj&&(j=0.001);1>SO((a.b[b].r-a.b[e].r)*(g/j)+(a.b[b].q-a.b[e].q)*(h/j))?(g=a.b[b].q-a.b[e].q,h=a.b[b].r-a.b[e].r,j=Math.sqrt(g*g+h*h),0.001>j&&(j=0.001),b=h/j,g/=j,d[0]=a.b[e].q+j*g-c*b,d[1]=a.b[e].r+c*g+j*b):(g=(a.b[e].q+a.b[f].q)/2,e=(a.b[e].r+a.b[f].r)/2,g=a.b[b].q-g,h=a.b[b].r-e,j=Math.sqrt(g*g+h*h),0.001>j&&(j=0.001),d[0]=a.b[b].q+c*g/j,d[1]=a.b[b].r+c*h/j)}\nfunction fQ(a){var b,c,d,e,f,g,h,j,l,n,o,r,t,z;n=-1;j=6;switch(a.k.k){case 206:j=3;break;case 207:j=4;break;case 208:case 221:case 223:j=5;break;case 210:case 209:j=6;break;case 211:j=7;break;case 212:j=8;break;case 229:j=9}f=6.283185307179586/j;l=WS(312.5/(1-Math.cos(f)));if(0a.b[a.v].j)HU(a,j,f,l);else if(!a.k.Bb&&!a.k.rc)n=a.v,gQ(a,a.v,0),a.v=a.p,HU(a,j,f,l);else{a.k.rc=!1;if(209==a.k.k||221==a.k.k||223==a.k.k){wC(a.k,Ih);a.k.cb=9;return}for(d=1;d<=a.b[a.v].j;++d)if(b=a.c[OQ(a,a.v,a.b[a.v].p[d])].c,\n2o&&(o=0.001);g/=o;e/=o;for(d=1;d<=j;++d)h=vQ(a,null),r=f*d+1.5707963267948966,AQ(h,b[0]+l*(Math.sin(r)*e-Math.cos(r)*g),b[1]+l*(Math.cos(r)*e+Math.sin(r)*g))}else if(0o&&(o=0.001);g/=o;e/=o;h=o/2;r=l*Math.sin(0.5*(3.141592653589793-f));o=1;0<(a.b[d].r-a.b[b].r)*e-(a.b[d].q-a.b[b].q)*g&&(r=-r,o=0);t=a.b[b].q+h*e-r*g;z=a.b[b].r+r*e+h*g;for(d=1;d<=j;++d)h=vQ(a,null),r=f*(d+0.5)+3.141592653589793*o,AQ(h,t+l*(Math.sin(r)*e-Math.cos(r)*g),z+l*(Math.cos(r)*e+Math.sin(r)*g)),1==o?(d==j&&AQ(h,a.b[b].q,a.b[b].r),d==j-1&&AQ(h,a.b[c].q,a.b[c].r)):(d==j-1&&AQ(h,a.b[b].q,a.b[b].r),d==j&&AQ(h,a.b[c].q,a.b[c].r))}else{b=\n0.5;6==j&&(b=0);for(d=1;d<=j;++d)h=vQ(a,null),r=f*(d-b),AQ(h,a.z+l*Math.sin(r),a.A+l*Math.cos(r))}b=j;l=0;for(f=1;f<=b;++f)JQ(a,null),l=a.p-b+f,a.b[l].j=2,a.c[a.q].i=l,a.c[a.q].j=l+1;a.c[a.q].j=a.p-b+1;if(209==a.k.k){if(a.c[a.q-4].c=2,a.c[a.q-2].c=2,a.c[a.q].c=2,0e&&ed;--f)if(0g&&(g=0.001),e/=g,f/=g);l=a.b[a.v].q+d*f;n=a.b[a.v].r+d*e;for(g=1;g<=b;++g)h=vQ(a,null),j=c*g-1.5707963267948966,AQ(h,l+d*(Math.sin(j)*f-Math.cos(j)*e),n+d*(Math.cos(j)*f+Math.sin(j)*e))}function GU(a,b){var c,d;0==b&&(b=a.p);for(c=a.p;c>a.p-b;--c)d=BQ(a,c,1,a.p),0!=d&&$N(a.b[c],6,6)}\nfunction OQ(a,b,c){var d,e,f;for(e=1;e<=a.q;++e)if(d=a.c[e],f=d.i,d=d.j,f==b&&d==c||f==c&&d==b)return e;return 0}function pP(a){var b;for(b=1;b<=a.q;++b)if(1==a.c[b].c&&0=c||0>=d?a.s=!0:(b=WN(a),c=c/2-b.a,b=d/2-b.b,a.k.Ob||DQ(a,c,b),aO(a))}\nfunction bQ(a,b,c){var d,e,f;if(1==c)return a.b[b].n+=1,!0;if(-1==c)return a.b[b].n+=-1,!0;e=a.b[b].n;f=a.b[b].i;d=a.b[b].o;-1==d&&0==c&&(0==a.b[b].n?a.b[b].n=1:1==a.b[b].n?a.b[b].n=-1:-1==a.b[b].n&&(a.b[b].n=0));switch(a.b[b].a){case 1:0==d&&(0==a.b[b].n?a.b[b].n=1:1==a.b[b].n?a.b[b].n=-1:a.b[b].n=0);break;case 2:2d&&(0==a.b[b].n?a.b[b].n=-1:-1==a.b[b].n?a.b[b].n=1:1==a.b[b].n&&(a.b[b].n=0));break;case 4:case 7:3<\nd?wC(a.k,ah):3==d&&0==a.b[b].n?a.b[b].n=1:3==d&&1==a.b[b].n?a.b[b].n=0:3>d&&0==a.b[b].n?a.b[b].n=1:3>d&&1==a.b[b].n?a.b[b].n=-1:3>d&&-1==a.b[b].n&&(a.b[b].n=0);break;case 5:case 8:case 13:2d&&0==a.b[b].n?a.b[b].n=-1:2>d&&-1==a.b[b].n?a.b[b].n=1:2>d&&1==a.b[b].n&&(a.b[b].n=0);break;case 9:case 10:case 11:case 12:0==d&&0==a.b[b].n?a.b[b].n=-1:0==d&&-1==a.b[b].n?a.b[b].n=0:wC(a.k,bh);break;case 32:wC(a.k,\nVk)}if(0e&&eb?e=2:0>a&&0>b?e=3:0>a&&0<=b&&(e=4);0<=c&&0<=d?f=1:0<=c&&0>d?f=2:0>c&&0>d?f=3:0>c&&0<=d&&(f=4);if(ef)return-1;switch(e){case 1:case 4:return ac?1:-1}return 0}function $Q(a){IU(a);aO(a);aR(a)}\nfunction WN(a){var b,c,d,e,f,g;b=new VT;f=9999;d=-9999;g=9999;e=-9999;for(c=1;c<=a.p;++c)a.b[c].qd&&(d=a.b[c].q),a.b[c].re&&(e=a.b[c].r);b.a=f+(d-f)/2;b.b=g+(e-g)/2;b.c=d-f;b.d=e-g;25>b.c&&(b.c=25);25>b.d&&(b.d=25);return b}function FU(a,b,c){var d,e;e=0;for(d=1;d<=a.p;++d)d>=b&&d<=c||0!=BQ(a,d,b,c)&&++e;return e}function NQ(a,b,c,d){var e;e=JQ(a,null);KQ(a.b[b],c);KQ(a.b[c],b);e.i=b;e.j=c;QQ(e,a.b);e.c=d;return e}\nfunction vQ(a,b){++a.p;b?a.b[a.p]=NT(b):a.b[a.p]=new MQ;return a.b[a.p]}function RO(a,b,c,d,e,f){var g;g=a.b[b].q-c/2;f||(g-=d-c);a=a.b[b].r-~~(e/2);return new JU(g-1-2,a-2,d+1+4,e+4)}function JQ(a,b){var c;++a.q;c=new TT;b&&UT(c,b);return a.c[a.q]=c}\nfunction jQ(a,b,c){var d,e,f,g,h,c=lQ(a,b,c,!1);e=-1.7976931348623157E308;d=1.7976931348623157E308;for(b=1;b<=a.p;++b)a.b[b].r>e&&(e=a.b[b].r),a.b[b].qa.b[b].n?f=4-a.b[b].n:0>a.b[b].n&&-4=g&&(h=g)),\ng=iQ(h,2)+iQ(f,3)+la,f=UQ(a,b),g+=iQ(f,3),c+=g+ja+(kN(),ba);for(b=1;b<=a.q;++b)d=a.c[b],g=e=d.c,1==a.c[b].c?g=1:2==a.c[b].c&&(g=2),f=iQ(d.i,3)+iQ(d.j,3),h=0,1==e&&1==d.f?h=1:1==e&&2==d.f&&(h=6),1==e&&3==d.f&&(h=1,f=iQ(d.j,3)+iQ(d.i,3)),1==e&&4==d.f&&(h=6,f=iQ(d.j,3)+iQ(d.i,3)),c+=f+iQ(g,3)+iQ(h,3)+ka+(kN(),ba);for(b=1;b<=a.p;++b)0!=a.b[b].n&&(c+=Yi+iQ(b,4)+iQ(a.b[b].n,4)+(kN(),ba)),0!=a.b[b].d&&(c+=bj+iQ(b,4)+iQ(a.b[b].d,4)+(kN(),ba));return c+=Zi+(kN(),ba)}\nfunction BN(a,b){var c,d,e,f,g,h,j;g=j=0;for(h=1;h<=a.q;++h)e=a.c[h],c=e.i,d=e.j,c!=b&&d!=b?(++j,f=a.c[j],UT(f,e),f.i=c,c>b&&--f.i,f.j=d,d>b&&--f.j):g+=e.c;a.q=j;for(h=b;hb&&--c,a.b[h].p[++d]=c);a.b[h].j=d}}\nfunction DN(a,b){var c,d,e,f;c=a.c[b].i;d=a.c[b].j;for(e=b;ea.b[b].a&&0==a.b[d].d){if(0!=(-99199!=a.b[d].f?a.b[d].f:0))continue a;b=OQ(a,d,b);if(1==a.c[b].c&&(0==a.c[b].f||!a.k.tc))BN(a,d),c=!0}return c}function KU(a,b){var c,d,e,f,g;g=y(A,u,-1,[0,0]);for(e=1,f=0;e<=a.b[b].j;++e)c=a.b[b].p[e],d=OQ(a,b,c),2!=a.c[d].c&&(g[f++]=c);return g}\nfunction IU(a){var b,c,d;for(d=1;d<=a.p;++d)a.b[d].j=0;for(d=1;d<=a.q;++d)b=a.c[d].i,c=a.c[d].j,KQ(a.b[b],c),KQ(a.b[c],b)}\nfunction XQ(a,b,c){var d,e,f,g,h,j,l,n,o;a.d=MO(a.q+1);o=[];for(j=1;j<=a.p;++j){o[j]=!1;b[j]=!1;a:{d=void 0;for(d=1;d<=a.b[j].j;++d)if(c[OQ(a,j,a.b[j].p[d])]){d=!0;break a}d=!1}if(d&&!(3d&&(d=c);return d}\nfunction QO(a,b){var c;c=(kN(),rN)[a.b[b].a];32==a.b[b].a&&(c=a.b[b].e);return c}function PQ(a,b){a.b[b].j+=-1}function WO(a,b,c){var d,e,f,g,h;h=1;a.a=MO(a.p+1);for(e=a.a[b]=1;e<=a.b[b].j;++e)d=a.b[b].p[e],d!=c&&(a.a[d]=++h);for(g=!1;;){for(d=1;d<=a.p;++d){g=!1;if(0~~(c/2)+24?3:2}function KN(a,b){var c,d,e,f,g,h,j;c=WN(a);d=c.a;e=c.b;g=Math.sin(3.141592653589793*b/180);c=Math.cos(3.141592653589793*b/180);for(f=1;f<=a.p;++f)h=a.b[f].q*c+a.b[f].r*g,j=-a.b[f].q*g+a.b[f].r*c,AQ(a.b[f],h,j);c=WN(a);DQ(a,d-c.a,e-c.b)}\nfunction SQ(a){var b,c,d,e,f;e=f=0;for(d=1;d<=a.q;++d)b=a.b[a.c[d].i].q-a.b[a.c[d].j].q,c=a.b[a.c[d].i].r-a.b[a.c[d].j].r,f+=Math.sqrt(b*b+c*c);0=g;++g)if(J(f,(kN(),rN)[g])){f=g;break b}f=32}dQ(a,b,f);32==a.b[b].a&&(a.b[b].e=d);c+=\nfa;d=0;0=e&&(d=e-48));32==a.b[b].a&&(a.b[b].i=d)}}}function OP(a,b,c){var d,e;a.i=1;c&&(a.i=-1);b=new NM(b);try{for(;b.j=GM(b,b.a),b.jc||6a.b[c].j&&2>a.b[d].j)e.f=0,wC(a.k,Jk);else switch(e.f){case 0:a.b[d].j<=a.b[c].j?e.f=1:e.f=3;break;case 1:e.f=2;break;case 2:2h||3c[b]&&(j=f,f=b,b=j);j=KU(a,f);h=j[0];l=j[1];e=0;n=!1;0c[l]&&(j=h,h=l,l=j);j=OQ(a,f,h);0!=d[j]?e=h:1==a.c[j].c&&5!=a.d[j]&&(e=h);0==e&&0c[f]&&(n=!0);j=KU(a,b);l=j[0];g=j[1];h=0;0g&&(g=0.001),j/=g,g=l/g,l=(a.b[e].r-a.b[f].r)*g-(a.b[e].q-a.b[f].q)*j,t=(a.b[h].r-a.b[f].r)*g-(a.b[h].q-a.b[f].q)*j,2>(0>=l?0-l:l)||2>(0>=t?0-t:t))wC(a.k,Zj);else{g=OQ(a,e,f);h=OQ(a,h,b);\nr=1;if(0==d[g]){for(o=1;o<=a.b[e].j;++o)if(b=a.b[e].p[o],b!=f&&(j=OQ(a,e,b),0!=d[j])){c[b]>c[e]?r=-d[j]:r=d[j];break}d[g]=r}0==d[h]&&(0l&&0>t?d[h]=-d[g]:d[h]=d[g],n&&(d[h]=-d[h]))}}}function cR(a,b,c){var d;d=a.c[b].f;return 1>d||4g?e.i=3-g-c.b[d].n:4==g?(c.b[d].n=-1,e.i=0):5g?0c.b[d].n?e.i=2-g-c.b[d].n:e.i=4-g:(c.b[d].n=g-4,e.i=4-g+c.b[d].n);break;case 4:case 7:3>g?e.i=3-g+c.b[d].n:3==g?0>c.b[d].n?(c.b[d].n=0,e.i=0):0c.b[d].n?(c.b[d].n=0,e.i=0):0g?e.i=2-g+c.b[d].n:2==g?0>c.b[d].n?(c.b[d].n=0,e.i=0):0f;)if(0e.i&&(e.i=0)}}}function cO(a){xU(this);this.b[0]=new MQ;this.t=this.q=this.p=0;this.k=a}\nfunction NP(a,b){var c,d,e,f,g,h,j,l,n;cO.call(this,a);if(null!=b&&(f=m,l=LP(b),null!=l)){n=new MM(b,l,!0);for(g=1;4>=g;++g)f=MP(n,l);e=rP(sM(lG(f.substr(0,3)),10)).a;j=rP(sM(lG(f.substr(3,3)),10)).a;g=0;try{g=rP(sM(lG(f.substr(14,1)),10)).a}catch(o){if(o=Dz(o),!H(o,96))throw o;}LN(this,(MN(),1==g?NN:ON));for(g=1;g<=e;++g){d=vQ(this,null);f=MP(n,l);d.q=(new NS(KS(lG(f.substr(0,10))))).a;d.r=-(new NS(KS(lG(f.substr(10,10))))).a;d=34;34>f.length&&(d=f.length);d=lG(f.substr(31,d-31));eQ(this,g,d);62<=\nf.length&&(h=lG(f.substr(60,3)),0=h))){var r=void 0,r=PT(d);d=0d&&(d=0);this.b[g].d=d}if(39<=f.length&&(h=lG(f.substr(37,2)),0=h))){f=0;switch(h){case 1:f=3;break;case 2:f=2;break;case 3:f=1;break;case 4:f=0;break;case 5:f=-1;break;case 6:f=-2;break;case 7:f=-3}this.b[g].n=f}}for(g=1;g<=j;++g)e=JQ(this,null),f=\nMP(n,l),e.i=rP(sM(lG(f.substr(0,3)),10)).a,e.j=rP(sM(lG(f.substr(3,3)),10)).a,d=rP(sM(lG(f.substr(6,3)),10)).a,1==d?c=1:2==d?c=2:3==d?c=3:c=9,h=0,11b.length)this.p=0;else{try{j=new LM(b);g=rP(sM(JM(j),10)).a;h=rP(sM(JM(j),10)).a;for(f=1;f<=g;++f)n=JM(j),c=(o=vQ(this,null),eQ(this,this.p,n),o),c.q=(new NS(KS(JM(j)))).a,c.r=-(new NS(KS(JM(j)))).a;for(f=1;f<=h;++f){d=JQ(this,null);d.i=rP(sM(JM(j),10)).a;d.j=rP(sM(JM(j),10)).a;e=rP(sM(JM(j),10)).a;l=0;if(-1==e)l=e=1;else if(-2==e)e=1,l=2;else if(-5==e)e=2,l=10;else if(11==\ne||12==e||13==e||14==e)l=e,e=9;d.c=e;d.f=l}IU(this);SQ(this);ZN(this)}catch(r){r=Dz(r);if(H(r,96)){r.yd();this.p=0;return}throw r;}a&&!a.bb&&SN(this);$Q(this)}}function QP(a,b,c){var d,e,f,g;cO.call(this,a);g=MO(b.p+1);for(e=1;e<=b.p;++e)b.a[e]==c&&(vQ(this,b.b[e]),g[e]=this.p);for(e=1;e<=b.q;++e)if(a=b.c[e].i,d=b.c[e].j,!(b.a[a]!=c&&b.a[d]!=c)&&!(b.a[a]!=c||b.a[d]!=c))f=JQ(this,b.c[e]),f.i=g[a],f.j=g[d];this.i=b.i;IU(this)}\nfunction LU(a,b,c){var d,e,f;cO.call(this,a);f=MO(b.p+1);for(d=1;d<=b.p;++d)b.b[d].k==c&&(vQ(this,b.b[d]),f[d]=this.p);for(d=1;d<=b.q;++d)a=b.c[d],a.e==c&&(e=JQ(this,a),e.i=f[a.i],e.j=f[a.j]);LN(this,b.f);this.i=b.i;IU(this)}\nfunction kQ(a,b,c){var d,e,f,g;cO.call(this,a);for(a=1;a<=c;++a)this.p+=b[a].p,this.q+=b[a].q,this.t+=b[a].t,b[a].f.a&&LN(this,(MN(),MN(),NN));this.b=C(yU,q,114,this.p+1,0);this.c=C(zU,q,115,this.q+1,0);f=g=e=0;for(a=1;a<=c;++a){for(d=1;d<=b[a].p;++d)++e,this.b[e]=NT(b[a].b[d]);for(d=1;d<=b[a].q;++d)++g,this.c[g]=ST(b[a].c[d]),this.c[g].i+=f,this.c[g].j+=f;f=e}IU(this)}\nfunction zN(a){var b;xU(this);this.k=a.k;this.p=a.p;this.q=a.q;this.t=a.t;this.b=C(yU,q,114,this.p+1,0);for(b=0;b(0>=a?0-a:a)&&(a=0);a=Q(L(R(a*Math.pow(10,c))))/Math.pow(10,c);e=m+(new NS(a)).a;d=jG(e,kG(46));0>d&&(e+=Ie,d=jG(e,kG(46)));f=e.length;for(a=1;a<=c-f+d+1;++a)e+=Xe;if(0==b)return e;e.length>b&&(e=Xf);c=m;for(a=1;a<=b-e.length;++a)c+=fa;return c+e}function LP(a){var b;b=new MM(a,ba,!0);if(4b&&(d=Xf);e=m;for(c=1;c<=b-d.length;++c)e+=fa;return e+d}function MP(a,b){for(var c,d;a.j=GM(a,a.a),a.j>16&255)),iA(0.7*(g.d>>8&255)),iA(0.7*(g.d&255))),KO(a.a,g)):(h=new zv(iA(0.7*(g.d>>16&255)),iA(0.7*(g.d>>8&255)),iA(0.7*(g.d&255))),f=RK(g),KO(a.a,h));g=Q(L(R(S)));d=Q(L(R(d*S)));e=Q(L(R(e*S)));b=Q(L(R(b*S)));c=Q(L(R(c*S)));d-=g;e-=g;sO(a.a,b+g,c+g,d-g,e-g);KO(a.a,h);sO(a.a,b,c,d,g);sO(a.a,b,c+g,g,e);KO(a.a,f);sO(a.a,b+d,c,g,e+g);sO(a.a,b+1,c+e,d,g)}\nfunction nO(a,b,c,d,e){a=a.a;b=Q(L(R(b*S)));c=Q(L(R(c*S)));d=Q(L(R(d*S)));e=Q(L(R(e*S)));oO(a,!0);pO(a,qO(a,b,c,d,e))}function yO(a,b,c,d){var e,f,g;f=C(A,u,-1,d,1);g=C(A,u,-1,d,1);for(e=0;e=b||b>=lK(this.a)-1||0>=c||c>=mK(this.a)-1)&&(this.a.j=!1);this.a.j?yQ(this.a.c,a,b,c):sP(this.a.c,a,b,c);lI(this.a.pb)};_.a=null;function hV(a){this.a=a}w(713,1,{},hV);_.od=function(a){this.a.j=!1;UB(a);VB(a);GQ(this.a.c)};_.a=null;\nfunction iV(a){this.a=a}w(714,1,{},iV);_.nd=function(){this.a.j&&(this.a.j=!1)};_.a=null;function jV(a){this.a=a}w(715,1,{},jV);_.a=null;function kV(a){this.a=a}w(716,1,{},kV);_.a=null;function XU(){VU.call(this);this.pb.style[gu]=af;this.pb.style[bq]=af}w(717,708,Su,XU);function lV(a){this.a=a}w(718,1,{},lV);_.Qd=function(){Mz((Jz(),Kz),new nV(this))};_.a=null;function nV(a){this.a=a}w(719,1,{},nV);_.pd=function(){this.a.a.c&&(jK(this.a.a.c),vR(this.a.a))};_.a=null;\nfunction oV(a,b){var c;c=b.a;c.e=4;return pQ(a.a.c,c,b.d,b.e)}function ZU(a){this.a=a}w(720,1,{},ZU);_.Lh=function(a){return oV(this,a)};_.a=null;function pD(a,b){sP(a.a.c,b.a,b.d,b.e);return pQ(a.a.c,b.a,b.d,b.e)}function $U(a){this.a=a}w(721,1,{},$U);_.Lh=function(a){return pD(this,a)};_.a=null;function aV(a){this.a=a}w(722,1,{},aV);_.Lh=function(a){return yQ(this.a.c,a.a,a.d,a.e)};_.a=null;function bV(a){this.a=a}w(723,1,{},bV);_.Lh=function(){return GQ(this.a.c)};_.a=null;\nfunction hC(a,b){var c;c=L(R(b.b));c=new aM(b,0,ct,c);GN(a.a.c,c);return!0}function cV(a){this.a=a}w(724,1,{},cV);_.Lh=function(a){return hC(this,a)};_.a=null;function pV(){pV=x;qV()}function qV(){qV=x;rV=$moduleBase+lf}var sV=null,rV;function tV(){tV=x;qV();sV=new SE((jF(),new iF(rV)),4,4)}function uV(){uV=x;vV={}}function wV(a,b,c){var d;c&&(b.style[yp]=c.b+Js,d=c.a,d!=Fh&&(b.style[xp]=d),0!=(c.c&1)&&(b.style[Ap]=Vn),0!=(c.c&2)&&(b.style[zp]=xq));a.e.style[fu]=Qr}\nfunction lL(a,b){var c,d,e,f,g,h,j,l,n,o,r,t,z;d=$y(b);d in vV?c=vV[d]:(c=$doc.getElementsByTagName(Un)[0],e=dA(vt),f=dA(sq),f.style[Zo]=(AA(),vq),f.style[bu]=(nB(),Ln),f.style[fr]=Ye,f.style[gr]=Ye,f.width=1,f.height=1,g=(pV(),tV(),qV(),sV),g=g.d.a,mA()?yA(f,g):f.src=g,c=(h=$doc.createTextNode(ik),wV(a,e,b),e.appendChild(h),e.appendChild(f),c.appendChild(e),j=lA(e),l=lA(e)+(e.offsetHeight||0),n=l-j,o=lA(f)+(f.offsetHeight||0)+1,r=l-o,t=o-j,c.removeChild(e),z=new xV,z.a=t,z.b=r,z.c=n,z),vV[d]=c);\nreturn c}function yV(){uV();var a,b,c,d,e;UA();this.a=y(lE,q,1,[wr,Faa,pt]);this.c={};this.b={};this.d=$doc.getElementsByTagName(Un)[0];this.e=dA(vt);this.e.innerHTML=this.f||m;this.e.style[yp]=tf;for(b=this.a,c=0,d=b.length;c=g?h=qO(a,b,c,d,e):h=(j=f+g,l=90-f,n=90-j,a.b+vn+l+Fb+n+Kb+c*a.a+jaa+b*a.a+Rs+d*a.a+Ps+e*a.a+daa+a.n+Ve),pO(a,h))}function vO(a,b,c,d,e){a.o&&pO(a,a.b+Uq+b*a.a+Jd+c*a.a+Lb+d*a.a+Jd+e*a.a+Ib+a.i+Db+a.c+We)}function wO(a,b,c,d,e){a.o&&(oO(a,!1),pO(a,a.b+Vs+b*a.a+Qs+c*a.a+Rs+d*a.a+Ps+e*a.a+Ls+a.n+Ve))}\nfunction PO(a,b,c,d){var e,b=b.replace(/&/g,Lc).replace(/<\/g,Nc).replace(/>/g,Mc),f=(AV(),BV),b=(e=lL(f,a.f).a,Tf+c*a.a+Qs+(d-e)*a.a+Os+a.j+yo+a.i+Ef+b+Nf);pO(a,b)}function sO(a,b,c,d,e){oO(a,!0);pO(a,a.b+Vs+b*a.a+Qs+c*a.a+Rs+d*a.a+Ps+e*a.a+Ls+a.n+Ve)}function TU(a){var b;if(a.q){for(;null!=(b=a.v.pop());){var c=a.d;c[c.length]=b}b=a.d.join(ba);b=m+b+m;b!==a.r&&(a.u.pb.innerHTML=b||m,a.r=b);a.p=!0;a.q=!1}}function KO(a,b){(a.e=b)&&(a.i=DV(b))}\nfunction nR(a,b){var c,d,e,f;a.f=b;a.j=(c=(iL(),jL),d=b.b,e=b.a,f=m,d!=c.b&&(f=up+d*a.a+Os),e!=c.a&&(f+=tp+e+Cf),0!=(b.c&1)&&(f+=wp),0!=(b.c&2)&&(f+=vp),f+=kba,f)}function JO(a,b){(a.o=b)&&b&&(a.c=vb+b.e*a.a+caa)}w(734,485,{});_.d=null;_.e=null;_.f=null;_.i=On;_.j=null;_.k=!0;_.n=null;_.p=!1;_.q=!1;_.r=m;_.s=0;_.t=0;_.u=null;_.v=null;var CV,BV;\nfunction lD(a,b){var c;c=b.a.targetTouches;return 1==c.length?(c=c[0],a.b.d=c.clientX-hA(a.o.pb)+kA(a.o.pb)+uA(a.o.pb.ownerDocument),a.b.e=c.clientY-lA(a.o.pb)+(a.o.pb.scrollTop||0)+vA(a.o.pb.ownerDocument),a.b.a=new mV(b),eA(b.a),!0):!1}\nfunction YU(a){this.o=a;this.b=new EV;this.c=new FV(this);rG(this.o,new GV(this),(mD(),mD(),nD));rG(this.o,new HV(this),(eD(),eD(),fD));rG(this.o,new IV(this),(iD(),iD(),jD));rG(this.o,new JV(this),(aD(),aD(),bD));rG(this.o,new KV,(nC(),nC(),oC));rG(this.o,new LV(this),(jC(),jC(),kC));rG(this.o,new MV(this),(eC(),eC(),fC))}w(735,1,{},YU);_.a=null;_.b=null;_.c=null;_.d=!1;_.e=null;_.f=null;_.i=null;_.j=null;_.k=null;_.n=null;_.o=null;function FV(a){dw();this.a=a}w(736,65,{},FV);\n_.vd=function(){!this.a.d&&this.a.i&&oV(this.a.i,this.a.b)};_.a=null;function GV(a){this.a=a}w(737,1,{},GV);_.a=null;function HV(a){this.a=a}w(738,1,{},HV);_.a=null;function IV(a){this.a=a}w(739,1,{},IV);_.a=null;function JV(a){this.a=a}w(740,1,{},JV);_.a=null;function KV(){}w(741,1,{},KV);function LV(a){this.a=a}w(742,1,{},LV);_.a=null;function MV(a){this.a=a}w(743,1,{},MV);_.a=null;function EV(){}w(744,1,{},EV);_.a=null;_.b=0;_.c=0;_.d=0;_.e=0;\nfunction DV(a){var b,c;c=a.d>>16&255;b=a.d>>8&255;a=a.d&255;if(0==c*b*a){if(0==c&&0==b&&0==a)return On;if(255==c&&0==b&&0==a)return uaa;if(0==c&&255==b&&0==a)return Mp;if(0==c&&0==b&&255==a)return Sn}return 255==c&&255==b&&255==a?jba:$s+c+Jd+b+Jd+a+od}function FR(){var a=$wnd.navigator.userAgent.match(/MSIE\\s+(\\d+\\.\\d+)/);return a?parseFloat(a[1]):-1}\nfunction NV(a){var b,c,d,e,f;xG(a);d=(yG(),LI(null));e=new zV;PH(e,a);HG(d,e,d.pb);f=a.he();b=a.ge();c=FR();9<=c?(++f,++b):7==c&&H(a,38)&&(c=a.pb.innerText,2>=c.length&&(f+=8));RH(e,a);QG(d,e);return new HJ(f,b)}function UM(a){try{$wnd.console.log(a)}catch(b){}}function OV(){this.pb=dA($o);this.pb[no]=Lq;this.pb.style[xs]=dq;this.pb.style[Gs]=bn;this.pb.style[gu]=af;this.pb.style[bq]=af;this.pb.setAttribute(Go,pp)}w(746,365,Ku,OV);function PV(){PV=x;AV();QV=y(lE,q,1,[sa,Tq,aaa,un,vs,raa,Caa])}\nfunction qO(a,b,c,d,e){return a.b+ws+b*a.a+Qs+c*a.a+Rs+d*a.a+Ps+e*a.a+Ls+a.n+Ve}function NU(a,b,c,d,e){var f,g,h,j,l;if(1>d)return m;h=a.b+baa;g=m;for(f=0;f=f.k||(701==f.k?null.fi():401==f.k||402==f.k?(null.fi(),null.fi(),null.fi(),null.fi(),null.fi()):500<=f.k&&507>=f.k&&(g=null.gi,500!=g&&(g=new vC(null.gi,g,null),g.i=f.f,g.j=f.i,f=f.j&63,g.e=f&12)))}function WV(a){this.a=a}w(756,1,Fu,WV);_.pd=function(){sI(this)};_.a=null;function JL(){TV();VV.call(this);this.a=new YI}w(757,749,{},JL);_.If=ZE;_.a=null;function ML(){new GD;var a;a:{switch(iE){case 1:case 3:case 5:case 7:a=new XV;break a}a=new YV}this.a=a}w(772,509,{},ML);_.a=null;\nfunction YV(){}w(774,1,{},YV);_.bi=function(a){a&&a&&yz(8,new ZV(a));return null};_.ci=function(a){yz(8,new $V(a))};function XV(){}w(773,774,{},XV);_.bi=function(){return $wnd.clipboardData.getData(Ok)};_.ci=function(a){$wnd.clipboardData.setData(Ok,a)};function ZV(a){this.a=a}w(777,1,ev,ZV);_.zd=cG;_.a=null;function $V(a){this.a=a}w(779,1,ev,$V);_.zd=cG;_.a=null;function KL(){this.b=new NL;this.d=new tK}w(790,507,{},KL);function qP(a,b,c,d){b=BJ(b);c+=b.a;d+=b.b;dH(a.a,c,d);eH(a.a)}\nfunction wL(){TV();VV.call(this);var a=this.a=new aW;a.ab=!0;a.a.f=!0;this.a.db=!0}w(792,749,{},wL);_.If=ZE;_.a=null;function pM(){}w(800,536,{},pM);function mM(){mM=x;var a;a=(eM(),fM[rs]);if(null!=a)try{if(J(Tk,a))ZS(m);else if(J(qi,a)||J(ri,a))C($S,fv,-1,0,1);else throw new wS(a+ab);}catch(b){if(b=Dz(b),!H(b,105))throw b;}}function rL(a,b){a.a=31*a.a+iA((new NS(b)).a)}function zK(){}w(805,1,{},zK);_.hC=ZE;_.a=1;\nfunction aW(){var a=(lH(),oH);fH.call(this,!0,mr);this.U=a.a;this.a=new bW(this);this.a.d=!0;WG(this,this.a);this.ab=!0;this.a.f=!0;if(-1==this.lb){var a=this.pb,b=1|(this.pb.__eventBits||0);uF();bG(a,b)}else this.lb|=1;cA(bA(this.pb))[no]=Up;this.pb.style[iu]=gf}w(837,367,Su,aW);_.Yd=function(a){vG(this,a);1==TF(a.type)&&aH(this,!1)};_.a=null;\nfunction bW(a){this.b=a;uI();this.c=new bw;this.i=new bw;a=(xI(),uI(),wI);new sJ(a.d,a.b,a.c,a.e,a.a);var b;b=dA(Bt);this.e=dA(Et);oF(b,this.e);this.o=!0;a=CH();b=(pF(),qF(b));a.appendChild(b);this.pb=a;hx();this.pb.setAttribute(bt,Lx.a);-1==this.lb?(a=this.pb,b=2225|(this.pb.__eventBits||0),uF(),bG(a,b)):this.lb|=2225;this.pb[no]=Tp;a=iG(this.pb)+He;eG(this.ie(),a,!0);this.pb.style[us]=Ze;this.pb.setAttribute(eq,Wt);rG(this,new tI(this),(OB(),OB(),PB))}w(838,407,Ku,bW);\n_.Yd=function(a){switch(TF(a.type)){case 16:this.a=!1;break;case 32:this.a=!0}mI(this,a)};_.Ke=function(a,b){qI(this,a,b);b||this.a&&aH(this.b,!1)};_.a=!0;_.b=null;w(886,1,{});\nfunction cW(a,b,c,d){var e,f,g,h,j,l;h=(!c?b.b:zM(b,c,~~$y(c)))[0][d.length];b=j=e=null;for(c=0,f=!h?0:h.length;c 0) var gc = undefined");else if(aa||r)d.read=function(a){var b=new XMLHttpRequest;b.open("GET",a,!1);b.send(null);return b.responseText},d.readAsync=function(a,b,c){var e=new XMLHttpRequest;e.open("GET",a,!0);e.responseType="arraybuffer";e.onload=function(){200== -e.status||0==e.status&&e.response?b(e.response):c()};e.onerror=c;e.send(null)},"undefined"!=typeof arguments&&(d.arguments=arguments),"undefined"!==typeof console?(d.print||(d.print=function(a){console.log(a)}),d.printErr||(d.printErr=function(a){console.warn(a)})):d.print||(d.print=function(){}),r&&(d.load=importScripts),"undefined"===typeof d.setWindowTitle&&(d.setWindowTitle=function(a){document.title=a});else throw"Unknown runtime environment. Where are we?";function ga(a){eval.call(null,a)} -!d.load&&d.read&&(d.load=function(a){ga(d.read(a))});d.print||(d.print=function(){});d.printErr||(d.printErr=d.print);d.arguments||(d.arguments=[]);d.thisProgram||(d.thisProgram="./this.program");d.print=d.print;d.p=d.printErr;d.preRun=[];d.postRun=[];for(l in k)k.hasOwnProperty(l)&&(d[l]=k[l]); -var k=void 0,x={L:function(a){tempRet0=a},H:function(){return tempRet0},r:function(){return w},j:function(a){w=a},u:function(a){switch(a){case "i1":case "i8":return 1;case "i16":return 2;case "i32":return 4;case "i64":return 8;case "float":return 4;case "double":return 8;default:return"*"===a[a.length-1]?x.l:"i"===a[0]?(a=parseInt(a.substr(1)),assert(0===a%8),a/8):0}},G:function(a){return Math.max(x.u(a),x.l)},M:16,aa:function(a,b){"double"===b||"i64"===b?a&7&&(assert(4===(a&7)),a+=4):assert(0=== -(a&3));return a},T:function(a,b,c){return c||"i64"!=a&&"double"!=a?a?Math.min(b||(a?x.G(a):0),x.l):Math.min(b,8):8},g:function(a,b,c){return c&&c.length?(c.splice||(c=Array.prototype.slice.call(c)),c.splice(0,0,b),d["dynCall_"+a].apply(null,c)):d["dynCall_"+a].call(null,b)},h:[],A:function(a){for(var b=0;b=A)B("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+ -A+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which adjusts the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 "),a=!0;return a?(z=b,0):b},t:function(a,b){return Math.ceil(a/(b?b:16))*(b?b:16)},$:function(a,b,c){return c?+(a>>>0)+4294967296*+(b>>>0):+(a>>>0)+4294967296*+(b|0)},a:8,l:4,N:0};d.Runtime=x;x.addFunction=x.A; -x.removeFunction=x.K;var ha=!1;function assert(a,b){a||B("Assertion failed: "+b)}function ia(a){var b=d["_"+a];if(!b)try{b=eval("_"+a)}catch(c){}assert(b,"Cannot call unknown function "+a+" (perhaps LLVM optimizations or closure removed it?)");return b}var ja,ka; -(function(){function a(a){a=a.toString().match(f).slice(1);return{arguments:a[0],body:a[1],returnValue:a[2]}}function b(){if(!g){g={};for(var b in c)c.hasOwnProperty(b)&&(g[b]=a(c[b]))}}var c={stackSave:function(){x.r()},stackRestore:function(){x.j()},arrayToC:function(a){var b=x.i(a.length);la(a,b);return b},stringToC:function(a){var b=0;null!==a&&void 0!==a&&0!==a&&(b=x.i((a.length<<2)+1),ma(a,b));return b}},e={string:c.stringToC,array:c.arrayToC};ka=function(a,b,c,f,g){a=ia(a);var u=[],C=0;if(f)for(var v= -0;v>0]=b;break;case "i8":D[a>>0]=b;break;case "i16":E[a>>1]=b;break;case "i32":G[a>>2]=b;break;case "i64":tempI64=[b>>>0,(tempDouble=b,1<=+pa(tempDouble)?0>>0:~~+sa((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)];G[a>>2]=tempI64[0];G[a+4>>2]=tempI64[1];break;case "float":ta[a>>2]=b;break;case "double":ua[a>>3]=b;break;default:B("invalid type for setValue: "+ -c)}}d.setValue=oa;function va(a,b){b=b||"i8";"*"===b.charAt(b.length-1)&&(b="i32");switch(b){case "i1":return D[a>>0];case "i8":return D[a>>0];case "i16":return E[a>>1];case "i32":return G[a>>2];case "i64":return G[a>>2];case "float":return ta[a>>2];case "double":return ua[a>>3];default:B("invalid type for setValue: "+b)}return null}d.getValue=va;d.ALLOC_NORMAL=0;d.ALLOC_STACK=1;d.ALLOC_STATIC=2;d.ALLOC_DYNAMIC=3;d.ALLOC_NONE=4; -function H(a,b,c,e){var f,g;"number"===typeof a?(f=!0,g=a):(f=!1,g=a.length);var h="string"===typeof b?b:null;c=4==c?e:["function"===typeof I?I:x.s,x.i,x.s,x.c][void 0===c?2:c](Math.max(g,h?1:b.length));if(f){e=c;assert(0==(c&3));for(a=c+(g&-4);e>2]=0;for(a=c+g;e>0]=0;return c}if("i8"===h)return a.subarray||a.slice?K.set(a,c):K.set(new Uint8Array(a),c),c;e=0;for(var n,m;e>0];c|=e;if(0==e&&!b)break;f++;if(b&&f==b)break}b||(b=f);e="";if(128>c){for(;0>0];if(!c)return b;b+=String.fromCharCode(c)}};d.stringToAscii=function(a,b){return ya(a,b,!1)}; -function za(a,b){for(var c,e,f,g,h,n,m="";;){c=a[b++];if(!c)return m;c&128?(e=a[b++]&63,192==(c&224)?m+=String.fromCharCode((c&31)<<6|e):(f=a[b++]&63,224==(c&240)?c=(c&15)<<12|e<<6|f:(g=a[b++]&63,240==(c&248)?c=(c&7)<<18|e<<12|f<<6|g:(h=a[b++]&63,248==(c&252)?c=(c&3)<<24|e<<18|f<<12|g<<6|h:(n=a[b++]&63,c=(c&1)<<30|e<<24|f<<18|g<<12|h<<6|n))),65536>c?m+=String.fromCharCode(c):(c-=65536,m+=String.fromCharCode(55296|c>>10,56320|c&1023)))):m+=String.fromCharCode(c)}}d.UTF8ArrayToString=za; -d.UTF8ToString=function(a){return za(K,a)}; -function Ba(a,b,c,e){if(!(0=h&&(h=65536+((h&1023)<<10)|a.charCodeAt(++g)&1023);if(127>=h){if(c>=e)break;b[c++]=h}else{if(2047>=h){if(c+1>=e)break;b[c++]=192|h>>6}else{if(65535>=h){if(c+2>=e)break;b[c++]=224|h>>12}else{if(2097151>=h){if(c+3>=e)break;b[c++]=240|h>>18}else{if(67108863>=h){if(c+4>=e)break;b[c++]=248|h>>24}else{if(c+5>=e)break;b[c++]=252|h>>30;b[c++]=128|h>>24&63}b[c++]=128|h>>18&63}b[c++]=128| -h>>12&63}b[c++]=128|h>>6&63}b[c++]=128|h&63}}b[c]=0;return c-f}d.stringToUTF8Array=Ba;d.stringToUTF8=function(a,b,c){return Ba(a,K,b,c)};function Ca(a){for(var b=0,c=0;c=e&&(e=65536+((e&1023)<<10)|a.charCodeAt(++c)&1023);127>=e?++b:b=2047>=e?b+2:65535>=e?b+3:2097151>=e?b+4:67108863>=e?b+5:b+6}return b}d.lengthBytesUTF8=Ca; -function Da(){return Ea().replace(/__Z[\w\d_]+/g,function(a){var b;a:{if(d.___cxa_demangle)try{var c=I(a.length);ma(a.substr(1),c);var e=I(4),f=d.___cxa_demangle(c,0,0,e);if(0===va(e,"i32")&&f){b=na(f);break a}}catch(g){b=a;break a}finally{c&&M(c),e&&M(e),f&&M(f)}x.f("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling");b=a}return a===b?a:a+" ["+b+"]"})} -function Ea(){var a=Error();if(!a.stack){try{throw Error(0);}catch(b){a=b}if(!a.stack)return"(no stack trace available)"}return a.stack.toString()}d.stackTrace=function(){return Da()};function Fa(){var a=z;0O?2*O:O+16777216;O!==A&&(A=O);d.buffer?buffer=d.buffer:buffer=new ArrayBuffer(A);d.HEAP8=D=new Int8Array(buffer); -d.HEAP16=E=new Int16Array(buffer);d.HEAP32=G=new Int32Array(buffer);d.HEAPU8=K=new Uint8Array(buffer);d.HEAPU16=Ga=new Uint16Array(buffer);d.HEAPU32=N=new Uint32Array(buffer);d.HEAPF32=ta=new Float32Array(buffer);d.HEAPF64=ua=new Float64Array(buffer);G[0]=255;if(255!==K[0]||0!==K[3])throw"Typed arrays 2 must be run on a little-endian system";d.HEAP=void 0;d.buffer=buffer;d.HEAP8=D;d.HEAP16=E;d.HEAP32=G;d.HEAPU8=K;d.HEAPU16=Ga;d.HEAPU32=N;d.HEAPF32=ta;d.HEAPF64=ua; -function P(a){for(;0>0]=a[c],c+=1}d.writeStringToMemory=ma;function la(a,b){for(var c=0;c>0]=a[c]}d.writeArrayToMemory=la; -function ya(a,b,c){for(var e=0;e>0]=a.charCodeAt(e);c||(D[b>>0]=0)}d.writeAsciiToMemory=ya;Math.imul&&-5===Math.imul(4294967295,5)||(Math.imul=function(a,b){var c=a&65535,e=b&65535;return c*e+((a>>>16)*e+c*(b>>>16)<<16)|0});Math.X=Math.imul;Math.clz32||(Math.clz32=function(a){a=a>>>0;for(var b=0;32>b;b++)if(a&1<<31-b)return b;return 32});Math.Q=Math.clz32;var pa=Math.abs,sa=Math.ceil,ra=Math.floor,qa=Math.min,R=0,Ta=null,Ua=null; -d.addRunDependency=function(){R++;d.monitorRunDependencies&&d.monitorRunDependencies(R)};d.removeRunDependency=function(){R--;d.monitorRunDependencies&&d.monitorRunDependencies(R);if(0==R&&(null!==Ta&&(clearInterval(Ta),Ta=null),Ua)){var a=Ua;Ua=null;a()}};d.preloadedImages={};d.preloadedAudios={};Ha=8;y=Ha+94496;Na.push({F:function(){Va()}}); -H([122,82,1,0,1,0,0,0,1,0,0,0,0,0,0,0,17,164,214,36,13,32,240,63,0,0,0,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,82,1,0,2,0,0,0,2,0,0,0,0,0,0,0,135,154,154,100,225,28,0,64,0,0,0,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,82,1,0,3,0,0,0,3,0,0,0,0,0,0,0,89,122,73,112,222,32,8,64,0,0,0,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,82,1,0,4,0,0,0,4,0,0,0,0,0,0,0,223,224,11,147,169,2,16,64,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,131,82,1,0,7,0,0,0,7,0,0,0,0,0,0,0,170,241,210,77,98,16,28,64,1,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,134,82,1,0,9,0,0,0,9,0,0,0,0,0,0,0,160,84,251,116,60,6,34,64,1,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,137,82,1,0,11,0,0,0,11,0,0,0,0,0,0,0,162,180,55,248,194,4,38,64,0,0,0,0,20,0,0,0,0,0,0,0,3,0,0,0,0,4,0,0,0,0,3,0,0,0,0,2,0,0,0,0,1,0,0,0,0,0,0,0, -139,82,1,0,12,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,40,64,0,0,0,0,25,0,0,0,0,0,0,0,2,0,0,0,0,3,0,0,0,0,4,0,0,0,0,3,0,0,0,0,2,0,0,0,0,0,0,0,141,82,1,0,14,0,0,0,14,0,0,0,0,0,0,0,145,239,82,234,146,1,44,64,0,0,0,0,30,0,0,0,0,0,0,0,1,0,0,0,0,2,0,0,0,0,3,5,0,0,0,4,0,0,0,0,3,0,0,0,0,0,0,0,143,82,1,0,16,0,0,0,16,0,0,0,0,0,0,0,234,82,76,115,101,253,47,64,0,0,0,0,35,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,2,0,0,0,0,3,5,0,0,0,4,0,0,0,0,0,0,0,145,82,1,0,19,0,0,0,19,0,0,0,0,0,0,0,0,31,122,90,151,255,50,64,0,0,0,0,40, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,2,0,0,0,0,3,5,0,0,0,0,0,0,147,82,1,0,20,0,0,0,20,0,0,0,0,0,0,0,3,62,63,140,16,254,51,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,150,82,1,0,23,0,0,0,23,0,0,0,0,0,0,0,218,143,20,145,97,253,54,64,1,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,153,82,1,0,24,0,0,0,24,0,0,0,0,0,0,0,92,143,194,245,40,252,55,64,1,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -0,156,82,1,0,27,0,0,0,27,0,0,0,0,0,0,0,65,183,151,52,70,251,58,64,1,0,0,0,15,0,0,0,0,0,0,0,3,5,0,0,0,4,0,0,0,0,3,0,0,0,0,2,0,0,0,0,1,0,0,0,0,0,0,0,159,82,1,0,28,0,0,0,28,0,0,0,0,0,0,0,125,19,249,228,23,250,59,64,0,0,0,0,18,0,0,0,0,0,0,0,2,0,0,0,0,3,5,0,0,0,4,0,0,0,0,3,0,0,0,0,2,0,0,0,0,0,0,0,162,82,1,0,31,0,0,0,31,0,0,0,0,0,0,0,106,22,104,119,72,249,62,64,0,0,0,0,21,0,0,0,0,0,0,0,1,3,5,7,0,2,4,6,0,0,3,5,0,0,0,4,0,0,0,0,3,0,0,0,0,0,0,0,164,82,1,0,32,0,0,0,32,0,0,0,0,0,0,0,91,230,25,160,217,248,63, -64,0,0,0,0,25,0,0,0,0,0,0,0,0,0,0,0,0,1,3,5,7,0,2,4,6,0,0,3,5,0,0,0,4,0,0,0,0,0,0,0,166,82,1,0,35,0,0,0,35,0,0,0,0,0,0,0,195,254,194,93,3,124,65,64,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,5,7,0,2,4,6,0,0,3,5,0,0,0,0,0,0,169,82,1,0,40,0,0,0,40,0,0,0,0,0,0,0,208,213,86,236,47,251,67,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,172,82,1,0,39,0,0,0,39,0,0,0,0,0,0,0,222,147,135,133,90,123,67,64,1,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,174,82,1,0,40,0,0,0,40,0,0,0,0,0,0,0,151,144,15,122,54,251,67,64,1,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,177,82,1,0,45,0,0,0,45,0,0,0,0,0,0,0,174,245,69,66,91,122,70,64,1,0,0,0,13,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,82,1,0,48,0,0,0,48,0,0,0,0,0,0,0,33,31,244,108,86,249,71,64,1,0,0,0,15,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,183,82,1,0,51,0,0,0,51,0,0,0,0,0,0,0,183,93,104, -174,211,120,73,64,1,0,0,0,16,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,4,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,185,82,1,0,52,0,0,0,52,0,0,0,0,0,0,0,170,241,210,77,98,248,73,64,1,0,0,0,16,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,188,82,1,0,55,0,0,0,55,0,0,0,0,0,0,0,163,1,188,5,18,120,75,64,3,0,0,0,15,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,4,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,191,82,1,0,56,0,0,0,56,0,0,0,0,0,0,0,228,131,158,205,170,247,75,64,3,0,0,0,18,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2, -3,4,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,194,82,1,0,59,0,0,0,59,0,0,0,0,0,0,0,72,80,252,24,115,119,77,64,3,0,0,0,18,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,197,82,1,0,59,0,0,0,58,0,0,0,0,0,0,0,114,249,15,233,183,247,76,64,3,0,0,0,18,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,82,1,0,64,0,0,0,63,0,0,0,0,0,0,0,73,46,255,33,253,118,79,64,1,0,0,0,19,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,203,82,1,0,65,0,0,0,64,0,0,0,0, -0,0,0,152,22,245,73,238,246,79,64,1,0,0,0,16,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,206,82,1,0,70,0,0,0,69,0,0,0,0,0,0,0,94,75,200,7,61,59,81,64,1,0,0,0,18,0,0,0,0,0,0,0,3,5,0,0,0,4,0,0,0,0,3,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,209,82,1,0,73,0,0,0,74,0,0,0,0,0,0,0,30,180,13,146,244,122,82,64,0,0,0,0,18,0,0,0,0,0,0,0,2,4,6,0,0,3,5,0,0,0,4,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,212,82,1,0,75,0,0,0,75,0,0,0,0,0,0,0,187,75,61,102,251,186,82,64,0,0,0,0,20,0,0,0,0,0,0,0,1,3,5,7, -0,2,4,6,0,0,3,5,0,0,0,4,0,0,0,0,3,0,0,0,0,0,0,0,215,82,1,0,79,0,0,0,80,0,0,0,0,0,0,0,39,9,211,65,168,250,83,64,0,0,0,0,24,0,0,0,0,0,0,0,0,0,0,0,0,1,3,5,7,0,2,4,6,0,0,3,5,0,0,0,4,0,0,0,0,0,0,0,218,82,1,0,80,0,0,0,79,0,0,0,0,0,0,0,30,15,199,4,198,186,83,64,0,0,0,0,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,5,7,0,2,4,6,0,0,3,5,0,0,0,0,0,0,221,82,1,0,84,0,0,0,84,0,0,0,0,0,0,0,117,147,24,4,86,250,84,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,82,1,0,85,0,0,0,85, -0,0,0,0,0,0,0,138,31,99,238,90,58,85,64,1,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,227,82,1,0,88,0,0,0,88,0,0,0,0,0,0,0,125,208,179,89,245,249,85,64,1,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,230,82,1,0,89,0,0,0,89,0,0,0,0,0,0,0,75,176,56,156,249,57,86,64,1,0,0,0,12,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,82,1,0,91,0,0,0,90,0,0,0,0,0,0,0,61,44,212,154,230,121,86,64,1,0,0,0,14,0,0,0,1,0,0,0, -0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,235,82,1,0,93,0,0,0,93,0,0,0,0,0,0,0,11,70,37,117,2,58,87,64,1,0,0,0,16,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,238,82,1,0,96,0,0,0,98,0,0,0,0,0,0,0,25,115,215,18,242,121,88,64,1,0,0,0,18,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,241,82,1,0,98,0,0,0,98,0,0,0,0,0,0,0,153,187,150,144,15,122,88,64,1,0,0,0,19,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,82,1,0, -101,0,0,0,102,0,0,0,0,0,0,0,118,113,27,13,224,121,89,64,1,0,0,0,22,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,4,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,247,82,1,0,103,0,0,0,103,0,0,0,0,0,0,0,203,161,69,182,243,185,89,64,1,0,0,0,22,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,250,82,1,0,106,0,0,0,106,0,0,0,0,0,0,0,231,251,169,241,210,121,90,64,1,0,0,0,22,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,253,82,1,0,108,0,0,0,107,0,0,0,0,0,0,0,4,231,140,40,237,185,90,64, -1,0,0,0,19,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,83,1,0,112,0,0,0,114,0,0,0,0,0,0,0,54,205,59,78,209,121,92,64,1,0,0,0,17,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,83,1,0,115,0,0,0,115,0,0,0,0,0,0,0,174,182,98,127,217,185,92,64,1,0,0,0,17,0,0,0,0,0,0,0,3,5,0,0,0,2,4,0,0,0,3,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,6,83,1,0,119,0,0,0,120,0,0,0,0,0,0,0,224,156,17,165,189,249,93,64,3,0,0,0,18,0,0,0,0,0,0,0,2,4,6,0,0,3,5,0,0,0,2,4,0,0,0,3,0,0,0, -0,0,0,0,0,0,0,0,0,9,83,1,0,122,0,0,0,121,0,0,0,0,0,0,0,253,135,244,219,215,57,94,64,1,0,0,0,19,0,0,0,0,0,0,0,1,3,5,7,0,2,4,6,0,0,3,5,0,0,0,2,4,0,0,0,3,0,0,0,0,0,0,0,12,83,1,0,128,0,0,0,130,0,0,0,0,0,0,0,84,116,36,151,255,60,96,64,0,0,0,0,21,0,0,0,0,0,0,0,0,0,0,0,0,1,3,5,7,0,2,4,6,0,0,3,5,0,0,0,2,4,0,0,0,0,0,0,15,83,1,0,127,0,0,0,127,0,0,0,0,0,0,0,217,206,247,83,227,185,95,64,0,0,0,0,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,5,7,0,2,4,6,0,0,3,5,0,0,0,0,0,0,17,83,1,0,131,0,0,0,132,0,0,0,0,0,0,0,9,138, -31,99,238,124,96,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,83,1,0,133,0,0,0,133,0,0,0,0,0,0,0,39,218,85,72,249,156,96,64,1,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23,83,1,0,137,0,0,0,138,0,0,0,0,0,0,0,219,138,253,101,247,60,97,64,1,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,26,83,1,0,139,0,0,0,139,0,0,0,0,0,0,0,226,204,175,230,0,93,97,64,1,0,0,0,11,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,83,1,0,140,0,0,0,140,0,0,0,0,0,0,0,140,185,107,9,249,124,97,64,3,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,83,1,0,141,0,0,0,141,0,0,0,0,0,0,0,101,252,251,140,11,157,97,64,3,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,83,1,0,144,0,0,0,142,0,0,0,0,0,0,0,166,94,183,8,12,189,97,64,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,83,1,0,145,0,0,0,145,0,0, -0,0,0,0,0,62,121,88,168,53,29,98,64,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41,83,1,0,150,0,0,0,152,0,0,0,0,0,0,0,51,196,177,46,110,253,98,64,3,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,83,1,0,152,0,0,0,153,0,0,0,0,0,0,0,104,34,108,120,122,29,99,64,3,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,83,1,0,157,0,0,0,158,0,0,0,0,0,0,0,134,232,16,56,146,189,99,64,1,0,0,0,0,0,0,0,1,0,0,0,0,0, -0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,83,1,0,159,0,0,0,159,0,0,0,0,0,0,0,81,107,154,119,156,221,99,64,3,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,83,1,0,163,0,0,0,164,0,0,0,0,0,0,0,47,110,163,1,188,125,100,64,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,83,1,0,165,0,0,0,165,0,0,0,0,0,0,0,0,111,129,4,197,157,100,64,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,59,83,1,0,167, -0,0,0,166,0,0,0,0,0,0,0,0,111,129,4,197,189,100,64,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,62,83,1,0,169,0,0,0,169,0,0,0,0,0,0,0,38,30,80,54,229,29,101,64,3,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65,83,1,0,173,0,0,0,174,0,0,0,0,0,0,0,220,70,3,120,11,190,101,64,3,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,83,1,0,175,0,0,0,175,0,0,0,0,0,0,0,117,2,154,8,27,222,101,64,1,0,0,0,0,0,0,0,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,71,83,1,0,178,0,0,0,180,0,0,0,0,0,0,0,152,76,21,140,74,126,102,64,1,0,0,0,13,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,74,83,1,0,181,0,0,0,181,0,0,0,0,0,0,0,254,72,17,25,86,158,102,64,1,0,0,0,15,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77,83,1,0,184,0,0,0,184,0,0,0,0,0,0,0,223,79,141,151,110,254,102,64,3,0,0,0,17,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,79,83,1,0,186,0,0,0,187,0,0,0,0,0,0,0,138,176,225,233,149,94,103,64,3,0,0,0,19,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,4,6,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,82,83,1,0,190,0,0,0,192,0,0,0,0,0,0,0,84,227,165,155,196,254,103,64,3,0,0,0,22,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,4,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,83,1,0,192,0,0,0,193,0,0,0,0,0,0,0,48,42,169,19,208,30,104,64,3,0,0,0,22,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,4,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,88,83,1,0,195,0,0,0,195,0,0,0,0,0,0,0,201,229,63,164,223, -94,104,64,3,0,0,0,22,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,91,83,1,0,197,0,0,0,197,0,0,0,0,0,0,0,229,179,60,15,238,158,104,64,1,0,0,0,24,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,94,83,1,0,201,0,0,0,202,0,0,0,0,0,0,0,34,254,97,75,15,63,105,64,3,0,0,0,19,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,83,1,0,204,0,0,0,205,0,0,0,0,0,0,0,30,167,232,72,46,159,105,64,3,0,0,0,18,0,0,0,0,0,0,0,3,5,0,0,0,2,4,0,0,0,1,3,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,83,1,0,207,0,0,0,208,0,0,0,0,0,0,0,128,44,68,135,64,255,105,64,3,0,0,0,18,0,0,0,0,0,0,0,2,4,6,0,0,3,5,0,0,0,2,4,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,103,83,1,0,209,0,0,0,209,0,0,0,0,0,0,0,106,106,217,90,95,31,106,64,1,0,0,0,19,0,0,0,0,0,0,0,1,3,5,7,0,2,4,6,0,0,3,5,0,0,0,2,4,0,0,0,3,0,0,0,0,0,0,0,106,83,1,0,209,0,0,0,209,0,0,0,0,0,0,0,229,242,31,210,111,31,106,64,3,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0,0,1,3,5,7,0,2,4,6,0,0,3,5,0,0,0,2,4,0,0,0,0,0,0,109,83,1,0,210,0,0,0,210,0, -0,0,0,0,0,0,54,60,189,82,150,63,106,64,0,0,0,0,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,5,7,0,2,4,6,0,0,3,5,0,0,0,0,0,0,112,83,1,0,222,0,0,0,222,0,0,0,0,0,0,0,195,245,40,92,143,192,107,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,115,83,1,0,223,0,0,0,223,0,0,0,0,0,0,0,102,247,228,97,161,224,107,64,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,118,83,1,0,226,0,0,0,226,0,0,0,0,0,0,0,185,223,161,40,208,64,108,64,1,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,121,83,1,0,227,0,0,0,227,0,0,0,0,0,0,0,217,206,247,83,227,96,108,64,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,83,1,0,232,0,0,0,232,0,0,0,0,0,0,0,156,51,162,180,55,1,109,64,3,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,83,1,0,231,0,0,0,231,0,0,0,0,0,0,0,147,82,208,237,37,225,108,64,3,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,5,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,130,83,1,0,238,0,0,0,238,0,0,0,0,0,0,0,216,158,89,18,160,193,109,64,3,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,132,83,1,0,237,0,0,0,237,0,0,0,0,0,0,0,191,212,207,155,138,161,109,64,3,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,135,83,1,0,244,0,0,0,244,0,0,0,0,0,0,0,231,140,40,237,13,130,110,64,3,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,138,83,1,0,243,0,0,0,243,0,0,0,0,0,0,0,148,222,55,190, -246,97,110,64,3,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,141,83,1,0,247,0,0,0,247,0,0,0,0,0,0,0,21,29,201,229,63,226,110,64,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,83,1,0,247,0,0,0,247,0,0,0,0,0,0,0,21,29,201,229,63,226,110,64,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,147,83,1,0,251,0,0,0,251,0,0,0,0,0,0,0,95,152,76,21,140,98,111,64,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,150,83,1,0,252,0,0,0,252,0,0,0,0,0,0,0,123,131,47,76,166,130,111,64,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,153,83,1,0,1,1,0,0,1,1,0,0,0,0,0,0,152,221,147,135,133,17,112,64,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,156,83,1,0,2,1,0,0,2,1,0,0,0,0,0,0,43,246,151,221,147,33,112,64,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,83,1,0,3,1,0,0,3,1,0,0,0,0,0, -0,170,130,81,73,157,49,112,64,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,162,83,1,0,4,1,0,0,4,1,0,0,0,0,0,0,249,15,233,183,175,65,112,64,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,165,83,1,0,5,1,0,0,5,1,0,0,0,0,0,0,52,17,54,60,189,81,112,64,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,168,83,1,0,14,1,0,0,14,1,0,0,0,0,0,0,106,188,116,147,24,226,112,64,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,83,1,0,13,1,0,0,13,1,0,0,0,0,0,0,242,210,77,98,16,210,112,64,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,174,83,1,0,14,1,0,0,14,1,0,0,0,0,0,0,227,165,155,196,32,226,112,64,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,177,83,1,0,14,1,0,0,14,1,0,0,0,0,0,0,160,26,47,221,36,226,112,64,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,83,1,0,22,1,0,0,22,1, -0,0,0,0,0,0,209,34,219,249,126,98,113,64,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,183,83,1,0,25,1,0,0,25,1,0,0,0,0,0,0,113,61,10,215,163,146,113,64,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,83,1,0,25,1,0,0,25,1,0,0,0,0,0,0,45,178,157,239,167,146,113,64,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,189,83,1,0,29,1,0,0,29,1,0,0,0,0,0,0,70,182,243,253,212,210,113,64,1,0,0,0,0,0,0,0,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,83,1,0,22,1,0,0,22,1,0,0,0,0,0,0,0,0,0,0,0,96,113,64,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,195,83,1,0,33,1,0,0,33,1,0,0,0,0,0,0,215,163,112,61,10,19,114,64,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,198,83,1,0,33,1,0,0,33,1,0,0,0,0,0,0,0,0,0,0,0,16,114,64,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,201,83,1,0,37,1,0,0,37, -1,0,0,0,0,0,0,37,6,129,149,67,83,114,64,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,204,83,1,0,41,1,0,0,41,1,0,0,0,0,0,0,0,0,0,0,0,144,114,64,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,207,83,1,0,38,1,0,0,38,1,0,0,0,0,0,0,0,0,0,0,0,96,114,64,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,83,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,249,104,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,41,0,0,157,84,1,0,0,0,0,0,1,0,0,0,160,30,0,0,0,0,0,0,164,40,0,0,220,84,1,0,16,41,0,0,14,85,1,0,0,0,0,0,1,0,0,0,160,30,0,0,0,0,0,0,16,41,0,0,110,85,1,0,0,0,0,0,1,0,0,0,160,30,0,0,0,0,0,0,164,40,0,0,186,85,1,0,164,40,0,0,221,85,1,0,164,40,0,0,63,86,1,0,164,40,0,0,133,86,1,0,164,40,0,0,195,86,1,0,164,40,0,0,10,87,1,0,164,40,0,0,70,87,1,0,164,40, -0,0,139,87,1,0,164,40,0,0,170,87,1,0,164,40,0,0,231,87,1,0,164,40,0,0,244,88,1,0,164,40,0,0,50,89,1,0,164,40,0,0,113,89,1,0,204,40,0,0,149,100,1,0,96,31,0,0,0,0,0,0,204,40,0,0,66,100,1,0,64,31,0,0,0,0,0,0,204,40,0,0,103,100,1,0,112,31,0,0,0,0,0,0,164,40,0,0,136,100,1,0,204,40,0,0,183,100,1,0,96,31,0,0,0,0,0,0,244,40,0,0,223,100,1,0,244,40,0,0,225,100,1,0,244,40,0,0,182,49,0,0,244,40,0,0,7,50,0,0,244,40,0,0,227,100,1,0,244,40,0,0,8,77,1,0,244,40,0,0,4,77,1,0,244,40,0,0,229,100,1,0,244,40,0,0,231,100, -1,0,244,40,0,0,233,100,1,0,244,40,0,0,56,48,0,0,244,40,0,0,235,100,1,0,244,40,0,0,10,77,1,0,204,40,0,0,237,100,1,0,64,31,0,0,0,0,0,0,49,63,1,0,217,45,0,0,225,45,0,0,0,0,0,0,49,63,1,0,233,45,0,0,233,45,0,0,0,0,0,0,49,63,1,0,242,45,0,0,242,45,0,0,0,0,0,0,249,104,1,0,198,45,0,0,198,45,0,0,1,0,0,0,49,63,1,0,249,45,0,0,249,45,0,0,1,0,0,0,1,46,0,0,4,46,0,0,4,46,0,0,1,0,0,0,16,46,0,0,19,46,0,0,122,82,1,0,1,0,0,0,27,46,0,0,30,46,0,0,30,46,0,0,1,0,0,0,37,46,0,0,40,46,0,0,40,46,0,0,0,0,0,0,48,46,0,0,51,46, -0,0,51,46,0,0,0,0,0,0,57,46,0,0,60,46,0,0,60,46,0,0,0,0,0,0,64,46,0,0,67,46,0,0,80,46,0,0,0,0,0,0,93,46,0,0,96,46,0,0,206,45,0,0,0,0,0,0,123,46,0,0,126,46,0,0,126,46,0,0,1,0,0,0,16,46,0,0,132,46,0,0,147,46,0,0,1,0,0,0,158,46,0,0,249,45,0,0,249,45,0,0,1,0,0,0,16,46,0,0,161,46,0,0,169,46,0,0,1,0,0,0,177,46,0,0,180,46,0,0,180,46,0,0,0,0,0,0,194,46,0,0,197,46,0,0,249,45,0,0,0,0,0,0,49,63,1,0,217,45,0,0,225,45,0,0,0,0,0,0,49,63,1,0,233,45,0,0,233,45,0,0,0,0,0,0,49,63,1,0,237,46,0,0,1,47,0,0,0,0,0,0,49, -63,1,0,21,47,0,0,21,47,0,0,0,0,0,0,249,104,1,0,198,45,0,0,198,45,0,0,1,0,0,0,49,63,1,0,35,47,0,0,54,47,0,0,1,0,0,0,64,47,0,0,68,47,0,0,90,47,0,0,1,0,0,0,104,47,0,0,108,47,0,0,125,47,0,0,0,0,0,0,142,47,0,0,147,47,0,0,165,47,0,0,0,0,0,0,183,47,0,0,60,46,0,0,60,46,0,0,0,0,0,0,188,47,0,0,68,47,0,0,90,47,0,0,0,0,0,0,193,47,0,0,199,47,0,0,222,47,0,0,0,0,0,0,238,47,0,0,126,46,0,0,126,46,0,0,0,0,0,0,243,47,0,0,248,47,0,0,248,47,0,0,0,0,0,0,254,47,0,0,3,48,0,0,3,48,0,0,0,0,0,0,7,48,0,0,68,47,0,0,90,47,0,0, -1,0,0,0,11,48,0,0,68,47,0,0,90,47,0,0,1,0,0,0,15,48,0,0,19,48,0,0,249,104,1,0,1,0,0,0,5,50,0,0,12,50,0,0,126,82,1,0,124,82,1,0,122,82,1,0,31,64,0,0,192,14,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,36,0,0,0,0,118,17,0,128,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,69,1,0,228,69,1,0,232,69,1,0,236,69,1,0,240,69,1,0,244,69,1,0,248,69,1,0,224,69,1,0,27,70,1,0,31,70,1,0,35,70,1,0,224,69,1,0,49,70,1,0,52,70,1,0,55,70,1,0,0,0,0,0,1,0,0,0,198,0,0,0,197,0,0,0,196,0,0,0,202, -0,0,0,2,0,0,0,211,0,0,0,215,0,0,0,191,0,0,0,190,0,0,0,189,0,0,0,188,0,0,0,187,0,0,0,206,0,0,0,210,0,0,0,214,0,0,0,183,0,0,0,182,0,0,0,181,0,0,0,180,0,0,0,179,0,0,0,178,0,0,0,177,0,0,0,176,0,0,0,175,0,0,0,174,0,0,0,173,0,0,0,172,0,0,0,171,0,0,0,170,0,0,0,169,0,0,0,205,0,0,0,209,0,0,0,213,0,0,0,165,0,0,0,164,0,0,0,163,0,0,0,162,0,0,0,161,0,0,0,160,0,0,0,159,0,0,0,158,0,0,0,157,0,0,0,156,0,0,0,155,0,0,0,154,0,0,0,153,0,0,0,152,0,0,0,151,0,0,0,204,0,0,0,208,0,0,0,212,0,0,0,147,0,0,0,146,0,0,0,145,0,0, -0,144,0,0,0,143,0,0,0,142,0,0,0,141,0,0,0,140,0,0,0,139,0,0,0,138,0,0,0,137,0,0,0,136,0,0,0,135,0,0,0,134,0,0,0,133,0,0,0,132,0,0,0,131,0,0,0,130,0,0,0,129,0,0,0,128,0,0,0,127,0,0,0,126,0,0,0,125,0,0,0,124,0,0,0,123,0,0,0,122,0,0,0,121,0,0,0,201,0,0,0,119,0,0,0,203,0,0,0,207,0,0,0,116,0,0,0,115,0,0,0,114,0,0,0,113,0,0,0,112,0,0,0,111,0,0,0,110,0,0,0,109,0,0,0,108,0,0,0,107,0,0,0,106,0,0,0,105,0,0,0,104,0,0,0,103,0,0,0,102,0,0,0,101,0,0,0,100,0,0,0,99,0,0,0,98,0,0,0,97,0,0,0,96,0,0,0,95,0,0,0,94,0, -0,0,93,0,0,0,92,0,0,0,91,0,0,0,90,0,0,0,89,0,0,0,88,0,0,0,87,0,0,0,86,0,0,0,85,0,0,0,84,0,0,0,83,0,0,0,82,0,0,0,81,0,0,0,0,0,0,0,1,0,0,0,198,0,0,0,197,0,0,0,196,0,0,0,202,0,0,0,2,0,0,0,216,0,0,0,215,0,0,0,191,0,0,0,190,0,0,0,189,0,0,0,188,0,0,0,187,0,0,0,206,0,0,0,210,0,0,0,214,0,0,0,183,0,0,0,182,0,0,0,181,0,0,0,180,0,0,0,179,0,0,0,178,0,0,0,177,0,0,0,176,0,0,0,175,0,0,0,174,0,0,0,173,0,0,0,172,0,0,0,171,0,0,0,170,0,0,0,169,0,0,0,205,0,0,0,209,0,0,0,213,0,0,0,165,0,0,0,164,0,0,0,163,0,0,0,162,0, -0,0,161,0,0,0,160,0,0,0,159,0,0,0,158,0,0,0,157,0,0,0,156,0,0,0,155,0,0,0,154,0,0,0,153,0,0,0,152,0,0,0,151,0,0,0,204,0,0,0,208,0,0,0,212,0,0,0,147,0,0,0,146,0,0,0,145,0,0,0,144,0,0,0,143,0,0,0,142,0,0,0,141,0,0,0,140,0,0,0,139,0,0,0,138,0,0,0,137,0,0,0,136,0,0,0,135,0,0,0,134,0,0,0,133,0,0,0,132,0,0,0,131,0,0,0,130,0,0,0,129,0,0,0,128,0,0,0,127,0,0,0,126,0,0,0,125,0,0,0,124,0,0,0,123,0,0,0,122,0,0,0,121,0,0,0,201,0,0,0,119,0,0,0,203,0,0,0,207,0,0,0,116,0,0,0,115,0,0,0,114,0,0,0,113,0,0,0,112,0,0, -0,111,0,0,0,110,0,0,0,109,0,0,0,108,0,0,0,107,0,0,0,106,0,0,0,105,0,0,0,104,0,0,0,103,0,0,0,102,0,0,0,101,0,0,0,100,0,0,0,99,0,0,0,98,0,0,0,97,0,0,0,96,0,0,0,95,0,0,0,94,0,0,0,93,0,0,0,92,0,0,0,91,0,0,0,90,0,0,0,89,0,0,0,88,0,0,0,87,0,0,0,86,0,0,0,85,0,0,0,84,0,0,0,83,0,0,0,82,0,0,0,81,0,0,0,255,0,0,0,176,38,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,2,105,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,39,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,10,105,1,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,39,0,0,156,39,0,0,9,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,2,0,0,0,18,109,1,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255],"i8",4,x.a); -H([5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,100,0,0,0,232,3,0,0,16,39,0,0,160,134,1,0,64,66,15,0,128,150,152,0,0,225,245,5,0,0,0,0,64,31,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,6,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,80,31,0,0,1,0,0,0,5,0,0,0,3,0,0,0,4,0,0,0,6,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,120,31,0,0,1,0,0,0,6,0,0,0,3,0,0,0,4,0,0,0,7,0,0,0,0,0,0,0,240,31,0,0,1,0,0, -0,7,0,0,0,3,0,0,0,4,0,0,0,6,0,0,0,3,0,0,0,3,0,0,0,3,0,0,0,0,0,3,0,2,0,1,0,82,0,255,255,254,255,253,255,78,111,32,100,101,115,99,114,105,112,116,105,111,110,40,37,100,41,0,85,78,75,78,79,87,78,95,69,82,82,40,37,100,41,0,83,116,114,117,99,116,117,114,101,32,110,111,114,109,97,108,105,122,97,116,105,111,110,32,116,105,109,101,111,117,116,0,67,97,110,110,111,116,32,112,114,111,99,101,115,115,32,97,114,111,109,97,116,105,99,32,98,111,110,100,115,0,67,97,110,110,111,116,32,112,114,111,99,101,115,115,32, -102,114,101,101,32,114,97,100,105,99,97,108,32,99,101,110,116,101,114,0,85,78,75,78,79,87,78,95,69,82,82,0,87,114,111,110,103,32,111,114,32,109,105,115,115,105,110,103,32,99,104,101,109,105,99,97,108,32,102,111,114,109,117,108,97,0,67,65,78,79,78,95,69,82,82,0,83,84,69,82,69,79,95,67,65,78,79,78,95,69,82,82,0,67,65,76,67,95,83,84,69,82,69,79,95,69,82,82,0,82,69,77,79,86,69,95,83,84,69,82,69,79,95,69,82,82,0,85,115,101,114,32,114,101,113,117,101,115,116,101,100,32,116,101,114,109,105,110,97,116,105, -111,110,0,83,84,69,82,69,79,66,79,78,68,95,69,82,82,0,65,84,79,77,67,79,85,78,84,95,69,82,82,0,83,84,69,82,69,79,67,79,85,78,84,95,69,82,82,0,73,83,79,95,72,95,69,82,82,0,84,105,109,101,32,108,105,109,105,116,32,101,120,99,101,101,100,101,100,0,77,65,80,67,79,85,78,84,95,69,82,82,0,73,83,79,84,65,85,67,79,85,78,84,95,69,82,82,0,84,65,85,67,79,85,78,84,95,69,82,82,0,73,83,79,67,79,85,78,84,95,69,82,82,0,82,65,78,75,73,78,71,95,69,82,82,0,76,69,78,71,84,72,95,77,73,83,77,65,84,67,72,0,65,82,82,65,89, -32,79,86,69,82,70,76,79,87,0,46,46,46,0,80,114,111,116,111,110,40,115,41,32,97,100,100,101,100,47,114,101,109,111,118,101,100,0,67,104,97,114,103,101,115,32,110,101,117,116,114,97,108,105,122,101,100,0,79,109,105,116,116,101,100,32,117,110,100,101,102,105,110,101,100,32,115,116,101,114,101,111,0,46,109,111,108,0,46,116,120,116,0,46,108,111,103,0,46,112,114,98,0,83,84,68,73,79,0,73,78,80,65,85,88,0,83,68,70,58,0,83,84,65,82,84,58,0,69,78,68,58,0,82,69,67,79,82,68,58,0,78,79,76,65,66,69,76,83,0,83, -65,86,69,79,80,84,0,65,85,88,78,79,78,69,0,79,85,84,69,82,82,73,78,67,72,73,0,77,73,83,77,65,84,67,72,73,83,69,82,82,79,82,0,79,85,84,80,85,84,83,68,70,0,83,100,102,65,116,111,109,115,68,84,0,69,81,85,0,83,78,79,78,0,78,69,87,80,83,79,70,70,0,68,79,78,79,84,65,68,68,72,0,83,82,69,76,0,83,82,65,67,0,83,85,67,70,0,67,104,105,114,97,108,70,108,97,103,79,78,0,67,104,105,114,97,108,70,108,97,103,79,70,70,0,83,85,85,0,83,76,85,85,68,0,70,73,88,69,68,72,0,82,69,67,77,69,84,0,75,69,84,0,49,53,84,0,87,97, -114,110,79,110,69,109,112,116,121,83,116,114,117,99,116,117,114,101,0,76,97,114,103,101,77,111,108,101,99,117,108,101,115,0,80,111,108,121,109,101,114,115,0,75,101,121,0,88,72,97,115,104,49,0,88,72,97,115,104,50,0,73,110,67,104,73,50,73,110,67,104,73,0,73,110,67,104,73,50,83,116,114,117,99,116,0,85,110,114,101,99,111,103,110,105,122,101,100,32,111,112,116,105,111,110,58,32,34,37,115,34,46,10,0,84,101,114,109,105,110,97,116,105,110,103,58,32,103,101,110,101,114,97,116,105,111,110,32,111,102,32,73, -110,67,104,73,75,101,121,32,105,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,32,119,105,116,104,32,39,67,111,109,112,114,101,115,115,39,32,111,112,116,105,111,110,10,0,84,101,114,109,105,110,97,116,105,110,103,58,32,103,101,110,101,114,97,116,105,111,110,32,111,102,32,73,110,67,104,73,75,101,121,32,105,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,32,105,110,32,73,110,67,104,73,32,99,111,110,118,101,114,115,105,111,110,32,109,111,100,101,10,0,84,101,114,109,105,110,97,116,105,110, -103,58,32,103,101,110,101,114,97,116,105,111,110,32,111,102,32,73,110,67,104,73,75,101,121,32,105,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,32,119,105,116,104,32,39,79,117,116,112,117,116,83,68,70,39,32,111,112,116,105,111,110,10,0,78,85,76,0,72,97,115,104,32,101,120,116,101,110,115,105,111,110,40,115,41,32,110,111,116,32,103,101,110,101,114,97,116,101,100,58,32,73,110,67,104,73,75,101,121,32,110,111,116,32,114,101,113,117,101,115,116,101,100,0,59,0,118,101,114,115,105,111,110,0,116,121, -112,101,0,49,0,50,0,51,0,102,105,120,101,100,95,72,0,102,105,120,101,100,45,72,0,105,115,111,116,111,112,105,99,0,115,116,101,114,101,111,0,102,111,114,109,117,108,97,0,47,99,0,99,111,110,110,101,99,116,105,111,110,115,0,47,104,0,72,95,97,116,111,109,115,0,47,113,0,99,104,97,114,103,101,0,47,112,0,112,114,111,116,111,110,115,0,47,98,0,100,98,111,110,100,0,47,116,0,115,112,51,0,47,109,0,115,112,51,58,105,110,118,101,114,116,101,100,0,97,98,115,46,105,110,118,101,114,116,101,100,0,47,115,0,116,121, -112,101,32,40,49,61,97,98,115,44,32,50,61,114,101,108,44,32,51,61,114,97,99,41,0,47,105,0,97,116,111,109,115,0,101,120,99,104,97,110,103,101,97,98,108,101,95,72,0,72,45,105,115,111,116,111,112,105,99,0,47,102,0,72,95,102,105,120,101,100,0,72,45,102,105,120,101,100,0,47,111,0,116,114,97,110,115,112,111,115,105,116,105,111,110,0,47,114,0,114,101,99,111,110,110,101,99,116,101,100,32,98,111,110,100,40,115,41,32,116,111,32,109,101,116,97,108,40,115,41,32,102,111,114,109,117,108,97,0,97,98,115,95,115,116, -101,114,101,111,95,105,110,118,101,114,116,101,100,0,115,116,101,114,101,111,46,97,98,115,46,105,110,118,101,114,116,101,100,0,114,101,118,101,114,115,105,98,105,108,105,116,121,0,110,111,114,109,97,108,105,122,97,116,105,111,110,95,116,121,112,101,0,110,111,114,109,45,116,121,112,101,0,47,78,58,0,111,114,105,103,105,110,97,108,95,97,116,111,109,95,110,117,109,98,101,114,115,0,97,116,111,109,46,111,114,105,103,45,110,98,114,0,47,69,58,0,97,116,111,109,95,101,113,117,105,118,97,108,101,110,99,101, -0,97,116,111,109,46,101,113,117,105,118,97,108,101,110,99,101,0,47,103,69,58,0,103,114,111,117,112,95,101,113,117,105,118,97,108,101,110,99,101,0,103,114,111,117,112,46,101,113,117,105,118,97,108,101,110,99,101,0,47,105,116,58,0,47,105,78,58,0,47,67,82,86,58,0,99,104,97,114,103,101,95,114,97,100,105,99,97,108,95,118,97,108,101,110,99,101,0,99,104,97,114,103,101,115,45,114,97,100,45,118,97,108,0,47,114,65,58,0,47,114,66,58,0,98,111,110,100,115,0,47,114,67,58,0,120,121,122,0,47,70,58,0,47,73,58,0,47, -82,58,0,114,101,99,111,110,110,101,99,116,101,100,32,98,111,110,100,40,115,41,32,116,111,32,109,101,116,97,108,40,115,41,32,112,97,114,116,0,109,0,110,0,77,0,105,110,0,105,109,0,105,77,0,105,78,0,67,97,110,110,111,116,32,97,108,108,111,99,97,116,101,32,111,117,116,112,117,116,32,98,117,102,102,101,114,46,32,78,111,32,111,117,116,112,117,116,32,102,111,114,32,115,116,114,117,99,116,117,114,101,32,35,37,100,46,37,115,37,115,37,115,37,115,10,0,37,115,83,116,114,117,99,116,117,114,101,58,32,37,100,0, -37,115,83,116,114,117,99,116,117,114,101,58,32,37,100,46,37,115,37,115,37,115,37,115,0,58,37,108,100,0,37,115,37,115,61,37,115,0,37,115,37,115,0,63,63,63,0,47,122,0,37,45,100,37,45,100,37,45,100,45,0,40,37,45,100,45,37,45,100,44,37,45,100,45,37,45,100,41,0,40,37,45,100,44,37,45,100,45,0,37,45,100,41,0,37,45,100,46,37,45,100,41,0,37,45,100,44,37,45,100,41,0,37,45,100,44,37,45,100,37,45,99,0,47,47,47,47,0,47,47,47,0,47,47,0,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,0,92,37,99,37,99,0,37,115,37, -115,37,115,0,37,45,115,45,0,37,45,100,44,0,91,0,37,45,102,44,0,37,45,102,93,0,10,70,65,84,65,76,32,69,82,82,79,82,58,32,79,117,116,112,117,116,32,98,117,102,102,101,114,32,111,118,101,114,102,108,111,119,10,0,73,110,67,104,73,32,115,101,114,105,97,108,105,122,97,116,105,111,110,32,101,114,114,111,114,32,102,111,114,32,115,116,114,117,99,116,117,114,101,32,35,37,100,46,37,115,37,115,37,115,37,115,10,0,99,0,37,100,37,115,0,46,37,100,0,37,115,105,37,100,0,111,0,101,0,117,0,37,115,37,99,0,67,97,110,110, -111,116,32,102,105,110,100,32,48,68,32,115,116,101,114,101,111,98,111,110,100,32,110,101,105,103,104,98,111,114,0,37,99,37,115,37,115,37,100,0,37,115,0,37,45,115,0,45,0,104,0,41,40,0,43,0,44,32,0,105,116,100,104,0,116,100,104,0,33,45,43,117,63,0,37,100,45,0,37,100,44,0,49,0,48,0,44,0,41,0,67,0,0,83,105,0,71,101,0,83,110,0,65,115,0,66,0,0,83,0,0,83,0,0,83,0,0,83,0,0,83,101,0,83,101,0,83,101,0,83,101,0,78,0,0,78,0,0,78,0,0,80,0,0,80,0,0,80,0,0,65,115,0,0,0,0,0,1,255,0,0,1,1,0,0,1,1,0,1,0,1,0,0,0,4, -4,4,4,4,4,3,4,3,4,3,4,3,4,4,4,3,4,4,3,3,4,4,4,4,4,4,4,6,3,5,4,6,3,5,5,4,3,4,5,3,3,0,0,0,0,3,0,3,3,3,3,3,3,3,3,3,3,1,3,3,2,2,78,0,0,67,0,0,83,105,0,71,101,0,78,0,0,78,0,0,0,0,0,0,1,67,0,0,83,105,0,71,101,0,67,0,0,83,105,0,71,101,0,78,0,0,1,3,3,1,0,0,80,0,0,1,3,3,1,1,0,79,0,0,1,2,2,1,2,2,83,0,0,1,2,2,1,3,2,83,101,0,1,2,2,1,4,2,84,101,0,1,2,2,1,5,2,78,59,80,59,65,115,59,83,98,59,79,59,83,59,83,101,59,84,101,59,67,59,83,105,0,10,65,117,120,73,110,102,111,0,32,115,116,114,117,99,116,117,114,101,32,35, -0,79,80,81,82,83,84,85,86,87,88,89,90,0,77,76,75,74,73,72,71,70,69,68,67,66,0,37,45,46,51,115,37,45,46,51,115,37,45,46,51,115,37,45,46,51,115,37,45,46,50,115,0,37,45,46,51,115,37,45,46,51,115,37,45,46,50,115,0,65,65,65,0,65,65,66,0,65,65,67,0,65,65,68,0,65,65,69,0,65,65,70,0,65,65,71,0,65,65,72,0,65,65,73,0,65,65,74,0,65,65,75,0,65,65,76,0,65,65,77,0,65,65,78,0,65,65,79,0,65,65,80,0,65,65,81,0,65,65,82,0,65,65,83,0,65,65,84,0,65,65,85,0,65,65,86,0,65,65,87,0,65,65,88,0,65,65,89,0,65,65,90,0,65,66, -65,0,65,66,66,0,65,66,67,0,65,66,68,0,65,66,69,0,65,66,70,0,65,66,71,0,65,66,72,0,65,66,73,0,65,66,74,0,65,66,75,0,65,66,76,0,65,66,77,0,65,66,78,0,65,66,79,0,65,66,80,0,65,66,81,0,65,66,82,0,65,66,83,0,65,66,84,0,65,66,85,0,65,66,86,0,65,66,87,0,65,66,88,0,65,66,89,0,65,66,90,0,65,67,65,0,65,67,66,0,65,67,67,0,65,67,68,0,65,67,69,0,65,67,70,0,65,67,71,0,65,67,72,0,65,67,73,0,65,67,74,0,65,67,75,0,65,67,76,0,65,67,77,0,65,67,78,0,65,67,79,0,65,67,80,0,65,67,81,0,65,67,82,0,65,67,83,0,65,67,84,0,65, -67,85,0,65,67,86,0,65,67,87,0,65,67,88,0,65,67,89,0,65,67,90,0,65,68,65,0,65,68,66,0,65,68,67,0,65,68,68,0,65,68,69,0,65,68,70,0,65,68,71,0,65,68,72,0,65,68,73,0,65,68,74,0,65,68,75,0,65,68,76,0,65,68,77,0,65,68,78,0,65,68,79,0,65,68,80,0,65,68,81,0,65,68,82,0,65,68,83,0,65,68,84,0,65,68,85,0,65,68,86,0,65,68,87,0,65,68,88,0,65,68,89,0,65,68,90,0,65,69,65,0,65,69,66,0,65,69,67,0,65,69,68,0,65,69,69,0,65,69,70,0,65,69,71,0,65,69,72,0,65,69,73,0,65,69,74,0,65,69,75,0,65,69,76,0,65,69,77,0,65,69,78, -0,65,69,79,0,65,69,80,0,65,69,81,0,65,69,82,0,65,69,83,0,65,69,84,0,65,69,85,0,65,69,86,0,65,69,87,0,65,69,88,0,65,69,89,0,65,69,90,0,65,70,65,0,65,70,66,0,65,70,67,0,65,70,68,0,65,70,69,0,65,70,70,0,65,70,71,0,65,70,72,0,65,70,73,0,65,70,74,0,65,70,75,0,65,70,76,0,65,70,77,0,65,70,78,0,65,70,79,0,65,70,80,0,65,70,81,0,65,70,82,0,65,70,83,0,65,70,84,0,65,70,85,0,65,70,86,0,65,70,87,0,65,70,88,0,65,70,89,0,65,70,90,0,65,71,65,0,65,71,66,0,65,71,67,0,65,71,68,0,65,71,69,0,65,71,70,0,65,71,71,0,65,71, -72,0,65,71,73,0,65,71,74,0,65,71,75,0,65,71,76,0,65,71,77,0,65,71,78,0,65,71,79,0,65,71,80,0,65,71,81,0,65,71,82,0,65,71,83,0,65,71,84,0,65,71,85,0,65,71,86,0,65,71,87,0,65,71,88,0,65,71,89,0,65,71,90,0,65,72,65,0,65,72,66,0,65,72,67,0,65,72,68,0,65,72,69,0,65,72,70,0,65,72,71,0,65,72,72,0,65,72,73,0,65,72,74,0,65,72,75,0,65,72,76,0,65,72,77,0,65,72,78,0,65,72,79,0,65,72,80,0,65,72,81,0,65,72,82,0,65,72,83,0,65,72,84,0,65,72,85,0,65,72,86,0,65,72,87,0,65,72,88,0,65,72,89,0,65,72,90,0,65,73,65,0,65, -73,66,0,65,73,67,0,65,73,68,0,65,73,69,0,65,73,70,0,65,73,71,0,65,73,72,0,65,73,73,0,65,73,74,0,65,73,75,0,65,73,76,0,65,73,77,0,65,73,78,0,65,73,79,0,65,73,80,0,65,73,81,0,65,73,82,0,65,73,83,0,65,73,84,0,65,73,85,0,65,73,86,0,65,73,87,0,65,73,88,0,65,73,89,0,65,73,90,0,65,74,65,0,65,74,66,0,65,74,67,0,65,74,68,0,65,74,69,0,65,74,70,0,65,74,71,0,65,74,72,0,65,74,73,0,65,74,74,0,65,74,75,0,65,74,76,0,65,74,77,0,65,74,78,0,65,74,79,0,65,74,80,0,65,74,81,0,65,74,82,0,65,74,83,0,65,74,84,0,65,74,85, -0,65,74,86,0,65,74,87,0,65,74,88,0,65,74,89,0,65,74,90,0,65,75,65,0,65,75,66,0,65,75,67,0,65,75,68,0,65,75,69,0,65,75,70,0,65,75,71,0,65,75,72,0,65,75,73,0,65,75,74,0,65,75,75,0,65,75,76,0,65,75,77,0,65,75,78,0,65,75,79,0,65,75,80,0,65,75,81,0,65,75,82,0,65,75,83,0,65,75,84,0,65,75,85,0,65,75,86,0,65,75,87,0,65,75,88,0,65,75,89,0,65,75,90,0,65,76,65,0,65,76,66,0,65,76,67,0,65,76,68,0,65,76,69,0,65,76,70,0,65,76,71,0,65,76,72,0,65,76,73,0,65,76,74,0,65,76,75,0,65,76,76,0,65,76,77,0,65,76,78,0,65,76, -79,0,65,76,80,0,65,76,81,0,65,76,82,0,65,76,83,0,65,76,84,0,65,76,85,0,65,76,86,0,65,76,87,0,65,76,88,0,65,76,89,0,65,76,90,0,65,77,65,0,65,77,66,0,65,77,67,0,65,77,68,0,65,77,69,0,65,77,70,0,65,77,71,0,65,77,72,0,65,77,73,0,65,77,74,0,65,77,75,0,65,77,76,0,65,77,77,0,65,77,78,0,65,77,79,0,65,77,80,0,65,77,81,0,65,77,82,0,65,77,83,0,65,77,84,0,65,77,85,0,65,77,86,0,65,77,87,0,65,77,88,0,65,77,89,0,65,77,90,0,65,78,65,0,65,78,66,0,65,78,67,0,65,78,68,0,65,78,69,0,65,78,70,0,65,78,71,0,65,78,72,0,65, -78,73,0,65,78,74,0,65,78,75,0,65,78,76,0,65,78,77,0,65,78,78,0,65,78,79,0,65,78,80,0,65,78,81,0,65,78,82,0,65,78,83,0,65,78,84,0,65,78,85,0,65,78,86,0,65,78,87,0,65,78,88,0,65,78,89,0,65,78,90,0,65,79,65,0,65,79,66,0,65,79,67,0,65,79,68,0,65,79,69,0,65,79,70,0,65,79,71,0,65,79,72,0,65,79,73,0,65,79,74,0,65,79,75,0,65,79,76,0,65,79,77,0,65,79,78,0,65,79,79,0,65,79,80,0,65,79,81,0,65,79,82,0,65,79,83,0,65,79,84,0,65,79,85,0,65,79,86,0,65,79,87,0,65,79,88,0,65,79,89,0,65,79,90,0,65,80,65,0,65,80,66, -0,65,80,67,0,65,80,68,0,65,80,69,0,65,80,70,0,65,80,71,0,65,80,72,0,65,80,73,0,65,80,74,0,65,80,75,0,65,80,76,0,65,80,77,0,65,80,78,0,65,80,79,0,65,80,80,0,65,80,81,0,65,80,82,0,65,80,83,0,65,80,84,0,65,80,85,0,65,80,86,0,65,80,87,0,65,80,88,0,65,80,89,0,65,80,90,0,65,81,65,0,65,81,66,0,65,81,67,0,65,81,68,0,65,81,69,0,65,81,70,0,65,81,71,0,65,81,72,0,65,81,73,0,65,81,74,0,65,81,75,0,65,81,76,0,65,81,77,0,65,81,78,0,65,81,79,0,65,81,80,0,65,81,81,0,65,81,82,0,65,81,83,0,65,81,84,0,65,81,85,0,65,81, -86,0,65,81,87,0,65,81,88,0,65,81,89,0,65,81,90,0,65,82,65,0,65,82,66,0,65,82,67,0,65,82,68,0,65,82,69,0,65,82,70,0,65,82,71,0,65,82,72,0,65,82,73,0,65,82,74,0,65,82,75,0,65,82,76,0,65,82,77,0,65,82,78,0,65,82,79,0,65,82,80,0,65,82,81,0,65,82,82,0,65,82,83,0,65,82,84,0,65,82,85,0,65,82,86,0,65,82,87,0,65,82,88,0,65,82,89,0,65,82,90,0,65,83,65,0,65,83,66,0,65,83,67,0,65,83,68,0,65,83,69,0,65,83,70,0,65,83,71,0,65,83,72,0,65,83,73,0,65,83,74,0,65,83,75,0,65,83,76,0,65,83,77,0,65,83,78,0,65,83,79,0,65, -83,80,0,65,83,81,0,65,83,82,0,65,83,83,0,65,83,84,0,65,83,85,0,65,83,86,0,65,83,87,0,65,83,88,0,65,83,89,0,65,83,90,0,65,84,65,0,65,84,66,0,65,84,67,0,65,84,68,0,65,84,69,0,65,84,70,0,65,84,71,0,65,84,72,0,65,84,73,0,65,84,74,0,65,84,75,0,65,84,76,0,65,84,77,0,65,84,78,0,65,84,79,0,65,84,80,0,65,84,81,0,65,84,82,0,65,84,83,0,65,84,84,0,65,84,85,0,65,84,86,0,65,84,87,0,65,84,88,0,65,84,89,0,65,84,90,0,65,85,65,0,65,85,66,0,65,85,67,0,65,85,68,0,65,85,69,0,65,85,70,0,65,85,71,0,65,85,72,0,65,85,73, -0,65,85,74,0,65,85,75,0,65,85,76,0,65,85,77,0,65,85,78,0,65,85,79,0,65,85,80,0,65,85,81,0,65,85,82,0,65,85,83,0,65,85,84,0,65,85,85,0,65,85,86,0,65,85,87,0,65,85,88,0,65,85,89,0,65,85,90,0,65,86,65,0,65,86,66,0,65,86,67,0,65,86,68,0,65,86,69,0,65,86,70,0,65,86,71,0,65,86,72,0,65,86,73,0,65,86,74,0,65,86,75,0,65,86,76,0,65,86,77,0,65,86,78,0,65,86,79,0,65,86,80,0,65,86,81,0,65,86,82,0,65,86,83,0,65,86,84,0,65,86,85,0,65,86,86,0,65,86,87,0,65,86,88,0,65,86,89,0,65,86,90,0,65,87,65,0,65,87,66,0,65,87, -67,0,65,87,68,0,65,87,69,0,65,87,70,0,65,87,71,0,65,87,72,0,65,87,73,0,65,87,74,0,65,87,75,0,65,87,76,0,65,87,77,0,65,87,78,0,65,87,79,0,65,87,80,0,65,87,81,0,65,87,82,0,65,87,83,0,65,87,84,0,65,87,85,0,65,87,86,0,65,87,87,0,65,87,88,0,65,87,89,0,65,87,90,0,65,88,65,0,65,88,66,0,65,88,67,0,65,88,68,0,65,88,69,0,65,88,70,0,65,88,71,0,65,88,72,0,65,88,73,0,65,88,74,0,65,88,75,0,65,88,76,0,65,88,77,0,65,88,78,0,65,88,79,0,65,88,80,0,65,88,81,0,65,88,82,0,65,88,83,0,65,88,84,0,65,88,85,0,65,88,86,0,65, -88,87,0,65,88,88,0,65,88,89,0,65,88,90,0,65,89,65,0,65,89,66,0,65,89,67,0,65,89,68,0,65,89,69,0,65,89,70,0,65,89,71,0,65,89,72,0,65,89,73,0,65,89,74,0,65,89,75,0,65,89,76,0,65,89,77,0,65,89,78,0,65,89,79,0,65,89,80,0,65,89,81,0,65,89,82,0,65,89,83,0,65,89,84,0,65,89,85,0,65,89,86,0,65,89,87,0,65,89,88,0,65,89,89,0,65,89,90,0,65,90,65,0,65,90,66,0,65,90,67,0,65,90,68,0,65,90,69,0,65,90,70,0,65,90,71,0,65,90,72,0,65,90,73,0,65,90,74,0,65,90,75,0,65,90,76,0,65,90,77,0,65,90,78,0,65,90,79,0,65,90,80, -0,65,90,81,0,65,90,82,0,65,90,83,0,65,90,84,0,65,90,85,0,65,90,86,0,65,90,87,0,65,90,88,0,65,90,89,0,65,90,90,0,66,65,65,0,66,65,66,0,66,65,67,0,66,65,68,0,66,65,69,0,66,65,70,0,66,65,71,0,66,65,72,0,66,65,73,0,66,65,74,0,66,65,75,0,66,65,76,0,66,65,77,0,66,65,78,0,66,65,79,0,66,65,80,0,66,65,81,0,66,65,82,0,66,65,83,0,66,65,84,0,66,65,85,0,66,65,86,0,66,65,87,0,66,65,88,0,66,65,89,0,66,65,90,0,66,66,65,0,66,66,66,0,66,66,67,0,66,66,68,0,66,66,69,0,66,66,70,0,66,66,71,0,66,66,72,0,66,66,73,0,66,66, -74,0,66,66,75,0,66,66,76,0,66,66,77,0,66,66,78,0,66,66,79,0,66,66,80,0,66,66,81,0,66,66,82,0,66,66,83,0,66,66,84,0,66,66,85,0,66,66,86,0,66,66,87,0,66,66,88,0,66,66,89,0,66,66,90,0,66,67,65,0,66,67,66,0,66,67,67,0,66,67,68,0,66,67,69,0,66,67,70,0,66,67,71,0,66,67,72,0,66,67,73,0,66,67,74,0,66,67,75,0,66,67,76,0,66,67,77,0,66,67,78,0,66,67,79,0,66,67,80,0,66,67,81,0,66,67,82,0,66,67,83,0,66,67,84,0,66,67,85,0,66,67,86,0,66,67,87,0,66,67,88,0,66,67,89,0,66,67,90,0,66,68,65,0,66,68,66,0,66,68,67,0,66, -68,68,0,66,68,69,0,66,68,70,0,66,68,71,0,66,68,72,0,66,68,73,0,66,68,74,0,66,68,75,0,66,68,76,0,66,68,77,0,66,68,78,0,66,68,79,0,66,68,80,0,66,68,81,0,66,68,82,0,66,68,83,0,66,68,84,0,66,68,85,0,66,68,86,0,66,68,87,0,66,68,88,0,66,68,89,0,66,68,90,0,66,69,65,0,66,69,66,0,66,69,67,0,66,69,68,0,66,69,69,0,66,69,70,0,66,69,71,0,66,69,72,0,66,69,73,0,66,69,74,0,66,69,75,0,66,69,76,0,66,69,77,0,66,69,78,0,66,69,79,0,66,69,80,0,66,69,81,0,66,69,82,0,66,69,83,0,66,69,84,0,66,69,85,0,66,69,86,0,66,69,87, -0,66,69,88,0,66,69,89,0,66,69,90,0,66,70,65,0,66,70,66,0,66,70,67,0,66,70,68,0,66,70,69,0,66,70,70,0,66,70,71,0,66,70,72,0,66,70,73,0,66,70,74,0,66,70,75,0,66,70,76,0,66,70,77,0,66,70,78,0,66,70,79,0,66,70,80,0,66,70,81,0,66,70,82,0,66,70,83,0,66,70,84,0,66,70,85,0,66,70,86,0,66,70,87,0,66,70,88,0,66,70,89,0,66,70,90,0,66,71,65,0,66,71,66,0,66,71,67,0,66,71,68,0,66,71,69,0,66,71,70,0,66,71,71,0,66,71,72,0,66,71,73,0,66,71,74,0,66,71,75,0,66,71,76,0,66,71,77,0,66,71,78,0,66,71,79,0,66,71,80,0,66,71, -81,0,66,71,82,0,66,71,83,0,66,71,84,0,66,71,85,0,66,71,86,0,66,71,87,0,66,71,88,0,66,71,89,0,66,71,90,0,66,72,65,0,66,72,66,0,66,72,67,0,66,72,68,0,66,72,69,0,66,72,70,0,66,72,71,0,66,72,72,0,66,72,73,0,66,72,74,0,66,72,75,0,66,72,76,0,66,72,77,0,66,72,78,0,66,72,79,0,66,72,80,0,66,72,81,0,66,72,82,0,66,72,83,0,66,72,84,0,66,72,85,0,66,72,86,0,66,72,87,0,66,72,88,0,66,72,89,0,66,72,90,0,66,73,65,0,66,73,66,0,66,73,67,0,66,73,68,0,66,73,69,0,66,73,70,0,66,73,71,0,66,73,72,0,66,73,73,0,66,73,74,0,66, -73,75,0,66,73,76,0,66,73,77,0,66,73,78,0,66,73,79,0,66,73,80,0,66,73,81,0,66,73,82,0,66,73,83,0,66,73,84,0,66,73,85,0,66,73,86,0,66,73,87,0,66,73,88,0,66,73,89,0,66,73,90,0,66,74,65,0,66,74,66,0,66,74,67,0,66,74,68,0,66,74,69,0,66,74,70,0,66,74,71,0,66,74,72,0,66,74,73,0,66,74,74,0,66,74,75,0,66,74,76,0,66,74,77,0,66,74,78,0,66,74,79,0,66,74,80,0,66,74,81,0,66,74,82,0,66,74,83,0,66,74,84,0,66,74,85,0,66,74,86,0,66,74,87,0,66,74,88,0,66,74,89,0,66,74,90,0,66,75,65,0,66,75,66,0,66,75,67,0,66,75,68, -0,66,75,69,0,66,75,70,0,66,75,71,0,66,75,72,0,66,75,73,0,66,75,74,0,66,75,75,0,66,75,76,0,66,75,77,0,66,75,78,0,66,75,79,0,66,75,80,0,66,75,81,0,66,75,82,0,66,75,83,0,66,75,84,0,66,75,85,0,66,75,86,0,66,75,87,0,66,75,88,0,66,75,89,0,66,75,90,0,66,76,65,0,66,76,66,0,66,76,67,0,66,76,68,0,66,76,69,0,66,76,70,0,66,76,71,0,66,76,72,0,66,76,73,0,66,76,74,0,66,76,75,0,66,76,76,0,66,76,77,0,66,76,78,0,66,76,79,0,66,76,80,0,66,76,81,0,66,76,82,0,66,76,83,0,66,76,84,0,66,76,85,0,66,76,86,0,66,76,87,0,66,76, -88,0,66,76,89,0,66,76,90,0,66,77,65,0,66,77,66,0,66,77,67,0,66,77,68,0,66,77,69,0,66,77,70,0,66,77,71,0,66,77,72,0,66,77,73,0,66,77,74,0,66,77,75,0,66,77,76,0,66,77,77,0,66,77,78,0,66,77,79,0,66,77,80,0,66,77,81,0,66,77,82,0,66,77,83,0,66,77,84,0,66,77,85,0,66,77,86,0,66,77,87,0,66,77,88,0,66,77,89,0,66,77,90,0,66,78,65,0,66,78,66,0,66,78,67,0,66,78,68,0,66,78,69,0,66,78,70,0,66,78,71,0,66,78,72,0,66,78,73,0,66,78,74,0,66,78,75,0,66,78,76,0,66,78,77,0,66,78,78,0,66,78,79,0,66,78,80,0,66,78,81,0,66, -78,82,0,66,78,83,0,66,78,84,0,66,78,85,0,66,78,86,0,66,78,87,0,66,78,88,0,66,78,89,0,66,78,90,0,66,79,65,0,66,79,66,0,66,79,67,0,66,79,68,0,66,79,69,0,66,79,70,0,66,79,71,0,66,79,72,0,66,79,73,0,66,79,74,0,66,79,75,0,66,79,76,0,66,79,77,0,66,79,78,0,66,79,79,0,66,79,80,0,66,79,81,0,66,79,82,0,66,79,83,0,66,79,84,0,66,79,85,0,66,79,86,0,66,79,87,0,66,79,88,0,66,79,89,0,66,79,90,0,66,80,65,0,66,80,66,0,66,80,67,0,66,80,68,0,66,80,69,0,66,80,70,0,66,80,71,0,66,80,72,0,66,80,73,0,66,80,74,0,66,80,75, -0,66,80,76,0,66,80,77,0,66,80,78,0,66,80,79,0,66,80,80,0,66,80,81,0,66,80,82,0,66,80,83,0,66,80,84,0,66,80,85,0,66,80,86,0,66,80,87,0,66,80,88,0,66,80,89,0,66,80,90,0,66,81,65,0,66,81,66,0,66,81,67,0,66,81,68,0,66,81,69,0,66,81,70,0,66,81,71,0,66,81,72,0,66,81,73,0,66,81,74,0,66,81,75,0,66,81,76,0,66,81,77,0,66,81,78,0,66,81,79,0,66,81,80,0,66,81,81,0,66,81,82,0,66,81,83,0,66,81,84,0,66,81,85,0,66,81,86,0,66,81,87,0,66,81,88,0,66,81,89,0,66,81,90,0,66,82,65,0,66,82,66,0,66,82,67,0,66,82,68,0,66,82, -69,0,66,82,70,0,66,82,71,0,66,82,72,0,66,82,73,0,66,82,74,0,66,82,75,0,66,82,76,0,66,82,77,0,66,82,78,0,66,82,79,0,66,82,80,0,66,82,81,0,66,82,82,0,66,82,83,0,66,82,84,0,66,82,85,0,66,82,86,0,66,82,87,0,66,82,88,0,66,82,89,0,66,82,90,0,66,83,65,0,66,83,66,0,66,83,67,0,66,83,68,0,66,83,69,0,66,83,70,0,66,83,71,0,66,83,72,0,66,83,73,0,66,83,74,0,66,83,75,0,66,83,76,0,66,83,77,0,66,83,78,0,66,83,79,0,66,83,80,0,66,83,81,0,66,83,82,0,66,83,83,0,66,83,84,0,66,83,85,0,66,83,86,0,66,83,87,0,66,83,88,0,66, -83,89,0,66,83,90,0,66,84,65,0,66,84,66,0,66,84,67,0,66,84,68,0,66,84,69,0,66,84,70,0,66,84,71,0,66,84,72,0,66,84,73,0,66,84,74,0,66,84,75,0,66,84,76,0,66,84,77,0,66,84,78,0,66,84,79,0,66,84,80,0,66,84,81,0,66,84,82,0,66,84,83,0,66,84,84,0,66,84,85,0,66,84,86,0,66,84,87,0,66,84,88,0,66,84,89,0,66,84,90,0,66,85,65,0,66,85,66,0,66,85,67,0,66,85,68,0,66,85,69,0,66,85,70,0,66,85,71,0,66,85,72,0,66,85,73,0,66,85,74,0,66,85,75,0,66,85,76,0,66,85,77,0,66,85,78,0,66,85,79,0,66,85,80,0,66,85,81,0,66,85,82, -0,66,85,83,0,66,85,84,0,66,85,85,0,66,85,86,0,66,85,87,0,66,85,88,0,66,85,89,0,66,85,90,0,66,86,65,0,66,86,66,0,66,86,67,0,66,86,68,0,66,86,69,0,66,86,70,0,66,86,71,0,66,86,72,0,66,86,73,0,66,86,74,0,66,86,75,0,66,86,76,0,66,86,77,0,66,86,78,0,66,86,79,0,66,86,80,0,66,86,81,0,66,86,82,0,66,86,83,0,66,86,84,0,66,86,85,0,66,86,86,0,66,86,87,0,66,86,88,0,66,86,89,0,66,86,90,0,66,87,65,0,66,87,66,0,66,87,67,0,66,87,68,0,66,87,69,0,66,87,70,0,66,87,71,0,66,87,72,0,66,87,73,0,66,87,74,0,66,87,75,0,66,87, -76,0,66,87,77,0,66,87,78,0,66,87,79,0,66,87,80,0,66,87,81,0,66,87,82,0,66,87,83,0,66,87,84,0,66,87,85,0,66,87,86,0,66,87,87,0,66,87,88,0,66,87,89,0,66,87,90,0,66,88,65,0,66,88,66,0,66,88,67,0,66,88,68,0,66,88,69,0,66,88,70,0,66,88,71,0,66,88,72,0,66,88,73,0,66,88,74,0,66,88,75,0,66,88,76,0,66,88,77,0,66,88,78,0,66,88,79,0,66,88,80,0,66,88,81,0,66,88,82,0,66,88,83,0,66,88,84,0,66,88,85,0,66,88,86,0,66,88,87,0,66,88,88,0,66,88,89,0,66,88,90,0,66,89,65,0,66,89,66,0,66,89,67,0,66,89,68,0,66,89,69,0,66, -89,70,0,66,89,71,0,66,89,72,0,66,89,73,0,66,89,74,0,66,89,75,0,66,89,76,0,66,89,77,0,66,89,78,0,66,89,79,0,66,89,80,0,66,89,81,0,66,89,82,0,66,89,83,0,66,89,84,0,66,89,85,0,66,89,86,0,66,89,87,0,66,89,88,0,66,89,89,0,66,89,90,0,66,90,65,0,66,90,66,0,66,90,67,0,66,90,68,0,66,90,69,0,66,90,70,0,66,90,71,0,66,90,72,0,66,90,73,0,66,90,74,0,66,90,75,0,66,90,76,0,66,90,77,0,66,90,78,0,66,90,79,0,66,90,80,0,66,90,81,0,66,90,82,0,66,90,83,0,66,90,84,0,66,90,85,0,66,90,86,0,66,90,87,0,66,90,88,0,66,90,89, -0,66,90,90,0,67,65,65,0,67,65,66,0,67,65,67,0,67,65,68,0,67,65,69,0,67,65,70,0,67,65,71,0,67,65,72,0,67,65,73,0,67,65,74,0,67,65,75,0,67,65,76,0,67,65,77,0,67,65,78,0,67,65,79,0,67,65,80,0,67,65,81,0,67,65,82,0,67,65,83,0,67,65,84,0,67,65,85,0,67,65,86,0,67,65,87,0,67,65,88,0,67,65,89,0,67,65,90,0,67,66,65,0,67,66,66,0,67,66,67,0,67,66,68,0,67,66,69,0,67,66,70,0,67,66,71,0,67,66,72,0,67,66,73,0,67,66,74,0,67,66,75,0,67,66,76,0,67,66,77,0,67,66,78,0,67,66,79,0,67,66,80,0,67,66,81,0,67,66,82,0,67,66, -83,0,67,66,84,0,67,66,85,0,67,66,86,0,67,66,87,0,67,66,88,0,67,66,89,0,67,66,90,0,67,67,65,0,67,67,66,0,67,67,67,0,67,67,68,0,67,67,69,0,67,67,70,0,67,67,71,0,67,67,72,0,67,67,73,0,67,67,74,0,67,67,75,0,67,67,76,0,67,67,77,0,67,67,78,0,67,67,79,0,67,67,80,0,67,67,81,0,67,67,82,0,67,67,83,0,67,67,84,0,67,67,85,0,67,67,86,0,67,67,87,0,67,67,88,0,67,67,89,0,67,67,90,0,67,68,65,0,67,68,66,0,67,68,67,0,67,68,68,0,67,68,69,0,67,68,70,0,67,68,71,0,67,68,72,0,67,68,73,0,67,68,74,0,67,68,75,0,67,68,76,0,67, -68,77,0,67,68,78,0,67,68,79,0,67,68,80,0,67,68,81,0,67,68,82,0,67,68,83,0,67,68,84,0,67,68,85,0,67,68,86,0,67,68,87,0,67,68,88,0,67,68,89,0,67,68,90,0,67,69,65,0,67,69,66,0,67,69,67,0,67,69,68,0,67,69,69,0,67,69,70,0,67,69,71,0,67,69,72,0,67,69,73,0,67,69,74,0,67,69,75,0,67,69,76,0,67,69,77,0,67,69,78,0,67,69,79,0,67,69,80,0,67,69,81,0,67,69,82,0,67,69,83,0,67,69,84,0,67,69,85,0,67,69,86,0,67,69,87,0,67,69,88,0,67,69,89,0,67,69,90,0,67,70,65,0,67,70,66,0,67,70,67,0,67,70,68,0,67,70,69,0,67,70,70, -0,67,70,71,0,67,70,72,0,67,70,73,0,67,70,74,0,67,70,75,0,67,70,76,0,67,70,77,0,67,70,78,0,67,70,79,0,67,70,80,0,67,70,81,0,67,70,82,0,67,70,83,0,67,70,84,0,67,70,85,0,67,70,86,0,67,70,87,0,67,70,88,0,67,70,89,0,67,70,90,0,67,71,65,0,67,71,66,0,67,71,67,0,67,71,68,0,67,71,69,0,67,71,70,0,67,71,71,0,67,71,72,0,67,71,73,0,67,71,74,0,67,71,75,0,67,71,76,0,67,71,77,0,67,71,78,0,67,71,79,0,67,71,80,0,67,71,81,0,67,71,82,0,67,71,83,0,67,71,84,0,67,71,85,0,67,71,86,0,67,71,87,0,67,71,88,0,67,71,89,0,67,71, -90,0,67,72,65,0,67,72,66,0,67,72,67,0,67,72,68,0,67,72,69,0,67,72,70,0,67,72,71,0,67,72,72,0,67,72,73,0,67,72,74,0,67,72,75,0,67,72,76,0,67,72,77,0,67,72,78,0,67,72,79,0,67,72,80,0,67,72,81,0,67,72,82,0,67,72,83,0,67,72,84,0,67,72,85,0,67,72,86,0,67,72,87,0,67,72,88,0,67,72,89,0,67,72,90,0,67,73,65,0,67,73,66,0,67,73,67,0,67,73,68,0,67,73,69,0,67,73,70,0,67,73,71,0,67,73,72,0,67,73,73,0,67,73,74,0,67,73,75,0,67,73,76,0,67,73,77,0,67,73,78,0,67,73,79,0,67,73,80,0,67,73,81,0,67,73,82,0,67,73,83,0,67, -73,84,0,67,73,85,0,67,73,86,0,67,73,87,0,67,73,88,0,67,73,89,0,67,73,90,0,67,74,65,0,67,74,66,0,67,74,67,0,67,74,68,0,67,74,69,0,67,74,70,0,67,74,71,0,67,74,72,0,67,74,73,0,67,74,74,0,67,74,75,0,67,74,76,0,67,74,77,0,67,74,78,0,67,74,79,0,67,74,80,0,67,74,81,0,67,74,82,0,67,74,83,0,67,74,84,0,67,74,85,0,67,74,86,0,67,74,87,0,67,74,88,0,67,74,89,0,67,74,90,0,67,75,65,0,67,75,66,0,67,75,67,0,67,75,68,0,67,75,69,0,67,75,70,0,67,75,71,0,67,75,72,0,67,75,73,0,67,75,74,0,67,75,75,0,67,75,76,0,67,75,77, -0,67,75,78,0,67,75,79,0,67,75,80,0,67,75,81,0,67,75,82,0,67,75,83,0,67,75,84,0,67,75,85,0,67,75,86,0,67,75,87,0,67,75,88,0,67,75,89,0,67,75,90,0,67,76,65,0,67,76,66,0,67,76,67,0,67,76,68,0,67,76,69,0,67,76,70,0,67,76,71,0,67,76,72,0,67,76,73,0,67,76,74,0,67,76,75,0,67,76,76,0,67,76,77,0,67,76,78,0,67,76,79,0,67,76,80,0,67,76,81,0,67,76,82,0,67,76,83,0,67,76,84,0,67,76,85,0,67,76,86,0,67,76,87,0,67,76,88,0,67,76,89,0,67,76,90,0,67,77,65,0,67,77,66,0,67,77,67,0,67,77,68,0,67,77,69,0,67,77,70,0,67,77, -71,0,67,77,72,0,67,77,73,0,67,77,74,0,67,77,75,0,67,77,76,0,67,77,77,0,67,77,78,0,67,77,79,0,67,77,80,0,67,77,81,0,67,77,82,0,67,77,83,0,67,77,84,0,67,77,85,0,67,77,86,0,67,77,87,0,67,77,88,0,67,77,89,0,67,77,90,0,67,78,65,0,67,78,66,0,67,78,67,0,67,78,68,0,67,78,69,0,67,78,70,0,67,78,71,0,67,78,72,0,67,78,73,0,67,78,74,0,67,78,75,0,67,78,76,0,67,78,77,0,67,78,78,0,67,78,79,0,67,78,80,0,67,78,81,0,67,78,82,0,67,78,83,0,67,78,84,0,67,78,85,0,67,78,86,0,67,78,87,0,67,78,88,0,67,78,89,0,67,78,90,0,67, -79,65,0,67,79,66,0,67,79,67,0,67,79,68,0,67,79,69,0,67,79,70,0,67,79,71,0,67,79,72,0,67,79,73,0,67,79,74,0,67,79,75,0,67,79,76,0,67,79,77,0,67,79,78,0,67,79,79,0,67,79,80,0,67,79,81,0,67,79,82,0,67,79,83,0,67,79,84,0,67,79,85,0,67,79,86,0,67,79,87,0,67,79,88,0,67,79,89,0,67,79,90,0,67,80,65,0,67,80,66,0,67,80,67,0,67,80,68,0,67,80,69,0,67,80,70,0,67,80,71,0,67,80,72,0,67,80,73,0,67,80,74,0,67,80,75,0,67,80,76,0,67,80,77,0,67,80,78,0,67,80,79,0,67,80,80,0,67,80,81,0,67,80,82,0,67,80,83,0,67,80,84, -0,67,80,85,0,67,80,86,0,67,80,87,0,67,80,88,0,67,80,89,0,67,80,90,0,67,81,65,0,67,81,66,0,67,81,67,0,67,81,68,0,67,81,69,0,67,81,70,0,67,81,71,0,67,81,72,0,67,81,73,0,67,81,74,0,67,81,75,0,67,81,76,0,67,81,77,0,67,81,78,0,67,81,79,0,67,81,80,0,67,81,81,0,67,81,82,0,67,81,83,0,67,81,84,0,67,81,85,0,67,81,86,0,67,81,87,0,67,81,88,0,67,81,89,0,67,81,90,0,67,82,65,0,67,82,66,0,67,82,67,0,67,82,68,0,67,82,69,0,67,82,70,0,67,82,71,0,67,82,72,0,67,82,73,0,67,82,74,0,67,82,75,0,67,82,76,0,67,82,77,0,67,82, -78,0,67,82,79,0,67,82,80,0,67,82,81,0,67,82,82,0,67,82,83,0,67,82,84,0,67,82,85,0,67,82,86,0,67,82,87,0,67,82,88,0,67,82,89,0,67,82,90,0,67,83,65,0,67,83,66,0,67,83,67,0,67,83,68,0,67,83,69,0,67,83,70,0,67,83,71,0,67,83,72,0,67,83,73,0,67,83,74,0,67,83,75],"i8",4,x.a+10280); -H([0,67,83,76,0,67,83,77,0,67,83,78,0,67,83,79,0,67,83,80,0,67,83,81,0,67,83,82,0,67,83,83,0,67,83,84,0,67,83,85,0,67,83,86,0,67,83,87,0,67,83,88,0,67,83,89,0,67,83,90,0,67,84,65,0,67,84,66,0,67,84,67,0,67,84,68,0,67,84,69,0,67,84,70,0,67,84,71,0,67,84,72,0,67,84,73,0,67,84,74,0,67,84,75,0,67,84,76,0,67,84,77,0,67,84,78,0,67,84,79,0,67,84,80,0,67,84,81,0,67,84,82,0,67,84,83,0,67,84,84,0,67,84,85,0,67,84,86,0,67,84,87,0,67,84,88,0,67,84,89,0,67,84,90,0,67,85,65,0,67,85,66,0,67,85,67,0,67,85,68,0,67, -85,69,0,67,85,70,0,67,85,71,0,67,85,72,0,67,85,73,0,67,85,74,0,67,85,75,0,67,85,76,0,67,85,77,0,67,85,78,0,67,85,79,0,67,85,80,0,67,85,81,0,67,85,82,0,67,85,83,0,67,85,84,0,67,85,85,0,67,85,86,0,67,85,87,0,67,85,88,0,67,85,89,0,67,85,90,0,67,86,65,0,67,86,66,0,67,86,67,0,67,86,68,0,67,86,69,0,67,86,70,0,67,86,71,0,67,86,72,0,67,86,73,0,67,86,74,0,67,86,75,0,67,86,76,0,67,86,77,0,67,86,78,0,67,86,79,0,67,86,80,0,67,86,81,0,67,86,82,0,67,86,83,0,67,86,84,0,67,86,85,0,67,86,86,0,67,86,87,0,67,86,88, -0,67,86,89,0,67,86,90,0,67,87,65,0,67,87,66,0,67,87,67,0,67,87,68,0,67,87,69,0,67,87,70,0,67,87,71,0,67,87,72,0,67,87,73,0,67,87,74,0,67,87,75,0,67,87,76,0,67,87,77,0,67,87,78,0,67,87,79,0,67,87,80,0,67,87,81,0,67,87,82,0,67,87,83,0,67,87,84,0,67,87,85,0,67,87,86,0,67,87,87,0,67,87,88,0,67,87,89,0,67,87,90,0,67,88,65,0,67,88,66,0,67,88,67,0,67,88,68,0,67,88,69,0,67,88,70,0,67,88,71,0,67,88,72,0,67,88,73,0,67,88,74,0,67,88,75,0,67,88,76,0,67,88,77,0,67,88,78,0,67,88,79,0,67,88,80,0,67,88,81,0,67,88, -82,0,67,88,83,0,67,88,84,0,67,88,85,0,67,88,86,0,67,88,87,0,67,88,88,0,67,88,89,0,67,88,90,0,67,89,65,0,67,89,66,0,67,89,67,0,67,89,68,0,67,89,69,0,67,89,70,0,67,89,71,0,67,89,72,0,67,89,73,0,67,89,74,0,67,89,75,0,67,89,76,0,67,89,77,0,67,89,78,0,67,89,79,0,67,89,80,0,67,89,81,0,67,89,82,0,67,89,83,0,67,89,84,0,67,89,85,0,67,89,86,0,67,89,87,0,67,89,88,0,67,89,89,0,67,89,90,0,67,90,65,0,67,90,66,0,67,90,67,0,67,90,68,0,67,90,69,0,67,90,70,0,67,90,71,0,67,90,72,0,67,90,73,0,67,90,74,0,67,90,75,0,67, -90,76,0,67,90,77,0,67,90,78,0,67,90,79,0,67,90,80,0,67,90,81,0,67,90,82,0,67,90,83,0,67,90,84,0,67,90,85,0,67,90,86,0,67,90,87,0,67,90,88,0,67,90,89,0,67,90,90,0,68,65,65,0,68,65,66,0,68,65,67,0,68,65,68,0,68,65,69,0,68,65,70,0,68,65,71,0,68,65,72,0,68,65,73,0,68,65,74,0,68,65,75,0,68,65,76,0,68,65,77,0,68,65,78,0,68,65,79,0,68,65,80,0,68,65,81,0,68,65,82,0,68,65,83,0,68,65,84,0,68,65,85,0,68,65,86,0,68,65,87,0,68,65,88,0,68,65,89,0,68,65,90,0,68,66,65,0,68,66,66,0,68,66,67,0,68,66,68,0,68,66,69, -0,68,66,70,0,68,66,71,0,68,66,72,0,68,66,73,0,68,66,74,0,68,66,75,0,68,66,76,0,68,66,77,0,68,66,78,0,68,66,79,0,68,66,80,0,68,66,81,0,68,66,82,0,68,66,83,0,68,66,84,0,68,66,85,0,68,66,86,0,68,66,87,0,68,66,88,0,68,66,89,0,68,66,90,0,68,67,65,0,68,67,66,0,68,67,67,0,68,67,68,0,68,67,69,0,68,67,70,0,68,67,71,0,68,67,72,0,68,67,73,0,68,67,74,0,68,67,75,0,68,67,76,0,68,67,77,0,68,67,78,0,68,67,79,0,68,67,80,0,68,67,81,0,68,67,82,0,68,67,83,0,68,67,84,0,68,67,85,0,68,67,86,0,68,67,87,0,68,67,88,0,68,67, -89,0,68,67,90,0,68,68,65,0,68,68,66,0,68,68,67,0,68,68,68,0,68,68,69,0,68,68,70,0,68,68,71,0,68,68,72,0,68,68,73,0,68,68,74,0,68,68,75,0,68,68,76,0,68,68,77,0,68,68,78,0,68,68,79,0,68,68,80,0,68,68,81,0,68,68,82,0,68,68,83,0,68,68,84,0,68,68,85,0,68,68,86,0,68,68,87,0,68,68,88,0,68,68,89,0,68,68,90,0,68,69,65,0,68,69,66,0,68,69,67,0,68,69,68,0,68,69,69,0,68,69,70,0,68,69,71,0,68,69,72,0,68,69,73,0,68,69,74,0,68,69,75,0,68,69,76,0,68,69,77,0,68,69,78,0,68,69,79,0,68,69,80,0,68,69,81,0,68,69,82,0,68, -69,83,0,68,69,84,0,68,69,85,0,68,69,86,0,68,69,87,0,68,69,88,0,68,69,89,0,68,69,90,0,68,70,65,0,68,70,66,0,68,70,67,0,68,70,68,0,68,70,69,0,68,70,70,0,68,70,71,0,68,70,72,0,68,70,73,0,68,70,74,0,68,70,75,0,68,70,76,0,68,70,77,0,68,70,78,0,68,70,79,0,68,70,80,0,68,70,81,0,68,70,82,0,68,70,83,0,68,70,84,0,68,70,85,0,68,70,86,0,68,70,87,0,68,70,88,0,68,70,89,0,68,70,90,0,68,71,65,0,68,71,66,0,68,71,67,0,68,71,68,0,68,71,69,0,68,71,70,0,68,71,71,0,68,71,72,0,68,71,73,0,68,71,74,0,68,71,75,0,68,71,76, -0,68,71,77,0,68,71,78,0,68,71,79,0,68,71,80,0,68,71,81,0,68,71,82,0,68,71,83,0,68,71,84,0,68,71,85,0,68,71,86,0,68,71,87,0,68,71,88,0,68,71,89,0,68,71,90,0,68,72,65,0,68,72,66,0,68,72,67,0,68,72,68,0,68,72,69,0,68,72,70,0,68,72,71,0,68,72,72,0,68,72,73,0,68,72,74,0,68,72,75,0,68,72,76,0,68,72,77,0,68,72,78,0,68,72,79,0,68,72,80,0,68,72,81,0,68,72,82,0,68,72,83,0,68,72,84,0,68,72,85,0,68,72,86,0,68,72,87,0,68,72,88,0,68,72,89,0,68,72,90,0,68,73,65,0,68,73,66,0,68,73,67,0,68,73,68,0,68,73,69,0,68,73, -70,0,68,73,71,0,68,73,72,0,68,73,73,0,68,73,74,0,68,73,75,0,68,73,76,0,68,73,77,0,68,73,78,0,68,73,79,0,68,73,80,0,68,73,81,0,68,73,82,0,68,73,83,0,68,73,84,0,68,73,85,0,68,73,86,0,68,73,87,0,68,73,88,0,68,73,89,0,68,73,90,0,68,74,65,0,68,74,66,0,68,74,67,0,68,74,68,0,68,74,69,0,68,74,70,0,68,74,71,0,68,74,72,0,68,74,73,0,68,74,74,0,68,74,75,0,68,74,76,0,68,74,77,0,68,74,78,0,68,74,79,0,68,74,80,0,68,74,81,0,68,74,82,0,68,74,83,0,68,74,84,0,68,74,85,0,68,74,86,0,68,74,87,0,68,74,88,0,68,74,89,0,68, -74,90,0,68,75,65,0,68,75,66,0,68,75,67,0,68,75,68,0,68,75,69,0,68,75,70,0,68,75,71,0,68,75,72,0,68,75,73,0,68,75,74,0,68,75,75,0,68,75,76,0,68,75,77,0,68,75,78,0,68,75,79,0,68,75,80,0,68,75,81,0,68,75,82,0,68,75,83,0,68,75,84,0,68,75,85,0,68,75,86,0,68,75,87,0,68,75,88,0,68,75,89,0,68,75,90,0,68,76,65,0,68,76,66,0,68,76,67,0,68,76,68,0,68,76,69,0,68,76,70,0,68,76,71,0,68,76,72,0,68,76,73,0,68,76,74,0,68,76,75,0,68,76,76,0,68,76,77,0,68,76,78,0,68,76,79,0,68,76,80,0,68,76,81,0,68,76,82,0,68,76,83, -0,68,76,84,0,68,76,85,0,68,76,86,0,68,76,87,0,68,76,88,0,68,76,89,0,68,76,90,0,68,77,65,0,68,77,66,0,68,77,67,0,68,77,68,0,68,77,69,0,68,77,70,0,68,77,71,0,68,77,72,0,68,77,73,0,68,77,74,0,68,77,75,0,68,77,76,0,68,77,77,0,68,77,78,0,68,77,79,0,68,77,80,0,68,77,81,0,68,77,82,0,68,77,83,0,68,77,84,0,68,77,85,0,68,77,86,0,68,77,87,0,68,77,88,0,68,77,89,0,68,77,90,0,68,78,65,0,68,78,66,0,68,78,67,0,68,78,68,0,68,78,69,0,68,78,70,0,68,78,71,0,68,78,72,0,68,78,73,0,68,78,74,0,68,78,75,0,68,78,76,0,68,78, -77,0,68,78,78,0,68,78,79,0,68,78,80,0,68,78,81,0,68,78,82,0,68,78,83,0,68,78,84,0,68,78,85,0,68,78,86,0,68,78,87,0,68,78,88,0,68,78,89,0,68,78,90,0,68,79,65,0,68,79,66,0,68,79,67,0,68,79,68,0,68,79,69,0,68,79,70,0,68,79,71,0,68,79,72,0,68,79,73,0,68,79,74,0,68,79,75,0,68,79,76,0,68,79,77,0,68,79,78,0,68,79,79,0,68,79,80,0,68,79,81,0,68,79,82,0,68,79,83,0,68,79,84,0,68,79,85,0,68,79,86,0,68,79,87,0,68,79,88,0,68,79,89,0,68,79,90,0,68,80,65,0,68,80,66,0,68,80,67,0,68,80,68,0,68,80,69,0,68,80,70,0,68, -80,71,0,68,80,72,0,68,80,73,0,68,80,74,0,68,80,75,0,68,80,76,0,68,80,77,0,68,80,78,0,68,80,79,0,68,80,80,0,68,80,81,0,68,80,82,0,68,80,83,0,68,80,84,0,68,80,85,0,68,80,86,0,68,80,87,0,68,80,88,0,68,80,89,0,68,80,90,0,68,81,65,0,68,81,66,0,68,81,67,0,68,81,68,0,68,81,69,0,68,81,70,0,68,81,71,0,68,81,72,0,68,81,73,0,68,81,74,0,68,81,75,0,68,81,76,0,68,81,77,0,68,81,78,0,68,81,79,0,68,81,80,0,68,81,81,0,68,81,82,0,68,81,83,0,68,81,84,0,68,81,85,0,68,81,86,0,68,81,87,0,68,81,88,0,68,81,89,0,68,81,90, -0,68,82,65,0,68,82,66,0,68,82,67,0,68,82,68,0,68,82,69,0,68,82,70,0,68,82,71,0,68,82,72,0,68,82,73,0,68,82,74,0,68,82,75,0,68,82,76,0,68,82,77,0,68,82,78,0,68,82,79,0,68,82,80,0,68,82,81,0,68,82,82,0,68,82,83,0,68,82,84,0,68,82,85,0,68,82,86,0,68,82,87,0,68,82,88,0,68,82,89,0,68,82,90,0,68,83,65,0,68,83,66,0,68,83,67,0,68,83,68,0,68,83,69,0,68,83,70,0,68,83,71,0,68,83,72,0,68,83,73,0,68,83,74,0,68,83,75,0,68,83,76,0,68,83,77,0,68,83,78,0,68,83,79,0,68,83,80,0,68,83,81,0,68,83,82,0,68,83,83,0,68,83, -84,0,68,83,85,0,68,83,86,0,68,83,87,0,68,83,88,0,68,83,89,0,68,83,90,0,68,84,65,0,68,84,66,0,68,84,67,0,68,84,68,0,68,84,69,0,68,84,70,0,68,84,71,0,68,84,72,0,68,84,73,0,68,84,74,0,68,84,75,0,68,84,76,0,68,84,77,0,68,84,78,0,68,84,79,0,68,84,80,0,68,84,81,0,68,84,82,0,68,84,83,0,68,84,84,0,68,84,85,0,68,84,86,0,68,84,87,0,68,84,88,0,68,84,89,0,68,84,90,0,68,85,65,0,68,85,66,0,68,85,67,0,68,85,68,0,68,85,69,0,68,85,70,0,68,85,71,0,68,85,72,0,68,85,73,0,68,85,74,0,68,85,75,0,68,85,76,0,68,85,77,0,68, -85,78,0,68,85,79,0,68,85,80,0,68,85,81,0,68,85,82,0,68,85,83,0,68,85,84,0,68,85,85,0,68,85,86,0,68,85,87,0,68,85,88,0,68,85,89,0,68,85,90,0,68,86,65,0,68,86,66,0,68,86,67,0,68,86,68,0,68,86,69,0,68,86,70,0,68,86,71,0,68,86,72,0,68,86,73,0,68,86,74,0,68,86,75,0,68,86,76,0,68,86,77,0,68,86,78,0,68,86,79,0,68,86,80,0,68,86,81,0,68,86,82,0,68,86,83,0,68,86,84,0,68,86,85,0,68,86,86,0,68,86,87,0,68,86,88,0,68,86,89,0,68,86,90,0,68,87,65,0,68,87,66,0,68,87,67,0,68,87,68,0,68,87,69,0,68,87,70,0,68,87,71, -0,68,87,72,0,68,87,73,0,68,87,74,0,68,87,75,0,68,87,76,0,68,87,77,0,68,87,78,0,68,87,79,0,68,87,80,0,68,87,81,0,68,87,82,0,68,87,83,0,68,87,84,0,68,87,85,0,68,87,86,0,68,87,87,0,68,87,88,0,68,87,89,0,68,87,90,0,68,88,65,0,68,88,66,0,68,88,67,0,68,88,68,0,68,88,69,0,68,88,70,0,68,88,71,0,68,88,72,0,68,88,73,0,68,88,74,0,68,88,75,0,68,88,76,0,68,88,77,0,68,88,78,0,68,88,79,0,68,88,80,0,68,88,81,0,68,88,82,0,68,88,83,0,68,88,84,0,68,88,85,0,68,88,86,0,68,88,87,0,68,88,88,0,68,88,89,0,68,88,90,0,68,89, -65,0,68,89,66,0,68,89,67,0,68,89,68,0,68,89,69,0,68,89,70,0,68,89,71,0,68,89,72,0,68,89,73,0,68,89,74,0,68,89,75,0,68,89,76,0,68,89,77,0,68,89,78,0,68,89,79,0,68,89,80,0,68,89,81,0,68,89,82,0,68,89,83,0,68,89,84,0,68,89,85,0,68,89,86,0,68,89,87,0,68,89,88,0,68,89,89,0,68,89,90,0,68,90,65,0,68,90,66,0,68,90,67,0,68,90,68,0,68,90,69,0,68,90,70,0,68,90,71,0,68,90,72,0,68,90,73,0,68,90,74,0,68,90,75,0,68,90,76,0,68,90,77,0,68,90,78,0,68,90,79,0,68,90,80,0,68,90,81,0,68,90,82,0,68,90,83,0,68,90,84,0,68, -90,85,0,68,90,86,0,68,90,87,0,68,90,88,0,68,90,89,0,68,90,90,0,70,65,65,0,70,65,66,0,70,65,67,0,70,65,68,0,70,65,69,0,70,65,70,0,70,65,71,0,70,65,72,0,70,65,73,0,70,65,74,0,70,65,75,0,70,65,76,0,70,65,77,0,70,65,78,0,70,65,79,0,70,65,80,0,70,65,81,0,70,65,82,0,70,65,83,0,70,65,84,0,70,65,85,0,70,65,86,0,70,65,87,0,70,65,88,0,70,65,89,0,70,65,90,0,70,66,65,0,70,66,66,0,70,66,67,0,70,66,68,0,70,66,69,0,70,66,70,0,70,66,71,0,70,66,72,0,70,66,73,0,70,66,74,0,70,66,75,0,70,66,76,0,70,66,77,0,70,66,78, -0,70,66,79,0,70,66,80,0,70,66,81,0,70,66,82,0,70,66,83,0,70,66,84,0,70,66,85,0,70,66,86,0,70,66,87,0,70,66,88,0,70,66,89,0,70,66,90,0,70,67,65,0,70,67,66,0,70,67,67,0,70,67,68,0,70,67,69,0,70,67,70,0,70,67,71,0,70,67,72,0,70,67,73,0,70,67,74,0,70,67,75,0,70,67,76,0,70,67,77,0,70,67,78,0,70,67,79,0,70,67,80,0,70,67,81,0,70,67,82,0,70,67,83,0,70,67,84,0,70,67,85,0,70,67,86,0,70,67,87,0,70,67,88,0,70,67,89,0,70,67,90,0,70,68,65,0,70,68,66,0,70,68,67,0,70,68,68,0,70,68,69,0,70,68,70,0,70,68,71,0,70,68, -72,0,70,68,73,0,70,68,74,0,70,68,75,0,70,68,76,0,70,68,77,0,70,68,78,0,70,68,79,0,70,68,80,0,70,68,81,0,70,68,82,0,70,68,83,0,70,68,84,0,70,68,85,0,70,68,86,0,70,68,87,0,70,68,88,0,70,68,89,0,70,68,90,0,70,69,65,0,70,69,66,0,70,69,67,0,70,69,68,0,70,69,69,0,70,69,70,0,70,69,71,0,70,69,72,0,70,69,73,0,70,69,74,0,70,69,75,0,70,69,76,0,70,69,77,0,70,69,78,0,70,69,79,0,70,69,80,0,70,69,81,0,70,69,82,0,70,69,83,0,70,69,84,0,70,69,85,0,70,69,86,0,70,69,87,0,70,69,88,0,70,69,89,0,70,69,90,0,70,70,65,0,70, -70,66,0,70,70,67,0,70,70,68,0,70,70,69,0,70,70,70,0,70,70,71,0,70,70,72,0,70,70,73,0,70,70,74,0,70,70,75,0,70,70,76,0,70,70,77,0,70,70,78,0,70,70,79,0,70,70,80,0,70,70,81,0,70,70,82,0,70,70,83,0,70,70,84,0,70,70,85,0,70,70,86,0,70,70,87,0,70,70,88,0,70,70,89,0,70,70,90,0,70,71,65,0,70,71,66,0,70,71,67,0,70,71,68,0,70,71,69,0,70,71,70,0,70,71,71,0,70,71,72,0,70,71,73,0,70,71,74,0,70,71,75,0,70,71,76,0,70,71,77,0,70,71,78,0,70,71,79,0,70,71,80,0,70,71,81,0,70,71,82,0,70,71,83,0,70,71,84,0,70,71,85, -0,70,71,86,0,70,71,87,0,70,71,88,0,70,71,89,0,70,71,90,0,70,72,65,0,70,72,66,0,70,72,67,0,70,72,68,0,70,72,69,0,70,72,70,0,70,72,71,0,70,72,72,0,70,72,73,0,70,72,74,0,70,72,75,0,70,72,76,0,70,72,77,0,70,72,78,0,70,72,79,0,70,72,80,0,70,72,81,0,70,72,82,0,70,72,83,0,70,72,84,0,70,72,85,0,70,72,86,0,70,72,87,0,70,72,88,0,70,72,89,0,70,72,90,0,70,73,65,0,70,73,66,0,70,73,67,0,70,73,68,0,70,73,69,0,70,73,70,0,70,73,71,0,70,73,72,0,70,73,73,0,70,73,74,0,70,73,75,0,70,73,76,0,70,73,77,0,70,73,78,0,70,73, -79,0,70,73,80,0,70,73,81,0,70,73,82,0,70,73,83,0,70,73,84,0,70,73,85,0,70,73,86,0,70,73,87,0,70,73,88,0,70,73,89,0,70,73,90,0,70,74,65,0,70,74,66,0,70,74,67,0,70,74,68,0,70,74,69,0,70,74,70,0,70,74,71,0,70,74,72,0,70,74,73,0,70,74,74,0,70,74,75,0,70,74,76,0,70,74,77,0,70,74,78,0,70,74,79,0,70,74,80,0,70,74,81,0,70,74,82,0,70,74,83,0,70,74,84,0,70,74,85,0,70,74,86,0,70,74,87,0,70,74,88,0,70,74,89,0,70,74,90,0,70,75,65,0,70,75,66,0,70,75,67,0,70,75,68,0,70,75,69,0,70,75,70,0,70,75,71,0,70,75,72,0,70, -75,73,0,70,75,74,0,70,75,75,0,70,75,76,0,70,75,77,0,70,75,78,0,70,75,79,0,70,75,80,0,70,75,81,0,70,75,82,0,70,75,83,0,70,75,84,0,70,75,85,0,70,75,86,0,70,75,87,0,70,75,88,0,70,75,89,0,70,75,90,0,70,76,65,0,70,76,66,0,70,76,67,0,70,76,68,0,70,76,69,0,70,76,70,0,70,76,71,0,70,76,72,0,70,76,73,0,70,76,74,0,70,76,75,0,70,76,76,0,70,76,77,0,70,76,78,0,70,76,79,0,70,76,80,0,70,76,81,0,70,76,82,0,70,76,83,0,70,76,84,0,70,76,85,0,70,76,86,0,70,76,87,0,70,76,88,0,70,76,89,0,70,76,90,0,70,77,65,0,70,77,66, -0,70,77,67,0,70,77,68,0,70,77,69,0,70,77,70,0,70,77,71,0,70,77,72,0,70,77,73,0,70,77,74,0,70,77,75,0,70,77,76,0,70,77,77,0,70,77,78,0,70,77,79,0,70,77,80,0,70,77,81,0,70,77,82,0,70,77,83,0,70,77,84,0,70,77,85,0,70,77,86,0,70,77,87,0,70,77,88,0,70,77,89,0,70,77,90,0,70,78,65,0,70,78,66,0,70,78,67,0,70,78,68,0,70,78,69,0,70,78,70,0,70,78,71,0,70,78,72,0,70,78,73,0,70,78,74,0,70,78,75,0,70,78,76,0,70,78,77,0,70,78,78,0,70,78,79,0,70,78,80,0,70,78,81,0,70,78,82,0,70,78,83,0,70,78,84,0,70,78,85,0,70,78, -86,0,70,78,87,0,70,78,88,0,70,78,89,0,70,78,90,0,70,79,65,0,70,79,66,0,70,79,67,0,70,79,68,0,70,79,69,0,70,79,70,0,70,79,71,0,70,79,72,0,70,79,73,0,70,79,74,0,70,79,75,0,70,79,76,0,70,79,77,0,70,79,78,0,70,79,79,0,70,79,80,0,70,79,81,0,70,79,82,0,70,79,83,0,70,79,84,0,70,79,85,0,70,79,86,0,70,79,87,0,70,79,88,0,70,79,89,0,70,79,90,0,70,80,65,0,70,80,66,0,70,80,67,0,70,80,68,0,70,80,69,0,70,80,70,0,70,80,71,0,70,80,72,0,70,80,73,0,70,80,74,0,70,80,75,0,70,80,76,0,70,80,77,0,70,80,78,0,70,80,79,0,70, -80,80,0,70,80,81,0,70,80,82,0,70,80,83,0,70,80,84,0,70,80,85,0,70,80,86,0,70,80,87,0,70,80,88,0,70,80,89,0,70,80,90,0,70,81,65,0,70,81,66,0,70,81,67,0,70,81,68,0,70,81,69,0,70,81,70,0,70,81,71,0,70,81,72,0,70,81,73,0,70,81,74,0,70,81,75,0,70,81,76,0,70,81,77,0,70,81,78,0,70,81,79,0,70,81,80,0,70,81,81,0,70,81,82,0,70,81,83,0,70,81,84,0,70,81,85,0,70,81,86,0,70,81,87,0,70,81,88,0,70,81,89,0,70,81,90,0,70,82,65,0,70,82,66,0,70,82,67,0,70,82,68,0,70,82,69,0,70,82,70,0,70,82,71,0,70,82,72,0,70,82,73, -0,70,82,74,0,70,82,75,0,70,82,76,0,70,82,77,0,70,82,78,0,70,82,79,0,70,82,80,0,70,82,81,0,70,82,82,0,70,82,83,0,70,82,84,0,70,82,85,0,70,82,86,0,70,82,87,0,70,82,88,0,70,82,89,0,70,82,90,0,70,83,65,0,70,83,66,0,70,83,67,0,70,83,68,0,70,83,69,0,70,83,70,0,70,83,71,0,70,83,72,0,70,83,73,0,70,83,74,0,70,83,75,0,70,83,76,0,70,83,77,0,70,83,78,0,70,83,79,0,70,83,80,0,70,83,81,0,70,83,82,0,70,83,83,0,70,83,84,0,70,83,85,0,70,83,86,0,70,83,87,0,70,83,88,0,70,83,89,0,70,83,90,0,70,84,65,0,70,84,66,0,70,84, -67,0,70,84,68,0,70,84,69,0,70,84,70,0,70,84,71,0,70,84,72,0,70,84,73,0,70,84,74,0,70,84,75,0,70,84,76,0,70,84,77,0,70,84,78,0,70,84,79,0,70,84,80,0,70,84,81,0,70,84,82,0,70,84,83,0,70,84,84,0,70,84,85,0,70,84,86,0,70,84,87,0,70,84,88,0,70,84,89,0,70,84,90,0,70,85,65,0,70,85,66,0,70,85,67,0,70,85,68,0,70,85,69,0,70,85,70,0,70,85,71,0,70,85,72,0,70,85,73,0,70,85,74,0,70,85,75,0,70,85,76,0,70,85,77,0,70,85,78,0,70,85,79,0,70,85,80,0,70,85,81,0,70,85,82,0,70,85,83,0,70,85,84,0,70,85,85,0,70,85,86,0,70, -85,87,0,70,85,88,0,70,85,89,0,70,85,90,0,70,86,65,0,70,86,66,0,70,86,67,0,70,86,68,0,70,86,69,0,70,86,70,0,70,86,71,0,70,86,72,0,70,86,73,0,70,86,74,0,70,86,75,0,70,86,76,0,70,86,77,0,70,86,78,0,70,86,79,0,70,86,80,0,70,86,81,0,70,86,82,0,70,86,83,0,70,86,84,0,70,86,85,0,70,86,86,0,70,86,87,0,70,86,88,0,70,86,89,0,70,86,90,0,70,87,65,0,70,87,66,0,70,87,67,0,70,87,68,0,70,87,69,0,70,87,70,0,70,87,71,0,70,87,72,0,70,87,73,0,70,87,74,0,70,87,75,0,70,87,76,0,70,87,77,0,70,87,78,0,70,87,79,0,70,87,80, -0,70,87,81,0,70,87,82,0,70,87,83,0,70,87,84,0,70,87,85,0,70,87,86,0,70,87,87,0,70,87,88,0,70,87,89,0,70,87,90,0,70,88,65,0,70,88,66,0,70,88,67,0,70,88,68,0,70,88,69,0,70,88,70,0,70,88,71,0,70,88,72,0,70,88,73,0,70,88,74,0,70,88,75,0,70,88,76,0,70,88,77,0,70,88,78,0,70,88,79,0,70,88,80,0,70,88,81,0,70,88,82,0,70,88,83,0,70,88,84,0,70,88,85,0,70,88,86,0,70,88,87,0,70,88,88,0,70,88,89,0,70,88,90,0,70,89,65,0,70,89,66,0,70,89,67,0,70,89,68,0,70,89,69,0,70,89,70,0,70,89,71,0,70,89,72,0,70,89,73,0,70,89, -74,0,70,89,75,0,70,89,76,0,70,89,77,0,70,89,78,0,70,89,79,0,70,89,80,0,70,89,81,0,70,89,82,0,70,89,83,0,70,89,84,0,70,89,85,0,70,89,86,0,70,89,87,0,70,89,88,0,70,89,89,0,70,89,90,0,70,90,65,0,70,90,66,0,70,90,67,0,70,90,68,0,70,90,69,0,70,90,70,0,70,90,71,0,70,90,72,0,70,90,73,0,70,90,74,0,70,90,75,0,70,90,76,0,70,90,77,0,70,90,78,0,70,90,79,0,70,90,80,0,70,90,81,0,70,90,82,0,70,90,83,0,70,90,84,0,70,90,85,0,70,90,86,0,70,90,87,0,70,90,88,0,70,90,89,0,70,90,90,0,71,65,65,0,71,65,66,0,71,65,67,0,71, -65,68,0,71,65,69,0,71,65,70,0,71,65,71,0,71,65,72,0,71,65,73,0,71,65,74,0,71,65,75,0,71,65,76,0,71,65,77,0,71,65,78,0,71,65,79,0,71,65,80,0,71,65,81,0,71,65,82,0,71,65,83,0,71,65,84,0,71,65,85,0,71,65,86,0,71,65,87,0,71,65,88,0,71,65,89,0,71,65,90,0,71,66,65,0,71,66,66,0,71,66,67,0,71,66,68,0,71,66,69,0,71,66,70,0,71,66,71,0,71,66,72,0,71,66,73,0,71,66,74,0,71,66,75,0,71,66,76,0,71,66,77,0,71,66,78,0,71,66,79,0,71,66,80,0,71,66,81,0,71,66,82,0,71,66,83,0,71,66,84,0,71,66,85,0,71,66,86,0,71,66,87, -0,71,66,88,0,71,66,89,0,71,66,90,0,71,67,65,0,71,67,66,0,71,67,67,0,71,67,68,0,71,67,69,0,71,67,70,0,71,67,71,0,71,67,72,0,71,67,73,0,71,67,74,0,71,67,75,0,71,67,76,0,71,67,77,0,71,67,78,0,71,67,79,0,71,67,80,0,71,67,81,0,71,67,82,0,71,67,83,0,71,67,84,0,71,67,85,0,71,67,86,0,71,67,87,0,71,67,88,0,71,67,89,0,71,67,90,0,71,68,65,0,71,68,66,0,71,68,67,0,71,68,68,0,71,68,69,0,71,68,70,0,71,68,71,0,71,68,72,0,71,68,73,0,71,68,74,0,71,68,75,0,71,68,76,0,71,68,77,0,71,68,78,0,71,68,79,0,71,68,80,0,71,68, -81,0,71,68,82,0,71,68,83,0,71,68,84,0,71,68,85,0,71,68,86,0,71,68,87,0,71,68,88,0,71,68,89,0,71,68,90,0,71,69,65,0,71,69,66,0,71,69,67,0,71,69,68,0,71,69,69,0,71,69,70,0,71,69,71,0,71,69,72,0,71,69,73,0,71,69,74,0,71,69,75,0,71,69,76,0,71,69,77,0,71,69,78,0,71,69,79,0,71,69,80,0,71,69,81,0,71,69,82,0,71,69,83,0,71,69,84,0,71,69,85,0,71,69,86,0,71,69,87,0,71,69,88,0,71,69,89,0,71,69,90,0,71,70,65,0,71,70,66,0,71,70,67,0,71,70,68,0,71,70,69,0,71,70,70,0,71,70,71,0,71,70,72,0,71,70,73,0,71,70,74,0,71, -70,75,0,71,70,76,0,71,70,77,0,71,70,78,0,71,70,79,0,71,70,80,0,71,70,81,0,71,70,82,0,71,70,83,0,71,70,84,0,71,70,85,0,71,70,86,0,71,70,87,0,71,70,88,0,71,70,89,0,71,70,90,0,71,71,65,0,71,71,66,0,71,71,67,0,71,71,68,0,71,71,69,0,71,71,70,0,71,71,71,0,71,71,72,0,71,71,73,0,71,71,74,0,71,71,75,0,71,71,76,0,71,71,77,0,71,71,78,0,71,71,79,0,71,71,80,0,71,71,81,0,71,71,82,0,71,71,83,0,71,71,84,0,71,71,85,0,71,71,86,0,71,71,87,0,71,71,88,0,71,71,89,0,71,71,90,0,71,72,65,0,71,72,66,0,71,72,67,0,71,72,68, -0,71,72,69,0,71,72,70,0,71,72,71,0,71,72,72,0,71,72,73,0,71,72,74,0,71,72,75,0,71,72,76,0,71,72,77,0,71,72,78,0,71,72,79,0,71,72,80,0,71,72,81,0,71,72,82,0,71,72,83,0,71,72,84,0,71,72,85,0,71,72,86,0,71,72,87,0,71,72,88,0,71,72,89,0,71,72,90,0,71,73,65,0,71,73,66,0,71,73,67,0,71,73,68,0,71,73,69,0,71,73,70,0,71,73,71,0,71,73,72,0,71,73,73,0,71,73,74,0,71,73,75,0,71,73,76,0,71,73,77,0,71,73,78,0,71,73,79,0,71,73,80,0,71,73,81,0,71,73,82,0,71,73,83,0,71,73,84,0,71,73,85,0,71,73,86,0,71,73,87,0,71,73, -88,0,71,73,89,0,71,73,90,0,71,74,65,0,71,74,66,0,71,74,67,0,71,74,68,0,71,74,69,0,71,74,70,0,71,74,71,0,71,74,72,0,71,74,73,0,71,74,74,0,71,74,75,0,71,74,76,0,71,74,77,0,71,74,78,0,71,74,79,0,71,74,80,0,71,74,81,0,71,74,82,0,71,74,83,0,71,74,84,0,71,74,85,0,71,74,86,0,71,74,87,0,71,74,88,0,71,74,89,0,71,74,90,0,71,75,65,0,71,75,66,0,71,75,67,0,71,75,68,0,71,75,69,0,71,75,70,0,71,75,71,0,71,75,72,0,71,75,73,0,71,75,74,0,71,75,75,0,71,75,76,0,71,75,77,0,71,75,78,0,71,75,79,0,71,75,80,0,71,75,81,0,71, -75,82,0,71,75,83,0,71,75,84,0,71,75,85,0,71,75,86,0,71,75,87,0,71,75,88,0,71,75,89,0,71,75,90,0,71,76,65,0,71,76,66,0,71,76,67,0,71,76,68,0,71,76,69,0,71,76,70,0,71,76,71,0,71,76,72,0,71,76,73,0,71,76,74,0,71,76,75,0,71,76,76,0,71,76,77,0,71,76,78,0,71,76,79,0,71,76,80,0,71,76,81,0,71,76,82,0,71,76,83,0,71,76,84,0,71,76,85,0,71,76,86,0,71,76,87,0,71,76,88,0,71,76,89,0,71,76,90,0,71,77,65,0,71,77,66,0,71,77,67,0,71,77,68,0,71,77,69,0,71,77,70,0,71,77,71,0,71,77,72,0,71,77,73,0,71,77,74,0,71,77,75, -0,71,77,76,0,71,77,77,0,71,77,78,0,71,77,79,0,71,77,80,0,71,77,81,0,71,77,82,0,71,77,83,0,71,77,84,0,71,77,85,0,71,77,86,0,71,77,87,0,71,77,88,0,71,77,89,0,71,77,90,0,71,78,65,0,71,78,66,0,71,78,67,0,71,78,68,0,71,78,69,0,71,78,70,0,71,78,71,0,71,78,72,0,71,78,73,0,71,78,74,0,71,78,75,0,71,78,76,0,71,78,77,0,71,78,78,0,71,78,79,0,71,78,80,0,71,78,81,0,71,78,82,0,71,78,83,0,71,78,84,0,71,78,85,0,71,78,86,0,71,78,87,0,71,78,88,0,71,78,89,0,71,78,90,0,71,79,65,0,71,79,66,0,71,79,67,0,71,79,68,0,71,79, -69,0,71,79,70,0,71,79,71,0,71,79,72,0,71,79,73,0,71,79,74,0,71,79,75,0,71,79,76,0,71,79,77,0,71,79,78,0,71,79,79,0,71,79,80,0,71,79,81,0,71,79,82,0,71,79,83,0,71,79,84,0,71,79,85,0,71,79,86,0,71,79,87,0,71,79,88,0,71,79,89,0,71,79,90,0,71,80,65,0,71,80,66,0,71,80,67,0,71,80,68,0,71,80,69,0,71,80,70,0,71,80,71,0,71,80,72,0,71,80,73,0,71,80,74,0,71,80,75,0,71,80,76,0,71,80,77,0,71,80,78,0,71,80,79,0,71,80,80,0,71,80,81,0,71,80,82,0,71,80,83,0,71,80,84,0,71,80,85,0,71,80,86,0,71,80,87,0,71,80,88,0,71, -80,89,0,71,80,90,0,71,81,65,0,71,81,66,0,71,81,67,0,71,81,68,0,71,81,69,0,71,81,70,0,71,81,71,0,71,81,72,0,71,81,73,0,71,81,74,0,71,81,75,0,71,81,76,0,71,81,77,0,71,81,78,0,71,81,79,0,71,81,80,0,71,81,81,0,71,81,82,0,71,81,83,0,71,81,84,0,71,81,85,0,71,81,86,0,71,81,87,0,71,81,88,0,71,81,89,0,71,81,90,0,71,82,65,0,71,82,66,0,71,82,67,0,71,82,68,0,71,82,69,0,71,82,70,0,71,82,71,0,71,82,72,0,71,82,73,0,71,82,74,0,71,82,75,0,71,82,76,0,71,82,77,0,71,82,78,0,71,82,79,0,71,82,80,0,71,82,81,0,71,82,82, -0,71,82,83,0,71,82,84,0,71,82,85,0,71,82,86,0,71,82,87,0,71,82,88,0,71,82,89,0,71,82,90,0,71,83,65,0,71,83,66,0,71,83,67,0,71,83,68,0,71,83,69,0,71,83,70,0,71,83,71,0,71,83,72,0,71,83,73,0,71,83,74,0,71,83,75,0,71,83,76,0,71,83,77,0,71,83,78,0,71,83,79,0,71,83,80,0,71,83,81,0,71,83,82,0,71,83,83,0,71,83,84,0,71,83,85,0,71,83,86,0,71,83,87,0,71,83,88,0,71,83,89,0,71,83,90,0,71,84,65,0,71,84,66,0,71,84,67,0,71,84,68,0,71,84,69,0,71,84,70,0,71,84,71,0,71,84,72,0,71,84,73,0,71,84,74,0,71,84,75,0,71,84, -76,0,71,84,77,0,71,84,78,0,71,84,79,0,71,84,80,0,71,84,81,0,71,84,82,0,71,84,83,0,71,84,84,0,71,84,85,0,71,84,86,0,71,84,87,0,71,84,88,0,71,84,89,0,71,84,90,0,71,85,65,0,71,85,66,0,71,85,67,0,71,85,68,0,71,85,69,0,71,85,70,0,71,85,71,0,71,85,72,0,71,85,73,0,71,85,74,0,71,85,75,0,71,85,76,0,71,85,77,0,71,85,78,0,71,85,79,0,71,85,80,0,71,85,81,0,71,85,82,0,71,85,83,0,71,85,84,0,71,85,85,0,71,85,86,0,71,85,87,0,71,85,88,0,71,85,89,0,71,85,90,0,71,86,65,0,71,86,66,0,71,86,67,0,71,86,68,0,71,86,69,0,71, -86,70,0,71,86,71,0,71,86,72,0,71,86,73,0,71,86,74,0,71,86,75,0,71,86,76,0,71,86,77,0,71,86,78,0,71,86,79,0,71,86,80,0,71,86,81,0,71,86,82,0,71,86,83,0,71,86,84,0,71,86,85,0,71,86,86,0,71,86,87,0,71,86,88,0,71,86,89,0,71,86,90,0,71,87,65,0,71,87,66,0,71,87,67,0,71,87,68,0,71,87,69,0,71,87,70,0,71,87,71,0,71,87,72,0,71,87,73,0,71,87,74,0,71,87,75,0,71,87,76,0,71,87,77,0,71,87,78,0,71,87,79,0,71,87,80,0,71,87,81,0,71,87,82,0,71,87,83,0,71,87,84,0,71,87,85,0,71,87,86,0,71,87,87,0,71,87,88,0,71,87,89, -0,71,87,90,0,71,88,65,0,71,88,66,0,71,88,67,0,71,88,68,0,71,88,69,0,71,88,70,0,71,88,71,0,71,88,72,0,71,88,73,0,71,88,74,0,71,88,75,0,71,88,76,0,71,88,77,0,71,88,78,0,71,88,79,0,71,88,80,0,71,88,81,0,71,88,82,0,71,88,83,0,71,88,84,0,71,88,85,0,71,88,86,0,71,88,87,0,71,88,88,0,71,88,89,0,71,88,90,0,71,89,65,0,71,89,66,0,71,89,67,0,71,89,68,0,71,89,69,0,71,89,70,0,71,89,71,0,71,89,72,0,71,89,73,0,71,89,74,0,71,89,75,0,71,89,76,0,71,89,77,0,71,89,78,0,71,89,79,0,71,89,80,0,71,89,81,0,71,89,82,0,71,89, -83,0,71,89,84,0,71,89,85,0,71,89,86,0,71,89,87,0,71,89,88,0,71,89,89,0,71,89,90,0,71,90,65,0,71,90,66,0,71,90,67,0,71,90,68,0,71,90,69,0,71,90,70,0,71,90,71,0,71,90,72,0,71,90,73,0,71,90,74,0,71,90,75,0,71,90,76,0,71,90,77,0,71,90,78,0,71,90,79,0,71,90,80,0,71,90,81,0,71,90,82,0,71,90,83,0,71,90,84,0,71,90,85,0,71,90,86,0,71,90,87,0,71,90,88,0,71,90,89,0,71,90,90,0,72,65,65,0,72,65,66,0,72,65,67,0,72,65,68,0,72,65,69,0,72,65,70,0,72,65,71,0,72,65,72,0,72,65,73,0,72,65,74,0,72,65,75,0,72,65,76,0,72, -65,77,0,72,65,78,0,72,65,79,0,72,65,80,0,72,65,81,0,72,65,82,0,72,65,83,0,72,65,84,0,72,65,85,0,72,65,86,0,72,65,87,0,72,65,88,0,72,65,89,0,72,65,90,0,72,66,65,0,72,66,66,0,72,66,67,0,72,66,68,0,72,66,69,0,72,66,70,0,72,66,71,0,72,66,72,0,72,66,73,0,72,66,74,0,72,66,75,0,72,66,76,0,72,66,77,0,72,66,78,0,72,66,79,0,72,66,80,0,72,66,81,0,72,66,82,0,72,66,83,0,72,66,84,0,72,66,85,0,72,66,86,0,72,66,87,0,72,66,88,0,72,66,89,0,72,66,90,0,72,67,65,0,72,67,66,0,72,67,67,0,72,67,68,0,72,67,69,0,72,67,70, -0,72,67,71,0,72,67,72,0,72,67,73,0,72,67,74,0,72,67,75,0,72,67,76,0,72,67,77,0,72,67,78,0,72,67,79,0,72,67,80,0,72,67,81,0,72,67,82,0,72,67,83,0,72,67,84,0,72,67,85,0,72,67,86,0,72,67,87,0,72,67,88,0,72,67,89,0,72,67,90,0,72,68,65,0,72,68,66,0,72,68,67,0,72,68,68,0,72,68,69,0,72,68,70,0,72,68,71,0,72,68,72,0,72,68,73,0,72,68,74,0,72,68,75,0,72,68,76,0,72,68,77,0,72,68,78,0,72,68,79,0,72,68,80,0,72,68,81,0,72,68,82,0,72,68,83,0,72,68,84,0,72,68,85,0,72,68,86,0,72,68,87,0,72,68,88,0,72,68,89,0,72,68, -90,0,72,69,65,0,72,69,66,0,72,69,67,0,72,69,68,0,72,69,69,0,72,69,70,0,72,69,71,0,72,69,72,0,72,69,73,0,72,69,74,0,72,69,75,0,72,69,76,0,72,69,77,0,72,69,78,0,72,69,79,0,72,69,80,0,72,69,81,0,72,69,82,0,72,69,83,0,72,69,84,0,72,69,85,0,72,69,86,0,72,69,87,0,72,69,88,0,72,69,89,0,72,69,90,0,72,70,65,0,72,70,66,0,72,70,67,0,72,70,68,0,72,70,69,0,72,70,70,0,72,70,71,0,72,70,72,0,72,70,73,0,72,70,74,0,72,70,75,0,72,70,76,0,72,70,77,0,72,70,78,0,72,70,79,0,72,70,80,0,72,70,81,0,72,70,82,0,72,70,83,0,72, -70,84,0,72,70,85,0,72,70,86,0,72,70,87,0,72,70,88,0,72,70,89,0,72,70,90,0,72,71,65,0,72,71,66,0,72,71,67,0,72,71,68,0,72,71,69,0,72,71,70,0,72,71,71,0,72,71,72,0,72,71,73,0,72,71,74,0,72,71,75,0,72,71,76,0,72,71,77,0,72,71,78,0,72,71,79,0,72,71,80,0,72,71,81,0,72,71,82,0,72,71,83,0,72,71,84,0,72,71,85,0,72,71,86,0,72,71,87,0,72,71,88,0,72,71,89,0,72,71,90,0,72,72,65,0,72,72,66,0,72,72,67,0,72,72,68,0,72,72,69,0,72,72,70,0,72,72,71,0,72,72,72,0,72,72,73,0,72,72,74,0,72,72,75,0,72,72,76,0,72,72,77, -0,72,72,78,0,72,72,79,0,72,72,80,0,72,72,81,0,72,72,82,0,72,72,83,0,72,72,84,0,72,72,85,0,72,72,86,0,72,72,87,0,72,72,88,0,72,72,89,0,72,72,90,0,72,73,65,0,72,73,66,0,72,73,67,0,72,73,68,0,72,73,69,0,72,73,70,0,72,73,71,0,72,73,72,0,72,73,73,0,72,73,74,0,72,73,75,0,72,73,76,0,72,73,77,0,72,73,78,0,72,73,79,0,72,73,80,0,72,73,81,0,72,73,82,0,72,73,83,0,72,73,84,0,72,73,85,0,72,73,86,0,72,73,87,0,72,73,88,0,72,73,89,0,72,73,90,0,72,74,65,0,72,74,66,0,72,74,67,0,72,74,68,0,72,74,69,0,72,74,70,0,72,74, -71,0,72,74,72,0,72,74,73,0,72,74,74,0,72,74,75,0,72,74,76,0,72,74,77,0,72,74,78,0,72,74,79,0,72,74,80,0,72,74,81,0,72,74,82,0,72,74,83,0,72,74,84,0,72,74,85,0,72,74,86,0,72,74,87,0,72,74,88,0,72,74,89,0,72,74,90,0,72,75,65,0,72,75,66,0,72,75,67,0,72,75,68,0,72,75,69,0,72,75,70,0,72,75,71,0,72,75,72,0,72,75,73,0,72,75,74,0,72,75,75,0,72,75,76,0,72,75,77,0,72,75,78,0,72,75,79,0,72,75,80,0,72,75,81,0,72,75,82,0,72,75,83,0,72,75,84,0,72,75,85,0,72,75,86,0,72,75,87,0,72,75,88,0,72,75,89,0,72,75,90,0,72, -76,65,0,72,76,66,0,72,76,67,0,72,76,68,0,72,76,69,0,72,76,70,0,72,76,71,0,72,76,72,0,72,76,73,0,72,76,74,0,72,76,75,0,72,76,76,0,72,76,77,0,72,76,78,0,72,76,79,0,72,76,80,0,72,76,81,0,72,76,82,0,72,76,83,0,72,76,84,0,72,76,85,0,72,76,86,0,72,76,87,0,72,76,88,0,72,76,89,0,72,76,90,0,72,77,65,0,72,77,66,0,72,77,67,0,72,77,68,0,72,77,69,0,72,77,70,0,72,77,71,0,72,77,72,0,72,77,73,0,72,77,74,0,72,77,75,0,72,77,76,0,72,77,77,0,72,77,78,0,72,77,79,0,72,77,80,0,72,77,81,0,72,77,82,0,72,77,83,0,72,77,84, -0,72,77,85,0,72,77,86,0,72,77,87],"i8",4,x.a+20520); -H([0,72,77,88,0,72,77,89,0,72,77,90,0,72,78,65,0,72,78,66,0,72,78,67,0,72,78,68,0,72,78,69,0,72,78,70,0,72,78,71,0,72,78,72,0,72,78,73,0,72,78,74,0,72,78,75,0,72,78,76,0,72,78,77,0,72,78,78,0,72,78,79,0,72,78,80,0,72,78,81,0,72,78,82,0,72,78,83,0,72,78,84,0,72,78,85,0,72,78,86,0,72,78,87,0,72,78,88,0,72,78,89,0,72,78,90,0,72,79,65,0,72,79,66,0,72,79,67,0,72,79,68,0,72,79,69,0,72,79,70,0,72,79,71,0,72,79,72,0,72,79,73,0,72,79,74,0,72,79,75,0,72,79,76,0,72,79,77,0,72,79,78,0,72,79,79,0,72,79,80,0,72, -79,81,0,72,79,82,0,72,79,83,0,72,79,84,0,72,79,85,0,72,79,86,0,72,79,87,0,72,79,88,0,72,79,89,0,72,79,90,0,72,80,65,0,72,80,66,0,72,80,67,0,72,80,68,0,72,80,69,0,72,80,70,0,72,80,71,0,72,80,72,0,72,80,73,0,72,80,74,0,72,80,75,0,72,80,76,0,72,80,77,0,72,80,78,0,72,80,79,0,72,80,80,0,72,80,81,0,72,80,82,0,72,80,83,0,72,80,84,0,72,80,85,0,72,80,86,0,72,80,87,0,72,80,88,0,72,80,89,0,72,80,90,0,72,81,65,0,72,81,66,0,72,81,67,0,72,81,68,0,72,81,69,0,72,81,70,0,72,81,71,0,72,81,72,0,72,81,73,0,72,81,74, -0,72,81,75,0,72,81,76,0,72,81,77,0,72,81,78,0,72,81,79,0,72,81,80,0,72,81,81,0,72,81,82,0,72,81,83,0,72,81,84,0,72,81,85,0,72,81,86,0,72,81,87,0,72,81,88,0,72,81,89,0,72,81,90,0,72,82,65,0,72,82,66,0,72,82,67,0,72,82,68,0,72,82,69,0,72,82,70,0,72,82,71,0,72,82,72,0,72,82,73,0,72,82,74,0,72,82,75,0,72,82,76,0,72,82,77,0,72,82,78,0,72,82,79,0,72,82,80,0,72,82,81,0,72,82,82,0,72,82,83,0,72,82,84,0,72,82,85,0,72,82,86,0,72,82,87,0,72,82,88,0,72,82,89,0,72,82,90,0,72,83,65,0,72,83,66,0,72,83,67,0,72,83, -68,0,72,83,69,0,72,83,70,0,72,83,71,0,72,83,72,0,72,83,73,0,72,83,74,0,72,83,75,0,72,83,76,0,72,83,77,0,72,83,78,0,72,83,79,0,72,83,80,0,72,83,81,0,72,83,82,0,72,83,83,0,72,83,84,0,72,83,85,0,72,83,86,0,72,83,87,0,72,83,88,0,72,83,89,0,72,83,90,0,72,84,65,0,72,84,66,0,72,84,67,0,72,84,68,0,72,84,69,0,72,84,70,0,72,84,71,0,72,84,72,0,72,84,73,0,72,84,74,0,72,84,75,0,72,84,76,0,72,84,77,0,72,84,78,0,72,84,79,0,72,84,80,0,72,84,81,0,72,84,82,0,72,84,83,0,72,84,84,0,72,84,85,0,72,84,86,0,72,84,87,0,72, -84,88,0,72,84,89,0,72,84,90,0,72,85,65,0,72,85,66,0,72,85,67,0,72,85,68,0,72,85,69,0,72,85,70,0,72,85,71,0,72,85,72,0,72,85,73,0,72,85,74,0,72,85,75,0,72,85,76,0,72,85,77,0,72,85,78,0,72,85,79,0,72,85,80,0,72,85,81,0,72,85,82,0,72,85,83,0,72,85,84,0,72,85,85,0,72,85,86,0,72,85,87,0,72,85,88,0,72,85,89,0,72,85,90,0,72,86,65,0,72,86,66,0,72,86,67,0,72,86,68,0,72,86,69,0,72,86,70,0,72,86,71,0,72,86,72,0,72,86,73,0,72,86,74,0,72,86,75,0,72,86,76,0,72,86,77,0,72,86,78,0,72,86,79,0,72,86,80,0,72,86,81, -0,72,86,82,0,72,86,83,0,72,86,84,0,72,86,85,0,72,86,86,0,72,86,87,0,72,86,88,0,72,86,89,0,72,86,90,0,72,87,65,0,72,87,66,0,72,87,67,0,72,87,68,0,72,87,69,0,72,87,70,0,72,87,71,0,72,87,72,0,72,87,73,0,72,87,74,0,72,87,75,0,72,87,76,0,72,87,77,0,72,87,78,0,72,87,79,0,72,87,80,0,72,87,81,0,72,87,82,0,72,87,83,0,72,87,84,0,72,87,85,0,72,87,86,0,72,87,87,0,72,87,88,0,72,87,89,0,72,87,90,0,72,88,65,0,72,88,66,0,72,88,67,0,72,88,68,0,72,88,69,0,72,88,70,0,72,88,71,0,72,88,72,0,72,88,73,0,72,88,74,0,72,88, -75,0,72,88,76,0,72,88,77,0,72,88,78,0,72,88,79,0,72,88,80,0,72,88,81,0,72,88,82,0,72,88,83,0,72,88,84,0,72,88,85,0,72,88,86,0,72,88,87,0,72,88,88,0,72,88,89,0,72,88,90,0,72,89,65,0,72,89,66,0,72,89,67,0,72,89,68,0,72,89,69,0,72,89,70,0,72,89,71,0,72,89,72,0,72,89,73,0,72,89,74,0,72,89,75,0,72,89,76,0,72,89,77,0,72,89,78,0,72,89,79,0,72,89,80,0,72,89,81,0,72,89,82,0,72,89,83,0,72,89,84,0,72,89,85,0,72,89,86,0,72,89,87,0,72,89,88,0,72,89,89,0,72,89,90,0,72,90,65,0,72,90,66,0,72,90,67,0,72,90,68,0,72, -90,69,0,72,90,70,0,72,90,71,0,72,90,72,0,72,90,73,0,72,90,74,0,72,90,75,0,72,90,76,0,72,90,77,0,72,90,78,0,72,90,79,0,72,90,80,0,72,90,81,0,72,90,82,0,72,90,83,0,72,90,84,0,72,90,85,0,72,90,86,0,72,90,87,0,72,90,88,0,72,90,89,0,72,90,90,0,73,65,65,0,73,65,66,0,73,65,67,0,73,65,68,0,73,65,69,0,73,65,70,0,73,65,71,0,73,65,72,0,73,65,73,0,73,65,74,0,73,65,75,0,73,65,76,0,73,65,77,0,73,65,78,0,73,65,79,0,73,65,80,0,73,65,81,0,73,65,82,0,73,65,83,0,73,65,84,0,73,65,85,0,73,65,86,0,73,65,87,0,73,65,88, -0,73,65,89,0,73,65,90,0,73,66,65,0,73,66,66,0,73,66,67,0,73,66,68,0,73,66,69,0,73,66,70,0,73,66,71,0,73,66,72,0,73,66,73,0,73,66,74,0,73,66,75,0,73,66,76,0,73,66,77,0,73,66,78,0,73,66,79,0,73,66,80,0,73,66,81,0,73,66,82,0,73,66,83,0,73,66,84,0,73,66,85,0,73,66,86,0,73,66,87,0,73,66,88,0,73,66,89,0,73,66,90,0,73,67,65,0,73,67,66,0,73,67,67,0,73,67,68,0,73,67,69,0,73,67,70,0,73,67,71,0,73,67,72,0,73,67,73,0,73,67,74,0,73,67,75,0,73,67,76,0,73,67,77,0,73,67,78,0,73,67,79,0,73,67,80,0,73,67,81,0,73,67, -82,0,73,67,83,0,73,67,84,0,73,67,85,0,73,67,86,0,73,67,87,0,73,67,88,0,73,67,89,0,73,67,90,0,73,68,65,0,73,68,66,0,73,68,67,0,73,68,68,0,73,68,69,0,73,68,70,0,73,68,71,0,73,68,72,0,73,68,73,0,73,68,74,0,73,68,75,0,73,68,76,0,73,68,77,0,73,68,78,0,73,68,79,0,73,68,80,0,73,68,81,0,73,68,82,0,73,68,83,0,73,68,84,0,73,68,85,0,73,68,86,0,73,68,87,0,73,68,88,0,73,68,89,0,73,68,90,0,73,69,65,0,73,69,66,0,73,69,67,0,73,69,68,0,73,69,69,0,73,69,70,0,73,69,71,0,73,69,72,0,73,69,73,0,73,69,74,0,73,69,75,0,73, -69,76,0,73,69,77,0,73,69,78,0,73,69,79,0,73,69,80,0,73,69,81,0,73,69,82,0,73,69,83,0,73,69,84,0,73,69,85,0,73,69,86,0,73,69,87,0,73,69,88,0,73,69,89,0,73,69,90,0,73,70,65,0,73,70,66,0,73,70,67,0,73,70,68,0,73,70,69,0,73,70,70,0,73,70,71,0,73,70,72,0,73,70,73,0,73,70,74,0,73,70,75,0,73,70,76,0,73,70,77,0,73,70,78,0,73,70,79,0,73,70,80,0,73,70,81,0,73,70,82,0,73,70,83,0,73,70,84,0,73,70,85,0,73,70,86,0,73,70,87,0,73,70,88,0,73,70,89,0,73,70,90,0,73,71,65,0,73,71,66,0,73,71,67,0,73,71,68,0,73,71,69, -0,73,71,70,0,73,71,71,0,73,71,72,0,73,71,73,0,73,71,74,0,73,71,75,0,73,71,76,0,73,71,77,0,73,71,78,0,73,71,79,0,73,71,80,0,73,71,81,0,73,71,82,0,73,71,83,0,73,71,84,0,73,71,85,0,73,71,86,0,73,71,87,0,73,71,88,0,73,71,89,0,73,71,90,0,73,72,65,0,73,72,66,0,73,72,67,0,73,72,68,0,73,72,69,0,73,72,70,0,73,72,71,0,73,72,72,0,73,72,73,0,73,72,74,0,73,72,75,0,73,72,76,0,73,72,77,0,73,72,78,0,73,72,79,0,73,72,80,0,73,72,81,0,73,72,82,0,73,72,83,0,73,72,84,0,73,72,85,0,73,72,86,0,73,72,87,0,73,72,88,0,73,72, -89,0,73,72,90,0,73,73,65,0,73,73,66,0,73,73,67,0,73,73,68,0,73,73,69,0,73,73,70,0,73,73,71,0,73,73,72,0,73,73,73,0,73,73,74,0,73,73,75,0,73,73,76,0,73,73,77,0,73,73,78,0,73,73,79,0,73,73,80,0,73,73,81,0,73,73,82,0,73,73,83,0,73,73,84,0,73,73,85,0,73,73,86,0,73,73,87,0,73,73,88,0,73,73,89,0,73,73,90,0,73,74,65,0,73,74,66,0,73,74,67,0,73,74,68,0,73,74,69,0,73,74,70,0,73,74,71,0,73,74,72,0,73,74,73,0,73,74,74,0,73,74,75,0,73,74,76,0,73,74,77,0,73,74,78,0,73,74,79,0,73,74,80,0,73,74,81,0,73,74,82,0,73, -74,83,0,73,74,84,0,73,74,85,0,73,74,86,0,73,74,87,0,73,74,88,0,73,74,89,0,73,74,90,0,73,75,65,0,73,75,66,0,73,75,67,0,73,75,68,0,73,75,69,0,73,75,70,0,73,75,71,0,73,75,72,0,73,75,73,0,73,75,74,0,73,75,75,0,73,75,76,0,73,75,77,0,73,75,78,0,73,75,79,0,73,75,80,0,73,75,81,0,73,75,82,0,73,75,83,0,73,75,84,0,73,75,85,0,73,75,86,0,73,75,87,0,73,75,88,0,73,75,89,0,73,75,90,0,73,76,65,0,73,76,66,0,73,76,67,0,73,76,68,0,73,76,69,0,73,76,70,0,73,76,71,0,73,76,72,0,73,76,73,0,73,76,74,0,73,76,75,0,73,76,76, -0,73,76,77,0,73,76,78,0,73,76,79,0,73,76,80,0,73,76,81,0,73,76,82,0,73,76,83,0,73,76,84,0,73,76,85,0,73,76,86,0,73,76,87,0,73,76,88,0,73,76,89,0,73,76,90,0,73,77,65,0,73,77,66,0,73,77,67,0,73,77,68,0,73,77,69,0,73,77,70,0,73,77,71,0,73,77,72,0,73,77,73,0,73,77,74,0,73,77,75,0,73,77,76,0,73,77,77,0,73,77,78,0,73,77,79,0,73,77,80,0,73,77,81,0,73,77,82,0,73,77,83,0,73,77,84,0,73,77,85,0,73,77,86,0,73,77,87,0,73,77,88,0,73,77,89,0,73,77,90,0,73,78,65,0,73,78,66,0,73,78,67,0,73,78,68,0,73,78,69,0,73,78, -70,0,73,78,71,0,73,78,72,0,73,78,73,0,73,78,74,0,73,78,75,0,73,78,76,0,73,78,77,0,73,78,78,0,73,78,79,0,73,78,80,0,73,78,81,0,73,78,82,0,73,78,83,0,73,78,84,0,73,78,85,0,73,78,86,0,73,78,87,0,73,78,88,0,73,78,89,0,73,78,90,0,73,79,65,0,73,79,66,0,73,79,67,0,73,79,68,0,73,79,69,0,73,79,70,0,73,79,71,0,73,79,72,0,73,79,73,0,73,79,74,0,73,79,75,0,73,79,76,0,73,79,77,0,73,79,78,0,73,79,79,0,73,79,80,0,73,79,81,0,73,79,82,0,73,79,83,0,73,79,84,0,73,79,85,0,73,79,86,0,73,79,87,0,73,79,88,0,73,79,89,0,73, -79,90,0,73,80,65,0,73,80,66,0,73,80,67,0,73,80,68,0,73,80,69,0,73,80,70,0,73,80,71,0,73,80,72,0,73,80,73,0,73,80,74,0,73,80,75,0,73,80,76,0,73,80,77,0,73,80,78,0,73,80,79,0,73,80,80,0,73,80,81,0,73,80,82,0,73,80,83,0,73,80,84,0,73,80,85,0,73,80,86,0,73,80,87,0,73,80,88,0,73,80,89,0,73,80,90,0,73,81,65,0,73,81,66,0,73,81,67,0,73,81,68,0,73,81,69,0,73,81,70,0,73,81,71,0,73,81,72,0,73,81,73,0,73,81,74,0,73,81,75,0,73,81,76,0,73,81,77,0,73,81,78,0,73,81,79,0,73,81,80,0,73,81,81,0,73,81,82,0,73,81,83, -0,73,81,84,0,73,81,85,0,73,81,86,0,73,81,87,0,73,81,88,0,73,81,89,0,73,81,90,0,73,82,65,0,73,82,66,0,73,82,67,0,73,82,68,0,73,82,69,0,73,82,70,0,73,82,71,0,73,82,72,0,73,82,73,0,73,82,74,0,73,82,75,0,73,82,76,0,73,82,77,0,73,82,78,0,73,82,79,0,73,82,80,0,73,82,81,0,73,82,82,0,73,82,83,0,73,82,84,0,73,82,85,0,73,82,86,0,73,82,87,0,73,82,88,0,73,82,89,0,73,82,90,0,73,83,65,0,73,83,66,0,73,83,67,0,73,83,68,0,73,83,69,0,73,83,70,0,73,83,71,0,73,83,72,0,73,83,73,0,73,83,74,0,73,83,75,0,73,83,76,0,73,83, -77,0,73,83,78,0,73,83,79,0,73,83,80,0,73,83,81,0,73,83,82,0,73,83,83,0,73,83,84,0,73,83,85,0,73,83,86,0,73,83,87,0,73,83,88,0,73,83,89,0,73,83,90,0,73,84,65,0,73,84,66,0,73,84,67,0,73,84,68,0,73,84,69,0,73,84,70,0,73,84,71,0,73,84,72,0,73,84,73,0,73,84,74,0,73,84,75,0,73,84,76,0,73,84,77,0,73,84,78,0,73,84,79,0,73,84,80,0,73,84,81,0,73,84,82,0,73,84,83,0,73,84,84,0,73,84,85,0,73,84,86,0,73,84,87,0,73,84,88,0,73,84,89,0,73,84,90,0,73,85,65,0,73,85,66,0,73,85,67,0,73,85,68,0,73,85,69,0,73,85,70,0,73, -85,71,0,73,85,72,0,73,85,73,0,73,85,74,0,73,85,75,0,73,85,76,0,73,85,77,0,73,85,78,0,73,85,79,0,73,85,80,0,73,85,81,0,73,85,82,0,73,85,83,0,73,85,84,0,73,85,85,0,73,85,86,0,73,85,87,0,73,85,88,0,73,85,89,0,73,85,90,0,73,86,65,0,73,86,66,0,73,86,67,0,73,86,68,0,73,86,69,0,73,86,70,0,73,86,71,0,73,86,72,0,73,86,73,0,73,86,74,0,73,86,75,0,73,86,76,0,73,86,77,0,73,86,78,0,73,86,79,0,73,86,80,0,73,86,81,0,73,86,82,0,73,86,83,0,73,86,84,0,73,86,85,0,73,86,86,0,73,86,87,0,73,86,88,0,73,86,89,0,73,86,90, -0,73,87,65,0,73,87,66,0,73,87,67,0,73,87,68,0,73,87,69,0,73,87,70,0,73,87,71,0,73,87,72,0,73,87,73,0,73,87,74,0,73,87,75,0,73,87,76,0,73,87,77,0,73,87,78,0,73,87,79,0,73,87,80,0,73,87,81,0,73,87,82,0,73,87,83,0,73,87,84,0,73,87,85,0,73,87,86,0,73,87,87,0,73,87,88,0,73,87,89,0,73,87,90,0,73,88,65,0,73,88,66,0,73,88,67,0,73,88,68,0,73,88,69,0,73,88,70,0,73,88,71,0,73,88,72,0,73,88,73,0,73,88,74,0,73,88,75,0,73,88,76,0,73,88,77,0,73,88,78,0,73,88,79,0,73,88,80,0,73,88,81,0,73,88,82,0,73,88,83,0,73,88, -84,0,73,88,85,0,73,88,86,0,73,88,87,0,73,88,88,0,73,88,89,0,73,88,90,0,73,89,65,0,73,89,66,0,73,89,67,0,73,89,68,0,73,89,69,0,73,89,70,0,73,89,71,0,73,89,72,0,73,89,73,0,73,89,74,0,73,89,75,0,73,89,76,0,73,89,77,0,73,89,78,0,73,89,79,0,73,89,80,0,73,89,81,0,73,89,82,0,73,89,83,0,73,89,84,0,73,89,85,0,73,89,86,0,73,89,87,0,73,89,88,0,73,89,89,0,73,89,90,0,73,90,65,0,73,90,66,0,73,90,67,0,73,90,68,0,73,90,69,0,73,90,70,0,73,90,71,0,73,90,72,0,73,90,73,0,73,90,74,0,73,90,75,0,73,90,76,0,73,90,77,0,73, -90,78,0,73,90,79,0,73,90,80,0,73,90,81,0,73,90,82,0,73,90,83,0,73,90,84,0,73,90,85,0,73,90,86,0,73,90,87,0,73,90,88,0,73,90,89,0,73,90,90,0,74,65,65,0,74,65,66,0,74,65,67,0,74,65,68,0,74,65,69,0,74,65,70,0,74,65,71,0,74,65,72,0,74,65,73,0,74,65,74,0,74,65,75,0,74,65,76,0,74,65,77,0,74,65,78,0,74,65,79,0,74,65,80,0,74,65,81,0,74,65,82,0,74,65,83,0,74,65,84,0,74,65,85,0,74,65,86,0,74,65,87,0,74,65,88,0,74,65,89,0,74,65,90,0,74,66,65,0,74,66,66,0,74,66,67,0,74,66,68,0,74,66,69,0,74,66,70,0,74,66,71, -0,74,66,72,0,74,66,73,0,74,66,74,0,74,66,75,0,74,66,76,0,74,66,77,0,74,66,78,0,74,66,79,0,74,66,80,0,74,66,81,0,74,66,82,0,74,66,83,0,74,66,84,0,74,66,85,0,74,66,86,0,74,66,87,0,74,66,88,0,74,66,89,0,74,66,90,0,74,67,65,0,74,67,66,0,74,67,67,0,74,67,68,0,74,67,69,0,74,67,70,0,74,67,71,0,74,67,72,0,74,67,73,0,74,67,74,0,74,67,75,0,74,67,76,0,74,67,77,0,74,67,78,0,74,67,79,0,74,67,80,0,74,67,81,0,74,67,82,0,74,67,83,0,74,67,84,0,74,67,85,0,74,67,86,0,74,67,87,0,74,67,88,0,74,67,89,0,74,67,90,0,74,68, -65,0,74,68,66,0,74,68,67,0,74,68,68,0,74,68,69,0,74,68,70,0,74,68,71,0,74,68,72,0,74,68,73,0,74,68,74,0,74,68,75,0,74,68,76,0,74,68,77,0,74,68,78,0,74,68,79,0,74,68,80,0,74,68,81,0,74,68,82,0,74,68,83,0,74,68,84,0,74,68,85,0,74,68,86,0,74,68,87,0,74,68,88,0,74,68,89,0,74,68,90,0,74,69,65,0,74,69,66,0,74,69,67,0,74,69,68,0,74,69,69,0,74,69,70,0,74,69,71,0,74,69,72,0,74,69,73,0,74,69,74,0,74,69,75,0,74,69,76,0,74,69,77,0,74,69,78,0,74,69,79,0,74,69,80,0,74,69,81,0,74,69,82,0,74,69,83,0,74,69,84,0,74, -69,85,0,74,69,86,0,74,69,87,0,74,69,88,0,74,69,89,0,74,69,90,0,74,70,65,0,74,70,66,0,74,70,67,0,74,70,68,0,74,70,69,0,74,70,70,0,74,70,71,0,74,70,72,0,74,70,73,0,74,70,74,0,74,70,75,0,74,70,76,0,74,70,77,0,74,70,78,0,74,70,79,0,74,70,80,0,74,70,81,0,74,70,82,0,74,70,83,0,74,70,84,0,74,70,85,0,74,70,86,0,74,70,87,0,74,70,88,0,74,70,89,0,74,70,90,0,74,71,65,0,74,71,66,0,74,71,67,0,74,71,68,0,74,71,69,0,74,71,70,0,74,71,71,0,74,71,72,0,74,71,73,0,74,71,74,0,74,71,75,0,74,71,76,0,74,71,77,0,74,71,78, -0,74,71,79,0,74,71,80,0,74,71,81,0,74,71,82,0,74,71,83,0,74,71,84,0,74,71,85,0,74,71,86,0,74,71,87,0,74,71,88,0,74,71,89,0,74,71,90,0,74,72,65,0,74,72,66,0,74,72,67,0,74,72,68,0,74,72,69,0,74,72,70,0,74,72,71,0,74,72,72,0,74,72,73,0,74,72,74,0,74,72,75,0,74,72,76,0,74,72,77,0,74,72,78,0,74,72,79,0,74,72,80,0,74,72,81,0,74,72,82,0,74,72,83,0,74,72,84,0,74,72,85,0,74,72,86,0,74,72,87,0,74,72,88,0,74,72,89,0,74,72,90,0,74,73,65,0,74,73,66,0,74,73,67,0,74,73,68,0,74,73,69,0,74,73,70,0,74,73,71,0,74,73, -72,0,74,73,73,0,74,73,74,0,74,73,75,0,74,73,76,0,74,73,77,0,74,73,78,0,74,73,79,0,74,73,80,0,74,73,81,0,74,73,82,0,74,73,83,0,74,73,84,0,74,73,85,0,74,73,86,0,74,73,87,0,74,73,88,0,74,73,89,0,74,73,90,0,74,74,65,0,74,74,66,0,74,74,67,0,74,74,68,0,74,74,69,0,74,74,70,0,74,74,71,0,74,74,72,0,74,74,73,0,74,74,74,0,74,74,75,0,74,74,76,0,74,74,77,0,74,74,78,0,74,74,79,0,74,74,80,0,74,74,81,0,74,74,82,0,74,74,83,0,74,74,84,0,74,74,85,0,74,74,86,0,74,74,87,0,74,74,88,0,74,74,89,0,74,74,90,0,74,75,65,0,74, -75,66,0,74,75,67,0,74,75,68,0,74,75,69,0,74,75,70,0,74,75,71,0,74,75,72,0,74,75,73,0,74,75,74,0,74,75,75,0,74,75,76,0,74,75,77,0,74,75,78,0,74,75,79,0,74,75,80,0,74,75,81,0,74,75,82,0,74,75,83,0,74,75,84,0,74,75,85,0,74,75,86,0,74,75,87,0,74,75,88,0,74,75,89,0,74,75,90,0,74,76,65,0,74,76,66,0,74,76,67,0,74,76,68,0,74,76,69,0,74,76,70,0,74,76,71,0,74,76,72,0,74,76,73,0,74,76,74,0,74,76,75,0,74,76,76,0,74,76,77,0,74,76,78,0,74,76,79,0,74,76,80,0,74,76,81,0,74,76,82,0,74,76,83,0,74,76,84,0,74,76,85, -0,74,76,86,0,74,76,87,0,74,76,88,0,74,76,89,0,74,76,90,0,74,77,65,0,74,77,66,0,74,77,67,0,74,77,68,0,74,77,69,0,74,77,70,0,74,77,71,0,74,77,72,0,74,77,73,0,74,77,74,0,74,77,75,0,74,77,76,0,74,77,77,0,74,77,78,0,74,77,79,0,74,77,80,0,74,77,81,0,74,77,82,0,74,77,83,0,74,77,84,0,74,77,85,0,74,77,86,0,74,77,87,0,74,77,88,0,74,77,89,0,74,77,90,0,74,78,65,0,74,78,66,0,74,78,67,0,74,78,68,0,74,78,69,0,74,78,70,0,74,78,71,0,74,78,72,0,74,78,73,0,74,78,74,0,74,78,75,0,74,78,76,0,74,78,77,0,74,78,78,0,74,78, -79,0,74,78,80,0,74,78,81,0,74,78,82,0,74,78,83,0,74,78,84,0,74,78,85,0,74,78,86,0,74,78,87,0,74,78,88,0,74,78,89,0,74,78,90,0,74,79,65,0,74,79,66,0,74,79,67,0,74,79,68,0,74,79,69,0,74,79,70,0,74,79,71,0,74,79,72,0,74,79,73,0,74,79,74,0,74,79,75,0,74,79,76,0,74,79,77,0,74,79,78,0,74,79,79,0,74,79,80,0,74,79,81,0,74,79,82,0,74,79,83,0,74,79,84,0,74,79,85,0,74,79,86,0,74,79,87,0,74,79,88,0,74,79,89,0,74,79,90,0,74,80,65,0,74,80,66,0,74,80,67,0,74,80,68,0,74,80,69,0,74,80,70,0,74,80,71,0,74,80,72,0,74, -80,73,0,74,80,74,0,74,80,75,0,74,80,76,0,74,80,77,0,74,80,78,0,74,80,79,0,74,80,80,0,74,80,81,0,74,80,82,0,74,80,83,0,74,80,84,0,74,80,85,0,74,80,86,0,74,80,87,0,74,80,88,0,74,80,89,0,74,80,90,0,74,81,65,0,74,81,66,0,74,81,67,0,74,81,68,0,74,81,69,0,74,81,70,0,74,81,71,0,74,81,72,0,74,81,73,0,74,81,74,0,74,81,75,0,74,81,76,0,74,81,77,0,74,81,78,0,74,81,79,0,74,81,80,0,74,81,81,0,74,81,82,0,74,81,83,0,74,81,84,0,74,81,85,0,74,81,86,0,74,81,87,0,74,81,88,0,74,81,89,0,74,81,90,0,74,82,65,0,74,82,66, -0,74,82,67,0,74,82,68,0,74,82,69,0,74,82,70,0,74,82,71,0,74,82,72,0,74,82,73,0,74,82,74,0,74,82,75,0,74,82,76,0,74,82,77,0,74,82,78,0,74,82,79,0,74,82,80,0,74,82,81,0,74,82,82,0,74,82,83,0,74,82,84,0,74,82,85,0,74,82,86,0,74,82,87,0,74,82,88,0,74,82,89,0,74,82,90,0,74,83,65,0,74,83,66,0,74,83,67,0,74,83,68,0,74,83,69,0,74,83,70,0,74,83,71,0,74,83,72,0,74,83,73,0,74,83,74,0,74,83,75,0,74,83,76,0,74,83,77,0,74,83,78,0,74,83,79,0,74,83,80,0,74,83,81,0,74,83,82,0,74,83,83,0,74,83,84,0,74,83,85,0,74,83, -86,0,74,83,87,0,74,83,88,0,74,83,89,0,74,83,90,0,74,84,65,0,74,84,66,0,74,84,67,0,74,84,68,0,74,84,69,0,74,84,70,0,74,84,71,0,74,84,72,0,74,84,73,0,74,84,74,0,74,84,75,0,74,84,76,0,74,84,77,0,74,84,78,0,74,84,79,0,74,84,80,0,74,84,81,0,74,84,82,0,74,84,83,0,74,84,84,0,74,84,85,0,74,84,86,0,74,84,87,0,74,84,88,0,74,84,89,0,74,84,90,0,74,85,65,0,74,85,66,0,74,85,67,0,74,85,68,0,74,85,69,0,74,85,70,0,74,85,71,0,74,85,72,0,74,85,73,0,74,85,74,0,74,85,75,0,74,85,76,0,74,85,77,0,74,85,78,0,74,85,79,0,74, -85,80,0,74,85,81,0,74,85,82,0,74,85,83,0,74,85,84,0,74,85,85,0,74,85,86,0,74,85,87,0,74,85,88,0,74,85,89,0,74,85,90,0,74,86,65,0,74,86,66,0,74,86,67,0,74,86,68,0,74,86,69,0,74,86,70,0,74,86,71,0,74,86,72,0,74,86,73,0,74,86,74,0,74,86,75,0,74,86,76,0,74,86,77,0,74,86,78,0,74,86,79,0,74,86,80,0,74,86,81,0,74,86,82,0,74,86,83,0,74,86,84,0,74,86,85,0,74,86,86,0,74,86,87,0,74,86,88,0,74,86,89,0,74,86,90,0,74,87,65,0,74,87,66,0,74,87,67,0,74,87,68,0,74,87,69,0,74,87,70,0,74,87,71,0,74,87,72,0,74,87,73, -0,74,87,74,0,74,87,75,0,74,87,76,0,74,87,77,0,74,87,78,0,74,87,79,0,74,87,80,0,74,87,81,0,74,87,82,0,74,87,83,0,74,87,84,0,74,87,85,0,74,87,86,0,74,87,87,0,74,87,88,0,74,87,89,0,74,87,90,0,74,88,65,0,74,88,66,0,74,88,67,0,74,88,68,0,74,88,69,0,74,88,70,0,74,88,71,0,74,88,72,0,74,88,73,0,74,88,74,0,74,88,75,0,74,88,76,0,74,88,77,0,74,88,78,0,74,88,79,0,74,88,80,0,74,88,81,0,74,88,82,0,74,88,83,0,74,88,84,0,74,88,85,0,74,88,86,0,74,88,87,0,74,88,88,0,74,88,89,0,74,88,90,0,74,89,65,0,74,89,66,0,74,89, -67,0,74,89,68,0,74,89,69,0,74,89,70,0,74,89,71,0,74,89,72,0,74,89,73,0,74,89,74,0,74,89,75,0,74,89,76,0,74,89,77,0,74,89,78,0,74,89,79,0,74,89,80,0,74,89,81,0,74,89,82,0,74,89,83,0,74,89,84,0,74,89,85,0,74,89,86,0,74,89,87,0,74,89,88,0,74,89,89,0,74,89,90,0,74,90,65,0,74,90,66,0,74,90,67,0,74,90,68,0,74,90,69,0,74,90,70,0,74,90,71,0,74,90,72,0,74,90,73,0,74,90,74,0,74,90,75,0,74,90,76,0,74,90,77,0,74,90,78,0,74,90,79,0,74,90,80,0,74,90,81,0,74,90,82,0,74,90,83,0,74,90,84,0,74,90,85,0,74,90,86,0,74, -90,87,0,74,90,88,0,74,90,89,0,74,90,90,0,75,65,65,0,75,65,66,0,75,65,67,0,75,65,68,0,75,65,69,0,75,65,70,0,75,65,71,0,75,65,72,0,75,65,73,0,75,65,74,0,75,65,75,0,75,65,76,0,75,65,77,0,75,65,78,0,75,65,79,0,75,65,80,0,75,65,81,0,75,65,82,0,75,65,83,0,75,65,84,0,75,65,85,0,75,65,86,0,75,65,87,0,75,65,88,0,75,65,89,0,75,65,90,0,75,66,65,0,75,66,66,0,75,66,67,0,75,66,68,0,75,66,69,0,75,66,70,0,75,66,71,0,75,66,72,0,75,66,73,0,75,66,74,0,75,66,75,0,75,66,76,0,75,66,77,0,75,66,78,0,75,66,79,0,75,66,80, -0,75,66,81,0,75,66,82,0,75,66,83,0,75,66,84,0,75,66,85,0,75,66,86,0,75,66,87,0,75,66,88,0,75,66,89,0,75,66,90,0,75,67,65,0,75,67,66,0,75,67,67,0,75,67,68,0,75,67,69,0,75,67,70,0,75,67,71,0,75,67,72,0,75,67,73,0,75,67,74,0,75,67,75,0,75,67,76,0,75,67,77,0,75,67,78,0,75,67,79,0,75,67,80,0,75,67,81,0,75,67,82,0,75,67,83,0,75,67,84,0,75,67,85,0,75,67,86,0,75,67,87,0,75,67,88,0,75,67,89,0,75,67,90,0,75,68,65,0,75,68,66,0,75,68,67,0,75,68,68,0,75,68,69,0,75,68,70,0,75,68,71,0,75,68,72,0,75,68,73,0,75,68, -74,0,75,68,75,0,75,68,76,0,75,68,77,0,75,68,78,0,75,68,79,0,75,68,80,0,75,68,81,0,75,68,82,0,75,68,83,0,75,68,84,0,75,68,85,0,75,68,86,0,75,68,87,0,75,68,88,0,75,68,89,0,75,68,90,0,75,69,65,0,75,69,66,0,75,69,67,0,75,69,68,0,75,69,69,0,75,69,70,0,75,69,71,0,75,69,72,0,75,69,73,0,75,69,74,0,75,69,75,0,75,69,76,0,75,69,77,0,75,69,78,0,75,69,79,0,75,69,80,0,75,69,81,0,75,69,82,0,75,69,83,0,75,69,84,0,75,69,85,0,75,69,86,0,75,69,87,0,75,69,88,0,75,69,89,0,75,69,90,0,75,70,65,0,75,70,66,0,75,70,67,0,75, -70,68,0,75,70,69,0,75,70,70,0,75,70,71,0,75,70,72,0,75,70,73,0,75,70,74,0,75,70,75,0,75,70,76,0,75,70,77,0,75,70,78,0,75,70,79,0,75,70,80,0,75,70,81,0,75,70,82,0,75,70,83,0,75,70,84,0,75,70,85,0,75,70,86,0,75,70,87,0,75,70,88,0,75,70,89,0,75,70,90,0,75,71,65,0,75,71,66,0,75,71,67,0,75,71,68,0,75,71,69,0,75,71,70,0,75,71,71,0,75,71,72,0,75,71,73,0,75,71,74,0,75,71,75,0,75,71,76,0,75,71,77,0,75,71,78,0,75,71,79,0,75,71,80,0,75,71,81,0,75,71,82,0,75,71,83,0,75,71,84,0,75,71,85,0,75,71,86,0,75,71,87, -0,75,71,88,0,75,71,89,0,75,71,90,0,75,72,65,0,75,72,66,0,75,72,67,0,75,72,68,0,75,72,69,0,75,72,70,0,75,72,71,0,75,72,72,0,75,72,73,0,75,72,74,0,75,72,75,0,75,72,76,0,75,72,77,0,75,72,78,0,75,72,79,0,75,72,80,0,75,72,81,0,75,72,82,0,75,72,83,0,75,72,84,0,75,72,85,0,75,72,86,0,75,72,87,0,75,72,88,0,75,72,89,0,75,72,90,0,75,73,65,0,75,73,66,0,75,73,67,0,75,73,68,0,75,73,69,0,75,73,70,0,75,73,71,0,75,73,72,0,75,73,73,0,75,73,74,0,75,73,75,0,75,73,76,0,75,73,77,0,75,73,78,0,75,73,79,0,75,73,80,0,75,73, -81,0,75,73,82,0,75,73,83,0,75,73,84,0,75,73,85,0,75,73,86,0,75,73,87,0,75,73,88,0,75,73,89,0,75,73,90,0,75,74,65,0,75,74,66,0,75,74,67,0,75,74,68,0,75,74,69,0,75,74,70,0,75,74,71,0,75,74,72,0,75,74,73,0,75,74,74,0,75,74,75,0,75,74,76,0,75,74,77,0,75,74,78,0,75,74,79,0,75,74,80,0,75,74,81,0,75,74,82,0,75,74,83,0,75,74,84,0,75,74,85,0,75,74,86,0,75,74,87,0,75,74,88,0,75,74,89,0,75,74,90,0,75,75,65,0,75,75,66,0,75,75,67,0,75,75,68,0,75,75,69,0,75,75,70,0,75,75,71,0,75,75,72,0,75,75,73,0,75,75,74,0,75, -75,75,0,75,75,76,0,75,75,77,0,75,75,78,0,75,75,79,0,75,75,80,0,75,75,81,0,75,75,82,0,75,75,83,0,75,75,84,0,75,75,85,0,75,75,86,0,75,75,87,0,75,75,88,0,75,75,89,0,75,75,90,0,75,76,65,0,75,76,66,0,75,76,67,0,75,76,68,0,75,76,69,0,75,76,70,0,75,76,71,0,75,76,72,0,75,76,73,0,75,76,74,0,75,76,75,0,75,76,76,0,75,76,77,0,75,76,78,0,75,76,79,0,75,76,80,0,75,76,81,0,75,76,82,0,75,76,83,0,75,76,84,0,75,76,85,0,75,76,86,0,75,76,87,0,75,76,88,0,75,76,89,0,75,76,90,0,75,77,65,0,75,77,66,0,75,77,67,0,75,77,68, -0,75,77,69,0,75,77,70,0,75,77,71,0,75,77,72,0,75,77,73,0,75,77,74,0,75,77,75,0,75,77,76,0,75,77,77,0,75,77,78,0,75,77,79,0,75,77,80,0,75,77,81,0,75,77,82,0,75,77,83,0,75,77,84,0,75,77,85,0,75,77,86,0,75,77,87,0,75,77,88,0,75,77,89,0,75,77,90,0,75,78,65,0,75,78,66,0,75,78,67,0,75,78,68,0,75,78,69,0,75,78,70,0,75,78,71,0,75,78,72,0,75,78,73,0,75,78,74,0,75,78,75,0,75,78,76,0,75,78,77,0,75,78,78,0,75,78,79,0,75,78,80,0,75,78,81,0,75,78,82,0,75,78,83,0,75,78,84,0,75,78,85,0,75,78,86,0,75,78,87,0,75,78, -88,0,75,78,89,0,75,78,90,0,75,79,65,0,75,79,66,0,75,79,67,0,75,79,68,0,75,79,69,0,75,79,70,0,75,79,71,0,75,79,72,0,75,79,73,0,75,79,74,0,75,79,75,0,75,79,76,0,75,79,77,0,75,79,78,0,75,79,79,0,75,79,80,0,75,79,81,0,75,79,82,0,75,79,83,0,75,79,84,0,75,79,85,0,75,79,86,0,75,79,87,0,75,79,88,0,75,79,89,0,75,79,90,0,75,80,65,0,75,80,66,0,75,80,67,0,75,80,68,0,75,80,69,0,75,80,70,0,75,80,71,0,75,80,72,0,75,80,73,0,75,80,74,0,75,80,75,0,75,80,76,0,75,80,77,0,75,80,78,0,75,80,79,0,75,80,80,0,75,80,81,0,75, -80,82,0,75,80,83,0,75,80,84,0,75,80,85,0,75,80,86,0,75,80,87,0,75,80,88,0,75,80,89,0,75,80,90,0,75,81,65,0,75,81,66,0,75,81,67,0,75,81,68,0,75,81,69,0,75,81,70,0,75,81,71,0,75,81,72,0,75,81,73,0,75,81,74,0,75,81,75,0,75,81,76,0,75,81,77,0,75,81,78,0,75,81,79,0,75,81,80,0,75,81,81,0,75,81,82,0,75,81,83,0,75,81,84,0,75,81,85,0,75,81,86,0,75,81,87,0,75,81,88,0,75,81,89,0,75,81,90,0,75,82,65,0,75,82,66,0,75,82,67,0,75,82,68,0,75,82,69,0,75,82,70,0,75,82,71,0,75,82,72,0,75,82,73,0,75,82,74,0,75,82,75, -0,75,82,76,0,75,82,77,0,75,82,78,0,75,82,79,0,75,82,80,0,75,82,81,0,75,82,82,0,75,82,83,0,75,82,84,0,75,82,85,0,75,82,86,0,75,82,87,0,75,82,88,0,75,82,89,0,75,82,90,0,75,83,65,0,75,83,66,0,75,83,67,0,75,83,68,0,75,83,69,0,75,83,70,0,75,83,71,0,75,83,72,0,75,83,73,0,75,83,74,0,75,83,75,0,75,83,76,0,75,83,77,0,75,83,78,0,75,83,79,0,75,83,80,0,75,83,81,0,75,83,82,0,75,83,83,0,75,83,84,0,75,83,85,0,75,83,86,0,75,83,87,0,75,83,88,0,75,83,89,0,75,83,90,0,75,84,65,0,75,84,66,0,75,84,67,0,75,84,68,0,75,84, -69,0,75,84,70,0,75,84,71,0,75,84,72,0,75,84,73,0,75,84,74,0,75,84,75,0,75,84,76,0,75,84,77,0,75,84,78,0,75,84,79,0,75,84,80,0,75,84,81,0,75,84,82,0,75,84,83,0,75,84,84,0,75,84,85,0,75,84,86,0,75,84,87,0,75,84,88,0,75,84,89,0,75,84,90,0,75,85,65,0,75,85,66,0,75,85,67,0,75,85,68,0,75,85,69,0,75,85,70,0,75,85,71,0,75,85,72,0,75,85,73,0,75,85,74,0,75,85,75,0,75,85,76,0,75,85,77,0,75,85,78,0,75,85,79,0,75,85,80,0,75,85,81,0,75,85,82,0,75,85,83,0,75,85,84,0,75,85,85,0,75,85,86,0,75,85,87,0,75,85,88,0,75, -85,89,0,75,85,90,0,75,86,65,0,75,86,66,0,75,86,67,0,75,86,68,0,75,86,69,0,75,86,70,0,75,86,71,0,75,86,72,0,75,86,73,0,75,86,74,0,75,86,75,0,75,86,76,0,75,86,77,0,75,86,78,0,75,86,79,0,75,86,80,0,75,86,81,0,75,86,82,0,75,86,83,0,75,86,84,0,75,86,85,0,75,86,86,0,75,86,87,0,75,86,88,0,75,86,89,0,75,86,90,0,75,87,65,0,75,87,66,0,75,87,67,0,75,87,68,0,75,87,69,0,75,87,70,0,75,87,71,0,75,87,72,0,75,87,73,0,75,87,74,0,75,87,75,0,75,87,76,0,75,87,77,0,75,87,78,0,75,87,79,0,75,87,80,0,75,87,81,0,75,87,82, -0,75,87,83,0,75,87,84,0,75,87,85,0,75,87,86,0,75,87,87,0,75,87,88,0,75,87,89,0,75,87,90,0,75,88,65,0,75,88,66,0,75,88,67,0,75,88,68,0,75,88,69,0,75,88,70,0,75,88,71,0,75,88,72,0,75,88,73,0,75,88,74,0,75,88,75,0,75,88,76,0,75,88,77,0,75,88,78,0,75,88,79,0,75,88,80,0,75,88,81,0,75,88,82,0,75,88,83,0,75,88,84,0,75,88,85,0,75,88,86,0,75,88,87,0,75,88,88,0,75,88,89,0,75,88,90,0,75,89,65,0,75,89,66,0,75,89,67,0,75,89,68,0,75,89,69,0,75,89,70,0,75,89,71,0,75,89,72,0,75,89,73,0,75,89,74,0,75,89,75,0,75,89, -76,0,75,89,77,0,75,89,78,0,75,89,79,0,75,89,80,0,75,89,81,0,75,89,82,0,75,89,83,0,75,89,84,0,75,89,85,0,75,89,86,0,75,89,87,0,75,89,88,0,75,89,89,0,75,89,90,0,75,90,65,0,75,90,66,0,75,90,67,0,75,90,68,0,75,90,69,0,75,90,70,0,75,90,71,0,75,90,72,0,75,90,73,0,75,90,74,0,75,90,75,0,75,90,76,0,75,90,77,0,75,90,78,0,75,90,79,0,75,90,80,0,75,90,81,0,75,90,82,0,75,90,83,0,75,90,84,0,75,90,85,0,75,90,86,0,75,90,87,0,75,90,88,0,75,90,89,0,75,90,90,0,76,65,65,0,76,65,66,0,76,65,67,0,76,65,68,0,76,65,69,0,76, -65,70,0,76,65,71,0,76,65,72,0,76,65,73,0,76,65,74,0,76,65,75,0,76,65,76,0,76,65,77,0,76,65,78,0,76,65,79,0,76,65,80,0,76,65,81,0,76,65,82,0,76,65,83,0,76,65,84,0,76,65,85,0,76,65,86,0,76,65,87,0,76,65,88,0,76,65,89,0,76,65,90,0,76,66,65,0,76,66,66,0,76,66,67,0,76,66,68,0,76,66,69,0,76,66,70,0,76,66,71,0,76,66,72,0,76,66,73,0,76,66,74,0,76,66,75,0,76,66,76,0,76,66,77,0,76,66,78,0,76,66,79,0,76,66,80,0,76,66,81,0,76,66,82,0,76,66,83,0,76,66,84,0,76,66,85,0,76,66,86,0,76,66,87,0,76,66,88,0,76,66,89, -0,76,66,90,0,76,67,65,0,76,67,66,0,76,67,67,0,76,67,68,0,76,67,69,0,76,67,70,0,76,67,71,0,76,67,72,0,76,67,73,0,76,67,74,0,76,67,75,0,76,67,76,0,76,67,77,0,76,67,78,0,76,67,79,0,76,67,80,0,76,67,81,0,76,67,82,0,76,67,83,0,76,67,84,0,76,67,85,0,76,67,86,0,76,67,87,0,76,67,88,0,76,67,89,0,76,67,90,0,76,68,65,0,76,68,66,0,76,68,67,0,76,68,68,0,76,68,69,0,76,68,70,0,76,68,71,0,76,68,72,0,76,68,73,0,76,68,74,0,76,68,75,0,76,68,76,0,76,68,77,0,76,68,78,0,76,68,79,0,76,68,80,0,76,68,81,0,76,68,82,0,76,68, -83,0,76,68,84,0,76,68,85,0,76,68,86,0,76,68,87,0,76,68,88,0,76,68,89,0,76,68,90,0,76,69,65,0,76,69,66,0,76,69,67,0,76,69,68,0,76,69,69,0,76,69,70,0,76,69,71,0,76,69,72,0,76,69,73,0,76,69,74,0,76,69,75,0,76,69,76,0,76,69,77,0,76,69,78,0,76,69,79,0,76,69,80,0,76,69,81,0,76,69,82,0,76,69,83,0,76,69,84,0,76,69,85,0,76,69,86,0,76,69,87,0,76,69,88,0,76,69,89,0,76,69,90,0,76,70,65,0,76,70,66,0,76,70,67,0,76,70,68,0,76,70,69,0,76,70,70,0,76,70,71,0,76,70,72,0,76,70,73,0,76,70,74,0,76,70,75,0,76,70,76,0,76, -70,77,0,76,70,78,0,76,70,79,0,76,70,80,0,76,70,81,0,76,70,82,0,76,70,83,0,76,70,84,0,76,70,85,0,76,70,86,0,76,70,87,0,76,70,88,0,76,70,89,0,76,70,90,0,76,71,65,0,76,71,66,0,76,71,67,0,76,71,68,0,76,71,69,0,76,71,70,0,76,71,71,0,76,71,72,0,76,71,73,0,76,71,74,0,76,71,75,0,76,71,76,0,76,71,77,0,76,71,78,0,76,71,79,0,76,71,80,0,76,71,81,0,76,71,82,0,76,71,83,0,76,71,84,0,76,71,85,0,76,71,86,0,76,71,87,0,76,71,88,0,76,71,89,0,76,71,90,0,76,72,65,0,76,72,66,0,76,72,67,0,76,72,68,0,76,72,69,0,76,72,70, -0,76,72,71,0,76,72,72,0,76,72,73],"i8",4,x.a+30760); -H([0,76,72,74,0,76,72,75,0,76,72,76,0,76,72,77,0,76,72,78,0,76,72,79,0,76,72,80,0,76,72,81,0,76,72,82,0,76,72,83,0,76,72,84,0,76,72,85,0,76,72,86,0,76,72,87,0,76,72,88,0,76,72,89,0,76,72,90,0,76,73,65,0,76,73,66,0,76,73,67,0,76,73,68,0,76,73,69,0,76,73,70,0,76,73,71,0,76,73,72,0,76,73,73,0,76,73,74,0,76,73,75,0,76,73,76,0,76,73,77,0,76,73,78,0,76,73,79,0,76,73,80,0,76,73,81,0,76,73,82,0,76,73,83,0,76,73,84,0,76,73,85,0,76,73,86,0,76,73,87,0,76,73,88,0,76,73,89,0,76,73,90,0,76,74,65,0,76,74,66,0,76, -74,67,0,76,74,68,0,76,74,69,0,76,74,70,0,76,74,71,0,76,74,72,0,76,74,73,0,76,74,74,0,76,74,75,0,76,74,76,0,76,74,77,0,76,74,78,0,76,74,79,0,76,74,80,0,76,74,81,0,76,74,82,0,76,74,83,0,76,74,84,0,76,74,85,0,76,74,86,0,76,74,87,0,76,74,88,0,76,74,89,0,76,74,90,0,76,75,65,0,76,75,66,0,76,75,67,0,76,75,68,0,76,75,69,0,76,75,70,0,76,75,71,0,76,75,72,0,76,75,73,0,76,75,74,0,76,75,75,0,76,75,76,0,76,75,77,0,76,75,78,0,76,75,79,0,76,75,80,0,76,75,81,0,76,75,82,0,76,75,83,0,76,75,84,0,76,75,85,0,76,75,86, -0,76,75,87,0,76,75,88,0,76,75,89,0,76,75,90,0,76,76,65,0,76,76,66,0,76,76,67,0,76,76,68,0,76,76,69,0,76,76,70,0,76,76,71,0,76,76,72,0,76,76,73,0,76,76,74,0,76,76,75,0,76,76,76,0,76,76,77,0,76,76,78,0,76,76,79,0,76,76,80,0,76,76,81,0,76,76,82,0,76,76,83,0,76,76,84,0,76,76,85,0,76,76,86,0,76,76,87,0,76,76,88,0,76,76,89,0,76,76,90,0,76,77,65,0,76,77,66,0,76,77,67,0,76,77,68,0,76,77,69,0,76,77,70,0,76,77,71,0,76,77,72,0,76,77,73,0,76,77,74,0,76,77,75,0,76,77,76,0,76,77,77,0,76,77,78,0,76,77,79,0,76,77, -80,0,76,77,81,0,76,77,82,0,76,77,83,0,76,77,84,0,76,77,85,0,76,77,86,0,76,77,87,0,76,77,88,0,76,77,89,0,76,77,90,0,76,78,65,0,76,78,66,0,76,78,67,0,76,78,68,0,76,78,69,0,76,78,70,0,76,78,71,0,76,78,72,0,76,78,73,0,76,78,74,0,76,78,75,0,76,78,76,0,76,78,77,0,76,78,78,0,76,78,79,0,76,78,80,0,76,78,81,0,76,78,82,0,76,78,83,0,76,78,84,0,76,78,85,0,76,78,86,0,76,78,87,0,76,78,88,0,76,78,89,0,76,78,90,0,76,79,65,0,76,79,66,0,76,79,67,0,76,79,68,0,76,79,69,0,76,79,70,0,76,79,71,0,76,79,72,0,76,79,73,0,76, -79,74,0,76,79,75,0,76,79,76,0,76,79,77,0,76,79,78,0,76,79,79,0,76,79,80,0,76,79,81,0,76,79,82,0,76,79,83,0,76,79,84,0,76,79,85,0,76,79,86,0,76,79,87,0,76,79,88,0,76,79,89,0,76,79,90,0,76,80,65,0,76,80,66,0,76,80,67,0,76,80,68,0,76,80,69,0,76,80,70,0,76,80,71,0,76,80,72,0,76,80,73,0,76,80,74,0,76,80,75,0,76,80,76,0,76,80,77,0,76,80,78,0,76,80,79,0,76,80,80,0,76,80,81,0,76,80,82,0,76,80,83,0,76,80,84,0,76,80,85,0,76,80,86,0,76,80,87,0,76,80,88,0,76,80,89,0,76,80,90,0,76,81,65,0,76,81,66,0,76,81,67, -0,76,81,68,0,76,81,69,0,76,81,70,0,76,81,71,0,76,81,72,0,76,81,73,0,76,81,74,0,76,81,75,0,76,81,76,0,76,81,77,0,76,81,78,0,76,81,79,0,76,81,80,0,76,81,81,0,76,81,82,0,76,81,83,0,76,81,84,0,76,81,85,0,76,81,86,0,76,81,87,0,76,81,88,0,76,81,89,0,76,81,90,0,76,82,65,0,76,82,66,0,76,82,67,0,76,82,68,0,76,82,69,0,76,82,70,0,76,82,71,0,76,82,72,0,76,82,73,0,76,82,74,0,76,82,75,0,76,82,76,0,76,82,77,0,76,82,78,0,76,82,79,0,76,82,80,0,76,82,81,0,76,82,82,0,76,82,83,0,76,82,84,0,76,82,85,0,76,82,86,0,76,82, -87,0,76,82,88,0,76,82,89,0,76,82,90,0,76,83,65,0,76,83,66,0,76,83,67,0,76,83,68,0,76,83,69,0,76,83,70,0,76,83,71,0,76,83,72,0,76,83,73,0,76,83,74,0,76,83,75,0,76,83,76,0,76,83,77,0,76,83,78,0,76,83,79,0,76,83,80,0,76,83,81,0,76,83,82,0,76,83,83,0,76,83,84,0,76,83,85,0,76,83,86,0,76,83,87,0,76,83,88,0,76,83,89,0,76,83,90,0,76,84,65,0,76,84,66,0,76,84,67,0,76,84,68,0,76,84,69,0,76,84,70,0,76,84,71,0,76,84,72,0,76,84,73,0,76,84,74,0,76,84,75,0,76,84,76,0,76,84,77,0,76,84,78,0,76,84,79,0,76,84,80,0,76, -84,81,0,76,84,82,0,76,84,83,0,76,84,84,0,76,84,85,0,76,84,86,0,76,84,87,0,76,84,88,0,76,84,89,0,76,84,90,0,76,85,65,0,76,85,66,0,76,85,67,0,76,85,68,0,76,85,69,0,76,85,70,0,76,85,71,0,76,85,72,0,76,85,73,0,76,85,74,0,76,85,75,0,76,85,76,0,76,85,77,0,76,85,78,0,76,85,79,0,76,85,80,0,76,85,81,0,76,85,82,0,76,85,83,0,76,85,84,0,76,85,85,0,76,85,86,0,76,85,87,0,76,85,88,0,76,85,89,0,76,85,90,0,76,86,65,0,76,86,66,0,76,86,67,0,76,86,68,0,76,86,69,0,76,86,70,0,76,86,71,0,76,86,72,0,76,86,73,0,76,86,74, -0,76,86,75,0,76,86,76,0,76,86,77,0,76,86,78,0,76,86,79,0,76,86,80,0,76,86,81,0,76,86,82,0,76,86,83,0,76,86,84,0,76,86,85,0,76,86,86,0,76,86,87,0,76,86,88,0,76,86,89,0,76,86,90,0,76,87,65,0,76,87,66,0,76,87,67,0,76,87,68,0,76,87,69,0,76,87,70,0,76,87,71,0,76,87,72,0,76,87,73,0,76,87,74,0,76,87,75,0,76,87,76,0,76,87,77,0,76,87,78,0,76,87,79,0,76,87,80,0,76,87,81,0,76,87,82,0,76,87,83,0,76,87,84,0,76,87,85,0,76,87,86,0,76,87,87,0,76,87,88,0,76,87,89,0,76,87,90,0,76,88,65,0,76,88,66,0,76,88,67,0,76,88, -68,0,76,88,69,0,76,88,70,0,76,88,71,0,76,88,72,0,76,88,73,0,76,88,74,0,76,88,75,0,76,88,76,0,76,88,77,0,76,88,78,0,76,88,79,0,76,88,80,0,76,88,81,0,76,88,82,0,76,88,83,0,76,88,84,0,76,88,85,0,76,88,86,0,76,88,87,0,76,88,88,0,76,88,89,0,76,88,90,0,76,89,65,0,76,89,66,0,76,89,67,0,76,89,68,0,76,89,69,0,76,89,70,0,76,89,71,0,76,89,72,0,76,89,73,0,76,89,74,0,76,89,75,0,76,89,76,0,76,89,77,0,76,89,78,0,76,89,79,0,76,89,80,0,76,89,81,0,76,89,82,0,76,89,83,0,76,89,84,0,76,89,85,0,76,89,86,0,76,89,87,0,76, -89,88,0,76,89,89,0,76,89,90,0,76,90,65,0,76,90,66,0,76,90,67,0,76,90,68,0,76,90,69,0,76,90,70,0,76,90,71,0,76,90,72,0,76,90,73,0,76,90,74,0,76,90,75,0,76,90,76,0,76,90,77,0,76,90,78,0,76,90,79,0,76,90,80,0,76,90,81,0,76,90,82,0,76,90,83,0,76,90,84,0,76,90,85,0,76,90,86,0,76,90,87,0,76,90,88,0,76,90,89,0,76,90,90,0,77,65,65,0,77,65,66,0,77,65,67,0,77,65,68,0,77,65,69,0,77,65,70,0,77,65,71,0,77,65,72,0,77,65,73,0,77,65,74,0,77,65,75,0,77,65,76,0,77,65,77,0,77,65,78,0,77,65,79,0,77,65,80,0,77,65,81, -0,77,65,82,0,77,65,83,0,77,65,84,0,77,65,85,0,77,65,86,0,77,65,87,0,77,65,88,0,77,65,89,0,77,65,90,0,77,66,65,0,77,66,66,0,77,66,67,0,77,66,68,0,77,66,69,0,77,66,70,0,77,66,71,0,77,66,72,0,77,66,73,0,77,66,74,0,77,66,75,0,77,66,76,0,77,66,77,0,77,66,78,0,77,66,79,0,77,66,80,0,77,66,81,0,77,66,82,0,77,66,83,0,77,66,84,0,77,66,85,0,77,66,86,0,77,66,87,0,77,66,88,0,77,66,89,0,77,66,90,0,77,67,65,0,77,67,66,0,77,67,67,0,77,67,68,0,77,67,69,0,77,67,70,0,77,67,71,0,77,67,72,0,77,67,73,0,77,67,74,0,77,67, -75,0,77,67,76,0,77,67,77,0,77,67,78,0,77,67,79,0,77,67,80,0,77,67,81,0,77,67,82,0,77,67,83,0,77,67,84,0,77,67,85,0,77,67,86,0,77,67,87,0,77,67,88,0,77,67,89,0,77,67,90,0,77,68,65,0,77,68,66,0,77,68,67,0,77,68,68,0,77,68,69,0,77,68,70,0,77,68,71,0,77,68,72,0,77,68,73,0,77,68,74,0,77,68,75,0,77,68,76,0,77,68,77,0,77,68,78,0,77,68,79,0,77,68,80,0,77,68,81,0,77,68,82,0,77,68,83,0,77,68,84,0,77,68,85,0,77,68,86,0,77,68,87,0,77,68,88,0,77,68,89,0,77,68,90,0,77,69,65,0,77,69,66,0,77,69,67,0,77,69,68,0,77, -69,69,0,77,69,70,0,77,69,71,0,77,69,72,0,77,69,73,0,77,69,74,0,77,69,75,0,77,69,76,0,77,69,77,0,77,69,78,0,77,69,79,0,77,69,80,0,77,69,81,0,77,69,82,0,77,69,83,0,77,69,84,0,77,69,85,0,77,69,86,0,77,69,87,0,77,69,88,0,77,69,89,0,77,69,90,0,77,70,65,0,77,70,66,0,77,70,67,0,77,70,68,0,77,70,69,0,77,70,70,0,77,70,71,0,77,70,72,0,77,70,73,0,77,70,74,0,77,70,75,0,77,70,76,0,77,70,77,0,77,70,78,0,77,70,79,0,77,70,80,0,77,70,81,0,77,70,82,0,77,70,83,0,77,70,84,0,77,70,85,0,77,70,86,0,77,70,87,0,77,70,88, -0,77,70,89,0,77,70,90,0,77,71,65,0,77,71,66,0,77,71,67,0,77,71,68,0,77,71,69,0,77,71,70,0,77,71,71,0,77,71,72,0,77,71,73,0,77,71,74,0,77,71,75,0,77,71,76,0,77,71,77,0,77,71,78,0,77,71,79,0,77,71,80,0,77,71,81,0,77,71,82,0,77,71,83,0,77,71,84,0,77,71,85,0,77,71,86,0,77,71,87,0,77,71,88,0,77,71,89,0,77,71,90,0,77,72,65,0,77,72,66,0,77,72,67,0,77,72,68,0,77,72,69,0,77,72,70,0,77,72,71,0,77,72,72,0,77,72,73,0,77,72,74,0,77,72,75,0,77,72,76,0,77,72,77,0,77,72,78,0,77,72,79,0,77,72,80,0,77,72,81,0,77,72, -82,0,77,72,83,0,77,72,84,0,77,72,85,0,77,72,86,0,77,72,87,0,77,72,88,0,77,72,89,0,77,72,90,0,77,73,65,0,77,73,66,0,77,73,67,0,77,73,68,0,77,73,69,0,77,73,70,0,77,73,71,0,77,73,72,0,77,73,73,0,77,73,74,0,77,73,75,0,77,73,76,0,77,73,77,0,77,73,78,0,77,73,79,0,77,73,80,0,77,73,81,0,77,73,82,0,77,73,83,0,77,73,84,0,77,73,85,0,77,73,86,0,77,73,87,0,77,73,88,0,77,73,89,0,77,73,90,0,77,74,65,0,77,74,66,0,77,74,67,0,77,74,68,0,77,74,69,0,77,74,70,0,77,74,71,0,77,74,72,0,77,74,73,0,77,74,74,0,77,74,75,0,77, -74,76,0,77,74,77,0,77,74,78,0,77,74,79,0,77,74,80,0,77,74,81,0,77,74,82,0,77,74,83,0,77,74,84,0,77,74,85,0,77,74,86,0,77,74,87,0,77,74,88,0,77,74,89,0,77,74,90,0,77,75,65,0,77,75,66,0,77,75,67,0,77,75,68,0,77,75,69,0,77,75,70,0,77,75,71,0,77,75,72,0,77,75,73,0,77,75,74,0,77,75,75,0,77,75,76,0,77,75,77,0,77,75,78,0,77,75,79,0,77,75,80,0,77,75,81,0,77,75,82,0,77,75,83,0,77,75,84,0,77,75,85,0,77,75,86,0,77,75,87,0,77,75,88,0,77,75,89,0,77,75,90,0,77,76,65,0,77,76,66,0,77,76,67,0,77,76,68,0,77,76,69, -0,77,76,70,0,77,76,71,0,77,76,72,0,77,76,73,0,77,76,74,0,77,76,75,0,77,76,76,0,77,76,77,0,77,76,78,0,77,76,79,0,77,76,80,0,77,76,81,0,77,76,82,0,77,76,83,0,77,76,84,0,77,76,85,0,77,76,86,0,77,76,87,0,77,76,88,0,77,76,89,0,77,76,90,0,77,77,65,0,77,77,66,0,77,77,67,0,77,77,68,0,77,77,69,0,77,77,70,0,77,77,71,0,77,77,72,0,77,77,73,0,77,77,74,0,77,77,75,0,77,77,76,0,77,77,77,0,77,77,78,0,77,77,79,0,77,77,80,0,77,77,81,0,77,77,82,0,77,77,83,0,77,77,84,0,77,77,85,0,77,77,86,0,77,77,87,0,77,77,88,0,77,77, -89,0,77,77,90,0,77,78,65,0,77,78,66,0,77,78,67,0,77,78,68,0,77,78,69,0,77,78,70,0,77,78,71,0,77,78,72,0,77,78,73,0,77,78,74,0,77,78,75,0,77,78,76,0,77,78,77,0,77,78,78,0,77,78,79,0,77,78,80,0,77,78,81,0,77,78,82,0,77,78,83,0,77,78,84,0,77,78,85,0,77,78,86,0,77,78,87,0,77,78,88,0,77,78,89,0,77,78,90,0,77,79,65,0,77,79,66,0,77,79,67,0,77,79,68,0,77,79,69,0,77,79,70,0,77,79,71,0,77,79,72,0,77,79,73,0,77,79,74,0,77,79,75,0,77,79,76,0,77,79,77,0,77,79,78,0,77,79,79,0,77,79,80,0,77,79,81,0,77,79,82,0,77, -79,83,0,77,79,84,0,77,79,85,0,77,79,86,0,77,79,87,0,77,79,88,0,77,79,89,0,77,79,90,0,77,80,65,0,77,80,66,0,77,80,67,0,77,80,68,0,77,80,69,0,77,80,70,0,77,80,71,0,77,80,72,0,77,80,73,0,77,80,74,0,77,80,75,0,77,80,76,0,77,80,77,0,77,80,78,0,77,80,79,0,77,80,80,0,77,80,81,0,77,80,82,0,77,80,83,0,77,80,84,0,77,80,85,0,77,80,86,0,77,80,87,0,77,80,88,0,77,80,89,0,77,80,90,0,77,81,65,0,77,81,66,0,77,81,67,0,77,81,68,0,77,81,69,0,77,81,70,0,77,81,71,0,77,81,72,0,77,81,73,0,77,81,74,0,77,81,75,0,77,81,76, -0,77,81,77,0,77,81,78,0,77,81,79,0,77,81,80,0,77,81,81,0,77,81,82,0,77,81,83,0,77,81,84,0,77,81,85,0,77,81,86,0,77,81,87,0,77,81,88,0,77,81,89,0,77,81,90,0,77,82,65,0,77,82,66,0,77,82,67,0,77,82,68,0,77,82,69,0,77,82,70,0,77,82,71,0,77,82,72,0,77,82,73,0,77,82,74,0,77,82,75,0,77,82,76,0,77,82,77,0,77,82,78,0,77,82,79,0,77,82,80,0,77,82,81,0,77,82,82,0,77,82,83,0,77,82,84,0,77,82,85,0,77,82,86,0,77,82,87,0,77,82,88,0,77,82,89,0,77,82,90,0,77,83,65,0,77,83,66,0,77,83,67,0,77,83,68,0,77,83,69,0,77,83, -70,0,77,83,71,0,77,83,72,0,77,83,73,0,77,83,74,0,77,83,75,0,77,83,76,0,77,83,77,0,77,83,78,0,77,83,79,0,77,83,80,0,77,83,81,0,77,83,82,0,77,83,83,0,77,83,84,0,77,83,85,0,77,83,86,0,77,83,87,0,77,83,88,0,77,83,89,0,77,83,90,0,77,84,65,0,77,84,66,0,77,84,67,0,77,84,68,0,77,84,69,0,77,84,70,0,77,84,71,0,77,84,72,0,77,84,73,0,77,84,74,0,77,84,75,0,77,84,76,0,77,84,77,0,77,84,78,0,77,84,79,0,77,84,80,0,77,84,81,0,77,84,82,0,77,84,83,0,77,84,84,0,77,84,85,0,77,84,86,0,77,84,87,0,77,84,88,0,77,84,89,0,77, -84,90,0,77,85,65,0,77,85,66,0,77,85,67,0,77,85,68,0,77,85,69,0,77,85,70,0,77,85,71,0,77,85,72,0,77,85,73,0,77,85,74,0,77,85,75,0,77,85,76,0,77,85,77,0,77,85,78,0,77,85,79,0,77,85,80,0,77,85,81,0,77,85,82,0,77,85,83,0,77,85,84,0,77,85,85,0,77,85,86,0,77,85,87,0,77,85,88,0,77,85,89,0,77,85,90,0,77,86,65,0,77,86,66,0,77,86,67,0,77,86,68,0,77,86,69,0,77,86,70,0,77,86,71,0,77,86,72,0,77,86,73,0,77,86,74,0,77,86,75,0,77,86,76,0,77,86,77,0,77,86,78,0,77,86,79,0,77,86,80,0,77,86,81,0,77,86,82,0,77,86,83, -0,77,86,84,0,77,86,85,0,77,86,86,0,77,86,87,0,77,86,88,0,77,86,89,0,77,86,90,0,77,87,65,0,77,87,66,0,77,87,67,0,77,87,68,0,77,87,69,0,77,87,70,0,77,87,71,0,77,87,72,0,77,87,73,0,77,87,74,0,77,87,75,0,77,87,76,0,77,87,77,0,77,87,78,0,77,87,79,0,77,87,80,0,77,87,81,0,77,87,82,0,77,87,83,0,77,87,84,0,77,87,85,0,77,87,86,0,77,87,87,0,77,87,88,0,77,87,89,0,77,87,90,0,77,88,65,0,77,88,66,0,77,88,67,0,77,88,68,0,77,88,69,0,77,88,70,0,77,88,71,0,77,88,72,0,77,88,73,0,77,88,74,0,77,88,75,0,77,88,76,0,77,88, -77,0,77,88,78,0,77,88,79,0,77,88,80,0,77,88,81,0,77,88,82,0,77,88,83,0,77,88,84,0,77,88,85,0,77,88,86,0,77,88,87,0,77,88,88,0,77,88,89,0,77,88,90,0,77,89,65,0,77,89,66,0,77,89,67,0,77,89,68,0,77,89,69,0,77,89,70,0,77,89,71,0,77,89,72,0,77,89,73,0,77,89,74,0,77,89,75,0,77,89,76,0,77,89,77,0,77,89,78,0,77,89,79,0,77,89,80,0,77,89,81,0,77,89,82,0,77,89,83,0,77,89,84,0,77,89,85,0,77,89,86,0,77,89,87,0,77,89,88,0,77,89,89,0,77,89,90,0,77,90,65,0,77,90,66,0,77,90,67,0,77,90,68,0,77,90,69,0,77,90,70,0,77, -90,71,0,77,90,72,0,77,90,73,0,77,90,74,0,77,90,75,0,77,90,76,0,77,90,77,0,77,90,78,0,77,90,79,0,77,90,80,0,77,90,81,0,77,90,82,0,77,90,83,0,77,90,84,0,77,90,85,0,77,90,86,0,77,90,87,0,77,90,88,0,77,90,89,0,77,90,90,0,78,65,65,0,78,65,66,0,78,65,67,0,78,65,68,0,78,65,69,0,78,65,70,0,78,65,71,0,78,65,72,0,78,65,73,0,78,65,74,0,78,65,75,0,78,65,76,0,78,65,77,0,78,65,78,0,78,65,79,0,78,65,80,0,78,65,81,0,78,65,82,0,78,65,83,0,78,65,84,0,78,65,85,0,78,65,86,0,78,65,87,0,78,65,88,0,78,65,89,0,78,65,90, -0,78,66,65,0,78,66,66,0,78,66,67,0,78,66,68,0,78,66,69,0,78,66,70,0,78,66,71,0,78,66,72,0,78,66,73,0,78,66,74,0,78,66,75,0,78,66,76,0,78,66,77,0,78,66,78,0,78,66,79,0,78,66,80,0,78,66,81,0,78,66,82,0,78,66,83,0,78,66,84,0,78,66,85,0,78,66,86,0,78,66,87,0,78,66,88,0,78,66,89,0,78,66,90,0,78,67,65,0,78,67,66,0,78,67,67,0,78,67,68,0,78,67,69,0,78,67,70,0,78,67,71,0,78,67,72,0,78,67,73,0,78,67,74,0,78,67,75,0,78,67,76,0,78,67,77,0,78,67,78,0,78,67,79,0,78,67,80,0,78,67,81,0,78,67,82,0,78,67,83,0,78,67, -84,0,78,67,85,0,78,67,86,0,78,67,87,0,78,67,88,0,78,67,89,0,78,67,90,0,78,68,65,0,78,68,66,0,78,68,67,0,78,68,68,0,78,68,69,0,78,68,70,0,78,68,71,0,78,68,72,0,78,68,73,0,78,68,74,0,78,68,75,0,78,68,76,0,78,68,77,0,78,68,78,0,78,68,79,0,78,68,80,0,78,68,81,0,78,68,82,0,78,68,83,0,78,68,84,0,78,68,85,0,78,68,86,0,78,68,87,0,78,68,88,0,78,68,89,0,78,68,90,0,78,69,65,0,78,69,66,0,78,69,67,0,78,69,68,0,78,69,69,0,78,69,70,0,78,69,71,0,78,69,72,0,78,69,73,0,78,69,74,0,78,69,75,0,78,69,76,0,78,69,77,0,78, -69,78,0,78,69,79,0,78,69,80,0,78,69,81,0,78,69,82,0,78,69,83,0,78,69,84,0,78,69,85,0,78,69,86,0,78,69,87,0,78,69,88,0,78,69,89,0,78,69,90,0,78,70,65,0,78,70,66,0,78,70,67,0,78,70,68,0,78,70,69,0,78,70,70,0,78,70,71,0,78,70,72,0,78,70,73,0,78,70,74,0,78,70,75,0,78,70,76,0,78,70,77,0,78,70,78,0,78,70,79,0,78,70,80,0,78,70,81,0,78,70,82,0,78,70,83,0,78,70,84,0,78,70,85,0,78,70,86,0,78,70,87,0,78,70,88,0,78,70,89,0,78,70,90,0,78,71,65,0,78,71,66,0,78,71,67,0,78,71,68,0,78,71,69,0,78,71,70,0,78,71,71, -0,78,71,72,0,78,71,73,0,78,71,74,0,78,71,75,0,78,71,76,0,78,71,77,0,78,71,78,0,78,71,79,0,78,71,80,0,78,71,81,0,78,71,82,0,78,71,83,0,78,71,84,0,78,71,85,0,78,71,86,0,78,71,87,0,78,71,88,0,78,71,89,0,78,71,90,0,78,72,65,0,78,72,66,0,78,72,67,0,78,72,68,0,78,72,69,0,78,72,70,0,78,72,71,0,78,72,72,0,78,72,73,0,78,72,74,0,78,72,75,0,78,72,76,0,78,72,77,0,78,72,78,0,78,72,79,0,78,72,80,0,78,72,81,0,78,72,82,0,78,72,83,0,78,72,84,0,78,72,85,0,78,72,86,0,78,72,87,0,78,72,88,0,78,72,89,0,78,72,90,0,78,73, -65,0,78,73,66,0,78,73,67,0,78,73,68,0,78,73,69,0,78,73,70,0,78,73,71,0,78,73,72,0,78,73,73,0,78,73,74,0,78,73,75,0,78,73,76,0,78,73,77,0,78,73,78,0,78,73,79,0,78,73,80,0,78,73,81,0,78,73,82,0,78,73,83,0,78,73,84,0,78,73,85,0,78,73,86,0,78,73,87,0,78,73,88,0,78,73,89,0,78,73,90,0,78,74,65,0,78,74,66,0,78,74,67,0,78,74,68,0,78,74,69,0,78,74,70,0,78,74,71,0,78,74,72,0,78,74,73,0,78,74,74,0,78,74,75,0,78,74,76,0,78,74,77,0,78,74,78,0,78,74,79,0,78,74,80,0,78,74,81,0,78,74,82,0,78,74,83,0,78,74,84,0,78, -74,85,0,78,74,86,0,78,74,87,0,78,74,88,0,78,74,89,0,78,74,90,0,78,75,65,0,78,75,66,0,78,75,67,0,78,75,68,0,78,75,69,0,78,75,70,0,78,75,71,0,78,75,72,0,78,75,73,0,78,75,74,0,78,75,75,0,78,75,76,0,78,75,77,0,78,75,78,0,78,75,79,0,78,75,80,0,78,75,81,0,78,75,82,0,78,75,83,0,78,75,84,0,78,75,85,0,78,75,86,0,78,75,87,0,78,75,88,0,78,75,89,0,78,75,90,0,78,76,65,0,78,76,66,0,78,76,67,0,78,76,68,0,78,76,69,0,78,76,70,0,78,76,71,0,78,76,72,0,78,76,73,0,78,76,74,0,78,76,75,0,78,76,76,0,78,76,77,0,78,76,78, -0,78,76,79,0,78,76,80,0,78,76,81,0,78,76,82,0,78,76,83,0,78,76,84,0,78,76,85,0,78,76,86,0,78,76,87,0,78,76,88,0,78,76,89,0,78,76,90,0,78,77,65,0,78,77,66,0,78,77,67,0,78,77,68,0,78,77,69,0,78,77,70,0,78,77,71,0,78,77,72,0,78,77,73,0,78,77,74,0,78,77,75,0,78,77,76,0,78,77,77,0,78,77,78,0,78,77,79,0,78,77,80,0,78,77,81,0,78,77,82,0,78,77,83,0,78,77,84,0,78,77,85,0,78,77,86,0,78,77,87,0,78,77,88,0,78,77,89,0,78,77,90,0,78,78,65,0,78,78,66,0,78,78,67,0,78,78,68,0,78,78,69,0,78,78,70,0,78,78,71,0,78,78, -72,0,78,78,73,0,78,78,74,0,78,78,75,0,78,78,76,0,78,78,77,0,78,78,78,0,78,78,79,0,78,78,80,0,78,78,81,0,78,78,82,0,78,78,83,0,78,78,84,0,78,78,85,0,78,78,86,0,78,78,87,0,78,78,88,0,78,78,89,0,78,78,90,0,78,79,65,0,78,79,66,0,78,79,67,0,78,79,68,0,78,79,69,0,78,79,70,0,78,79,71,0,78,79,72,0,78,79,73,0,78,79,74,0,78,79,75,0,78,79,76,0,78,79,77,0,78,79,78,0,78,79,79,0,78,79,80,0,78,79,81,0,78,79,82,0,78,79,83,0,78,79,84,0,78,79,85,0,78,79,86,0,78,79,87,0,78,79,88,0,78,79,89,0,78,79,90,0,78,80,65,0,78, -80,66,0,78,80,67,0,78,80,68,0,78,80,69,0,78,80,70,0,78,80,71,0,78,80,72,0,78,80,73,0,78,80,74,0,78,80,75,0,78,80,76,0,78,80,77,0,78,80,78,0,78,80,79,0,78,80,80,0,78,80,81,0,78,80,82,0,78,80,83,0,78,80,84,0,78,80,85,0,78,80,86,0,78,80,87,0,78,80,88,0,78,80,89,0,78,80,90,0,78,81,65,0,78,81,66,0,78,81,67,0,78,81,68,0,78,81,69,0,78,81,70,0,78,81,71,0,78,81,72,0,78,81,73,0,78,81,74,0,78,81,75,0,78,81,76,0,78,81,77,0,78,81,78,0,78,81,79,0,78,81,80,0,78,81,81,0,78,81,82,0,78,81,83,0,78,81,84,0,78,81,85, -0,78,81,86,0,78,81,87,0,78,81,88,0,78,81,89,0,78,81,90,0,78,82,65,0,78,82,66,0,78,82,67,0,78,82,68,0,78,82,69,0,78,82,70,0,78,82,71,0,78,82,72,0,78,82,73,0,78,82,74,0,78,82,75,0,78,82,76,0,78,82,77,0,78,82,78,0,78,82,79,0,78,82,80,0,78,82,81,0,78,82,82,0,78,82,83,0,78,82,84,0,78,82,85,0,78,82,86,0,78,82,87,0,78,82,88,0,78,82,89,0,78,82,90,0,78,83,65,0,78,83,66,0,78,83,67,0,78,83,68,0,78,83,69,0,78,83,70,0,78,83,71,0,78,83,72,0,78,83,73,0,78,83,74,0,78,83,75,0,78,83,76,0,78,83,77,0,78,83,78,0,78,83, -79,0,78,83,80,0,78,83,81,0,78,83,82,0,78,83,83,0,78,83,84,0,78,83,85,0,78,83,86,0,78,83,87,0,78,83,88,0,78,83,89,0,78,83,90,0,78,84,65,0,78,84,66,0,78,84,67,0,78,84,68,0,78,84,69,0,78,84,70,0,78,84,71,0,78,84,72,0,78,84,73,0,78,84,74,0,78,84,75,0,78,84,76,0,78,84,77,0,78,84,78,0,78,84,79,0,78,84,80,0,78,84,81,0,78,84,82,0,78,84,83,0,78,84,84,0,78,84,85,0,78,84,86,0,78,84,87,0,78,84,88,0,78,84,89,0,78,84,90,0,78,85,65,0,78,85,66,0,78,85,67,0,78,85,68,0,78,85,69,0,78,85,70,0,78,85,71,0,78,85,72,0,78, -85,73,0,78,85,74,0,78,85,75,0,78,85,76,0,78,85,77,0,78,85,78,0,78,85,79,0,78,85,80,0,78,85,81,0,78,85,82,0,78,85,83,0,78,85,84,0,78,85,85,0,78,85,86,0,78,85,87,0,78,85,88,0,78,85,89,0,78,85,90,0,78,86,65,0,78,86,66,0,78,86,67,0,78,86,68,0,78,86,69,0,78,86,70,0,78,86,71,0,78,86,72,0,78,86,73,0,78,86,74,0,78,86,75,0,78,86,76,0,78,86,77,0,78,86,78,0,78,86,79,0,78,86,80,0,78,86,81,0,78,86,82,0,78,86,83,0,78,86,84,0,78,86,85,0,78,86,86,0,78,86,87,0,78,86,88,0,78,86,89,0,78,86,90,0,78,87,65,0,78,87,66, -0,78,87,67,0,78,87,68,0,78,87,69,0,78,87,70,0,78,87,71,0,78,87,72,0,78,87,73,0,78,87,74,0,78,87,75,0,78,87,76,0,78,87,77,0,78,87,78,0,78,87,79,0,78,87,80,0,78,87,81,0,78,87,82,0,78,87,83,0,78,87,84,0,78,87,85,0,78,87,86,0,78,87,87,0,78,87,88,0,78,87,89,0,78,87,90,0,78,88,65,0,78,88,66,0,78,88,67,0,78,88,68,0,78,88,69,0,78,88,70,0,78,88,71,0,78,88,72,0,78,88,73,0,78,88,74,0,78,88,75,0,78,88,76,0,78,88,77,0,78,88,78,0,78,88,79,0,78,88,80,0,78,88,81,0,78,88,82,0,78,88,83,0,78,88,84,0,78,88,85,0,78,88, -86,0,78,88,87,0,78,88,88,0,78,88,89,0,78,88,90,0,78,89,65,0,78,89,66,0,78,89,67,0,78,89,68,0,78,89,69,0,78,89,70,0,78,89,71,0,78,89,72,0,78,89,73,0,78,89,74,0,78,89,75,0,78,89,76,0,78,89,77,0,78,89,78,0,78,89,79,0,78,89,80,0,78,89,81,0,78,89,82,0,78,89,83,0,78,89,84,0,78,89,85,0,78,89,86,0,78,89,87,0,78,89,88,0,78,89,89,0,78,89,90,0,78,90,65,0,78,90,66,0,78,90,67,0,78,90,68,0,78,90,69,0,78,90,70,0,78,90,71,0,78,90,72,0,78,90,73,0,78,90,74,0,78,90,75,0,78,90,76,0,78,90,77,0,78,90,78,0,78,90,79,0,78, -90,80,0,78,90,81,0,78,90,82,0,78,90,83,0,78,90,84,0,78,90,85,0,78,90,86,0,78,90,87,0,78,90,88,0,78,90,89,0,78,90,90,0,79,65,65,0,79,65,66,0,79,65,67,0,79,65,68,0,79,65,69,0,79,65,70,0,79,65,71,0,79,65,72,0,79,65,73,0,79,65,74,0,79,65,75,0,79,65,76,0,79,65,77,0,79,65,78,0,79,65,79,0,79,65,80,0,79,65,81,0,79,65,82,0,79,65,83,0,79,65,84,0,79,65,85,0,79,65,86,0,79,65,87,0,79,65,88,0,79,65,89,0,79,65,90,0,79,66,65,0,79,66,66,0,79,66,67,0,79,66,68,0,79,66,69,0,79,66,70,0,79,66,71,0,79,66,72,0,79,66,73, -0,79,66,74,0,79,66,75,0,79,66,76,0,79,66,77,0,79,66,78,0,79,66,79,0,79,66,80,0,79,66,81,0,79,66,82,0,79,66,83,0,79,66,84,0,79,66,85,0,79,66,86,0,79,66,87,0,79,66,88,0,79,66,89,0,79,66,90,0,79,67,65,0,79,67,66,0,79,67,67,0,79,67,68,0,79,67,69,0,79,67,70,0,79,67,71,0,79,67,72,0,79,67,73,0,79,67,74,0,79,67,75,0,79,67,76,0,79,67,77,0,79,67,78,0,79,67,79,0,79,67,80,0,79,67,81,0,79,67,82,0,79,67,83,0,79,67,84,0,79,67,85,0,79,67,86,0,79,67,87,0,79,67,88,0,79,67,89,0,79,67,90,0,79,68,65,0,79,68,66,0,79,68, -67,0,79,68,68,0,79,68,69,0,79,68,70,0,79,68,71,0,79,68,72,0,79,68,73,0,79,68,74,0,79,68,75,0,79,68,76,0,79,68,77,0,79,68,78,0,79,68,79,0,79,68,80,0,79,68,81,0,79,68,82,0,79,68,83,0,79,68,84,0,79,68,85,0,79,68,86,0,79,68,87,0,79,68,88,0,79,68,89,0,79,68,90,0,79,69,65,0,79,69,66,0,79,69,67,0,79,69,68,0,79,69,69,0,79,69,70,0,79,69,71,0,79,69,72,0,79,69,73,0,79,69,74,0,79,69,75,0,79,69,76,0,79,69,77,0,79,69,78,0,79,69,79,0,79,69,80,0,79,69,81,0,79,69,82,0,79,69,83,0,79,69,84,0,79,69,85,0,79,69,86,0,79, -69,87,0,79,69,88,0,79,69,89,0,79,69,90,0,79,70,65,0,79,70,66,0,79,70,67,0,79,70,68,0,79,70,69,0,79,70,70,0,79,70,71,0,79,70,72,0,79,70,73,0,79,70,74,0,79,70,75,0,79,70,76,0,79,70,77,0,79,70,78,0,79,70,79,0,79,70,80,0,79,70,81,0,79,70,82,0,79,70,83,0,79,70,84,0,79,70,85,0,79,70,86,0,79,70,87,0,79,70,88,0,79,70,89,0,79,70,90,0,79,71,65,0,79,71,66,0,79,71,67,0,79,71,68,0,79,71,69,0,79,71,70,0,79,71,71,0,79,71,72,0,79,71,73,0,79,71,74,0,79,71,75,0,79,71,76,0,79,71,77,0,79,71,78,0,79,71,79,0,79,71,80, -0,79,71,81,0,79,71,82,0,79,71,83,0,79,71,84,0,79,71,85,0,79,71,86,0,79,71,87,0,79,71,88,0,79,71,89,0,79,71,90,0,79,72,65,0,79,72,66,0,79,72,67,0,79,72,68,0,79,72,69,0,79,72,70,0,79,72,71,0,79,72,72,0,79,72,73,0,79,72,74,0,79,72,75,0,79,72,76,0,79,72,77,0,79,72,78,0,79,72,79,0,79,72,80,0,79,72,81,0,79,72,82,0,79,72,83,0,79,72,84,0,79,72,85,0,79,72,86,0,79,72,87,0,79,72,88,0,79,72,89,0,79,72,90,0,79,73,65,0,79,73,66,0,79,73,67,0,79,73,68,0,79,73,69,0,79,73,70,0,79,73,71,0,79,73,72,0,79,73,73,0,79,73, -74,0,79,73,75,0,79,73,76,0,79,73,77,0,79,73,78,0,79,73,79,0,79,73,80,0,79,73,81,0,79,73,82,0,79,73,83,0,79,73,84,0,79,73,85,0,79,73,86,0,79,73,87,0,79,73,88,0,79,73,89,0,79,73,90,0,79,74,65,0,79,74,66,0,79,74,67,0,79,74,68,0,79,74,69,0,79,74,70,0,79,74,71,0,79,74,72,0,79,74,73,0,79,74,74,0,79,74,75,0,79,74,76,0,79,74,77,0,79,74,78,0,79,74,79,0,79,74,80,0,79,74,81,0,79,74,82,0,79,74,83,0,79,74,84,0,79,74,85,0,79,74,86,0,79,74,87,0,79,74,88,0,79,74,89,0,79,74,90,0,79,75,65,0,79,75,66,0,79,75,67,0,79, -75,68,0,79,75,69,0,79,75,70,0,79,75,71,0,79,75,72,0,79,75,73,0,79,75,74,0,79,75,75,0,79,75,76,0,79,75,77,0,79,75,78,0,79,75,79,0,79,75,80,0,79,75,81,0,79,75,82,0,79,75,83,0,79,75,84,0,79,75,85,0,79,75,86,0,79,75,87,0,79,75,88,0,79,75,89,0,79,75,90,0,79,76,65,0,79,76,66,0,79,76,67,0,79,76,68,0,79,76,69,0,79,76,70,0,79,76,71,0,79,76,72,0,79,76,73,0,79,76,74,0,79,76,75,0,79,76,76,0,79,76,77,0,79,76,78,0,79,76,79,0,79,76,80,0,79,76,81,0,79,76,82,0,79,76,83,0,79,76,84,0,79,76,85,0,79,76,86,0,79,76,87, -0,79,76,88,0,79,76,89,0,79,76,90,0,79,77,65,0,79,77,66,0,79,77,67,0,79,77,68,0,79,77,69,0,79,77,70,0,79,77,71,0,79,77,72,0,79,77,73,0,79,77,74,0,79,77,75,0,79,77,76,0,79,77,77,0,79,77,78,0,79,77,79,0,79,77,80,0,79,77,81,0,79,77,82,0,79,77,83,0,79,77,84,0,79,77,85,0,79,77,86,0,79,77,87,0,79,77,88,0,79,77,89,0,79,77,90,0,79,78,65,0,79,78,66,0,79,78,67,0,79,78,68,0,79,78,69,0,79,78,70,0,79,78,71,0,79,78,72,0,79,78,73,0,79,78,74,0,79,78,75,0,79,78,76,0,79,78,77,0,79,78,78,0,79,78,79,0,79,78,80,0,79,78, -81,0,79,78,82,0,79,78,83,0,79,78,84,0,79,78,85,0,79,78,86,0,79,78,87,0,79,78,88,0,79,78,89,0,79,78,90,0,79,79,65,0,79,79,66,0,79,79,67,0,79,79,68,0,79,79,69,0,79,79,70,0,79,79,71,0,79,79,72,0,79,79,73,0,79,79,74,0,79,79,75,0,79,79,76,0,79,79,77,0,79,79,78,0,79,79,79,0,79,79,80,0,79,79,81,0,79,79,82,0,79,79,83,0,79,79,84,0,79,79,85,0,79,79,86,0,79,79,87,0,79,79,88,0,79,79,89,0,79,79,90,0,79,80,65,0,79,80,66,0,79,80,67,0,79,80,68,0,79,80,69,0,79,80,70,0,79,80,71,0,79,80,72,0,79,80,73,0,79,80,74,0,79, -80,75,0,79,80,76,0,79,80,77,0,79,80,78,0,79,80,79,0,79,80,80,0,79,80,81,0,79,80,82,0,79,80,83,0,79,80,84,0,79,80,85,0,79,80,86,0,79,80,87,0,79,80,88,0,79,80,89,0,79,80,90,0,79,81,65,0,79,81,66,0,79,81,67,0,79,81,68,0,79,81,69,0,79,81,70,0,79,81,71,0,79,81,72,0,79,81,73,0,79,81,74,0,79,81,75,0,79,81,76,0,79,81,77,0,79,81,78,0,79,81,79,0,79,81,80,0,79,81,81,0,79,81,82,0,79,81,83,0,79,81,84,0,79,81,85,0,79,81,86,0,79,81,87,0,79,81,88,0,79,81,89,0,79,81,90,0,79,82,65,0,79,82,66,0,79,82,67,0,79,82,68, -0,79,82,69,0,79,82,70,0,79,82,71,0,79,82,72,0,79,82,73,0,79,82,74,0,79,82,75,0,79,82,76,0,79,82,77,0,79,82,78,0,79,82,79,0,79,82,80,0,79,82,81,0,79,82,82,0,79,82,83,0,79,82,84,0,79,82,85,0,79,82,86,0,79,82,87,0,79,82,88,0,79,82,89,0,79,82,90,0,79,83,65,0,79,83,66,0,79,83,67,0,79,83,68,0,79,83,69,0,79,83,70,0,79,83,71,0,79,83,72,0,79,83,73,0,79,83,74,0,79,83,75,0,79,83,76,0,79,83,77,0,79,83,78,0,79,83,79,0,79,83,80,0,79,83,81,0,79,83,82,0,79,83,83,0,79,83,84,0,79,83,85,0,79,83,86,0,79,83,87,0,79,83, -88,0,79,83,89,0,79,83,90,0,79,84,65,0,79,84,66,0,79,84,67,0,79,84,68,0,79,84,69,0,79,84,70,0,79,84,71,0,79,84,72,0,79,84,73,0,79,84,74,0,79,84,75,0,79,84,76,0,79,84,77,0,79,84,78,0,79,84,79,0,79,84,80,0,79,84,81,0,79,84,82,0,79,84,83,0,79,84,84,0,79,84,85,0,79,84,86,0,79,84,87,0,79,84,88,0,79,84,89,0,79,84,90,0,79,85,65,0,79,85,66,0,79,85,67,0,79,85,68,0,79,85,69,0,79,85,70,0,79,85,71,0,79,85,72,0,79,85,73,0,79,85,74,0,79,85,75,0,79,85,76,0,79,85,77,0,79,85,78,0,79,85,79,0,79,85,80,0,79,85,81,0,79, -85,82,0,79,85,83,0,79,85,84,0,79,85,85,0,79,85,86,0,79,85,87,0,79,85,88,0,79,85,89,0,79,85,90,0,79,86,65,0,79,86,66,0,79,86,67,0,79,86,68,0,79,86,69,0,79,86,70,0,79,86,71,0,79,86,72,0,79,86,73,0,79,86,74,0,79,86,75,0,79,86,76,0,79,86,77,0,79,86,78,0,79,86,79,0,79,86,80,0,79,86,81,0,79,86,82,0,79,86,83,0,79,86,84,0,79,86,85,0,79,86,86,0,79,86,87,0,79,86,88,0,79,86,89,0,79,86,90,0,79,87,65,0,79,87,66,0,79,87,67,0,79,87,68,0,79,87,69,0,79,87,70,0,79,87,71,0,79,87,72,0,79,87,73,0,79,87,74,0,79,87,75, -0,79,87,76,0,79,87,77,0,79,87,78,0,79,87,79,0,79,87,80,0,79,87,81,0,79,87,82,0,79,87,83,0,79,87,84,0,79,87,85,0,79,87,86,0,79,87,87,0,79,87,88,0,79,87,89,0,79,87,90,0,79,88,65,0,79,88,66,0,79,88,67,0,79,88,68,0,79,88,69,0,79,88,70,0,79,88,71,0,79,88,72,0,79,88,73,0,79,88,74,0,79,88,75,0,79,88,76,0,79,88,77,0,79,88,78,0,79,88,79,0,79,88,80,0,79,88,81,0,79,88,82,0,79,88,83,0,79,88,84,0,79,88,85,0,79,88,86,0,79,88,87,0,79,88,88,0,79,88,89,0,79,88,90,0,79,89,65,0,79,89,66,0,79,89,67,0,79,89,68,0,79,89, -69,0,79,89,70,0,79,89,71,0,79,89,72,0,79,89,73,0,79,89,74,0,79,89,75,0,79,89,76,0,79,89,77,0,79,89,78,0,79,89,79,0,79,89,80,0,79,89,81,0,79,89,82,0,79,89,83,0,79,89,84,0,79,89,85,0,79,89,86,0,79,89,87,0,79,89,88,0,79,89,89,0,79,89,90,0,79,90,65,0,79,90,66,0,79,90,67,0,79,90,68,0,79,90,69,0,79,90,70,0,79,90,71,0,79,90,72,0,79,90,73,0,79,90,74,0,79,90,75,0,79,90,76,0,79,90,77,0,79,90,78,0,79,90,79,0,79,90,80,0,79,90,81,0,79,90,82,0,79,90,83,0,79,90,84,0,79,90,85,0,79,90,86,0,79,90,87,0,79,90,88,0,79, -90,89,0,79,90,90,0,80,65,65,0,80,65,66,0,80,65,67,0,80,65,68,0,80,65,69,0,80,65,70,0,80,65,71,0,80,65,72,0,80,65,73,0,80,65,74,0,80,65,75,0,80,65,76,0,80,65,77,0,80,65,78,0,80,65,79,0,80,65,80,0,80,65,81,0,80,65,82,0,80,65,83,0,80,65,84,0,80,65,85,0,80,65,86,0,80,65,87,0,80,65,88,0,80,65,89,0,80,65,90,0,80,66,65,0,80,66,66,0,80,66,67,0,80,66,68,0,80,66,69,0,80,66,70,0,80,66,71,0,80,66,72,0,80,66,73,0,80,66,74,0,80,66,75,0,80,66,76,0,80,66,77,0,80,66,78,0,80,66,79,0,80,66,80,0,80,66,81,0,80,66,82, -0,80,66,83,0,80,66,84,0,80,66,85],"i8",4,x.a+41E3); -H([0,80,66,86,0,80,66,87,0,80,66,88,0,80,66,89,0,80,66,90,0,80,67,65,0,80,67,66,0,80,67,67,0,80,67,68,0,80,67,69,0,80,67,70,0,80,67,71,0,80,67,72,0,80,67,73,0,80,67,74,0,80,67,75,0,80,67,76,0,80,67,77,0,80,67,78,0,80,67,79,0,80,67,80,0,80,67,81,0,80,67,82,0,80,67,83,0,80,67,84,0,80,67,85,0,80,67,86,0,80,67,87,0,80,67,88,0,80,67,89,0,80,67,90,0,80,68,65,0,80,68,66,0,80,68,67,0,80,68,68,0,80,68,69,0,80,68,70,0,80,68,71,0,80,68,72,0,80,68,73,0,80,68,74,0,80,68,75,0,80,68,76,0,80,68,77,0,80,68,78,0,80, -68,79,0,80,68,80,0,80,68,81,0,80,68,82,0,80,68,83,0,80,68,84,0,80,68,85,0,80,68,86,0,80,68,87,0,80,68,88,0,80,68,89,0,80,68,90,0,80,69,65,0,80,69,66,0,80,69,67,0,80,69,68,0,80,69,69,0,80,69,70,0,80,69,71,0,80,69,72,0,80,69,73,0,80,69,74,0,80,69,75,0,80,69,76,0,80,69,77,0,80,69,78,0,80,69,79,0,80,69,80,0,80,69,81,0,80,69,82,0,80,69,83,0,80,69,84,0,80,69,85,0,80,69,86,0,80,69,87,0,80,69,88,0,80,69,89,0,80,69,90,0,80,70,65,0,80,70,66,0,80,70,67,0,80,70,68,0,80,70,69,0,80,70,70,0,80,70,71,0,80,70,72, -0,80,70,73,0,80,70,74,0,80,70,75,0,80,70,76,0,80,70,77,0,80,70,78,0,80,70,79,0,80,70,80,0,80,70,81,0,80,70,82,0,80,70,83,0,80,70,84,0,80,70,85,0,80,70,86,0,80,70,87,0,80,70,88,0,80,70,89,0,80,70,90,0,80,71,65,0,80,71,66,0,80,71,67,0,80,71,68,0,80,71,69,0,80,71,70,0,80,71,71,0,80,71,72,0,80,71,73,0,80,71,74,0,80,71,75,0,80,71,76,0,80,71,77,0,80,71,78,0,80,71,79,0,80,71,80,0,80,71,81,0,80,71,82,0,80,71,83,0,80,71,84,0,80,71,85,0,80,71,86,0,80,71,87,0,80,71,88,0,80,71,89,0,80,71,90,0,80,72,65,0,80,72, -66,0,80,72,67,0,80,72,68,0,80,72,69,0,80,72,70,0,80,72,71,0,80,72,72,0,80,72,73,0,80,72,74,0,80,72,75,0,80,72,76,0,80,72,77,0,80,72,78,0,80,72,79,0,80,72,80,0,80,72,81,0,80,72,82,0,80,72,83,0,80,72,84,0,80,72,85,0,80,72,86,0,80,72,87,0,80,72,88,0,80,72,89,0,80,72,90,0,80,73,65,0,80,73,66,0,80,73,67,0,80,73,68,0,80,73,69,0,80,73,70,0,80,73,71,0,80,73,72,0,80,73,73,0,80,73,74,0,80,73,75,0,80,73,76,0,80,73,77,0,80,73,78,0,80,73,79,0,80,73,80,0,80,73,81,0,80,73,82,0,80,73,83,0,80,73,84,0,80,73,85,0,80, -73,86,0,80,73,87,0,80,73,88,0,80,73,89,0,80,73,90,0,80,74,65,0,80,74,66,0,80,74,67,0,80,74,68,0,80,74,69,0,80,74,70,0,80,74,71,0,80,74,72,0,80,74,73,0,80,74,74,0,80,74,75,0,80,74,76,0,80,74,77,0,80,74,78,0,80,74,79,0,80,74,80,0,80,74,81,0,80,74,82,0,80,74,83,0,80,74,84,0,80,74,85,0,80,74,86,0,80,74,87,0,80,74,88,0,80,74,89,0,80,74,90,0,80,75,65,0,80,75,66,0,80,75,67,0,80,75,68,0,80,75,69,0,80,75,70,0,80,75,71,0,80,75,72,0,80,75,73,0,80,75,74,0,80,75,75,0,80,75,76,0,80,75,77,0,80,75,78,0,80,75,79, -0,80,75,80,0,80,75,81,0,80,75,82,0,80,75,83,0,80,75,84,0,80,75,85,0,80,75,86,0,80,75,87,0,80,75,88,0,80,75,89,0,80,75,90,0,80,76,65,0,80,76,66,0,80,76,67,0,80,76,68,0,80,76,69,0,80,76,70,0,80,76,71,0,80,76,72,0,80,76,73,0,80,76,74,0,80,76,75,0,80,76,76,0,80,76,77,0,80,76,78,0,80,76,79,0,80,76,80,0,80,76,81,0,80,76,82,0,80,76,83,0,80,76,84,0,80,76,85,0,80,76,86,0,80,76,87,0,80,76,88,0,80,76,89,0,80,76,90,0,80,77,65,0,80,77,66,0,80,77,67,0,80,77,68,0,80,77,69,0,80,77,70,0,80,77,71,0,80,77,72,0,80,77, -73,0,80,77,74,0,80,77,75,0,80,77,76,0,80,77,77,0,80,77,78,0,80,77,79,0,80,77,80,0,80,77,81,0,80,77,82,0,80,77,83,0,80,77,84,0,80,77,85,0,80,77,86,0,80,77,87,0,80,77,88,0,80,77,89,0,80,77,90,0,80,78,65,0,80,78,66,0,80,78,67,0,80,78,68,0,80,78,69,0,80,78,70,0,80,78,71,0,80,78,72,0,80,78,73,0,80,78,74,0,80,78,75,0,80,78,76,0,80,78,77,0,80,78,78,0,80,78,79,0,80,78,80,0,80,78,81,0,80,78,82,0,80,78,83,0,80,78,84,0,80,78,85,0,80,78,86,0,80,78,87,0,80,78,88,0,80,78,89,0,80,78,90,0,80,79,65,0,80,79,66,0,80, -79,67,0,80,79,68,0,80,79,69,0,80,79,70,0,80,79,71,0,80,79,72,0,80,79,73,0,80,79,74,0,80,79,75,0,80,79,76,0,80,79,77,0,80,79,78,0,80,79,79,0,80,79,80,0,80,79,81,0,80,79,82,0,80,79,83,0,80,79,84,0,80,79,85,0,80,79,86,0,80,79,87,0,80,79,88,0,80,79,89,0,80,79,90,0,80,80,65,0,80,80,66,0,80,80,67,0,80,80,68,0,80,80,69,0,80,80,70,0,80,80,71,0,80,80,72,0,80,80,73,0,80,80,74,0,80,80,75,0,80,80,76,0,80,80,77,0,80,80,78,0,80,80,79,0,80,80,80,0,80,80,81,0,80,80,82,0,80,80,83,0,80,80,84,0,80,80,85,0,80,80,86, -0,80,80,87,0,80,80,88,0,80,80,89,0,80,80,90,0,80,81,65,0,80,81,66,0,80,81,67,0,80,81,68,0,80,81,69,0,80,81,70,0,80,81,71,0,80,81,72,0,80,81,73,0,80,81,74,0,80,81,75,0,80,81,76,0,80,81,77,0,80,81,78,0,80,81,79,0,80,81,80,0,80,81,81,0,80,81,82,0,80,81,83,0,80,81,84,0,80,81,85,0,80,81,86,0,80,81,87,0,80,81,88,0,80,81,89,0,80,81,90,0,80,82,65,0,80,82,66,0,80,82,67,0,80,82,68,0,80,82,69,0,80,82,70,0,80,82,71,0,80,82,72,0,80,82,73,0,80,82,74,0,80,82,75,0,80,82,76,0,80,82,77,0,80,82,78,0,80,82,79,0,80,82, -80,0,80,82,81,0,80,82,82,0,80,82,83,0,80,82,84,0,80,82,85,0,80,82,86,0,80,82,87,0,80,82,88,0,80,82,89,0,80,82,90,0,80,83,65,0,80,83,66,0,80,83,67,0,80,83,68,0,80,83,69,0,80,83,70,0,80,83,71,0,80,83,72,0,80,83,73,0,80,83,74,0,80,83,75,0,80,83,76,0,80,83,77,0,80,83,78,0,80,83,79,0,80,83,80,0,80,83,81,0,80,83,82,0,80,83,83,0,80,83,84,0,80,83,85,0,80,83,86,0,80,83,87,0,80,83,88,0,80,83,89,0,80,83,90,0,80,84,65,0,80,84,66,0,80,84,67,0,80,84,68,0,80,84,69,0,80,84,70,0,80,84,71,0,80,84,72,0,80,84,73,0,80, -84,74,0,80,84,75,0,80,84,76,0,80,84,77,0,80,84,78,0,80,84,79,0,80,84,80,0,80,84,81,0,80,84,82,0,80,84,83,0,80,84,84,0,80,84,85,0,80,84,86,0,80,84,87,0,80,84,88,0,80,84,89,0,80,84,90,0,80,85,65,0,80,85,66,0,80,85,67,0,80,85,68,0,80,85,69,0,80,85,70,0,80,85,71,0,80,85,72,0,80,85,73,0,80,85,74,0,80,85,75,0,80,85,76,0,80,85,77,0,80,85,78,0,80,85,79,0,80,85,80,0,80,85,81,0,80,85,82,0,80,85,83,0,80,85,84,0,80,85,85,0,80,85,86,0,80,85,87,0,80,85,88,0,80,85,89,0,80,85,90,0,80,86,65,0,80,86,66,0,80,86,67, -0,80,86,68,0,80,86,69,0,80,86,70,0,80,86,71,0,80,86,72,0,80,86,73,0,80,86,74,0,80,86,75,0,80,86,76,0,80,86,77,0,80,86,78,0,80,86,79,0,80,86,80,0,80,86,81,0,80,86,82,0,80,86,83,0,80,86,84,0,80,86,85,0,80,86,86,0,80,86,87,0,80,86,88,0,80,86,89,0,80,86,90,0,80,87,65,0,80,87,66,0,80,87,67,0,80,87,68,0,80,87,69,0,80,87,70,0,80,87,71,0,80,87,72,0,80,87,73,0,80,87,74,0,80,87,75,0,80,87,76,0,80,87,77,0,80,87,78,0,80,87,79,0,80,87,80,0,80,87,81,0,80,87,82,0,80,87,83,0,80,87,84,0,80,87,85,0,80,87,86,0,80,87, -87,0,80,87,88,0,80,87,89,0,80,87,90,0,80,88,65,0,80,88,66,0,80,88,67,0,80,88,68,0,80,88,69,0,80,88,70,0,80,88,71,0,80,88,72,0,80,88,73,0,80,88,74,0,80,88,75,0,80,88,76,0,80,88,77,0,80,88,78,0,80,88,79,0,80,88,80,0,80,88,81,0,80,88,82,0,80,88,83,0,80,88,84,0,80,88,85,0,80,88,86,0,80,88,87,0,80,88,88,0,80,88,89,0,80,88,90,0,80,89,65,0,80,89,66,0,80,89,67,0,80,89,68,0,80,89,69,0,80,89,70,0,80,89,71,0,80,89,72,0,80,89,73,0,80,89,74,0,80,89,75,0,80,89,76,0,80,89,77,0,80,89,78,0,80,89,79,0,80,89,80,0,80, -89,81,0,80,89,82,0,80,89,83,0,80,89,84,0,80,89,85,0,80,89,86,0,80,89,87,0,80,89,88,0,80,89,89,0,80,89,90,0,80,90,65,0,80,90,66,0,80,90,67,0,80,90,68,0,80,90,69,0,80,90,70,0,80,90,71,0,80,90,72,0,80,90,73,0,80,90,74,0,80,90,75,0,80,90,76,0,80,90,77,0,80,90,78,0,80,90,79,0,80,90,80,0,80,90,81,0,80,90,82,0,80,90,83,0,80,90,84,0,80,90,85,0,80,90,86,0,80,90,87,0,80,90,88,0,80,90,89,0,80,90,90,0,81,65,65,0,81,65,66,0,81,65,67,0,81,65,68,0,81,65,69,0,81,65,70,0,81,65,71,0,81,65,72,0,81,65,73,0,81,65,74, -0,81,65,75,0,81,65,76,0,81,65,77,0,81,65,78,0,81,65,79,0,81,65,80,0,81,65,81,0,81,65,82,0,81,65,83,0,81,65,84,0,81,65,85,0,81,65,86,0,81,65,87,0,81,65,88,0,81,65,89,0,81,65,90,0,81,66,65,0,81,66,66,0,81,66,67,0,81,66,68,0,81,66,69,0,81,66,70,0,81,66,71,0,81,66,72,0,81,66,73,0,81,66,74,0,81,66,75,0,81,66,76,0,81,66,77,0,81,66,78,0,81,66,79,0,81,66,80,0,81,66,81,0,81,66,82,0,81,66,83,0,81,66,84,0,81,66,85,0,81,66,86,0,81,66,87,0,81,66,88,0,81,66,89,0,81,66,90,0,81,67,65,0,81,67,66,0,81,67,67,0,81,67, -68,0,81,67,69,0,81,67,70,0,81,67,71,0,81,67,72,0,81,67,73,0,81,67,74,0,81,67,75,0,81,67,76,0,81,67,77,0,81,67,78,0,81,67,79,0,81,67,80,0,81,67,81,0,81,67,82,0,81,67,83,0,81,67,84,0,81,67,85,0,81,67,86,0,81,67,87,0,81,67,88,0,81,67,89,0,81,67,90,0,81,68,65,0,81,68,66,0,81,68,67,0,81,68,68,0,81,68,69,0,81,68,70,0,81,68,71,0,81,68,72,0,81,68,73,0,81,68,74,0,81,68,75,0,81,68,76,0,81,68,77,0,81,68,78,0,81,68,79,0,81,68,80,0,81,68,81,0,81,68,82,0,81,68,83,0,81,68,84,0,81,68,85,0,81,68,86,0,81,68,87,0,81, -68,88,0,81,68,89,0,81,68,90,0,81,69,65,0,81,69,66,0,81,69,67,0,81,69,68,0,81,69,69,0,81,69,70,0,81,69,71,0,81,69,72,0,81,69,73,0,81,69,74,0,81,69,75,0,81,69,76,0,81,69,77,0,81,69,78,0,81,69,79,0,81,69,80,0,81,69,81,0,81,69,82,0,81,69,83,0,81,69,84,0,81,69,85,0,81,69,86,0,81,69,87,0,81,69,88,0,81,69,89,0,81,69,90,0,81,70,65,0,81,70,66,0,81,70,67,0,81,70,68,0,81,70,69,0,81,70,70,0,81,70,71,0,81,70,72,0,81,70,73,0,81,70,74,0,81,70,75,0,81,70,76,0,81,70,77,0,81,70,78,0,81,70,79,0,81,70,80,0,81,70,81, -0,81,70,82,0,81,70,83,0,81,70,84,0,81,70,85,0,81,70,86,0,81,70,87,0,81,70,88,0,81,70,89,0,81,70,90,0,81,71,65,0,81,71,66,0,81,71,67,0,81,71,68,0,81,71,69,0,81,71,70,0,81,71,71,0,81,71,72,0,81,71,73,0,81,71,74,0,81,71,75,0,81,71,76,0,81,71,77,0,81,71,78,0,81,71,79,0,81,71,80,0,81,71,81,0,81,71,82,0,81,71,83,0,81,71,84,0,81,71,85,0,81,71,86,0,81,71,87,0,81,71,88,0,81,71,89,0,81,71,90,0,81,72,65,0,81,72,66,0,81,72,67,0,81,72,68,0,81,72,69,0,81,72,70,0,81,72,71,0,81,72,72,0,81,72,73,0,81,72,74,0,81,72, -75,0,81,72,76,0,81,72,77,0,81,72,78,0,81,72,79,0,81,72,80,0,81,72,81,0,81,72,82,0,81,72,83,0,81,72,84,0,81,72,85,0,81,72,86,0,81,72,87,0,81,72,88,0,81,72,89,0,81,72,90,0,81,73,65,0,81,73,66,0,81,73,67,0,81,73,68,0,81,73,69,0,81,73,70,0,81,73,71,0,81,73,72,0,81,73,73,0,81,73,74,0,81,73,75,0,81,73,76,0,81,73,77,0,81,73,78,0,81,73,79,0,81,73,80,0,81,73,81,0,81,73,82,0,81,73,83,0,81,73,84,0,81,73,85,0,81,73,86,0,81,73,87,0,81,73,88,0,81,73,89,0,81,73,90,0,81,74,65,0,81,74,66,0,81,74,67,0,81,74,68,0,81, -74,69,0,81,74,70,0,81,74,71,0,81,74,72,0,81,74,73,0,81,74,74,0,81,74,75,0,81,74,76,0,81,74,77,0,81,74,78,0,81,74,79,0,81,74,80,0,81,74,81,0,81,74,82,0,81,74,83,0,81,74,84,0,81,74,85,0,81,74,86,0,81,74,87,0,81,74,88,0,81,74,89,0,81,74,90,0,81,75,65,0,81,75,66,0,81,75,67,0,81,75,68,0,81,75,69,0,81,75,70,0,81,75,71,0,81,75,72,0,81,75,73,0,81,75,74,0,81,75,75,0,81,75,76,0,81,75,77,0,81,75,78,0,81,75,79,0,81,75,80,0,81,75,81,0,81,75,82,0,81,75,83,0,81,75,84,0,81,75,85,0,81,75,86,0,81,75,87,0,81,75,88, -0,81,75,89,0,81,75,90,0,81,76,65,0,81,76,66,0,81,76,67,0,81,76,68,0,81,76,69,0,81,76,70,0,81,76,71,0,81,76,72,0,81,76,73,0,81,76,74,0,81,76,75,0,81,76,76,0,81,76,77,0,81,76,78,0,81,76,79,0,81,76,80,0,81,76,81,0,81,76,82,0,81,76,83,0,81,76,84,0,81,76,85,0,81,76,86,0,81,76,87,0,81,76,88,0,81,76,89,0,81,76,90,0,81,77,65,0,81,77,66,0,81,77,67,0,81,77,68,0,81,77,69,0,81,77,70,0,81,77,71,0,81,77,72,0,81,77,73,0,81,77,74,0,81,77,75,0,81,77,76,0,81,77,77,0,81,77,78,0,81,77,79,0,81,77,80,0,81,77,81,0,81,77, -82,0,81,77,83,0,81,77,84,0,81,77,85,0,81,77,86,0,81,77,87,0,81,77,88,0,81,77,89,0,81,77,90,0,81,78,65,0,81,78,66,0,81,78,67,0,81,78,68,0,81,78,69,0,81,78,70,0,81,78,71,0,81,78,72,0,81,78,73,0,81,78,74,0,81,78,75,0,81,78,76,0,81,78,77,0,81,78,78,0,81,78,79,0,81,78,80,0,81,78,81,0,81,78,82,0,81,78,83,0,81,78,84,0,81,78,85,0,81,78,86,0,81,78,87,0,81,78,88,0,81,78,89,0,81,78,90,0,81,79,65,0,81,79,66,0,81,79,67,0,81,79,68,0,81,79,69,0,81,79,70,0,81,79,71,0,81,79,72,0,81,79,73,0,81,79,74,0,81,79,75,0,81, -79,76,0,81,79,77,0,81,79,78,0,81,79,79,0,81,79,80,0,81,79,81,0,81,79,82,0,81,79,83,0,81,79,84,0,81,79,85,0,81,79,86,0,81,79,87,0,81,79,88,0,81,79,89,0,81,79,90,0,81,80,65,0,81,80,66,0,81,80,67,0,81,80,68,0,81,80,69,0,81,80,70,0,81,80,71,0,81,80,72,0,81,80,73,0,81,80,74,0,81,80,75,0,81,80,76,0,81,80,77,0,81,80,78,0,81,80,79,0,81,80,80,0,81,80,81,0,81,80,82,0,81,80,83,0,81,80,84,0,81,80,85,0,81,80,86,0,81,80,87,0,81,80,88,0,81,80,89,0,81,80,90,0,81,81,65,0,81,81,66,0,81,81,67,0,81,81,68,0,81,81,69, -0,81,81,70,0,81,81,71,0,81,81,72,0,81,81,73,0,81,81,74,0,81,81,75,0,81,81,76,0,81,81,77,0,81,81,78,0,81,81,79,0,81,81,80,0,81,81,81,0,81,81,82,0,81,81,83,0,81,81,84,0,81,81,85,0,81,81,86,0,81,81,87,0,81,81,88,0,81,81,89,0,81,81,90,0,81,82,65,0,81,82,66,0,81,82,67,0,81,82,68,0,81,82,69,0,81,82,70,0,81,82,71,0,81,82,72,0,81,82,73,0,81,82,74,0,81,82,75,0,81,82,76,0,81,82,77,0,81,82,78,0,81,82,79,0,81,82,80,0,81,82,81,0,81,82,82,0,81,82,83,0,81,82,84,0,81,82,85,0,81,82,86,0,81,82,87,0,81,82,88,0,81,82, -89,0,81,82,90,0,81,83,65,0,81,83,66,0,81,83,67,0,81,83,68,0,81,83,69,0,81,83,70,0,81,83,71,0,81,83,72,0,81,83,73,0,81,83,74,0,81,83,75,0,81,83,76,0,81,83,77,0,81,83,78,0,81,83,79,0,81,83,80,0,81,83,81,0,81,83,82,0,81,83,83,0,81,83,84,0,81,83,85,0,81,83,86,0,81,83,87,0,81,83,88,0,81,83,89,0,81,83,90,0,81,84,65,0,81,84,66,0,81,84,67,0,81,84,68,0,81,84,69,0,81,84,70,0,81,84,71,0,81,84,72,0,81,84,73,0,81,84,74,0,81,84,75,0,81,84,76,0,81,84,77,0,81,84,78,0,81,84,79,0,81,84,80,0,81,84,81,0,81,84,82,0,81, -84,83,0,81,84,84,0,81,84,85,0,81,84,86,0,81,84,87,0,81,84,88,0,81,84,89,0,81,84,90,0,81,85,65,0,81,85,66,0,81,85,67,0,81,85,68,0,81,85,69,0,81,85,70,0,81,85,71,0,81,85,72,0,81,85,73,0,81,85,74,0,81,85,75,0,81,85,76,0,81,85,77,0,81,85,78,0,81,85,79,0,81,85,80,0,81,85,81,0,81,85,82,0,81,85,83,0,81,85,84,0,81,85,85,0,81,85,86,0,81,85,87,0,81,85,88,0,81,85,89,0,81,85,90,0,81,86,65,0,81,86,66,0,81,86,67,0,81,86,68,0,81,86,69,0,81,86,70,0,81,86,71,0,81,86,72,0,81,86,73,0,81,86,74,0,81,86,75,0,81,86,76, -0,81,86,77,0,81,86,78,0,81,86,79,0,81,86,80,0,81,86,81,0,81,86,82,0,81,86,83,0,81,86,84,0,81,86,85,0,81,86,86,0,81,86,87,0,81,86,88,0,81,86,89,0,81,86,90,0,81,87,65,0,81,87,66,0,81,87,67,0,81,87,68,0,81,87,69,0,81,87,70,0,81,87,71,0,81,87,72,0,81,87,73,0,81,87,74,0,81,87,75,0,81,87,76,0,81,87,77,0,81,87,78,0,81,87,79,0,81,87,80,0,81,87,81,0,81,87,82,0,81,87,83,0,81,87,84,0,81,87,85,0,81,87,86,0,81,87,87,0,81,87,88,0,81,87,89,0,81,87,90,0,81,88,65,0,81,88,66,0,81,88,67,0,81,88,68,0,81,88,69,0,81,88, -70,0,81,88,71,0,81,88,72,0,81,88,73,0,81,88,74,0,81,88,75,0,81,88,76,0,81,88,77,0,81,88,78,0,81,88,79,0,81,88,80,0,81,88,81,0,81,88,82,0,81,88,83,0,81,88,84,0,81,88,85,0,81,88,86,0,81,88,87,0,81,88,88,0,81,88,89,0,81,88,90,0,81,89,65,0,81,89,66,0,81,89,67,0,81,89,68,0,81,89,69,0,81,89,70,0,81,89,71,0,81,89,72,0,81,89,73,0,81,89,74,0,81,89,75,0,81,89,76,0,81,89,77,0,81,89,78,0,81,89,79,0,81,89,80,0,81,89,81,0,81,89,82,0,81,89,83,0,81,89,84,0,81,89,85,0,81,89,86,0,81,89,87,0,81,89,88,0,81,89,89,0,81, -89,90,0,81,90,65,0,81,90,66,0,81,90,67,0,81,90,68,0,81,90,69,0,81,90,70,0,81,90,71,0,81,90,72,0,81,90,73,0,81,90,74,0,81,90,75,0,81,90,76,0,81,90,77,0,81,90,78,0,81,90,79,0,81,90,80,0,81,90,81,0,81,90,82,0,81,90,83,0,81,90,84,0,81,90,85,0,81,90,86,0,81,90,87,0,81,90,88,0,81,90,89,0,81,90,90,0,82,65,65,0,82,65,66,0,82,65,67,0,82,65,68,0,82,65,69,0,82,65,70,0,82,65,71,0,82,65,72,0,82,65,73,0,82,65,74,0,82,65,75,0,82,65,76,0,82,65,77,0,82,65,78,0,82,65,79,0,82,65,80,0,82,65,81,0,82,65,82,0,82,65,83, -0,82,65,84,0,82,65,85,0,82,65,86,0,82,65,87,0,82,65,88,0,82,65,89,0,82,65,90,0,82,66,65,0,82,66,66,0,82,66,67,0,82,66,68,0,82,66,69,0,82,66,70,0,82,66,71,0,82,66,72,0,82,66,73,0,82,66,74,0,82,66,75,0,82,66,76,0,82,66,77,0,82,66,78,0,82,66,79,0,82,66,80,0,82,66,81,0,82,66,82,0,82,66,83,0,82,66,84,0,82,66,85,0,82,66,86,0,82,66,87,0,82,66,88,0,82,66,89,0,82,66,90,0,82,67,65,0,82,67,66,0,82,67,67,0,82,67,68,0,82,67,69,0,82,67,70,0,82,67,71,0,82,67,72,0,82,67,73,0,82,67,74,0,82,67,75,0,82,67,76,0,82,67, -77,0,82,67,78,0,82,67,79,0,82,67,80,0,82,67,81,0,82,67,82,0,82,67,83,0,82,67,84,0,82,67,85,0,82,67,86,0,82,67,87,0,82,67,88,0,82,67,89,0,82,67,90,0,82,68,65,0,82,68,66,0,82,68,67,0,82,68,68,0,82,68,69,0,82,68,70,0,82,68,71,0,82,68,72,0,82,68,73,0,82,68,74,0,82,68,75,0,82,68,76,0,82,68,77,0,82,68,78,0,82,68,79,0,82,68,80,0,82,68,81,0,82,68,82,0,82,68,83,0,82,68,84,0,82,68,85,0,82,68,86,0,82,68,87,0,82,68,88,0,82,68,89,0,82,68,90,0,82,69,65,0,82,69,66,0,82,69,67,0,82,69,68,0,82,69,69,0,82,69,70,0,82, -69,71,0,82,69,72,0,82,69,73,0,82,69,74,0,82,69,75,0,82,69,76,0,82,69,77,0,82,69,78,0,82,69,79,0,82,69,80,0,82,69,81,0,82,69,82,0,82,69,83,0,82,69,84,0,82,69,85,0,82,69,86,0,82,69,87,0,82,69,88,0,82,69,89,0,82,69,90,0,82,70,65,0,82,70,66,0,82,70,67,0,82,70,68,0,82,70,69,0,82,70,70,0,82,70,71,0,82,70,72,0,82,70,73,0,82,70,74,0,82,70,75,0,82,70,76,0,82,70,77,0,82,70,78,0,82,70,79,0,82,70,80,0,82,70,81,0,82,70,82,0,82,70,83,0,82,70,84,0,82,70,85,0,82,70,86,0,82,70,87,0,82,70,88,0,82,70,89,0,82,70,90, -0,82,71,65,0,82,71,66,0,82,71,67,0,82,71,68,0,82,71,69,0,82,71,70,0,82,71,71,0,82,71,72,0,82,71,73,0,82,71,74,0,82,71,75,0,82,71,76,0,82,71,77,0,82,71,78,0,82,71,79,0,82,71,80,0,82,71,81,0,82,71,82,0,82,71,83,0,82,71,84,0,82,71,85,0,82,71,86,0,82,71,87,0,82,71,88,0,82,71,89,0,82,71,90,0,82,72,65,0,82,72,66,0,82,72,67,0,82,72,68,0,82,72,69,0,82,72,70,0,82,72,71,0,82,72,72,0,82,72,73,0,82,72,74,0,82,72,75,0,82,72,76,0,82,72,77,0,82,72,78,0,82,72,79,0,82,72,80,0,82,72,81,0,82,72,82,0,82,72,83,0,82,72, -84,0,82,72,85,0,82,72,86,0,82,72,87,0,82,72,88,0,82,72,89,0,82,72,90,0,82,73,65,0,82,73,66,0,82,73,67,0,82,73,68,0,82,73,69,0,82,73,70,0,82,73,71,0,82,73,72,0,82,73,73,0,82,73,74,0,82,73,75,0,82,73,76,0,82,73,77,0,82,73,78,0,82,73,79,0,82,73,80,0,82,73,81,0,82,73,82,0,82,73,83,0,82,73,84,0,82,73,85,0,82,73,86,0,82,73,87,0,82,73,88,0,82,73,89,0,82,73,90,0,82,74,65,0,82,74,66,0,82,74,67,0,82,74,68,0,82,74,69,0,82,74,70,0,82,74,71,0,82,74,72,0,82,74,73,0,82,74,74,0,82,74,75,0,82,74,76,0,82,74,77,0,82, -74,78,0,82,74,79,0,82,74,80,0,82,74,81,0,82,74,82,0,82,74,83,0,82,74,84,0,82,74,85,0,82,74,86,0,82,74,87,0,82,74,88,0,82,74,89,0,82,74,90,0,82,75,65,0,82,75,66,0,82,75,67,0,82,75,68,0,82,75,69,0,82,75,70,0,82,75,71,0,82,75,72,0,82,75,73,0,82,75,74,0,82,75,75,0,82,75,76,0,82,75,77,0,82,75,78,0,82,75,79,0,82,75,80,0,82,75,81,0,82,75,82,0,82,75,83,0,82,75,84,0,82,75,85,0,82,75,86,0,82,75,87,0,82,75,88,0,82,75,89,0,82,75,90,0,82,76,65,0,82,76,66,0,82,76,67,0,82,76,68,0,82,76,69,0,82,76,70,0,82,76,71, -0,82,76,72,0,82,76,73,0,82,76,74,0,82,76,75,0,82,76,76,0,82,76,77,0,82,76,78,0,82,76,79,0,82,76,80,0,82,76,81,0,82,76,82,0,82,76,83,0,82,76,84,0,82,76,85,0,82,76,86,0,82,76,87,0,82,76,88,0,82,76,89,0,82,76,90,0,82,77,65,0,82,77,66,0,82,77,67,0,82,77,68,0,82,77,69,0,82,77,70,0,82,77,71,0,82,77,72,0,82,77,73,0,82,77,74,0,82,77,75,0,82,77,76,0,82,77,77,0,82,77,78,0,82,77,79,0,82,77,80,0,82,77,81,0,82,77,82,0,82,77,83,0,82,77,84,0,82,77,85,0,82,77,86,0,82,77,87,0,82,77,88,0,82,77,89,0,82,77,90,0,82,78, -65,0,82,78,66,0,82,78,67,0,82,78,68,0,82,78,69,0,82,78,70,0,82,78,71,0,82,78,72,0,82,78,73,0,82,78,74,0,82,78,75,0,82,78,76,0,82,78,77,0,82,78,78,0,82,78,79,0,82,78,80,0,82,78,81,0,82,78,82,0,82,78,83,0,82,78,84,0,82,78,85,0,82,78,86,0,82,78,87,0,82,78,88,0,82,78,89,0,82,78,90,0,82,79,65,0,82,79,66,0,82,79,67,0,82,79,68,0,82,79,69,0,82,79,70,0,82,79,71,0,82,79,72,0,82,79,73,0,82,79,74,0,82,79,75,0,82,79,76,0,82,79,77,0,82,79,78,0,82,79,79,0,82,79,80,0,82,79,81,0,82,79,82,0,82,79,83,0,82,79,84,0,82, -79,85,0,82,79,86,0,82,79,87,0,82,79,88,0,82,79,89,0,82,79,90,0,82,80,65,0,82,80,66,0,82,80,67,0,82,80,68,0,82,80,69,0,82,80,70,0,82,80,71,0,82,80,72,0,82,80,73,0,82,80,74,0,82,80,75,0,82,80,76,0,82,80,77,0,82,80,78,0,82,80,79,0,82,80,80,0,82,80,81,0,82,80,82,0,82,80,83,0,82,80,84,0,82,80,85,0,82,80,86,0,82,80,87,0,82,80,88,0,82,80,89,0,82,80,90,0,82,81,65,0,82,81,66,0,82,81,67,0,82,81,68,0,82,81,69,0,82,81,70,0,82,81,71,0,82,81,72,0,82,81,73,0,82,81,74,0,82,81,75,0,82,81,76,0,82,81,77,0,82,81,78, -0,82,81,79,0,82,81,80,0,82,81,81,0,82,81,82,0,82,81,83,0,82,81,84,0,82,81,85,0,82,81,86,0,82,81,87,0,82,81,88,0,82,81,89,0,82,81,90,0,82,82,65,0,82,82,66,0,82,82,67,0,82,82,68,0,82,82,69,0,82,82,70,0,82,82,71,0,82,82,72,0,82,82,73,0,82,82,74,0,82,82,75,0,82,82,76,0,82,82,77,0,82,82,78,0,82,82,79,0,82,82,80,0,82,82,81,0,82,82,82,0,82,82,83,0,82,82,84,0,82,82,85,0,82,82,86,0,82,82,87,0,82,82,88,0,82,82,89,0,82,82,90,0,82,83,65,0,82,83,66,0,82,83,67,0,82,83,68,0,82,83,69,0,82,83,70,0,82,83,71,0,82,83, -72,0,82,83,73,0,82,83,74,0,82,83,75,0,82,83,76,0,82,83,77,0,82,83,78,0,82,83,79,0,82,83,80,0,82,83,81,0,82,83,82,0,82,83,83,0,82,83,84,0,82,83,85,0,82,83,86,0,82,83,87,0,82,83,88,0,82,83,89,0,82,83,90,0,82,84,65,0,82,84,66,0,82,84,67,0,82,84,68,0,82,84,69,0,82,84,70,0,82,84,71,0,82,84,72,0,82,84,73,0,82,84,74,0,82,84,75,0,82,84,76,0,82,84,77,0,82,84,78,0,82,84,79,0,82,84,80,0,82,84,81,0,82,84,82,0,82,84,83,0,82,84,84,0,82,84,85,0,82,84,86,0,82,84,87,0,82,84,88,0,82,84,89,0,82,84,90,0,82,85,65,0,82, -85,66,0,82,85,67,0,82,85,68,0,82,85,69,0,82,85,70,0,82,85,71,0,82,85,72,0,82,85,73,0,82,85,74,0,82,85,75,0,82,85,76,0,82,85,77,0,82,85,78,0,82,85,79,0,82,85,80,0,82,85,81,0,82,85,82,0,82,85,83,0,82,85,84,0,82,85,85,0,82,85,86,0,82,85,87,0,82,85,88,0,82,85,89,0,82,85,90,0,82,86,65,0,82,86,66,0,82,86,67,0,82,86,68,0,82,86,69,0,82,86,70,0,82,86,71,0,82,86,72,0,82,86,73,0,82,86,74,0,82,86,75,0,82,86,76,0,82,86,77,0,82,86,78,0,82,86,79,0,82,86,80,0,82,86,81,0,82,86,82,0,82,86,83,0,82,86,84,0,82,86,85, -0,82,86,86,0,82,86,87,0,82,86,88,0,82,86,89,0,82,86,90,0,82,87,65,0,82,87,66,0,82,87,67,0,82,87,68,0,82,87,69,0,82,87,70,0,82,87,71,0,82,87,72,0,82,87,73,0,82,87,74,0,82,87,75,0,82,87,76,0,82,87,77,0,82,87,78,0,82,87,79,0,82,87,80,0,82,87,81,0,82,87,82,0,82,87,83,0,82,87,84,0,82,87,85,0,82,87,86,0,82,87,87,0,82,87,88,0,82,87,89,0,82,87,90,0,82,88,65,0,82,88,66,0,82,88,67,0,82,88,68,0,82,88,69,0,82,88,70,0,82,88,71,0,82,88,72,0,82,88,73,0,82,88,74,0,82,88,75,0,82,88,76,0,82,88,77,0,82,88,78,0,82,88, -79,0,82,88,80,0,82,88,81,0,82,88,82,0,82,88,83,0,82,88,84,0,82,88,85,0,82,88,86,0,82,88,87,0,82,88,88,0,82,88,89,0,82,88,90,0,82,89,65,0,82,89,66,0,82,89,67,0,82,89,68,0,82,89,69,0,82,89,70,0,82,89,71,0,82,89,72,0,82,89,73,0,82,89,74,0,82,89,75,0,82,89,76,0,82,89,77,0,82,89,78,0,82,89,79,0,82,89,80,0,82,89,81,0,82,89,82,0,82,89,83,0,82,89,84,0,82,89,85,0,82,89,86,0,82,89,87,0,82,89,88,0,82,89,89,0,82,89,90,0,82,90,65,0,82,90,66,0,82,90,67,0,82,90,68,0,82,90,69,0,82,90,70,0,82,90,71,0,82,90,72,0,82, -90,73,0,82,90,74,0,82,90,75,0,82,90,76,0,82,90,77,0,82,90,78,0,82,90,79,0,82,90,80,0,82,90,81,0,82,90,82,0,82,90,83,0,82,90,84,0,82,90,85,0,82,90,86,0,82,90,87,0,82,90,88,0,82,90,89,0,82,90,90,0,83,65,65,0,83,65,66,0,83,65,67,0,83,65,68,0,83,65,69,0,83,65,70,0,83,65,71,0,83,65,72,0,83,65,73,0,83,65,74,0,83,65,75,0,83,65,76,0,83,65,77,0,83,65,78,0,83,65,79,0,83,65,80,0,83,65,81,0,83,65,82,0,83,65,83,0,83,65,84,0,83,65,85,0,83,65,86,0,83,65,87,0,83,65,88,0,83,65,89,0,83,65,90,0,83,66,65,0,83,66,66, -0,83,66,67,0,83,66,68,0,83,66,69,0,83,66,70,0,83,66,71,0,83,66,72,0,83,66,73,0,83,66,74,0,83,66,75,0,83,66,76,0,83,66,77,0,83,66,78,0,83,66,79,0,83,66,80,0,83,66,81,0,83,66,82,0,83,66,83,0,83,66,84,0,83,66,85,0,83,66,86,0,83,66,87,0,83,66,88,0,83,66,89,0,83,66,90,0,83,67,65,0,83,67,66,0,83,67,67,0,83,67,68,0,83,67,69,0,83,67,70,0,83,67,71,0,83,67,72,0,83,67,73,0,83,67,74,0,83,67,75,0,83,67,76,0,83,67,77,0,83,67,78,0,83,67,79,0,83,67,80,0,83,67,81,0,83,67,82,0,83,67,83,0,83,67,84,0,83,67,85,0,83,67, -86,0,83,67,87,0,83,67,88,0,83,67,89,0,83,67,90,0,83,68,65,0,83,68,66,0,83,68,67,0,83,68,68,0,83,68,69,0,83,68,70,0,83,68,71,0,83,68,72,0,83,68,73,0,83,68,74,0,83,68,75,0,83,68,76,0,83,68,77,0,83,68,78,0,83,68,79,0,83,68,80,0,83,68,81,0,83,68,82,0,83,68,83,0,83,68,84,0,83,68,85,0,83,68,86,0,83,68,87,0,83,68,88,0,83,68,89,0,83,68,90,0,83,69,65,0,83,69,66,0,83,69,67,0,83,69,68,0,83,69,69,0,83,69,70,0,83,69,71,0,83,69,72,0,83,69,73,0,83,69,74,0,83,69,75,0,83,69,76,0,83,69,77,0,83,69,78,0,83,69,79,0,83, -69,80,0,83,69,81,0,83,69,82,0,83,69,83,0,83,69,84,0,83,69,85,0,83,69,86,0,83,69,87,0,83,69,88,0,83,69,89,0,83,69,90,0,83,70,65,0,83,70,66,0,83,70,67,0,83,70,68,0,83,70,69,0,83,70,70,0,83,70,71,0,83,70,72,0,83,70,73,0,83,70,74,0,83,70,75,0,83,70,76,0,83,70,77,0,83,70,78,0,83,70,79,0,83,70,80,0,83,70,81,0,83,70,82,0,83,70,83,0,83,70,84,0,83,70,85,0,83,70,86,0,83,70,87,0,83,70,88,0,83,70,89,0,83,70,90,0,83,71,65,0,83,71,66,0,83,71,67,0,83,71,68,0,83,71,69,0,83,71,70,0,83,71,71,0,83,71,72,0,83,71,73, -0,83,71,74,0,83,71,75,0,83,71,76,0,83,71,77,0,83,71,78,0,83,71,79,0,83,71,80,0,83,71,81,0,83,71,82,0,83,71,83,0,83,71,84,0,83,71,85,0,83,71,86,0,83,71,87,0,83,71,88,0,83,71,89,0,83,71,90,0,83,72,65,0,83,72,66,0,83,72,67,0,83,72,68,0,83,72,69,0,83,72,70,0,83,72,71,0,83,72,72,0,83,72,73,0,83,72,74,0,83,72,75,0,83,72,76,0,83,72,77,0,83,72,78,0,83,72,79,0,83,72,80,0,83,72,81,0,83,72,82,0,83,72,83,0,83,72,84,0,83,72,85,0,83,72,86,0,83,72,87,0,83,72,88,0,83,72,89,0,83,72,90,0,83,73,65,0,83,73,66,0,83,73, -67,0,83,73,68,0,83,73,69,0,83,73,70,0,83,73,71,0,83,73,72,0,83,73,73,0,83,73,74,0,83,73,75,0,83,73,76,0,83,73,77,0,83,73,78,0,83,73,79,0,83,73,80,0,83,73,81,0,83,73,82,0,83,73,83,0,83,73,84,0,83,73,85,0,83,73,86,0,83,73,87,0,83,73,88,0,83,73,89,0,83,73,90,0,83,74,65,0,83,74,66,0,83,74,67,0,83,74,68,0,83,74,69,0,83,74,70,0,83,74,71,0,83,74,72,0,83,74,73,0,83,74,74,0,83,74,75,0,83,74,76,0,83,74,77,0,83,74,78,0,83,74,79,0,83,74,80,0,83,74,81,0,83,74,82,0,83,74,83,0,83,74,84,0,83,74,85,0,83,74,86,0,83, -74,87,0,83,74,88,0,83,74,89,0,83,74,90,0,83,75,65,0,83,75,66,0,83,75,67,0,83,75,68,0,83,75,69,0,83,75,70,0,83,75,71,0,83,75,72,0,83,75,73,0,83,75,74,0,83,75,75,0,83,75,76,0,83,75,77,0,83,75,78,0,83,75,79,0,83,75,80,0,83,75,81,0,83,75,82,0,83,75,83,0,83,75,84,0,83,75,85,0,83,75,86,0,83,75,87,0,83,75,88,0,83,75,89,0,83,75,90,0,83,76,65,0,83,76,66,0,83,76,67,0,83,76,68,0,83,76,69,0,83,76,70,0,83,76,71,0,83,76,72,0,83,76,73,0,83,76,74,0,83,76,75,0,83,76,76,0,83,76,77,0,83,76,78,0,83,76,79,0,83,76,80, -0,83,76,81,0,83,76,82,0,83,76,83,0,83,76,84,0,83,76,85,0,83,76,86,0,83,76,87,0,83,76,88,0,83,76,89,0,83,76,90,0,83,77,65,0,83,77,66,0,83,77,67,0,83,77,68,0,83,77,69,0,83,77,70,0,83,77,71,0,83,77,72,0,83,77,73,0,83,77,74,0,83,77,75,0,83,77,76,0,83,77,77,0,83,77,78,0,83,77,79,0,83,77,80,0,83,77,81,0,83,77,82,0,83,77,83,0,83,77,84,0,83,77,85,0,83,77,86,0,83,77,87,0,83,77,88,0,83,77,89,0,83,77,90,0,83,78,65,0,83,78,66,0,83,78,67,0,83,78,68,0,83,78,69,0,83,78,70,0,83,78,71,0,83,78,72,0,83,78,73,0,83,78, -74,0,83,78,75,0,83,78,76,0,83,78,77,0,83,78,78,0,83,78,79,0,83,78,80,0,83,78,81,0,83,78,82,0,83,78,83,0,83,78,84,0,83,78,85,0,83,78,86,0,83,78,87,0,83,78,88,0,83,78,89,0,83,78,90,0,83,79,65,0,83,79,66,0,83,79,67,0,83,79,68,0,83,79,69,0,83,79,70,0,83,79,71,0,83,79,72,0,83,79,73,0,83,79,74,0,83,79,75,0,83,79,76,0,83,79,77,0,83,79,78,0,83,79,79,0,83,79,80,0,83,79,81,0,83,79,82,0,83,79,83,0,83,79,84,0,83,79,85,0,83,79,86,0,83,79,87,0,83,79,88,0,83,79,89,0,83,79,90,0,83,80,65,0,83,80,66,0,83,80,67,0,83, -80,68,0,83,80,69,0,83,80,70,0,83,80,71,0,83,80,72,0,83,80,73,0,83,80,74,0,83,80,75,0,83,80,76,0,83,80,77,0,83,80,78,0,83,80,79,0,83,80,80,0,83,80,81,0,83,80,82,0,83,80,83,0,83,80,84,0,83,80,85,0,83,80,86,0,83,80,87,0,83,80,88,0,83,80,89,0,83,80,90,0,83,81,65,0,83,81,66,0,83,81,67,0,83,81,68,0,83,81,69,0,83,81,70,0,83,81,71,0,83,81,72,0,83,81,73,0,83,81,74,0,83,81,75,0,83,81,76,0,83,81,77,0,83,81,78,0,83,81,79,0,83,81,80,0,83,81,81,0,83,81,82,0,83,81,83,0,83,81,84,0,83,81,85,0,83,81,86,0,83,81,87, -0,83,81,88,0,83,81,89,0,83,81,90,0,83,82,65,0,83,82,66,0,83,82,67,0,83,82,68,0,83,82,69,0,83,82,70,0,83,82,71,0,83,82,72,0,83,82,73,0,83,82,74,0,83,82,75,0,83,82,76,0,83,82,77,0,83,82,78,0,83,82,79,0,83,82,80,0,83,82,81,0,83,82,82,0,83,82,83,0,83,82,84,0,83,82,85,0,83,82,86,0,83,82,87,0,83,82,88,0,83,82,89,0,83,82,90,0,83,83,65,0,83,83,66,0,83,83,67,0,83,83,68,0,83,83,69,0,83,83,70,0,83,83,71,0,83,83,72,0,83,83,73,0,83,83,74,0,83,83,75,0,83,83,76,0,83,83,77,0,83,83,78,0,83,83,79,0,83,83,80,0,83,83, -81,0,83,83,82,0,83,83,83,0,83,83,84,0,83,83,85,0,83,83,86,0,83,83,87,0,83,83,88,0,83,83,89,0,83,83,90,0,83,84,65,0,83,84,66,0,83,84,67,0,83,84,68,0,83,84,69,0,83,84,70,0,83,84,71,0,83,84,72,0,83,84,73,0,83,84,74,0,83,84,75,0,83,84,76,0,83,84,77,0,83,84,78,0,83,84,79,0,83,84,80,0,83,84,81,0,83,84,82,0,83,84,83,0,83,84,84,0,83,84,85,0,83,84,86,0,83,84,87,0,83,84,88,0,83,84,89,0,83,84,90,0,83,85,65,0,83,85,66,0,83,85,67,0,83,85,68,0,83,85,69,0,83,85,70,0,83,85,71,0,83,85,72,0,83,85,73,0,83,85,74,0,83, -85,75,0,83,85,76,0,83,85,77,0,83,85,78,0,83,85,79,0,83,85,80,0,83,85,81,0,83,85,82,0,83,85,83,0,83,85,84,0,83,85,85,0,83,85,86,0,83,85,87,0,83,85,88,0,83,85,89,0,83,85,90,0,83,86,65,0,83,86,66,0,83,86,67,0,83,86,68,0,83,86,69,0,83,86,70,0,83,86,71,0,83,86,72,0,83,86,73,0,83,86,74,0,83,86,75,0,83,86,76,0,83,86,77,0,83,86,78,0,83,86,79,0,83,86,80,0,83,86,81,0,83,86,82,0,83,86,83,0,83,86,84,0,83,86,85,0,83,86,86,0,83,86,87,0,83,86,88,0,83,86,89,0,83,86,90,0,83,87,65,0,83,87,66,0,83,87,67,0,83,87,68, -0,83,87,69,0,83,87,70,0,83,87,71],"i8",4,x.a+51240); -H([0,83,87,72,0,83,87,73,0,83,87,74,0,83,87,75,0,83,87,76,0,83,87,77,0,83,87,78,0,83,87,79,0,83,87,80,0,83,87,81,0,83,87,82,0,83,87,83,0,83,87,84,0,83,87,85,0,83,87,86,0,83,87,87,0,83,87,88,0,83,87,89,0,83,87,90,0,83,88,65,0,83,88,66,0,83,88,67,0,83,88,68,0,83,88,69,0,83,88,70,0,83,88,71,0,83,88,72,0,83,88,73,0,83,88,74,0,83,88,75,0,83,88,76,0,83,88,77,0,83,88,78,0,83,88,79,0,83,88,80,0,83,88,81,0,83,88,82,0,83,88,83,0,83,88,84,0,83,88,85,0,83,88,86,0,83,88,87,0,83,88,88,0,83,88,89,0,83,88,90,0,83, -89,65,0,83,89,66,0,83,89,67,0,83,89,68,0,83,89,69,0,83,89,70,0,83,89,71,0,83,89,72,0,83,89,73,0,83,89,74,0,83,89,75,0,83,89,76,0,83,89,77,0,83,89,78,0,83,89,79,0,83,89,80,0,83,89,81,0,83,89,82,0,83,89,83,0,83,89,84,0,83,89,85,0,83,89,86,0,83,89,87,0,83,89,88,0,83,89,89,0,83,89,90,0,83,90,65,0,83,90,66,0,83,90,67,0,83,90,68,0,83,90,69,0,83,90,70,0,83,90,71,0,83,90,72,0,83,90,73,0,83,90,74,0,83,90,75,0,83,90,76,0,83,90,77,0,83,90,78,0,83,90,79,0,83,90,80,0,83,90,81,0,83,90,82,0,83,90,83,0,83,90,84, -0,83,90,85,0,83,90,86,0,83,90,87,0,83,90,88,0,83,90,89,0,83,90,90,0,84,84,87,0,84,84,88,0,84,84,89,0,84,84,90,0,84,85,65,0,84,85,66,0,84,85,67,0,84,85,68,0,84,85,69,0,84,85,70,0,84,85,71,0,84,85,72,0,84,85,73,0,84,85,74,0,84,85,75,0,84,85,76,0,84,85,77,0,84,85,78,0,84,85,79,0,84,85,80,0,84,85,81,0,84,85,82,0,84,85,83,0,84,85,84,0,84,85,85,0,84,85,86,0,84,85,87,0,84,85,88,0,84,85,89,0,84,85,90,0,84,86,65,0,84,86,66,0,84,86,67,0,84,86,68,0,84,86,69,0,84,86,70,0,84,86,71,0,84,86,72,0,84,86,73,0,84,86, -74,0,84,86,75,0,84,86,76,0,84,86,77,0,84,86,78,0,84,86,79,0,84,86,80,0,84,86,81,0,84,86,82,0,84,86,83,0,84,86,84,0,84,86,85,0,84,86,86,0,84,86,87,0,84,86,88,0,84,86,89,0,84,86,90,0,84,87,65,0,84,87,66,0,84,87,67,0,84,87,68,0,84,87,69,0,84,87,70,0,84,87,71,0,84,87,72,0,84,87,73,0,84,87,74,0,84,87,75,0,84,87,76,0,84,87,77,0,84,87,78,0,84,87,79,0,84,87,80,0,84,87,81,0,84,87,82,0,84,87,83,0,84,87,84,0,84,87,85,0,84,87,86,0,84,87,87,0,84,87,88,0,84,87,89,0,84,87,90,0,84,88,65,0,84,88,66,0,84,88,67,0,84, -88,68,0,84,88,69,0,84,88,70,0,84,88,71,0,84,88,72,0,84,88,73,0,84,88,74,0,84,88,75,0,84,88,76,0,84,88,77,0,84,88,78,0,84,88,79,0,84,88,80,0,84,88,81,0,84,88,82,0,84,88,83,0,84,88,84,0,84,88,85,0,84,88,86,0,84,88,87,0,84,88,88,0,84,88,89,0,84,88,90,0,84,89,65,0,84,89,66,0,84,89,67,0,84,89,68,0,84,89,69,0,84,89,70,0,84,89,71,0,84,89,72,0,84,89,73,0,84,89,74,0,84,89,75,0,84,89,76,0,84,89,77,0,84,89,78,0,84,89,79,0,84,89,80,0,84,89,81,0,84,89,82,0,84,89,83,0,84,89,84,0,84,89,85,0,84,89,86,0,84,89,87, -0,84,89,88,0,84,89,89,0,84,89,90,0,84,90,65,0,84,90,66,0,84,90,67,0,84,90,68,0,84,90,69,0,84,90,70,0,84,90,71,0,84,90,72,0,84,90,73,0,84,90,74,0,84,90,75,0,84,90,76,0,84,90,77,0,84,90,78,0,84,90,79,0,84,90,80,0,84,90,81,0,84,90,82,0,84,90,83,0,84,90,84,0,84,90,85,0,84,90,86,0,84,90,87,0,84,90,88,0,84,90,89,0,84,90,90,0,85,65,65,0,85,65,66,0,85,65,67,0,85,65,68,0,85,65,69,0,85,65,70,0,85,65,71,0,85,65,72,0,85,65,73,0,85,65,74,0,85,65,75,0,85,65,76,0,85,65,77,0,85,65,78,0,85,65,79,0,85,65,80,0,85,65, -81,0,85,65,82,0,85,65,83,0,85,65,84,0,85,65,85,0,85,65,86,0,85,65,87,0,85,65,88,0,85,65,89,0,85,65,90,0,85,66,65,0,85,66,66,0,85,66,67,0,85,66,68,0,85,66,69,0,85,66,70,0,85,66,71,0,85,66,72,0,85,66,73,0,85,66,74,0,85,66,75,0,85,66,76,0,85,66,77,0,85,66,78,0,85,66,79,0,85,66,80,0,85,66,81,0,85,66,82,0,85,66,83,0,85,66,84,0,85,66,85,0,85,66,86,0,85,66,87,0,85,66,88,0,85,66,89,0,85,66,90,0,85,67,65,0,85,67,66,0,85,67,67,0,85,67,68,0,85,67,69,0,85,67,70,0,85,67,71,0,85,67,72,0,85,67,73,0,85,67,74,0,85, -67,75,0,85,67,76,0,85,67,77,0,85,67,78,0,85,67,79,0,85,67,80,0,85,67,81,0,85,67,82,0,85,67,83,0,85,67,84,0,85,67,85,0,85,67,86,0,85,67,87,0,85,67,88,0,85,67,89,0,85,67,90,0,85,68,65,0,85,68,66,0,85,68,67,0,85,68,68,0,85,68,69,0,85,68,70,0,85,68,71,0,85,68,72,0,85,68,73,0,85,68,74,0,85,68,75,0,85,68,76,0,85,68,77,0,85,68,78,0,85,68,79,0,85,68,80,0,85,68,81,0,85,68,82,0,85,68,83,0,85,68,84,0,85,68,85,0,85,68,86,0,85,68,87,0,85,68,88,0,85,68,89,0,85,68,90,0,85,69,65,0,85,69,66,0,85,69,67,0,85,69,68, -0,85,69,69,0,85,69,70,0,85,69,71,0,85,69,72,0,85,69,73,0,85,69,74,0,85,69,75,0,85,69,76,0,85,69,77,0,85,69,78,0,85,69,79,0,85,69,80,0,85,69,81,0,85,69,82,0,85,69,83,0,85,69,84,0,85,69,85,0,85,69,86,0,85,69,87,0,85,69,88,0,85,69,89,0,85,69,90,0,85,70,65,0,85,70,66,0,85,70,67,0,85,70,68,0,85,70,69,0,85,70,70,0,85,70,71,0,85,70,72,0,85,70,73,0,85,70,74,0,85,70,75,0,85,70,76,0,85,70,77,0,85,70,78,0,85,70,79,0,85,70,80,0,85,70,81,0,85,70,82,0,85,70,83,0,85,70,84,0,85,70,85,0,85,70,86,0,85,70,87,0,85,70, -88,0,85,70,89,0,85,70,90,0,85,71,65,0,85,71,66,0,85,71,67,0,85,71,68,0,85,71,69,0,85,71,70,0,85,71,71,0,85,71,72,0,85,71,73,0,85,71,74,0,85,71,75,0,85,71,76,0,85,71,77,0,85,71,78,0,85,71,79,0,85,71,80,0,85,71,81,0,85,71,82,0,85,71,83,0,85,71,84,0,85,71,85,0,85,71,86,0,85,71,87,0,85,71,88,0,85,71,89,0,85,71,90,0,85,72,65,0,85,72,66,0,85,72,67,0,85,72,68,0,85,72,69,0,85,72,70,0,85,72,71,0,85,72,72,0,85,72,73,0,85,72,74,0,85,72,75,0,85,72,76,0,85,72,77,0,85,72,78,0,85,72,79,0,85,72,80,0,85,72,81,0,85, -72,82,0,85,72,83,0,85,72,84,0,85,72,85,0,85,72,86,0,85,72,87,0,85,72,88,0,85,72,89,0,85,72,90,0,85,73,65,0,85,73,66,0,85,73,67,0,85,73,68,0,85,73,69,0,85,73,70,0,85,73,71,0,85,73,72,0,85,73,73,0,85,73,74,0,85,73,75,0,85,73,76,0,85,73,77,0,85,73,78,0,85,73,79,0,85,73,80,0,85,73,81,0,85,73,82,0,85,73,83,0,85,73,84,0,85,73,85,0,85,73,86,0,85,73,87,0,85,73,88,0,85,73,89,0,85,73,90,0,85,74,65,0,85,74,66,0,85,74,67,0,85,74,68,0,85,74,69,0,85,74,70,0,85,74,71,0,85,74,72,0,85,74,73,0,85,74,74,0,85,74,75, -0,85,74,76,0,85,74,77,0,85,74,78,0,85,74,79,0,85,74,80,0,85,74,81,0,85,74,82,0,85,74,83,0,85,74,84,0,85,74,85,0,85,74,86,0,85,74,87,0,85,74,88,0,85,74,89,0,85,74,90,0,85,75,65,0,85,75,66,0,85,75,67,0,85,75,68,0,85,75,69,0,85,75,70,0,85,75,71,0,85,75,72,0,85,75,73,0,85,75,74,0,85,75,75,0,85,75,76,0,85,75,77,0,85,75,78,0,85,75,79,0,85,75,80,0,85,75,81,0,85,75,82,0,85,75,83,0,85,75,84,0,85,75,85,0,85,75,86,0,85,75,87,0,85,75,88,0,85,75,89,0,85,75,90,0,85,76,65,0,85,76,66,0,85,76,67,0,85,76,68,0,85,76, -69,0,85,76,70,0,85,76,71,0,85,76,72,0,85,76,73,0,85,76,74,0,85,76,75,0,85,76,76,0,85,76,77,0,85,76,78,0,85,76,79,0,85,76,80,0,85,76,81,0,85,76,82,0,85,76,83,0,85,76,84,0,85,76,85,0,85,76,86,0,85,76,87,0,85,76,88,0,85,76,89,0,85,76,90,0,85,77,65,0,85,77,66,0,85,77,67,0,85,77,68,0,85,77,69,0,85,77,70,0,85,77,71,0,85,77,72,0,85,77,73,0,85,77,74,0,85,77,75,0,85,77,76,0,85,77,77,0,85,77,78,0,85,77,79,0,85,77,80,0,85,77,81,0,85,77,82,0,85,77,83,0,85,77,84,0,85,77,85,0,85,77,86,0,85,77,87,0,85,77,88,0,85, -77,89,0,85,77,90,0,85,78,65,0,85,78,66,0,85,78,67,0,85,78,68,0,85,78,69,0,85,78,70,0,85,78,71,0,85,78,72,0,85,78,73,0,85,78,74,0,85,78,75,0,85,78,76,0,85,78,77,0,85,78,78,0,85,78,79,0,85,78,80,0,85,78,81,0,85,78,82,0,85,78,83,0,85,78,84,0,85,78,85,0,85,78,86,0,85,78,87,0,85,78,88,0,85,78,89,0,85,78,90,0,85,79,65,0,85,79,66,0,85,79,67,0,85,79,68,0,85,79,69,0,85,79,70,0,85,79,71,0,85,79,72,0,85,79,73,0,85,79,74,0,85,79,75,0,85,79,76,0,85,79,77,0,85,79,78,0,85,79,79,0,85,79,80,0,85,79,81,0,85,79,82, -0,85,79,83,0,85,79,84,0,85,79,85,0,85,79,86,0,85,79,87,0,85,79,88,0,85,79,89,0,85,79,90,0,85,80,65,0,85,80,66,0,85,80,67,0,85,80,68,0,85,80,69,0,85,80,70,0,85,80,71,0,85,80,72,0,85,80,73,0,85,80,74,0,85,80,75,0,85,80,76,0,85,80,77,0,85,80,78,0,85,80,79,0,85,80,80,0,85,80,81,0,85,80,82,0,85,80,83,0,85,80,84,0,85,80,85,0,85,80,86,0,85,80,87,0,85,80,88,0,85,80,89,0,85,80,90,0,85,81,65,0,85,81,66,0,85,81,67,0,85,81,68,0,85,81,69,0,85,81,70,0,85,81,71,0,85,81,72,0,85,81,73,0,85,81,74,0,85,81,75,0,85,81, -76,0,85,81,77,0,85,81,78,0,85,81,79,0,85,81,80,0,85,81,81,0,85,81,82,0,85,81,83,0,85,81,84,0,85,81,85,0,85,81,86,0,85,81,87,0,85,81,88,0,85,81,89,0,85,81,90,0,85,82,65,0,85,82,66,0,85,82,67,0,85,82,68,0,85,82,69,0,85,82,70,0,85,82,71,0,85,82,72,0,85,82,73,0,85,82,74,0,85,82,75,0,85,82,76,0,85,82,77,0,85,82,78,0,85,82,79,0,85,82,80,0,85,82,81,0,85,82,82,0,85,82,83,0,85,82,84,0,85,82,85,0,85,82,86,0,85,82,87,0,85,82,88,0,85,82,89,0,85,82,90,0,85,83,65,0,85,83,66,0,85,83,67,0,85,83,68,0,85,83,69,0,85, -83,70,0,85,83,71,0,85,83,72,0,85,83,73,0,85,83,74,0,85,83,75,0,85,83,76,0,85,83,77,0,85,83,78,0,85,83,79,0,85,83,80,0,85,83,81,0,85,83,82,0,85,83,83,0,85,83,84,0,85,83,85,0,85,83,86,0,85,83,87,0,85,83,88,0,85,83,89,0,85,83,90,0,85,84,65,0,85,84,66,0,85,84,67,0,85,84,68,0,85,84,69,0,85,84,70,0,85,84,71,0,85,84,72,0,85,84,73,0,85,84,74,0,85,84,75,0,85,84,76,0,85,84,77,0,85,84,78,0,85,84,79,0,85,84,80,0,85,84,81,0,85,84,82,0,85,84,83,0,85,84,84,0,85,84,85,0,85,84,86,0,85,84,87,0,85,84,88,0,85,84,89, -0,85,84,90,0,85,85,65,0,85,85,66,0,85,85,67,0,85,85,68,0,85,85,69,0,85,85,70,0,85,85,71,0,85,85,72,0,85,85,73,0,85,85,74,0,85,85,75,0,85,85,76,0,85,85,77,0,85,85,78,0,85,85,79,0,85,85,80,0,85,85,81,0,85,85,82,0,85,85,83,0,85,85,84,0,85,85,85,0,85,85,86,0,85,85,87,0,85,85,88,0,85,85,89,0,85,85,90,0,85,86,65,0,85,86,66,0,85,86,67,0,85,86,68,0,85,86,69,0,85,86,70,0,85,86,71,0,85,86,72,0,85,86,73,0,85,86,74,0,85,86,75,0,85,86,76,0,85,86,77,0,85,86,78,0,85,86,79,0,85,86,80,0,85,86,81,0,85,86,82,0,85,86, -83,0,85,86,84,0,85,86,85,0,85,86,86,0,85,86,87,0,85,86,88,0,85,86,89,0,85,86,90,0,85,87,65,0,85,87,66,0,85,87,67,0,85,87,68,0,85,87,69,0,85,87,70,0,85,87,71,0,85,87,72,0,85,87,73,0,85,87,74,0,85,87,75,0,85,87,76,0,85,87,77,0,85,87,78,0,85,87,79,0,85,87,80,0,85,87,81,0,85,87,82,0,85,87,83,0,85,87,84,0,85,87,85,0,85,87,86,0,85,87,87,0,85,87,88,0,85,87,89,0,85,87,90,0,85,88,65,0,85,88,66,0,85,88,67,0,85,88,68,0,85,88,69,0,85,88,70,0,85,88,71,0,85,88,72,0,85,88,73,0,85,88,74,0,85,88,75,0,85,88,76,0,85, -88,77,0,85,88,78,0,85,88,79,0,85,88,80,0,85,88,81,0,85,88,82,0,85,88,83,0,85,88,84,0,85,88,85,0,85,88,86,0,85,88,87,0,85,88,88,0,85,88,89,0,85,88,90,0,85,89,65,0,85,89,66,0,85,89,67,0,85,89,68,0,85,89,69,0,85,89,70,0,85,89,71,0,85,89,72,0,85,89,73,0,85,89,74,0,85,89,75,0,85,89,76,0,85,89,77,0,85,89,78,0,85,89,79,0,85,89,80,0,85,89,81,0,85,89,82,0,85,89,83,0,85,89,84,0,85,89,85,0,85,89,86,0,85,89,87,0,85,89,88,0,85,89,89,0,85,89,90,0,85,90,65,0,85,90,66,0,85,90,67,0,85,90,68,0,85,90,69,0,85,90,70, -0,85,90,71,0,85,90,72,0,85,90,73,0,85,90,74,0,85,90,75,0,85,90,76,0,85,90,77,0,85,90,78,0,85,90,79,0,85,90,80,0,85,90,81,0,85,90,82,0,85,90,83,0,85,90,84,0,85,90,85,0,85,90,86,0,85,90,87,0,85,90,88,0,85,90,89,0,85,90,90,0,86,65,65,0,86,65,66,0,86,65,67,0,86,65,68,0,86,65,69,0,86,65,70,0,86,65,71,0,86,65,72,0,86,65,73,0,86,65,74,0,86,65,75,0,86,65,76,0,86,65,77,0,86,65,78,0,86,65,79,0,86,65,80,0,86,65,81,0,86,65,82,0,86,65,83,0,86,65,84,0,86,65,85,0,86,65,86,0,86,65,87,0,86,65,88,0,86,65,89,0,86,65, -90,0,86,66,65,0,86,66,66,0,86,66,67,0,86,66,68,0,86,66,69,0,86,66,70,0,86,66,71,0,86,66,72,0,86,66,73,0,86,66,74,0,86,66,75,0,86,66,76,0,86,66,77,0,86,66,78,0,86,66,79,0,86,66,80,0,86,66,81,0,86,66,82,0,86,66,83,0,86,66,84,0,86,66,85,0,86,66,86,0,86,66,87,0,86,66,88,0,86,66,89,0,86,66,90,0,86,67,65,0,86,67,66,0,86,67,67,0,86,67,68,0,86,67,69,0,86,67,70,0,86,67,71,0,86,67,72,0,86,67,73,0,86,67,74,0,86,67,75,0,86,67,76,0,86,67,77,0,86,67,78,0,86,67,79,0,86,67,80,0,86,67,81,0,86,67,82,0,86,67,83,0,86, -67,84,0,86,67,85,0,86,67,86,0,86,67,87,0,86,67,88,0,86,67,89,0,86,67,90,0,86,68,65,0,86,68,66,0,86,68,67,0,86,68,68,0,86,68,69,0,86,68,70,0,86,68,71,0,86,68,72,0,86,68,73,0,86,68,74,0,86,68,75,0,86,68,76,0,86,68,77,0,86,68,78,0,86,68,79,0,86,68,80,0,86,68,81,0,86,68,82,0,86,68,83,0,86,68,84,0,86,68,85,0,86,68,86,0,86,68,87,0,86,68,88,0,86,68,89,0,86,68,90,0,86,69,65,0,86,69,66,0,86,69,67,0,86,69,68,0,86,69,69,0,86,69,70,0,86,69,71,0,86,69,72,0,86,69,73,0,86,69,74,0,86,69,75,0,86,69,76,0,86,69,77, -0,86,69,78,0,86,69,79,0,86,69,80,0,86,69,81,0,86,69,82,0,86,69,83,0,86,69,84,0,86,69,85,0,86,69,86,0,86,69,87,0,86,69,88,0,86,69,89,0,86,69,90,0,86,70,65,0,86,70,66,0,86,70,67,0,86,70,68,0,86,70,69,0,86,70,70,0,86,70,71,0,86,70,72,0,86,70,73,0,86,70,74,0,86,70,75,0,86,70,76,0,86,70,77,0,86,70,78,0,86,70,79,0,86,70,80,0,86,70,81,0,86,70,82,0,86,70,83,0,86,70,84,0,86,70,85,0,86,70,86,0,86,70,87,0,86,70,88,0,86,70,89,0,86,70,90,0,86,71,65,0,86,71,66,0,86,71,67,0,86,71,68,0,86,71,69,0,86,71,70,0,86,71, -71,0,86,71,72,0,86,71,73,0,86,71,74,0,86,71,75,0,86,71,76,0,86,71,77,0,86,71,78,0,86,71,79,0,86,71,80,0,86,71,81,0,86,71,82,0,86,71,83,0,86,71,84,0,86,71,85,0,86,71,86,0,86,71,87,0,86,71,88,0,86,71,89,0,86,71,90,0,86,72,65,0,86,72,66,0,86,72,67,0,86,72,68,0,86,72,69,0,86,72,70,0,86,72,71,0,86,72,72,0,86,72,73,0,86,72,74,0,86,72,75,0,86,72,76,0,86,72,77,0,86,72,78,0,86,72,79,0,86,72,80,0,86,72,81,0,86,72,82,0,86,72,83,0,86,72,84,0,86,72,85,0,86,72,86,0,86,72,87,0,86,72,88,0,86,72,89,0,86,72,90,0,86, -73,65,0,86,73,66,0,86,73,67,0,86,73,68,0,86,73,69,0,86,73,70,0,86,73,71,0,86,73,72,0,86,73,73,0,86,73,74,0,86,73,75,0,86,73,76,0,86,73,77,0,86,73,78,0,86,73,79,0,86,73,80,0,86,73,81,0,86,73,82,0,86,73,83,0,86,73,84,0,86,73,85,0,86,73,86,0,86,73,87,0,86,73,88,0,86,73,89,0,86,73,90,0,86,74,65,0,86,74,66,0,86,74,67,0,86,74,68,0,86,74,69,0,86,74,70,0,86,74,71,0,86,74,72,0,86,74,73,0,86,74,74,0,86,74,75,0,86,74,76,0,86,74,77,0,86,74,78,0,86,74,79,0,86,74,80,0,86,74,81,0,86,74,82,0,86,74,83,0,86,74,84, -0,86,74,85,0,86,74,86,0,86,74,87,0,86,74,88,0,86,74,89,0,86,74,90,0,86,75,65,0,86,75,66,0,86,75,67,0,86,75,68,0,86,75,69,0,86,75,70,0,86,75,71,0,86,75,72,0,86,75,73,0,86,75,74,0,86,75,75,0,86,75,76,0,86,75,77,0,86,75,78,0,86,75,79,0,86,75,80,0,86,75,81,0,86,75,82,0,86,75,83,0,86,75,84,0,86,75,85,0,86,75,86,0,86,75,87,0,86,75,88,0,86,75,89,0,86,75,90,0,86,76,65,0,86,76,66,0,86,76,67,0,86,76,68,0,86,76,69,0,86,76,70,0,86,76,71,0,86,76,72,0,86,76,73,0,86,76,74,0,86,76,75,0,86,76,76,0,86,76,77,0,86,76, -78,0,86,76,79,0,86,76,80,0,86,76,81,0,86,76,82,0,86,76,83,0,86,76,84,0,86,76,85,0,86,76,86,0,86,76,87,0,86,76,88,0,86,76,89,0,86,76,90,0,86,77,65,0,86,77,66,0,86,77,67,0,86,77,68,0,86,77,69,0,86,77,70,0,86,77,71,0,86,77,72,0,86,77,73,0,86,77,74,0,86,77,75,0,86,77,76,0,86,77,77,0,86,77,78,0,86,77,79,0,86,77,80,0,86,77,81,0,86,77,82,0,86,77,83,0,86,77,84,0,86,77,85,0,86,77,86,0,86,77,87,0,86,77,88,0,86,77,89,0,86,77,90,0,86,78,65,0,86,78,66,0,86,78,67,0,86,78,68,0,86,78,69,0,86,78,70,0,86,78,71,0,86, -78,72,0,86,78,73,0,86,78,74,0,86,78,75,0,86,78,76,0,86,78,77,0,86,78,78,0,86,78,79,0,86,78,80,0,86,78,81,0,86,78,82,0,86,78,83,0,86,78,84,0,86,78,85,0,86,78,86,0,86,78,87,0,86,78,88,0,86,78,89,0,86,78,90,0,86,79,65,0,86,79,66,0,86,79,67,0,86,79,68,0,86,79,69,0,86,79,70,0,86,79,71,0,86,79,72,0,86,79,73,0,86,79,74,0,86,79,75,0,86,79,76,0,86,79,77,0,86,79,78,0,86,79,79,0,86,79,80,0,86,79,81,0,86,79,82,0,86,79,83,0,86,79,84,0,86,79,85,0,86,79,86,0,86,79,87,0,86,79,88,0,86,79,89,0,86,79,90,0,86,80,65, -0,86,80,66,0,86,80,67,0,86,80,68,0,86,80,69,0,86,80,70,0,86,80,71,0,86,80,72,0,86,80,73,0,86,80,74,0,86,80,75,0,86,80,76,0,86,80,77,0,86,80,78,0,86,80,79,0,86,80,80,0,86,80,81,0,86,80,82,0,86,80,83,0,86,80,84,0,86,80,85,0,86,80,86,0,86,80,87,0,86,80,88,0,86,80,89,0,86,80,90,0,86,81,65,0,86,81,66,0,86,81,67,0,86,81,68,0,86,81,69,0,86,81,70,0,86,81,71,0,86,81,72,0,86,81,73,0,86,81,74,0,86,81,75,0,86,81,76,0,86,81,77,0,86,81,78,0,86,81,79,0,86,81,80,0,86,81,81,0,86,81,82,0,86,81,83,0,86,81,84,0,86,81, -85,0,86,81,86,0,86,81,87,0,86,81,88,0,86,81,89,0,86,81,90,0,86,82,65,0,86,82,66,0,86,82,67,0,86,82,68,0,86,82,69,0,86,82,70,0,86,82,71,0,86,82,72,0,86,82,73,0,86,82,74,0,86,82,75,0,86,82,76,0,86,82,77,0,86,82,78,0,86,82,79,0,86,82,80,0,86,82,81,0,86,82,82,0,86,82,83,0,86,82,84,0,86,82,85,0,86,82,86,0,86,82,87,0,86,82,88,0,86,82,89,0,86,82,90,0,86,83,65,0,86,83,66,0,86,83,67,0,86,83,68,0,86,83,69,0,86,83,70,0,86,83,71,0,86,83,72,0,86,83,73,0,86,83,74,0,86,83,75,0,86,83,76,0,86,83,77,0,86,83,78,0,86, -83,79,0,86,83,80,0,86,83,81,0,86,83,82,0,86,83,83,0,86,83,84,0,86,83,85,0,86,83,86,0,86,83,87,0,86,83,88,0,86,83,89,0,86,83,90,0,86,84,65,0,86,84,66,0,86,84,67,0,86,84,68,0,86,84,69,0,86,84,70,0,86,84,71,0,86,84,72,0,86,84,73,0,86,84,74,0,86,84,75,0,86,84,76,0,86,84,77,0,86,84,78,0,86,84,79,0,86,84,80,0,86,84,81,0,86,84,82,0,86,84,83,0,86,84,84,0,86,84,85,0,86,84,86,0,86,84,87,0,86,84,88,0,86,84,89,0,86,84,90,0,86,85,65,0,86,85,66,0,86,85,67,0,86,85,68,0,86,85,69,0,86,85,70,0,86,85,71,0,86,85,72, -0,86,85,73,0,86,85,74,0,86,85,75,0,86,85,76,0,86,85,77,0,86,85,78,0,86,85,79,0,86,85,80,0,86,85,81,0,86,85,82,0,86,85,83,0,86,85,84,0,86,85,85,0,86,85,86,0,86,85,87,0,86,85,88,0,86,85,89,0,86,85,90,0,86,86,65,0,86,86,66,0,86,86,67,0,86,86,68,0,86,86,69,0,86,86,70,0,86,86,71,0,86,86,72,0,86,86,73,0,86,86,74,0,86,86,75,0,86,86,76,0,86,86,77,0,86,86,78,0,86,86,79,0,86,86,80,0,86,86,81,0,86,86,82,0,86,86,83,0,86,86,84,0,86,86,85,0,86,86,86,0,86,86,87,0,86,86,88,0,86,86,89,0,86,86,90,0,86,87,65,0,86,87, -66,0,86,87,67,0,86,87,68,0,86,87,69,0,86,87,70,0,86,87,71,0,86,87,72,0,86,87,73,0,86,87,74,0,86,87,75,0,86,87,76,0,86,87,77,0,86,87,78,0,86,87,79,0,86,87,80,0,86,87,81,0,86,87,82,0,86,87,83,0,86,87,84,0,86,87,85,0,86,87,86,0,86,87,87,0,86,87,88,0,86,87,89,0,86,87,90,0,86,88,65,0,86,88,66,0,86,88,67,0,86,88,68,0,86,88,69,0,86,88,70,0,86,88,71,0,86,88,72,0,86,88,73,0,86,88,74,0,86,88,75,0,86,88,76,0,86,88,77,0,86,88,78,0,86,88,79,0,86,88,80,0,86,88,81,0,86,88,82,0,86,88,83,0,86,88,84,0,86,88,85,0,86, -88,86,0,86,88,87,0,86,88,88,0,86,88,89,0,86,88,90,0,86,89,65,0,86,89,66,0,86,89,67,0,86,89,68,0,86,89,69,0,86,89,70,0,86,89,71,0,86,89,72,0,86,89,73,0,86,89,74,0,86,89,75,0,86,89,76,0,86,89,77,0,86,89,78,0,86,89,79,0,86,89,80,0,86,89,81,0,86,89,82,0,86,89,83,0,86,89,84,0,86,89,85,0,86,89,86,0,86,89,87,0,86,89,88,0,86,89,89,0,86,89,90,0,86,90,65,0,86,90,66,0,86,90,67,0,86,90,68,0,86,90,69,0,86,90,70,0,86,90,71,0,86,90,72,0,86,90,73,0,86,90,74,0,86,90,75,0,86,90,76,0,86,90,77,0,86,90,78,0,86,90,79, -0,86,90,80,0,86,90,81,0,86,90,82,0,86,90,83,0,86,90,84,0,86,90,85,0,86,90,86,0,86,90,87,0,86,90,88,0,86,90,89,0,86,90,90,0,87,65,65,0,87,65,66,0,87,65,67,0,87,65,68,0,87,65,69,0,87,65,70,0,87,65,71,0,87,65,72,0,87,65,73,0,87,65,74,0,87,65,75,0,87,65,76,0,87,65,77,0,87,65,78,0,87,65,79,0,87,65,80,0,87,65,81,0,87,65,82,0,87,65,83,0,87,65,84,0,87,65,85,0,87,65,86,0,87,65,87,0,87,65,88,0,87,65,89,0,87,65,90,0,87,66,65,0,87,66,66,0,87,66,67,0,87,66,68,0,87,66,69,0,87,66,70,0,87,66,71,0,87,66,72,0,87,66, -73,0,87,66,74,0,87,66,75,0,87,66,76,0,87,66,77,0,87,66,78,0,87,66,79,0,87,66,80,0,87,66,81,0,87,66,82,0,87,66,83,0,87,66,84,0,87,66,85,0,87,66,86,0,87,66,87,0,87,66,88,0,87,66,89,0,87,66,90,0,87,67,65,0,87,67,66,0,87,67,67,0,87,67,68,0,87,67,69,0,87,67,70,0,87,67,71,0,87,67,72,0,87,67,73,0,87,67,74,0,87,67,75,0,87,67,76,0,87,67,77,0,87,67,78,0,87,67,79,0,87,67,80,0,87,67,81,0,87,67,82,0,87,67,83,0,87,67,84,0,87,67,85,0,87,67,86,0,87,67,87,0,87,67,88,0,87,67,89,0,87,67,90,0,87,68,65,0,87,68,66,0,87, -68,67,0,87,68,68,0,87,68,69,0,87,68,70,0,87,68,71,0,87,68,72,0,87,68,73,0,87,68,74,0,87,68,75,0,87,68,76,0,87,68,77,0,87,68,78,0,87,68,79,0,87,68,80,0,87,68,81,0,87,68,82,0,87,68,83,0,87,68,84,0,87,68,85,0,87,68,86,0,87,68,87,0,87,68,88,0,87,68,89,0,87,68,90,0,87,69,65,0,87,69,66,0,87,69,67,0,87,69,68,0,87,69,69,0,87,69,70,0,87,69,71,0,87,69,72,0,87,69,73,0,87,69,74,0,87,69,75,0,87,69,76,0,87,69,77,0,87,69,78,0,87,69,79,0,87,69,80,0,87,69,81,0,87,69,82,0,87,69,83,0,87,69,84,0,87,69,85,0,87,69,86, -0,87,69,87,0,87,69,88,0,87,69,89,0,87,69,90,0,87,70,65,0,87,70,66,0,87,70,67,0,87,70,68,0,87,70,69,0,87,70,70,0,87,70,71,0,87,70,72,0,87,70,73,0,87,70,74,0,87,70,75,0,87,70,76,0,87,70,77,0,87,70,78,0,87,70,79,0,87,70,80,0,87,70,81,0,87,70,82,0,87,70,83,0,87,70,84,0,87,70,85,0,87,70,86,0,87,70,87,0,87,70,88,0,87,70,89,0,87,70,90,0,87,71,65,0,87,71,66,0,87,71,67,0,87,71,68,0,87,71,69,0,87,71,70,0,87,71,71,0,87,71,72,0,87,71,73,0,87,71,74,0,87,71,75,0,87,71,76,0,87,71,77,0,87,71,78,0,87,71,79,0,87,71, -80,0,87,71,81,0,87,71,82,0,87,71,83,0,87,71,84,0,87,71,85,0,87,71,86,0,87,71,87,0,87,71,88,0,87,71,89,0,87,71,90,0,87,72,65,0,87,72,66,0,87,72,67,0,87,72,68,0,87,72,69,0,87,72,70,0,87,72,71,0,87,72,72,0,87,72,73,0,87,72,74,0,87,72,75,0,87,72,76,0,87,72,77,0,87,72,78,0,87,72,79,0,87,72,80,0,87,72,81,0,87,72,82,0,87,72,83,0,87,72,84,0,87,72,85,0,87,72,86,0,87,72,87,0,87,72,88,0,87,72,89,0,87,72,90,0,87,73,65,0,87,73,66,0,87,73,67,0,87,73,68,0,87,73,69,0,87,73,70,0,87,73,71,0,87,73,72,0,87,73,73,0,87, -73,74,0,87,73,75,0,87,73,76,0,87,73,77,0,87,73,78,0,87,73,79,0,87,73,80,0,87,73,81,0,87,73,82,0,87,73,83,0,87,73,84,0,87,73,85,0,87,73,86,0,87,73,87,0,87,73,88,0,87,73,89,0,87,73,90,0,87,74,65,0,87,74,66,0,87,74,67,0,87,74,68,0,87,74,69,0,87,74,70,0,87,74,71,0,87,74,72,0,87,74,73,0,87,74,74,0,87,74,75,0,87,74,76,0,87,74,77,0,87,74,78,0,87,74,79,0,87,74,80,0,87,74,81,0,87,74,82,0,87,74,83,0,87,74,84,0,87,74,85,0,87,74,86,0,87,74,87,0,87,74,88,0,87,74,89,0,87,74,90,0,87,75,65,0,87,75,66,0,87,75,67, -0,87,75,68,0,87,75,69,0,87,75,70,0,87,75,71,0,87,75,72,0,87,75,73,0,87,75,74,0,87,75,75,0,87,75,76,0,87,75,77,0,87,75,78,0,87,75,79,0,87,75,80,0,87,75,81,0,87,75,82,0,87,75,83,0,87,75,84,0,87,75,85,0,87,75,86,0,87,75,87,0,87,75,88,0,87,75,89,0,87,75,90,0,87,76,65,0,87,76,66,0,87,76,67,0,87,76,68,0,87,76,69,0,87,76,70,0,87,76,71,0,87,76,72,0,87,76,73,0,87,76,74,0,87,76,75,0,87,76,76,0,87,76,77,0,87,76,78,0,87,76,79,0,87,76,80,0,87,76,81,0,87,76,82,0,87,76,83,0,87,76,84,0,87,76,85,0,87,76,86,0,87,76, -87,0,87,76,88,0,87,76,89,0,87,76,90,0,87,77,65,0,87,77,66,0,87,77,67,0,87,77,68,0,87,77,69,0,87,77,70,0,87,77,71,0,87,77,72,0,87,77,73,0,87,77,74,0,87,77,75,0,87,77,76,0,87,77,77,0,87,77,78,0,87,77,79,0,87,77,80,0,87,77,81,0,87,77,82,0,87,77,83,0,87,77,84,0,87,77,85,0,87,77,86,0,87,77,87,0,87,77,88,0,87,77,89,0,87,77,90,0,87,78,65,0,87,78,66,0,87,78,67,0,87,78,68,0,87,78,69,0,87,78,70,0,87,78,71,0,87,78,72,0,87,78,73,0,87,78,74,0,87,78,75,0,87,78,76,0,87,78,77,0,87,78,78,0,87,78,79,0,87,78,80,0,87, -78,81,0,87,78,82,0,87,78,83,0,87,78,84,0,87,78,85,0,87,78,86,0,87,78,87,0,87,78,88,0,87,78,89,0,87,78,90,0,87,79,65,0,87,79,66,0,87,79,67,0,87,79,68,0,87,79,69,0,87,79,70,0,87,79,71,0,87,79,72,0,87,79,73,0,87,79,74,0,87,79,75,0,87,79,76,0,87,79,77,0,87,79,78,0,87,79,79,0,87,79,80,0,87,79,81,0,87,79,82,0,87,79,83,0,87,79,84,0,87,79,85,0,87,79,86,0,87,79,87,0,87,79,88,0,87,79,89,0,87,79,90,0,87,80,65,0,87,80,66,0,87,80,67,0,87,80,68,0,87,80,69,0,87,80,70,0,87,80,71,0,87,80,72,0,87,80,73,0,87,80,74, -0,87,80,75,0,87,80,76,0,87,80,77,0,87,80,78,0,87,80,79,0,87,80,80,0,87,80,81,0,87,80,82,0,87,80,83,0,87,80,84,0,87,80,85,0,87,80,86,0,87,80,87,0,87,80,88,0,87,80,89,0,87,80,90,0,87,81,65,0,87,81,66,0,87,81,67,0,87,81,68,0,87,81,69,0,87,81,70,0,87,81,71,0,87,81,72,0,87,81,73,0,87,81,74,0,87,81,75,0,87,81,76,0,87,81,77,0,87,81,78,0,87,81,79,0,87,81,80,0,87,81,81,0,87,81,82,0,87,81,83,0,87,81,84,0,87,81,85,0,87,81,86,0,87,81,87,0,87,81,88,0,87,81,89,0,87,81,90,0,87,82,65,0,87,82,66,0,87,82,67,0,87,82, -68,0,87,82,69,0,87,82,70,0,87,82,71,0,87,82,72,0,87,82,73,0,87,82,74,0,87,82,75,0,87,82,76,0,87,82,77,0,87,82,78,0,87,82,79,0,87,82,80,0,87,82,81,0,87,82,82,0,87,82,83,0,87,82,84,0,87,82,85,0,87,82,86,0,87,82,87,0,87,82,88,0,87,82,89,0,87,82,90,0,87,83,65,0,87,83,66,0,87,83,67,0,87,83,68,0,87,83,69,0,87,83,70,0,87,83,71,0,87,83,72,0,87,83,73,0,87,83,74,0,87,83,75,0,87,83,76,0,87,83,77,0,87,83,78,0,87,83,79,0,87,83,80,0,87,83,81,0,87,83,82,0,87,83,83,0,87,83,84,0,87,83,85,0,87,83,86,0,87,83,87,0,87, -83,88,0,87,83,89,0,87,83,90,0,87,84,65,0,87,84,66,0,87,84,67,0,87,84,68,0,87,84,69,0,87,84,70,0,87,84,71,0,87,84,72,0,87,84,73,0,87,84,74,0,87,84,75,0,87,84,76,0,87,84,77,0,87,84,78,0,87,84,79,0,87,84,80,0,87,84,81,0,87,84,82,0,87,84,83,0,87,84,84,0,87,84,85,0,87,84,86,0,87,84,87,0,87,84,88,0,87,84,89,0,87,84,90,0,87,85,65,0,87,85,66,0,87,85,67,0,87,85,68,0,87,85,69,0,87,85,70,0,87,85,71,0,87,85,72,0,87,85,73,0,87,85,74,0,87,85,75,0,87,85,76,0,87,85,77,0,87,85,78,0,87,85,79,0,87,85,80,0,87,85,81, -0,87,85,82,0,87,85,83,0,87,85,84,0,87,85,85,0,87,85,86,0,87,85,87,0,87,85,88,0,87,85,89,0,87,85,90,0,87,86,65,0,87,86,66,0,87,86,67,0,87,86,68,0,87,86,69,0,87,86,70,0,87,86,71,0,87,86,72,0,87,86,73,0,87,86,74,0,87,86,75,0,87,86,76,0,87,86,77,0,87,86,78,0,87,86,79,0,87,86,80,0,87,86,81,0,87,86,82,0,87,86,83,0,87,86,84,0,87,86,85,0,87,86,86,0,87,86,87,0,87,86,88,0,87,86,89,0,87,86,90,0,87,87,65,0,87,87,66,0,87,87,67,0,87,87,68,0,87,87,69,0,87,87,70,0,87,87,71,0,87,87,72,0,87,87,73,0,87,87,74,0,87,87, -75,0,87,87,76,0,87,87,77,0,87,87,78,0,87,87,79,0,87,87,80,0,87,87,81,0,87,87,82,0,87,87,83,0,87,87,84,0,87,87,85,0,87,87,86,0,87,87,87,0,87,87,88,0,87,87,89,0,87,87,90,0,87,88,65,0,87,88,66,0,87,88,67,0,87,88,68,0,87,88,69,0,87,88,70,0,87,88,71,0,87,88,72,0,87,88,73,0,87,88,74,0,87,88,75,0,87,88,76,0,87,88,77,0,87,88,78,0,87,88,79,0,87,88,80,0,87,88,81,0,87,88,82,0,87,88,83,0,87,88,84,0,87,88,85,0,87,88,86,0,87,88,87,0,87,88,88,0,87,88,89,0,87,88,90,0,87,89,65,0,87,89,66,0,87,89,67,0,87,89,68,0,87, -89,69,0,87,89,70,0,87,89,71,0,87,89,72,0,87,89,73,0,87,89,74,0,87,89,75,0,87,89,76,0,87,89,77,0,87,89,78,0,87,89,79,0,87,89,80,0,87,89,81,0,87,89,82,0,87,89,83,0,87,89,84,0,87,89,85,0,87,89,86,0,87,89,87,0,87,89,88,0,87,89,89,0,87,89,90,0,87,90,65,0,87,90,66,0,87,90,67,0,87,90,68,0,87,90,69,0,87,90,70,0,87,90,71,0,87,90,72,0,87,90,73,0,87,90,74,0,87,90,75,0,87,90,76,0,87,90,77,0,87,90,78,0,87,90,79,0,87,90,80,0,87,90,81,0,87,90,82,0,87,90,83,0,87,90,84,0,87,90,85,0,87,90,86,0,87,90,87,0,87,90,88, -0,87,90,89,0,87,90,90,0,88,65,65,0,88,65,66,0,88,65,67,0,88,65,68,0,88,65,69,0,88,65,70,0,88,65,71,0,88,65,72,0,88,65,73,0,88,65,74,0,88,65,75,0,88,65,76,0,88,65,77,0,88,65,78,0,88,65,79,0,88,65,80,0,88,65,81,0,88,65,82,0,88,65,83,0,88,65,84,0,88,65,85,0,88,65,86,0,88,65,87,0,88,65,88,0,88,65,89,0,88,65,90,0,88,66,65,0,88,66,66,0,88,66,67,0,88,66,68,0,88,66,69,0,88,66,70,0,88,66,71,0,88,66,72,0,88,66,73,0,88,66,74,0,88,66,75,0,88,66,76,0,88,66,77,0,88,66,78,0,88,66,79,0,88,66,80,0,88,66,81,0,88,66, -82,0,88,66,83,0,88,66,84,0,88,66,85,0,88,66,86,0,88,66,87,0,88,66,88,0,88,66,89,0,88,66,90,0,88,67,65,0,88,67,66,0,88,67,67,0,88,67,68,0,88,67,69,0,88,67,70,0,88,67,71,0,88,67,72,0,88,67,73,0,88,67,74,0,88,67,75,0,88,67,76,0,88,67,77,0,88,67,78,0,88,67,79,0,88,67,80,0,88,67,81,0,88,67,82,0,88,67,83,0,88,67,84,0,88,67,85,0,88,67,86,0,88,67,87,0,88,67,88,0,88,67,89,0,88,67,90,0,88,68,65,0,88,68,66,0,88,68,67,0,88,68,68,0,88,68,69,0,88,68,70,0,88,68,71,0,88,68,72,0,88,68,73,0,88,68,74,0,88,68,75,0,88, -68,76,0,88,68,77,0,88,68,78,0,88,68,79,0,88,68,80,0,88,68,81,0,88,68,82,0,88,68,83,0,88,68,84,0,88,68,85,0,88,68,86,0,88,68,87,0,88,68,88,0,88,68,89,0,88,68,90,0,88,69,65,0,88,69,66,0,88,69,67,0,88,69,68,0,88,69,69,0,88,69,70,0,88,69,71,0,88,69,72,0,88,69,73,0,88,69,74,0,88,69,75,0,88,69,76,0,88,69,77,0,88,69,78,0,88,69,79,0,88,69,80,0,88,69,81,0,88,69,82,0,88,69,83,0,88,69,84,0,88,69,85,0,88,69,86,0,88,69,87,0,88,69,88,0,88,69,89,0,88,69,90,0,88,70,65,0,88,70,66,0,88,70,67,0,88,70,68,0,88,70,69, -0,88,70,70,0,88,70,71,0,88,70,72,0,88,70,73,0,88,70,74,0,88,70,75,0,88,70,76,0,88,70,77,0,88,70,78,0,88,70,79,0,88,70,80,0,88,70,81,0,88,70,82,0,88,70,83,0,88,70,84,0,88,70,85,0,88,70,86,0,88,70,87,0,88,70,88,0,88,70,89,0,88,70,90,0,88,71,65,0,88,71,66,0,88,71,67,0,88,71,68,0,88,71,69,0,88,71,70,0,88,71,71,0,88,71,72,0,88,71,73,0,88,71,74,0,88,71,75,0,88,71,76,0,88,71,77,0,88,71,78,0,88,71,79,0,88,71,80,0,88,71,81,0,88,71,82,0,88,71,83,0,88,71,84,0,88,71,85,0,88,71,86,0,88,71,87,0,88,71,88,0,88,71, -89,0,88,71,90,0,88,72,65,0,88,72,66,0,88,72,67,0,88,72,68,0,88,72,69,0,88,72,70,0,88,72,71,0,88,72,72,0,88,72,73,0,88,72,74,0,88,72,75,0,88,72,76,0,88,72,77,0,88,72,78,0,88,72,79,0,88,72,80,0,88,72,81,0,88,72,82,0,88,72,83,0,88,72,84,0,88,72,85,0,88,72,86,0,88,72,87,0,88,72,88,0,88,72,89,0,88,72,90,0,88,73,65,0,88,73,66,0,88,73,67,0,88,73,68,0,88,73,69,0,88,73,70,0,88,73,71,0,88,73,72,0,88,73,73,0,88,73,74,0,88,73,75,0,88,73,76,0,88,73,77,0,88,73,78,0,88,73,79,0,88,73,80,0,88,73,81,0,88,73,82,0,88, -73,83,0,88,73,84,0,88,73,85,0,88,73,86,0,88,73,87,0,88,73,88,0,88,73,89,0,88,73,90,0,88,74,65,0,88,74,66,0,88,74,67,0,88,74,68,0,88,74,69,0,88,74,70,0,88,74,71,0,88,74,72,0,88,74,73,0,88,74,74,0,88,74,75,0,88,74,76,0,88,74,77,0,88,74,78,0,88,74,79,0,88,74,80,0,88,74,81,0,88,74,82,0,88,74,83,0,88,74,84,0,88,74,85,0,88,74,86,0,88,74,87,0,88,74,88,0,88,74,89,0,88,74,90,0,88,75,65,0,88,75,66,0,88,75,67,0,88,75,68,0,88,75,69,0,88,75,70,0,88,75,71,0,88,75,72,0,88,75,73,0,88,75,74,0,88,75,75,0,88,75,76, -0,88,75,77,0,88,75,78,0,88,75,79],"i8",4,x.a+61480); -H([0,88,75,80,0,88,75,81,0,88,75,82,0,88,75,83,0,88,75,84,0,88,75,85,0,88,75,86,0,88,75,87,0,88,75,88,0,88,75,89,0,88,75,90,0,88,76,65,0,88,76,66,0,88,76,67,0,88,76,68,0,88,76,69,0,88,76,70,0,88,76,71,0,88,76,72,0,88,76,73,0,88,76,74,0,88,76,75,0,88,76,76,0,88,76,77,0,88,76,78,0,88,76,79,0,88,76,80,0,88,76,81,0,88,76,82,0,88,76,83,0,88,76,84,0,88,76,85,0,88,76,86,0,88,76,87,0,88,76,88,0,88,76,89,0,88,76,90,0,88,77,65,0,88,77,66,0,88,77,67,0,88,77,68,0,88,77,69,0,88,77,70,0,88,77,71,0,88,77,72,0,88, -77,73,0,88,77,74,0,88,77,75,0,88,77,76,0,88,77,77,0,88,77,78,0,88,77,79,0,88,77,80,0,88,77,81,0,88,77,82,0,88,77,83,0,88,77,84,0,88,77,85,0,88,77,86,0,88,77,87,0,88,77,88,0,88,77,89,0,88,77,90,0,88,78,65,0,88,78,66,0,88,78,67,0,88,78,68,0,88,78,69,0,88,78,70,0,88,78,71,0,88,78,72,0,88,78,73,0,88,78,74,0,88,78,75,0,88,78,76,0,88,78,77,0,88,78,78,0,88,78,79,0,88,78,80,0,88,78,81,0,88,78,82,0,88,78,83,0,88,78,84,0,88,78,85,0,88,78,86,0,88,78,87,0,88,78,88,0,88,78,89,0,88,78,90,0,88,79,65,0,88,79,66, -0,88,79,67,0,88,79,68,0,88,79,69,0,88,79,70,0,88,79,71,0,88,79,72,0,88,79,73,0,88,79,74,0,88,79,75,0,88,79,76,0,88,79,77,0,88,79,78,0,88,79,79,0,88,79,80,0,88,79,81,0,88,79,82,0,88,79,83,0,88,79,84,0,88,79,85,0,88,79,86,0,88,79,87,0,88,79,88,0,88,79,89,0,88,79,90,0,88,80,65,0,88,80,66,0,88,80,67,0,88,80,68,0,88,80,69,0,88,80,70,0,88,80,71,0,88,80,72,0,88,80,73,0,88,80,74,0,88,80,75,0,88,80,76,0,88,80,77,0,88,80,78,0,88,80,79,0,88,80,80,0,88,80,81,0,88,80,82,0,88,80,83,0,88,80,84,0,88,80,85,0,88,80, -86,0,88,80,87,0,88,80,88,0,88,80,89,0,88,80,90,0,88,81,65,0,88,81,66,0,88,81,67,0,88,81,68,0,88,81,69,0,88,81,70,0,88,81,71,0,88,81,72,0,88,81,73,0,88,81,74,0,88,81,75,0,88,81,76,0,88,81,77,0,88,81,78,0,88,81,79,0,88,81,80,0,88,81,81,0,88,81,82,0,88,81,83,0,88,81,84,0,88,81,85,0,88,81,86,0,88,81,87,0,88,81,88,0,88,81,89,0,88,81,90,0,88,82,65,0,88,82,66,0,88,82,67,0,88,82,68,0,88,82,69,0,88,82,70,0,88,82,71,0,88,82,72,0,88,82,73,0,88,82,74,0,88,82,75,0,88,82,76,0,88,82,77,0,88,82,78,0,88,82,79,0,88, -82,80,0,88,82,81,0,88,82,82,0,88,82,83,0,88,82,84,0,88,82,85,0,88,82,86,0,88,82,87,0,88,82,88,0,88,82,89,0,88,82,90,0,88,83,65,0,88,83,66,0,88,83,67,0,88,83,68,0,88,83,69,0,88,83,70,0,88,83,71,0,88,83,72,0,88,83,73,0,88,83,74,0,88,83,75,0,88,83,76,0,88,83,77,0,88,83,78,0,88,83,79,0,88,83,80,0,88,83,81,0,88,83,82,0,88,83,83,0,88,83,84,0,88,83,85,0,88,83,86,0,88,83,87,0,88,83,88,0,88,83,89,0,88,83,90,0,88,84,65,0,88,84,66,0,88,84,67,0,88,84,68,0,88,84,69,0,88,84,70,0,88,84,71,0,88,84,72,0,88,84,73, -0,88,84,74,0,88,84,75,0,88,84,76,0,88,84,77,0,88,84,78,0,88,84,79,0,88,84,80,0,88,84,81,0,88,84,82,0,88,84,83,0,88,84,84,0,88,84,85,0,88,84,86,0,88,84,87,0,88,84,88,0,88,84,89,0,88,84,90,0,88,85,65,0,88,85,66,0,88,85,67,0,88,85,68,0,88,85,69,0,88,85,70,0,88,85,71,0,88,85,72,0,88,85,73,0,88,85,74,0,88,85,75,0,88,85,76,0,88,85,77,0,88,85,78,0,88,85,79,0,88,85,80,0,88,85,81,0,88,85,82,0,88,85,83,0,88,85,84,0,88,85,85,0,88,85,86,0,88,85,87,0,88,85,88,0,88,85,89,0,88,85,90,0,88,86,65,0,88,86,66,0,88,86, -67,0,88,86,68,0,88,86,69,0,88,86,70,0,88,86,71,0,88,86,72,0,88,86,73,0,88,86,74,0,88,86,75,0,88,86,76,0,88,86,77,0,88,86,78,0,88,86,79,0,88,86,80,0,88,86,81,0,88,86,82,0,88,86,83,0,88,86,84,0,88,86,85,0,88,86,86,0,88,86,87,0,88,86,88,0,88,86,89,0,88,86,90,0,88,87,65,0,88,87,66,0,88,87,67,0,88,87,68,0,88,87,69,0,88,87,70,0,88,87,71,0,88,87,72,0,88,87,73,0,88,87,74,0,88,87,75,0,88,87,76,0,88,87,77,0,88,87,78,0,88,87,79,0,88,87,80,0,88,87,81,0,88,87,82,0,88,87,83,0,88,87,84,0,88,87,85,0,88,87,86,0,88, -87,87,0,88,87,88,0,88,87,89,0,88,87,90,0,88,88,65,0,88,88,66,0,88,88,67,0,88,88,68,0,88,88,69,0,88,88,70,0,88,88,71,0,88,88,72,0,88,88,73,0,88,88,74,0,88,88,75,0,88,88,76,0,88,88,77,0,88,88,78,0,88,88,79,0,88,88,80,0,88,88,81,0,88,88,82,0,88,88,83,0,88,88,84,0,88,88,85,0,88,88,86,0,88,88,87,0,88,88,88,0,88,88,89,0,88,88,90,0,88,89,65,0,88,89,66,0,88,89,67,0,88,89,68,0,88,89,69,0,88,89,70,0,88,89,71,0,88,89,72,0,88,89,73,0,88,89,74,0,88,89,75,0,88,89,76,0,88,89,77,0,88,89,78,0,88,89,79,0,88,89,80, -0,88,89,81,0,88,89,82,0,88,89,83,0,88,89,84,0,88,89,85,0,88,89,86,0,88,89,87,0,88,89,88,0,88,89,89,0,88,89,90,0,88,90,65,0,88,90,66,0,88,90,67,0,88,90,68,0,88,90,69,0,88,90,70,0,88,90,71,0,88,90,72,0,88,90,73,0,88,90,74,0,88,90,75,0,88,90,76,0,88,90,77,0,88,90,78,0,88,90,79,0,88,90,80,0,88,90,81,0,88,90,82,0,88,90,83,0,88,90,84,0,88,90,85,0,88,90,86,0,88,90,87,0,88,90,88,0,88,90,89,0,88,90,90,0,89,65,65,0,89,65,66,0,89,65,67,0,89,65,68,0,89,65,69,0,89,65,70,0,89,65,71,0,89,65,72,0,89,65,73,0,89,65, -74,0,89,65,75,0,89,65,76,0,89,65,77,0,89,65,78,0,89,65,79,0,89,65,80,0,89,65,81,0,89,65,82,0,89,65,83,0,89,65,84,0,89,65,85,0,89,65,86,0,89,65,87,0,89,65,88,0,89,65,89,0,89,65,90,0,89,66,65,0,89,66,66,0,89,66,67,0,89,66,68,0,89,66,69,0,89,66,70,0,89,66,71,0,89,66,72,0,89,66,73,0,89,66,74,0,89,66,75,0,89,66,76,0,89,66,77,0,89,66,78,0,89,66,79,0,89,66,80,0,89,66,81,0,89,66,82,0,89,66,83,0,89,66,84,0,89,66,85,0,89,66,86,0,89,66,87,0,89,66,88,0,89,66,89,0,89,66,90,0,89,67,65,0,89,67,66,0,89,67,67,0,89, -67,68,0,89,67,69,0,89,67,70,0,89,67,71,0,89,67,72,0,89,67,73,0,89,67,74,0,89,67,75,0,89,67,76,0,89,67,77,0,89,67,78,0,89,67,79,0,89,67,80,0,89,67,81,0,89,67,82,0,89,67,83,0,89,67,84,0,89,67,85,0,89,67,86,0,89,67,87,0,89,67,88,0,89,67,89,0,89,67,90,0,89,68,65,0,89,68,66,0,89,68,67,0,89,68,68,0,89,68,69,0,89,68,70,0,89,68,71,0,89,68,72,0,89,68,73,0,89,68,74,0,89,68,75,0,89,68,76,0,89,68,77,0,89,68,78,0,89,68,79,0,89,68,80,0,89,68,81,0,89,68,82,0,89,68,83,0,89,68,84,0,89,68,85,0,89,68,86,0,89,68,87, -0,89,68,88,0,89,68,89,0,89,68,90,0,89,69,65,0,89,69,66,0,89,69,67,0,89,69,68,0,89,69,69,0,89,69,70,0,89,69,71,0,89,69,72,0,89,69,73,0,89,69,74,0,89,69,75,0,89,69,76,0,89,69,77,0,89,69,78,0,89,69,79,0,89,69,80,0,89,69,81,0,89,69,82,0,89,69,83,0,89,69,84,0,89,69,85,0,89,69,86,0,89,69,87,0,89,69,88,0,89,69,89,0,89,69,90,0,89,70,65,0,89,70,66,0,89,70,67,0,89,70,68,0,89,70,69,0,89,70,70,0,89,70,71,0,89,70,72,0,89,70,73,0,89,70,74,0,89,70,75,0,89,70,76,0,89,70,77,0,89,70,78,0,89,70,79,0,89,70,80,0,89,70, -81,0,89,70,82,0,89,70,83,0,89,70,84,0,89,70,85,0,89,70,86,0,89,70,87,0,89,70,88,0,89,70,89,0,89,70,90,0,89,71,65,0,89,71,66,0,89,71,67,0,89,71,68,0,89,71,69,0,89,71,70,0,89,71,71,0,89,71,72,0,89,71,73,0,89,71,74,0,89,71,75,0,89,71,76,0,89,71,77,0,89,71,78,0,89,71,79,0,89,71,80,0,89,71,81,0,89,71,82,0,89,71,83,0,89,71,84,0,89,71,85,0,89,71,86,0,89,71,87,0,89,71,88,0,89,71,89,0,89,71,90,0,89,72,65,0,89,72,66,0,89,72,67,0,89,72,68,0,89,72,69,0,89,72,70,0,89,72,71,0,89,72,72,0,89,72,73,0,89,72,74,0,89, -72,75,0,89,72,76,0,89,72,77,0,89,72,78,0,89,72,79,0,89,72,80,0,89,72,81,0,89,72,82,0,89,72,83,0,89,72,84,0,89,72,85,0,89,72,86,0,89,72,87,0,89,72,88,0,89,72,89,0,89,72,90,0,89,73,65,0,89,73,66,0,89,73,67,0,89,73,68,0,89,73,69,0,89,73,70,0,89,73,71,0,89,73,72,0,89,73,73,0,89,73,74,0,89,73,75,0,89,73,76,0,89,73,77,0,89,73,78,0,89,73,79,0,89,73,80,0,89,73,81,0,89,73,82,0,89,73,83,0,89,73,84,0,89,73,85,0,89,73,86,0,89,73,87,0,89,73,88,0,89,73,89,0,89,73,90,0,89,74,65,0,89,74,66,0,89,74,67,0,89,74,68, -0,89,74,69,0,89,74,70,0,89,74,71,0,89,74,72,0,89,74,73,0,89,74,74,0,89,74,75,0,89,74,76,0,89,74,77,0,89,74,78,0,89,74,79,0,89,74,80,0,89,74,81,0,89,74,82,0,89,74,83,0,89,74,84,0,89,74,85,0,89,74,86,0,89,74,87,0,89,74,88,0,89,74,89,0,89,74,90,0,89,75,65,0,89,75,66,0,89,75,67,0,89,75,68,0,89,75,69,0,89,75,70,0,89,75,71,0,89,75,72,0,89,75,73,0,89,75,74,0,89,75,75,0,89,75,76,0,89,75,77,0,89,75,78,0,89,75,79,0,89,75,80,0,89,75,81,0,89,75,82,0,89,75,83,0,89,75,84,0,89,75,85,0,89,75,86,0,89,75,87,0,89,75, -88,0,89,75,89,0,89,75,90,0,89,76,65,0,89,76,66,0,89,76,67,0,89,76,68,0,89,76,69,0,89,76,70,0,89,76,71,0,89,76,72,0,89,76,73,0,89,76,74,0,89,76,75,0,89,76,76,0,89,76,77,0,89,76,78,0,89,76,79,0,89,76,80,0,89,76,81,0,89,76,82,0,89,76,83,0,89,76,84,0,89,76,85,0,89,76,86,0,89,76,87,0,89,76,88,0,89,76,89,0,89,76,90,0,89,77,65,0,89,77,66,0,89,77,67,0,89,77,68,0,89,77,69,0,89,77,70,0,89,77,71,0,89,77,72,0,89,77,73,0,89,77,74,0,89,77,75,0,89,77,76,0,89,77,77,0,89,77,78,0,89,77,79,0,89,77,80,0,89,77,81,0,89, -77,82,0,89,77,83,0,89,77,84,0,89,77,85,0,89,77,86,0,89,77,87,0,89,77,88,0,89,77,89,0,89,77,90,0,89,78,65,0,89,78,66,0,89,78,67,0,89,78,68,0,89,78,69,0,89,78,70,0,89,78,71,0,89,78,72,0,89,78,73,0,89,78,74,0,89,78,75,0,89,78,76,0,89,78,77,0,89,78,78,0,89,78,79,0,89,78,80,0,89,78,81,0,89,78,82,0,89,78,83,0,89,78,84,0,89,78,85,0,89,78,86,0,89,78,87,0,89,78,88,0,89,78,89,0,89,78,90,0,89,79,65,0,89,79,66,0,89,79,67,0,89,79,68,0,89,79,69,0,89,79,70,0,89,79,71,0,89,79,72,0,89,79,73,0,89,79,74,0,89,79,75, -0,89,79,76,0,89,79,77,0,89,79,78,0,89,79,79,0,89,79,80,0,89,79,81,0,89,79,82,0,89,79,83,0,89,79,84,0,89,79,85,0,89,79,86,0,89,79,87,0,89,79,88,0,89,79,89,0,89,79,90,0,89,80,65,0,89,80,66,0,89,80,67,0,89,80,68,0,89,80,69,0,89,80,70,0,89,80,71,0,89,80,72,0,89,80,73,0,89,80,74,0,89,80,75,0,89,80,76,0,89,80,77,0,89,80,78,0,89,80,79,0,89,80,80,0,89,80,81,0,89,80,82,0,89,80,83,0,89,80,84,0,89,80,85,0,89,80,86,0,89,80,87,0,89,80,88,0,89,80,89,0,89,80,90,0,89,81,65,0,89,81,66,0,89,81,67,0,89,81,68,0,89,81, -69,0,89,81,70,0,89,81,71,0,89,81,72,0,89,81,73,0,89,81,74,0,89,81,75,0,89,81,76,0,89,81,77,0,89,81,78,0,89,81,79,0,89,81,80,0,89,81,81,0,89,81,82,0,89,81,83,0,89,81,84,0,89,81,85,0,89,81,86,0,89,81,87,0,89,81,88,0,89,81,89,0,89,81,90,0,89,82,65,0,89,82,66,0,89,82,67,0,89,82,68,0,89,82,69,0,89,82,70,0,89,82,71,0,89,82,72,0,89,82,73,0,89,82,74,0,89,82,75,0,89,82,76,0,89,82,77,0,89,82,78,0,89,82,79,0,89,82,80,0,89,82,81,0,89,82,82,0,89,82,83,0,89,82,84,0,89,82,85,0,89,82,86,0,89,82,87,0,89,82,88,0,89, -82,89,0,89,82,90,0,89,83,65,0,89,83,66,0,89,83,67,0,89,83,68,0,89,83,69,0,89,83,70,0,89,83,71,0,89,83,72,0,89,83,73,0,89,83,74,0,89,83,75,0,89,83,76,0,89,83,77,0,89,83,78,0,89,83,79,0,89,83,80,0,89,83,81,0,89,83,82,0,89,83,83,0,89,83,84,0,89,83,85,0,89,83,86,0,89,83,87,0,89,83,88,0,89,83,89,0,89,83,90,0,89,84,65,0,89,84,66,0,89,84,67,0,89,84,68,0,89,84,69,0,89,84,70,0,89,84,71,0,89,84,72,0,89,84,73,0,89,84,74,0,89,84,75,0,89,84,76,0,89,84,77,0,89,84,78,0,89,84,79,0,89,84,80,0,89,84,81,0,89,84,82, -0,89,84,83,0,89,84,84,0,89,84,85,0,89,84,86,0,89,84,87,0,89,84,88,0,89,84,89,0,89,84,90,0,89,85,65,0,89,85,66,0,89,85,67,0,89,85,68,0,89,85,69,0,89,85,70,0,89,85,71,0,89,85,72,0,89,85,73,0,89,85,74,0,89,85,75,0,89,85,76,0,89,85,77,0,89,85,78,0,89,85,79,0,89,85,80,0,89,85,81,0,89,85,82,0,89,85,83,0,89,85,84,0,89,85,85,0,89,85,86,0,89,85,87,0,89,85,88,0,89,85,89,0,89,85,90,0,89,86,65,0,89,86,66,0,89,86,67,0,89,86,68,0,89,86,69,0,89,86,70,0,89,86,71,0,89,86,72,0,89,86,73,0,89,86,74,0,89,86,75,0,89,86, -76,0,89,86,77,0,89,86,78,0,89,86,79,0,89,86,80,0,89,86,81,0,89,86,82,0,89,86,83,0,89,86,84,0,89,86,85,0,89,86,86,0,89,86,87,0,89,86,88,0,89,86,89,0,89,86,90,0,89,87,65,0,89,87,66,0,89,87,67,0,89,87,68,0,89,87,69,0,89,87,70,0,89,87,71,0,89,87,72,0,89,87,73,0,89,87,74,0,89,87,75,0,89,87,76,0,89,87,77,0,89,87,78,0,89,87,79,0,89,87,80,0,89,87,81,0,89,87,82,0,89,87,83,0,89,87,84,0,89,87,85,0,89,87,86,0,89,87,87,0,89,87,88,0,89,87,89,0,89,87,90,0,89,88,65,0,89,88,66,0,89,88,67,0,89,88,68,0,89,88,69,0,89, -88,70,0,89,88,71,0,89,88,72,0,89,88,73,0,89,88,74,0,89,88,75,0,89,88,76,0,89,88,77,0,89,88,78,0,89,88,79,0,89,88,80,0,89,88,81,0,89,88,82,0,89,88,83,0,89,88,84,0,89,88,85,0,89,88,86,0,89,88,87,0,89,88,88,0,89,88,89,0,89,88,90,0,89,89,65,0,89,89,66,0,89,89,67,0,89,89,68,0,89,89,69,0,89,89,70,0,89,89,71,0,89,89,72,0,89,89,73,0,89,89,74,0,89,89,75,0,89,89,76,0,89,89,77,0,89,89,78,0,89,89,79,0,89,89,80,0,89,89,81,0,89,89,82,0,89,89,83,0,89,89,84,0,89,89,85,0,89,89,86,0,89,89,87,0,89,89,88,0,89,89,89, -0,89,89,90,0,89,90,65,0,89,90,66,0,89,90,67,0,89,90,68,0,89,90,69,0,89,90,70,0,89,90,71,0,89,90,72,0,89,90,73,0,89,90,74,0,89,90,75,0,89,90,76,0,89,90,77,0,89,90,78,0,89,90,79,0,89,90,80,0,89,90,81,0,89,90,82,0,89,90,83,0,89,90,84,0,89,90,85,0,89,90,86,0,89,90,87,0,89,90,88,0,89,90,89,0,89,90,90,0,90,65,65,0,90,65,66,0,90,65,67,0,90,65,68,0,90,65,69,0,90,65,70,0,90,65,71,0,90,65,72,0,90,65,73,0,90,65,74,0,90,65,75,0,90,65,76,0,90,65,77,0,90,65,78,0,90,65,79,0,90,65,80,0,90,65,81,0,90,65,82,0,90,65, -83,0,90,65,84,0,90,65,85,0,90,65,86,0,90,65,87,0,90,65,88,0,90,65,89,0,90,65,90,0,90,66,65,0,90,66,66,0,90,66,67,0,90,66,68,0,90,66,69,0,90,66,70,0,90,66,71,0,90,66,72,0,90,66,73,0,90,66,74,0,90,66,75,0,90,66,76,0,90,66,77,0,90,66,78,0,90,66,79,0,90,66,80,0,90,66,81,0,90,66,82,0,90,66,83,0,90,66,84,0,90,66,85,0,90,66,86,0,90,66,87,0,90,66,88,0,90,66,89,0,90,66,90,0,90,67,65,0,90,67,66,0,90,67,67,0,90,67,68,0,90,67,69,0,90,67,70,0,90,67,71,0,90,67,72,0,90,67,73,0,90,67,74,0,90,67,75,0,90,67,76,0,90, -67,77,0,90,67,78,0,90,67,79,0,90,67,80,0,90,67,81,0,90,67,82,0,90,67,83,0,90,67,84,0,90,67,85,0,90,67,86,0,90,67,87,0,90,67,88,0,90,67,89,0,90,67,90,0,90,68,65,0,90,68,66,0,90,68,67,0,90,68,68,0,90,68,69,0,90,68,70,0,90,68,71,0,90,68,72,0,90,68,73,0,90,68,74,0,90,68,75,0,90,68,76,0,90,68,77,0,90,68,78,0,90,68,79,0,90,68,80,0,90,68,81,0,90,68,82,0,90,68,83,0,90,68,84,0,90,68,85,0,90,68,86,0,90,68,87,0,90,68,88,0,90,68,89,0,90,68,90,0,90,69,65,0,90,69,66,0,90,69,67,0,90,69,68,0,90,69,69,0,90,69,70, -0,90,69,71,0,90,69,72,0,90,69,73,0,90,69,74,0,90,69,75,0,90,69,76,0,90,69,77,0,90,69,78,0,90,69,79,0,90,69,80,0,90,69,81,0,90,69,82,0,90,69,83,0,90,69,84,0,90,69,85,0,90,69,86,0,90,69,87,0,90,69,88,0,90,69,89,0,90,69,90,0,90,70,65,0,90,70,66,0,90,70,67,0,90,70,68,0,90,70,69,0,90,70,70,0,90,70,71,0,90,70,72,0,90,70,73,0,90,70,74,0,90,70,75,0,90,70,76,0,90,70,77,0,90,70,78,0,90,70,79,0,90,70,80,0,90,70,81,0,90,70,82,0,90,70,83,0,90,70,84,0,90,70,85,0,90,70,86,0,90,70,87,0,90,70,88,0,90,70,89,0,90,70, -90,0,90,71,65,0,90,71,66,0,90,71,67,0,90,71,68,0,90,71,69,0,90,71,70,0,90,71,71,0,90,71,72,0,90,71,73,0,90,71,74,0,90,71,75,0,90,71,76,0,90,71,77,0,90,71,78,0,90,71,79,0,90,71,80,0,90,71,81,0,90,71,82,0,90,71,83,0,90,71,84,0,90,71,85,0,90,71,86,0,90,71,87,0,90,71,88,0,90,71,89,0,90,71,90,0,90,72,65,0,90,72,66,0,90,72,67,0,90,72,68,0,90,72,69,0,90,72,70,0,90,72,71,0,90,72,72,0,90,72,73,0,90,72,74,0,90,72,75,0,90,72,76,0,90,72,77,0,90,72,78,0,90,72,79,0,90,72,80,0,90,72,81,0,90,72,82,0,90,72,83,0,90, -72,84,0,90,72,85,0,90,72,86,0,90,72,87,0,90,72,88,0,90,72,89,0,90,72,90,0,90,73,65,0,90,73,66,0,90,73,67,0,90,73,68,0,90,73,69,0,90,73,70,0,90,73,71,0,90,73,72,0,90,73,73,0,90,73,74,0,90,73,75,0,90,73,76,0,90,73,77,0,90,73,78,0,90,73,79,0,90,73,80,0,90,73,81,0,90,73,82,0,90,73,83,0,90,73,84,0,90,73,85,0,90,73,86,0,90,73,87,0,90,73,88,0,90,73,89,0,90,73,90,0,90,74,65,0,90,74,66,0,90,74,67,0,90,74,68,0,90,74,69,0,90,74,70,0,90,74,71,0,90,74,72,0,90,74,73,0,90,74,74,0,90,74,75,0,90,74,76,0,90,74,77, -0,90,74,78,0,90,74,79,0,90,74,80,0,90,74,81,0,90,74,82,0,90,74,83,0,90,74,84,0,90,74,85,0,90,74,86,0,90,74,87,0,90,74,88,0,90,74,89,0,90,74,90,0,90,75,65,0,90,75,66,0,90,75,67,0,90,75,68,0,90,75,69,0,90,75,70,0,90,75,71,0,90,75,72,0,90,75,73,0,90,75,74,0,90,75,75,0,90,75,76,0,90,75,77,0,90,75,78,0,90,75,79,0,90,75,80,0,90,75,81,0,90,75,82,0,90,75,83,0,90,75,84,0,90,75,85,0,90,75,86,0,90,75,87,0,90,75,88,0,90,75,89,0,90,75,90,0,90,76,65,0,90,76,66,0,90,76,67,0,90,76,68,0,90,76,69,0,90,76,70,0,90,76, -71,0,90,76,72,0,90,76,73,0,90,76,74,0,90,76,75,0,90,76,76,0,90,76,77,0,90,76,78,0,90,76,79,0,90,76,80,0,90,76,81,0,90,76,82,0,90,76,83,0,90,76,84,0,90,76,85,0,90,76,86,0,90,76,87,0,90,76,88,0,90,76,89,0,90,76,90,0,90,77,65,0,90,77,66,0,90,77,67,0,90,77,68,0,90,77,69,0,90,77,70,0,90,77,71,0,90,77,72,0,90,77,73,0,90,77,74,0,90,77,75,0,90,77,76,0,90,77,77,0,90,77,78,0,90,77,79,0,90,77,80,0,90,77,81,0,90,77,82,0,90,77,83,0,90,77,84,0,90,77,85,0,90,77,86,0,90,77,87,0,90,77,88,0,90,77,89,0,90,77,90,0,90, -78,65,0,90,78,66,0,90,78,67,0,90,78,68,0,90,78,69,0,90,78,70,0,90,78,71,0,90,78,72,0,90,78,73,0,90,78,74,0,90,78,75,0,90,78,76,0,90,78,77,0,90,78,78,0,90,78,79,0,90,78,80,0,90,78,81,0,90,78,82,0,90,78,83,0,90,78,84,0,90,78,85,0,90,78,86,0,90,78,87,0,90,78,88,0,90,78,89,0,90,78,90,0,90,79,65,0,90,79,66,0,90,79,67,0,90,79,68,0,90,79,69,0,90,79,70,0,90,79,71,0,90,79,72,0,90,79,73,0,90,79,74,0,90,79,75,0,90,79,76,0,90,79,77,0,90,79,78,0,90,79,79,0,90,79,80,0,90,79,81,0,90,79,82,0,90,79,83,0,90,79,84, -0,90,79,85,0,90,79,86,0,90,79,87,0,90,79,88,0,90,79,89,0,90,79,90,0,90,80,65,0,90,80,66,0,90,80,67,0,90,80,68,0,90,80,69,0,90,80,70,0,90,80,71,0,90,80,72,0,90,80,73,0,90,80,74,0,90,80,75,0,90,80,76,0,90,80,77,0,90,80,78,0,90,80,79,0,90,80,80,0,90,80,81,0,90,80,82,0,90,80,83,0,90,80,84,0,90,80,85,0,90,80,86,0,90,80,87,0,90,80,88,0,90,80,89,0,90,80,90,0,90,81,65,0,90,81,66,0,90,81,67,0,90,81,68,0,90,81,69,0,90,81,70,0,90,81,71,0,90,81,72,0,90,81,73,0,90,81,74,0,90,81,75,0,90,81,76,0,90,81,77,0,90,81, -78,0,90,81,79,0,90,81,80,0,90,81,81,0,90,81,82,0,90,81,83,0,90,81,84,0,90,81,85,0,90,81,86,0,90,81,87,0,90,81,88,0,90,81,89,0,90,81,90,0,90,82,65,0,90,82,66,0,90,82,67,0,90,82,68,0,90,82,69,0,90,82,70,0,90,82,71,0,90,82,72,0,90,82,73,0,90,82,74,0,90,82,75,0,90,82,76,0,90,82,77,0,90,82,78,0,90,82,79,0,90,82,80,0,90,82,81,0,90,82,82,0,90,82,83,0,90,82,84,0,90,82,85,0,90,82,86,0,90,82,87,0,90,82,88,0,90,82,89,0,90,82,90,0,90,83,65,0,90,83,66,0,90,83,67,0,90,83,68,0,90,83,69,0,90,83,70,0,90,83,71,0,90, -83,72,0,90,83,73,0,90,83,74,0,90,83,75,0,90,83,76,0,90,83,77,0,90,83,78,0,90,83,79,0,90,83,80,0,90,83,81,0,90,83,82,0,90,83,83,0,90,83,84,0,90,83,85,0,90,83,86,0,90,83,87,0,90,83,88,0,90,83,89,0,90,83,90,0,90,84,65,0,90,84,66,0,90,84,67,0,90,84,68,0,90,84,69,0,90,84,70,0,90,84,71,0,90,84,72,0,90,84,73,0,90,84,74,0,90,84,75,0,90,84,76,0,90,84,77,0,90,84,78,0,90,84,79,0,90,84,80,0,90,84,81,0,90,84,82,0,90,84,83,0,90,84,84,0,90,84,85,0,90,84,86,0,90,84,87,0,90,84,88,0,90,84,89,0,90,84,90,0,90,85,65, -0,90,85,66,0,90,85,67,0,90,85,68,0,90,85,69,0,90,85,70,0,90,85,71,0,90,85,72,0,90,85,73,0,90,85,74,0,90,85,75,0,90,85,76,0,90,85,77,0,90,85,78,0,90,85,79,0,90,85,80,0,90,85,81,0,90,85,82,0,90,85,83,0,90,85,84,0,90,85,85,0,90,85,86,0,90,85,87,0,90,85,88,0,90,85,89,0,90,85,90,0,90,86,65,0,90,86,66,0,90,86,67,0,90,86,68,0,90,86,69,0,90,86,70,0,90,86,71,0,90,86,72,0,90,86,73,0,90,86,74,0,90,86,75,0,90,86,76,0,90,86,77,0,90,86,78,0,90,86,79,0,90,86,80,0,90,86,81,0,90,86,82,0,90,86,83,0,90,86,84,0,90,86, -85,0,90,86,86,0,90,86,87,0,90,86,88,0,90,86,89,0,90,86,90,0,90,87,65,0,90,87,66,0,90,87,67,0,90,87,68,0,90,87,69,0,90,87,70,0,90,87,71,0,90,87,72,0,90,87,73,0,90,87,74,0,90,87,75,0,90,87,76,0,90,87,77,0,90,87,78,0,90,87,79,0,90,87,80,0,90,87,81,0,90,87,82,0,90,87,83,0,90,87,84,0,90,87,85,0,90,87,86,0,90,87,87,0,90,87,88,0,90,87,89,0,90,87,90,0,90,88,65,0,90,88,66,0,90,88,67,0,90,88,68,0,90,88,69,0,90,88,70,0,90,88,71,0,90,88,72,0,90,88,73,0,90,88,74,0,90,88,75,0,90,88,76,0,90,88,77,0,90,88,78,0,90, -88,79,0,90,88,80,0,90,88,81,0,90,88,82,0,90,88,83,0,90,88,84,0,90,88,85,0,90,88,86,0,90,88,87,0,90,88,88,0,90,88,89,0,90,88,90,0,90,89,65,0,90,89,66,0,90,89,67,0,90,89,68,0,90,89,69,0,90,89,70,0,90,89,71,0,90,89,72,0,90,89,73,0,90,89,74,0,90,89,75,0,90,89,76,0,90,89,77,0,90,89,78,0,90,89,79,0,90,89,80,0,90,89,81,0,90,89,82,0,90,89,83,0,90,89,84,0,90,89,85,0,90,89,86,0,90,89,87,0,90,89,88,0,90,89,89,0,90,89,90,0,90,90,65,0,90,90,66,0,90,90,67,0,90,90,68,0,90,90,69,0,90,90,70,0,90,90,71,0,90,90,72, -0,90,90,73,0,90,90,74,0,90,90,75,0,90,90,76,0,90,90,77,0,90,90,78,0,90,90,79,0,90,90,80,0,90,90,81,0,90,90,82,0,90,90,83,0,90,90,84,0,90,90,85,0,90,90,86,0,90,90,87,0,90,90,88,0,90,90,89,0,90,90,90,0,65,65,0,65,66,0,65,67,0,65,68,0,65,69,0,65,70,0,65,71,0,65,72,0,65,73,0,65,74,0,65,75,0,65,76,0,65,77,0,65,78,0,65,79,0,65,80,0,65,81,0,65,82,0,65,83,0,65,84,0,65,85,0,65,86,0,65,87,0,65,88,0,65,89,0,65,90,0,66,65,0,66,66,0,66,67,0,66,68,0,66,69,0,66,70,0,66,71,0,66,72,0,66,73,0,66,74,0,66,75,0,66,76, -0,66,77,0,66,78,0,66,79,0,66,80,0,66,81,0,66,82,0,66,83,0,66,84,0,66,85,0,66,86,0,66,87,0,66,88,0,66,89,0,66,90,0,67,65,0,67,66,0,67,67,0,67,68,0,67,69,0,67,70,0,67,71,0,67,72,0,67,73,0,67,74,0,67,75,0,67,76,0,67,77,0,67,78,0,67,79,0,67,80,0,67,81,0,67,82,0,67,83,0,67,84,0,67,85,0,67,86,0,67,87,0,67,88,0,67,89,0,67,90,0,68,65,0,68,66,0,68,67,0,68,68,0,68,69,0,68,70,0,68,71,0,68,72,0,68,73,0,68,74,0,68,75,0,68,76,0,68,77,0,68,78,0,68,79,0,68,80,0,68,81,0,68,82,0,68,83,0,68,84,0,68,85,0,68,86,0,68, -87,0,68,88,0,68,89,0,68,90,0,69,65,0,69,66,0,69,67,0,69,68,0,69,69,0,69,70,0,69,71,0,69,72,0,69,73,0,69,74,0,69,75,0,69,76,0,69,77,0,69,78,0,69,79,0,69,80,0,69,81,0,69,82,0,69,83,0,69,84,0,69,85,0,69,86,0,69,87,0,69,88,0,69,89,0,69,90,0,70,65,0,70,66,0,70,67,0,70,68,0,70,69,0,70,70,0,70,71,0,70,72,0,70,73,0,70,74,0,70,75,0,70,76,0,70,77,0,70,78,0,70,79,0,70,80,0,70,81,0,70,82,0,70,83,0,70,84,0,70,85,0,70,86,0,70,87,0,70,88,0,70,89,0,70,90,0,71,65,0,71,66,0,71,67,0,71,68,0,71,69,0,71,70,0,71,71,0, -71,72,0,71,73,0,71,74,0,71,75,0,71,76,0,71,77,0,71,78,0,71,79,0,71,80,0,71,81,0,71,82,0,71,83,0,71,84,0,71,85,0,71,86,0,71,87,0,71,88,0,71,89,0,71,90,0,72,65,0,72,66,0,72,67,0,72,68,0,72,69,0,72,70,0,72,71,0,72,72,0,72,73,0,72,74,0,72,75,0,72,76,0,72,77,0,72,78,0,72,79,0,72,80,0,72,81,0,72,82,0,72,83,0,72,84,0,72,85,0,72,86,0,72,87,0,72,88,0,72,89,0,72,90,0,73,65,0,73,66,0,73,67,0,73,68,0,73,69,0,73,70,0,73,71,0,73,72,0,73,73,0,73,74,0,73,75,0,73,76,0,73,77,0,73,78,0,73,79,0,73,80,0,73,81,0,73,82, -0,73,83,0,73,84,0,73,85,0,73,86,0,73,87,0,73,88,0,73,89,0,73,90,0,74,65,0,74,66,0,74,67,0,74,68,0,74,69,0,74,70,0,74,71,0,74,72,0,74,73,0,74,74,0,74,75,0,74,76,0,74,77,0,74,78,0,74,79,0,74,80,0,74,81,0,74,82,0,74,83,0,74,84,0,74,85,0,74,86,0,74,87,0,74,88,0,74,89,0,74,90,0,75,65,0,75,66,0,75,67,0,75,68,0,75,69,0,75,70,0,75,71,0,75,72,0,75,73,0,75,74,0,75,75,0,75,76,0,75,77,0,75,78,0,75,79,0,75,80,0,75,81,0,75,82,0,75,83,0,75,84,0,75,85,0,75,86,0,75,87,0,75,88,0,75,89,0,75,90,0,76,65,0,76,66,0,76, -67,0,76,68,0,76,69,0,76,70,0,76,71,0,76,72,0,76,73,0,76,74,0,76,75,0,76,76,0,76,77,0,76,78,0,76,79,0,76,80,0,76,81,0,76,82,0,76,83,0,76,84,0,76,85,0,76,86,0,76,87,0,76,88,0,76,89,0,76,90,0,77,65,0,77,66,0,77,67,0,77,68,0,77,69,0,77,70,0,77,71,0,77,72,0,77,73,0,77,74,0,77,75,0,77,76,0,77,77,0,77,78,0,77,79,0,77,80,0,77,81,0,77,82,0,77,83,0,77,84,0,77,85,0,77,86,0,77,87,0,77,88,0,77,89,0,77,90,0,78,65,0,78,66,0,78,67,0,78,68,0,78,69,0,78,70,0,78,71,0,78,72,0,78,73,0,78,74,0,78,75,0,78,76,0,78,77,0, -78,78,0,78,79,0,78,80,0,78,81,0,78,82,0,78,83,0,78,84,0,78,85,0,78,86,0,78,87,0,78,88,0,78,89,0,78,90,0,79,65,0,79,66,0,79,67,0,79,68,0,79,69,0,79,70,0,79,71,0,79,72,0,79,73,0,79,74,0,79,75,0,79,76,0,79,77,0,79,78,0,79,79,0,79,80,0,79,81,0,79,82,0,79,83,0,79,84,0,79,85,0,79,86,0,79,87,0,79,88,0,79,89,0,79,90,0,80,65,0,80,66,0,80,67,0,80,68,0,80,69,0,80,70,0,80,71,0,80,72,0,80,73,0,80,74,0,80,75,0,80,76,0,80,77,0,80,78,0,80,79,0,80,80,0,80,81,0,80,82,0,80,83,0,80,84,0,80,85,0,80,86,0,80,87,0,80,88, -0,80,89,0,80,90,0,81,65,0,81,66,0,81,67,0,81,68,0,81,69,0,81,70,0,81,71,0,81,72,0,81,73,0,81,74,0,81,75,0,81,76,0,81,77,0,81,78,0,81,79,0,81,80,0,81,81,0,81,82,0,81,83,0,81,84,0,81,85,0,81,86,0,81,87,0,81,88,0,81,89,0,81,90,0,82,65,0,82,66,0,82,67,0,82,68,0,82,69,0,82,70,0,82,71,0,82,72,0,82,73,0,82,74,0,82,75,0,82,76,0,82,77,0,82,78,0,82,79,0,82,80,0,82,81,0,82,82,0,82,83,0,82,84,0,82,85,0,82,86,0,82,87,0,82,88,0,82,89,0,82,90,0,83,65,0,83,66,0,83,67,0,83,68,0,83,69,0,83,70,0,83,71,0,83,72,0,83, -73,0,83,74,0,83,75,0,83,76,0,83,77,0,83,78,0,83,79,0,83,80,0,83,81,0,83,82,0,83,83,0,83,84,0,83,85,0,83,86,0,83,87,0,83,88,0,83,89,0,83,90,0,84,65,0,84,66,0,84,67,0,84,68,0,84,69,0,84,70,0,84,71,0,84,72,0,84,73,0,84,74,0,84,75,0,84,76,0,84,77,0,84,78,0,84,79,0,84,80,0,84,81,0,84,82,0,84,83,0,84,84,0,84,85,0,84,86,0,84,87,0,84,88,0,84,89,0,84,90,0,85,65,0,85,66,0,85,67,0,85,68,0,85,69,0,85,70,0,85,71,0,85,72,0,85,73,0,85,74,0,85,75,0,85,76,0,85,77,0,85,78,0,85,79,0,85,80,0,85,81,0,85,82,0,85,83,0, -85,84,0,85,85,0,85,86,0,85,87,0,85,88,0,85,89,0,85,90,0,86,65,0,86,66,0,86,67,0,86,68,0,86,69,0,86,70,0,86,71,0,86,72,0,86,73,0,86,74,0,86,75,0,86,76,0,86,77,0,86,78,0,86,79,0,86,80,0,86,81,0,86,82,0,86,83,0,86,84,0,86,85,0,86,86,0,86,87,0,86,88,0,86,89,0,86,90,0,87,65,0,87,66,0,87,67,0,87,68,0,87,69,0,87,70,0,87,71,0,87,72,0,87,73,0,87,74,0,87,75,0,87,76,0,87,77,0,87,78,0,87,79,0,87,80,0,87,81,0,87,82,0,87,83,0,87,84,0,87,85,0,87,86,0,87,87,0,87,88,0,87,89,0,87,90,0,88,65,0,88,66,0,88,67,0,88,68, -0,88,69,0,88,70,0,88,71,0,88,72,0,88,73,0,88,74,0,88,75,0,88,76,0,88,77,0,88,78,0,88,79,0,88,80,0,88,81,0,88,82,0,88,83,0,88,84,0,88,85,0,88,86,0,88,87,0,88,88,0,88,89,0,88,90,0,89,65,0,89,66,0,89,67,0,89,68,0,89,69,0,89,70,0,89,71,0,89,72,0,89,73,0,89,74,0,89,75,0,89,76,0,89,77,0,89,78,0,89,79,0,89,80,0,89,81,0,89,82,0,89,83,0,89,84,0,89,85,0,89,86,0,89,87,0,89,88,0,89,89,0,89,90,0,90,65,0,90,66,0,90,67,0,90,68,0,90,69,0,90,70,0,90,71,0,90,72,0,90,73,0,90,74,0,90,75,0,90,76,0,90,77,0,90,78,0,90, -79,0,90,80,0,90,81,0,90,82,0,90,83,0,90,84,0,90,85,0,90,86,0,90,87,0,90,88,0,90,89,0,90,90,0,37,48,50,120,0,67,97,110,110,111,116,32,97,108,108,111,99,97,116,101,32,111,117,116,112,117,116,32,115,116,114,105,110,103,32,98,117,102,102,101,114,46,32,84,101,114,109,105,110,97,116,105,110,103,10,0,69,114,114,111,114,32,119,104,105,108,101,32,112,114,101,112,97,114,105,110,103,32,116,111,32,109,97,107,101,32,73,110,67,104,73,0,73,110,67,104,73,61,49,83,47,47,0,73,110,67,104,73,61,49,47,47,0,67,97,110, -110,111,116,32,114,101,97,100,32,99,111,117,110,116,115,32,108,105,110,101,0,67,97,110,110,111,116,32,105,110,116,101,114,112,114,101,116,32,99,111,117,110,116,115,32,108,105,110,101,58,0,86,51,48,48,48,0,67,97,110,110,111,116,32,114,101,97,100,32,97,116,111,109,32,98,108,111,99,107,32,108,105,110,101,0,67,97,110,110,111,116,32,105,110,116,101,114,112,114,101,116,32,97,116,111,109,32,98,108,111,99,107,32,108,105,110,101,58,0,67,97,110,110,111,116,32,114,101,97,100,32,98,111,110,100,32,98,108,111, -99,107,32,108,105,110,101,0,67,97,110,110,111,116,32,105,110,116,101,114,112,114,101,116,32,98,111,110,100,32,98,108,111,99,107,32,108,105,110,101,58,0,67,97,110,110,111,116,32,114,101,97,100,32,83,84,69,88,84,32,98,108,111,99,107,32,108,105,110,101,0,67,97,110,110,111,116,32,114,101,97,100,32,112,114,111,112,101,114,116,105,101,115,32,98,108,111,99,107,32,108,105,110,101,0,84,111,111,32,108,111,110,103,32,112,114,111,112,101,114,116,105,101,115,32,98,108,111,99,107,32,108,105,110,101,0,83,75,80, -0,82,69,71,0,32,0,69,78,68,0,67,104,97,114,103,101,32,110,111,116,32,114,101,99,111,103,110,105,122,101,100,58,0,82,97,100,105,99,97,108,32,110,111,116,32,114,101,99,111,103,110,105,122,101,100,58,0,73,83,79,0,83,84,89,0,83,83,84,0,83,76,66,0,83,67,78,0,83,65,76,0,83,66,76,0,83,68,73,0,83,77,84,0,83,66,84,0,66,76,75,0,67,111,117,108,100,32,110,111,116,32,105,110,116,101,114,112,114,101,116,32,112,111,108,121,109,101,114,32,100,97,116,97,58,0,73,103,110,111,114,101,32,112,111,108,121,109,101,114,32, -100,97,116,97,0,79,100,100,32,110,117,109,98,101,114,32,111,102,32,115,116,97,114,32,97,116,111,109,115,32,105,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,116,114,117,99,116,117,114,101,32,35,0,73,110,67,104,73,0,83,68,102,105,108,101,32,79,117,116,112,117,116,0,35,37,108,100,37,115,0,77,32,32,86,51,48,32,0,32,9,10,11,12,13,0,61,32,9,10,11,12,13,0,66,69,71,73,78,32,67,84,65,66,0,69,114,114,111,114,58,32,78,111,32,86,51,48,48,48,32,67,84,97,98,32,115,116,97,114,116,32,109,97,114, -107,101,114,0,67,97,110,110,111,116,32,114,101,97,100,32,86,51,48,48,48,32,99,111,117,110,116,115,32,108,105,110,101,0,84,111,111,32,108,111,110,103,32,99,111,117,110,116,115,32,108,105,110,101,0,67,79,85,78,84,83,0,78,117,109,98,101,114,32,111,102,32,97,116,111,109,115,32,116,111,111,32,108,97,114,103,101,46,32,86,51,48,48,48,32,99,111,117,110,116,115,32,108,105,110,101,58,0,67,97,110,110,111,116,32,105,110,116,101,114,112,114,101,116,32,86,51,48,48,48,32,99,111,117,110,116,115,32,108,105,110,101, -58,0,69,78,68,32,83,71,82,79,85,80,0,69,114,114,111,114,58,32,78,111,32,86,51,48,48,48,32,83,71,114,111,117,112,32,101,110,100,32,109,97,114,107,101,114,0,69,78,68,32,79,66,74,51,68,0,69,114,114,111,114,58,32,78,111,32,86,51,48,48,48,32,51,68,66,108,111,99,107,32,101,110,100,32,109,97,114,107,101,114,0,69,78,68,32,67,79,76,76,69,67,84,73,79,78,0,47,0,77,68,76,86,51,48,0,49,50,51,52,53,54,55,56,57,48,32,9,10,11,12,13,0,47,83,84,69,65,66,83,0,47,83,84,69,82,69,76,0,47,83,84,69,82,65,67,0,65,84,79,77, -83,0,40,0,67,97,110,110,111,116,32,105,110,116,101,114,112,114,101,116,32,86,51,48,48,48,32,99,111,108,108,101,99,116,105,111,110,32,108,105,110,101,40,115,41,0,86,51,48,48,48,32,101,110,104,97,110,99,101,100,32,115,116,101,114,101,111,32,115,116,111,114,101,100,32,98,117,116,32,105,103,110,111,114,101,100,0,66,69,71,73,78,32,65,84,79,77,0,69,114,114,111,114,58,32,78,111,32,86,51,48,48,48,32,65,116,111,109,32,98,108,111,99,107,32,115,116,97,114,116,32,109,97,114,107,101,114,0,67,97,110,110,111,116, -32,114,101,97,100,32,86,51,48,48,48,32,97,116,111,109,32,98,108,111,99,107,32,108,105,110,101,0,84,111,111,32,108,111,110,103,32,97,116,111,109,32,98,108,111,99,107,32,108,105,110,101,0,67,97,110,110],"i8",4,x.a+71720); -H([111,116,32,105,110,116,101,114,112,114,101,116,32,86,51,48,48,48,32,97,116,111,109,32,98,108,111,99,107,32,108,105,110,101,58,0,42,0,67,72,71,0,82,65,68,0,67,70,71,0,77,65,83,83,0,86,65,76,0,72,67,79,85,78,84,0,83,84,66,79,88,0,73,78,86,82,69,84,0,69,88,65,67,72,71,0,83,85,66,83,84,0,85,78,83,65,84,0,82,66,67,78,84,0,65,84,84,67,72,80,84,0,82,71,82,79,85,80,83,0,65,84,84,67,72,79,82,68,0,67,76,65,83,83,0,83,69,81,73,68,0,73,115,111,116,111,112,105,99,32,100,97,116,97,32,110,111,116,32,114,101, -99,111,103,110,105,122,101,100,58,0,67,97,110,110,111,116,32,105,110,116,101,114,112,114,101,116,32,86,51,48,48,48,32,97,116,111,109,32,98,108,111,99,107,32,107,101,121,45,118,97,108,117,101,32,112,97,105,114,0,86,51,48,48,48,32,115,116,97,114,32,97,116,111,109,115,32,105,103,110,111,114,101,100,0,69,78,68,32,65,84,79,77,0,69,114,114,111,114,58,32,78,111,32,86,51,48,48,48,32,65,116,111,109,32,98,108,111,99,107,32,101,110,100,32,109,97,114,107,101,114,0,66,69,71,73,78,32,66,79,78,68,0,69,114,114,111, -114,58,32,78,111,32,86,51,48,48,48,32,66,111,110,100,32,98,108,111,99,107,32,115,116,97,114,116,32,109,97,114,107,101,114,0,67,97,110,110,111,116,32,114,101,97,100,32,86,51,48,48,48,32,98,111,110,100,32,98,108,111,99,107,32,108,105,110,101,0,67,97,110,110,111,116,32,105,110,116,101,114,112,114,101,116,32,86,51,48,48,48,32,98,111,110,100,32,98,108,111,99,107,32,108,105,110,101,58,0,84,79,80,79,0,82,88,67,84,82,0,69,78,68,80,84,83,0,65,84,84,65,67,72,61,65,76,76,0,68,73,83,80,0,65,84,84,65,67,72,0, -86,51,48,48,48,32,104,97,112,116,105,99,32,98,111,110,100,115,32,115,116,111,114,101,100,32,98,117,116,32,105,103,110,111,114,101,100,0,69,78,68,32,66,79,78,68,0,69,114,114,111,114,58,32,78,111,32,86,51,48,48,48,32,66,111,110,100,32,98,108,111,99,107,32,101,110,100,32,109,97,114,107,101,114,0,66,69,71,73,78,32,83,71,82,79,85,80,0,66,69,71,73,78,32,79,66,74,51,68,0,76,73,78,75,78,79,68,69,0,66,69,71,73,78,32,67,79,76,76,69,67,84,73,79,78,0,69,78,68,32,67,84,65,66,0,69,114,114,111,114,58,32,78,111, -32,86,51,48,48,48,32,67,84,65,66,32,101,110,100,32,109,97,114,107,101,114,0,77,111,108,102,105,108,101,78,97,109,101,0,77,111,108,102,105,108,101,76,105,110,101,50,0,77,111,108,102,105,108,101,67,111,109,109,101,110,116,0,77,111,108,102,105,108,101,73,110,116,82,101,103,78,111,0,37,108,100,0,85,110,107,110,111,119,110,32,101,108,101,109,101,110,116,40,115,41,58,0,77,117,108,116,105,112,108,101,32,98,111,110,100,115,32,98,101,116,119,101,101,110,32,116,119,111,32,97,116,111,109,115,0,65,116,111,109, -32,39,37,115,39,32,104,97,115,32,109,111,114,101,32,116,104,97,110,32,37,100,32,98,111,110,100,115,0,85,110,114,101,99,111,103,110,105,122,101,100,32,98,111,110,100,32,116,121,112,101,58,0,85,110,114,101,99,111,103,110,105,122,101,100,32,98,111,110,100,32,115,116,101,114,101,111,0,85,110,107,110,111,119,110,32,98,111,110,100,32,116,121,112,101,32,105,110,32,77,79,76,102,105,108,101,32,97,115,115,105,103,110,101,100,32,97,115,32,97,32,115,105,110,103,108,101,32,98,111,110,100,0,80,114,111,103,114, -97,109,32,101,114,114,111,114,32,105,110,116,101,114,112,114,101,116,105,110,103,32,77,79,76,102,105,108,101,0,84,111,111,32,109,97,110,121,32,97,116,111,109,115,32,91,100,105,100,32,121,111,117,32,102,111,114,103,101,116,32,39,76,97,114,103,101,77,111,108,101,99,117,108,101,115,39,32,115,119,105,116,99,104,63,93,0,80,111,108,121,109,101,114,32,117,110,105,116,32,105,110,32,60,111,108,102,105,108,101,32,114,101,102,101,114,115,32,116,111,32,105,110,118,97,108,105,100,32,98,111,110,100,0,72,121,100, -114,111,103,101,110,32,97,115,32,112,111,108,121,109,101,114,32,101,110,100,32,103,114,111,117,112,32,105,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,67,65,83,0,77,32,32,69,78,68,0,84,111,111,32,108,111,110,103,32,83,68,97,116,97,32,108,105,110,101,32,116,114,117,110,99,97,116,101,100,0,36,36,36,36,0,78,65,77,69,0,67,79,77,77,69,78,84,0,85,110,101,120,112,101,99,116,101,100,32,83,68,97,116,97,32,104,101,97,100,101,114,32,108,105,110,101,58,0,66,121,112,97,115,115,105,110,103,32,116, -111,32,110,101,120,116,32,115,116,114,117,99,116,117,114,101,0,37,115,10,0,32,32,73,110,67,104,73,86,49,48,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,0,32,86,50,48,48,48,0,37,51,100,37,51,100,32,32,48,32,32,48,37,51,100,32,32,48,32,32,48,32,32,48,32,32,48,32,32,48,37,51,100,37,115,10,0,37,49,48,46,52,102,37,49,48,46,52,102,37,49,48,46,52,102,32,37,45,51,46,51,115,37,50,100,37,51,100,32,32,48,32,32,32,32,32,48,37,51,100,32,32,48, -32,32,48,32,32,48,32,32,48,10,0,37,51,117,37,51,117,37,51,117,37,51,117,32,32,48,32,32,48,32,32,48,10,0,37,51,117,37,51,117,37,51,117,32,32,48,32,32,48,32,32,48,32,32,48,10,0,65,32,32,37,100,10,0,94,94,0,32,37,51,100,32,37,51,100,0,77,32,32,67,72,71,37,51,100,37,115,10,0,77,32,32,82,65,68,37,51,100,37,115,10,0,77,32,32,73,83,79,37,51,100,37,115,10,0,77,32,32,83,84,89,37,51,100,0,78,79,78,0,83,82,85,0,77,79,78,0,67,79,80,0,77,79,68,0,67,82,79,0,77,69,82,0,32,37,51,100,32,37,51,115,0,10,0,77,32,32, -83,76,66,37,51,100,0,77,32,32,83,83,84,37,51,100,0,65,76,84,0,82,65,78,0,66,76,79,0,77,32,32,83,67,78,37,51,100,0,72,84,0,72,72,0,69,85,0,77,32,32,83,65,76,32,37,51,100,37,51,100,0,32,37,51,100,0,77,32,32,83,66,76,32,37,51,100,37,51,100,0,77,32,32,83,68,73,32,37,51,100,37,51,100,37,49,48,46,52,102,37,49,48,46,52,102,37,49,48,46,52,102,37,49,48,46,52,102,10,0,77,32,32,69,78,68,10,0,62,32,60,37,115,62,10,0,62,32,60,73,68,62,10,0,32,37,115,10,10,0,36,36,36,36,10,0,35,37,100,0,87,114,111,110,103,32,48, -68,32,115,116,101,114,101,111,32,100,101,115,99,114,105,112,116,111,114,40,115,41,58,0,65,117,120,73,110,102,111,61,0,83,116,114,117,99,116,117,114,101,58,0,32,10,13,0,32,105,115,32,109,105,115,115,105,110,103,0,47,90,58,0,82,101,97,100,105,110,103,32,112,111,108,121,109,101,114,32,65,117,120,73,110,102,111,32,105,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,0,77,105,115,115,105,110,103,32,97,116,111,109,32,100,97,116,97,0,104,100,116,0,87,114,111,110,103,32,110,117,109, -98,101,114,32,111,102,32,97,116,111,109,115,0,77,105,115,115,105,110,103,32,98,111,110,100,115,32,100,97,116,97,0,87,114,111,110,103,32,98,111,110,100,115,32,100,97,116,97,0,66,111,110,100,32,116,111,32,110,111,110,101,120,105,115,116,101,110,116,32,97,116,111,109,0,87,114,111,110,103,32,98,111,110,100,32,116,121,112,101,0,87,114,111,110,103,32,110,117,109,98,101,114,32,111,102,32,98,111,110,100,115,0,77,105,115,115,105,110,103,32,97,116,111,109,32,99,111,111,114,100,105,110,97,116,101,115,32,100, -97,116,97,0,87,114,111,110,103,32,97,116,111,109,32,99,111,111,114,100,105,110,97,116,101,115,32,100,97,116,97,0,87,114,111,110,103,32,110,117,109,98,101,114,32,111,102,32,99,111,111,114,100,105,110,97,116,101,115,0,85,110,107,110,111,119,110,32,98,111,110,100,32,116,121,112,101,32,105,110,32,73,110,67,104,73,32,97,117,120,32,97,115,115,105,103,110,101,100,32,97,115,32,97,32,115,105,110,103,108,101,32,98,111,110,100,0,65,116,111,109,32,104,97,115,32,49,32,111,114,32,109,111,114,101,32,116,104,97, -110,32,51,32,97,114,111,109,97,116,105,99,32,98,111,110,100,115,0,48,68,32,115,116,101,114,101,111,98,111,110,100,32,110,111,116,32,114,101,99,111,103,110,105,122,101,100,0,67,117,109,117,108,101,110,101,32,115,116,101,114,101,111,32,110,111,116,32,114,101,99,111,103,110,105,122,101,100,32,40,48,68,41,0,67,97,110,110,111,116,32,102,105,110,100,32,110,111,110,45,109,101,116,97,108,32,115,116,101,114,101,111,98,111,110,100,32,110,101,105,103,104,111,114,32,40,48,68,41,0,80,114,111,103,114,97,109,32, -101,114,114,111,114,32,105,110,116,101,114,112,114,101,116,105,110,103,32,73,110,67,104,73,32,97,117,120,0,105,115,32,109,105,115,115,105,110,103,0,61,0,83,116,114,117,99,116,117,114,101,32,35,37,108,100,0,67,97,110,110,111,116,32,105,110,116,101,114,112,114,101,116,32,114,101,118,101,114,115,105,98,105,108,105,116,121,32,105,110,102,111,114,109,97,116,105,111,110,0,70,97,116,97,108,32,117,110,100,101,116,101,114,109,105,110,101,100,32,112,114,111,103,114,97,109,32,101,114,114,111,114,0,67,97,110, -110,111,116,32,97,108,108,111,99,97,116,101,32,111,117,116,112,117,116,32,100,97,116,97,46,32,84,101,114,109,105,110,97,116,105,110,103,0,32,40,82,101,99,111,110,110,101,99,116,101,100,41,0,80,114,101,112,114,111,99,101,115,115,101,100,32,0,67,97,110,110,111,116,32,100,105,115,116,105,110,103,117,105,115,104,32,99,111,109,112,111,110,101,110,116,115,0,37,115,73,110,112,117,116,32,83,116,114,117,99,116,117,114,101,32,35,37,108,100,46,37,115,37,115,37,115,37,115,37,115,0,67,111,109,112,111,110,101, -110,116,32,35,37,100,32,111,102,32,37,100,44,32,73,110,112,117,116,32,83,116,114,117,99,116,117,114,101,32,35,37,108,100,46,37,115,37,115,37,115,37,115,37,115,0,67,97,110,110,111,116,32,100,105,115,112,108,97,121,32,116,104,101,32,115,116,114,117,99,116,117,114,101,10,0,44,32,102,105,120,101,100,32,72,0,44,32,109,111,98,105,108,101,32,72,0,44,32,105,115,111,116,111,112,105,99,0,80,114,101,112,114,111,99,101,115,115,101,100,0,82,101,115,117,108,116,32,102,111,114,0,37,115,32,67,111,109,112,111,110, -101,110,116,32,35,37,100,32,111,102,32,37,100,44,32,83,116,114,117,99,116,117,114,101,32,35,37,108,100,37,115,37,115,46,37,115,37,115,37,115,37,115,37,115,0,37,115,32,83,116,114,117,99,116,117,114,101,32,35,37,108,100,37,115,37,115,46,37,115,37,115,37,115,37,115,37,115,0,78,111,116,32,99,104,105,114,97,108,0,69,114,114,111,114,32,37,100,32,40,37,115,41,32,115,116,114,117,99,116,117,114,101,32,35,37,108,100,46,37,115,37,115,37,115,37,115,10,0,69,114,114,111,114,32,119,104,105,108,101,32,112,114,111, -99,101,115,115,105,110,103,32,112,111,108,121,109,101,114,45,114,101,108,97,116,101,100,32,105,110,112,117,116,0,37,100,93,0,32,91,43,49,93,0,69,109,112,116,121,32,115,116,114,117,99,116,117,114,101,0,84,111,111,32,109,97,110,121,32,97,116,111,109,115,32,91,99,104,101,99,107,32,32,39,76,97,114,103,101,77,111,108,101,99,117,108,101,115,39,32,115,119,105,116,99,104,93,0,67,97,110,110,111,116,32,114,101,99,111,110,99,105,108,101,32,115,116,101,114,101,111,98,111,110,100,32,112,97,114,105,116,105,101, -115,0,85,110,107,110,111,119,110,32,101,114,114,111,114,0,37,115,32,105,110,112,32,115,116,114,117,99,116,117,114,101,32,35,37,108,100,58,32,69,110,100,32,111,102,32,102,105,108,101,46,37,115,37,115,37,115,37,115,32,32,32,32,10,0,69,110,100,32,111,102,32,102,105,108,101,32,100,101,116,101,99,116,101,100,32,97,102,116,101,114,32,115,116,114,117,99,116,117,114,101,32,35,37,108,100,46,32,32,32,10,0,70,97,116,97,108,32,69,114,114,111,114,32,37,100,32,40,97,98,111,114,116,101,100,59,32,37,115,41,32,105, -110,112,32,115,116,114,117,99,116,117,114,101,32,35,37,108,100,46,37,115,37,115,37,115,37,115,10,0,77,111,108,102,105,108,101,0,73,110,67,104,73,0,69,114,114,111,114,32,37,100,32,40,110,111,32,37,115,59,32,37,115,41,32,105,110,112,32,115,116,114,117,99,116,117,114,101,32,35,37,108,100,46,37,115,37,115,37,115,37,115,10,0,87,97,114,110,105,110,103,58,32,40,37,115,41,32,105,110,112,32,115,116,114,117,99,116,117,114,101,32,35,37,108,100,46,37,115,37,115,37,115,37,115,10,0,67,97,110,110,111,116,32,101, -120,116,114,97,99,116,32,67,111,109,112,111,110,101,110,116,0,37,115,32,35,37,100,32,115,116,114,117,99,116,117,114,101,32,35,37,108,100,46,37,115,37,115,37,115,37,115,10,0,65,99,99,101,112,116,101,100,32,117,110,117,115,117,97,108,32,118,97,108,101,110,99,101,40,115,41,58,0,37,43,100,0,116,0,63,0,115,0,100,0,44,37,115,0,40,37,100,41,0,79,117,116,32,111,102,32,82,65,77,0,67,104,97,114,103,101,115,32,119,101,114,101,32,114,101,97,114,114,97,110,103,101,100,0,83,97,108,116,32,119,97,115,32,100,105, -115,99,111,110,110,101,99,116,101,100,0,37,100,0,48,68,32,80,97,114,105,116,105,101,115,32,82,101,99,111,110,99,105,108,105,97,116,105,111,110,32,102,97,105,108,101,100,58,0,77,101,116,97,108,32,119,97,115,32,100,105,115,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,100,105,115,99,111,110,110,101,99,116,32,109,101,116,97,108,32,101,114,114,111,114,0,67,111,112,111,108,121,109,101,114,32,99,111,110,116,97,105,110,115,32,97,32,115,105,110,103,108,101,32,117,110,105,116,0,83,105,110,103, -108,101,32,112,111,108,121,109,101,114,32,117,110,105,116,32,109,97,121,32,110,111,116,32,98,101,32,82,65,78,47,65,76,84,47,66,76,79,0,78,117,109,98,101,114,32,111,102,32,99,114,111,115,115,105,110,103,32,98,111,110,100,115,32,105,110,32,112,111,108,121,109,101,114,32,117,110,105,116,32,105,115,32,110,111,116,32,48,32,111,114,32,50,0,69,109,112,116,121,32,112,111,108,121,109,101,114,32,117,110,105,116,0,84,111,111,32,108,97,114,103,101,32,112,111,108,121,109,101,114,32,117,110,105,116,0,73,110,118, -97,108,105,100,32,97,116,111,109,32,110,117,109,98,101,114,32,105,110,32,112,111,108,121,109,101,114,32,117,110,105,116,0,83,116,97,114,32,97,116,111,109,32,105,110,115,105,100,101,32,112,111,108,121,109,101,114,32,117,110,105,116,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,0,80,111,108,121,109,101,114,32,67,79,80,32,117,110,105,116,32,99,111,110,116,97,105,110,115,32,98,114,97,99,107,101,116,45,99,114,111,115,115,105,110,103,32,98,111,110,100,115,44,32,110,111,116,32,115,117, -112,112,111,114,116,101,100,0,80,111,108,121,109,101,114,32,67,79,80,32,117,110,105,116,32,99,111,110,116,97,105,110,115,32,97,32,115,105,110,103,108,101,32,83,82,85,32,105,110,115,116,101,97,100,32,111,102,32,109,117,108,116,105,112,108,101,0,67,111,110,118,101,114,116,101,100,32,115,114,99,45,98,97,115,101,100,32,112,111,108,121,109,101,114,32,117,110,105,116,32,116,121,112,101,32,116,111,32,77,79,78,0,83,101,116,32,109,105,115,115,105,110,103,32,99,111,112,111,108,121,109,101,114,32,115,117,98, -116,121,112,101,32,116,111,32,82,65,78,0,73,103,110,111,114,101,32,99,111,110,110,101,99,116,105,111,110,32,112,97,116,116,101,114,110,32,102,111,114,32,115,114,99,45,98,97,115,101,100,32,112,111,108,121,109,101,114,32,117,110,105,116,0,85,110,114,101,99,111,103,110,105,122,101,100,32,107,105,110,100,32,111,102,32,115,111,117,114,99,101,45,98,97,115,101,100,32,114,101,112,114,101,115,101,110,116,101,100,32,112,111,108,121,109,101,114,32,117,110,105,116,0,73,110,118,97,108,105,100,32,112,111,108,121, -109,101,114,105,99,32,67,82,85,32,99,114,111,115,115,105,110,103,32,98,111,110,100,0,83,101,116,32,99,111,112,111,108,121,109,101,114,32,101,109,98,101,100,100,105,110,103,32,117,110,105,116,32,109,97,114,107,32,116,111,32,67,79,80,0,72,32,97,115,32,112,111,108,121,109,101,114,32,101,110,100,32,103,114,111,117,112,32,105,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,69,110,100,115,32,111,102,32,99,114,111,115,115,105,110,103,32,98,111,110,100,32,108,105,101,32,105,110,115,105,100,101, -32,112,111,108,121,109,101,114,32,117,110,105,116,0,83,101,116,32,109,105,115,115,105,110,103,32,99,111,112,111,108,121,109,101,114,32,117,110,105,116,32,99,111,110,110,101,99,116,105,111,110,32,116,111,32,69,85,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,40,112,111,108,121,109,101,114,115,41,0,67,111,117,108,100,32,110,111,116,32,114,101,99,111,103,110,105,122,101,32,116,121,112,101,32,111,102,32,112,111,108,121,109,101,114,32,117,110,105,116,0,73,110,118,97,108,105,100, -32,107,105,110,100,32,111,102,32,112,111,108,121,109,101,114,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,0,80,104,97,115,101,32,115,104,105,102,116,32,105,110,32,109,101,116,97,108,108,97,116,101,100,32,112,111,108,121,109,101,114,32,117,110,105,116,32,109,97,121,32,98,101,32,109,105,115,115,101,100,0,10,61,61,61,61,32,37,115,32,61,61,61,61,10,0,73,110,67,104,73,32,65,78,78,79,84,65,84,69,68,32,67,79,78,84,69,78,84,83,0,69,114,114,111,114,32,37,100,32,40,37,115,41,32,115,116,114,117, -99,116,117,114,101,32,35,37,108,100,32,99,111,109,112,111,110,101,110,116,32,37,100,46,37,115,37,115,37,115,37,115,10,0,87,97,114,110,105,110,103,32,40,37,115,41,32,115,116,114,117,99,116,117,114,101,32,35,37,108,100,46,37,115,37,115,37,115,37,115,10,0,65,109,98,105,103,117,111,117,115,32,115,116,101,114,101,111,58,0,99,101,110,116,101,114,40,115,41,0,98,111,110,100,40,115,41,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,17,35,53,85,16,34,52,6,16,15,78,59,80,59,65,115,59,83,98,59,79,59,83,59,83,101,59,84,101,59,0,78,59,80,59,65,115,59,83,98,59,79,59,83,59,83,101,59,84,101,59,67,59,83,105,0,72,68,84,0,72,0,68,0,84,0,72,101,0,76,105,0,66,101,0,66,0,67,0,78,0,79,0,70,0,78,101,0,78,97,0,77,103,0,65,108,0,83,105,0,80,0,83,0,67,108,0,65,114,0,75,0,67,97,0,83,99,0,84,105,0,86,0,67,114,0,77,110,0,70,101,0,67,111,0,78,105,0,67,117,0,90,110,0,71,97,0,71,101,0,65,115,0,83,101,0,66,114,0,75,114,0,82,98,0,83,114,0,89, -0,90,114,0,78,98,0,77,111,0,84,99,0,82,117,0,82,104,0,80,100,0,65,103,0,67,100,0,73,110,0,83,110,0,83,98,0,84,101,0,73,0,88,101,0,67,115,0,66,97,0,76,97,0,67,101,0,80,114,0,78,100,0,80,109,0,83,109,0,69,117,0,71,100,0,84,98,0,68,121,0,72,111,0,69,114,0,84,109,0,89,98,0,76,117,0,72,102,0,84,97,0,87,0,82,101,0,79,115,0,73,114,0,80,116,0,65,117,0,72,103,0,84,108,0,80,98,0,66,105,0,80,111,0,65,116,0,82,110,0,70,114,0,82,97,0,65,99,0,84,104,0,80,97,0,85,0,78,112,0,80,117,0,65,109,0,67,109,0,66,107,0,67, -102,0,69,115,0,70,109,0,77,100,0,78,111,0,76,114,0,82,102,0,68,98,0,83,103,0,66,104,0,72,115,0,77,116,0,68,115,0,82,103,0,67,110,0,78,104,0,70,108,0,77,99,0,76,118,0,84,115,0,79,103,0,90,122,0,63,63,0,43,45,94,0,73,110,67,104,73,61,0,37,115,40,123,39,105,110,99,104,105,39,58,39,37,115,39,44,32,39,97,117,120,105,110,102,111,39,58,39,37,115,39,44,32,39,119,97,114,110,105,110,103,39,58,39,37,115,39,44,39,101,114,114,111,114,39,58,39,37,115,39,44,39,107,101,121,39,58,39,37,115,39,125,41,0,118,111,105, -100,0,98,111,111,108,0,99,104,97,114,0,115,105,103,110,101,100,32,99,104,97,114,0,117,110,115,105,103,110,101,100,32,99,104,97,114,0,115,104,111,114,116,0,117,110,115,105,103,110,101,100,32,115,104,111,114,116,0,105,110,116,0,117,110,115,105,103,110,101,100,32,105,110,116,0,108,111,110,103,0,117,110,115,105,103,110,101,100,32,108,111,110,103,0,102,108,111,97,116,0,100,111,117,98,108,101,0,78,83,116,51,95,95,49,49,50,98,97,115,105,99,95,115,116,114,105,110,103,73,99,78,83,95,49,49,99,104,97,114,95, -116,114,97,105,116,115,73,99,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,99,69,69,69,69,0,78,83,116,51,95,95,49,50,49,95,95,98,97,115,105,99,95,115,116,114,105,110,103,95,99,111,109,109,111,110,73,76,98,49,69,69,69,0,115,116,100,58,58,115,116,114,105,110,103,0,78,83,116,51,95,95,49,49,50,98,97,115,105,99,95,115,116,114,105,110,103,73,104,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,104,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,104,69,69,69,69,0,115,116,100,58,58, -98,97,115,105,99,95,115,116,114,105,110,103,60,117,110,115,105,103,110,101,100,32,99,104,97,114,62,0,78,83,116,51,95,95,49,49,50,98,97,115,105,99,95,115,116,114,105,110,103,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,119,69,69,69,69,0,115,116,100,58,58,119,115,116,114,105,110,103,0,78,49,48,101,109,115,99,114,105,112,116,101,110,51,118,97,108,69,0,101,109,115,99,114,105,112,116,101,110,58,58,118,97,108,0,78,49,48,101,109, -115,99,114,105,112,116,101,110,49,49,109,101,109,111,114,121,95,118,105,101,119,73,99,69,69,0,101,109,115,99,114,105,112,116,101,110,58,58,109,101,109,111,114,121,95,118,105,101,119,60,99,104,97,114,62,0,101,109,115,99,114,105,112,116,101,110,58,58,109,101,109,111,114,121,95,118,105,101,119,60,115,105,103,110,101,100,32,99,104,97,114,62,0,78,49,48,101,109,115,99,114,105,112,116,101,110,49,49,109,101,109,111,114,121,95,118,105,101,119,73,97,69,69,0,101,109,115,99,114,105,112,116,101,110,58,58,109, -101,109,111,114,121,95,118,105,101,119,60,117,110,115,105,103,110,101,100,32,99,104,97,114,62,0,78,49,48,101,109,115,99,114,105,112,116,101,110,49,49,109,101,109,111,114,121,95,118,105,101,119,73,104,69,69,0,101,109,115,99,114,105,112,116,101,110,58,58,109,101,109,111,114,121,95,118,105,101,119,60,115,104,111,114,116,62,0,78,49,48,101,109,115,99,114,105,112,116,101,110,49,49,109,101,109,111,114,121,95,118,105,101,119,73,115,69,69,0,101,109,115,99,114,105,112,116,101,110,58,58,109,101,109,111,114, -121,95,118,105,101,119,60,117,110,115,105,103,110,101,100,32,115,104,111,114,116,62,0,78,49,48,101,109,115,99,114,105,112,116,101,110,49,49,109,101,109,111,114,121,95,118,105,101,119,73,116,69,69,0,101,109,115,99,114,105,112,116,101,110,58,58,109,101,109,111,114,121,95,118,105,101,119,60,105,110,116,62,0,78,49,48,101,109,115,99,114,105,112,116,101,110,49,49,109,101,109,111,114,121,95,118,105,101,119,73,105,69,69,0,101,109,115,99,114,105,112,116,101,110,58,58,109,101,109,111,114,121,95,118,105,101, -119,60,117,110,115,105,103,110,101,100,32,105,110,116,62,0,78,49,48,101,109,115,99,114,105,112,116,101,110,49,49,109,101,109,111,114,121,95,118,105,101,119,73,106,69,69,0,78,49,48,101,109,115,99,114,105,112,116,101,110,49,49,109,101,109,111,114,121,95,118,105,101,119,73,108,69,69,0,101,109,115,99,114,105,112,116,101,110,58,58,109,101,109,111,114,121,95,118,105,101,119,60,108,111,110,103,62,0,78,49,48,101,109,115,99,114,105,112,116,101,110,49,49,109,101,109,111,114,121,95,118,105,101,119,73,109,69, -69,0,101,109,115,99,114,105,112,116,101,110,58,58,109,101,109,111,114,121,95,118,105,101,119,60,117,110,115,105,103,110,101,100,32,108,111,110,103,62,0,101,109,115,99,114,105,112,116,101,110,58,58,109,101,109,111,114,121,95,118,105,101,119,60,105,110,116,56,95,116,62,0,101,109,115,99,114,105,112,116,101,110,58,58,109,101,109,111,114,121,95,118,105,101,119,60,117,105,110,116,56,95,116,62,0,101,109,115,99,114,105,112,116,101,110,58,58,109,101,109,111,114,121,95,118,105,101,119,60,105,110,116,49,54, -95,116,62,0,101,109,115,99,114,105,112,116,101,110,58,58,109,101,109,111,114,121,95,118,105,101,119,60,117,105,110,116,49,54,95,116,62,0,101,109,115,99,114,105,112,116,101,110,58,58,109,101,109,111,114,121,95,118,105,101,119,60,105,110,116,51,50,95,116,62,0,101,109,115,99,114,105,112,116,101,110,58,58,109,101,109,111,114,121,95,118,105,101,119,60,117,105,110,116,51,50,95,116,62,0,78,49,48,101,109,115,99,114,105,112,116,101,110,49,49,109,101,109,111,114,121,95,118,105,101,119,73,102,69,69,0,101,109, -115,99,114,105,112,116,101,110,58,58,109,101,109,111,114,121,95,118,105,101,119,60,102,108,111,97,116,62,0,78,49,48,101,109,115,99,114,105,112,116,101,110,49,49,109,101,109,111,114,121,95,118,105,101,119,73,100,69,69,0,101,109,115,99,114,105,112,116,101,110,58,58,109,101,109,111,114,121,95,118,105,101,119,60,100,111,117,98,108,101,62,0,78,49,48,101,109,115,99,114,105,112,116,101,110,49,49,109,101,109,111,114,121,95,118,105,101,119,73,101,69,69,0,101,109,115,99,114,105,112,116,101,110,58,58,109,101, -109,111,114,121,95,118,105,101,119,60,108,111,110,103,32,100,111,117,98,108,101,62,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117, -108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32, -108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115, -101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32, -100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114, -121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112, -101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118, -97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32, -100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99, -111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107, -101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111, -116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101, -114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114, -111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0,17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17, -3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0, -15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,45,43,32,32,32,48,88,48,120,0,40,110,117,108, -108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,78,65,78,0,46,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,1,2,3,4,5,6,7,8,9,255,255,255,255,255,255,255,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,255,255,255,255,255,255,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25, -26,27,28,29,30,31,32,33,34,35,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,1,2,4,7,3,6,5,0,105,110,102,105,110,105,116,121,0,110,97,110,0,78,49,48,95,95,99,120,120,97,98,105,118,49,50,48,95,95,115,105,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,54,95,95,115,104,105,109,95,116,121,112,101,95,105,110,102,111,69,0,83,116,57,116,121,112,101,95,105,110,102,111,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,55,95,95,99,108,97,115,115,95,116,121,112, -101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,50,51,95,95,102,117,110,100,97,109,101,110,116,97,108,95,116,121,112,101,95,105,110,102,111,69,0,118,0,98,0,97,0,105,0,106,0,108,0,102,0,78,49,48,95,95,99,120,120,97,98,105,118,49,50,49,95,95,118,109,105,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,0],"i8",4,x.a+81960);var Wa=y,y=y+16;d._i64Subtract=Xa;function Ya(a){d.___errno_location&&(G[d.___errno_location()>>2]=a);return a} -function Za(){for(var a=Array(256),b=0;256>b;++b)a[b]=String.fromCharCode(b);$a=a}var $a=void 0;function S(a){for(var b="";K[a];)b+=$a[K[a++]];return b}var T={},ab={},bb={};function cb(a){if(void 0===a)return"_unknown";a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?"_"+a:a}function db(a,b){a=cb(a);return(new Function("body","return function "+a+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(b)} -function eb(a,b){var c=db(b,function(a){this.name=b;this.message=a;a=Error(a).stack;void 0!==a&&(this.stack=this.toString()+"\n"+a.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(a.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return c}var fb=void 0;function gb(a){throw new fb(a);}var hb=void 0;function ib(a){throw new hb(a);} -function U(a,b,c){c=c||{};if(!("argPackAdvance"in b))throw new TypeError("registerType registeredInstance requires argPackAdvance");var e=b.name;a||gb('type "'+e+'" must have a positive integer typeid pointer');if(ab.hasOwnProperty(a)){if(c.J)return;gb("Cannot register type '"+e+"' twice")}ab[a]=b;delete bb[a];T.hasOwnProperty(a)&&(b=T[a],delete T[a],b.forEach(function(a){a()}))}d._memset=jb; -function kb(a){switch(a){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+a);}}d._bitshift64Shl=lb;function M(){}d._free=M;function I(a){return x.c(a+8)+8&4294967288}d._malloc=I;function mb(a){return this.fromWireType(N[a>>2])}var nb=pa;d._i64Add=ob;function pb(){void 0===pb.b&&(pb.b=Date.now());return 1E3*(Date.now()-pb.b)|0} -function qb(a){if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}function rb(a,b,c){switch(b){case 0:return c?function(a){return D[a]}:function(a){return K[a]};case 1:return c?function(a){return E[a>>1]}:function(a){return Ga[a>>1]};case 2:return c?function(a){return G[a>>2]}:function(a){return N[a>>2]};default:throw new TypeError("Unknown integer type: "+a);}}var sb=[],V=[{},{value:void 0},{value:null},{value:!0},{value:!1}]; -function tb(a){4>2]}var yb={}; -d._bitshift64Lshr=zb;function Ab(a,b){switch(b){case 2:return function(a){return this.fromWireType(ta[a>>2])};case 3:return function(a){return this.fromWireType(ua[a>>3])};default:throw new TypeError("Unknown float type: "+a);}}function Bb(a,b){Q.push(function(){x.g("vi",a,[b])});Bb.level=Q.length}d._memcpy=Cb;function L(a){L.b||(z=Fa(),L.b=!0,assert(x.c),L.d=x.c,x.c=function(){B("cannot dynamically allocate, sbrk now has control")});var b=z;return 0==a||L.d(a)?b:4294967295}d._memmove=Db; -function Eb(){return!!Eb.d}var Fb=0,Gb={};function Hb(){var a=Fb;if(!a)return(Y.setTempRet0(0),0)|0;var b=Gb[a],c=b.type;if(!c)return(Y.setTempRet0(0),a)|0;var e=Array.prototype.slice.call(arguments);d.___cxa_is_pointer_type(c);Hb.buffer||(Hb.buffer=I(4));G[Hb.buffer>>2]=a;for(var a=Hb.buffer,f=0;f>2],b.B=a,(Y.setTempRet0(e[f]),a)|0;a=G[a>>2];return(Y.setTempRet0(c),a)|0} -function Z(a,b){W=b;try{var c=X(),e=X(),f=X(),g=0;Z.buffer||(Z.b=[null,[],[]],Z.d=function(a,b){var c=Z.b[a];assert(c);0===b||10===b?((1===a?d.print:d.printErr)(za(c,0)),c.length=0):c.push(b)});for(var h=0;h>2],m=G[e+(8*h+4)>>2],p=0;p>2;return new f(N.buffer,N[a+1],N[a])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=S(c);U(a,{name:c,fromWireType:e,argPackAdvance:8,readValueFromPointer:e},{J:!0})},throwInternalError:ib,get_first_emval:vb,_abort:function(){d.abort()},_llvm_fabs_f64:nb,throwBindingError:gb,___gxx_personality_v0:function(){},extendError:eb,__embind_register_void:function(a,b){b=S(b);U(a,{Y:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})}, -__ZSt18uncaught_exceptionv:Eb,getShiftFromSize:kb,embind_init_charCodes:Za,___setErrNo:Ya,__emval_register:xb,_sbrk:L,__embind_register_std_wstring:function(a,b,c){c=S(c);var e,f;2===b?(e=function(){return Ga},f=1):4===b&&(e=function(){return N},f=2);U(a,{name:c,fromWireType:function(a){for(var b=e(),c=N[a>>2],m=Array(c),p=a+4>>f,q=0;q>2]=m;for(var q=p+4>>f,u=0;u>g])},e:null})},___resumeException:function(a){Fb||(Fb=a);var b;a:{if(a&&!Gb[a])for(b in Gb)if(Gb[b].B===a)break a;b=a}b&&(Gb[b].w=0);throw a+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch.";},___cxa_find_matching_catch:Hb,_sysconf:function(a){switch(a){case 30:return 4096;case 85:return O/4096;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809; -case 79:return 0;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32; -case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1E3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return"object"===typeof navigator?navigator.hardwareConcurrency||1:1}Ya(22);return-1}, -_embind_repr:qb,__embind_register_std_string:function(a,b){b=S(b);U(a,{name:b,fromWireType:function(a){for(var b=N[a>>2],f=Array(b),g=0;g> -2]=n;for(var p=0;p>>n};U(a,{name:b,fromWireType:g,toWireType:function(a,c){if("number"!==typeof c&&"boolean"!==typeof c)throw new TypeError('Cannot convert "'+qb(c)+'" to '+this.name);if(cf)throw new TypeError('Passing a number "'+qb(c)+'" from JS side to C/C++ side to an argument of type "'+b+'", which is outside the valid range ['+e+", "+f+"]!");return c| -0},argPackAdvance:8,readValueFromPointer:rb(b,h,0!==e),e:null})},__emval_decref:tb,__embind_register_float:function(a,b,c){c=kb(c);b=S(b);U(a,{name:b,fromWireType:function(a){return a},toWireType:function(a,b){if("number"!==typeof b&&"boolean"!==typeof b)throw new TypeError('Cannot convert "'+qb(b)+'" to '+this.name);return b},argPackAdvance:8,readValueFromPointer:Ab(b,c),e:null})},makeLegalFunctionName:cb,___syscall54:function(a,b){W=b;return 0},___unlock:function(){},init_emval:wb,whenDependentTypesAreResolved:function(a, -b,c){function e(b){b=c(b);b.length!==a.length&&ib("Mismatched type converter count");for(var e=0;e>2]=b);return b},___syscall140:function(a,b){W=b;try{var c=yb.v(),e=X(),f=X(),g=X(),h=X();assert(0===e);FS.Z(c,f,h);G[g>>2]=c.position;c.I&&0===f&&0===h&&(c.I=null);return 0}catch(n){return"undefined"!==typeof FS&&n instanceof FS.k||B(n),-n.n}},___syscall145:function(a,b){W=b;try{var c=yb.v(),e=X(),f=X();return yb.R(c,e,f)}catch(g){return"undefined"!== -typeof FS&&g instanceof FS.k||B(g),-g.n}},___syscall146:Z,STACKTOP:w,STACK_MAX:Ka,tempDoublePtr:Wa,ABORT:ha,cttz_i8:Ib};// EMSCRIPTEN_START_ASM -var Y=(function(global,env,buffer) { -"use asm";var a=new global.Int8Array(buffer);var b=new global.Int16Array(buffer);var c=new global.Int32Array(buffer);var d=new global.Uint8Array(buffer);var e=new global.Uint16Array(buffer);var f=new global.Uint32Array(buffer);var g=new global.Float32Array(buffer);var h=new global.Float64Array(buffer);var i=env.STACKTOP|0;var j=env.STACK_MAX|0;var k=env.tempDoublePtr|0;var l=env.ABORT|0;var m=env.cttz_i8|0;var n=0;var o=0;var p=0;var q=0;var r=global.NaN,s=global.Infinity;var t=0,u=0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0.0;var C=0;var D=0;var E=0;var F=0;var G=0;var H=0;var I=0;var J=0;var K=0;var L=0;var M=global.Math.floor;var N=global.Math.abs;var O=global.Math.sqrt;var P=global.Math.pow;var Q=global.Math.cos;var R=global.Math.sin;var S=global.Math.tan;var T=global.Math.acos;var U=global.Math.asin;var V=global.Math.atan;var W=global.Math.atan2;var X=global.Math.exp;var Y=global.Math.log;var Z=global.Math.ceil;var _=global.Math.imul;var $=global.Math.min;var aa=global.Math.clz32;var ba=env.abort;var ca=env.assert;var da=env.invoke_iiiiiiii;var ea=env.invoke_iiii;var fa=env.invoke_viiiii;var ga=env.invoke_iiiiiiiiiiiiiiiii;var ha=env.invoke_iiiiiiiiiiiiiiiiii;var ia=env.invoke_ii;var ja=env.invoke_vi;var ka=env.invoke_iiiii;var la=env.invoke_viiiiii;var ma=env.invoke_iii;var na=env.invoke_viiii;var oa=env._pthread_cleanup_pop;var pa=env.floatReadValueFromPointer;var qa=env.simpleReadValueFromPointer;var ra=env.integerReadValueFromPointer;var sa=env.__embind_register_memory_view;var ta=env.throwInternalError;var ua=env.get_first_emval;var va=env._abort;var wa=env._llvm_fabs_f64;var xa=env.throwBindingError;var ya=env.___gxx_personality_v0;var za=env.extendError;var Aa=env.__embind_register_void;var Ba=env.__ZSt18uncaught_exceptionv;var Ca=env.getShiftFromSize;var Da=env.embind_init_charCodes;var Ea=env.___setErrNo;var Fa=env.__emval_register;var Ga=env._sbrk;var Ha=env.__embind_register_std_wstring;var Ia=env._emscripten_memcpy_big;var Ja=env.__embind_register_bool;var Ka=env.___resumeException;var La=env.___cxa_find_matching_catch;var Ma=env._sysconf;var Na=env._embind_repr;var Oa=env.__embind_register_std_string;var Pa=env._clock;var Qa=env.createNamedFunction;var Ra=env.__embind_register_emval;var Sa=env.readLatin1String;var Ta=env._pthread_self;var Ua=env.__embind_register_integer;var Va=env.__emval_decref;var Wa=env.__embind_register_float;var Xa=env.makeLegalFunctionName;var Ya=env.___syscall54;var Za=env.___unlock;var _a=env.init_emval;var $a=env.whenDependentTypesAreResolved;var ab=env._emscripten_run_script;var bb=env.registerType;var cb=env.___lock;var db=env.___syscall6;var eb=env._pthread_cleanup_push;var fb=env.count_emval_handles;var gb=env._time;var hb=env.___syscall140;var ib=env.___syscall145;var jb=env.___syscall146;var kb=0.0; -// EMSCRIPTEN_START_FUNCS -function td(f,g,h,j,k,l,m,n,o,p,q,r){f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;var s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;H=i;i=i+64|0;t=H+16|0;E=H+6|0;D=H;v=(o|0)!=0;A=(l|0)!=0;a:do if(A|v){F=g+(h*144|0)+124|0;s=a[F>>0]|0;if(s<<24>>24){u=b[k+(h<<1)>>1]|0;if(s<<24>>24>0?(j|0)<0&s<<24>>24<3:0){s=a[g+(h*144|0)+73>>0]|0;j=0;while(1){if((j|0)>=(s|0))break;b[t+(j<<1)>>1]=j;j=j+1|0}c[f+8>>2]=g+(h*144|0)+6;c[f+12>>2]=k;z=ih(f,t,s,2,10)|0}else z=j}else{if(!(b[g+(h*144|0)+94>>1]|0)){s=0;break}z=j;u=b[k+(h<<1)>>1]|0}b:do if(v?(b[g+(h*144|0)+94>>1]|0)!=0:0){j=0;t=0;while(1){if((t|0)>=3)break;s=b[g+(h*144|0)+94+(t<<1)>>1]|0;if(!(s<<16>>16))break;b[E+(t<<1)>>1]=t;b[D+(t<<1)>>1]=(s&65535)+65535;j=((d[g+(h*144|0)+118+t>>0]|0)>>>3&1)+j|0;t=t+1|0}y=(j|0)!=0;c:do if((r|0)==0&y|((r|0)<1|y)^1)s=0;else{c[f+8>>2]=D;c[f+12>>2]=k;ih(f,E,t,2,10)|0;w=h+1|0;y=0;while(1){if((y|0)>=(t|0))break;v=e[E+(y<<1)>>1]|0;f=e[D+(v<<1)>>1]|0;x=b[k+(f<<1)>>1]|0;d:do if((x&65535)<(u&65535)?(B=d[g+(h*144|0)+118+v>>0]&7,B|0):0){do if((B+-1|0)>>>0<4)j=B;else{s=a[F>>0]|0;j=a[g+(f*144|0)+124>>0]|0;if(((s+-1<<24>>24|j+-1<<24>>24)&255)<2?(C=g+(h*144|0)+112+v|0,J=a[C>>0]|0,I=J<<24>>24,((J<<24>>24>-1?I:0-I|0)|0)>49):0){j=0;while(1){if((j|0)>=3){s=-30012;break c}s=b[g+(f*144|0)+94+(j<<1)>>1]|0;if(!(s<<16>>16)){s=-30012;break c}if((w|0)==(s&65535|0)){s=j;break}j=j+1|0}if((s|0)<=-1){s=-30012;break c}j=ff(g,h,v,k)|0;s=ff(g,f,s,k)|0;if((s+-1|j+-1)>>>0>=2){s=-30012;break c}j=2-((s+j+((d[C>>0]|0)>>>7&255)|0)%2|0)|0;break}s=s<<24>>24>j<<24>>24?s:j;if(!(s<<24>>24))break d;j=(s+-1&255)<2?4:s<<24>>24}while(0);s=c[p>>2]|0;if((s|0)>=(q|0)){s=-3e4;break c}b[o+(s*6|0)>>1]=u;b[o+(s*6|0)+2>>1]=x;a[o+(s*6|0)+4>>0]=j;c[p>>2]=s+1}while(0);y=y+1|0}G=39;break b}while(0)}else G=39;while(0);do if((G|0)==39){if((r|0)>0|A^1){i=H;return 0}if(!(b[g+(h*144|0)+94>>1]|0)){j=c[m>>2]|0;if((j|0)>=(n|0)){s=-3e4;break}b[l+(j<<2)>>1]=u;J=a[F>>0]|0;s=J<<24>>24;if((J+-1&255)<2)s=2-((s+z|0)%2|0)|0;a[l+(j<<2)+2>>0]=s;c[m>>2]=j+1}s=0;break a}while(0)}else s=0;while(0);i=H;return s|0}function ud(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=0;while(1){if((e|0)>=(b|0))break;hh(a+(e*144|0)+124|0,a+(e*144|0)+125|0,1);hh(a+(e*144|0)+128|0,a+(e*144|0)+129|0,1);hh(a+(e*144|0)+126|0,a+(e*144|0)+127|0,1);hh(a+(e*144|0)+131|0,a+(e*144|0)+132|0,1);hh(a+(e*144|0)+94|0,a+(e*144|0)+100|0,6);hh(a+(e*144|0)+106|0,a+(e*144|0)+109|0,3);hh(a+(e*144|0)+112|0,a+(e*144|0)+115|0,3);hh(a+(e*144|0)+118|0,a+(e*144|0)+121|0,3);e=e+1|0}c[d>>2]=(c[d>>2]|0)==0&1;return}function vd(a,b){a=a|0;b=b|0;c[a+60>>2]=c[b+76>>2];c[a+64>>2]=c[b+80>>2];c[a+68>>2]=c[b+84>>2];c[a+72>>2]=c[b+88>>2];c[a+108>>2]=c[b+184>>2];c[a+124>>2]=c[b+196>>2];c[a+100>>2]=c[b+176>>2];c[a+116>>2]=c[b+188>>2];return}function wd(a,b){a=a|0;b=b|0;c[a+60>>2]=c[b+60>>2];c[a+64>>2]=c[b+64>>2];c[a+68>>2]=c[b+68>>2];c[a+72>>2]=c[b+72>>2];c[a+108>>2]=c[b+108>>2];c[a+124>>2]=c[b+124>>2];c[a+100>>2]=c[b+100>>2];c[a+116>>2]=c[b+116>>2];c[a+176>>2]=c[b+176>>2];c[a+188>>2]=c[b+188>>2];return}function xd(a,b,d,f,g,h){a=a|0;b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;k=h+116|0;c[k>>2]=0;l=h+100|0;c[l>>2]=0;m=h+64|0;n=h+124|0;o=h+60|0;j=h+108|0;i=0;h=0;while(1){if(!((h|0)==0&(i|0)<(d|0))){i=0;break}h=td(a,b,e[g+(i<<1)>>1]|0,-1,f,c[m>>2]|0,k,c[n>>2]|0,c[o>>2]|0,l,c[j>>2]|0,0)|0;i=i+1|0}while(1){if(!((h|0)==0&(i|0)<(d|0)))break;h=td(a,b,e[g+(i<<1)>>1]|0,-1,f,c[m>>2]|0,k,c[n>>2]|0,c[o>>2]|0,l,c[j>>2]|0,1)|0;i=i+1|0}return h|0}function yd(c,f,g,h,j,k){c=c|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0;ea=i;i=i+32|0;ca=ea+18|0;da=ea+12|0;aa=ea+6|0;ba=ea;W=ca+2|0;X=da+2|0;$=0;l=0;a:while(1){if(($|0)>=(g|0))break;U=f+($*144|0)+124|0;V=a[U>>0]|0;b:do if((V<<24>>24!=0?(b[f+($*144|0)+94>>1]|0)!=0:0)?((V&7)+-1|0)>>>0<2:0){N=b[j+($<<1)>>1]|0;O=N&65535;P=O+-1|0;Q=a[f+($*144|0)+73>>0]|0;R=Q<<24>>24;S=R+-1|0;T=(S|0)==2;V=0;while(1){if((V|0)>=3)break b;m=b[f+($*144|0)+94+(V<<1)>>1]|0;if(!(m<<16>>16))break b;r=(m&65535)+-1|0;m=0;n=0;while(1){if((n|0)>=3)break;M=b[f+(r*144|0)+94+(n<<1)>>1]|0;m=M&65535;if(M<<16>>16==0|(m+-1|0)==($|0))break;n=n+1|0}if((m+-1|0)!=($|0)){l=-30010;break a}L=f+($*144|0)+118+V|0;m=a[L>>0]|0;M=f+(r*144|0)+118+n|0;if(m<<24>>24!=(a[M>>0]|0)){l=-30010;break a}do if((((($|0)>=(r|0)?((m&7)+-1|0)>>>0>=4:0)?(Y=m<<24>>24,Z=Y&7,(Z|0)!=0):0)?((d[U>>0]&7)+-1|0)>>>0<2:0)?(_=f+(r*144|0)+124|0,(Z|0)==6?((d[_>>0]&7)+-1|0)>>>0<2:0):0){q=Y>>>3;H=b[j+(r<<1)>>1]|0;K=f+($*144|0)+106+V|0;o=a[K>>0]|0;I=b[j+(e[f+($*144|0)+6+(o<<1)>>1]<<1)>>1]|0;J=a[f+(r*144|0)+73>>0]|0;p=0;m=0;while(1){if((p|0)>=(R|0))break;if((p|0)!=(o|0)){b[ca+(m<<1)>>1]=b[j+(e[f+($*144|0)+6+(p<<1)>>1]<<1)>>1]|0;m=m+1|0}p=p+1|0}D=q&7;G=J<<24>>24;if((m|0)==2){if((b[ca>>1]|0)==(b[W>>1]|0))break;F=ih(c,ca,2,2,12)|0}else F=0;E=f+(r*144|0)+106+n|0;n=a[E>>0]|0;o=0;m=0;while(1){if((o|0)>=(G|0))break;if((o|0)!=(n|0)){b[da+(m<<1)>>1]=b[j+(e[f+(r*144|0)+6+(o<<1)>>1]<<1)>>1]|0;m=m+1|0}o=o+1|0}if((m|0)==2){if((b[da>>1]|0)==(b[X>>1]|0))break;C=ih(c,da,2,2,12)|0}else C=0;y=(D|0)==0;z=G+-1|0;A=(z|0)==2;B=0;n=-1;m=-4;while(1){if((O|0)<=(B|0))break;w=e[k+(P-B<<1)>>1]|0;if(N<<16>>16!=(b[j+(w<<1)>>1]|0))break;if((a[f+(w*144|0)+73>>0]|0)==Q<<24>>24)x=0;else{l=-30010;break a}c:while(1){if((x|0)>=(R|0))break;o=e[f+(w*144|0)+6+(x<<1)>>1]|0;do if(I<<16>>16==(b[j+(o<<1)>>1]|0)){if(!y){p=0;q=w;while(1){if((p|0)>=(D|0))break;if((a[f+(o*144|0)+73>>0]|0)!=2)break;if(a[f+(o*144|0)+75>>0]|0)break;v=o;p=p+1|0;o=e[f+(o*144|0)+6+(((e[f+(o*144|0)+6>>1]|0)==(q|0)&1)<<1)>>1]|0;q=v}if((p|0)!=(D|0)){o=n;break}if(H<<16>>16!=(b[j+(o<<1)>>1]|0)){o=n;break}}else q=w;if((a[f+(o*144|0)+73>>0]|0)==J<<24>>24){m=0;t=0}else{l=-30010;break a}while(1){if((t|0)>=(R|0))break;d:do if((t|0)!=(x|0)){s=e[f+(w*144|0)+6+(t<<1)>>1]|0;r=j+(s<<1)|0;p=0;while(1){if((p|0)>=(S|0))break d;if((b[r>>1]|0)==(b[ca+(p<<1)>>1]|0))break;p=p+1|0}b[aa+(p<<1)>>1]=b[h+(s<<1)>>1]|0;m=m+1|0}while(0);t=t+1|0}if((m|0)!=(S|0)){l=-30010;break a}if(T)v=ih(c,aa,2,2,12)|0;else v=0;p=0;m=-1;u=0;while(1){if((u|0)>=(G|0)){o=p;break}t=e[f+(o*144|0)+6+(u<<1)>>1]|0;e:do if((t|0)==(q|0))m=u;else{s=j+(t<<1)|0;r=0;while(1){if((r|0)>=(z|0))break e;if((b[s>>1]|0)==(b[da+(r<<1)>>1]|0))break;r=r+1|0}b[ba+(r<<1)>>1]=b[h+(t<<1)>>1]|0;p=p+1|0}while(0);u=u+1|0}if((m|0)<0|(o|0)!=(z|0)){l=-30010;break a}if(A)m=ih(c,ba,2,2,12)|0;else m=0;m=(m+v|0)%2|0;if((n|0)<0){o=m;break}if((n|0)==(m|0)){o=n;m=n}else break c}else o=n;while(0);x=x+1|0;n=o}if((n|0)<0|(n|0)==(m|0))B=B+1|0;else break}if((n|0)==(m|0)){m=(G+R+F+C+n+(a[U>>0]|0)+(a[_>>0]|0)+(a[K>>0]|0)+(a[E>>0]|0)|0)%2|0;n=a[f+($*144|0)+112+V>>0]|0;K=n<<24>>24;if(((n<<24>>24>-1?K:0-K|0)|0)<50)m=4;else m=n<<24>>24>0?2-m|0:m+1|0;a[L>>0]=d[L>>0]&248|m;a[M>>0]=d[M>>0]&248|m;l=l+1|0}}while(0);V=V+1|0}}while(0);$=$+1|0}i=ea;return l|0}function zd(c,f,g,h){c=c|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=0;i=0;a:while(1){if((I|0)>=(f|0))break;b:do if((a[c+(I*144|0)+124>>0]|0)!=0?(b[c+(I*144|0)+94>>1]|0)!=0:0){E=b[g+(I<<1)>>1]|0;F=E&65535;B=F+-1|0;C=a[c+(I*144|0)+73>>0]|0;D=C<<24>>24;G=0;while(1){if((G|0)>=3)break b;j=b[c+(I*144|0)+94+(G<<1)>>1]|0;if(!(j<<16>>16))break b;l=(j&65535)+-1|0;A=b[g+(l<<1)>>1]|0;c:do if(((A&65535)>=(E&65535)?!((I|0)<(l|0)?A<<16>>16==E<<16>>16:0):0)?(H=a[c+(I*144|0)+118+G>>0]|0,(H&64)==0):0){j=0;k=0;while(1){if((k|0)>=3)break;z=b[c+(l*144|0)+94+(k<<1)>>1]|0;j=z&65535;if(z<<16>>16==0|(j+-1|0)==(I|0))break;k=k+1|0}if((j+-1|0)!=(I|0)){i=-30010;break a}j=H<<24>>24;if(H<<24>>24!=(a[c+(l*144|0)+118+k>>0]|0)){i=-30010;break a}z=j&7;x=j>>>3&7;y=b[g+(e[c+(I*144|0)+6+(a[c+(I*144|0)+106+G>>0]<<1)>>1]<<1)>>1]|0;w=b[g+(e[c+(l*144|0)+6+(a[c+(l*144|0)+106+k>>0]<<1)>>1]<<1)>>1]|0;s=a[c+(l*144|0)+73>>0]|0;t=s<<24>>24;u=(x|0)==0;j=-1;v=0;while(1){if((F|0)<=(v|0))break;q=e[h+(B-v<<1)>>1]|0;if(E<<16>>16!=(b[g+(q<<1)>>1]|0))break;if((a[c+(q*144|0)+73>>0]|0)!=C<<24>>24){i=-30010;break a}r=c+(q*144|0)+131|0;if(!(a[r>>0]|0)){a[r>>0]=1;p=0}else p=0;while(1){if((p|0)>=(D|0))break;k=e[c+(q*144|0)+6+(p<<1)>>1]|0;do if(y<<16>>16==(b[g+(k<<1)>>1]|0)){if(!u){l=0;m=q;while(1){if((l|0)>=(x|0))break;if((a[c+(k*144|0)+73>>0]|0)!=2)break;if(a[c+(k*144|0)+75>>0]|0)break;o=k;l=l+1|0;k=e[c+(k*144|0)+6+(((e[c+(k*144|0)+6>>1]|0)==(m|0)&1)<<1)>>1]|0;m=o}if((l|0)!=(x|0))break;if(A<<16>>16!=(b[g+(k<<1)>>1]|0))break;if(w<<16>>16!=(b[g+(m<<1)>>1]|0)){i=-30010;break a}}else m=q;if((a[c+(k*144|0)+73>>0]|0)==s<<24>>24)l=0;else{i=-30010;break a}while(1){if((l|0)>=(t|0)){i=-30010;break a}if((m|0)==(e[c+(k*144|0)+6+(l<<1)>>1]|0))break;l=l+1|0}if((l|0)<0){i=-30010;break a}n=c+(k*144|0)+131|0;if(!(a[n>>0]|0)){a[n>>0]=1;l=0;m=0}else{l=0;m=0}while(1){if((m|0)>=3){o=m;break}o=b[c+(q*144|0)+94+(m<<1)>>1]|0;l=o&65535;if(o<<16>>16==0|(l+-1|0)==(k|0)){o=m;break}m=m+1|0}if((l+-1|0)==(k|0)){l=0;m=0}else{a[n>>0]=2;a[r>>0]=2;j=1;break}while(1){if((m|0)>=3)break;n=b[c+(k*144|0)+94+(m<<1)>>1]|0;l=n&65535;if(n<<16>>16==0|(l+-1|0)==(q|0))break;m=m+1|0}if((l+-1|0)!=(q|0)){i=-30010;break a}l=a[c+(q*144|0)+118+o>>0]|0;if(l<<24>>24!=(a[c+(k*144|0)+118+m>>0]|0)){j=1;break}if((l&7|0)!=(z|0)){j=1;break}j=(j|0)<0?0:j}while(0);p=p+1|0}v=v+1|0}if((z+-1|0)>>>0<4&(j|0)==0){r=0;while(1){if((F|0)<=(r|0))break c;q=e[h+(B-r<<1)>>1]|0;if(E<<16>>16==(b[g+(q<<1)>>1]|0))p=0;else break c;while(1){if((p|0)>=3)break;j=b[c+(q*144|0)+94+(p<<1)>>1]|0;if(!(j<<16>>16))break;o=(j&65535)+-1|0;do if((b[g+(o<<1)>>1]|0)==A<<16>>16){j=0;k=0;while(1){if((k|0)>=3)break;z=b[c+(o*144|0)+94+(k<<1)>>1]|0;j=z&65535;if(z<<16>>16==0|(j+-1|0)==(q|0))break;k=k+1|0}if((j+-1|0)!=(q|0)){i=-30010;break a}l=c+(q*144|0)+118+p|0;m=a[l>>0]|0;n=m&64;j=c+(o*144|0)+118+k|0;k=a[j>>0]&64;if(((((k&255)>>>6^1)&255)+(n>>>6^1)|0)!=2)if((n|0)==0|k<<24>>24==0){i=-30010;break a}else break;else{a[l>>0]=m|64;a[j>>0]=d[j>>0]|64;i=i+1|0;break}}while(0);p=p+1|0}r=r+1|0}}}while(0);G=G+1|0}}while(0);I=I+1|0}return i|0}function Ad(c,d,f,g,h,i){c=c|0;d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=d&65535;m=a[c+(l*144|0)+73>>0]|0;j=32767;n=0;d=32767;while(1){if((n|0)>=(m|0))break;k=b[c+(l*144|0)+6+(n<<1)>>1]|0;if(k<<16>>16!=f<<16>>16?(o=b[i+((k&65535)<<1)>>1]|0,(j&65535)>(o&65535)):0){p=(o&65535)>(e[h>>1]|0);j=p?o:j;d=p?k:d}n=n+1|0}if((j&65535)<32767){b[h>>1]=j;b[g>>1]=d;d=1}else d=0;return d|0}function Bd(c,d,e,f,g,h,j,k,l,m,n){c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=i;i=i+16|0;r=v+2|0;s=v;o=b[h>>1]|0;if((o&65535)>32766)o=0;else o=b[n+((o&65535)<<1)>>1]|0;b[r>>1]=o;o=b[j>>1]|0;if((o&65535)>32766)o=0;else o=b[n+((o&65535)<<1)>>1]|0;b[s>>1]=o;do if((((Ad(c,d,e,h,r,n)|0)!=0?(Ad(c,f,g,j,s,n)|0)!=0:0)?(t=b[h>>1]|0,p=t&65535,u=b[j>>1]|0,q=u&65535,(b[m+(p<<1)>>1]|0)==(b[m+(q<<1)>>1]|0)):0)?(b[k+(p<<1)>>1]|0)==(b[l+(q<<1)>>1]|0):0){d=d&65535;p=0;o=0;while(1){if((p|0)>=3){s=o;break}if(!(b[c+(d*144|0)+94+(p<<1)>>1]|0)){s=o;break}g=(b[c+(d*144|0)+6+(a[c+(d*144|0)+106+p>>0]<<1)>>1]|0)==t<<16>>16;o=g&1;if(g){s=o;break}p=p+1|0}r=f&65535;q=0;o=0;while(1){if((q|0)>=3)break;if(!(b[c+(r*144|0)+94+(q<<1)>>1]|0))break;f=(b[c+(r*144|0)+6+(a[c+(r*144|0)+106+q>>0]<<1)>>1]|0)==u<<16>>16;o=f&1;if(f)break;q=q+1|0}if((s|0)==(o|0)){if(s|0){o=a[c+(d*144|0)+118+p>>0]|0;if(o<<24>>24!=(a[c+(r*144|0)+118+q>>0]|0)){o=0;break}if(((o&7)+-1|0)>>>0>=2){o=0;break}}o=1}else o=0}else o=0;while(0);i=v;return o|0}function Cd(c,d,e,f,g,h,j,k,l,m){c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+16|0;r=t+2|0;s=t;m=m+1<<16>>16;n=e&65535;b[h+(n<<1)>>1]=m;q=g&65535;b[j+(q<<1)>>1]=m;o=a[c+(n*144|0)+126>>0]|0;p=o&255;a:do if(o<<24>>24==(a[c+(q*144|0)+126>>0]|0)){if(o<<24>>24?((p&7)+-1|0)>>>0>=2:0){m=0;break}p=c+(n*144|0)+73|0;n=a[p>>0]|0;if(n<<24>>24==(a[c+(q*144|0)+73>>0]|0)){if(n<<24>>24!=1){b[r>>1]=32767;b[s>>1]=32767;o=1;while(1){if((o|0)>=(n<<24>>24|0))break;if(!(Bd(c,e,d,g,f,r,s,h,j,k,l)|0)){m=0;break a}n=b[r>>1]|0;if(!(b[h+((n&65535)<<1)>>1]|0)){m=Cd(c,e,n,g,b[s>>1]|0,h,j,k,l,m)|0;if(!(m<<16>>16)){m=0;break a}}n=a[p>>0]|0;o=o+1|0}b[r>>1]=32767;b[s>>1]=32767;o=1;while(1){if((o|0)>=(n<<24>>24|0))break a;if(!(Bd(c,e,d,g,f,r,s,h,j,k,l)|0)){m=0;break a}n=a[p>>0]|0;o=o+1|0}}}else m=0}else m=0;while(0);i=t;return m|0}function Dd(f,g,h,j,k){f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=i;i=i+16|0;E=F;A=E+2|0;B=g<<1;C=k+100|0;y=k+60|0;z=0;l=0;k=0;a:while(1){if((z|0)>=(g|0))break;x=f+(z*144|0)+73|0;b:do if((a[x>>0]|0)==3?(b[f+(z*144|0)+94>>1]|0)!=0:0){u=f+(z*144|0)+134|0;v=z&65535;w=h+(z<<1)|0;r=0;while(1){if((r|0)>=3)break b;s=b[f+(z*144|0)+94+(r<<1)>>1]|0;q=s&65535;if(!(s<<16>>16))break b;m=d[f+(z*144|0)+118+r>>0]&7;switch(m|0){case 0:case 6:{t=10;break}default:if(m>>>0<3)m=r;else t=10}if((t|0)==10){t=0;n=a[f+(z*144|0)+106+r>>0]|0;o=a[x>>0]|0;p=0;m=0;while(1){if((p|0)>=(o|0))break;if((p|0)!=(n|0)){b[E+(m<<1)>>1]=b[f+(z*144|0)+6+(p<<1)>>1]|0;m=m+1|0}p=p+1|0}n=q+65535|0;if((m|0)>2){k=-30012;break a}if(((m|0)==2?(D=e[E>>1]|0,(b[j+(D<<1)>>1]|0)==(b[j+(e[A>>1]<<1)>>1]|0)):0)?(b[u>>1]|0)!=(b[f+(D*144|0)+134>>1]|0):0){if(!l){l=Bq(B)|0;if(!l){k=-30002;break a}}er(l|0,0,B|0)|0;b[l+(z<<1)>>1]=1;if(!((Cd(f,v,b[E>>1]|0,v,b[A>>1]|0,l,l,j,h,1)|0)<<16>>16))m=r;else{if(!(qd(f,z,r)|0)){k=-30012;break a}s=r+-1|0;m=b[w>>1]|0;p=b[h+((n&65535)<<1)>>1]|0;o=(m&65535)>(p&65535)?m:p;p=(m&65535)<(p&65535)?m:p;m=c[C>>2]|0;r=m+-1|0;n=0;while(1){if((m|0)<=(n|0)){t=31;break}t=c[y>>2]|0;q=t+(n*6|0)|0;if((b[q>>1]|0)==o<<16>>16?(b[t+(n*6|0)+2>>1]|0)==p<<16>>16:0){o=q;t=27;break}n=n+1|0}if((t|0)==27){t=0;if((r|0)>(n|0)){jr(o|0,o+6|0,(r-n|0)*6|0)|0;m=c[C>>2]|0}c[C>>2]=m+-1}else if((t|0)==31?(t=0,(m|0)>0):0){k=-30010;break a}m=s;k=k+1|0}}else m=r}r=m+1|0}}while(0);z=z+1|0}if(l|0)Cq(l);i=F;return k|0}function Ed(c,d,f,g,h,j){c=c|0;d=d|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=i;i=i+16|0;D=F+8|0;C=F;B=0;k=0;a:while(1){if((B|0)>=(f|0))break;z=d+(B*144|0)+124|0;m=a[z>>0]|0;b:do if(((m<<24>>24!=0?(b[d+(B*144|0)+94>>1]|0)==0:0)?(A=d+(B*144|0)+126|0,(a[A>>0]|0)==6):0)?((m&7)+-1|0)>>>0<2:0){x=a[d+(B*144|0)+73>>0]|0;y=x<<24>>24;l=0;while(1){if((l|0)>=(y|0))break;b[D+(l<<1)>>1]=b[h+(e[d+(B*144|0)+6+(l<<1)>>1]<<1)>>1]|0;l=l+1|0}w=b[h+(B<<1)>>1]|0;c:do if(x<<24>>24==1){a[A>>0]=m;v=0}else{l=ih(c,D,y,2,12)|0;m=1;while(1){if((m|0)>=(y|0)){v=l;break c}if((b[D+(m+-1<<1)>>1]|0)==(b[D+(m<<1)>>1]|0))break b;else m=m+1|0}}while(0);s=w&65535;t=s+-1|0;u=0;m=-1;l=0;while(1){if((s|0)<=(u|0))break;r=e[j+(t-u<<1)>>1]|0;if(w<<16>>16!=(b[h+(r<<1)>>1]|0))break;if((a[d+(r*144|0)+73>>0]|0)==x<<24>>24){l=0;q=0}else{k=-30010;break a}while(1){if((q|0)>=(y|0))break;o=D+(q<<1)|0;p=0;while(1){if((p|0)>=(y|0))break;n=e[d+(r*144|0)+6+(p<<1)>>1]|0;if((b[h+(n<<1)>>1]|0)==(b[o>>1]|0)){E=23;break}else p=p+1|0}if((E|0)==23){E=0;b[C+(q<<1)>>1]=b[g+(n<<1)>>1]|0;l=l+1|0}q=q+1|0}if((l|0)!=(y|0)){k=-30010;break a}l=(ih(c,C,y,2,12)|0)%2|0;if((m|0)>=0){if((l|0)!=(m|0))break}else m=l;u=u+1|0}if((l|0)==(m|0)){a[A>>0]=2-((m+v+(a[z>>0]|0)|0)%2|0);k=k+1|0}}while(0);B=B+1|0}i=F;return k|0}function Fd(f,g,h,j,k,l){f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=i;i=i+16|0;G=H+8|0;F=H;B=f+12|0;C=h<<1;D=l+116|0;z=l+64|0;A=0;m=0;l=0;a:while(1){if((A|0)>=(h|0))break;y=g+(A*144|0)+124|0;b:do if((a[y>>0]|0)!=0?(b[g+(A*144|0)+94>>1]|0)==0:0){x=g+(A*144|0)+126|0;n=d[x>>0]&7;switch(n|0){case 0:case 6:break;default:if(n>>>0<3)break b}n=a[g+(A*144|0)+73>>0]|0;w=n<<24>>24;o=0;while(1){if((o|0)>=(w|0))break;b[G+(o<<1)>>1]=b[k+(e[g+(A*144|0)+6+(o<<1)>>1]<<1)>>1]|0;b[F+(o<<1)>>1]=o;o=o+1|0}if(n<<24>>24!=1){c[B>>2]=G;ih(f,F,w,2,11)|0;r=g+(A*144|0)+134|0;s=A&65535;t=g+(A*144|0)+128|0;u=j+(A<<1)|0;v=1;n=1;while(1){if(!((v|0)<(w|0)&(n|0)!=0))break b;o=e[F+(v<<1)>>1]|0;c:do if((b[r>>1]|0)!=(b[g+((e[g+(A*144|0)+6+(o<<1)>>1]|0)*144|0)+134>>1]|0)?(E=F+(v+-1<<1)|0,(b[G+(e[E>>1]<<1)>>1]|0)==(b[G+(o<<1)>>1]|0)):0){n=v;while(1){if(!m){m=Bq(C)|0;if(!m){l=-30002;break a}}er(m|0,0,C|0)|0;b[m+(A<<1)>>1]=1;if((Cd(g,s,b[g+(A*144|0)+6+(e[E>>1]<<1)>>1]|0,s,b[g+(A*144|0)+6+(e[F+(n<<1)>>1]<<1)>>1]|0,m,m,k,j,1)|0)<<16>>16)break;n=n+1|0;if((n|0)>=(w|0))break c;if((b[G+(e[E>>1]<<1)>>1]|0)!=(b[G+(e[F+(n<<1)>>1]<<1)>>1]|0))break c}a[y>>0]=0;a[x>>0]=0;a[t>>0]=0;n=c[D>>2]|0;q=n+-1|0;p=0;while(1){if((n|0)<=(p|0)){l=-30010;break a}o=(c[z>>2]|0)+(p<<2)|0;if((b[o>>1]|0)==(b[u>>1]|0))break;p=p+1|0}if((q|0)>(p|0)){jr(o|0,o+4|0,q-p<<2|0)|0;n=c[D>>2]|0}c[D>>2]=n+-1;n=0;l=l+1|0}while(0);v=v+1|0}}}while(0);A=A+1|0}if(m|0)Cq(m);i=H;return l|0}function Gd(c,f,g,h){c=c|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=0;i=0;while(1){if((r|0)>=(f|0))break;a:do if(((((a[c+(r*144|0)+124>>0]|0)!=0?(b[c+(r*144|0)+94>>1]|0)==0:0)?(a[c+(r*144|0)+131>>0]|0)==0:0)?(p=a[c+(r*144|0)+126>>0]|0,(p&64|0)==0):0)?(q=p&7,(q|0)!=0):0){m=b[g+(r<<1)>>1]|0;n=m&65535;o=n+-1|0;j=-1;l=0;while(1){if((n|0)<=(l|0))break;k=e[h+(o-l<<1)>>1]|0;if(m<<16>>16!=(b[g+(k<<1)>>1]|0))break;s=d[c+(k*144|0)+126>>0]&7;j=(s|0)==(q|0)?((j|0)<0?0:j):1;k=c+(k*144|0)+131|0;if(s){if(!(a[k>>0]|0))a[k>>0]=1}else a[k>>0]=2;l=l+1|0}if(q>>>0<5&(j|0)==0){k=0;while(1){if((n|0)<=(k|0))break a;j=e[h+(o-k<<1)>>1]|0;if(m<<16>>16!=(b[g+(j<<1)>>1]|0))break a;s=c+(j*144|0)+126|0;a[s>>0]=d[s>>0]|64;k=k+1|0;i=i+1|0}}}while(0);r=r+1|0}return i|0}function Hd(f,g,h,i,j,k){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;l=0;while(1){if((l|0)>=(g|0))break;b[i+((e[h+(l<<1)>>1]|0)+-1<<1)>>1]=l;l=l+1|0}p=c[j+116>>2]|0;q=j+64|0;s=(k|0)==0;o=0;l=0;while(1){if((o|0)>=(p|0)){r=6;break}h=c[q>>2]|0;k=h+(o<<2)+2|0;m=a[k>>0]|0;if((m+-1&255)<2){n=e[i+((e[h+(o<<2)>>1]|0)+-1<<1)>>1]|0;h=f+(n*144|0)+124|0;g=a[h>>0]|0;if(((g&7)+-1|0)>>>0>=2){l=-30010;break}a[h>>0]=g^3;if(!s)a[k>>0]=m&255^3;l=l+1|0;h=f+(n*144|0)+126|0;g=a[h>>0]|0;if(((g&7)+-1|0)>>>0<2)a[h>>0]=g^3;h=f+(n*144|0)+128|0;g=a[h>>0]|0;if(((g&7)+-1|0)>>>0<2)a[h>>0]=g^3}o=o+1|0}a:do if((r|0)==6){p=j+100|0;n=j+60|0;o=0;while(1){if((o|0)>=(c[p>>2]|0))break a;h=c[n>>2]|0;g=h+(o*6|0)+4|0;k=a[g>>0]|0;if((k+-1&255)<2?(t=e[i+((e[h+(o*6|0)>>1]|0)+-1<<1)>>1]|0,u=f+(t*144|0)+118|0,v=a[u>>0]|0,w=(v&255)>>>3,(w&1|0)!=0):0){h=e[i+((e[h+(o*6|0)+2>>1]|0)+-1<<1)>>1]|0;if(b[f+(t*144|0)+96>>1]|0){l=-30010;break a}if(b[f+(h*144|0)+96>>1]|0){l=-30010;break a}m=f+(h*144|0)+118|0;if(((d[m>>0]|0)>>>3^w)&7|0){l=-30010;break a}if((t+1|0)!=(e[f+(h*144|0)+94>>1]|0)){l=-30010;break a}if((h+1|0)!=(e[f+(t*144|0)+94>>1]|0)){l=-30010;break a}if(((d[f+(t*144|0)+124>>0]&7)+-1|0)>>>0>=2){l=-30010;break a}if(((d[f+(h*144|0)+124>>0]&7)+-1|0)>>>0>=2){l=-30010;break a}r=f+((t>>>0>>0?t:h)*144|0)+124|0;a[r>>0]=d[r>>0]^3;if(s)h=v;else{a[g>>0]=k&255^3;h=a[u>>0]|0}l=l+1|0;h=h<<24>>24;if(((h&7)+-1|0)>>>0<2)a[u>>0]=h^3;h=a[m>>0]|0;if(((h&7)+-1|0)>>>0<2)a[m>>0]=h^3}o=o+1|0}}while(0);return l|0}function Id(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;j=sd(i,a,b,f,g,j)|0;if((j|0)>=0){j=xd(i,a,b,d,e,h)|0;if(!j)j=(c[h+100>>2]|0)+(c[h+116>>2]|0)|0;if((j|0)>-1){e=Ed(i,a,b,d,f,g)|0;a:do if((e|0)>-1){e=Gd(a,b,f,g)|0;if((e|0)>-1){e=yd(i,a,b,d,f,g)|0;if((e|0)>-1){e=zd(a,b,f,g)|0;if((e|0)>-1)do{e=Fd(i,a,b,d,f,h)|0;if((e|0)<=-1)break a;g=Dd(a,b,d,f,h)|0;e=((g|0)>-1?e:0)+g|0}while((e|0)>0)}}}while(0);j=(e+30019|0)>>>0<20?e:j}}return j|0}function Jd(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0;e=d+1&65535;d=0;while(1){if((d|0)>=3){d=-1;break}f=b[a+(c*144|0)+94+(d<<1)>>1]|0;if(!(f<<16>>16)){d=-1;break}if(f<<16>>16==e<<16>>16)break;d=d+1|0}return d|0}function Kd(c,e,f,g){c=c|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;a:do if(b[c+(e*144|0)+94>>1]|0){i=0;while(1){if((i|0)>=3){h=-1;break a}h=b[c+(e*144|0)+94+(i<<1)>>1]|0;if(!(h<<16>>16)){h=-1;break a}if(((h&65535)+-1|0)==(f|0))break;i=i+1|0}h=d[c+(e*144|0)+118+i>>0]&7;if((h+-1|0)>>>0>=4){j=0;while(1){if((j|0)>=3){h=-1;break a}h=b[c+(f*144|0)+94+(j<<1)>>1]|0;if(!(h<<16>>16)){h=-1;break a}if(((h&65535)+-1|0)==(e|0))break;j=j+1|0}h=a[c+(e*144|0)+124>>0]|0;k=a[c+(f*144|0)+124>>0]|0;if(((h+-1<<24>>24|k+-1<<24>>24)&255)<2?(l=c+(e*144|0)+112+i|0,n=a[l>>0]|0,m=n<<24>>24,((n<<24>>24>-1?m:0-m|0)|0)>49):0){i=ff(c,e,i,g)|0;h=ff(c,f,j,g)|0;if(!((i|0)!=0&(h|0)!=0)){h=0;break}if((h+-1|i+-1)>>>0>=2){h=-30012;break}h=2-((h+i+((d[l>>0]|0)>>>7&255)|0)%2|0)|0;break}h=h<<24>>24>k<<24>>24?h:k;h=h<<24>>24?4:h<<24>>24}}else h=-1;while(0);return h|0}function Ld(c,d,e,f){c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+16|0;l=m;g=a[d+73>>0]|0;if(g<<24>>24<=4){j=g<<24>>24;k=0;g=0;while(1){if((k|0)>=(j|0))break;h=b[d+6+(k<<1)>>1]|0;if(h<<16>>16!=e<<16>>16){b[l+(g<<1)>>1]=b[f+((h&65535)<<1)>>1]|0;g=g+1|0}k=k+1|0}if(g){g=ih(c,l,g,2,12)|0;if(!(b[l>>1]|0))g=0;else g=2-((g|0)%2|0)|0}else g=2}else g=-1;i=m;return g|0}function Md(d,f,g,h){d=d|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0;n=i;i=i+48|0;m=n;l=f+(g*144|0)+124|0;j=a[l>>0]|0;a:do if(j<<24>>24)if(!(b[f+(g*144|0)+94>>1]|0)){if((j+-1&255)>=2){j=j<<24>>24;break}j=a[f+(g*144|0)+73>>0]|0;k=0;while(1){if((k|0)>=(j|0))break;if(!(b[h+(e[f+(g*144|0)+6+(k<<1)>>1]<<1)>>1]|0)){j=0;break a}b[m+(k<<1)>>1]=k;k=k+1|0}c[d+8>>2]=f+(g*144|0)+6;c[d+12>>2]=h;j=ih(d,m,j,2,10)|0;j=2-(((a[l>>0]|0)+j|0)%2|0)|0}else j=-1;else j=0;while(0);i=n;return j|0}function Nd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return (a<<15)+b+(c<<5)+(d<<10)|0}function Od(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=(f|0)!=0;if(n?(h=c[f>>2]|0,(h|0)!=0):0)h=(c[f+16>>2]|0)>0?h:0;else h=0;m=(g|0)!=0;if(m)c[g>>2]=0;l=f+28|0;j=(h|0)!=0;k=0;h=0;while(1){if((k|0)>=(d|0))break;if(n?(c[l>>2]|0)!=0:0)i=(a[e+(k*144|0)+79>>0]&1)!=0;else i=0;f=a[e+(k*144|0)+80>>0]|0;if(i|j&(b[e+(k*144|0)+92>>1]|0)!=0){f=f<<15;if(m){if((a[e+(k*144|0)+76>>0]|0)==0?(a[e+(k*144|0)+77>>0]|0)==0:0)i=i|(a[e+(k*144|0)+78>>0]|0)!=0;else i=1;c[g>>2]=(c[g>>2]|0)+(i&1)}}else f=(a[e+(k*144|0)+76>>0]|0)+(f<<15)+(a[e+(k*144|0)+77>>0]<<5)+(a[e+(k*144|0)+78>>0]<<10)|0;c[e+(k*144|0)+84>>2]=f;k=k+1|0;h=((f|0)!=0&1)+h|0}return h|0}function Pd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;f=j;e=b+8|0;g=c[e>>2]|0;do if((a|0)!=0?(c[d>>2]|0)==0:0){c[f>>2]=a;if((jd(b,12798,f)|0)==-1){c[d>>2]=c[d>>2]|1;e=g+1|0;break}else{e=c[e>>2]|0;h=6;break}}else{e=g;h=6}while(0);if((h|0)==6)e=e-g|0;i=j;return e|0}function Qd(a){a=a|0;var b=0,d=0;d=i;i=i+32|0;b=d;if((a|0)>1){c[b>>2]=a;a=qq(d+8|0,85326,b)|0}else a=0;i=d;return a|0}function Rd(b,d,f,g,h,j,k,l,m){b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=i;i=i+16|0;z=B;u=0;t=0;y=0;v=0;s=0;n=0;w=f;x=-2;p=0;o=0;while(1){if((y|0)>=(f|0)){A=14;break}r=b+y|0;q=a[r>>0]|0;if(x<<24>>24==q<<24>>24)v=v+1|0;else{do if(v){if(t|0){o=o+v|0;break}if(!u){n=n+s+(Qd(v)|0)|0;q=a[r>>0]|0;break}else{p=p+v|0;break}}while(0);if((Zn(q&255,z)|0)==-1){n=-1;break}s=cp(z)|0;x=a[r>>0]|0;u=(kp(z,86667)|0)==0&1;r=(kp(z,86650)|0)==0;t=r&1;v=1;w=r?y:w}o=(a[d+y>>0]|0)+o|0;y=y+1|0}if((A|0)==14){a:do if((g|0)!=0&(h|0)>0){r=1;q=e[g>>1]|0;while(1){if(!((r|0)<(h|0)&(q|0)>0))break a;A=r+1|0;r=A+(e[g+(r<<1)>>1]|0)|0;o=(e[g+(A<<1)>>1]|0)+o|0;q=q+-1|0}}while(0);do if(v){if(t|0){o=o+v|0;break}if(!u){n=n+s+(Qd(v)|0)|0;break}else{p=p+v|0;break}}while(0);if(p)n=n+1+(Qd(p)|0)|0;if(o)n=n+1+(Qd(o)|0)|0;c[j>>2]=p;c[k>>2]=o;c[l>>2]=n;c[m>>2]=w;n=0}i=B;return n|0}function Sd(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0;l=i;i=i+32|0;h=l;k=l+8|0;do if(((d|0)>0?(c[g>>2]|0)==0:0)?(j=cp(b)|0,(j|0)>0):0){if((d|0)>1){c[h>>2]=d;h=qq(k,85326,h)|0}else{a[k>>0]=0;h=0}d=h+j|0;if((d|0)<(f|0)){ir(e|0,b|0,j|0)|0;ir(e+j|0,k|0,h+1|0)|0;break}else{c[g>>2]=(c[g>>2]|0)+1;d=0;break}}else d=0;while(0);i=l;return d|0}function Td(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+16|0;p=s+4|0;r=s;c[r>>2]=0;if(g){g=Sd(86667,g,e,f,r)|0;if(!h){l=0;o=0;k=0;n=-2}else{l=0;o=0;k=0;g=(Sd(86650,h,e+g|0,f-g|0,r)|0)+g|0;n=-2}}else{l=h;o=0;k=0;g=0;n=-2}while(1){if((o|0)>=(d|0)){q=15;break}m=b+o|0;h=a[m>>0]|0;if(n<<24>>24!=h<<24>>24){if(!k)k=h;else{g=(Sd(p,k,e+g|0,f-g|0,r)|0)+g|0;k=a[m>>0]|0}if((Zn(k&255,p)|0)==-1){g=-1;break}h=a[m>>0]|0;if(!(kp(86667,p)|0)){g=-1;break}k=kp(86650,p)|0;if(!k){g=-1;break}if((l|0)!=0&(k|0)<0){m=0;k=1;g=(Sd(86650,l,e+g|0,f-g|0,r)|0)+g|0}else{m=l;k=1}}else{m=l;k=k+1|0;h=n}l=m;o=o+1|0;n=h}if((q|0)==15){if(k)g=(Sd(p,k,e+g|0,f-g|0,r)|0)+g|0;if(l)g=(Sd(86650,l,e+g|0,f-g|0,r)|0)+g|0;r=(c[r>>2]|0)!=0;c[j>>2]=r&1|c[j>>2];g=r?f+1|0:g}i=s;return g|0}function Ud(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;k=m+16|0;l=m+12|0;h=m+8|0;j=m+4|0;g=m;c[g>>2]=0;d=a+20|0;if((Rd(c[d>>2]|0,c[a+40>>2]|0,c[a+12>>2]|0,c[a+36>>2]|0,c[a+32>>2]|0,k,l,h,j)|0)==0?(e=c[h>>2]|0,f=e+1|0,b=Bq(f)|0,(b|0)!=0):0){a=c[k>>2]|0;a=(Td((c[d>>2]|0)+a|0,(c[j>>2]|0)-a|0,b,f,a,c[l>>2]|0,g)|0)!=(e|0);if(a|(c[g>>2]|0)!=0){Cq(b);b=0}}else b=0;i=m;return b|0}function Vd(f,g,h,i,j,k,l,m){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0;a:do if((j|0)!=0&(k|0)!=0){o=e[j+((e[i>>1]|0)+-1<<1)>>1]|0;b:do if(!m){j=(d[l+(o*144|0)+118>>0]|0)>>>3;if(!(j&1)){n=22;break a}if(b[l+(o*144|0)+96>>1]|0){n=22;break a}m=((j&7)+-1|0)/2|0;n=o;j=e[l+(o*144|0)+6+(a[l+(o*144|0)+106>>0]<<1)>>1]|0;while(1){if(!m)break b;if((a[l+(j*144|0)+73>>0]|0)!=2){n=22;break a}p=j;m=m+-1|0;j=e[l+(j*144|0)+6+(((n|0)==(e[l+(j*144|0)+6>>1]|0)&1)<<1)>>1]|0;n=p}}else{j=(d[l+(o*144|0)+121>>0]|0)>>>3;if(!(j&1)){n=22;break a}if(b[l+(o*144|0)+102>>1]|0){n=22;break a}m=((j&7)+-1|0)/2|0;n=o;j=e[l+(o*144|0)+6+(a[l+(o*144|0)+109>>0]<<1)>>1]|0;while(1){if(!m)break b;if((a[l+(j*144|0)+73>>0]|0)!=2){n=22;break a}p=j;m=m+-1|0;j=e[l+(j*144|0)+6+(((n|0)==(e[l+(j*144|0)+6>>1]|0)&1)<<1)>>1]|0;n=p}}while(0);l=(h|0)!=0;n=f+4|0;p=c[(l?n:f+12|0)>>2]|0;l=c[(l?f+8|0:f+16|0)>>2]|0;h=b[k+(j<<1)>>1]|0;o=a[i+4>>0]|0;m=c[g>>2]|0;j=0;while(1){if((m|0)<=(j|0)){n=19;break}if((e[(c[n>>2]|0)+(j<<1)>>1]|0)>=(h&65535)){n=20;break}j=j+1|0}if((n|0)==19){m=l+j|0;j=p+(j<<1)|0}else if((n|0)==20){i=p+(j<<1)|0;jr(i+2|0,i|0,m-j<<1|0)|0;m=l+j|0;jr(m+1|0,m|0,(c[g>>2]|0)-j|0)|0;j=i}b[j>>1]=h;a[m>>0]=o;c[g>>2]=(c[g>>2]|0)+1;j=1}else n=22;while(0);if((n|0)==22)if(!h)j=0;else{j=c[h>>2]|0;a[(c[f+40>>2]|0)+j>>0]=a[i+4>>0]|0;b[(c[f+32>>2]|0)+(j<<1)>>1]=b[i>>1]|0;b[(c[f+36>>2]|0)+(j<<1)>>1]=b[i+2>>1]|0;c[h>>2]=(c[h>>2]|0)+1;j=0}return j|0}function Wd(d,e,f,g,h,j,k,l,m,n,o,p,q){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;var r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=i;i=i+16|0;s=z+4|0;t=z;c[d>>2]=f;u=d+4|0;x=d+8|0;v=d+12|0;y=d+16|0;r=0;while(1){if((r|0)>=(f|0))break;b[(c[u>>2]|0)+(r<<1)>>1]=b[e+(r<<2)>>1]|0;a[(c[x>>2]|0)+r>>0]=a[e+(r<<2)+2>>0]|0;b[(c[v>>2]|0)+(r<<1)>>1]=b[n+(r<<2)>>1]|0;a[(c[y>>2]|0)+r>>0]=a[n+(r<<2)+2>>0]|0;r=r+1|0}c[t>>2]=c[d>>2];c[s>>2]=0;f=0;while(1){if((f|0)>=(h|0)){w=10;break}e=g+(f*6|0)|0;n=Vd(d,d,s,e,j,k,l,m)|0;r=o+(f*6|0)|0;if((n|0)!=(Vd(d,t,0,r,p,q,l,m)|0)){e=-4;break}if((n|0)==0?ue(e,1,r,1)|0:0){e=-4;break}f=f+1|0}a:do if((w|0)==10){c[d+28>>2]=c[s>>2];l=c[t>>2]|0;if((l|0)==(c[d>>2]|0)){g=0;while(1){if((g|0)>=(l|0)){w=12;break}r=c[v>>2]|0;f=b[r+(g<<1)>>1]|0;e=c[u>>2]|0;n=b[e+(g<<1)>>1]|0;if(f<<16>>16!=n<<16>>16){w=14;break}f=a[(c[y>>2]|0)+g>>0]|0;n=a[(c[x>>2]|0)+g>>0]|0;if(f<<24>>24==n<<24>>24)g=g+1|0;else{w=16;break}}if((w|0)==12)c[d+20>>2]=0;else if((w|0)==14){o=r;g=e;e=(f&65535)>(n&65535)?2:-2;w=17}else if((w|0)==16){o=r;g=e;e=f<<24>>24>n<<24>>24?1:-1;w=17}b:do if((w|0)==17){c[d+20>>2]=(e|0)>0?1:e>>31;switch(e|0){case 1:case -1:{r=0;break}default:break b}while(1){if((r|0)>=(l|0)){e=1;break}if((b[o+(r<<1)>>1]|0)!=(b[g+(r<<1)>>1]|0)){e=0;break}e=a[(c[y>>2]|0)+r>>0]|0;n=a[(c[x>>2]|0)+r>>0]|0;if(e<<24>>24==n<<24>>24){e=0;break}if(((n<<24>>24)+(e<<24>>24)|0)==3)r=r+1|0;else{e=0;break}}c[d+24>>2]=e;e=0;break a}while(0);c[d+24>>2]=0;e=0}else e=-5}while(0);i=z;return e|0}function Xd(c,f,g,h,i,j,k,l){c=c|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;a:do if(!h)g=-1;else{v=(g|0)!=0;w=v?8:2;m=0;g=0;while(1){if((m|0)>=(j|0))break;u=a[i+(m<<2)+2>>0]|0;if(!(u<<24>>24==3|(u+-1&255)>3)?(n=e[h+((e[i+(m<<2)>>1]|0)+-1<<1)>>1]|0,o=c+(n*144|0)+130|0,p=a[o>>0]|0,p<<24>>24!=0):0){a[o>>0]=p&255|w;u=f+(n*176|0)+101|0;a[u>>0]=d[u>>0]|w;g=g+1|0}m=m+1|0}t=v?16:4;u=0;while(1){if((u|0)>=(l|0))break a;b:do if(((a[k+(u*6|0)+4>>0]|0)+-1&255)<2){i=e[h+((e[k+(u*6|0)>>1]|0)+-1<<1)>>1]|0;s=e[h+((e[k+(u*6|0)+2>>1]|0)+-1<<1)>>1]|0;j=c+(i*144|0)+130|0;q=a[j>>0]|0;r=q<<24>>24==0;if(r?(a[c+(s*144|0)+130>>0]|0)==0:0)break;p=(d[(v?c+(i*144|0)+121|0:c+(i*144|0)+118|0)>>0]|0)>>>3;m=p&7;c:do if(p&1|0){if(v){if(b[c+(i*144|0)+102>>1]|0)break}else if(b[c+(i*144|0)+96>>1]|0)break;n=(m+-1|0)/2|0;o=i;p=e[c+(i*144|0)+6+(a[(v?c+(i*144|0)+109|0:c+(i*144|0)+106|0)>>0]<<1)>>1]|0;while(1){m=(a[c+(p*144|0)+73>>0]|0)==2;if(!n)break;if(!m)break c;m=p;n=n+-1|0;p=e[c+(p*144|0)+6+(((o|0)==(e[c+(p*144|0)+6>>1]|0)&1)<<1)>>1]|0;o=m}if(m){s=c+(p*144|0)+130|0;a[s>>0]=d[s>>0]|w;s=f+(p*176|0)+101|0;a[s>>0]=d[s>>0]|w;g=g+1|0;break b}}while(0);if(!r){a[j>>0]=q&255|t;r=f+(i*176|0)+101|0;a[r>>0]=d[r>>0]|t;g=g+1|0}m=c+(s*144|0)+130|0;n=a[m>>0]|0;if(n<<24>>24){a[m>>0]=n&255|t;s=f+(s*176|0)+101|0;a[s>>0]=d[s>>0]|t;g=g+1|0}}while(0);u=u+1|0}}while(0);return g|0}function Yd(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;do if(d){j=c[d>>2]|0;if((j|0)==0?(c[d+28>>2]|0)==0:0){f=0;break}a:do if((c[d+20>>2]|0)==0?!((e&2048|0)==0|(j|0)<1):0){k=d+8|0;f=0;while(1){if((f|0)>=(j|0))break;if(((a[(c[k>>2]|0)+f>>0]|0)+-1&255)<2)break;f=f+1|0}if((f|0)==(j|0)){c[d>>2]=0;f=d+4|0;g=d+16|0;h=d+12|0;i=0;while(1){if((i|0)>=(j|0)){f=2048;break a}a[(c[k>>2]|0)+i>>0]=0;b[(c[f>>2]|0)+(i<<1)>>1]=0;a[(c[g>>2]|0)+i>>0]=0;b[(c[h>>2]|0)+(i<<1)>>1]=0;i=i+1|0}}else f=0}else f=0;while(0);h=d+28|0;k=c[h>>2]|0;if(!((e&4096|0)==0|(k|0)<1)){j=d+40|0;g=0;while(1){if((g|0)>=(k|0))break;if(((a[(c[j>>2]|0)+g>>0]|0)+-1&255)<2)break;g=g+1|0}if((g|0)==(k|0)){c[h>>2]=0;i=d+32|0;g=d+36|0;h=0;while(1){if((h|0)>=(k|0))break;a[(c[j>>2]|0)+h>>0]=0;b[(c[i>>2]|0)+(h<<1)>>1]=0;b[(c[g>>2]|0)+(h<<1)>>1]=0;h=h+1|0}f=f|4096}}}else f=0;while(0);return f|0}function Zd(f,g,h,j,k,l,m,n,o,p,q,r){f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;var s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;T=i;i=i+16|0;O=T+12|0;J=T+8|0;L=T+4|0;K=T;c[O>>2]=0;c[J>>2]=0;P=c[n+304>>2]|0;H=n+116|0;if((((c[H>>2]|0)>=0?(c[n+100>>2]|0)>=0:0)?(c[n+284>>2]|0)>=0:0)?(c[n+288>>2]|0)>=0:0)s=0;else s=1;Q=n+128|0;if(!((((c[Q>>2]|0)>=0?(c[n+136>>2]|0)>=0:0)?(c[n+276>>2]|0)>=0:0)?(c[n+280>>2]|0)>=0:0))s=s|2;N=n+188|0;if(!((((c[N>>2]|0)>=0?(c[n+176>>2]|0)>=0:0)?(c[n+292>>2]|0)>=0:0)?(c[n+296>>2]|0)>=0:0))s=s|4;S=j+1|0;R=Dq(S,2)|0;S=Dq(S,2)|0;a:do if((R|0)!=0&(S|0)!=0){t=k+h|0;u=0;k=0;while(1){if((u|0)>=(t|0))break;M=(a[l+(u*144|0)+88>>0]|0)+k|0;u=u+1|0;k=M}c[f+8>>2]=k;c[f+12>>2]=h;c[g+4>>2]=h;A=(p|0)!=0;M=(P|0)!=0;if(A&M){b[g+64>>1]=b[P+46>>1]|0;k=0;while(1){if((k|0)==3)break;b[g+66+(k<<1)>>1]=(e[P+48+(k<<1)>>1]|0)+(e[P+36+(k<<1)>>1]|0);k=k+1|0}t=g+84|0;k=c[t>>2]|0;if(k&50|0){I=f+4|0;c[I>>2]=c[I>>2]|128}if(k&191){ld(r,11003)|0;k=c[t>>2]|0}if(k&64|0)ld(r,11027)|0}v=c[H>>2]|0;if((v|0)<=0?(c[n+100>>2]|0)<=0:0){k=c[n+284>>2]|0;F=58}else F=34;do if((F|0)==34){k=c[n+284>>2]|0;if((k|0)>0){x=c[n+64>>2]|0;if(!((x|0)!=0?(c[n+72>>2]|0)!=0:0)){if(!(c[n+60>>2]|0)){F=58;break}if(!(c[n+68>>2]|0)){F=58;break}}u=c[n+228>>2]|0;t=u;if((u|0)!=0?(w=c[n+232>>2]|0,(w|0)!=0):0){c[L>>2]=R;c[O>>2]=t;c[K>>2]=S;c[J>>2]=w;p=c[f+64>>2]|0;s=0;while(1){if((s|0)>=(j|0))break;I=s+1|0;t=I&65535;b[R+(e[u+(s<<1)>>1]<<1)>>1]=t;b[S+(e[w+(s<<1)>>1]<<1)>>1]=t;s=I}s=Wd(p,x,v,c[n+60>>2]|0,c[n+100>>2]|0,u,R,l,0,c[n+72>>2]|0,c[n+68>>2]|0,w,S)|0;k=p+16|0;I=c[k>>2]|0;t=I;if((I|0)!=0?(y=p+12|0,I=c[y>>2]|0,z=I,(I|0)!=0):0){if(q&512|0){I=f+4|0;c[I>>2]=c[I>>2]|2}if(q&1024|0){I=f+4|0;c[I>>2]=c[I>>2]|4}if((c[p+20>>2]|0)==-1){u=p+4|0;c[y>>2]=c[u>>2];w=p+8|0;c[k>>2]=c[w>>2];c[u>>2]=z;c[w>>2]=t;Ve(L,K);Ve(O,J);w=c[J>>2]|0;u=c[O>>2]|0;p=1}else p=0}else p=0;k=g+28|0;t=g+20|0;v=0;while(1){if((v|0)>=(h|0))break;b[(c[k>>2]|0)+(v<<1)>>1]=b[l+((e[w+(v<<1)>>1]|0)*144|0)+48>>1]|0;b[(c[t>>2]|0)+(v<<1)>>1]=b[l+((e[u+(v<<1)>>1]|0)*144|0)+48>>1]|0;v=v+1|0}if(p|0){Ve(L,K);Ve(O,J);I=j<<1;ir(c[L>>2]|0,c[K>>2]|0,I|0)|0;ir(c[O>>2]|0,c[J>>2]|0,I|0)|0}c[K>>2]=0;c[J>>2]=0}else F=58}else F=60}while(0);if((F|0)==58)if((k|0)>0){k=n+228|0;F=63}else F=60;do if((F|0)==60)if((c[n+268>>2]|0)>0){k=n+212|0;F=63;break}else{c[O>>2]=0;c[L>>2]=R;break}while(0);b:do if((F|0)==63){k=c[k>>2]|0;c[O>>2]=k;c[L>>2]=R;t=c[g+20>>2]|0;if(k){u=0;while(1){if((u|0)>=(h|0))break;I=u+1|0;z=k+(u<<1)|0;b[R+(e[z>>1]<<1)>>1]=I;b[t+(u<<1)>>1]=b[l+((e[z>>1]|0)*144|0)+48>>1]|0;u=I}k=c[O>>2]|0;t=c[L>>2]|0;while(1){if((u|0)>=(j|0))break b;I=u+1|0;b[t+(e[k+(u<<1)>>1]<<1)>>1]=I;u=I}}}while(0);y=g+56|0;k=c[y>>2]|0;c:do if(k|0){x=0;while(1){if((x|0)>=(h|0))break c;t=e[(c[O>>2]|0)+(x<<1)>>1]|0;u=a[m+(t*176|0)+92>>0]|0;if(u<<24>>24==0?(a[m+(t*176|0)+94>>0]|0)==0:0){t=a[m+(t*176|0)+100>>0]|0;if(t<<24>>24!=1)if(t<<24>>24!=2)if(t<<24>>24==3)t=2;else t=t<<24>>24?3:0;else t=1;else t=0;a[k+(x*3|0)+1>>0]=t}else{p=a[m+(t*176|0)+99>>0]|0;a[k+(x*3|0)>>0]=p;v=a[m+(t*176|0)+100>>0]|0;if(v<<24>>24!=1)if(v<<24>>24!=2)if(v<<24>>24==3)w=2;else w=v<<24>>24?3:0;else w=1;else w=0;a[k+(x*3|0)+1>>0]=w;I=(bo(d[m+(t*176|0)+6>>0]|0,p<<24>>24,v<<24>>24,a[m+(t*176|0)+93>>0]|0,a[m+(t*176|0)+94>>0]|0,u<<24>>24)|0)&255;k=c[y>>2]|0;a[k+(x*3|0)+2>>0]=I}x=x+1|0}}while(0);p=c[g+36>>2]|0;t=c[n+216>>2]|0;u=c[O>>2]|0;if((p|0)!=0&((t|0)!=0&((u|0)!=0&(c[L>>2]|0)!=0)))k=0;else{s=s|8;k=-1;break}while(1){if((k|0)>=(h|0))break;b[p+(k<<1)>>1]=b[t+(e[u+(k<<1)>>1]<<1)>>1]|0;b[S+(k<<1)>>1]=k;k=k+1|0}while(1){if((k|0)>=(j|0))break;b[S+(k<<1)>>1]=32766;k=k+1|0}I=o+12|0;c[I>>2]=p;gh(o,S,h,2,11);k=0;u=1;t=b[S>>1]|0;while(1){if((u|0)>(h|0))break;if(!((u|0)!=(h|0)?(b[p+(e[S+(k<<1)>>1]<<1)>>1]|0)==(b[p+(e[S+(u<<1)>>1]<<1)>>1]|0):0)){t=t+1<<16>>16;d:do if((u-k|0)>1)while(1){if((k|0)>=(u|0))break d;b[p+(e[S+(k<<1)>>1]<<1)>>1]=t;k=k+1|0}else{b[p+(e[S+(k<<1)>>1]<<1)>>1]=0;k=k+1|0}while(0);t=b[S+(u<<1)>>1]|0}u=u+1|0}k=f+20|0;t=0;while(1){if((t|0)>=(h|0))break;a[(c[k>>2]|0)+t>>0]=a[l+((e[(c[O>>2]|0)+(t<<1)>>1]|0)*144|0)+72>>0]|0;t=t+1|0}k=n+152|0;t=c[k>>2]|0;if(((t|0)>=1?(B=c[n+48>>2]|0,B|0):0)?(C=c[f+28>>2]|0,C|0):0){ir(C|0,B|0,t<<1|0)|0;c[f+24>>2]=c[k>>2];if(A?(D=Oi(o,P,h,j,c[L>>2]|0)|0,(D|0)>0):0){x=f+4|0;c[x>>2]=(c[P+64>>2]&168|0)!=0|c[x>>2];x=c[f+36>>2]|0;b[x>>1]=D;y=P+8|0;z=P+4|0;A=c[L>>2]|0;B=0;k=1;while(1){if((B|0)==(D|0))break;u=e[(c[y>>2]|0)+(B<<1)>>1]|0;p=c[P>>2]|0;v=p+(u*36|0)+30|0;b[x+(k<<1)>>1]=(e[v>>1]|0)+2;w=0;t=k;while(1){t=t+1|0;if((w|0)==2)break;b[x+(t<<1)>>1]=b[p+(u*36|0)+(w<<1)>>1]|0;w=w+1|0}u=e[p+(u*36|0)+32>>1]|0;t=(e[v>>1]|0)+u|0;k=k+3|0;while(1){if((u|0)>=(t|0))break;b[x+(k<<1)>>1]=b[A+(e[(c[z>>2]|0)+(u<<1)>>1]<<1)>>1]|0;u=u+1|0;k=k+1|0}B=B+1|0}c[f+32>>2]=k;c[g+8>>2]=D}else F=119;do if((F|0)==119?(E=f+32|0,c[E>>2]=0,c[g+8>>2]=0,M):0){if(!(c[P+56>>2]&255)){if((c[P+32>>2]|0)<=1)break;if(!(c[P+64>>2]&49152))break}c[E>>2]=1;b[c[f+36>>2]>>1]=0}while(0);k=n+328|0;e:do if(c[k>>2]|0){t=f+40|0;u=0;while(1){if((u|0)>=(h|0))break e;a[(c[t>>2]|0)+u>>0]=a[(c[k>>2]|0)+u>>0]|0;u=u+1|0}}while(0);k=n+332|0;y=f+32|0;f:do if(c[k>>2]|0?(c[y>>2]|0)==0:0){t=f+44|0;u=f+40|0;p=0;while(1){if((p|0)>=(h|0))break f;a[(c[t>>2]|0)+p>>0]=a[(c[k>>2]|0)+p>>0]|0;F=(c[u>>2]|0)+p|0;a[F>>0]=(d[F>>0]|0)+(d[(c[k>>2]|0)+p>>0]|0);p=p+1|0}}while(0);g:do if(c[y>>2]|0?(G=c[g+8>>2]|0,G|0):0){do if((c[n+288>>2]|0)>0)t=c[n+236>>2]|0;else{if((c[n+272>>2]|0)<=0){t=0;break}t=c[n+220>>2]|0}while(0);p=c[g+40>>2]|0;k=c[n+224>>2]|0;if((p|0)!=0&((t|0)!=0&(k|0)!=0))u=0;else break;while(1){if((u|0)>=(G|0))break;b[p+(u<<1)>>1]=b[k+(e[t+(u<<1)>>1]<<1)>>1]|0;b[S+(u<<1)>>1]=u;u=u+1|0}c[I>>2]=p;gh(o,S,G,2,11);k=0;u=1;t=b[S>>1]|0;while(1){if((u|0)>(G|0))break g;if(!((u|0)!=(G|0)?(b[p+(e[S+(k<<1)>>1]<<1)>>1]|0)==(b[p+(e[S+(u<<1)>>1]<<1)>>1]|0):0)){t=t+1<<16>>16;h:do if((u-k|0)>1)while(1){if((k|0)>=(u|0))break h;b[p+(e[S+(k<<1)>>1]<<1)>>1]=t;k=k+1|0}else{b[p+(e[S+(k<<1)>>1]<<1)>>1]=0;k=k+1|0}while(0);t=b[S+(u<<1)>>1]|0}u=u+1|0}}while(0);G=Ud(f)|0;c[f+16>>2]=G;if(!G){c[g>>2]=-30018;c[f>>2]=-30018;s=0;k=-30018;break}k=Yd(c[f+64>>2]|0,q)|0;do if(k|0){G=f+4|0;c[G>>2]=k>>>8&24|c[G>>2];if(!(k&6144))break;ld(r,11047)|0}while(0);Xd(l,m,0,c[O>>2]|0,c[n+64>>2]|0,c[H>>2]|0,c[n+60>>2]|0,c[n+100>>2]|0)|0;t=c[N>>2]|0;do if((t|0)>0)F=160;else{if((c[n+176>>2]|0)>0){F=160;break}k=c[n+292>>2]|0;F=184}while(0);do if((F|0)==160){k=c[n+292>>2]|0;if((k|0)<=0){F=186;break}u=c[n+80>>2]|0;if(!((u|0)!=0?(c[n+88>>2]|0)!=0:0)){if(!(c[n+76>>2]|0)){F=184;break}if(!(c[n+84>>2]|0)){F=184;break}}p=c[n+256>>2]|0;if(!p){F=184;break}v=c[n+260>>2]|0;if(!v){F=184;break}c[L>>2]=R;c[O>>2]=p;c[K>>2]=S;c[J>>2]=v;w=c[f+68>>2]|0;s=0;while(1){if((s|0)>=(j|0))break;H=s+1|0;G=H&65535;b[R+(e[p+(s<<1)>>1]<<1)>>1]=G;b[S+(e[v+(s<<1)>>1]<<1)>>1]=G;s=H}s=Wd(w,u,t,c[n+76>>2]|0,c[n+176>>2]|0,p,R,l,1,c[n+88>>2]|0,c[n+84>>2]|0,v,S)|0;k=w+16|0;H=c[k>>2]|0;t=H;do if(!H)v=0;else{u=w+12|0;p=c[u>>2]|0;if(!p){v=0;break}if(q&512|0){H=f+4|0;c[H>>2]=c[H>>2]|2}if(q&1024|0){H=f+4|0;c[H>>2]=c[H>>2]|4}if((c[w+20>>2]|0)!=-1){v=0;break}H=w+4|0;c[u>>2]=c[H>>2];v=w+8|0;c[k>>2]=c[v>>2];c[H>>2]=p;c[v>>2]=t;Ve(L,K);Ve(O,J);v=1}while(0);k=c[J>>2]|0;t=g+32|0;u=c[O>>2]|0;p=g+24|0;w=0;while(1){if((w|0)>=(h|0))break;b[(c[t>>2]|0)+(w<<1)>>1]=b[l+((e[k+(w<<1)>>1]|0)*144|0)+48>>1]|0;b[(c[p>>2]|0)+(w<<1)>>1]=b[l+((e[u+(w<<1)>>1]|0)*144|0)+48>>1]|0;w=w+1|0}if(v|0){Ve(L,K);Ve(O,J);H=j<<1;ir(c[L>>2]|0,c[K>>2]|0,H|0)|0;ir(c[O>>2]|0,c[J>>2]|0,H|0)|0}c[K>>2]=0;c[J>>2]=0}while(0);do if((F|0)==184){if((k|0)<=0){F=186;break}k=n+256|0;F=189}while(0);do if((F|0)==186)if((c[n+276>>2]|0)>0){k=n+244|0;F=189;break}else{c[O>>2]=0;c[L>>2]=R;break}while(0);i:do if((F|0)==189){k=c[k>>2]|0;c[O>>2]=k;c[L>>2]=R;t=c[g+24>>2]|0;if(!k)break;else u=0;while(1){if((u|0)>=(h|0))break;K=u+1|0;J=k+(u<<1)|0;b[R+(e[J>>1]<<1)>>1]=K;b[t+(u<<1)>>1]=b[l+((e[J>>1]|0)*144|0)+48>>1]|0;u=K}k=c[O>>2]|0;t=c[L>>2]|0;while(1){if((u|0)>=(j|0))break i;K=u+1|0;b[t+(e[k+(u<<1)>>1]<<1)>>1]=K;u=K}}while(0);p=c[g+44>>2]|0;t=c[n+240>>2]|0;u=c[O>>2]|0;if((t|0)!=0&((p|0)!=0&((u|0)!=0&(c[L>>2]|0)!=0)))k=0;else{k=0;break}while(1){if((k|0)>=(h|0))break;b[p+(k<<1)>>1]=b[t+(e[u+(k<<1)>>1]<<1)>>1]|0;b[S+(k<<1)>>1]=k;k=k+1|0}while(1){if((k|0)>=(j|0))break;b[S+(k<<1)>>1]=k;k=k+1|0}c[I>>2]=p;gh(o,S,h,2,11);k=0;u=1;t=b[S>>1]|0;while(1){if((u|0)>(h|0))break;if(!((u|0)!=(h|0)?(b[p+(e[S+(k<<1)>>1]<<1)>>1]|0)==(b[p+(e[S+(u<<1)>>1]<<1)>>1]|0):0)){t=t+1<<16>>16;j:do if((u-k|0)>1)while(1){if((k|0)>=(u|0))break j;b[p+(e[S+(k<<1)>>1]<<1)>>1]=t;k=k+1|0}else{b[p+(e[S+(k<<1)>>1]<<1)>>1]=0;k=k+1|0}while(0);t=b[S+(u<<1)>>1]|0}u=u+1|0}k=c[Q>>2]|0;c[f+48>>2]=k;t=n+52|0;u=f+52|0;p=0;while(1){if((p|0)>=(k|0))break;L=c[t>>2]|0;j=c[u>>2]|0;b[j+(p*10|0)>>1]=b[L+(p*10|0)>>1]|0;b[j+(p*10|0)+2>>1]=b[L+(p*10|0)+8>>1]|0;b[j+(p*10|0)+4>>1]=b[L+(p*10|0)+2>>1]|0;b[j+(p*10|0)+6>>1]=b[L+(p*10|0)+4>>1]|0;b[j+(p*10|0)+8>>1]=b[L+(p*10|0)+6>>1]|0;p=p+1|0}x=n+136|0;k=c[x>>2]|0;c[f+56>>2]=k;t=n+56|0;u=f+60|0;p=0;while(1){if((p|0)>=(k|0))break;L=c[t>>2]|0;j=c[u>>2]|0;b[j+(p<<3)>>1]=b[L+(p<<3)>>1]|0;b[j+(p<<3)+2>>1]=b[L+(p<<3)+6>>1]|0;b[j+(p<<3)+4>>1]=b[L+(p<<3)+4>>1]|0;b[j+(p<<3)+6>>1]=b[L+(p<<3)+2>>1]|0;p=p+1|0}p=c[n+336>>2]|0;do if(p|0){v=c[f+72>>2]|0;if(!v)break;else{t=0;k=1}k:while(1){u=t;while(1){if((u|0)>=(h|0))break k;t=u+1|0;if(!(a[p+u>>0]|0))u=t;else break}b[v+(k<<1)>>1]=t;k=k+1|0}b[v>>1]=k}while(0);k=Yd(c[f+68>>2]|0,q)|0;do if(k|0){q=f+4|0;c[q>>2]=(k>>>7|k>>>6)&32|c[q>>2];if(!(k&6144))break;ld(r,11047)|0}while(0);Xd(l,m,1,c[O>>2]|0,c[n+80>>2]|0,c[N>>2]|0,c[n+76>>2]|0,c[n+176>>2]|0)|0;if(!(c[y>>2]|0)){k=0;break}w=c[g+48>>2]|0;if(!w){k=0;break}u=c[n+248>>2]|0;if(!u){k=0;break}if(!(c[Q>>2]|0)){if(!(M&(c[x>>2]|0)!=0)){k=0;break}}else if(!M){k=0;break}if((c[P+16>>2]|0)<=0){k=0;break}k=c[n+296>>2]|0;if((k|0)>0){t=n+264|0;v=k}else{k=c[n+280>>2]|0;if((k|0)<=0){k=0;break}t=n+252|0;v=k}k=c[t>>2]|0;if((v|0)>0&(k|0)!=0)t=0;else{k=0;break}while(1){if((t|0)==(v|0))break;b[w+(t<<1)>>1]=b[u+(e[k+(t<<1)>>1]<<1)>>1]|0;b[S+(t<<1)>>1]=t;t=t+1|0}c[I>>2]=w;gh(o,S,v,2,11);u=v+1|0;k=0;p=1;t=b[S>>1]|0;while(1){if((p|0)==(u|0)){k=0;break a}if(!((p|0)!=(v|0)?(b[w+(e[S+(k<<1)>>1]<<1)>>1]|0)==(b[w+(e[S+(p<<1)>>1]<<1)>>1]|0):0)){t=t+1<<16>>16;l:do if((p-k|0)>1)while(1){if((k|0)>=(p|0))break l;b[w+(e[S+(k<<1)>>1]<<1)>>1]=t;k=k+1|0}else{b[w+(e[S+(k<<1)>>1]<<1)>>1]=0;k=k+1|0}while(0);t=b[S+(p<<1)>>1]|0}p=p+1|0}}s=s|8;k=-2}else{c[g>>2]=-30002;c[f>>2]=-30002;s=0;k=-30002}while(0);Cq(R);Cq(S);c[f>>2]=c[f>>2]|s;c[g>>2]=c[g>>2]|s;i=T;return k|0}function _d(c,d,e){c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;er(e|0,0,d*144|0)|0;h=0;while(1){if((h|0)>=(d|0))break;f=e+(h*144|0)|0;xp(f,c+(h*176|0)|0,6)|0;a[e+(h*144|0)+72>>0]=$n(f)|0;f=a[c+(h*176|0)+92>>0]|0;a[e+(h*144|0)+73>>0]=f;f=f<<24>>24;g=0;while(1){if((g|0)>=(f|0))break;b[e+(h*144|0)+6+(g<<1)>>1]=b[c+(h*176|0)+8+(g<<1)>>1]|0;a[e+(h*144|0)+52+g>>0]=a[c+(h*176|0)+72+g>>0]|0;g=g+1|0}a[e+(h*144|0)+74>>0]=a[c+(h*176|0)+93>>0]|0;b[e+(h*144|0)+48>>1]=b[c+(h*176|0)+48>>1]|0;b[e+(h*144|0)+50>>1]=b[c+(h*176|0)+50>>1]|0;b[e+(h*144|0)+92>>1]=b[c+(h*176|0)+108>>1]|0;a[e+(h*144|0)+80>>0]=a[c+(h*176|0)+98>>0]|0;a[e+(h*144|0)+75>>0]=a[c+(h*176|0)+94>>0]|0;a[e+(h*144|0)+79>>0]=a[c+(h*176|0)+102>>0]|0;f=0;while(1){if((f|0)==3)break;a[e+(h*144|0)+76+f>>0]=a[c+(h*176|0)+95+f>>0]|0;f=f+1|0}a[e+(h*144|0)+88>>0]=a[c+(h*176|0)+99>>0]|0;a[e+(h*144|0)+89>>0]=a[c+(h*176|0)+100>>0]|0;b[e+(h*144|0)+138>>1]=b[c+(h*176|0)+168>>1]|0;a[e+(h*144|0)+133>>0]=a[c+(h*176|0)+162>>0]|0;b[e+(h*144|0)+134>>1]=b[c+(h*176|0)+164>>1]|0;b[e+(h*144|0)+136>>1]=b[c+(h*176|0)+166>>1]|0;h=h+1|0}return 0}function $d(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+16|0;k=m;j=c[b>>2]|0;f=a[j>>0]|0;if(f<<24>>24)if(!(sp(f&255)|0))f=-1;else{f=j+1|0;g=a[j>>0]|0;a[d>>0]=g;h=a[f>>0]|0;do if(h<<24>>24)if(!(_p(h&255)|0)){g=a[d>>0]|0;l=7;break}else{a[d+1>>0]=a[f>>0]|0;a[d+2>>0]=0;f=j+2|0;break}else l=7;while(0);if((l|0)==7){a[d+1>>0]=0;if(g<<24>>24==67)a[d>>0]=65}l=a[f>>0]|0;if(l<<24>>24!=0?((l&255)+-48|0)>>>0<10:0){c[e>>2]=Rp(f,k,10)|0;f=c[k>>2]|0}else c[e>>2]=1;c[b>>2]=f;f=1}else{a[d>>0]=a[86994]|0;a[d+1>>0]=a[86995]|0;a[d+2>>0]=a[86996]|0;c[e>>2]=99999;f=0}i=m;return f|0}function ae(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;f=n+12|0;g=n+8|0;k=n+20|0;l=n+16|0;h=n+4|0;j=n;c[f>>2]=a;c[g>>2]=b;while(1){d=$d(f,k,h)|0;e=$d(g,l,j)|0;if((e|d|0)<=-1){a=0;break}a=kp(k,l)|0;if(a|0)break;b=c[j>>2]|0;a=c[h>>2]|0;if((b|0)!=(a|0)){m=5;break}if(!((d|0)>0&(e|0)>0)){a=0;break}}if((m|0)==5)a=b-a|0;i=n;return a|0}function be(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+32|0;l=s+12|0;m=s+8|0;p=s+20|0;q=s+16|0;n=s+4|0;o=s;c[l>>2]=b;c[m>>2]=d;j=p+1|0;k=q+1|0;while(1){b=$d(l,p,n)|0;if((b|0)>0&(a[p>>0]|0)==72&(a[j>>0]|0)==0){c[e>>2]=(c[e>>2]|0)+(c[n>>2]|0);h=$d(l,p,n)|0}else h=b;b=$d(m,q,o)|0;if((b|0)>0&(a[q>>0]|0)==72&(a[k>>0]|0)==0){c[f>>2]=(c[f>>2]|0)+(c[o>>2]|0);g=$d(m,q,o)|0}else g=b;if((g|h|0)<=-1){b=0;break}b=kp(p,q)|0;if(b|0)break;d=c[o>>2]|0;b=c[n>>2]|0;if((d|0)!=(b|0)){r=9;break}if(!((h|0)>0&(g|0)>0)){b=0;break}}if((r|0)==9)b=d-b|0;i=s;return b|0}function ce(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0;e=c[a+32>>2]|0;if((e|0)>0)h=(b[c[a+36>>2]>>1]|0)==0?0:e;else h=0;e=c[d+32>>2]|0;if((e|0)>0)e=(b[c[d+36>>2]>>1]|0)==0?0:e;else e=0;a:do if((e|0)==(h|0)){g=d+36|0;a=a+36|0;f=0;while(1){if((f|0)>=(h|0)){e=0;break a}d=b[(c[g>>2]|0)+(f<<1)>>1]|0;e=b[(c[a>>2]|0)+(f<<1)>>1]|0;if(d<<16>>16==e<<16>>16)f=f+1|0;else break}e=(d&65535)-(e&65535)|0}else e=e-h|0;while(0);return e|0}function de(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+16|0;m=s+4|0;l=s;g=c[d+4>>2]|0;if(g){r=(c[g+12>>2]|0)!=0;g=c[d+((r&1)<<2)>>2]|0;if(r?(h=c[e>>2]|0,(h|0)!=0):0){r=g;p=(c[h+12>>2]|0)==0?0:h}else{r=g;p=0}}else{r=c[d>>2]|0;p=0}o=(p|0)!=0;a:do if(((r|0)==0^o)&((r|0)!=0|o))if(!(c[r+76>>2]|0))if(!(c[p+76>>2]|0)){d=r+12|0;if((c[d>>2]|0)>0?(c[p+12>>2]|0)==0:0){g=0;break}c[l>>2]=0;c[m>>2]=0;g=be(c[r+16>>2]|0,c[p+16>>2]|0,m,l)|0;if(!g){n=c[p+12>>2]|0;g=c[d>>2]|0;if((n|0)!=(g|0)){g=n-g|0;break}e=p+20|0;h=r+20|0;j=0;while(1){if((j|0)>=(n|0))break;d=a[(c[e>>2]|0)+j>>0]|0;g=a[(c[h>>2]|0)+j>>0]|0;if(d<<24>>24==g<<24>>24)j=j+1|0;else{q=17;break}}if((q|0)==17){g=(d&255)-(g&255)|0;break}k=c[p+24>>2]|0;g=c[r+24>>2]|0;if((k|0)!=(g|0)){g=k-g|0;break}e=p+28|0;h=r+28|0;j=0;while(1){if((j|0)>=(k|0))break;d=b[(c[e>>2]|0)+(j<<1)>>1]|0;g=b[(c[h>>2]|0)+(j<<1)>>1]|0;if(d<<16>>16==g<<16>>16)j=j+1|0;else{q=23;break}}if((q|0)==23){g=(d&65535)-(g&65535)|0;break}d=c[l>>2]|0;g=c[m>>2]|0;if((d|0)!=(g|0)){g=d-g|0;break}e=p+40|0;h=r+40|0;j=0;while(1){if((j|0)>=(n|0))break;d=a[(c[e>>2]|0)+j>>0]|0;g=a[(c[h>>2]|0)+j>>0]|0;if(d<<24>>24==g<<24>>24)j=j+1|0;else{q=29;break}}if((q|0)==29){if(!(d<<24>>24)){g=1;break}g=g<<24>>24==0?-1:(d<<24>>24)-(g<<24>>24)|0;break}g=ce(r,p)|0;if(!g){g=c[p+44>>2]|0;b:do if(g|0){d=0;while(1){if((d|0)>=(n|0))break b;if(!(a[g+d>>0]|0))d=d+1|0;else{g=1;break a}}}while(0);n=c[r+4>>2]|0;o=c[p+4>>2]|0;g=ee(c[r+64>>2]|0,n,c[p+64>>2]|0,o)|0;if(!g){do if(f|0){m=c[p+48>>2]|0;g=c[r+48>>2]|0;if((m|0)!=(g|0)){g=m-g|0;break a}k=p+52|0;l=r+52|0;j=0;while(1){if((j|0)>=(m|0)){j=0;q=45;break}e=c[k>>2]|0;d=b[e+(j*10|0)>>1]|0;h=c[l>>2]|0;g=b[h+(j*10|0)>>1]|0;if(d<<16>>16!=g<<16>>16){q=42;break}d=b[e+(j*10|0)+2>>1]|0;g=b[h+(j*10|0)+2>>1]|0;if(d<<16>>16==g<<16>>16)j=j+1|0;else{q=44;break}}if((q|0)==42){g=(d&65535)-(g&65535)|0;break a}else if((q|0)==44){g=(d<<16>>16)-(g<<16>>16)|0;break a}else if((q|0)==45){while(1){if((j|0)>=(m|0)){q=52;break}e=c[k>>2]|0;d=b[e+(j*10|0)+8>>1]|0;h=c[l>>2]|0;g=b[h+(j*10|0)+8>>1]|0;if(d<<16>>16!=g<<16>>16){q=47;break}d=b[e+(j*10|0)+6>>1]|0;g=b[h+(j*10|0)+6>>1]|0;if(d<<16>>16!=g<<16>>16){q=49;break}d=b[e+(j*10|0)+4>>1]|0;g=b[h+(j*10|0)+4>>1]|0;if(d<<16>>16==g<<16>>16){j=j+1|0;q=45}else{q=51;break}}if((q|0)==47){g=(d<<16>>16)-(g<<16>>16)|0;break a}else if((q|0)==49){g=(d<<16>>16)-(g<<16>>16)|0;break a}else if((q|0)==51){g=(d<<16>>16)-(g<<16>>16)|0;break a}else if((q|0)==52){if(c[p+56>>2]|0){g=1;break a}if(c[r+56>>2]|0){g=1;break a}g=ee(c[r+68>>2]|0,n,c[p+68>>2]|0,o)|0;if(!g)break;else break a}}}while(0);d=c[p+8>>2]|0;g=c[r+8>>2]|0;if(d)if(!g)g=0;else{g=g-d|0;break}else g=(g|0)!=0;g=(g&1)-((d|0)!=0&1)|0}}}}else g=-1;else g=1;else g=0;while(0);i=s;return g|0}function ee(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;h=(f|0)!=0;i=(d|0)!=0;do if(i&h){r=c[f+28>>2]|0;s=c[d+28>>2]|0;j=(r|0)<(s|0)?r:s;n=f+32|0;o=d+32|0;p=f+36|0;k=d+36|0;l=f+40|0;m=d+40|0;q=0;while(1){if((q|0)>=(j|0)){j=10;break}i=b[(c[n>>2]|0)+(q<<1)>>1]|0;h=b[(c[o>>2]|0)+(q<<1)>>1]|0;if(i<<16>>16!=h<<16>>16){j=5;break}i=b[(c[p>>2]|0)+(q<<1)>>1]|0;h=b[(c[k>>2]|0)+(q<<1)>>1]|0;if(i<<16>>16!=h<<16>>16){j=7;break}i=a[(c[l>>2]|0)+q>>0]|0;h=a[(c[m>>2]|0)+q>>0]|0;if(i<<24>>24==h<<24>>24)q=q+1|0;else{j=9;break}}if((j|0)==5){h=(i&65535)-(h&65535)|0;break}else if((j|0)==7){h=(i&65535)-(h&65535)|0;break}else if((j|0)==9){h=(i<<24>>24)-(h<<24>>24)|0;break}else if((j|0)==10){if((r|0)!=(s|0)){h=r-s|0;break}p=c[f>>2]|0;q=c[d>>2]|0;j=(p|0)<(q|0)?p:q;k=f+4|0;l=d+4|0;m=f+8|0;n=d+8|0;o=0;while(1){if((o|0)>=(j|0)){j=18;break}i=b[(c[k>>2]|0)+(o<<1)>>1]|0;h=b[(c[l>>2]|0)+(o<<1)>>1]|0;if(i<<16>>16!=h<<16>>16){j=15;break}i=a[(c[m>>2]|0)+o>>0]|0;h=a[(c[n>>2]|0)+o>>0]|0;if(i<<24>>24==h<<24>>24)o=o+1|0;else{j=17;break}}if((j|0)==15){h=(i&65535)-(h&65535)|0;break}else if((j|0)==17){h=(i<<24>>24)-(h<<24>>24)|0;break}else if((j|0)==18){if((p|0)!=(q|0)){h=p-q|0;break}if((g|e)&6|0){j=29;break}i=(c[f+20>>2]|0)>>>31;h=(c[d+20>>2]|0)>>>31;if((i|0)==(h|0)){j=29;break}h=i-h|0;break}}}else{if(h){if((c[f+28>>2]|0)>0){h=1;break}if((c[f>>2]|0)>0){h=1;break}}if(i)if((c[d+28>>2]|0)<=0?(c[d>>2]|0)<=0:0)j=29;else h=-1;else j=29}while(0);if((j|0)==29)h=0;return h|0}function fe(a,b){a=a|0;b=b|0;if(((a|0)!=0?(b|0)!=0&(c[a+76>>2]|0)==0:0)?(c[b>>2]|0)>0:0)if(c[b+20>>2]|0){b=c[a+4>>2]|0;if(!(b&2))b=(b&4|0)==0?2:8;else b=4}else b=1;else b=0;return b|0}function ge(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;C=i;i=i+16|0;s=C+4|0;u=C;j=c[e+4>>2]|0;if(j){B=(c[j+12>>2]|0)!=0;j=c[e+((B&1)<<2)>>2]|0;if(B){k=c[f>>2]|0;if(!k){B=j;v=1;A=0}else{B=j;v=1;A=(c[k+12>>2]|0)==0?0:k}}else{B=j;v=0;A=0}}else{B=c[e>>2]|0;v=0;A=0}c[u>>2]=0;c[s>>2]=0;z=(B|0)!=0;do if(((z?(m=B+76|0,(c[m>>2]|0)==0):0)?(n=B+16|0,l=c[n>>2]|0,(l|0)!=0):0)?(a[l>>0]|0)!=0:0){a[g>>0]=d[g>>0]|2;j=(A|0)!=0;if(((j?(c[A+76>>2]|0)==0:0)?(o=c[A+16>>2]|0,o|0):0)?a[o>>0]|0:0){if((be(c[n>>2]|0,o,s,u)|0)==0?(c[s>>2]|0)==(c[u>>2]|0):0){x=g+22|0;a[x>>0]=d[x>>0]|1;x=24;break}x=g+22|0;a[x>>0]=d[x>>0]|2;x=24;break}q=g+22|0;a[q>>0]=d[q>>0]|(j?4:1);q=m;x=26}else x=19;while(0);if((x|0)==19)if((((A|0)!=0?(c[A+76>>2]|0)==0:0)?(p=c[A+16>>2]|0,(p|0)!=0):0)?(a[p>>0]|0)!=0:0){x=g+22|0;a[x>>0]=d[x>>0]|2;x=24}else x=24;if((x|0)==24?z:0){q=B+76|0;x=26}do if((x|0)==26?(c[q>>2]|0)==0:0){if((c[B+24>>2]|0)>1?(a[g>>0]=d[g>>0]|2,c[q>>2]|0):0)break;if((c[B+32>>2]|0)>0?(r=c[B+36>>2]|0,(r|0)!=0):0){y=(b[r>>1]|0)!=0;j=y&1;c[s>>2]=j;if(!y)x=33}else{c[s>>2]=0;j=0;x=33}a:do if((x|0)==33){k=c[B+40>>2]|0;if(k){l=c[B+12>>2]|0;m=0;while(1){if((m|0)>=(l|0))break a;if(!(a[k+m>>0]|0))m=m+1|0;else break}c[s>>2]=1;j=1}}while(0);y=g+2|0;a[y>>0]=d[y>>0]|(j|0?2:0)}while(0);y=(A|0)!=0;if((y?(c[A+76>>2]|0)==0:0)?(t=c[A+44>>2]|0,t|0):0){c[u>>2]=0;b:do if(z?(c[B+76>>2]|0)==0:0){j=c[B+12>>2]|0;k=0;while(1){if((k|0)>=(j|0)){j=0;break b}if(!(a[t+k>>0]|0))k=k+1|0;else break}c[u>>2]=1;j=2}else j=0;while(0);u=g+24|0;a[u>>0]=d[u>>0]|j}m=g+25|0;do if(z?(c[B+76>>2]|0)==0:0){l=B+8|0;k=g+3|0;j=a[k>>0]|0;if(c[l>>2]|0)j=(j&255|2)&255;a[k>>0]=j;if(y){j=c[l>>2]|0;if(c[A+76>>2]|0){a[m>>0]=d[m>>0]|(j|0?4:0);break}k=c[A+8>>2]|0;if(!j){if(!k)break;a[m>>0]=d[m>>0]|2;break}if((j|0)==(k|0)){a[m>>0]=d[m>>0]|1;break}j=a[m>>0]|0;if(!k){a[m>>0]=j|4;break}else{a[m>>0]=j|2;break}}if((h|0)!=1){a[m>>0]=d[m>>0]|(c[l>>2]|0)!=0;break}if(((v&(b[e+16>>1]|0)!=(b[f+16>>1]|0)?(w=c[f+4>>2]|0,w|0):0)?(c[w+76>>2]|0)==0:0)?c[w+12>>2]|0:0){k=c[w+8>>2]|0;j=c[l>>2]|0;if(!j){if(!k)break;a[m>>0]=d[m>>0]|2;break}if((j|0)==(k|0)){a[m>>0]=d[m>>0]|1;break}j=a[m>>0]|0;if(!k){a[m>>0]=j|4;break}else{a[m>>0]=j|2;break}}a[m>>0]=d[m>>0]|(c[l>>2]|0)!=0}else x=79;while(0);if((((x|0)==79?y:0)?(c[A+76>>2]|0)==0:0)?c[A+8>>2]|0:0)a[m>>0]=d[m>>0]|2;if(z?(c[B+76>>2]|0)==0:0){p=c[B+68>>2]|0;o=c[B+64>>2]|0}else{p=0;o=0}if(y?(c[A+76>>2]|0)==0:0){s=c[A+68>>2]|0;t=c[A+64>>2]|0}else{s=0;t=0}j=g+5|0;n=(o|0)!=0;if(n?c[o+28>>2]|0:0)a[j>>0]=d[j>>0]|2;j=g+27|0;m=(t|0)!=0;do if(m?(c[t+28>>2]|0)!=0:0){if(n?c[o+28>>2]|0:0){h=(Nf(o,8,t,8,0)|0)==0;k=a[j>>0]|0;if(h){a[j>>0]=k|2;break}else{a[j>>0]=k|1;break}}a[j>>0]=d[j>>0]|2}else x=100;while(0);if(((x|0)==100?n:0)?c[o+28>>2]|0:0)a[j>>0]=d[j>>0]|(y?4:1);j=g+16|0;l=(p|0)!=0;do if(l?(c[p+28>>2]|0)!=0:0){h=(Nf(p,8,o,8,0)|0)==0;k=a[j>>0]|0;if(h){a[j>>0]=k|2;break}else{a[j>>0]=k|1;break}}else x=108;while(0);if(((x|0)==108?n:0)?c[o+28>>2]|0:0)a[j>>0]=d[j>>0]|1;j=g+38|0;c:do if((s|0)!=0?(c[s+28>>2]|0)!=0:0){if(Nf(s,8,t,8,0)|0){a[j>>0]=d[j>>0]|1;break}if(!(n?(c[o+28>>2]|0)!=0:0))x=117;do if((x|0)==117){if(m?c[t+28>>2]|0:0)break;if(Nf(s,8,p,8,0)|0){a[j>>0]=d[j>>0]|8;break c}}while(0);a[j>>0]=d[j>>0]|2}else x=122;while(0);do if((x|0)==122){if(m?c[t+28>>2]|0:0){a[j>>0]=d[j>>0]|1;break}if(l?c[p+28>>2]|0:0){if(n?c[o+28>>2]|0:0)break;a[j>>0]=d[j>>0]|(y?4:1)}}while(0);u=fe(B,o)|0;q=fe(B,p)|0;v=fe(A,t)|0;r=fe(A,s)|0;if(u|0){x=g+6|0;a[x>>0]=d[x>>0]|(u&15|0?2:0);x=g+7|0;a[x>>0]=d[x>>0]|u&2;x=g+8|0;a[x>>0]=d[x>>0]|(u&14|0?2:0)}j=g+28|0;m=(v&15|0)!=0;do if(m){x=(Nf(t,2,o,2,0)|0)==0;k=a[j>>0]|0;if(x){a[j>>0]=k|2;break}else{a[j>>0]=k|1;break}}else if(u&15|0)a[j>>0]=d[j>>0]|(y?4:1);while(0);j=g+17|0;l=(q&15|0)!=0;do if(l){x=(Nf(p,2,o,2,0)|0)==0;k=a[j>>0]|0;if(x){a[j>>0]=k|2;break}else{a[j>>0]=k|1;break}}else if(u&15|0)a[j>>0]=d[j>>0]|1;while(0);j=g+39|0;do if(!(r&15)){if(m){a[j>>0]=d[j>>0]|1;break}if((u&15|0)==0&l)a[j>>0]=d[j>>0]|(y?4:1)}else{if(Nf(s,2,t,2,0)|0){a[j>>0]=d[j>>0]|1;break}if(((v|u)&15|0)==0?Nf(s,2,p,2,0)|0:0){a[j>>0]=d[j>>0]|8;break}a[j>>0]=d[j>>0]|2}while(0);j=g+29|0;l=(v&2|0)!=0;m=(u&2|0)!=0;do if(!l){if(m)a[j>>0]=d[j>>0]|(y?4:1)}else{if(m?(c[t+20>>2]|0)==(c[o+20>>2]|0):0){a[j>>0]=d[j>>0]|1;break}a[j>>0]=d[j>>0]|2}while(0);j=g+18|0;k=(q&2|0)!=0;do if(!k){if(m)a[j>>0]=d[j>>0]|1}else{if(m?(c[p+20>>2]|0)==(c[o+20>>2]|0):0){a[j>>0]=d[j>>0]|1;break}a[j>>0]=d[j>>0]|2}while(0);j=g+40|0;d:do if(!(r&2)){if(l){a[j>>0]=d[j>>0]|1;break}if(!(m|k^1))a[j>>0]=d[j>>0]|(y?4:1)}else{do if(l){if((c[s+20>>2]|0)!=(c[t+20>>2]|0))break;a[j>>0]=d[j>>0]|1;break d}else{if(((v|u)&2|0)!=0|k^1)break;if((c[s+20>>2]|0)!=(c[p+20>>2]|0))break;a[j>>0]=d[j>>0]|8;break d}while(0);a[j>>0]=d[j>>0]|2}while(0);j=g+30|0;n=v&14;o=(n|0)!=0;p=u&14;do if(o){k=a[j>>0]|0;if((n|0)==(p|0)){a[j>>0]=k|1;break}else{a[j>>0]=k|2;break}}else if(p|0)a[j>>0]=d[j>>0]|(y?4:1);while(0);l=g+19|0;j=q&14;m=(j|0)!=0;do if(m){k=a[l>>0]|0;if((j|0)==(p|0)){a[l>>0]=k|1;break}else{a[l>>0]=k|2;break}}else{if(!p)break;a[l>>0]=d[l>>0]|1}while(0);k=g+41|0;j=r&14;do if(j){if((j|0)==(n|0)){a[k>>0]=d[k>>0]|1;break}j=d[k>>0]|0;if(((v|u)&14|0)!=0|m^1){a[k>>0]=j|2;break}else{a[k>>0]=j|8;break}}else{if(o){a[k>>0]=d[k>>0]|1;break}if(!((p|0)==0&m))break;a[k>>0]=d[k>>0]|(y?4:1)}while(0);do if((e|0)!=0&(f|0)!=0){if((b[e+16>>1]|0)==(b[f+16>>1]|0))break;f=g+32|0;a[f>>0]=d[f>>0]|2}while(0);j=g+20|0;do if(z){if(c[B+76>>2]|0)break;if((c[B+48>>2]|0)==0?(c[B+56>>2]|0)==0:0)break;a[j>>0]=d[j>>0]|2}while(0);s=g+42|0;e:do if(y){if(c[A+76>>2]|0){j=0;break}q=c[A+48>>2]|0;do if(!q){if(c[A+56>>2]|0)break;if(!z){j=0;break e}if(c[B+76>>2]|0){j=0;break e}if((c[B+48>>2]|0)==0?(c[B+56>>2]|0)==0:0){j=0;break e}a[s>>0]=d[s>>0]|4;j=0;break e}while(0);do if(z){if(c[B+76>>2]|0)break;if((q|0)!=(c[B+48>>2]|0))break;r=c[A+56>>2]|0;if((r|0)!=(c[B+56>>2]|0))break;n=A+52|0;o=B+52|0;j=0;p=0;while(1){if((p|0)>=(q|0))break;l=c[n>>2]|0;j=b[l+(p*10|0)>>1]|0;m=c[o>>2]|0;k=b[m+(p*10|0)>>1]|0;if(j<<16>>16!=k<<16>>16){j=(j&65535)-(k&65535)|0;break}j=b[l+(p*10|0)+2>>1]|0;k=b[m+(p*10|0)+2>>1]|0;if(j<<16>>16!=k<<16>>16){j=(j<<16>>16)-(k<<16>>16)|0;break}j=b[l+(p*10|0)+8>>1]|0;k=b[m+(p*10|0)+8>>1]|0;if(j<<16>>16!=k<<16>>16){j=(j<<16>>16)-(k<<16>>16)|0;break}j=b[l+(p*10|0)+6>>1]|0;k=b[m+(p*10|0)+6>>1]|0;if(j<<16>>16!=k<<16>>16){j=(j<<16>>16)-(k<<16>>16)|0;break}f=b[l+(p*10|0)+4>>1]|0;g=b[m+(p*10|0)+4>>1]|0;j=(f<<16>>16)-(g<<16>>16)|0;if(f<<16>>16==g<<16>>16)p=p+1|0;else break}f:do if(!j){p=A+60|0;n=B+60|0;j=0;o=0;while(1){if((o|0)>=(r|0))break f;l=c[p>>2]|0;j=b[l+(o<<3)>>1]|0;m=c[n>>2]|0;k=b[m+(o<<3)>>1]|0;if(j<<16>>16!=k<<16>>16){j=(j&65535)-(k&65535)|0;break f}j=b[l+(o<<3)+6>>1]|0;k=b[m+(o<<3)+6>>1]|0;if(j<<16>>16!=k<<16>>16){j=(j&65535)-(k&65535)|0;break f}k=b[l+(o<<3)+4>>1]|0;j=b[m+(o<<3)+4>>1]|0;if(k<<16>>16!=j<<16>>16)break;A=b[l+(o<<3)+2>>1]|0;B=b[m+(o<<3)+2>>1]|0;j=(A&65535)-(B&65535)|0;if(A<<16>>16==B<<16>>16)o=o+1|0;else break f}j=(k&65535)-(j&65535)|0;break e}while(0);a[s>>0]=d[s>>0]|(j|0?2:8);j=0;break e}while(0);a[s>>0]=d[s>>0]|2;j=0}else{if(!z){j=0;break}if(c[B+76>>2]|0){j=0;break}if((c[B+48>>2]|0)==0?(c[B+56>>2]|0)==0:0){j=0;break}a[s>>0]=d[s>>0]|1;j=0}while(0);i=C;return j|0}function he(a){a=a|0;a=a<<24>>24;if(!(a&6))return 0;else return ((a&15|0)==4?2:(a&11|0)!=0&1)|0;return 0}function ie(b){b=b|0;var c=0,d=0,e=0,f=0;d=0;c=0;while(1){if((d|0)==11)break;e=a[b+33+d>>0]|c;d=d+1|0;c=e}if(c&6){c=b+42|0;d=a[c>>0]|0;if(!(d&6)){a[c>>0]=4;d=4}}else{c=b+33|0;e=c+11|0;do{a[c>>0]=0;c=c+1|0}while((c|0)<(e|0));d=0}e=0;c=0;while(1){if((e|0)==11)break;f=a[b+11+e>>0]|c;e=e+1|0;c=f}if(c&6){c=b+20|0;if(!(a[c>>0]&6)){a[c>>0]=4;c=0;e=0}else{c=0;e=0}}else{c=b+11|0;e=c+11|0;do{a[c>>0]=0;c=c+1|0}while((c|0)<(e|0));c=0;e=0}while(1){if((c|0)==11)break;f=a[b+22+c>>0]|e;c=c+1|0;e=f}c=b+22|0;if(!((e&6|0)==0&d<<24>>24==0)){if(!(a[c>>0]&6))a[c>>0]=4}else{e=c+11|0;do{a[c>>0]=0;c=c+1|0}while((c|0)<(e|0))}return 0}function je(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=i;i=i+16|0;q=x+4|0;p=x;h=c[d+4>>2]|0;if(!h)j=0;else j=(c[h+12>>2]|0)!=0;h=c[e+4>>2]|0;if(!h)k=0;else k=(c[h+12>>2]|0)!=0;h=k&1;r=c[d+((j&1)<<2)>>2]|0;if(j?(l=c[d>>2]|0,(l|0)!=0):0)u=(c[l+12>>2]|0)==0?0:l;else u=0;v=c[e+(h<<2)>>2]|0;if(k?(m=c[e>>2]|0,(m|0)!=0):0)t=(c[m+12>>2]|0)==0?0:m;else t=0;h=(r|0)==0;j=(v|0)!=0;a:do if(h|j)if(!(h&j))if((r|0)!=0|j){h=(c[v+76>>2]|0)==0;if(!(c[r+76>>2]|0)){if(!h){h=-1;break}}else if(h){h=1;break}c[p>>2]=0;c[q>>2]=0;n=r+16|0;o=v+16|0;h=be(c[n>>2]|0,c[o>>2]|0,q,p)|0;if(!h){e=c[v+12>>2]|0;h=c[r+12>>2]|0;if((e|0)!=(h|0)){h=e-h|0;break}k=v+20|0;l=r+20|0;d=0;while(1){if((d|0)>=(e|0))break;j=a[(c[k>>2]|0)+d>>0]|0;h=a[(c[l>>2]|0)+d>>0]|0;if(j<<24>>24==h<<24>>24)d=d+1|0;else{w=23;break}}if((w|0)==23){h=(j&255)-(h&255)|0;break}m=c[v+24>>2]|0;h=c[r+24>>2]|0;if((m|0)!=(h|0)){h=m-h|0;break}k=v+28|0;l=r+28|0;d=0;while(1){if((d|0)>=(m|0))break;j=b[(c[k>>2]|0)+(d<<1)>>1]|0;h=b[(c[l>>2]|0)+(d<<1)>>1]|0;if(j<<16>>16==h<<16>>16)d=d+1|0;else{w=29;break}}if((w|0)==29){h=(j&65535)-(h&65535)|0;break}j=c[p>>2]|0;h=c[q>>2]|0;if((j|0)!=(h|0)){h=j-h|0;break}k=v+40|0;l=r+40|0;d=0;while(1){if((d|0)>=(e|0))break;j=a[(c[k>>2]|0)+d>>0]|0;h=a[(c[l>>2]|0)+d>>0]|0;if(j<<24>>24==h<<24>>24)d=d+1|0;else{w=35;break}}if((w|0)==35){if(!(j<<24>>24)){h=1;break}h=h<<24>>24==0?-1:(j<<24>>24)-(h<<24>>24)|0;break}h=ce(r,v)|0;if(!h){if(!f){k=(u|0)!=0;if(k?(c[u+44>>2]|0)!=0:0)w=43;else w=41;if(((w|0)==41?t|0:0)?c[t+44>>2]|0:0)w=43;b:do if((w|0)==43){j=c[(k?u+16|0:n)>>2]|0;l=(t|0)!=0;h=c[(l?t+16|0:o)>>2]|0;if((j|0)!=0&(h|0)!=0?(s=ae(j,h)|0,s|0):0){h=s;break a}do if(k){n=c[u+44>>2]|0;do if(l&(n|0)!=0){l=c[t+44>>2]|0;if(!l)break;d=c[u+12>>2]|0;m=c[t+12>>2]|0;k=(m|0)>(d|0)?d:m;e=0;while(1){if((e|0)>=(k|0)){w=60;break}j=a[l+e>>0]|0;h=a[n+e>>0]|0;if(j<<24>>24==h<<24>>24)e=e+1|0;else break}if((w|0)==60)if((m|0)==(d|0))break b;else{h=m-d|0;break a}if(!(j<<24>>24)){h=1;break a}h=h<<24>>24==0?-1:(j<<24>>24)-(h<<24>>24)|0;break a}while(0);if(!n)break;h=c[u+12>>2]|0;j=0;while(1){if((j|0)>=(h|0))break b;if(!(a[n+j>>0]|0))j=j+1|0;else{h=-1;break a}}}while(0);h=c[t+12>>2]|0;j=t+44|0;k=0;while(1){if((k|0)>=(h|0))break b;if(!(a[(c[j>>2]|0)+k>>0]|0))k=k+1|0;else{h=1;break a}}}while(0);r=(u|0)==0?r:u;q=(t|0)==0?v:t}else q=v;o=c[r+4>>2]|0;p=c[q+4>>2]|0;h=ee(c[r+64>>2]|0,o,c[q+64>>2]|0,p)|0;if(!h){do if(g|0){n=c[q+48>>2]|0;h=c[r+48>>2]|0;if((n|0)!=(h|0)){h=n-h|0;break a}m=q+52|0;e=r+52|0;d=0;while(1){if((d|0)>=(n|0)){d=0;w=72;break}k=c[m>>2]|0;j=b[k+(d*10|0)>>1]|0;l=c[e>>2]|0;h=b[l+(d*10|0)>>1]|0;if(j<<16>>16!=h<<16>>16){w=69;break}j=b[k+(d*10|0)+2>>1]|0;h=b[l+(d*10|0)+2>>1]|0;if(j<<16>>16==h<<16>>16)d=d+1|0;else{w=71;break}}if((w|0)==69){h=(j&65535)-(h&65535)|0;break a}else if((w|0)==71){h=(j<<16>>16)-(h<<16>>16)|0;break a}else if((w|0)==72){while(1){if((d|0)>=(n|0)){w=79;break}k=c[m>>2]|0;j=b[k+(d*10|0)+8>>1]|0;l=c[e>>2]|0;h=b[l+(d*10|0)+8>>1]|0;if(j<<16>>16!=h<<16>>16){w=74;break}j=b[k+(d*10|0)+6>>1]|0;h=b[l+(d*10|0)+6>>1]|0;if(j<<16>>16!=h<<16>>16){w=76;break}j=b[k+(d*10|0)+4>>1]|0;h=b[l+(d*10|0)+4>>1]|0;if(j<<16>>16==h<<16>>16){d=d+1|0;w=72}else{w=78;break}}if((w|0)==74){h=(j<<16>>16)-(h<<16>>16)|0;break a}else if((w|0)==76){h=(j<<16>>16)-(h<<16>>16)|0;break a}else if((w|0)==78){h=(j<<16>>16)-(h<<16>>16)|0;break a}else if((w|0)==79){n=c[q+56>>2]|0;h=c[r+56>>2]|0;if((n|0)!=(h|0)){h=n-h|0;break a}d=q+60|0;m=r+60|0;e=0;while(1){if((e|0)>=(n|0)){w=91;break}k=c[d>>2]|0;j=b[k+(e<<3)>>1]|0;l=c[m>>2]|0;h=b[l+(e<<3)>>1]|0;if(j<<16>>16!=h<<16>>16){w=84;break}j=b[k+(e<<3)+6>>1]|0;h=b[l+(e<<3)+6>>1]|0;if(j<<16>>16!=h<<16>>16){w=86;break}j=b[k+(e<<3)+4>>1]|0;h=b[l+(e<<3)+4>>1]|0;if(j<<16>>16!=h<<16>>16){w=88;break}j=b[k+(e<<3)+2>>1]|0;h=b[l+(e<<3)+2>>1]|0;if(j<<16>>16==h<<16>>16)e=e+1|0;else{w=90;break}}if((w|0)==84){h=(j&65535)-(h&65535)|0;break a}else if((w|0)==86){h=(j&65535)-(h&65535)|0;break a}else if((w|0)==88){h=(j&65535)-(h&65535)|0;break a}else if((w|0)==90){h=(j&65535)-(h&65535)|0;break a}else if((w|0)==91){h=ee(c[r+68>>2]|0,o,c[q+68>>2]|0,p)|0;if(!h)break;else break a}}}}while(0);j=c[q+8>>2]|0;h=c[r+8>>2]|0;if(j)if(!h)h=0;else{h=h-j|0;break}else h=(h|0)!=0;h=(h&1)-((j|0)!=0&1)|0}}}}else h=0;else h=1;else h=-1;while(0);i=x;return h|0}function ke(a,c){a=a|0;c=c|0;var d=0;d=je(a,c,0,1)|0;if(!d){d=je(a,c,1,1)|0;if(!d)d=(b[a+16>>1]|0)-(b[c+16>>1]|0)|0}return d|0}function le(a,c){a=a|0;c=c|0;var d=0;d=je(a,c,1,1)|0;if(!d){d=je(a,c,0,1)|0;if(!d)d=(b[a+16>>1]|0)-(b[c+16>>1]|0)|0}return d|0}function me(b){b=b|0;var c=0,d=0;c=b;while(1)if(!(a[c>>0]|0))break;else c=c+1|0;while(1){c=c+-1|0;if(b>>>0>=c>>>0)break;d=a[c>>0]|0;a[c>>0]=a[b>>0]|0;a[b>>0]=d;b=b+1|0}return}function ne(d,f,g,h,j,k){d=d|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;J=i;i=i+16|0;D=J;m=k&8;l=j<<1;G=Bq(l)|0;k=Bq(l)|0;H=Bq(l)|0;I=Bq(j)|0;F=Eh(f,g,j)|0;E=(F|0)!=0;a:do if((G|0)!=0&(k|0)!=0&(H|0)!=0&(I|0)!=0&E){C=(m|0)!=0;b:do if(C)f=0;else{d=1;f=0;while(1){if((d|0)>=(j|0))break b;B=(e[c[F+(d<<2)>>2]>>1]|0)<(e[c[F+(f<<2)>>2]>>1]|0)?d:f;d=d+1|0;f=B}}while(0);er(H|0,0,l|0)|0;er(k|0,0,l|0)|0;er(I|0,0,j|0)|0;b[H+(f<<1)>>1]=1;b[k+(f<<1)>>1]=m>>>3&65535^1;B=f&65535;b[G>>1]=B;A=(m|0)==0;m=1;d=0;g=0;c:while(1){d:while(1){e:while(1){l=e[G+(d<<1)>>1]|0;t=I+l|0;u=F+(l<<2)|0;v=c[u>>2]|0;w=(d|0)==0;z=d;d=d+-1|0;x=G+(d<<1)|0;y=H+(l<<1)|0;n=a[t>>0]|0;while(1){o=n<<24>>24;if((e[v>>1]|0)<=(o|0))break;s=n+1<<24>>24;a[t>>0]=s;q=(c[u>>2]|0)+(o+1<<1)|0;o=b[q>>1]|0;p=o&65535;n=H+(p<<1)|0;r=b[n>>1]|0;if(!(r<<16>>16)){d=z;break d}if((!w?o<<16>>16!=(b[x>>1]|0):0)?(r&65535)<(e[y>>1]|0):0){d=z;break e}b[q>>1]=32767;n=s}a[t>>0]=0;if(A&(z|0)!=0){y=k+(e[x>>1]<<1)|0;b[y>>1]=(e[y>>1]|0)+(e[k+(l<<1)>>1]|0)}if((z|0)<=0)break c}if(!C){z=k+(l<<1)|0;b[z>>1]=(b[z>>1]|0)+1<<16>>16}g=g+1|0}d=d+1|0;b[G+(d<<1)>>1]=o;m=m+1<<16>>16;b[n>>1]=m;if(C){b[k+(p<<1)>>1]=l+1;continue}else{z=k+(p<<1)|0;b[z>>1]=(b[z>>1]|0)+1<<16>>16;continue}}c[D>>2]=H;c[D+4>>2]=k;o=D+8|0;c[o>>2]=-1;p=0;while(1){if((p|0)>=(j|0))break;d=F+(p<<2)|0;m=c[d>>2]|0;l=b[m>>1]|0;if((l&65535)>1){c[o>>2]=p;ih(D,m+2|0,l&65535,2,13)|0;m=c[d>>2]|0;l=b[m>>1]|0}l=l&65535;d=0;while(1){if((d|0)>=(l|0))break;n=d+1|0;if((e[m+(n<<1)>>1]|0)<32767)d=n;else break}b[m>>1]=d;p=p+1|0}s=((g+j|0)*3|0)+3|0;f:do if(C){d=Dq(s,2)|0;if(!d){K=65;break a}p=(h|0)==0;f=-3;q=0;while(1){if((q|0)>=(j|0)){K=65;break a}l=f+3|0;if((f+9|0)>(s|0)){K=62;break f}D=b[k+(q<<1)>>1]|0;b[d+(l<<1)>>1]=D<<16>>16==0?32767:D;if(p)g=0;else g=(a[h+q>>0]|0)+16|0;b[d+(f+4<<1)>>1]=g;b[d+(f+5<<1)>>1]=l|0?44:0;m=c[F+(q<<2)>>2]|0;n=H+(q<<1)|0;o=1;f=l;while(1){if((o|0)>(e[m>>1]|0))break;g=e[m+(o<<1)>>1]|0;if((e[n>>1]|0)<=(e[H+(g<<1)>>1]|0))break;l=f+3|0;if((f+9|0)>(s|0))break f;b[d+(l<<1)>>1]=g+1;b[d+(f+4<<1)>>1]=0;b[d+(f+5<<1)>>1]=45;o=o+1|0;f=l}q=q+1|0}}else{Cq(k);d=Dq(s,2)|0;g:do if(d|0){er(I|0,0,j|0)|0;b[G>>1]=B;b[d>>1]=f+1;r=(h|0)!=0;if(r)k=(a[h+f>>0]|0)+16&65535;else k=0;b[d+2>>1]=k;q=0;k=0;while(1){while(1){f=e[G+(k<<1)>>1]|0;g=I+f|0;m=a[g>>0]|0;l=m<<24>>24;n=c[F+(f<<2)>>2]|0;if((e[n>>1]|0)>(l|0))break;a[g>>0]=0;if((k|0)>0)k=k+-1|0;else break g}o=l+1|0;p=q+3|0;if((q+9|0)>(s|0)){k=0;K=62;break f}a[g>>0]=m+1<<24>>24;g=b[n+(o<<1)>>1]|0;l=g&65535;b[d+(p<<1)>>1]=l+1;if((e[H+(l<<1)>>1]|0)>(e[H+(f<<1)>>1]|0)){k=k+1|0;b[G+(k<<1)>>1]=g;if(r)f=(a[h+l>>0]|0)+16|0;else f=0;b[d+(q+4<<1)>>1]=f}else b[d+(q+4<<1)>>1]=0;j=b[n>>1]|0;f=j&65535;if((j&65535)>1)if(!(m<<24>>24))f=40;else f=(o|0)==(f|0)?41:44;else f=45;b[d+(q+5<<1)>>1]=f;q=p}}while(0);Cq(G);break a}while(0);if((K|0)==62)if(!d){d=0;K=65;break}Cq(d);d=0;K=65}else{d=0;K=65}while(0);if((K|0)==65){Cq(G);if(k)Cq(k)}Cq(H);Cq(I);if(E)Gh(F);i=J;return d|0}function oe(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,i=0;g=b[a>>1]|0;i=g&65535;a=b[d>>1]|0;h=a&65535;a=(a&65535)>32766;if((g&65535)<=32766)if(a)a=-1;else{d=c[f>>2]|0;a=b[d+(c[f+8>>2]<<1)>>1]|0;if((a&65535)>(e[d+(i<<1)>>1]|0))g=0;else g=e[(c[f+4>>2]|0)+(i<<1)>>1]|0;if((a&65535)>(e[d+(h<<1)>>1]|0))a=0;else a=e[(c[f+4>>2]|0)+(h<<1)>>1]|0;a=(g|0)==(a|0)?i-h|0:g-a|0}else a=a&1^1;return a|0}function pe(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=(d|0)!=0;do if((d|0)!=9)if(g&(d|0)<30)g=3;else{if(!(g|(f|0)<1)){g=(a[e>>0]|0)!=0&1;break}if((d|0)==98&(f|0)==0?c[b+268>>2]|0:0){g=1;break}g=2}else g=2;while(0);return g|0}function qe(a,d,f,g,h,j,k,l,m,n,o,p,q,r,s,t){a=a|0;d=d|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;t=t|0;var u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0;ta=i;i=i+1184|0;qa=ta+1168|0;ra=ta+1100|0;sa=ta+1032|0;ma=ta+692|0;na=ta+352|0;oa=ta+232|0;pa=ta+8|0;G=ta+4|0;H=ta;E=c[p>>2]|0;w=E>>>13;y=E>>>14;x=y&2;y=y&4;z=E>>>15&8;c[G>>2]=E&-86;c[H>>2]=c[q>>2];A=m>>>14&1;B=E&2097152;J=(B|0)==0;D=E>>>22&1;u=oa;v=u+120|0;do{c[u>>2]=0;u=u+4|0}while((u|0)<(v|0));er(pa|0,0,224)|0;u=ra;v=u+68|0;do{c[u>>2]=0;u=u+4|0}while((u|0)<(v|0));u=sa;v=u+68|0;do{c[u>>2]=0;u=u+4|0}while((u|0)<(v|0));h=l*144|0;u=0;o=0;while(1){if((u|0)==2){u=o;break}if(!(c[c[k+(u<<2)>>2]>>2]|0))c[qa+(u<<2)>>2]=0;else{la=Bq(h)|0;c[qa+(u<<2)>>2]=la;o=(la|0)==0?-1:o}u=u+1|0}z=w&1|x|y|z;y=4-A|0;K=B>>>21;h=c[c[k>>2]>>2]|0;if(!h){o=k+4|0;if((u|0)!=0|((j|0)==0?1:(c[c[o>>2]>>2]|0)==0))h=-1;else{A=o;C=11}}else if((j|0)==0|(u|0)!=0)h=-1;else{A=k+4|0;C=11}a:do if((C|0)==11){u=c[c[A>>2]>>2]|0;u=(u|0)==0?h:u;v=l*176|0;ir(u|0,j|0,v|0)|0;la=ra+24|0;c[la>>2]=0;x=ra+60|0;c[x>>2]=c[p>>2];B=ra+64|0;c[B>>2]=c[q>>2];if(!(E&131072)){ka=Dn(l,u,D)|0;ja=l-ka|0;b[ra+44>>1]=ja;Cn(ka,u)|0}else{o=c[A>>2]|0;if(!(c[o>>2]|0)){o=c[k>>2]|0;if(!(c[o>>2]|0)){h=-1;break}}if(!o){h=-1;break}ja=c[o+12>>2]|0;ka=(c[o+8>>2]|0)-ja|0;b[ra+44>>1]=ja}yf(u,ka,0)|0;o=c[A>>2]|0;h=c[o>>2]|0;if(!((u|0)==(h|0)|(h|0)==0)){ir(h|0,u|0,v|0)|0;o=c[A>>2]|0}h=c[o+4>>2]|0;if(h|0?c[o>>2]|0:0)ir(h|0,u|0,v|0)|0;o=c[c[k>>2]>>2]|0;if(!((u|0)==(o|0)|(o|0)==0))ir(o|0,u|0,v|0)|0;o=c[A>>2]|0;h=c[o>>2]|0;if((h|0)!=0?(F=qa+4|0,(c[F>>2]|0)!=0):0){v=jk(d,a,h,c[o+4>>2]|0,ka,r,ra,0,0,0,0)|0;if((v|0)<0){h=v;break}ia=c[ra+44>>2]|0;w=ia<<16>>16;h=c[A>>2]|0;c[h+8>>2]=w+ka;c[h+12>>2]=w;o=ra+46|0;u=h+44|0;c[u>>2]=(c[u>>2]|0)+(ia>>16);u=0;while(1){if((u|0)==3)break;ia=h+48+(u<<1)|0;b[ia>>1]=(e[ia>>1]|0)+(e[ra+48+(u<<1)>>1]|0);ia=h+54+(u<<1)|0;b[ia>>1]=(e[ia>>1]|0)+(e[ra+36+(u<<1)>>1]|0);u=u+1|0}if((v|0)==1?((b[o>>1]|0)==1?(b[(c[h>>2]|0)+104>>1]|0)==4096:0):0){c[h+28>>2]=1;rl(h+4|0);h=c[A>>2]|0;o=c[ra+56>>2]|0}else{o=c[ra+56>>2]|0;if((o&255|0)!=0?(c[h+4>>2]|0)!=0:0)c[h+40>>2]=1}u=c[x>>2]|0;c[p>>2]=u;c[h+60>>2]=u;u=c[B>>2]|0;c[q>>2]=u;c[h+64>>2]=u;c[h+68>>2]=o;_d(c[h>>2]|0,l,c[F>>2]|0)|0;u=oa+60|0;o=oa+64|0;h=Th(a,c[c[A>>2]>>2]|0,c[F>>2]|0,v,w,u,o,m,z,y)|0;if((h+30019|0)>>>0<20)break;c[oa+96>>2]=(c[o>>2]|c[u>>2]|0)!=0&1;c[oa+68>>2]=Od(v,c[F>>2]|0,ra,oa+112|0)|0;h=Mi(c[F>>2]|0,v,ra)|0;o=oa+104|0;c[o>>2]=h;if((h+30019|0)>>>0<20)break;if((h|0)>0){ia=(c[ra+16>>2]|0)+v|0;Ki(sa,ra)|0;ha=Li(ra)|0;c[oa+108>>2]=(ha|0)<0?0:ha;c[(c[A>>2]|0)+36>>2]=c[o>>2];o=ia}else o=ka;Jc(v,c[F>>2]|0,u,ra)|0;ia=o}else{ia=ka;w=0}o=c[c[k>>2]>>2]|0;h=c[A>>2]|0;u=(c[h>>2]|0)==0;do if(!o){if(((!u?(c[qa>>2]|0)==0:0)?c[qa+4>>2]|0:0)?(c[oa+104>>2]|0)==0:0)c[h+36>>2]=0}else{if((!u?(I=c[qa>>2]|0,I|0):0)?(c[oa+104>>2]|0)==0:0){Cq(I);c[qa>>2]=0;break}if(c[qa>>2]|0){h=jk(d,a,o,0,ka,r,0,G,H,0,0)|0;if((h|0)<0)break a;o=c[k>>2]|0;c[o+8>>2]=ka+ja;c[o+12>>2]=ja;c[o+60>>2]=c[p>>2];c[o+64>>2]=c[q>>2];c[o+68>>2]=0;_d(c[o>>2]|0,l,c[qa>>2]|0)|0;o=oa+4|0;h=Th(a,c[c[k>>2]>>2]|0,c[qa>>2]|0,ka,ja,oa,o,m,z,y)|0;if((h+30019|0)>>>0<20)break a;c[oa+36>>2]=(c[o>>2]|c[oa>>2]|0)!=0&1;c[oa+8>>2]=Od(ka,c[qa>>2]|0,0,0)|0;Jc(ka,c[qa>>2]|0,oa,0)|0;c[(c[k>>2]|0)+36>>2]=0}}while(0);fa=oa+96|0;ga=oa+36|0;h=(c[ga>>2]|c[fa>>2]|0)==0;ha=oa+8|0;if(((c[ha>>2]|0)<=0?(c[oa+52>>2]|0)<=0:0)?(c[oa+68>>2]|0)<=0:0)o=(c[oa+112>>2]|0)>0;else o=1;if(J)o=o&1;else{if(!o)if((c[oa+104>>2]|0)>0){ea=c[ra+48>>2]|0;if((ea&65535)<<16>>16==0&ea>>>0<65536)o=(b[ra+52>>1]|0)!=0;else o=1}else o=0;else o=1;o=o&1}if(!o)if((c[oa+116>>2]|0)>1)o=(c[B>>2]&49152|0)!=0;else o=0;else o=1;v=o&1;ea=(m&31|0)==0?m|31:m;o=(ea&4|0)==0|o?ea:(ea|8)^4;o=(o&20|0)!=20?o:o|32;o=(o&24|0)==16?o^16:o;if(h){ea=o&-17;o=(o&32|0)==0?ea:ea^32}do if(o&1){if(((c[c[k>>2]>>2]|0?c[f>>2]|0:0)?c[g>>2]|0:0)?c[qa>>2]|0:0)break;o=o^1}while(0);do if(!(o&2))ba=o;else{if(((c[c[A>>2]>>2]|0?c[f+4>>2]|0:0)?c[g+4>>2]|0:0)?c[qa+4>>2]|0:0){ba=o;break}ba=o^2}while(0);switch(ba&3|0){case 1:{h=0;u=0;break}case 2:{h=1;u=1;break}case 3:{h=0;u=1;break}default:{h=-3;break a}}ca=ba&8;x=ba&4;da=(x|0)==0;ea=(ba&12|0)==8;b:do if(ea){c[la>>2]=1;o=c[ra+28>>2]|0;if(o|0)b[o>>1]=(b[o>>1]|0)!=0&1;o=ra+36|0;c[o>>2]=0;b[o+4>>1]=0;o=ra+48|0;c[o>>2]=0;b[o+4>>1]=0;c[B>>2]=c[B>>2]&-49153;o=0;while(1){if((o|0)==2){v=0;break b}c[oa+(o*60|0)+52>>2]=0;c[oa+(o*60|0)+40>>2]=1;c[oa+(o*60|0)+20>>2]=0;c[oa+(o*60|0)+56>>2]=0;c[oa+(o*60|0)+48>>2]=0;c[oa+(o*60|0)+8>>2]=0;o=o+1|0}}while(0);o=Bc(d,ka,ia,qa,ra,oa,pa,r,a,K,n)|0;if((o|0)>=0){aa=(c[pa+24+(h*100|0)+32>>2]|0)==0^h;h=(c[pa+24+(u*100|0)+32>>2]|0)==0^u;if(aa>>>0>h>>>0)h=-30005;else{P=ba&16384;Q=ma+12|0;R=ma+312|0;S=oa+68|0;T=oa+112|0;U=ma+308|0;V=ma+304|0;W=pa+20|0;X=ma+24|0;Y=ma+320|0;Z=ma+324|0;_=ma+44|0;$=oa+104|0;O=(v|0)!=0;B=(x|0)!=0&O?7:0;C=(ba&16|0)!=0;j=(ba&32|0)!=0;D=ba&448;E=ba&7680;F=oa+12|0;G=oa+24|0;H=oa+28|0;I=oa+4|0;l=oa+32|0;p=oa+20|0;q=oa+72|0;J=oa+84|0;K=oa+88|0;m=oa+64|0;n=oa+92|0;r=oa+60|0;L=oa+108|0;M=oa+80|0;N=oa+44|0;A=h;h=0;while(1){if(!((o+30019|0)>>>0>19&(A|0)>=(aa|0)))break;er(ma|0,0,340)|0;switch(A|0){case 0:{o=(c[ga>>2]|0)!=0;h=((c[N>>2]|0)==0?1:33)|B|(C&o?9:0);o=h|(j&(O&o)?23:0);o=D|o|((h&9|0)==9|(o&23|0)==23?E:0);h=Lc(ma,ka,ka,c[F>>2]|0,c[G>>2]|0,c[H>>2]|0,c[I>>2]|0,c[l>>2]|0,c[oa>>2]|0,0,0,c[p>>2]|0,o,pa)|0;if(h|0)break a;ir(na|0,ma|0,340)|0;break}case 1:{h=c[$>>2]|0;o=(c[fa>>2]|0)!=0;z=((h|0)==0?1:33)|B|(C&o?9:0);o=z|(j&(O&o)?23:0);o=D|o|((z&9|0)==9|(o&23|0)==23?E:0);h=Lc(ma,ka,ia,c[q>>2]|0,c[J>>2]|0,c[K>>2]|0,c[m>>2]|0,c[n>>2]|0,c[r>>2]|0,h,c[L>>2]|0,c[M>>2]|0,o,pa)|0;if(h|0)break a;ir(na|0,ma|0,340)|0;break}default:o=h}h=o|P;c[Q>>2]=-1;c[R>>2]=0;if(!(c[ha>>2]|c[S>>2]))o=da|(c[T>>2]|ca|0)!=0;else o=1;c[U>>2]=ea?1:o&1^1;if((A|0)==1){c[V>>2]=ra;c[la>>2]=ea?1:(da|(c[T>>2]|ca|0)!=0)&1^1}c[X>>2]=c[W>>2];c[Y>>2]=0;c[Z>>2]=pa;u=(A|0)!=0;v=u?ia:ka;x=qa+(A<<2)|0;o=Rc(d,ka,v,c[x>>2]|0,ma,a,h,A)|0;y=c[f+(A<<2)>>2]|0;z=c[g+(A<<2)>>2]|0;do if((o|0)<1){c[y>>2]=o;c[z>>2]=o}else{c[y>>2]=0;c[z>>2]=0;o=c[k+(A<<2)>>2]|0;ua=c[o+28>>2]|0;c[z+72>>2]=ua;c[y+76>>2]=ua;c[z+88>>2]=c[_>>2];c[z+76>>2]=c[o+60>>2];c[z+80>>2]=c[o+64>>2];c[z+84>>2]=c[o+68>>2];o=Zd(y,z,ka,v,u?w:ja,c[x>>2]|0,c[o>>2]|0,ma,a,A,ba,t)|0;if((o+30019|0)>>>0<20){c[y>>2]=o;c[z>>2]=o;break}u=c[$>>2]|0;if(u|0)c[z+16>>2]=u;u=re(ka,v,c[x>>2]|0,ma,a,0,0)|0;if(!u)break;c[y>>2]=u;c[z>>2]=u;o=u}while(0);Gh(c[Y>>2]|0);Kc(na)|0;A=A+-1|0}h=(o|0)==0?ka:o}}else h=o}while(0);Ac(pa);o=c[qa+4>>2]|0;if(o|0)Cq(o);o=c[qa>>2]|0;if(o|0)Cq(o);if(!s)Ji(ra)|0;else{u=s;o=ra;v=u+68|0;do{c[u>>2]=c[o>>2];u=u+4|0;o=o+4|0}while((u|0)<(v|0))}Ji(sa)|0;i=ta;return h|0}function re(a,d,f,g,h,i,j){a=a|0;d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0;c[22855]=(c[22855]|0)+1;m=Dq(d+1|0,2)|0;if((c[g+284>>2]|0)<=0)if((c[g+268>>2]|0)>0){i=g+212|0;k=5}else i=8;else{i=g+228|0;k=5}do if((k|0)==5){i=c[i>>2]|0;if((m|0)!=0&(i|0)!=0){j=0;while(1){if((j|0)>=(d|0))break;l=j+1|0;b[m+((e[i+(j<<1)>>1]|0)<<1)>>1]=l;j=l}i=(Oc(a,d,f,m,i,g,h,0)|0)!=0&1;l=g+292|0;if((c[l>>2]|0)>0)j=g+256|0;else{if((c[g+276>>2]|0)<=0)break;j=g+244|0}j=c[j>>2]|0;if(j){k=0;while(1){if((k|0)>=(d|0))break;n=k+1|0;b[m+((e[j+(k<<1)>>1]|0)<<1)>>1]=n;k=n}if(Oc(a,d,f,m,j,g,h,0)|0)i=(c[l>>2]|0?4:2)|i}}else i=8}while(0);Cq(m);return ((i|0)==0?0:-30016)|0}function se(a,f,g,h,i){a=a|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0;j=b[(c[f>>2]|0)+(e[h+((a&65535)+-1<<1)>>1]<<1)>>1]|0;k=j&65535;l=g+4|0;a=0;m=1;f=-1;while(1){if((k|0)<(m|0))break;h=e[(c[l>>2]|0)+(k-m<<1)>>1]|0;if(j<<16>>16!=(b[(c[g>>2]|0)+(h<<1)>>1]|0))break;if(b[i+(h*144|0)+94>>1]|0){a=0;break}h=d[i+(h*144|0)+126>>0]&7;if((m|0)==1){if((h+-1|0)>>>0>=4){a=0;break}}else if((f|0)==(h|0))h=f;else{a=0;break}a=a+1|0;m=m+1|0;f=h}return a|0}function te(d,f,g,h,i,j,k,l){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0;m=b[d>>1]|0;q=b[f>>1]|0;r=j+4|0;m=(m&65535)<(q&65535)?q:m+1<<16>>16;a:while(1){n=m&65535;if((n|0)>(l|0)){m=0;break}n=b[(c[i>>2]|0)+(e[k+(n+-1<<1)>>1]<<1)>>1]|0;o=n&65535;q=1;while(1){if((o|0)<(q|0))break;p=e[(c[r>>2]|0)+(o-q<<1)>>1]|0;if(n<<16>>16!=(b[(c[j>>2]|0)+(p<<1)>>1]|0))break;if((a[h+p>>0]|0)==8){s=7;break a}else q=q+1|0}m=m+1<<16>>16}if((s|0)==7){if(c[g>>2]|0){b[f>>1]=m;c[g>>2]=0}b[d>>1]=m;m=1}return m|0}function ue(c,d,e,f){c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=(c|0)!=0;h=(e|0)!=0;if(!(g&h))if(g&(d|0)>0)g=1;else return (h&(f|0)>0)<<31>>31|0;else{i=(d|0)<(f|0)?d:f;j=0;g=0;while(1){if((j|0)>=(i|0))break;g=b[c+(j*6|0)>>1]|0;h=b[e+(j*6|0)>>1]|0;if(g<<16>>16!=h<<16>>16){g=(g&65535)-(h&65535)|0;break}g=b[c+(j*6|0)+2>>1]|0;h=b[e+(j*6|0)+2>>1]|0;if(g<<16>>16!=h<<16>>16){g=(g&65535)-(h&65535)|0;break}k=a[c+(j*6|0)+4>>0]|0;h=a[e+(j*6|0)+4>>0]|0;g=(k&255)-(h&255)|0;if(k<<24>>24==h<<24>>24)j=j+1|0;else break}g=(g|0)==0?d-f|0:g}return g|0}function ve(c,d,e,f){c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=(c|0)!=0;h=(e|0)!=0;if(!(g&h))if(g&(d|0)>0)g=1;else return (h&(f|0)>0)<<31>>31|0;else{i=(d|0)<(f|0)?d:f;j=0;g=0;while(1){if((j|0)>=(i|0))break;g=b[c+(j<<2)>>1]|0;h=b[e+(j<<2)>>1]|0;if(g<<16>>16!=h<<16>>16){g=(g&65535)-(h&65535)|0;break}k=a[c+(j<<2)+2>>0]|0;h=a[e+(j<<2)+2>>0]|0;g=(k&255)-(h&255)|0;if(k<<24>>24==h<<24>>24)j=j+1|0;else break}g=(g|0)==0?d-f|0:g}return g|0}function we(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;a=ue(a,b,e,f)|0;if(!a)a=ve(c,d,g,h)|0;return a|0}function xe(c,d,e){c=c|0;d=d|0;e=e|0;var f=0;f=b[c>>1]|0;if((f&65535)<=(d&65535))if(f<<16>>16==d<<16>>16){f=a[c+2>>0]|0;if((f&255)>(e&255))f=1;else f=(f<<24>>24!=e<<24>>24)<<31>>31}else f=-1;else f=1;return f|0}function ye(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0;g=d&65535;h=g+-1|0;i=c[a+4>>2]|0;j=b[i+(h<<1)>>1]|0;a=c[a>>2]|0;do if((b[a+((j&65535)<<1)>>1]|0)==d<<16>>16){if(h|0?(b[a+(e[i+(g+-2<<1)>>1]<<1)>>1]|0)==d<<16>>16:0){a=0;break}b[f>>1]=j;a=1}else a=0;while(0);return a|0}function ze(a,c){a=a|0;c=c|0;var d=0,e=0,f=0;f=b[a+((c&65535)<<1)>>1]|0;a:do if(f<<16>>16!=c<<16>>16){e=f;while(1){d=b[a+((e&65535)<<1)>>1]|0;if(e<<16>>16==d<<16>>16)break;else e=d}d=f;while(1){if(e<<16>>16==d<<16>>16){c=e;break a}b[a+((c&65535)<<1)>>1]=e;f=d;d=b[a+((d&65535)<<1)>>1]|0;c=f}}while(0);return c|0}function Ae(a,c,d){a=a|0;c=c|0;d=d|0;var e=0;e=ze(a,c)|0;c=ze(a,d)|0;d=e&65535;if((e&65535)>=(c&65535))if((c&65535)<(e&65535)){b[a+(d<<1)>>1]=c;c=1}else c=0;else{b[a+((c&65535)<<1)>>1]=e;c=1}return c|0}function Be(d,f,g,h,i,j){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;v=c[g>>2]|0;x=b[v+(e[i+((d&65535)+-1<<1)>>1]<<1)>>1]|0;v=b[v+(e[i+((f&65535)+-1<<1)>>1]<<1)>>1]|0;w=x&65535;i=h+4|0;l=1;while(1){if((w|0)<(l|0)){d=-1;break}k=c[i>>2]|0;m=e[k+(w-l<<1)>>1]|0;n=c[h>>2]|0;if(x<<16>>16==(b[n+(m<<1)>>1]|0)){d=1;f=0;g=0}else{d=-1;break}while(1){if((f|0)>=3)break;u=b[j+(m*144|0)+94+(f<<1)>>1]|0;g=u&65535;if(!(u<<16>>16))break;g=g+-1|0;u=v<<16>>16!=(b[n+(g<<1)>>1]|0);d=u&1;if(!u)break;f=f+1|0}if(!d){u=k;l=m;i=f;k=g;o=9;break}else l=l+1|0}a:do if((o|0)==9){g=0;d=0;while(1){if((g|0)>=3)break;t=b[j+(k*144|0)+94+(g<<1)>>1]|0;d=t&65535;if(t<<16>>16==0|(d+-1|0)==(l|0))break;g=g+1|0}if((d+-1|0)==(l|0)){t=a[j+(l*144|0)+118+i>>0]|0;f=t<<24>>24;if(((f&7)+-1|0)>>>0<4){s=f>>>3&7;r=b[n+(e[j+(l*144|0)+6+(a[j+(l*144|0)+106+i>>0]<<1)>>1]<<1)>>1]|0;p=b[n+(e[j+(k*144|0)+6+(a[j+(k*144|0)+106+g>>0]<<1)>>1]<<1)>>1]|0;q=(s|0)==0;g=d;d=0;o=1;while(1){if((w|0)<(o|0))break a;l=e[u+(w-o<<1)>>1]|0;if(x<<16>>16!=(b[n+(l<<1)>>1]|0))break a;m=a[j+(l*144|0)+73>>0]|0;h=0;while(1){if((h|0)>=(m|0))break;f=e[j+(l*144|0)+6+(h<<1)>>1]|0;do if(r<<16>>16==(b[n+(f<<1)>>1]|0)){if(!q){k=0;i=l;while(1){if((k|0)>=(s|0))break;if((a[j+(f*144|0)+73>>0]|0)!=2)break;if(a[j+(f*144|0)+75>>0]|0)break;y=f;k=k+1|0;f=e[j+(f*144|0)+6+(((e[j+(f*144|0)+6>>1]|0)==(i|0)&1)<<1)>>1]|0;i=y}if((k|0)!=(s|0))break;if(v<<16>>16!=(b[n+(f<<1)>>1]|0))break;if(p<<16>>16!=(b[n+(i<<1)>>1]|0))break}i=0;while(1){if((i|0)>=3)break;y=b[j+(l*144|0)+94+(i<<1)>>1]|0;g=y&65535;if(y<<16>>16==0|(g+-1|0)==(f|0))break;i=i+1|0}if((g+-1|0)==(f|0))k=0;else{d=0;break a}while(1){if((k|0)>=3)break;y=b[j+(f*144|0)+94+(k<<1)>>1]|0;g=y&65535;if(y<<16>>16==0|(g+-1|0)==(l|0))break;k=k+1|0}if((g+-1|0)!=(l|0)){d=0;break a}i=a[j+(l*144|0)+118+i>>0]|0;if(i<<24>>24!=(a[j+(f*144|0)+118+k>>0]|0)){d=-1;break a}if(t<<24>>24!=i<<24>>24){d=0;break a}d=d+1|0}while(0);h=h+1|0}o=o+1|0}}else d=0}else d=-1}while(0);return d|0}function Ce(f,g,h,i,j,k,l,m,n,o,p,q,r){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;var s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;v=b[f>>1]|0;s=b[g>>1]|0;t=b[h>>1]|0;do if((v&65535)<(t&65535))u=b[i>>1]|0;else{if(v<<16>>16==t<<16>>16?(u=b[i>>1]|0,(s&65535)<(u&65535)):0)break;t=(v&65535)<2;u=t?0:s;t=t?2:v}while(0);Q=m+4|0;P=(r|0)!=0;O=l+4|0;while(1){s=t&65535;if((s|0)>(q|0)){s=0;break}I=e[o+(s+-1<<1)>>1]|0;J=c[l>>2]|0;K=b[J+(I<<1)>>1]|0;L=K&65535;M=p+(I*144|0)+73|0;s=t;N=1;while(1){if((L|0)<(N|0))break;G=e[(c[Q>>2]|0)+(L-N<<1)>>1]|0;H=c[m>>2]|0;if(K<<16>>16!=(b[H+(G<<1)>>1]|0))break;F=a[k+G>>0]|0;a:do if(F<<24>>24!=0&F<<24>>24<8){F=0;while(1){if((F|0)>=3)break a;v=b[p+(G*144|0)+94+(F<<1)>>1]|0;if(!(v<<16>>16))break a;v=(v&65535)+-1|0;b:do if((a[k+v>>0]|0)!=0?(E=(d[p+(G*144|0)+118+F>>0]|0)>>>3,R=E&7,E=(E&1|0)==0,!(P&E|(P|E)^1)):0){C=b[H+(v<<1)>>1]|0;D=C&65535;E=(R|0)==0;B=1;while(1){if((D|0)<(B|0))break b;r=b[(c[O>>2]|0)+(D-B<<1)>>1]|0;z=r&65535;if(C<<16>>16!=(b[J+(z<<1)>>1]|0))break b;A=a[M>>0]|0;y=A<<24>>24;c:do if(E){v=0;while(1){if((v|0)>=(y|0))break c;if(r<<16>>16==(b[p+(I*144|0)+6+(v<<1)>>1]|0))break c;v=v+1|0}}else{v=0;while(1){if((v|0)>=(y|0))break c;w=0;r=e[p+(I*144|0)+6+(v<<1)>>1]|0;x=I;while(1){if((w|0)>=(R|0))break;if((a[p+(r*144|0)+73>>0]|0)!=2)break;if(a[p+(r*144|0)+75>>0]|0)break;T=r;w=w+1|0;r=e[p+(r*144|0)+6+(((e[p+(r*144|0)+6>>1]|0)==(x|0)&1)<<1)>>1]|0;x=T}if((z|0)==(r|0)&(w|0)==(R|0))break c;v=v+1|0}}while(0);if((v|0)<(A<<24>>24|0)){T=b[n+(z<<1)>>1]|0;s=(T&65535)<(s&65535)&(T&65535)>(u&65535)?T:s}B=B+1|0}}while(0);F=F+1|0}}while(0);N=N+1|0}if((s&65535)<(t&65535)){S=38;break}u=0;t=t+1<<16>>16}if((S|0)==38){if(c[j>>2]|0){b[h>>1]=t;b[i>>1]=s;c[j>>2]=0}b[f>>1]=t;b[g>>1]=s;s=1}return s|0}function De(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0;k=(e|0)==0;j=(h|0)==0;f=(f|0)==0;e=(d|0)==0;a:while(1){h=c[a>>2]|0;b:while(1){switch(h|0){case 3:{l=11;break a}case 4:{l=13;break a}case 1:break;case 2:{switch(c[b>>2]|0){case 1:{e=-30010;break a}case 2:{l=10;break b}case 0:break;default:{l=14;break a}}c[a>>2]=i;if(f){h=i;continue b}else{l=14;break a}}default:{l=14;break a}}switch(c[b>>2]|0){case 1:{l=6;break b}case 0:{c[a>>2]=2;if(k){h=2;continue b}else{l=14;break a}}case 2:{c[a>>2]=2;if(j){h=2;continue b}else{l=14;break a}}default:{l=14;break a}}}if((l|0)==6){l=0;c[b>>2]=2;if(e)continue;else{l=14;break}}else if((l|0)==10){l=0;c[b>>2]=0;if(k)continue;else{l=14;break}}}if((l|0)==11)if(!(c[b>>2]|0)){c[a>>2]=4;if(!g)e=1;else l=14}else e=-30010;else if((l|0)==13)e=(c[b>>2]|0)==0?1:-30010;if((l|0)==14)e=0;return e|0}function Ee(c,d,e,f){c=c|0;d=d|0;e=e|0;f=f|0;var g=0;g=b[c>>1]|0;if((g&65535)<=(d&65535))if(g<<16>>16==d<<16>>16){g=b[c+2>>1]|0;if((g&65535)<=(e&65535))if(g<<16>>16==e<<16>>16){g=a[c+4>>0]|0;if((g&255)>(f&255))g=1;else g=(g<<24>>24!=f<<24>>24)<<31>>31}else g=-1;else g=1}else g=-1;else g=1;return g|0}function Fe(c,d,e){c=c|0;d=d|0;e=e|0;var f=0,g=0;er(c|0,0,e|0)|0;g=0;while(1){if((g|0)>=(e|0))break;if(a[d+(g*144|0)+124>>0]|0){f=0;while(1){if((f|0)>=3)break;if(!(b[d+(g*144|0)+94+(f<<1)>>1]|0))break;f=f+1|0}a[c+g>>0]=f|0?f&255:8}g=g+1|0}return}function Ge(a,b){a=a|0;b=b|0;var d=0,e=0;do if(a){d=c[a>>2]|0;if(d|0){e=c[a+4>>2]|0;if((e|0)>0?((e|0)%(b|0)|0|0)==0:0){c[a+8>>2]=0;c[a+12>>2]=b;er(d|0,0,e<<1|0)|0;d=0;break}Cq(d)};c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;e=Dq(b,2)|0;c[a>>2]=e;if(e){c[a+4>>2]=b;c[a+12>>2]=b;d=0}else d=-1}else d=-1;while(0);return d|0}function He(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;if(((((a|0)!=0?(b=c[a>>2]|0,(b|0)!=0):0)?(e=a+4|0,f=c[e>>2]|0,(f|0)>0):0)?(g=a+12|0,h=c[g>>2]|0,(h|0)>0):0)?(d=Dq(h+f|0,2)|0,c[a>>2]=d,(d|0)!=0):0){ir(d|0,b|0,c[a+8>>2]<<1|0)|0;Cq(b);c[e>>2]=(c[e>>2]|0)+(c[g>>2]|0);b=0}else b=-1;return b|0}function Ie(a){a=a|0;var b=0;if(a|0){b=c[a>>2]|0;if(b|0)Cq(b);c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0}return}function Je(a,d){a=a|0;d=d|0;var e=0,f=0;do if(!a)e=-1;else{f=a+8|0;e=c[f>>2]|0;if((e+2|0)>(c[a+4>>2]|0)){if(He(a)|0){e=-1;break}e=c[f>>2]|0}a=c[a>>2]|0;b[a+(e<<1)>>1]=d;c[f>>2]=e+2;b[a+(e+1<<1)>>1]=1;e=0}while(0);return e|0}function Ke(a,d){a=a|0;d=d|0;var f=0,g=0,h=0;if(((a|0)!=0?(f=c[a+8>>2]|0,(f|0)>0):0)?(h=f+-1|0,g=c[a>>2]|0,h=h-(e[g+(h<<1)>>1]|0)|0,(h|0)>-1):0)f=(b[g+(h<<1)>>1]|0)==d<<16>>16&1;else f=0;return f|0}function Le(a){a=a|0;var d=0,e=0;if(((a|0)!=0?(d=c[a>>2]|0,(d|0)!=0):0)?(e=c[a+8>>2]|0,(e|0)>1):0)if((b[d+(e+-1<<1)>>1]|0)==1)d=Me(a)|0;else d=1;else d=-1;return d|0}function Me(a){a=a|0;var b=0,d=0;if(((a|0)!=0?(b=a+8|0,d=c[b>>2]|0,(d|0)>0):0)?(d=d+-1|0,a=d-(e[(c[a>>2]|0)+(d<<1)>>1]|0)|0,c[b>>2]=a,(a|0)>-1):0)b=0;else b=-1;return b|0}function Ne(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0;do if(a){g=a+8|0;f=c[g>>2]|0;if((f|0)>=(c[a+4>>2]|0)){if(He(a)|0){f=-1;break}f=c[g>>2]|0}if((f|0)>0){a=c[a>>2]|0;i=a+(f+-1<<1)|0;h=(e[i>>1]|0)+1&65535;b[i>>1]=d;c[g>>2]=f+1;b[a+(f<<1)>>1]=h;f=0}else f=-1}else f=-1;while(0);return f|0}function Oe(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=a+8|0;a:do if(a|0){j=c[a>>2]|0;while(1){i=(j|0)==0;while(1){if(i)break a;h=c[k>>2]|0;f=h-e|0;if((f|0)<=(d|0))break a;g=j+(f<<1)|0;l=b[g>>1]|0;f=l&65535;if((l&65535)>2)break;e=e+1+f|0}c[k>>2]=h+2-f;jr(g+(0-f<<1)+2|0,g+-2|0,(e<<1)+2|0)|0;j=c[a>>2]|0;b[j+((c[k>>2]|0)-e<<1)>>1]=2;e=e+3|0}}while(0);return}function Pe(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0;if(((a|0)!=0?(g=c[a>>2]|0,(g|0)!=0):0)?(i=a+8|0,j=c[i>>2]|0,(j|0)>2):0){a=j+-1|0;k=b[g+(a<<1)>>1]|0;f=k&65535;if((k&65535)>1?(h=g+(j+-2<<1)|0,(e[h>>1]|0|0)==(d|0)):0){c[i>>2]=a;b[h>>1]=f+65535;a=0}else a=1}else a=-1;return a|0}function Qe(a){a=a|0;if(!a)a=-1;else a=c[a+8>>2]|0;return a|0}function Re(a,b){a=a|0;b=b|0;if(!a)a=-1;else{c[a+8>>2]=b;a=0}return a|0}function Se(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,i=0;a:do if(((a|0)!=0?(i=c[a>>2]|0,(f|0)!=0&(i|0)!=0):0)?(g=c[a+8>>2]|0,(g|0)>1):0){h=b[f+(d<<1)>>1]|0;d=g+-1|0;a=e[i+(d<<1)>>1]|0;while(1){if((a|0)<=1){d=0;break a}a=a+-1|0;if((b[f+(e[i+(d-a<<1)>>1]<<1)>>1]|0)==h<<16>>16){d=1;break}}}else d=-1;while(0);return d|0}function Te(a,d,f,g,h){a=a|0;d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=g+-1|0;i=e[f+(o<<1)>>1]|0;l=b[a+(i<<1)>>1]|0;k=g&65535;b[d+(i<<1)>>1]=k;i=0;g=1;while(1){if((o|0)<=0)break;n=o+-1|0;m=e[f+(n<<1)>>1]|0;j=b[a+(m<<1)>>1]|0;if(j<<16>>16==l<<16>>16)j=l;else{i=((l&65535|0)!=((o&65535)+1|0)&1)+i|0;g=g+1|0;k=o&65535}b[d+(m<<1)>>1]=k;o=n;l=j}if(h|0)c[h>>2]=(i|0)!=0&1;return g|0}function Ue(a,c,d,f){a=a|0;c=c|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;i=e[d>>1]|0;k=b[c+(i<<1)>>1]|0;b[a+(i<<1)>>1]=1;i=1;g=1;j=1;while(1){if((i|0)>=(f|0))break;l=e[d+(i<<1)>>1]|0;h=b[c+(l<<1)>>1]|0;if(h<<16>>16==k<<16>>16){i=i+1|0;h=k}else{j=i+1|0;i=j;g=g+1|0;j=j&65535}b[a+(l<<1)>>1]=j;k=h}return g|0}function Ve(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function We(a,d,f,g,h,i){a=a|0;d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;c[a>>2]=f;c[a+12>>2]=g;er(h|0,0,d<<1|0)|0;r=0;k=0;j=0;o=1;while(1){if((r|0)>=(d|0))break;m=i+(r<<1)|0;n=e[m>>1]|0;l=b[g+(n<<1)>>1]|0;q=l&65535;a:do if(o<<16>>16==l<<16>>16){b[h+(n<<1)>>1]=o;m=r+1|0;k=k+1|0;l=o}else{jh(a,m,q-r|0,14)|0;p=q+-1|0;b[h+((e[i+(p<<1)>>1]|0)<<1)>>1]=l;k=k+1|0;m=l;while(1){if((p|0)<=(r|0)){m=q;break a}n=p+-1|0;o=i+(n<<1)|0;if(vh(c[f+((e[o>>1]|0)<<2)>>2]|0,c[f+((e[i+(p<<1)>>1]|0)<<2)>>2]|0,g)|0){k=k+1|0;j=j+1|0;m=p&65535}b[h+((e[o>>1]|0)<<1)>>1]=m;p=n}}while(0);r=m;o=l+1<<16>>16}return (j|0?0-k|0:k)|0}function Xe(a,d,f,g,h,i,j){a=a|0;d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;c[a>>2]=f;c[a+12>>2]=g;b[a+16>>1]=j;er(h|0,0,d<<1|0)|0;s=0;l=0;k=0;p=1;while(1){if((s|0)>=(d|0))break;n=i+(s<<1)|0;o=e[n>>1]|0;m=b[g+(o<<1)>>1]|0;r=m&65535;a:do if(p<<16>>16==m<<16>>16){b[h+(o<<1)>>1]=p;n=s+1|0;l=l+1|0;m=p}else{jh(a,n,r-s|0,15)|0;q=r+-1|0;b[h+((e[i+(q<<1)>>1]|0)<<1)>>1]=m;l=l+1|0;n=m;while(1){if((q|0)<=(s|0)){n=r;break a}o=q+-1|0;p=i+(o<<1)|0;if(wh(c[f+((e[p>>1]|0)<<2)>>2]|0,c[f+((e[i+(q<<1)>>1]|0)<<2)>>2]|0,g,j)|0){l=l+1|0;k=k+1|0;n=q&65535}b[h+((e[p>>1]|0)<<1)>>1]=n;q=o}}while(0);s=n;p=m+1<<16>>16}return (k|0?0-l|0:l)|0}function Ye(a,d,f,g,h,i,j,k){a=a|0;d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0;c[a>>2]=f;c[a+12>>2]=g;if(!(j&1))gh(a,i,d,2,k);else ih(a,i,d,2,k)|0;j=d+-1|0;k=d&65535;b[h+((e[i+(j<<1)>>1]|0)<<1)>>1]=k;f=1;while(1){if((j|0)<=0)break;l=j+-1|0;m=i+(l<<1)|0;d=(yh(m,i+(j<<1)|0,a)|0)==0;g=d?k:j&65535;b[h+((e[m>>1]|0)<<1)>>1]=g;j=l;k=g;f=(d&1^1)+f|0}return f|0}function Ze(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=0;while(1){if((f|0)>=(a|0))break;nh(c[b+(f<<2)>>2]|0,d,e);f=f+1|0}return}function _e(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;h=0;k=0;while(1){if((h|0)>=(a|0))break;i=e[g+(h<<1)>>1]|0;l=d+(i<<1)|0;m=b[l>>1]|0;j=h+1|0;if(!((m&65535|0)!=(j|0)?1:m<<16>>16==k<<16>>16)){h=j;k=m;continue}h=c[f+(i<<2)>>2]|0;if((e[h>>1]|0)<=1){h=j;k=m;continue}kh(h,d);h=j;k=b[l>>1]|0}return 0}function $e(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;h=0;k=0;while(1){if((h|0)>=(a|0))break;i=e[g+(h<<1)>>1]|0;l=d+(i<<1)|0;m=b[l>>1]|0;j=h+1|0;if(!((m&65535|0)!=(j|0)?1:m<<16>>16==k<<16>>16)){h=j;k=m;continue}h=c[f+(i<<2)>>2]|0;if((e[h>>1]|0)<=1){h=j;k=m;continue}mh(h,d)|0;h=j;k=b[l>>1]|0}return 0}function af(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;c[a+12>>2]=f;if(!(j&1))gh(a,h,b,2,11);else ih(a,h,b,2,9)|0;j=b<<1;while(1){c[i>>2]=(c[i>>2]|0)+1;e=f;_e(b,e,d,h)|0;e=Ye(a,b,d,e,g,h,1,16)|0;if(!(hp(f,g,j)|0))break;else{e=f;f=g;g=e}}return e|0}function bf(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;while(1){c[i>>2]=(c[i>>2]|0)+1;e=f;$e(b,e,d,h)|0;e=We(a,b,d,e,g,h)|0;if((e|0)<0){e=f;f=g;g=e}else break}return e|0}function cf(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;while(1){c[j>>2]=(c[j>>2]|0)+1;e=f;$e(b,e,d,h)|0;e=Xe(a,b,d,e,g,h,i)|0;if((e|0)<0){e=f;f=g;g=e}else break}return e|0}function df(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0;c[a+12>>2]=f;if(!(j&1))gh(a,h,b,2,9);else ih(a,h,b,2,9)|0;l=b<<1;while(1){c[i>>2]=(c[i>>2]|0)+1;k=f;_e(b,k,d,h)|0;k=Ye(a,b,d,k,g,h,j,17)|0;if((e|0)!=(k|0)){n=g;m=f;e=k;f=n;g=m;continue}if(!(hp(f,g,l)|0))break;else{m=g;n=f;e=k;f=m;g=n}}return e|0}function ef(a,d,f,g,h,i,j,k){a=a|0;d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=c[a>>2]|0;l=a+8|0;n=c[a+4>>2]|0;s=c[d>>2]|0;m=d+8|0;r=c[d+4>>2]|0;c[j>>2]=0;c[k>>2]=0;b[i>>1]=0;o=b[p+(g<<1)>>1]|0;q=o&65535;a:do if(o<<16>>16==(b[s+(h<<1)>>1]|0)){g=q+-1|0;a=1;while(1){if((q|0)<=(a|0))break;if(o<<16>>16!=(b[p+(e[n+(g-a<<1)>>1]<<1)>>1]|0))break;a=a+1|0}d=1;while(1){if((q|0)<=(d|0))break;if(o<<16>>16!=(b[s+(e[r+(g-d<<1)>>1]<<1)>>1]|0))break;d=d+1|0}if((d|0)==(a|0)){if((a|0)>1){b[i>>1]=q+1-a;n=0;while(1){if((n|0)>=4)break;h=(n|0)<2;if(h){d=c[l>>2]|0;if(!d)g=0;else g=(b[d>>1]|0)!=0;c[k>>2]=(c[k>>2]|0)+(g&1)}else d=c[m>>2]|0;if(!d){d=Bq(f)|0;if(!d){a=-30002;break a}}switch(n|0){case 2:{ir(d|0,s|0,f|0)|0;break}case 3:{ir(d|0,r|0,f|0)|0;break}default:{}}if(h){c[l>>2]=d;l=l+4|0}else{c[m>>2]=d;m=m+4|0}n=n+1|0}c[j>>2]=2}}else a=-30007}else a=-30007;while(0);return a|0}function ff(c,d,f,g){c=c|0;d=d|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+16|0;o=q;j=a[c+(d*144|0)+73>>0]|0;a:do if(j<<24>>24<=3?(n=a[c+(d*144|0)+124>>0]|0,p=n<<24>>24,n<<24>>24>=1):0){h=(p&7)+-1|0;if(h>>>0>=2){h=h>>>0<4?p:0-p|0;break}if(f>>>0<=2){h=0;while(1){if((h|0)>(f|0))break;if(!(b[c+(d*144|0)+94+(h<<1)>>1]|0)){h=-30012;break a}else h=h+1|0}n=a[c+(d*144|0)+106+f>>0]|0;m=b[c+(d*144|0)+6+(n<<1)>>1]|0;b[o>>1]=0;b[o+2>>1]=0;b[o+4>>1]=0;j=j<<24>>24;l=0;h=-1;k=0;while(1){if((l|0)>=(j|0))break;f=b[c+(d*144|0)+6+(l<<1)>>1]|0;if(f<<16>>16==m<<16>>16)h=l;else{b[o+(k<<1)>>1]=b[g+((f&65535)<<1)>>1]|0;k=k+1|0}l=l+1|0}if((h|0)>-1&(h|0)==(n|0)){j=b[o>>1]|0;if((k|0)>0&j<<16>>16==0)h=0;else{h=o+2|0;if((k|0)>1){f=b[h>>1]|0;if(!(f<<16>>16)){h=0;break}if((k|0)==2?j<<16>>16==f<<16>>16:0){h=6;break}}h=2-((p+n+((e[h>>1]|0)<(j&65535)&1)|0)%2|0)|0}}else h=-30012}else h=-30012}else h=0;while(0);i=q;return h|0}function gf(d,f,g,h,j,k,l,m,n){d=d|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=i;i=i+32|0;q=A+18|0;x=A+12|0;z=A+6|0;w=A;o=0;while(1){if((o|0)==3)break;b[z+(o<<1)>>1]=0;b[q+(o<<1)>>1]=0;o=o+1|0}v=(k|0)!=0;if(v){c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0}a:do if(((b[m+(d<<1)>>1]|0)==(b[n+(f<<1)>>1]|0)?(b[m+(g<<1)>>1]|0)==(b[n+(h<<1)>>1]|0):0)?(p=a[j+(f*144|0)+73>>0]|0,y=p<<24>>24,p<<24>>24==(a[j+(d*144|0)+73>>0]|0)):0){g=a[j+(f*144|0)+124>>0]|0;o=g&7;if((p&-2)<<24>>24!=2){if(p<<24>>24!=1){o=0;break}if(!(b[j+(f*144|0)+94>>1]|0)){o=0;break}if((o+-1|0)>>>0<2){o=2-(g&1)|0;break}else{o=(o|0)==0?4:o;break}}g=o+-1|0;if(g>>>0<4){if(g>>>0<2){p=h+1|0;g=0;while(1){if((g|0)>=3){o=0;break a}h=b[j+(f*144|0)+94+(g<<1)>>1]|0;if(!(h<<16>>16)){o=0;break a}if((h&65535|0)==(p|0))break;g=g+1|0}if((g|0)>=0){r=a[j+(f*144|0)+106+g>>0]|0;t=b[n+(e[j+(f*144|0)+6+(r<<1)>>1]<<1)>>1]|0;p=0;g=0;while(1){if((p|0)>=(y|0))break;if((p|0)!=(r|0)){s=b[j+(f*144|0)+6+(p<<1)>>1]|0;b[x+(g<<1)>>1]=s;s=b[n+((s&65535)<<1)>>1]|0;b[q+(g<<1)>>1]=s;if(t<<16>>16==s<<16>>16){o=0;break a}g=g+1|0}p=p+1|0}if((g+1|0)==(y|0)){switch(g|0){case 1:{o=2-((o+1+r|0)%2|0)|0;break a}case 2:break;default:{o=0;break a}}s=b[q>>1]|0;q=b[q+2>>1]|0;if(s<<16>>16==q<<16>>16){g=-1;f=0;o=0;while(1){if((f|0)>=(y|0))break;p=b[j+(d*144|0)+6+(f<<1)>>1]|0;h=p&65535;n=b[m+(h<<1)>>1]|0;if(n<<16>>16==t<<16>>16)g=f;else{if(n<<16>>16!=s<<16>>16){o=0;break a}b[z+(o<<1)>>1]=b[l+(h<<1)>>1]|0;b[w+(o<<1)>>1]=p;o=o+1|0}f=f+1|0}if((o|0)!=2|(g|0)<0){o=0;break}if(v){b[k+4>>1]=b[x>>1]|0;b[k+6>>1]=b[x+2>>1]|0;c[k>>2]=2;b[k+14>>1]=s;m=(e[z+2>>1]|0)<(e[z>>1]|0)&1;b[k+12>>1]=b[w+(m<<1)>>1]|0;b[k+16>>1]=b[z+(m<<1)>>1]|0}o=0-(s&65535)|0;break}f=z+2|0;p=-1;n=0;while(1){if((n|0)>=(y|0))break;g=e[j+(d*144|0)+6+(n<<1)>>1]|0;h=b[m+(g<<1)>>1]|0;do if(h<<16>>16==t<<16>>16)p=n;else{if(h<<16>>16==s<<16>>16){b[z>>1]=b[l+(g<<1)>>1]|0;break}if(h<<16>>16!=q<<16>>16){o=0;break a}b[f>>1]=b[l+(g<<1)>>1]|0}while(0);n=n+1|0}g=b[z>>1]|0;if(g<<16>>16!=0?(u=b[f>>1]|0,!((p|0)<0|u<<16>>16==0)):0)o=2-((r+o+((u&65535)<(g&65535)&1)|0)%2|0)|0;else o=0}else o=0}else o=0}}else o=0}else o=0;while(0);i=A;return o|0}function hf(d,f,g,h,j,k,l,m){d=d|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;y=i;i=i+48|0;v=y+40|0;t=y+32|0;x=y+24|0;q=y+16|0;u=y+8|0;r=y;n=a[h+(g*144|0)+73>>0]|0;w=n<<24>>24;s=(j|0)!=0;if(s){c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0}a:do if((b[l+(f<<1)>>1]|0)==(b[m+(g<<1)>>1]|0)){if((n+-2&255)>2){if(n<<24>>24!=1){n=0;break}n=a[h+(g*144|0)+124>>0]|0;n=n<<24>>24==0?4:n<<24>>24;break}else n=0;while(1){if((n|0)>=(w|0))break;p=n&65535;b[t+(n<<1)>>1]=p;b[q+(n<<1)>>1]=p;b[x+(n<<1)>>1]=b[m+(e[h+(g*144|0)+6+(n<<1)>>1]<<1)>>1]|0;p=e[h+(f*144|0)+6+(n<<1)>>1]|0;b[v+(n<<1)>>1]=b[l+(p<<1)>>1]|0;b[u+(n<<1)>>1]=b[k+(p<<1)>>1]|0;n=n+1|0}p=d+12|0;c[p>>2]=v;o=d+20|0;c[o>>2]=0;ih(d,t,w,2,18)|0;if(!(c[o>>2]|0)){o=h+(g*144|0)+124|0;n=a[o>>0]|0;if((n+-1&255)>=2){n=n<<24>>24;break}c[p>>2]=x;k=ih(d,q,w,2,18)|0;m=0;while(1){if((m|0)>=(w|0))break;l=e[q+(m<<1)>>1]|0;n=e[t+(m<<1)>>1]|0;if((b[x+(l<<1)>>1]|0)!=(b[v+(n<<1)>>1]|0)){n=0;break a}b[r+(l<<1)>>1]=b[u+(n<<1)>>1]|0;m=m+1|0}c[p>>2]=r;n=(ih(d,q,w,2,18)|0)+k|0;n=2-((n+(a[o>>0]|0)|0)%2|0)|0;break}m=e[t>>1]|0;r=1;l=m;n=0;p=0;m=e[v+(m<<1)>>1]|0;k=32767;while(1){if((r|0)>=(w|0)){m=n;o=k;break}o=e[t+(r<<1)>>1]|0;q=e[v+(o<<1)>>1]|0;if((q|0)==(m|0)){if((p|0)!=(m|0)){p=e[u+(l<<1)>>1]|0;z=(p|0)<(k|0);n=z?l:n;k=z?p:k}z=e[u+(o<<1)>>1]|0;l=(z|0)<(k|0);n=l?o:n;p=m;k=l?z:k}r=r+1|0;l=o;m=q}if(p){l=b[v+(m<<1)>>1]|0;b:do if(s){k=0;n=0;while(1){if((k|0)>=(w|0))break;if(l<<16>>16==(b[x+(k<<1)>>1]|0)){b[j+4+(n<<1)>>1]=b[h+(g*144|0)+6+(k<<1)>>1]|0;n=n+1|0}k=k+1|0}ih(d,j+4|0,n,2,19)|0;c[j>>2]=n;b[j+12>>1]=b[h+(f*144|0)+6+(m<<1)>>1]|0;b[j+14>>1]=l;b[j+16>>1]=o}else{k=0;n=0;while(1){if((k|0)>=(w|0))break b;z=(l<<16>>16==(b[x+(k<<1)>>1]|0)&1)+n|0;k=k+1|0;n=z}}while(0);n=(o|0)>32766|(l<<16>>16==0|(n|0)<2)?0:0-p|0}else n=0}else n=0;while(0);i=y;return n|0}function jf(a){a=a|0;var d=0,e=0;d=0;while(1){e=c[a+(d<<2)>>2]|0;if(!e)break;b[e>>1]=0;d=d+1|0}return d|0}function kf(a,d,f,g,h,j,k,l,m,n,o,p,q){a=a|0;d=d|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;var r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=i;i=i+16|0;x=B;r=B+4|0;z=f<<1;f=ef(o,p,z,g,h,r,q,x)|0;a:do if((f+30019|0)>>>0>=20){A=c[o>>2]|0;w=c[o+4>>2]|0;b:do if((f|0)>1){k=c[p+4>>2]|0;f=c[o+8>>2]|0;s=o+16|0;t=c[o+12>>2]|0;u=c[p+8>>2]|0;v=c[p+12>>2]|0;ir(u|0,c[p>>2]|0,z|0)|0;ir(v|0,k|0,z|0)|0;p=b[r>>1]|0;b[u+(h<<1)>>1]=p;o=m+4|0;r=af(a,d,n,0,u,j,v,o,1)|0;c[m>>2]=(c[m>>2]|0)+1;c:do if((c[x>>2]|0)==2?p<<16>>16==(b[f+(g<<1)>>1]|0):0){q=0;while(1){if((q|0)>=(d|0))break c;if((b[f+(e[t+(q<<1)>>1]<<1)>>1]|0)==(b[u+(e[v+(q<<1)>>1]<<1)>>1]|0))q=q+1|0;else{y=7;break}}}else y=7;while(0);if((y|0)==7){c[x>>2]=0;k=0;while(1){q=c[s+(k<<2)>>2]|0;if(!q)break;b[q>>1]=0;k=k+1|0}ir(f|0,A|0,z|0)|0;ir(t|0,w|0,z|0)|0;b[f+(g<<1)>>1]=p;a=af(a,d,n,0,f,j,t,o,1)|0;c[m>>2]=(c[m>>2]|0)+1;if((a|0)!=(r|0)){f=-30007;break a}}c[l>>2]=r;q=0;while(1){if((q|0)>=(d|0))break b;if((b[f+(e[t+(q<<1)>>1]<<1)>>1]|0)==(b[u+(e[v+(q<<1)>>1]<<1)>>1]|0))q=q+1|0;else{f=-30007;break a}}}else{c[l>>2]=k;f=0}while(0);f=e[((f|0)==0?A:f)+(g<<1)>>1]|0}while(0);i=B;return f|0}function lf(c,d,f,g,h){c=c|0;d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0;j=0;a:while(1){if((j|0)>=(d|0)){i=0;break}b:do if((b[g+(j<<1)>>1]|0)!=(b[h+(j<<1)>>1]|0)){if((((j|0)!=(f|0)?a[c+(j*144|0)+131>>0]|0:0)?(a[c+(j*144|0)+126>>0]&64)==0:0)?(b[c+(j*144|0)+94>>1]|0)==0:0){i=1;break a}i=a[c+(j*144|0)+73>>0]|0;k=0;while(1){if((k|0)>=(i|0))break b;l=e[c+(j*144|0)+6+(k<<1)>>1]|0;if((((l|0)!=(f|0)?a[c+(l*144|0)+131>>0]|0:0)?(a[c+(l*144|0)+126>>0]&64)==0:0)?(b[c+(l*144|0)+94>>1]|0)==0:0){i=1;break a}k=k+1|0}}while(0);j=j+1|0}return i|0}function mf(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0;i=c[a>>2]|0;if(i|0){Cq(i);c[a>>2]=0}i=c[b>>2]|0;if(i|0){Cq(i);c[b>>2]=0}i=c[d>>2]|0;if(i|0){Gh(i);c[d>>2]=0}i=c[e>>2]|0;if(i|0){Gh(i);c[e>>2]=0}i=c[f>>2]|0;if(i|0){Gh(i);c[f>>2]=0}i=c[g>>2]|0;if(i|0){Cq(i);c[g>>2]=0}i=c[h>>2]|0;if(i|0){Cq(i);c[h>>2]=0}return}function nf(a,b,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0;mf(f,g,h,i,j,k,l);m=b<<1;c[f>>2]=Bq(m)|0;c[g>>2]=Bq(m)|0;c[h>>2]=Fh(b,b,a,0,0)|0;c[i>>2]=Fh(b,b,a,0,0)|0;c[j>>2]=Fh(b,b,a,0,0)|0;c[k>>2]=Bq(m)|0;m=Bq(m)|0;c[l>>2]=m;a=c[h>>2]|0;if((((((a|0)!=0?(c[i>>2]|0)!=0:0)?(c[j>>2]|0)!=0:0)?!((m|0)==0|(c[k>>2]|0)==0):0)?(c[f>>2]|0)!=0:0)?(c[g>>2]|0)!=0:0){Ze(b,a,d,e);Ze(b,c[i>>2]|0,d,e);Ze(b,c[j>>2]|0,d,e);a=1}else{mf(f,g,h,i,j,k,l);a=0}return a|0}function of(a,c,d){a=a|0;c=c|0;d=d|0;var f=0,g=0,h=0;g=d&65535;while(1){if((g|0)<=0){f=1;break}g=g+-1|0;f=b[a+((e[c+(g<<1)>>1]|0)<<1)>>1]|0;if(f<<16>>16!=d<<16>>16){h=4;break}}if((h|0)==4)f=f+1<<16>>16;return f|0}function pf(d,f,g,h,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x){d=d|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;t=t|0;u=u|0;v=v|0;w=w|0;x=x|0;var y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0;R=i;i=i+16|0;J=R;O=e[l+(m<<1)>>1]|0;N=e[l+(n<<1)>>1]|0;I=(o|0)==3;a:do if(!((m|0)!=0&I)){C=(o|0)!=0;M=f+(k*144|0)+73|0;if(C){if((a[M>>0]|0)!=4){y=0;break}if((b[t+(O<<1)>>1]|0)!=(b[t+(N<<1)>>1]|0)){y=0;break}}H=h<<1;ir(c[p>>2]|0,t|0,H|0)|0;c[d+12>>2]=c[p>>2];Q=p+4|0;ih(d,c[Q>>2]|0,h,2,11)|0;y=c[p>>2]|0;y=Te(y,y,c[Q>>2]|0,h,0)|0;z=a[M>>0]|0;b:do if(C&z<<24>>24<5){A=z<<24>>24;B=0;z=0;while(1){if((B|0)>=(A|0))break b;if(!((B|0)==(m|0)|(B|0)==(n|0))){c[J+(z<<2)>>2]=e[l+(B<<1)>>1];z=z+1|0}B=B+1|0}}while(0);if(C?(b[t+(c[J>>2]<<1)>>1]|0)!=(b[t+(c[J+4>>2]<<1)>>1]|0):0){y=0;break}if(I?(b[t+(O<<1)>>1]|0)!=(b[t+(c[J+4>>2]<<1)>>1]|0):0){y=0;break}A=c[p>>2]|0;B=A+(k<<1)|0;z=b[t+(k<<1)>>1]|0;if((b[B>>1]|0)!=z<<16>>16){b[B>>1]=z;y=df(d,h,s,y,A,r,c[Q>>2]|0,x,1)|0}K=(j|0)<(g|0);if(K?(D=c[p>>2]|0,E=D+(j<<1)|0,L=b[E>>1]|0,F=c[Q>>2]|0,G=of(D,F,L)|0,G<<16>>16!=L<<16>>16):0){b[E>>1]=G;j=df(d,h,s,y,D,r,F,x,1)|0}else j=y;y=c[p>>2]|0;z=b[y+(O<<1)>>1]|0;if(z<<16>>16==(b[y+(N<<1)>>1]|0)){G=of(y,c[Q>>2]|0,z)|0;ir(c[q>>2]|0,y|0,H|0)|0;L=q+4|0;ir(c[L>>2]|0,c[Q>>2]|0,H|0)|0;y=c[p>>2]|0;b[y+(O<<1)>>1]=G;y=df(d,h,s,j,y,r,c[Q>>2]|0,x,1)|0;H=c[q>>2]|0;b[H+(N<<1)>>1]=G;if((y|0)==(df(d,h,s,j,H,r,c[L>>2]|0,x,1)|0)){c:do if((o+-1|0)>>>0<2){E=0;A=y;z=y;while(1){if((E|0)>=3)break c;d:do if(!E){y=N;D=O}else switch(o|0){case 1:{D=c[J+(E+-1<<2)>>2]|0;y=D;break d}case 2:{y=c[J+(E+-1<<2)>>2]|0;D=c[J+(2-E<<2)>>2]|0;break d}default:{y=-1;break a}}while(0);l=c[p>>2]|0;y=l+(y<<1)|0;B=b[y>>1]|0;H=c[q>>2]|0;C=b[H+(D<<1)>>1]|0;m=c[Q>>2]|0;t=of(l,m,B)|0;if(!(t<<16>>16==(of(H,c[L>>2]|0,C)|0)<<16>>16?B<<16>>16==C<<16>>16:0)){y=0;break a}if(B<<16>>16!=t<<16>>16){b[y>>1]=t;y=df(d,h,s,j,l,r,m,x,1)|0;H=c[q>>2]|0;b[H+(D<<1)>>1]=t;if((y|0)==(df(d,h,s,j,H,r,c[L>>2]|0,x,1)|0)){A=y;z=y}else{y=-1;break a}}E=E+1|0}}else{A=y;z=y}while(0);e:do if(I){E=(n|0)%2|0;G=J+(1-E<<2)|0;E=J+(E<<2)|0;F=0;while(1){if((F|0)>=3){l=A;break e}switch(F|0){case 0:{y=N;D=c[G>>2]|0;break}case 1:{y=c[G>>2]|0;D=c[E>>2]|0;break}case 2:{y=c[E>>2]|0;D=O;break}default:{y=-1;break a}}l=c[p>>2]|0;y=l+(y<<1)|0;B=b[y>>1]|0;J=c[q>>2]|0;C=b[J+(D<<1)>>1]|0;m=c[Q>>2]|0;t=of(l,m,B)|0;if(!(t<<16>>16==(of(J,c[L>>2]|0,C)|0)<<16>>16?B<<16>>16==C<<16>>16:0)){y=0;break a}if(B<<16>>16!=t<<16>>16){b[y>>1]=t;y=df(d,h,s,j,l,r,m,x,1)|0;J=c[q>>2]|0;b[J+(D<<1)>>1]=t;if((y|0)==(df(d,h,s,j,J,r,c[L>>2]|0,x,1)|0)){A=y;z=y}else{y=-1;break a}}F=F+1|0}}else l=A;while(0);if(!K?(a[M>>0]|0)==4:0){m=c[p>>2]|0;C=m+(N<<1)|0;B=b[C>>1]|0;A=0;y=0;while(1){if((A|0)>=4)break;N=(B<<16>>16==(b[m+(e[f+(k*144|0)+6+(A<<1)>>1]<<1)>>1]|0)&1)+y|0;A=A+1|0;y=N}if((y|0)==3){z=B&65535;while(1){if((z|0)<=0){y=1;break}z=z+-1|0;y=b[m+(e[(c[Q>>2]|0)+(z<<1)>>1]<<1)>>1]|0;if(B<<16>>16!=y<<16>>16){P=52;break}}if((P|0)==52)y=y+1<<16>>16;b[C>>1]=y;P=df(d,h,s,l,m,r,c[Q>>2]|0,x,1)|0;z=c[q>>2]|0;b[z+(O<<1)>>1]=y;y=P;z=df(d,h,s,l,z,r,c[L>>2]|0,x,1)|0}else y=l}else y=l;if((y|0)==(z|0)){y=0;while(1){if((y|0)>=(h|0))break;if((b[(c[p>>2]|0)+(e[(c[Q>>2]|0)+(y<<1)>>1]<<1)>>1]|0)==(b[(c[q>>2]|0)+(e[(c[L>>2]|0)+(y<<1)>>1]<<1)>>1]|0))y=y+1|0;else{y=-1;break a}}Ze(g,v,c[p>>2]|0,u);Ze(g,w,c[q>>2]|0,u);y=z+1|0}else y=-1}else y=-1}else y=0}else y=0;while(0);i=R;return y|0}function qf(c,d,e,f,g,h,i,j,k,l,m,n){c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0;o=f&65535;p=g&65535;a:do if((b[m+(o<<1)>>1]|0)==(b[n+(p<<1)>>1]|0)){n=b[i+(o<<1)>>1]|0;m=b[j+(p<<1)>>1]|0;switch((m<<16>>16==0&1)+(n<<16>>16==0&1)|0){case 1:{m=-1;break a}case 0:{if((n&65535|0)!=(p+1|0)){m=-1;break a}if((m&65535|0)!=(o+1|0)){m=-1;break a}break}default:{}}if((b[k+(o<<1)>>1]|0)==(b[l+(p<<1)>>1]|0)){q=d&65535;n=0;m=0;i=0;while(1){if((n|0)>=3){f=n;break}i=b[c+(q*144|0)+94+(n<<1)>>1]|0;if(!(i<<16>>16)){f=n;i=0;break}l=(b[c+(q*144|0)+6+(a[c+(q*144|0)+106+n>>0]<<1)>>1]|0)==f<<16>>16;m=l&1;if(l){f=n;break}n=n+1|0}l=e&65535;o=0;j=0;n=0;while(1){if((o|0)>=3){k=o;break}n=b[c+(l*144|0)+94+(o<<1)>>1]|0;if(!(n<<16>>16)){k=o;n=0;break}k=(b[c+(l*144|0)+6+(a[c+(l*144|0)+106+o>>0]<<1)>>1]|0)==g<<16>>16;j=k&1;if(k){k=o;break}o=o+1|0}if((m|0)==(j|0))if(!m)m=1;else{j=i+-1<<16>>16;o=n+-1<<16>>16;p=b[h>>1]|0;m=b[h+2>>1]|0;if(p<<16>>16==d<<16>>16?j<<16>>16==m<<16>>16:0){i=j;n=0}else{i=m;n=j<<16>>16!=p<<16>>16?1:m<<16>>16!=d<<16>>16}do if(p<<16>>16==e<<16>>16?o<<16>>16==i<<16>>16:0)if(n)m=0;else{m=0;r=25}else if(i<<16>>16==e<<16>>16){m=o<<16>>16!=p<<16>>16;if(n^m){m=0;break}else{r=25;break}}else if(n){r=26;break}else{m=0;break}while(0);if((r|0)==25)if(n|m)r=26;else m=1;if((r|0)==26){n=a[c+(q*144|0)+118+f>>0]|0;m=a[c+(l*144|0)+118+k>>0]|0;if(n<<24>>24==m<<24>>24){m=1;break}if(((n&7)+-1|0)>>>0>=4){m=1;break}if(((m&7)+-1|0)>>>0<4)m=0;else{m=1;break}}}else m=0}else m=-1}else m=-1;while(0);return m|0} -function Mi(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;a:do if(((f|0)!=0?(y=c[f>>2]|0,(y|0)!=0):0)?(c[f+20>>2]|0)>=1:0){B=f+16|0;n=c[B>>2]|0;A=f+4|0;g=c[A>>2]|0;if(g|0){Cq(g);c[A>>2]=0}z=f+8|0;g=c[z>>2]|0;if(g|0){Cq(g);c[z>>2]=0}g=c[B>>2]|0;h=0;i=0;while(1){if((h|0)>=(g|0)){k=i;break}x=e[y+(h*36|0)+28>>1]|0;h=h+1|0;i=(i|0)<(x|0)?x:i}if(k){i=Dq(k+1|0,2)|0;if(!i){g=0;k=0;h=0;l=54}else l=13}else{i=0;l=13}b:do if((l|0)==13){j=0;g=0;while(1){if((j|0)>=(d|0))break;x=b[a+(j*144|0)+92>>1]|0;h=x&65535;if(x<<16>>16){if((h|0)>(k|0)){g=0;k=0;h=0;l=54;break b}x=i+(h<<1)|0;b[x>>1]=(b[x>>1]|0)+1<<16>>16;g=g+1|0}j=j+1|0}if(g){k=Dq(g,2)|0;if(k){j=Dq(n,2)|0;if(j){m=0;l=0;h=0;c:while(1){d:while(1){x=y+(m*36|0)|0;w=y+(m*36|0)+28|0;t=y+(m*36|0)+30|0;u=y+(m*36|0)+2|0;v=x+36|0;while(1){if((m|0)>=(n|0))break c;q=b[w>>1]|0;r=b[x>>1]|0;o=1;p=r&65535;while(1){if((o|0)==2)break;s=p-(e[y+(m*36|0)+(o<<1)>>1]|0)|0;o=o+1|0;p=s}o=i+((q&65535)<<1)|0;s=b[o>>1]|0;if((b[t>>1]|0)==s<<16>>16){q=r<<16>>16==(b[u>>1]|0);if(q)p=q&1;else break}else p=0;p=(p|0)!=0;if(!(p|s<<16>>16==0)){g=j;h=0;l=54;break b}n=n+-1|0;if((n|0)>(m|0))jr(x|0,v|0,(n-m|0)*36|0)|0;if(p)break d}l=l+1<<16>>16;b[w>>1]=l;b[o>>1]=l;if(!m)o=0;else{o=m+-1|0;o=(e[y+(o*36|0)+30>>1]|0)+(e[y+(o*36|0)+32>>1]|0)|0}w=o&65535;b[j+(m<<1)>>1]=w;b[y+(m*36|0)+32>>1]=w;b[x>>1]=p;m=m+1|0}b[o>>1]=0;h=h+1|0}if((n|0)==(l&65535|0)){if(!(l<<16>>16))if(!h){g=j;h=0;l=54;break}else{g=0;h=0;l=55;break}h=Dq(n<<2,2)|0;if(!h){g=j;l=54}else{l=0;while(1){if((l|0)==(n|0)){q=0;break}b[h+(l<<1)>>1]=l;l=l+1|0}while(1){if((q|0)>=(d|0))break;l=a+(q*144|0)+92|0;m=b[l>>1]|0;do if(m<<16>>16){x=b[i+((m&65535)<<1)>>1]|0;b[l>>1]=x;l=(x&65535)+-1|0;if(!(x<<16>>16)){g=g+-1|0;break}m=j+(l<<1)|0;o=b[m>>1]|0;p=o&65535;if(p>>>0>=((e[y+(l*36|0)+30>>1]|0)+(e[y+(l*36|0)+32>>1]|0)|0)>>>0){g=j;l=54;break b}b[m>>1]=o+1<<16>>16;b[k+(p<<1)>>1]=q}while(0);q=q+1|0}c[B>>2]=n;c[f+12>>2]=g;c[A>>2]=k;c[z>>2]=h;if(i|0)Cq(i);Cq(j);g=(n*3|0)+1+g|0;break a}}else{g=j;h=0;l=54}}else{g=j;h=0;l=54}}else{g=0;h=0;l=54}}else{j=0;g=0;h=0}}while(0);if((l|0)==54){j=g;g=-30005;l=55}if((l|0)==55)if(k)Cq(k);if(i|0)Cq(i);if(h|0)Cq(h);if(j|0)Cq(j);c[f+12>>2]=0;c[B>>2]=0;if(!g){if(!(c[f+56>>2]&255)){if((c[f+32>>2]|0)<=1){g=0;break}if(!(c[f+64>>2]&49152)){g=0;break}}g=1}}else g=0;while(0);return g|0}function Ni(a,b,c){a=a|0;b=b|0;c=c|0;return (e[c+((e[a>>1]|0)<<1)>>1]|0)-(e[c+((e[b>>1]|0)<<1)>>1]|0)|0}function Oi(a,d,f,g,h){a=a|0;d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0;l=g-f|0;a:do if((l|0)>=1?(m=d+12|0,(c[m>>2]|0)>=2):0){i=c[d>>2]|0;j=d+4|0;k=0;while(1){if((k|0)>=(l|0))break;a=b[i+(k*36|0)+30>>1]|0;g=a&65535;if((a&65535)>=2){a=e[i+(k*36|0)+32>>1]|0;if((a+g|0)>(c[m>>2]|0)){g=-30005;break a}ih(h,(c[j>>2]|0)+(a<<1)|0,g,2,22)|0}k=k+1|0}a=d+16|0;g=c[a>>2]|0;if((g|0)>1){ih(h+(f<<1)|0,c[d+8>>2]|0,l,2,22)|0;g=c[a>>2]|0}}else g=0;while(0);return g|0}function Pi(a,b,d){a=a|0;b=b|0;d=d|0;switch(d&3|0){case 3:{a=a+16|0;c[a>>2]=(c[a>>2]|0)-b;break}case 1:{c[a+20>>2]=c[a+16>>2];break}default:{}}return 0}function Qi(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0;a:do if((f|0)!=0&(a[b+24>>0]|0)!=0){switch(h&3|0){case 2:case 0:{j=c[b+20>>2]|0;i=j;j=j+g|0;break}case 3:case 1:{i=c[b+20>>2]|0;j=c[b+16>>2]|0;break}default:{}}if(!((h&4|0)==0|(h&40|0)==40)){g=j+1|0;if((d[e>>0]|0)==(g|0)){g=0;break}g=g&255;a[f>>0]=g;a[e>>0]=g;g=1;break}if(!((h&8|0)==0|(i|0)==(j|0))){m=(i|0)>(j|0);k=m?j:i;i=m?i:j;m=d[e>>0]|0;j=m&15;b:do switch(j|0){case 3:case 2:case 1:{b=(k|0)==0;if(b&(i|0)==1){g=h&32;b=g<<1|16;g=(g|0)==0?4:9;break b}g=(i|0)==2;if(!(b&g))if((k|0)==1&g){b=64;g=7}else{g=-9995;break a}else{b=48;g=6}break}case 8:{if((k|0)==0&(i|0)==1){b=80;g=8}else{g=-9995;break a}break}default:{g=m&112;switch(g|0){case 16:{if((i|0)==1&((h&32|0)!=0&(k|0)==0)){b=80;g=9}else l=18;break}case 80:{l=18;break}case 48:{g=(k|0)==1|(i|0)==1;b=g?32:48;g=g?5:j;break}case 64:{g=(k|0)==0|(i|0)==0;b=g?32:64;g=g?5:j;break}case 32:{b=32;g=j;break}case 0:{b=(k|0)==0;if(!(b&(i|0)==1)){g=(i|0)==2;if(!(b&g))if((k|0)==1&g){b=64;g=j}else{g=-9995;break a}else{b=48;g=j}}else{b=16;g=j}break}default:{g=-9995;break a}}if((l|0)==18){l=(k|0)==2|(i|0)==2;b=l?32:g;g=l?5:j}switch(j|0){case 8:{g=8;break b}case 7:case 6:case 5:case 9:case 4:break;default:{g=-9995;break a}}}}while(0);g=g|b;if((g|0)!=(m|0)){g=g&255;a[f>>0]=g;a[e>>0]=g;g=1}else g=0}else g=0}else g=0;while(0);return g|0}function Ri(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;g=a+156|0;h=a+88|0;i=a+72|0;j=a+160|0;k=0;f=0;l=0;while(1){if((l|0)>=(c[g>>2]|0)){e=k;break}c[h>>2]=c[a+92+(l<<2)>>2];c[i>>2]=0;e=Si(a,b,d)|0;ij(b)|0;if((e|0)<=0)break;c[j>>2]=(c[j>>2]|0)+1;k=e;f=e+f|0;l=l+1|0}if((e+9999|0)>>>0>=20){e=(Ic(c[a+180>>2]|0,c[a+184>>2]|0)|0)==0;e=e?f:-9985}return e|0}function Si(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;L=i;i=i+16|0;J=L+4|0;G=L;v=c[e>>2]|0;I=c[e+4>>2]|0;C=c[e+8>>2]|0;D=c[e+12>>2]|0;K=e+16|0;c[J>>2]=c[K>>2];w=c[e+20>>2]|0;z=c[e+24>>2]|0;A=c[e+32>>2]|0;if((f&128|0)!=0?(c[e+36>>2]|0)!=0:0){c[e+40>>2]=0;F=c[e+56>>2]|0;x=0;E=(b[d+172>>1]|0)==0|(F|0)!=0;F=(F|0)==1}else{x=1;E=1;F=0}c[J>>2]=0;c[D>>2]=0;c[v+4>>2]=0;c[v>>2]=-1;a[C>>0]=3;B=d+172|0;H=0;h=0;a:while(1){u=c[D+(H<<2)>>2]|0;g=Ti(u,v)|0;o=Ui(d,u)|0;t=F&(H|0)==0;p=I+(u<<3)|0;q=u^1;r=I+(q<<3)|0;s=0;n=0;while(1){if((s|0)>=(o|0)){g=n;break}m=Vi(d,u,s,G)|0;do if((m|0)!=-2){if(t?((m|0)/2|0|0)<=(c[d>>2]|0):0){j=n;break}if(!E?((m|0)/2|0|0)>(c[d>>2]|0):0){j=n;break}if(!((c[p>>2]|0)==(m|0)?(Wi(d,p)|0)==(u|0):0)){l=c[G>>2]|0;h=Xi(d,u,m,l)|0;if((h|0)>0){if(b[B>>1]|0){if(Zi(d,u,m)|0){j=n;break}if(_i(d,u,m,I)|0){j=n;break}}j=Ti(m,v)|0;if((j|0)==-2){j=(c[J>>2]|0)+1|0;c[J>>2]=j;c[D+(j<<2)>>2]=m;j=C+m|0;if((a[j>>0]|0)<3)a[j>>0]=3;j=m^1;k=C+j|0;if((a[k>>0]|0)<1)a[k>>0]=1;c[I+(m<<3)>>2]=u;c[I+(m<<3)+4>>2]=l;c[v+(j<<2)>>2]=m;c[v+(m<<2)>>2]=-1;j=n+1|0;break}k=m^1;if((a[C+k>>0]|0)<=1){j=n;break}if((c[r>>2]|0)==(k|0)){if((g|0)==(j|0)|(Wi(d,r)|0)==(q|0)){j=n;break}}else if((g|0)==(j|0)){j=n;break}if(b[B>>1]|0?_i(d,k,u,I)|0:0){j=n;break}g=aj(d,D,J,w,z,A,I,v,u,m,l,g,j,C)|0;if((g+9999|0)>>>0<20){h=31;break a}if(!g){h=33;break a}else{j=n+1|0;break}}}if((h+9999|0)>>>0<20){g=h;h=39;break a}else j=n}else j=n;while(0);s=s+1|0;n=j}if(!(x|(g|0)!=0)?(y=gj(d,e,u)|0,(y+9999|0)>>>0<20):0){g=y;h=43;break}g=c[J>>2]|0;if((H|0)<(g|0))H=H+1|0;else{h=45;break}}do if((h|0)==31)c[K>>2]=c[J>>2];else if((h|0)==33){g=cj(d,I,0,1,1e4)|0;if((g+9999|0)>>>0<20){c[K>>2]=c[J>>2];break}if(g|0){e=d+72|0;c[e>>2]=c[e>>2]|f&1}d=ej(d,I,0,1,g,0,f)|0;c[K>>2]=c[J>>2];g=(d+9999|0)>>>0<20?d:g}else if((h|0)==39)c[K>>2]=c[J>>2];else if((h|0)==43)c[K>>2]=c[J>>2];else if((h|0)==45){c[K>>2]=g;g=0}while(0);i=L;return g|0}function Ti(a,b){a=a|0;b=b|0;var d=0,e=0;d=b+(a<<2)|0;e=c[d>>2]|0;switch(e|0){case -2:{a=-2;break}case -1:break;default:{b=Ti(e,b)|0;c[d>>2]=b;return b|0}}return a|0}function Ui(a,b){a=a|0;b=b|0;var d=0;if((b|0)>1){d=((b|0)/2|0)+-1|0;b=c[a+76>>2]|0;if((c[b+(d<<5)>>2]|0)>0)b=(e[b+(d<<5)+22>>1]|0)+1|0;else b=0}else b=c[a+20>>2]|0;return b|0}function Vi(b,d,f,g){b=b|0;d=d|0;f=f|0;g=g|0;var h=0;h=d+-2|0;do if((h|0)>-1){if(!f){c[g>>2]=(d|-2)^1;f=d&1;break}d=c[(c[(c[b+76>>2]|0)+(((h|0)/2|0)<<5)+28>>2]|0)+(f+-1<<2)>>2]|0;c[g>>2]=d;f=c[b+80>>2]|0;if((c[f+(d*28|0)+8>>2]&16383|0)!=0?(a[f+(d*28|0)+25>>0]|0)==0:0)f=((e[f+(d*28|0)+2>>1]<<1|1)^h)+2|0;else f=-2}else if(!(c[(c[b+76>>2]|0)+(f<<5)>>2]&16383))f=-2;else{f=(f<<1)+2|d&1;c[g>>2]=~f}while(0);return f|0}function Wi(a,b){a=a|0;b=b|0;var d=0;d=c[b+4>>2]|0;b=c[b>>2]|0;do if((d|0)<=-1)if((b|0)<2){b=~d;break}else{b=(b|0)%2|0;break}else b=(((e[(c[a+80>>2]|0)+(d*28|0)+2>>1]|0)<<1|1)^b+-2)+2|0;while(0);return b|0}function Xi(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0;j=i;i=i+16|0;g=j;h=j+4|0;f=Yi(b,d,e,f,g,h)|0;do if((f+9999|0)>>>0>=20){d=c[g>>2]|0;if(!(a[h>>0]|0)){b=c[d+16>>2]&16383;if(f|0){f=b;break}f=(c[d+8>>2]|0)-b|0;break}else{b=c[d+8>>2]&16383;if(f|0){f=b;break}f=(c[d>>2]|0)-b|0;break}}while(0);i=j;return f|0}function Yi(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0;i=((d|0)/2|0)+-1|0;j=((e|0)/2|0)+-1|0;c[g>>2]=0;k=(e|0)>1;do if((d|0)>1){if(k){if(!(e+d&1)){i=-9999;break}c[g>>2]=(c[b+80>>2]|0)+(f*28|0);a[h>>0]=0;i=d&1;break}if((e|0)>-1?(e+d&1|0)==0:0){c[g>>2]=(c[b+76>>2]|0)+(i<<5);a[h>>0]=e+3;i=e&1^1}else i=-9999}else if((d|0)>-1&k?(e+d&1|0)==0:0){c[g>>2]=(c[b+76>>2]|0)+(j<<5);a[h>>0]=d+1;i=d&1}else i=-9999;while(0);return i|0}function Zi(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=i;i=i+16|0;p=q;h=c[a+172>>2]|0;g=h&65535;h=h>>>16&65535;do if(((!((e|0)<2|((d|0)<2|g<<16>>16==0))?(m=a+76|0,f=c[m>>2]|0,(b[f+(((e|0)/2|0)+-1<<5)+20>>1]&g)<<16>>16==0):0)?(n=a+174|0,h<<16>>16!=0):0)?(o=a+176|0,j=b[o>>1]|0,j<<16>>16!=0):0){k=b[f+(((d|0)/2|0)+-1<<5)+20>>1]|0;l=(k&h)<<16>>16==h<<16>>16;if(l|(k&j)<<16>>16==j<<16>>16){j=Ui(a,e)|0;k=0;g=0;f=0;while(1){if((k|0)>=(j|0))break;h=Vi(a,e,k,p)|0;do if(!((h|0)<2|(h|0)==(d|0))?(Xi(a,e,h,c[p>>2]|0)|0)>0:0){g=g+1|0;h=b[(c[m>>2]|0)+(((h|0)/2|0)+-1<<5)+20>>1]|0;if(l){r=b[o>>1]|0;if((r&h)<<16>>16!=r<<16>>16)break}else{r=b[n>>1]|0;if((r&h)<<16>>16!=r<<16>>16)break}f=f+1|0}while(0);k=k+1|0}if((g|0)==1&(f|0)!=0){f=1;break}}f=0}else f=0;while(0);i=q;return f|0}function _i(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=i;i=i+16|0;p=u;a:do if(((((((!((d|0)<2|(f|0)<2)?(l=c[a+172>>2]|0,m=l&65535,m<<16>>16!=0):0)?(n=((d|0)/2|0)+-1|0,o=a+76|0,(b[(c[o>>2]|0)+(n<<5)+20>>1]&m)<<16>>16==0):0)?(r=a+174|0,l>>>0>=65536):0)?(t=a+176|0,(b[t>>1]|0)!=0):0)?(h=$i(a,d,g,p)|0,j=c[p>>2]|0,!((h|0)==-2|(j|0)<0)):0)?(k=c[a+80>>2]|0,d=e[k+(j*28|0)>>1]|0,q=((h|0)/2|0)+-1|0,(d|0)==(q|0)|(d|0)==(n|0)):0)?(e[k+(j*28|0)+2>>1]^q|0)==(n|0):0){j=c[o>>2]|0;h=b[j+(q<<5)+20>>1]|0;k=b[r>>1]|0;r=(k&h)<<16>>16==k<<16>>16;l=r&1;if(!(!r?(r=b[t>>1]|0,(r&h)<<16>>16!=r<<16>>16):0))s=11;do if((s|0)==11){j=b[j+(((f|0)/2|0)+-1<<5)+20>>1]|0;s=(k&j)<<16>>16==k<<16>>16;h=s&1;if(s)if((h+l|0)==1){h=1;break a}else break;else{t=b[t>>1]|0;if((h+l|0)==1?(t&j)<<16>>16==t<<16>>16:0){h=1;break a}else break}}while(0);h=0}else h=0;while(0);i=u;return h|0}function $i(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=d+(b<<3)|0;g=Wi(a,f)|0;a:do if((g|0)==(b|0)){f=c[f>>2]|0;c[e>>2]=c[d+(b<<3)+4>>2]}else{i=b^1;h=g^1;while(1){if((h|0)==-2){f=-2;break a}g=d+(h<<3)|0;f=h;h=c[g>>2]|0;if((h|0)==(i|0))break;if((h|0)==(f|0)){f=-2;break a}}a=Wi(a,g)|0;c[e>>2]=c[d+(f<<3)+4>>2];f=a^1^a+b&1}while(0);return f|0}function aj(b,d,e,f,g,h,i,j,k,l,m,n,o,p){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;var q=0,r=0;n=bj(n,i,j,f,h)|0;if((n+9999|0)>>>0>=20){q=bj(o,i,j,g,h)|0;if((q+9999|0)>>>0>=20){while(1){if((q|n|0)<=-1)break;if((c[f+(n<<2)>>2]|0)!=(c[g+(q<<2)>>2]|0))break;n=n+-1|0;q=q+-1|0}while(1){o=n+1|0;n=c[f+(o<<2)>>2]|0;if(!n){n=0;break}if((Xi(b,c[i+(n<<3)>>2]|0,n,c[i+(n<<3)+4>>2]|0)|0)>1)n=o;else break}l=l^1;while(1){b=o+-1|0;if((o|0)<=0)break;o=c[f+(b<<2)>>2]|0;c[j+(o<<2)>>2]=n;o=o^1;c[j+(o<<2)>>2]=n;h=p+o|0;if((a[h>>0]|0)>1){o=b;continue}c[i+(o<<3)>>2]=l;c[i+(o<<3)+4>>2]=m;r=(c[e>>2]|0)+1|0;c[e>>2]=r;c[d+(r<<2)>>2]=o;if((a[h>>0]|0)>=2){o=b;continue}a[h>>0]=2;o=b}while(1){if((q|0)<=-1)break;o=c[g+(q<<2)>>2]|0;c[j+(o<<2)>>2]=n;o=o^1;c[j+(o<<2)>>2]=n;h=p+o|0;if((a[h>>0]|0)<=1?(c[i+(o<<3)>>2]=k,c[i+(o<<3)+4>>2]=m,r=(c[e>>2]|0)+1|0,c[e>>2]=r,c[d+(r<<2)>>2]=o,(a[h>>0]|0)<2):0)a[h>>0]=2;q=q+-1|0}h=n^1;o=p+h|0;if((a[o>>0]|0)<=1?(c[i+(h<<3)>>2]=k,c[i+(h<<3)+4>>2]=m,r=(c[e>>2]|0)+1|0,c[e>>2]=r,c[d+(r<<2)>>2]=h,(a[o>>0]|0)<2):0)a[o>>0]=2}else n=q}return n|0}function bj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;c[e>>2]=a;g=a;a=0;while(1){if(!g)break;g=Ti(c[b+(g<<3)>>2]|0,d)|0;a=a+1|0;if((a|0)>=(f|0)){a=-9999;break}c[e+(a<<2)>>2]=g}return a|0}function cj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;i=b+(e<<3)|0;h=c[i>>2]|0;i=Wi(a,i)|0;g=dj(a,h,i,c[b+(e<<3)+4>>2]|0)|0;if((g+9999|0)>>>0>=20){g=(g|0)<(f|0)?g:f;if((h|0)!=(d|0)){d=cj(a,b,d,h,g)|0;g=(d|0)<(g|0)?d:g}if((i|0)!=(e|0)){e=cj(a,b,e^1,i^1,g)|0;return ((e|0)<(g|0)?e:g)|0}}return g|0}function dj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0;k=i;i=i+16|0;g=k;h=k+4|0;f=Yi(b,d,e,f,g,h)|0;do if((f+9999|0)>>>0>=20){j=c[g>>2]|0;if(!(a[h>>0]|0)){e=j+16|0;g=c[e>>2]|0;d=g&16383;if(!f)f=(c[j+8>>2]|0)-d|0;else f=d;if(!(g&16384)){c[e>>2]=g|16384;break}else{b=b+68|0;c[b>>2]=(c[b>>2]|0)+1;f=(f|0)/2|0;break}}else{e=j+8|0;g=c[e>>2]|0;d=g&16383;if(!f)f=(c[j>>2]|0)-d|0;else f=d;if(!(g&16384)){c[e>>2]=g|16384;break}else{b=b+68|0;c[b>>2]=(c[b>>2]|0)+1;f=(f|0)/2|0;break}}}while(0);i=k;return f|0}function ej(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=g;a:while(1){k=m<<24>>24==0;l=1-(m&255)&255;while(1){j=b+(e<<3)|0;i=e;e=c[j>>2]|0;j=Wi(a,j)|0;g=c[b+(i<<3)+4>>2]|0;if(k)break;if((j|0)!=(i|0)?(n=ej(a,b,i^1,j^1,f,l,h)|0,(n+9999|0)>>>0<20):0)g=n;else g=fj(a,e,j,g,f,m,h)|0;if((e|0)==(d|0)|(g+9999|0)>>>0<20)break a}if((e|0)!=(d|0)?(o=ej(a,b,d,e,f,0,h)|0,(o+9999|0)>>>0<20):0)g=o;else g=fj(a,e,j,g,f,0,h)|0;if((j|0)==(i|0)|(g+9999|0)>>>0<20)break;m=1;d=i^1;e=j^1}return g|0}function fj(d,e,f,g,h,j,k){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+16|0;m=q;l=q+4|0;g=Yi(d,e,f,g,m,l)|0;if((g+9999|0)>>>0>=20){p=(g|0)==0?h:0-h|0;n=a[l>>0]|0;o=c[m>>2]|0;a:do if(!(n<<24>>24)){l=o+16|0;m=c[l>>2]|0;h=m&16383;g=h+p|0;if(!p){c[l>>2]=m&-16385;h=0;break}if((g|0)>=0?(g|0)<=(c[o+8>>2]|0):0){if(!(k&1))g=h;else{k=o+24|0;a[k>>0]=(a[k>>0]|0)+1<<24>>24}c[l>>2]=m&-32768|g;h=c[d+88>>2]|0;l=h+16|0;m=(c[l>>2]|0)+5|0;if((m|0)<(c[h>>2]|0)){f=(b[o>>1]|0)==((((j<<24>>24?f:e)|0)/2|0)+65535&65535)<<16>>16&1;b[h+(m<<3)>>1]=b[o+4+((f^1)<<1)>>1]|0;b[h+((c[l>>2]|0)+5<<3)+2>>1]=b[o+4+(f<<1)>>1]|0;c[l>>2]=(c[l>>2]|0)+1;h=0;break}else{c[h+12>>2]=1;h=-9996;break}}else h=-9999}else{l=o+8|0;m=c[l>>2]|0;h=m&16383;g=h+p|0;if(!p){c[l>>2]=m&-16385;h=0;break}if((g|0)>=0?(g|0)<=(c[o>>2]|0):0){if(!(k&1))g=h;else{k=o+16|0;a[k>>0]=(a[k>>0]|0)+1<<24>>24}c[l>>2]=g+(m&-32768);h=n<<24>>24;if(!(j<<24>>24))switch(h|0){case 1:{h=c[d+88>>2]|0;c[h+24>>2]=((f|0)/2|0)+-1;c[h+8>>2]=p;h=0;break a}case 4:{c[(c[d+88>>2]|0)+32>>2]=((e|0)/2|0)+-1;h=0;break a}default:{h=-9999;break a}}else switch(h|0){case 1:{c[(c[d+88>>2]|0)+32>>2]=((f|0)/2|0)+-1;h=0;break a}case 4:{h=c[d+88>>2]|0;c[h+24>>2]=((e|0)/2|0)+-1;c[h+8>>2]=p;h=0;break a}default:{h=-9999;break a}}}else h=-9999}while(0);g=h|0?h:g}i=q;return g|0}function gj(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;t=i;i=i+16|0;r=t;a:do switch(c[d+56>>2]|0){case 0:{o=d+4|0;while(1){if((e|0)<=1){s=46;break a}if((e&1|0)==0?(f=(e|0)/2|0,(f|0)<=(c[a>>2]|0)):0){h=e;e=f;break}e=$i(a,e,c[o>>2]|0,r)|0}m=e+-1|0;n=a+76|0;l=c[n>>2]|0;if((c[l+(m<<5)>>2]|0)==(c[l+(m<<5)+8>>2]&16383|0)){e=h;f=h;while(1){if((f|0)<=1)break;e=f;f=$i(a,f,c[o>>2]|0,r)|0}if(((e&1|0)==0?(m=(e|0)/2|0,p=m+-1|0,(m|0)<=(c[a>>2]|0)):0)?(m=c[n>>2]|0,(c[m+(p<<5)>>2]|0)>(c[m+(p<<5)+8>>2]&16383|0)):0){j=a+172|0;k=d+40|0;l=d+36|0;m=d+28|0;e=0;while(1){if((h|0)<=1)break;b:do if(((h&1|0)==0?(g=(h|0)/2|0,q=g+-1|0,(g|0)<=(c[a>>2]|0)):0)?(g=c[n>>2]|0,(c[g+(q<<5)>>2]|0)==(c[g+(q<<5)+8>>2]&16383|0)):0){if(b[j>>1]|0?hj(a,d,h,-2,-2)|0:0)break;f=c[k>>2]|0;g=0;while(1){if((g|0)>=(f|0))break;u=c[l>>2]|0;if((p|0)==(c[u+(g<<2)>>2]|0)?(q|0)==(c[u+((g|1)<<2)>>2]|0):0)break b;g=g+2|0}if((f+2|0)>(c[m>>2]|0)){e=-9993;break a}c[k>>2]=f+1;g=c[l>>2]|0;c[g+(f<<2)>>2]=p;u=c[k>>2]|0;c[k>>2]=u+1;c[g+(u<<2)>>2]=q;e=e+1|0}while(0);h=$i(a,h,c[o>>2]|0,r)|0}if(e)e=1;else s=46}else s=46}else s=46;break}case 1:{k=a+76|0;h=d+4|0;g=-2;f=-2;while(1){if((e|0)<=1)break;if((e&1|0)==0?(j=(e|0)/2|0,(j|0)<=(c[a>>2]|0)):0){u=j+-1|0;q=c[k>>2]|0;f=((c[q+(u<<5)>>2]|0)-(c[q+(u<<5)+8>>2]|0)|0)<2?e:f}g=e;e=$i(a,e,c[h>>2]|0,r)|0}e=(g|0)/2|0;j=e+-1|0;if(((!((g|0)==(f|0)|(f&1|0)==0&((f|0)!=-2&(g|0)!=-2)^1)?(l=c[a>>2]|0,(e|0)>(l|0)):0)?(u=c[k>>2]|0,(c[u+(j<<5)>>2]|0)!=(c[u+(j<<5)+8>>2]|0)):0)?(u=(f|0)/2|0,m=u+-1|0,(u|0)<=(l|0)):0){e=d+40|0;f=c[e>>2]|0;g=d+36|0;h=0;while(1){if((h|0)>=(f|0))break;u=c[g>>2]|0;if((j|0)==(c[u+(h<<2)>>2]|0)?(m|0)==(c[u+((h|1)<<2)>>2]|0):0){s=46;break a}h=h+2|0}if((f+2|0)>(c[d+28>>2]|0))e=-9993;else{c[e>>2]=f+1;d=c[g>>2]|0;c[d+(f<<2)>>2]=j;u=c[e>>2]|0;c[e>>2]=u+1;c[d+(u<<2)>>2]=m;e=1}}else s=46;break}default:s=46}while(0);if((s|0)==46)e=0;i=t;return e|0}function hj(a,d,f,g,h){a=a|0;d=d|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0;n=i;i=i+16|0;l=n;if((g|0)==-2)g=$i(a,f,c[d+4>>2]|0,l)|0;f=(g|0)/2|0;k=f+-1|0;if(((g|0)>=2?(j=c[a>>2]|0,(f|0)<=(j|0)):0)?(m=a+76|0,f=c[m>>2]|0,(b[f+(((e[(c[a+80>>2]|0)+((c[(c[f+(k<<5)+28>>2]|0)+4>>2]|0)*28|0)+2>>1]|0)^k)<<5)+20>>1]&1)==0):0){if((h|0)==-2){h=$i(a,g,c[d+4>>2]|0,l)|0;j=c[a>>2]|0}h=(h|0)/2|0;if((h|0)>(j|0))h=(b[(c[m>>2]|0)+(h+-1<<5)+20>>1]&20)!=0&1;else h=0}else h=0;i=n;return h|0}function ij(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;if(!b)return 1;d=b+12|0;i=(c[d>>2]|0)==0?2:0;i=(c[b>>2]|0)==0?i|4:i;g=b+4|0;i=(c[g>>2]|0)==0?i|8:i;e=b+8|0;i=(c[e>>2]|0)==0?i|16:i;f=b+16|0;a:do if(!i){h=0;while(1){if((h|0)>(c[f>>2]|0))break a;j=c[(c[d>>2]|0)+(h<<2)>>2]|0;k=j^1;l=c[g>>2]|0;c[l+(k<<3)>>2]=-2;c[l+(j<<3)>>2]=-2;l=c[b>>2]|0;c[l+(k<<2)>>2]=-2;c[l+(j<<2)>>2]=-2;a[(c[e>>2]|0)+k>>0]=0;a[(c[e>>2]|0)+j>>0]=0;h=h+1|0}}while(0);c[f>>2]=-1;l=(c[b+20>>2]|0)==0?i+32|0:i;return ((c[b+24>>2]|0)==0?l+64|0:l)|0}function jj(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;j=c[b+76>>2]|0;if(a[j+(f<<5)+16>>0]|0){i=e+(f*176|0)+93|0;h=a[e+(f*176|0)+92>>0]|0;b=(d[i>>0]|0)-h<<24;if((b|0)>-16777216){g=b>>24;b=c[j+(f<<5)+8>>2]|0;if((g|0)==(b|0))b=0;else{a[i>>0]=b+h;g=b;b=1}}else{g=c[j+(f<<5)+8>>2]|0;b=0}g=(c[j+(f<<5)>>2]|0)-g|0;if(g>>>0<3){h=197120>>>(g<<3&16777215);g=e+(f*176|0)+100|0;if((h&3|0)!=(a[g>>0]|0)){a[g>>0]=h;b=b+1|0}}else b=-9995}else b=0;return b|0}function kj(c,d,e,f){c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;l=i;i=i+16|0;k=l;j=0;g=0;while(1){if((j|0)>=(d|0))break;h=f+j|0;if(a[h>>0]|0){a[h>>0]=0;b[c+(j*176|0)+104>>1]=lj(c,j,e,k,-2)|0;g=g+1|0}j=j+1|0}i=l;return g|0}function lj(b,f,g,h,i){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=(i|0)>0?-1:1;s=(i|1|0)==1;if(!(a[92240]|0)){a[92240]=$n(86667)|0;a[92241]=$n(86671)|0;a[92242]=$n(86692)|0;a[92243]=$n(86743)|0;a[92244]=$n(86796)|0;a[92245]=$n(86690)|0;a[92246]=$n(86669)|0;a[92247]=$n(86650)|0;a[92248]=$n(86673)|0;a[92249]=$n(86694)|0;a[92250]=$n(86746)|0;a[92251]=$n(86799)|0}j=b+(f*176|0)+100|0;a:do if(((d[j>>0]|0)<2?(u=b+(f*176|0)+6|0,(ho(d[u>>0]|0)|0)==0):0)?(A=b+(f*176|0)+99|0,l=a[A>>0]|0,(l+1&255)<=2):0){t=b+(f*176|0)+92|0;k=a[t>>0]|0;i=k<<24>>24==0;if(((l<<24>>24==1&i?(a[b+(f*176|0)+94>>0]|0)==0:0)?(a[j>>0]|0)==0:0)?(a[u>>0]|0)==(a[92247]|0):0){m=134217728;l=4096}else x=10;b:do if((x|0)==10){c:do if(i){switch(l<<24>>24){case -1:{if(a[b+(f*176|0)+94>>0]|0)break c;if(a[j>>0]|0)break c;z=a[u>>0]|0;if((z<<24>>24==(a[92248]|0)?1:z<<24>>24==(a[92249]|0))|z<<24>>24==(a[92250]|0)|z<<24>>24==(a[92251]|0)){m=268435456;l=8192;break b}else break c}case 0:break;default:break c}if(((a[b+(f*176|0)+94>>0]|0)==1?(a[j>>0]|0)==0:0)?(z=a[u>>0]|0,(z<<24>>24==(a[92248]|0)?1:z<<24>>24==(a[92249]|0))|z<<24>>24==(a[92250]|0)|z<<24>>24==(a[92251]|0)):0){m=536870912;l=16384;break b}if(((a[b+(f*176|0)+94>>0]|0)==2?(a[j>>0]|0)==0:0)?(z=a[u>>0]|0,(z<<24>>24==(a[92241]|0)?1:z<<24>>24==(a[92242]|0))|z<<24>>24==(a[92243]|0)|z<<24>>24==(a[92244]|0)):0){m=536870912;l=16384;break b}}while(0);y=b+(f*176|0)+93|0;z=b+(f*176|0)+94|0;if(!(fo(d[u>>0]|0,l<<24>>24,a[j>>0]|0,a[y>>0]|0,a[z>>0]|0,k<<24>>24)|0)){i=0;r=0;n=0;l=0;o=0}else{i=0;break a}while(1){j=a[t>>0]|0;k=j<<24>>24;if((r|0)>=(k|0)){w=j;v=k;p=i;break}j=e[b+(f*176|0)+8+(r<<1)>>1]|0;k=a[b+(j*176|0)+99>>0]|0;if((k+1&255)>2){i=0;break a}if(k<<24>>24?a[A>>0]|0:0){x=26;break}m=b+(j*176|0)+6|0;p=b+(j*176|0)+93|0;q=b+(j*176|0)+92|0;if(fo(d[m>>0]|0,k<<24>>24,a[b+(j*176|0)+100>>0]|0,a[p>>0]|0,a[b+(j*176|0)+94>>0]|0,a[q>>0]|0)|0){i=0;break a}o=((mj(a[m>>0]|0)|0)!=0&1)+o|0;n=((ho(d[m>>0]|0)|0)!=0&1)+n|0;j=a[m>>0]|0;k=j<<24>>24==(a[92241]|0);l=(k&1)+l|0;if(((((a[u>>0]|0)==(a[92246]|0)?(a[t>>0]|0)==2:0)?(a[A>>0]|0)==0:0)?(a[q>>0]|0)==1:0)?(a[p>>0]|0)==2:0)i=((k|j<<24>>24==(a[92242]|0)|j<<24>>24==(a[92243]|0)|j<<24>>24==(a[92244]|0))&1)+i|0;r=r+1|0}if((x|0)==26)if(s){i=0;break a}else{m=0;l=0;break}i=a[u>>0]|0;q=a[92241]|0;r=i<<24>>24==q<<24>>24;s=a[92242]|0;t=a[92243]|0;u=a[92244]|0;if(!(r|i<<24>>24==s<<24>>24|i<<24>>24==t<<24>>24|i<<24>>24==u<<24>>24)){m=i<<24>>24==(a[92246]|0);if(!((w&255)<4&(m|i<<24>>24==(a[92245]|0)))){m=0;l=0;break}k=a[y>>0]|0;i=a[z>>0]|0;j=a[A>>0]|0;if(((i<<24>>24)+(k<<24>>24)|0)!=(j+3|0)){m=0;l=0;break}if(!((o|0)!=0|w<<24>>24==0))if((n|0)==(v|0)){i=0;break a}else{m=0;l=0;break}l=m?64:128;switch(j|0){case -1:{if(!m){m=0;l=128;break b}if(i<<24>>24){m=12;l=64;break b}if(!(w<<24>>24==1&k<<24>>24>1)){m=8;l=64;break b}m=8;l=(d[b+(f*176|0)+72>>0]|0)>15?l|32768:l;break b}case 0:{if(i<<24>>24){m=4;break b}m=(p|0)==1?32:16;break b}case 1:{if(i<<24>>24){m=2;break b}b=k<<24>>24>w<<24>>24;m=b&1;l=b?l:0;break b}default:{m=1073741824;break b}}}p=a[A>>0]|0;if(p<<24>>24==1){m=(a[z>>0]|0)==0?67108864:33554432;l=2048;break}if(w<<24>>24>1){i=0;break a}i=w<<24>>24==0;if(!((l|o|0)!=0|i))if((n|0)==(v|0)){i=0;break a}else{m=0;l=0;break}if(i){if(p<<24>>24!=-1){m=0;l=0;break}l=(a[z>>0]|0)==1;m=l?16777216:0;l=l?1024:0;break}i=e[b+(f*176|0)+8>>1]|0;j=a[b+(i*176|0)+99>>0]|0;k=b+(i*176|0)+6|0;l=a[k>>0]|0;if(!(j<<24>>24)){m=l<<24>>24==(a[92240]|0);if(m?(a[b+(i*176|0)+93>>0]|0)>(a[b+(i*176|0)+92>>0]|0):0){i=a[z>>0]|0;if(i<<24>>24==1){m=64;l=1;break}if(p<<24>>24==-1){m=131072;l=1;break}m=(i|p)<<24>>24==0?8192:1073741824;l=1;break}if((l<<24>>24==q<<24>>24?1:l<<24>>24==s<<24>>24)|l<<24>>24==t<<24>>24|l<<24>>24==u<<24>>24?(a[b+(i*176|0)+93>>0]|0)==(a[b+(i*176|0)+92>>0]|0):0){if((a[z>>0]|0)==1){m=512;l=4;break}m=p<<24>>24==-1?1048576:1073741824;l=4;break}if(!((a[b+(i*176|0)+93>>0]|0)!=(a[b+(i*176|0)+92>>0]|0)|m^1|r)){if((a[z>>0]|0)==1){m=128;l=2;break}m=p<<24>>24==-1?262144:1073741824;l=2;break}}if(l<<24>>24==(a[92246]|0)){d:do if((a[b+(i*176|0)+92>>0]|0)==2){switch(a[b+(i*176|0)+94>>0]|0){case 0:break;case 1:{if(j<<24>>24!=1)break d;break}default:break d}if((a[z>>0]|0)==1){m=2048;l=16;break b}if(p<<24>>24==-1){m=4194304;l=16;break b}m=(j&255)<2?32768:1073741824;l=16;break b}while(0);if((a[z>>0]|0)==1){m=4096;l=32;break}if(p<<24>>24==-1){m=8388608;l=32;break}m=j<<24>>24==1?65536:1073741824;l=32;break}if((!(l<<24>>24==(a[92240]|0)?1:l<<24>>24==q<<24>>24)?(ho(l&255)|0)==0:0)?(a[b+(i*176|0)+93>>0]|0)>(a[b+(i*176|0)+92>>0]|0):0){do if((a[y>>0]|0)==1){if(!(nj(b,f,0)|0))break;if((a[z>>0]|0)==1){m=1024;l=8;break b}m=(a[A>>0]|0)==-1?2097152:1073741824;l=8;break b}while(0);i=a[z>>0]|0;if(i<<24>>24==1){m=256;l=512;break}if((a[A>>0]|0)==-1){m=524288;l=512;break}m=i<<24>>24==0?16384:1073741824;l=512;break}if((a[A>>0]|0)==-1){l=(ho(d[k>>0]|0)|0)==0;m=l?16777216:0;l=l?256:0}else{m=0;l=0}}while(0);k=(g|0)==0;if(!k){e:do if((m|0)!=0&(m&1073741824|0)==0){i=1;j=0;while(1){if((j|0)==33)break e;if(i&m|0){b=g+(j<<2)|0;c[b>>2]=(c[b>>2]|0)+B}i=i<<1;j=j+1|0}}while(0);i=a[A>>0]|0;if(i<<24>>24){b=_(i<<24>>24,B)|0;A=g+124|0;c[A>>2]=(c[A>>2]|0)+b;A=g+128|0;c[A>>2]=(c[A>>2]|0)+B}}if(h|0)c[h>>2]=m;i=(m&1073741824|0)==0;if(i|k)i=i?l:0;else{i=g+120|0;c[i>>2]=(c[i>>2]|0)+1;i=0}}else i=0;while(0);return i|0}function mj(b){b=b|0;if(!(a[92252]|0)){a[92252]=$n(86667)|0;a[92253]=$n(86669)|0;a[92254]=$n(86690)|0;a[92255]=$n(86740)|0;a[92256]=$n(86793)|0;a[92257]=$n(86692)|0;a[92258]=$n(86743)|0;a[92259]=$n(86796)|0;a[92260]=$n(86694)|0;a[92261]=$n(86746)|0;a[92262]=$n(86799)|0}return (lp(92252,b&255,11)|0)!=0|0}function nj(b,c,d){b=b|0;c=c|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=e[b+(c*176|0)+8+(d<<1)>>1]|0;d=a[92263]|0;if(!(d<<24>>24)){a[92263]=$n(86671)|0;a[92265]=$n(86692)|0;a[92266]=$n(86743)|0;k=($n(86796)|0)&255;a[92264]=k;j=a[92263]|0}else{j=d;k=a[92264]|0}g=a[b+(m*176|0)+92>>0]|0;h=a[92265]|0;i=a[92266]|0;l=0;d=0;while(1){if((l|0)>=(g|0))break;f=e[b+(m*176|0)+8+(l<<1)>>1]|0;if(((((f|0)!=(c|0)?(a[b+(f*176|0)+92>>0]|0)==1:0)?(a[b+(f*176|0)+93>>0]|0)==2:0)?(a[b+(f*176|0)+99>>0]|0)==0:0)?(a[b+(f*176|0)+100>>0]|0)==0:0){f=a[b+(f*176|0)+6>>0]|0;d=(((f<<24>>24==j<<24>>24?1:f<<24>>24==h<<24>>24)|f<<24>>24==i<<24>>24|f<<24>>24==k<<24>>24)&1)+d|0}l=l+1|0}return d|0}function oj(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;A=a+88|0;B=a+80|0;C=a+76|0;g=0;h=c[a+160>>2]|0;f=0;while(1){H=h+-1|0;if((h|0)<=0)break;x=c[a+92+(H<<2)>>2]|0;c[A>>2]=x;w=c[x+16>>2]|0;z=c[x+32>>2]|0;y=0;i=-2;v=c[x+24>>2]|0;h=-2;while(1){if((y|0)>=(w|0))break;r=c[B>>2]|0;s=c[C>>2]|0;t=c[s+(v<<5)+28>>2]|0;u=(e[r+((c[t+((e[x+(y+5<<3)>>1]|0)<<2)>>2]|0)*28|0)+2>>1]|0)^v;do if((v|0)<(d|0)){if(!((i|0)>=(d|0)?(b[s+(i<<5)+20>>1]&16)!=0:0)){if((u|0)<(d|0))break;if(!(b[s+(u<<5)+20>>1]&16))break}p=0;q=0;k=e[s+(v<<5)+22>>1]|0;j=0;i=-1;h=-1;a:while(1){n=i|h;o=(n|0)<0;while(1){l=k+-1|0;if(!((k|0)>0&o)){m=n;l=p;k=q;break a}m=(e[r+((c[t+(l<<2)>>2]|0)*28|0)+2>>1]|0)^v;k=e[s+(m<<5)+20>>1]|0;if(!(k&16))k=l;else break}o=(k&256|0)==0;p=o?p:m;q=o?m:q;k=l;j=j+1|0;i=o?i:l;h=o?l:h}if((j|0)==2&(m|0)>-1?(D=r+((c[t+(h<<2)>>2]|0)*28|0)+16|0,E=c[D>>2]|0,F=r+((c[t+(i<<2)>>2]|0)*28|0)+16|0,G=c[F>>2]|0,(G|0)>(E|0)):0){r=G-E|0;c[D>>2]=G;t=s+(k<<5)|0;c[t>>2]=(c[t>>2]|0)+r;t=s+(k<<5)+8|0;c[t>>2]=(c[t>>2]|0)+r;c[F>>2]=(c[F>>2]|0)-r;t=s+(l<<5)|0;c[t>>2]=(c[t>>2]|0)-r;t=s+(l<<5)+8|0;c[t>>2]=(c[t>>2]|0)-r;f=f+1|0}}while(0);i=v;y=y+1|0;v=u;h=u}g=(h|0)==(z|0)?g:-9997;h=H}return (g|0?g:f)|0}function pj(f,g,h,j,k){f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;F=i;i=i+192|0;E=F+184|0;u=F;v=F+180|0;w=F+176|0;do if(f){if((f|0)>0){E=g+((j&65535)*176|0)+94|0;a[E>>0]=(d[E>>0]|0)+f;E=k+46|0;b[E>>1]=(b[E>>1]|0)+-1<<16>>16;break}B=k+44|0;m=b[B>>1]|0;t=j&65535;C=g+(t*176|0)+95|0;x=a[C>>0]|0;y=a[g+(t*176|0)+96>>0]|0;z=a[g+(t*176|0)+97>>0]|0;D=g+(t*176|0)+94|0;A=a[D>>0]|0;q=g+(h*176|0)|0;a[E>>0]=a[C>>0]|0;a[E+1>>0]=a[C+1>>0]|0;a[E+2>>0]=a[C+2>>0]|0;r=g+(t*176|0)+152|0;s=g+(t*176|0)+92|0;h=0;a:while(1){l=h;while(1){if((l|0)>=(m|0)){s=m;break a}h=q+(l*176|0)|0;if((b[h+8>>1]|0)==j<<16>>16)break;l=l+1|0}o=b[h+48>>1]|0;p=m+-1|0;if((p|0)>(l|0)){ir(u|0,h|0,176)|0;jr(h|0,h+176|0,(p-l|0)*176|0)|0;ir(q+(p*176|0)|0,u|0,176)|0}if(!(a[r>>0]|0)){h=l;m=p;continue}else n=0;while(1){if((n|0)>=3){h=l;m=p;continue a}m=g+(t*176|0)+152+n|0;if(!(a[m>>0]|0)){h=l;m=p;continue a}h=g+(t*176|0)+156+(n<<1)|0;do if((b[h>>1]|0)==o<<16>>16){if((a[s>>0]|0)>1){G=(a[g+(t*176|0)+146+n>>0]|0)==0;a[g+(t*176|0)+149+n>>0]=G&1;b[h>>1]=b[g+((e[g+(t*176|0)+8+((G&1)<<1)>>1]|0)*176|0)+48>>1]|0;h=a[m>>0]|0;if((h+-1&255)>=2)break;a[m>>0]=3-(h&255);break}a[g+(t*176|0)+149+n>>0]=-99;b[h>>1]=0;if(((a[m>>0]|0)+-1&255)<2?(hi(g,t,a[g+(t*176|0)+146+n>>0]|0,u,v,w)|0)>0:0){a[(c[w>>2]|0)+(g+((c[u>>2]|0)*176|0)+152)>>0]=4;a[m>>0]=4}}while(0);n=n+1|0}}p=y+(x<<24>>24)+z|0;q=k+46|0;r=-1;h=0-f|0;l=A<<24>>24;while(1){if(!((h|0)>0&(r|0)<3))break;b:do if((r|0)<0)while(1){if(!((p|0)<(l|0)&(h|0)>0))break b;b[q>>1]=(b[q>>1]|0)+1<<16>>16;h=h+-1|0;l=l+-1|0}else{n=E+r|0;o=k+48+(r<<1)|0;m=a[n>>0]|0;while(1){if(!((h|0)>0&((l|0)!=0&m<<24>>24!=0)))break b;G=m+-1<<24>>24;a[n>>0]=G;b[o>>1]=(b[o>>1]|0)+1<<16>>16;b[q>>1]=(b[q>>1]|0)+1<<16>>16;m=G;h=h+-1|0;l=l+-1|0}}while(0);r=r+1|0}f=h+f|0;if((f|0)<0){a[D>>0]=l;a[C>>0]=a[E>>0]|0;a[C+1>>0]=a[E+1>>0]|0;a[C+2>>0]=a[E+2>>0]|0;b[B>>1]=s}}else f=0;while(0);i=F;return f|0}function qj(b,f,g,h,j,k,l){b=b|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=i;i=i+16|0;E=F;z=b+88|0;A=b+80|0;D=b+76|0;x=(l|0)==0;m=0;n=c[b+160>>2]|0;l=0;while(1){y=n+-1|0;if((n|0)<=0)break;s=c[b+92+(y<<2)>>2]|0;c[z>>2]=s;t=c[s+16>>2]|0;w=c[s+32>>2]|0;u=c[s+8>>2]|0;v=0;o=-2;s=c[s+24>>2]|0;n=-2;while(1){if((v|0)>=(t|0))break;q=c[D>>2]|0;r=e[(c[A>>2]|0)+((c[(c[q+(s<<5)+28>>2]|0)+(e[(c[z>>2]|0)+(v+5<<3)>>1]<<2)>>2]|0)*28|0)+2>>1]^s;do if((s|0)<(g|0)?(B=(o|0)>=(g|0),C=(r|0)<(g|0),!(C&(B^1))):0){do if(B){n=e[q+(o<<5)+20>>1]|0;if(!(n&4)){p=(n&16|0)==0?0:u;o=0;break}else{p=0;o=0-u|0;break}}else{p=0;o=0}while(0);do if(!C){n=e[q+(r<<5)+20>>1]|0;if(!(n&4)){p=p-((n&16|0)==0?0:u)|0;break}else{o=o+u|0;break}}while(0);n=(o|0)==0;if(p|o){if(!x){n=j+s|0;if(a[n>>0]|0)break;lj(f,s,h,E,2)|0;a[n>>0]=(a[n>>0]|0)+1<<24>>24;l=l+1|0;break}q=f+(s*176|0)+99|0;a[q>>0]=(d[q>>0]|0)+p;if(!n)pj(o,f,g,s&65535,k)|0;l=l+1|0}}while(0);o=s;u=0-u|0;v=v+1|0;s=r;n=r}m=(n|0)==(w|0)?m:-9997;n=y}i=F;return (m|0?m:l)|0}function rj(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;A=i&-33;E=f+88|0;F=(i&32|0)==0;G=(i&3|0)==3;H=(i&21|0)==21;I=H&(G^1);B=f+76|0;C=f+80|0;D=(i&4|0)!=0;y=(i&61|0)==61;j=0;k=c[f+160>>2]|0;i=0;while(1){z=k+-1|0;if((k|0)<=0)break;x=c[f+92+(z<<2)>>2]|0;c[E>>2]=x;n=c[x+24>>2]|0;w=c[x+16>>2]|0;m=c[x+8>>2]|0;x=c[x+32>>2]|0;do if(F)l=0;else{v=c[B>>2]|0;if((c[v+(n<<5)+4>>2]|0)<=(c[v+(n<<5)+12>>2]|0)?(c[v+(x<<5)+4>>2]|0)<=(c[v+(x<<5)+12>>2]|0):0){l=0;break}l=32;i=i|2}while(0);if(I&(n|0)<(h|0)){k=jj(f,g,n)|0;if((k|0)<0)j=-9997;else i=(k|0)>0|i}a[(c[B>>2]|0)+(n<<5)+16>>0]=0;t=l;v=0;s=-2;l=-2;while(1){if((v|0)>=(w|0))break;q=c[(c[E>>2]|0)+(v+5<<3)>>2]|0;p=q&65535;q=q>>>16;k=c[C>>2]|0;l=c[(c[(c[B>>2]|0)+(n<<5)+28>>2]|0)+(p<<2)>>2]|0;r=k+(l*28|0)|0;u=e[k+(l*28|0)+2>>1]^n;o=(n|0)<(h|0);do if(D&o){if((s|0)>=(h|0)&(u|0)<(h|0)){s=g+(n*176|0)+93|0;a[s>>0]=(d[s>>0]|0)+m;break}if((s|0)<(h|0)?(s|0)!=-2&(u|0)>=(h|0):0){s=g+(n*176|0)+93|0;a[s>>0]=(d[s>>0]|0)-m}}while(0);s=k+(l*28|0)+24|0;if(!(a[s>>0]|0))l=t;else{if((o?((u|0)<(h|0)?(p|0)<(a[g+(n*176|0)+92>>0]|0):0):0)?(q|0)<(a[g+(u*176|0)+92>>0]|0):0){if(y)l=(b[g+(n*176|0)+164>>1]|0)==(b[g+(u*176|0)+164>>1]|0)?0:40;else l=t;k=Qi(r,g+(n*176|0)+72+p|0,g+(u*176|0)+72+q|0,m,l|A)|0;if((k|0)<0)j=-9997;else i=(k|0)>0|i}else l=t;a[s>>0]=0}s=n;t=l;m=0-m|0;v=v+1|0;n=u;l=u}k=(l|0)!=(x|0);if(!(G|k)){if(H&(x|0)<(h|0)){k=jj(f,g,x)|0;if((k|0)<0)j=-9997;else i=(k|0)>0|i}}else j=k?-9997:j;a[(c[B>>2]|0)+(l<<5)+16>>0]=0;k=z}return (j|0?j:i)|0}function sj(d,f,g,h,j){d=d|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=i;i=i+384|0;C=G+254|0;D=G;y=d+88|0;E=g+4|0;z=d+80|0;A=d+76|0;x=g+20|0;g=0;l=0;k=c[d+160>>2]|0;a:while(1)b:while(1){w=k+-1|0;if((k|0)<=0){F=49;break a}u=c[d+92+(w<<2)>>2]|0;c[y>>2]=u;q=c[u+24>>2]|0;t=c[u+16>>2]|0;r=c[u+8>>2]|0;v=c[u+32>>2]|0;c[E>>2]=0;h=(h|0)==(q|0)|(h|0)==(v|0)?h:-1;j=(j|0)==(q|0)|(j|0)==(v|0)?j:-1;s=0;k=-2;while(1){if((s|0)>=(t|0)){p=l;break}m=c[A>>2]|0;p=e[(c[z>>2]|0)+((c[(c[m+(q<<5)+28>>2]|0)+(e[u+(s+5<<3)>>1]<<2)>>2]|0)*28|0)+2>>1]^q;o=(q|0)<(f|0);do if(!o){k=e[m+(q<<5)+20>>1]|0;if(!(k&4)){if(!((p|0)<(f|0)&((p|0)>-1&(k&64|0)!=0))){F=13;break}}else if(!((p|0)>-1&(p|0)<(f|0))){F=13;break}if(b[m+(p<<5)+20>>1]&1){if((l|0)<127){a[C+l>>0]=r;b[D+(l<<1)>>1]=p;l=l+1|0}}else F=13}else F=13;while(0);c:do if((F|0)==13){F=0;n=(p|0)<(f|0);do if(!n){k=e[m+(p<<5)+20>>1]|0;if(!(k&4)){if(!(o&((q|0)>-1&(k&64|0)!=0)))break}else if(!((q|0)>-1&o))break;if(b[m+(q<<5)+20>>1]&1){if((l|0)>=127)break c;a[C+l>>0]=r;b[D+(l<<1)>>1]=q;l=l+1|0;break c}}while(0);k=(q|0)>-1;if(!(k&(q|0)==(h|0))?(B=(p|0)>-1,!(n&((q|0)==(j|0)&B))):0){if(B&(p|0)==(h|0)){if((l|0)>=127)break}else if(!(o&(l|0)<127&(k&(p|0)==(j|0))))break;a[C+l>>0]=0-r;b[D+(l<<1)>>1]=p;l=l+1|0;break}if((l|0)<127){a[C+l>>0]=0-r;b[D+(l<<1)>>1]=q;l=l+1|0}}while(0);r=0-r|0;s=s+1|0;q=p;k=p}if((k|0)==(v|0)){o=1;m=0;n=-1;k=0}else{g=-9997;l=p;k=w;continue a}while(1){if((o|0)>=(p|0))break;l=a[C+m>>0]|0;if(l<<24>>24>0)if((a[C+o>>0]|0)>0)F=35;else l=n;else if(l<<24>>24<0?(a[C+o>>0]|0)<0:0)F=35;else l=n;if((F|0)==35){F=0;if((m|0)==(n|0)){g=0;break a}v=c[x>>2]|0;l=o;k=((a[v+(e[D+(m<<1)>>1]|0)>>0]&1^1)&255)+k+((a[v+(e[D+(o<<1)>>1]|0)>>0]&1^1)&255)|0}m=o;o=o+1|0;n=l}if((k|0)==4){n=1;k=0}else{g=0;break a}while(1){if((n|0)>=(p|0)){l=p;k=w;continue b}k=a[C+k>>0]|0;if(k<<24>>24>0){if((a[C+n>>0]|0)>0)F=44}else if(k<<24>>24<0?(a[C+n>>0]|0)<0:0)F=44;if((F|0)==44){F=0;k=c[x>>2]|0;l=k+(e[D+(n+-1<<1)>>1]|0)|0;m=a[l>>0]|0;if(!(m&1)){a[l>>0]=m|1;c[E>>2]=(c[E>>2]|0)+1;k=c[x>>2]|0}k=k+(e[D+(n<<1)>>1]|0)|0;l=a[k>>0]|0;if(!(l&1)){a[k>>0]=l|1;c[E>>2]=(c[E>>2]|0)+1}}k=n;n=n+1|0}}if((F|0)==49)if(!g)g=c[E>>2]|0;i=G;return g|0}function tj(b,d){b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;n=b+88|0;o=(d&3|0)==3;p=b+76|0;q=(d&21|0)==21;r=b+80|0;f=0;g=c[b+160>>2]|0;a:while(1){h=g;while(1){g=h+-1|0;if((h|0)<=0)break a;m=c[b+92+(g<<2)>>2]|0;c[n>>2]=m;j=c[m+24>>2]|0;l=c[m+16>>2]|0;h=c[m+8>>2]|0;m=c[m+32>>2]|0;if(!o)if(q){i=c[p>>2]|0;c[i+(j<<5)+12>>2]=c[i+(j<<5)+8>>2];i=h;k=0;h=-2}else{i=h;k=0;h=-2}else{i=(c[p>>2]|0)+(j<<5)+8|0;c[i>>2]=(c[i>>2]|0)-h;i=h;k=0;h=-2}while(1){if((k|0)>=(l|0))break;t=c[r>>2]|0;s=c[(c[(c[p>>2]|0)+(j<<5)+28>>2]|0)+((e[(c[n>>2]|0)+(k+5<<3)>>1]|0)<<2)>>2]|0;h=(e[t+(s*28|0)+2>>1]|0)^j;Pi(t+(s*28|0)|0,i,d)|0;a[t+(s*28|0)+24>>0]=0;i=0-i|0;k=k+1|0;j=h}if((h|0)!=(m|0)){f=-9997;continue a}if(o){h=(c[p>>2]|0)+(m<<5)+8|0;c[h>>2]=(c[h>>2]|0)+i;h=g;continue}if(!q){h=g;continue}h=c[p>>2]|0;c[h+(m<<5)+12>>2]=c[h+(m<<5)+8>>2];h=g}}return f|0}function uj(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;e=a&15;a=a&112;d=(a|0)!=0;a:do if(!c){if(!d)switch(e|0){case 4:case 9:break;default:{f=15;break a}}switch(b|0){case 0:if((a|16|0)==48|(a|64|0)==80){a=0;break a}else{f=15;break a}case 1:{if((a|64|0)==80){a=0;break a}switch(a|0){case 32:case 64:{a=0;break a}default:{f=15;break a}}}case 2:if((a|0)==64|(a|16|0)==48){a=0;break a}else{f=15;break a}default:{f=15;break a}}}else{if(!d)switch(e|0){case 4:case 9:break;default:{f=15;break a}}switch(b|0){case 0:if((a|0)==80|(a|16|0)==48){a=0;break a}else{f=15;break a}case 1:if((a|0)==32|(a|16|0)==80){a=0;break a}else{f=15;break a}case 2:if((a|0)==64|(a|16|0)==48){a=0;break a}else{f=15;break a}default:{f=15;break a}}}while(0);if((f|0)==15)a=1;return a|0}function vj(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;k=a[b+92>>0]|0;l=0;i=0;h=0;g=0;while(1){if((l|0)>=(k|0))break;j=d[b+72+l>>0]&15;switch(j|0){case 3:case 2:case 1:case 0:{h=j+h|0;break}case 4:{i=i+1|0;break}default:g=g+1|0}l=l+1|0}switch(i|0){case 0:break;case 1:{h=h+1|0;g=g+1|0;break}default:h=h+1+i|0}if(e|0)c[e>>2]=i;if(f|0)c[f>>2]=g;return h|0}function wj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=i;i=i+16|0;o=p+4|0;n=p;j=0;h=0;while(1){if((j|0)>=(f|0)){k=3;break}g=vj(e+(j*176|0)|0,o,n)|0;g=(a[e+(j*176|0)+93>>0]|0)-g|0;m=((c[o>>2]|0)>3&1)+(c[n>>2]|0)|0;c[n>>2]=m;if((g|0)>0&(m|0)==0){if(!h){h=Dq(f,4)|0;if(!h){j=-9998;g=0;k=20;break}}c[h+(j<<2)>>2]=((a[e+(j*176|0)+100>>0]|0)==2&1)+g}j=j+1|0}a:do if((k|0)==3){l=b+160|0;m=b+156|0;g=0;do{j=Ri(b,d,1)|0;if((j+9999|0)>>>0<20){k=20;break a}g=j+g|0;k=c[l>>2]|0;if((j|0)>0){j=rj(b,e,f,21)|0;q=tj(b,21)|0;j=(q+9999|0)>>>0<20?q:(j+9999|0)>>>0<20?j:0}else j=0;xj(b)|0;if(!k)break}while((j|0)==0?(k|0)==(c[m>>2]|0):0);if((h|0)!=0&(j|0)==0){l=0;while(1){if((l|0)>=(f|0)){j=0;k=20;break a}j=h+(l<<2)|0;if(c[j>>2]|0){k=vj(e+(l*176|0)|0,o,n)|0;if(c[n>>2]|0){j=-9986;k=21;break a}if((k-(a[e+(l*176|0)+93>>0]|0)+(c[j>>2]|0)+(((a[e+(l*176|0)+100>>0]|0)==2)<<31>>31)|0)!=1){j=-9986;k=21;break a}}l=l+1|0}}else k=20}while(0);if((k|0)==20)if(!h)h=j;else k=21;if((k|0)==21){Cq(h);h=j}i=p;return (h|0?h:g)|0}function xj(a){a=a|0;var b=0,d=0,e=0;d=a+156|0;b=0;while(1){if(!((b|0)<16?(b|0)<(c[d>>2]|0):0))break;e=c[a+92+(b<<2)>>2]|0;if(e|0){c[e+8>>2]=0;c[e+16>>2]=0;c[e+24>>2]=-2;c[e+32>>2]=-2}b=b+1|0}c[a+88>>2]=0;c[a+160>>2]=0;return b|0}function yj(b,f,g,h,i,j,k){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;u=b+56|0;v=b+60|0;y=(c[u>>2]|0)>(c[v>>2]|0);z=y&1;A=b+76|0;B=b+80|0;C=(k|0)==0;D=j&3;m=0;E=0;l=0;while(1){if(!((m|0)==0&(E|0)<(h|0)))break;s=g+(E*176|0)+92|0;m=0;t=0;while(1){if(!((m|0)==0&(t|0)<(a[s>>0]|0)))break;a:do if((e[g+(E*176|0)+8+(t<<1)>>1]|0)>=(E|0)?(w=c[(c[(c[A>>2]|0)+(E<<5)+28>>2]|0)+(t<<2)>>2]|0,x=c[B>>2]|0,(a[x+(w*28|0)+25>>0]|0)==0):0){if(!C?(d[g+(E*176|0)+72+t>>0]&15|0)!=(k|0):0){m=0;break}m=zj(b,w)|0;q=c[x+(w*28|0)+8>>2]&16383;q=q>>>0>2?2:q;r=c[x+(w*28|0)+16>>2]&16383;if((m|0)==(q|0)){if(!(y&(m|0)!=0)){m=0;break}n=(c[v>>2]|0)-(c[u>>2]|0)+m|0;n=(n|0)<0?0:n}else n=m;p=g+(E*176|0)+72+t|0;m=0;o=n;while(1){if(!((o|0)<=(q|0)&(m|0)==0))break a;b:do if((o|0)!=(r|0)?(uj(d[p>>0]|0,o,z)|0)!=0:0){m=Aj(b,w,o,i)|0;do if((m+9999|0)>>>0<20){if((m|0)==-9990){Bj(b,i)|0;m=0;break b}}else{if((m|0)<=0){if(m|0){m=0;break}n=Cj(b,i,o,g,h,j)|0;if((n+9999|0)>>>0<20){m=n;break}m=0;l=(n&1)+l|0;break}n=Ri(b,f,j)|0;if((n+9999|0)>>>0>=20)if((n|0)>0){do if((n<<1|0)==(m|0)){m=Cj(b,i,o,g,h,j)|0;if((m+9999|0)>>>0<20)break;l=(m&1)+l|0;n=rj(b,g,h,j)|0;if(!((n|0)>-1&(n+9999|0)>>>0>19)){m=n;break}m=0;l=(n&1)+l|0}else m=0;while(0);n=tj(b,D)|0;m=(n+9999|0)>>>0<20?n:m}else m=0;else m=n;xj(b)|0}while(0);Bj(b,i)|0}else m=0;while(0);o=o+1|0}}else m=0;while(0);t=t+1|0}E=E+1|0}return (m|0?m:l)|0}function zj(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;m=c[a+80>>2]|0;l=b[m+(d*28|0)>>1]|0;f=l&65535;l=(b[m+(d*28|0)+2>>1]^l)&65535;n=c[m+(d*28|0)+16>>2]&16383;if(!n)a=0;else{k=c[a+76>>2]|0;i=k+(f<<5)+28|0;g=e[k+(f<<5)+22>>1]|0;h=0;a=0;while(1){if((h|0)==(g|0)){j=a;break}f=c[(c[i>>2]|0)+(h<<2)>>2]|0;if((f|0)!=(d|0))a=(c[m+(f*28|0)+8>>2]&16383)+a-(c[m+(f*28|0)+16>>2]&16383)|0;h=h+1|0}i=k+(l<<5)+28|0;g=e[k+(l<<5)+22>>1]|0;h=0;a=0;while(1){if((h|0)==(g|0))break;f=c[(c[i>>2]|0)+(h<<2)>>2]|0;if((f|0)!=(d|0))a=(c[m+(f*28|0)+8>>2]&16383)+a-(c[m+(f*28|0)+16>>2]&16383)|0;h=h+1|0}a=(j|0)<(a|0)?j:a;a=n-((a|0)<(n|0)?a:n)|0}return a|0}function Aj(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;L=c[f+80>>2]|0;j=L+(g*28|0)|0;y=L+(g*28|0)+16|0;w=c[y>>2]|0;z=w&16383;c[i>>2]=-2;if((z|0)<(h|0)){u=b[j>>1]|0;q=u&65535;F=b[L+(g*28|0)+2>>1]^u;A=F&65535;E=c[f+76>>2]|0;s=E+(q<<5)|0;n=c[s>>2]|0;j=n&16383;if((j|0)>=(h|0)?(J=E+(A<<5)|0,v=c[J>>2]|0,(v&16383|0)>=(h|0)):0){t=E+(q<<5)+8|0;k=c[t>>2]|0;l=k&16383;if(l>>>0>=z>>>0?(K=E+(A<<5)+8|0,x=c[K>>2]|0,(x&16383)>>>0>=z>>>0):0){c[i>>2]=g;c[i+4>>2]=w;m=L+(g*28|0)+8|0;p=c[m>>2]|0;c[i+8>>2]=p;c[i+12>>2]=q;c[i+20>>2]=k;c[i+16>>2]=n;c[i+24>>2]=A;c[i+32>>2]=x;c[i+28>>2]=v;c[i+36>>2]=-2;f=L+(g*28|0)+24|0;a[f>>0]=d[f>>0]|64;f=h-z|0;if(!z)o=x;else{c[s>>2]=j-z|n&-16384;o=c[J>>2]|0;c[J>>2]=(o&16383)-z|o&-16384;c[t>>2]=l-z|k&-16384;o=c[K>>2]|0;o=(o&16383)-z|o&-16384;c[K>>2]=o;c[y>>2]=w&-16384;n=c[s>>2]|0;k=c[t>>2]|0}c[m>>2]=p&-16384;l=n;m=f;j=0;k=(n&16383)-(k&16383)|0;while(1){if(!((m|0)!=0&(k|0)!=0))break;z=(l&16383)+-1|l&-16384;c[s>>2]=z;l=z;m=m+-1|0;j=j+-1|0;k=k+-1|0}k=c[J>>2]|0;l=k;k=(k&16383)-(o&16383)|0;while(1){if(!((f|0)!=0&(k|0)!=0))break;z=(l&16383)+-1|l&-16384;c[J>>2]=z;l=z;f=f+-1|0;j=j+-1|0;k=k+-1|0}r=E+(q<<5)+22|0;q=E+(q<<5)+28|0;p=0;k=1;while(1){if(!m){r=0;break}if((p|0)>=(e[r>>1]|0)){r=m;break}l=c[(c[q>>2]|0)+(p<<2)>>2]|0;a:do if(((l|0)!=(g|0)?(a[L+(l*28|0)+25>>0]|0)==0:0)?(B=L+(l*28|0)+16|0,C=c[B>>2]|0,D=C&16383,(D|0)!=0):0){n=(b[L+(l*28|0)+2>>1]^u)&65535;c[i+(k*36|0)>>2]=l;c[i+(k*36|0)+4>>2]=C;c[i+(k*36|0)+8>>2]=c[L+(l*28|0)+8>>2];c[i+(k*36|0)+12>>2]=n;o=E+(n<<5)+8|0;c[i+(k*36|0)+20>>2]=c[o>>2];c[i+(k*36|0)+16>>2]=c[E+(n<<5)>>2];c[i+(k*36|0)+24>>2]=-2;c[i+(k*36|0)+32>>2]=0;c[i+(k*36|0)+28>>2]=0;k=k+1|0;c[i+(k*36|0)>>2]=-2;n=L+(l*28|0)+24|0;a[n>>0]=d[n>>0]|64;n=C;l=D;while(1){if(!((m|0)!=0&(l|0)!=0))break a;z=(n&16383)+-1|n&-16384;c[B>>2]=z;y=c[o>>2]|0;c[o>>2]=(y&16383)+-1|y&-16384;y=c[s>>2]|0;c[s>>2]=(y&16383)+-1|y&-16384;y=c[t>>2]|0;c[t>>2]=(y&16383)+-1|y&-16384;n=z;m=m+-1|0;l=l+-1|0;j=j+1|0}}while(0);p=p+1|0}q=E+(A<<5)+22|0;p=E+(A<<5)+28|0;o=0;l=k;while(1){if(!f){f=0;break}if((o|0)>=(e[q>>1]|0))break;k=c[(c[p>>2]|0)+(o<<2)>>2]|0;b:do if(((k|0)!=(g|0)?(a[L+(k*28|0)+25>>0]|0)==0:0)?(G=L+(k*28|0)+16|0,H=c[G>>2]|0,I=H&16383,(I|0)!=0):0){n=(b[L+(k*28|0)+2>>1]^F)&65535;c[i+(l*36|0)>>2]=k;c[i+(l*36|0)+4>>2]=H;c[i+(l*36|0)+8>>2]=c[L+(k*28|0)+8>>2];c[i+(l*36|0)+12>>2]=n;m=E+(n<<5)+8|0;c[i+(l*36|0)+20>>2]=c[m>>2];c[i+(l*36|0)+16>>2]=c[E+(n<<5)>>2];c[i+(l*36|0)+24>>2]=-2;c[i+(l*36|0)+32>>2]=0;c[i+(l*36|0)+28>>2]=0;n=l+1|0;c[i+(n*36|0)>>2]=-2;l=L+(k*28|0)+24|0;a[l>>0]=d[l>>0]|64;l=H;k=I;while(1){if(!((f|0)!=0&(k|0)!=0)){k=n;break b}D=(l&16383)+-1|l&-16384;c[G>>2]=D;C=c[m>>2]|0;c[m>>2]=(C&16383)+-1|C&-16384;C=c[J>>2]|0;c[J>>2]=(C&16383)+-1|C&-16384;C=c[K>>2]|0;c[K>>2]=(C&16383)+-1|C&-16384;l=D;f=f+-1|0;k=k+-1|0;j=j+1|0}}else k=l;while(0);o=o+1|0;l=k}j=f|r|0?-9990:j}else j=-9989}else j=-9990}else{n=c[f+76>>2]|0;f=b[j>>1]|0;j=f&65535;f=(b[L+(g*28|0)+2>>1]^f)&65535;k=n+(j<<5)+8|0;l=c[k>>2]|0;m=l&16383;if(((m>>>0>=z>>>0?(o=n+(f<<5)+8|0,p=c[o>>2]|0,(p&16383)>>>0>=z>>>0):0)?(q=n+(j<<5)|0,r=c[q>>2]|0,s=r&16383,(s|0)>=(h|0)):0)?(t=n+(f<<5)|0,u=c[t>>2]|0,(u&16383|0)>=(h|0)):0){c[i>>2]=g;I=c[y>>2]|0;c[i+4>>2]=I;K=L+(g*28|0)+8|0;J=c[K>>2]|0;c[i+8>>2]=J;c[i+12>>2]=j;c[i+20>>2]=l;c[i+16>>2]=r;c[i+24>>2]=f;c[i+32>>2]=p;c[i+28>>2]=u;c[i+36>>2]=-2;j=L+(g*28|0)+24|0;a[j>>0]=d[j>>0]|64;c[k>>2]=m-z|l&-16384;j=c[o>>2]|0;c[o>>2]=(j&16383)-z|j&-16384;c[q>>2]=s-h|r&-16384;j=c[t>>2]|0;c[t>>2]=(j&16383)-h|j&-16384;c[y>>2]=I&-16384;c[K>>2]=J&-16384;j=z-h<<1}else j=-9989}return j|0}function Bj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=0;while(1)if((c[d+(e*36|0)>>2]|0)==-2)break;else e=e+1|0;g=b+80|0;f=b+76|0;while(1){b=e+-1|0;if((e|0)<=0)break;e=c[d+(b*36|0)>>2]|0;h=c[g>>2]|0;c[h+(e*28|0)+16>>2]=c[d+(b*36|0)+4>>2];c[h+(e*28|0)+8>>2]=c[d+(b*36|0)+8>>2];a[h+(e*28|0)+24>>0]=0;e=c[d+(b*36|0)+12>>2]|0;if((e|0)!=-2){h=c[f>>2]|0;c[h+(e<<5)+8>>2]=c[d+(b*36|0)+20>>2];c[h+(e<<5)>>2]=c[d+(b*36|0)+16>>2];a[h+(e<<5)+16>>0]=0}e=c[d+(b*36|0)+24>>2]|0;if((e|0)==-2){e=b;continue}h=c[f>>2]|0;c[h+(e<<5)+8>>2]=c[d+(b*36|0)+32>>2];c[h+(e<<5)>>2]=c[d+(b*36|0)+28>>2];a[h+(e<<5)+16>>0]=0;e=b}return 0}function Cj(d,f,g,h,i,j){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;if(j>>>0<4)j=0;else{k=j&-36;a:do if(!(j&32)){j=0;while(1)if((c[f+(j*36|0)>>2]|0)==-2)break;else j=j+1|0;r=d+80|0;v=k;d=j;j=0}else{r=d+80|0;s=(g|0)>-1;q=d+76|0;d=0;j=0;while(1){o=c[f+(d*36|0)>>2]|0;if((o|0)==-2){v=k;break a}l=c[r>>2]|0;do if(a[l+(o*28|0)+24>>0]|0){if(s&(d|0)==0)p=g;else p=c[l+(o*28|0)+16>>2]|0;n=b[l+(o*28|0)>>1]|0;m=n&65535;n=(b[l+(o*28|0)+2>>1]^n)&65535;if((m|0)<(i|0)&(n|0)<(i|0)?(p|0)!=(c[l+(o*28|0)+20>>2]|0):0){v=c[q>>2]|0;if(!((c[v+(m<<5)+4>>2]|0)==(c[v+(m<<5)+12>>2]|0)^(c[v+(m<<5)>>2]|0)==(c[v+(m<<5)+8>>2]|0))?!((c[v+(n<<5)+4>>2]|0)==(c[v+(n<<5)+12>>2]|0)^(c[v+(n<<5)>>2]|0)==(c[v+(n<<5)+8>>2]|0)):0)break;k=k|32;j=j|32}}while(0);d=d+1|0}}while(0);t=(g|0)>-1;u=(v|0)!=0;k=0;b:while(1){while(1){n=d+-1|0;if((d|0)<=0)break b;d=c[f+(n*36|0)>>2]|0;l=c[r>>2]|0;m=l+(d*28|0)+24|0;if(!(a[m>>0]|0))d=n;else{s=d;d=n;break}}n=l+(s*28|0)|0;if(t&(d|0)==0)q=g;else q=c[l+(s*28|0)+16>>2]|0;p=b[n>>1]|0;o=p&65535;p=(b[l+(s*28|0)+2>>1]^p)&65535;if((o|0)<(i|0)&(u&(p|0)<(i|0))?(w=c[l+(s*28|0)+20>>2]|0,(q|0)!=(w|0)):0){l=Qi(n,(e[l+(s*28|0)+4>>1]|0)+(h+(o*176|0)+72)|0,(e[l+(s*28|0)+6>>1]|0)+(h+(p*176|0)+72)|0,q-w|0,v)|0;if((l+9999|0)>>>0<20)k=l;else j=(l|0)>0|j}a[m>>0]=0}j=k|0?k:j}return j|0}function Dj(b,f,g,h,i,j){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;j=b+178|0;a[j>>0]=d[j>>0]|h;j=a[92267]|0;if(!(j<<24>>24)){a[92269]=$n(86671)|0;a[92267]=$n(86667)|0;s=($n(86669)|0)&255;a[92268]=s;j=a[92267]|0}else s=a[92268]|0;p=a[92269]|0;q=b+76|0;r=b+80|0;t=0;i=0;while(1){if((t|0)>=(g|0)){j=i;break}k=a[f+(t*176|0)+6>>0]|0;if((k<<24>>24==j<<24>>24?(a[f+(t*176|0)+92>>0]|0)==3:0)?(a[f+(t*176|0)+93>>0]|0)==4:0){n=0;m=-1;l=-1;o=0;k=0;while(1){if((o|0)>=3)break;u=e[f+(t*176|0)+8+(o<<1)>>1]|0;if((a[f+(u*176|0)+6>>0]|0)==p<<24>>24?(a[f+(u*176|0)+92>>0]|0)==1:0){n=(d[f+(t*176|0)+72+o>>0]&15)+n|0;k=k+1|0}else{m=o;l=d[f+(t*176|0)+72+o>>0]&15}o=o+1|0}if((k|0)==2&(n|0)==3&(l|0)==1){u=(c[r>>2]|0)+((c[(c[(c[q>>2]|0)+(t<<5)+28>>2]|0)+(m<<2)>>2]|0)*28|0)+25|0;a[u>>0]=d[u>>0]|h;i=i+1|0}}else if((k<<24>>24==s<<24>>24?(a[f+(t*176|0)+92>>0]|0)==3:0)?(a[f+(t*176|0)+93>>0]&-2)<<24>>24==4:0){n=0;m=-1;l=-1;o=0;k=0;while(1){if((o|0)>=3)break;u=e[f+(t*176|0)+8+(o<<1)>>1]|0;if((a[f+(u*176|0)+6>>0]|0)==p<<24>>24?(a[f+(u*176|0)+92>>0]|0)==1:0){n=(d[f+(t*176|0)+72+o>>0]&15)+n|0;k=k+1|0}else{m=o;l=d[f+(t*176|0)+72+o>>0]&15}o=o+1|0}if((k|0)==2?(n+-3|0)>>>0<2&(l|0)==1:0){u=(c[r>>2]|0)+((c[(c[(c[q>>2]|0)+(t<<5)+28>>2]|0)+(m<<2)>>2]|0)*28|0)+25|0;a[u>>0]=d[u>>0]|h;i=i+1|0}}t=t+1|0}return (Ej(b,f,g,h<<24>>24)|0)+j|0}function Ej(f,g,h,j){f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0;ja=i;i=i+64|0;m=ja+44|0;ga=ja+32|0;ha=ja+20|0;fa=ja;J=j<<24>>24;I=f+178|0;a[I>>0]=d[I>>0]|J;if(!(c[22873]|0)){l=13090;j=0;while(1){k=op(l,59)|0;if(!k)break;I=k-l|0;ir(m|0,l|0,I|0)|0;a[m+I>>0]=0;a[92270+j>>0]=$n(m)|0;l=k+1|0;j=j+1|0}a[92270+j>>0]=0;a[92270+(j+1)>>0]=0;c[22873]=j}I=f+76|0;B=f+80|0;C=ga+4|0;D=ha+4|0;E=ga+8|0;F=ha+8|0;G=g;H=0;v=0;y=0;z=0;A=0;w=0;x=0;j=0;while(1){if((H|0)>=(h|0))break;k=G+99|0;a:do if(!(a[k>>0]|0)){l=G+100|0;if(((((a[l>>0]|0)==0?(r=a[G+93>>0]|0,V=G+94|0,s=b[V>>1]|0,W=G+96|0,t=a[W>>0]|0,X=G+97|0,u=a[X>>0]|0,Y=G+6|0,(((s&65535)<<24>>24)+r+(((s&65535)>>>8&65535)<<24>>24)+t+u-(ao(d[Y>>0]|0,0,0)|0)|0)>1):0)?(qo(g,H)|0)==0:0)?(r=vo(g,H)|0,s=b[V>>1]|0,t=a[W>>0]|0,u=a[X>>0]|0,(((s&65535)<<24>>24)+r+(((s&65535)>>>8&65535)<<24>>24)+t+u-(ao(d[Y>>0]|0,0,0)|0)|0)==2):0)?lp(92270,d[g+(H*176|0)+6>>0]|0,4)|0:0){if((to(g,H)|0)==2){m=wo(g,H)|0;if((m|0)<0){l=v;k=y;q=z;o=A;m=w;f=x;break}k=e[G+8+(m<<1)>>1]|0;l=xo(g,H,k)|0;if((l|0)<0){k=y;q=z;o=A;m=w;f=x;break}n=e[G+8+(l<<1)>>1]|0;p=c[(c[I>>2]|0)+(H<<5)+28>>2]|0;f=c[B>>2]|0;x=f+((c[p+(m<<2)>>2]|0)*28|0)+25|0;a[x>>0]=d[x>>0]|J;p=f+((c[p+(l<<2)>>2]|0)*28|0)+25|0;a[p>>0]=d[p>>0]|J;p=j+1|0;f=(a[g+(H*176|0)+72+m>>0]&15)==2?k:n;if((a[g+(f*176|0)+94>>0]|0)!=(0-((a[g+(f*176|0)+95>>0]|0)+(a[g+(f*176|0)+96>>0]|0)+(a[g+(f*176|0)+97>>0]|0))|0)){k=y;q=z;o=A;m=n;j=p;break}if((to(g,f)|0)!=2){k=y;q=z;o=A;m=n;j=p;break}if((vo(g,f)|0)!=3){k=y;q=z;o=A;m=n;j=p;break}if(!(lp(92270,d[g+(f*176|0)+6>>0]|0,4)|0)){k=y;q=z;o=A;m=n;j=p;break}k=xo(g,f,H)|0;if((k|0)<=-1){k=y;q=z;o=A;m=n;j=p;break}k=(c[B>>2]|0)+((c[(c[(c[I>>2]|0)+(f<<5)+28>>2]|0)+(k<<2)>>2]|0)*28|0)+25|0;a[k>>0]=d[k>>0]|J;k=y;q=z;o=A;m=n;j=j+2|0;break}if((((to(g,H)|0)==3?(K=wo(g,H)|0,c[ga>>2]=K,(K|0)>-1):0)?(L=e[G+8+(K<<1)>>1]|0,c[ha>>2]=L,M=xo(g,H,L)|0,c[C>>2]=M,(M|0)>-1):0)?(N=e[G+8+(M<<1)>>1]|0,c[D>>2]=N,N=yo(g,H,L,N)|0,c[E>>2]=N,(N|0)>-1):0){c[F>>2]=e[G+8+(N<<1)>>1];p=0;n=z;o=A;m=0;l=0;while(1){if((p|0)==3)break;k=c[ha+(p<<2)>>2]|0;f=d[g+(k*176|0)+6>>0]|0;do if(!(lp(92270,f,4)|0)){if(!(lp(92274,f,4)|0)){k=n;f=o;break}A=(to(g,k)|0)==1;k=n;f=A?p:o;l=(A&1)+l|0}else{k=p;f=o;m=m+1|0}while(0);p=p+1|0;n=k;o=f}do if((l|0)==1?(O=c[ha+(o<<2)>>2]|0,(a[g+(O*176|0)+99>>0]|0)==0):0){if(a[g+(O*176|0)+100>>0]|0)break;k=c[ga+(o<<2)>>2]|0;if((a[g+(H*176|0)+72+k>>0]&15)!=2)break;l=(c[B>>2]|0)+((c[(c[(c[I>>2]|0)+(H<<5)+28>>2]|0)+(k<<2)>>2]|0)*28|0)+25|0;a[l>>0]=d[l>>0]|J;l=v;k=y;q=n;m=w;f=x;j=j+1|0;break a}while(0);if(!((l|0)<2&(m|0)==1)){l=v;k=y;q=n;m=w;f=x;break}k=c[ha+(n<<2)>>2]|0;if(a[g+(k*176|0)+99>>0]|0){l=v;k=y;q=n;m=w;f=x;break}if(a[g+(k*176|0)+100>>0]|0){l=v;k=y;q=n;m=w;f=x;break}k=c[ga+(n<<2)>>2]|0;if((a[g+(H*176|0)+72+k>>0]&15)!=2){l=v;k=y;q=n;m=w;f=x;break}l=(c[B>>2]|0)+((c[(c[(c[I>>2]|0)+(H<<5)+28>>2]|0)+(k<<2)>>2]|0)*28|0)+25|0;a[l>>0]=d[l>>0]|J;l=v;k=y;q=n;m=w;f=x;j=j+1|0;break}if((to(g,H)|0)!=4){l=v;k=y;q=z;o=A;m=w;f=x;break}f=g+(H*176|0)+92|0;n=0;l=v;m=w;k=0;while(1){if((n|0)>=(a[f>>0]|0))break;if((a[g+(H*176|0)+72+n>>0]&15)==2?(P=e[g+(H*176|0)+8+(n<<1)>>1]|0,Q=g+(P*176|0)+6|0,(ho(d[Q>>0]|0)|0)==0):0){w=(lp(92270,d[Q>>0]|0,4)|0)==0;l=w?l:n;m=w?m:P;k=(w&1^1)+k|0}n=n+1|0}if((k|0)!=1){k=y;q=z;o=A;f=x;break}if((a[g+(m*176|0)+94>>0]|0)!=(0-((a[g+(m*176|0)+95>>0]|0)+(a[g+(m*176|0)+96>>0]|0)+(a[g+(m*176|0)+97>>0]|0))|0)){k=y;q=z;o=A;f=x;break}if((to(g,m)|0)!=2){k=y;q=z;o=A;f=x;break}if((vo(g,m)|0)!=3){k=y;q=z;o=A;f=x;break}k=xo(g,m,H)|0;if((k|0)<=-1){k=y;q=z;o=A;f=x;break}if((a[g+(m*176|0)+72+k>>0]&15)!=1){k=y;q=z;o=A;f=x;break}q=c[I>>2]|0;o=c[B>>2]|0;k=o+((c[(c[q+(m<<5)+28>>2]|0)+(k<<2)>>2]|0)*28|0)+25|0;a[k>>0]=d[k>>0]|J;k=o+((c[(c[q+(H<<5)+28>>2]|0)+(l<<2)>>2]|0)*28|0)+25|0;a[k>>0]=d[k>>0]|J;k=y;q=z;o=A;f=x;j=j+2|0;break}if(!(a[k>>0]|0)){if((((((a[l>>0]|0)==0?(r=a[G+93>>0]|0,R=G+94|0,s=b[R>>1]|0,S=G+96|0,t=a[S>>0]|0,T=G+97|0,u=a[T>>0]|0,U=G+6|0,(((s&65535)<<24>>24)+r+(((s&65535)>>>8&65535)<<24>>24)+t+u-(ao(d[U>>0]|0,0,0)|0)|0)>1):0)?(qo(g,H)|0)==0:0)?(r=vo(g,H)|0,s=b[R>>1]|0,t=a[S>>0]|0,u=a[T>>0]|0,(((s&65535)<<24>>24)+r+(((s&65535)>>>8&65535)<<24>>24)+t+u-(ao(d[U>>0]|0,0,0)|0)|0)==2):0)?lp(92275,d[U>>0]|0,3)|0:0)?(to(g,H)|0)==3:0){t=G+92|0;u=0;s=v;k=y;m=w;f=x;q=0;p=0;v=0;n=0;l=0;while(1){o=a[t>>0]|0;if((u|0)>=(o|0)){t=o;o=v;break}o=e[G+8+(u<<1)>>1]|0;r=g+(o*176|0)+6|0;b:do if(!(ho(d[r>>0]|0)|0)){switch(d[G+72+u>>0]&15|0){case 2:{s=u;m=o;q=q+1|0;p=((lp(92274,d[r>>0]|0,4)|0)!=0&1)+p|0;o=v;break b}case 1:{ia=69;break}default:{}}do if((ia|0)==69?(ia=0,(to(g,o)|0)==1):0){if((vo(g,o)|0)!=1)break;if(!(lp(92274,d[r>>0]|0,4)|0))break;if(!(a[g+(o*176|0)+99>>0]|0)){f=o;o=v+1|0;break b}else{o=v;n=n+1|0;break b}}while(0);k=u;o=v;l=l+1|0}else o=v;while(0);u=u+1|0;v=o}if((p|0)==1&(q|0)==1&(n+o|0)==1){if((l|0)!=1){l=s;q=z;o=A;break}l=(c[B>>2]|0)+((c[(c[(c[I>>2]|0)+(H<<5)+28>>2]|0)+(k<<2)>>2]|0)*28|0)+25|0;a[l>>0]=d[l>>0]|J;l=s;q=z;o=A;j=j+1|0;break}if((q|0)!=1|(n|o|0)!=0){l=s;q=z;o=A;break}r=a[g+(m*176|0)+6>>0]|0;c:do if(!(lp(92270,r&255,4)|0))n=0;else{n=0;o=0;l=f;while(1){if((o|0)>=(t|0)){f=l;break c}f=e[G+8+(o<<1)>>1]|0;do if((a[G+72+o>>0]&15)==1){if((a[g+(f*176|0)+94>>0]|0)==(0-((a[g+(f*176|0)+95>>0]|0)+(a[g+(f*176|0)+96>>0]|0)+(a[g+(f*176|0)+97>>0]|0))|0)?(a[g+(f*176|0)+99>>0]|0)!=-1:0)break;y=r<<24>>24==(a[g+(f*176|0)+6>>0]|0);n=(y&1)+n|0;l=y?f:l}while(0);o=o+1|0}}while(0);p=g+(m*176|0)+164|0;l=0;q=0;while(1){if((q|0)>=(t|0))break;do if((q|0)!=(s|0)){o=e[G+8+(q<<1)>>1]|0;if(r<<24>>24!=(a[g+(o*176|0)+6>>0]|0))break;l=((b[p>>1]|0)==(b[g+(o*176|0)+164>>1]|0)&1)+l|0}while(0);q=q+1|0}if(l|0){l=s;q=z;o=A;break}switch(n|0){case 0:{l=(c[B>>2]|0)+((c[(c[(c[I>>2]|0)+(H<<5)+28>>2]|0)+(s<<2)>>2]|0)*28|0)+25|0;a[l>>0]=d[l>>0]|J;l=s;q=z;o=A;j=j+1|0;break a}case 1:break;default:{l=s;q=z;o=A;break a}}k=yo(g,H,m,f)|0;if((k|0)<=-1){l=s;q=z;o=A;break}l=(c[B>>2]|0)+((c[(c[(c[I>>2]|0)+(H<<5)+28>>2]|0)+(k<<2)>>2]|0)*28|0)+25|0;a[l>>0]=d[l>>0]|J;l=s;q=z;o=A;j=j+1|0;break}if(!(a[k>>0]|0)){if((((((a[l>>0]|0)==0?(r=a[G+93>>0]|0,Z=G+94|0,s=b[Z>>1]|0,_=G+96|0,t=a[_>>0]|0,$=G+97|0,u=a[$>>0]|0,aa=G+6|0,(((s&65535)<<24>>24)+r+(((s&65535)>>>8&65535)<<24>>24)+t+u-(ao(d[aa>>0]|0,0,0)|0)|0)>3):0)?(qo(g,H)|0)==0:0)?(r=vo(g,H)|0,s=b[Z>>1]|0,t=a[_>>0]|0,u=a[$>>0]|0,(((s&65535)<<24>>24)+r+(((s&65535)>>>8&65535)<<24>>24)+t+u-(ao(d[aa>>0]|0,0,0)|0)|0)==4):0)?lp(92275,d[aa>>0]|0,3)|0:0)?(to(g,H)|0)==4:0){t=G+92|0;u=0;f=0;n=0;m=0;o=0;l=0;k=0;while(1){if((u|0)>=(a[t>>0]|0))break;s=e[G+8+(u<<1)>>1]|0;p=g+(s*176|0)+6|0;d:do if(!(ho(d[p>>0]|0)|0)){switch(d[G+72+u>>0]&15|0){case 2:{f=f+1|0;switch(a[g+(s*176|0)+99>>0]|0){case 0:break;case 1:{if((a[g+(s*176|0)+92>>0]|0)!=2)break d;break}default:break d}if(a[g+(s*176|0)+100>>0]|0)break d;if(qo(g,s)|0)break d;if(!(lp(92274,d[p>>0]|0,4)|0))break d;n=((to(g,s)|0)==1&1)+n|0;break d}case 1:{ia=116;break}default:{}}do if((ia|0)==116){ia=0;do if((to(g,s)|0)==1){if(!(lp(92274,d[p>>0]|0,4)|0))break;if((qo(g,s)|0)>=2)break;q=g+(s*176|0)+99|0;p=a[q>>0]|0;if(!(p<<24>>24)){r=(qo(g,s)|0)==1;p=a[q>>0]|0}else r=0;if(p<<24>>24==-1)p=(qo(g,s)|0)==0;else p=0;if(((p&1)+(r&1)|0)!=1)break;m=m+1|0;break d}while(0);if((to(g,s)|0)>1){c[fa+(o<<2)>>2]=u;o=o+1|0;break d}if((to(g,s)|0)!=1)break;l=l+1|0;break d}while(0);k=k+1|0}while(0);u=u+1|0}e:do if((n|0)==2&(f|0)==(n|0)?(o+m+l|0)==2&(k|0)==0:0){k=0;while(1){if((k|0)>=(o|0))break e;v=(c[B>>2]|0)+((c[(c[(c[I>>2]|0)+(H<<5)+28>>2]|0)+(c[fa+(k<<2)>>2]<<2)>>2]|0)*28|0)+25|0;a[v>>0]=d[v>>0]|J;k=k+1|0;j=j+1|0}}else k=v;while(0);l=k;k=y;q=z;o=A;m=w;f=x;break}if(((((((a[k>>0]|0)==0?(a[l>>0]|0)==0:0)?(r=a[G+93>>0]|0,ba=G+94|0,s=b[ba>>1]|0,ca=G+96|0,t=a[ca>>0]|0,da=G+97|0,u=a[da>>0]|0,ea=G+6|0,(((s&65535)<<24>>24)+r+(((s&65535)>>>8&65535)<<24>>24)+t+u-(ao(d[ea>>0]|0,0,0)|0)|0)>5):0)?(qo(g,H)|0)==0:0)?(r=vo(g,H)|0,s=b[ba>>1]|0,t=a[ca>>0]|0,u=a[da>>0]|0,(((s&65535)<<24>>24)+r+(((s&65535)>>>8&65535)<<24>>24)+t+u-(ao(d[ea>>0]|0,0,0)|0)|0)==6):0)?(lp(92275,d[ea>>0]|0,3)|0)!=0:0)?(to(g,H)|0)==5:0){t=G+92|0;u=0;f=0;n=0;m=0;o=0;l=0;k=0;while(1){if((u|0)>=(a[t>>0]|0))break;s=e[G+8+(u<<1)>>1]|0;p=g+(s*176|0)+6|0;f:do if(!(ho(d[p>>0]|0)|0)){switch(d[G+72+u>>0]&15|0){case 2:{f=f+1|0;switch(a[g+(s*176|0)+99>>0]|0){case 0:break;case 1:{if((a[g+(s*176|0)+92>>0]|0)!=2)break f;break}default:break f}if(a[g+(s*176|0)+100>>0]|0)break f;if(qo(g,s)|0)break f;if(!(lp(92274,d[p>>0]|0,4)|0))break f;n=((to(g,s)|0)==1&1)+n|0;break f}case 1:{ia=153;break}default:{}}do if((ia|0)==153){ia=0;do if((to(g,s)|0)==1){if(!(lp(92274,d[p>>0]|0,4)|0))break;if((qo(g,s)|0)>=2)break;q=g+(s*176|0)+99|0;p=a[q>>0]|0;if(!(p<<24>>24)){r=(qo(g,s)|0)==1;p=a[q>>0]|0}else r=0;if(p<<24>>24==-1)p=(qo(g,s)|0)==0;else p=0;if(((p&1)+(r&1)|0)!=1)break;m=m+1|0;break f}while(0);if((to(g,s)|0)>1){c[fa+(o<<2)>>2]=u;o=o+1|0;break f}if((to(g,s)|0)!=1)break;l=l+1|0;break f}while(0);k=k+1|0}while(0);u=u+1|0}g:do if((n|0)==3&(f|0)==(n|0)?(o+m+l|0)==2&(k|0)==0:0){k=0;while(1){if((k|0)>=(o|0))break g;v=(c[B>>2]|0)+((c[(c[(c[I>>2]|0)+(H<<5)+28>>2]|0)+(c[fa+(k<<2)>>2]<<2)>>2]|0)*28|0)+25|0;a[v>>0]=d[v>>0]|J;k=k+1|0;j=j+1|0}}else k=v;while(0);l=k;k=y;q=z;o=A;m=w;f=x}else{l=v;k=y;q=z;o=A;m=w;f=x}}else{l=v;k=y;q=z;o=A;m=w;f=x}}else{l=v;k=y;q=z;o=A;m=w;f=x}}else{l=v;k=y;q=z;o=A;m=w;f=x}while(0);G=G+176|0;H=H+1|0;v=l;y=k;z=q;A=o;w=m;x=f}i=ja;return j|0}function Fj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0;k=i;i=i+16|0;j=k;h=0;g=0;while(1){if((h|0)>=(d|0))break;if(((lj(b,h,0,j,0)|0)&2240|0)!=0?(c[j>>2]&33554434|0)!=0:0){lj(b,h,e,j,1)|0;a[b+(h*176|0)+99>>0]=0;pj(-1,b,d,h&65535,f)|0;lj(b,h,e,j,0)|0;g=g+1|0}h=h+1|0}i=k;return g|0}function Gj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=i;i=i+16|0;f=g;if(((lj(a,b,0,f,0)|0)&d|0)!=0?(c[f>>2]&e|0)!=0:0)f=1;else f=0;i=g;return f|0}function Hj(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;if(((Gj(b,d,607,16777183,0)|0)!=0?(i=a[b+(d*176|0)+94>>0]|0,f=i+(a[b+(d*176|0)+93>>0]|0)-(a[b+(d*176|0)+99>>0]|0)|0,(f&-2|0)==2):0)?(d=a[b+(d*176|0)+92>>0]|0,h=f-d|0,g=(i|0)<(h|0),h=g?i:h,(f|0)!=(d|0)):0){if(g)c[e>>2]=c[e>>2]|4;if(!h)f=4;else{c[e>>2]=c[e>>2]|1;f=4}}else f=-1;return f|0}function Ij(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;if((((Gj(b,d,607,16777183,0)|0)!=0?(k=a[b+(d*176|0)+94>>0]|0,f=a[b+(d*176|0)+99>>0]|0,g=k+(a[b+(d*176|0)+93>>0]|0)-(f<<24>>24)|0,(g&-2|0)==2):0)?(h=f<<24>>24==-1&1,d=g-(a[b+(d*176|0)+92>>0]|0)|0,i=d-k|0,j=(h|0)<(i|0),(d|0)!=(k|0)):0)?(l=j?4:0,l=((j?h:i)|0)==0?l:l|2,(l|0)!=0):0){c[e>>2]=c[e>>2]|l;f=4}else f=-1;return f|0}function Jj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=i;i=i+16|0;f=e;c[f>>2]=0;g=Hj(a,b,f)|0;a=Ij(a,b,f)|0;a=(g|0)>(a|0)?g:a;b=c[f>>2]|0;if((b|0)!=0&(a|0)>0)c[d>>2]=c[d>>2]|b;else a=-1;i=e;return a|0}function Kj(d,f,g,h,j,k){d=d|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;O=i;i=i+16|0;K=O;M=g+28|0;l=c[M>>2]|0;N=g+20|0;I=c[N>>2]|0;J=g+44|0;if((I+1|0)<(c[J>>2]|0)){n=0;m=0;while(1){if((n|0)>=(f|0))break;if((lj(d,n,0,K,0)|0)&h)m=((c[K>>2]&j|0)!=0&1)+m|0;n=n+1|0}if(!m)l=0;else{G=g+76|0;q=(c[G>>2]|0)+(I<<5)|0;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;c[q+16>>2]=0;c[q+20>>2]=0;c[q+24>>2]=0;c[q+28>>2]=0;q=(c[G>>2]|0)+(I<<5)|0;m=m+1&65535;n=(k>>31&256|16)&65535;o=0;p=q+-32|0;while(1){if((o|0)==1)break;F=q+(o<<5)|0;c[F+28>>2]=(c[p+28>>2]|0)+(e[p+24>>1]<<2);b[F+24>>1]=m;b[F+22>>1]=0;c[F+12>>2]=0;c[F+8>>2]=0;c[F+4>>2]=0;c[F>>2]=0;b[F+20>>1]=n;o=o+1|0;p=F}A=g+48|0;B=(k|0)<0;C=g+172|0;D=g+80|0;E=g+178|0;F=0;while(1){if((F|0)>=(f|0))break;m=lj(d,F,0,K,0)|0;if((m&h|0)!=0?(c[K>>2]&j|0)!=0:0){v=c[G>>2]|0;w=v+(F<<5)|0;if((I|0)>=(c[J>>2]|0))break;if((l|0)>=(c[A>>2]|0))break;x=v+(I<<5)+22|0;y=b[x>>1]|0;if((y&65535)>=(e[v+(I<<5)+24>>1]|0))break;z=v+(F<<5)+22|0;if((e[z>>1]|0)>=(e[v+(F<<5)+24>>1]|0))break;n=v+(F<<5)+20|0;o=e[n>>1]|8;b[n>>1]=o;if(B&(m&31|0)!=0)b[n>>1]=e[C>>1]|o;r=c[D>>2]|0;s=r+(l*28|0)+8|0;c[s>>2]=1;t=r+(l*28|0)+16|0;c[t>>2]=0;a[r+(l*28|0)+24>>0]=0;u=r+(l*28|0)+25|0;a[u>>0]=a[u>>0]&a[E>>0];switch(k|0){case 1:{if((a[d+(F*176|0)+99>>0]|0)!=1)L=23;break}case -1:{if((a[d+(F*176|0)+99>>0]|0)==-1)L=23;break}default:{}}if((L|0)==23){L=0;c[t>>2]=1;u=v+(I<<5)+8|0;c[u>>2]=(c[u>>2]|0)+1;u=v+(I<<5)|0;c[u>>2]=(c[u>>2]|0)+1;u=v+(F<<5)+8|0;c[u>>2]=(c[u>>2]|0)+1;c[w>>2]=(c[w>>2]|0)+1}m=v+(F<<5)+28|0;n=e[z>>1]|0;u=0;while(1){if((u|0)==(n|0))break;q=c[(c[m>>2]|0)+(u<<2)>>2]|0;o=c[w>>2]|0;p=e[r+(q*28|0)+2>>1]^F;q=r+(q*28|0)+8|0;if(((c[q>>2]|0)==0?(p|0)<(c[g>>2]|0):0)?(H=c[v+(p<<5)>>2]|0,(H|0)>0):0){p=(H|0)<(o|0)?H:o;c[q>>2]=(p|0)<2?p:2}u=u+1|0}b[r+(l*28|0)>>1]=F;b[r+(l*28|0)+2>>1]=F^I;w=b[z>>1]|0;c[(c[m>>2]|0)+((w&65535)<<2)>>2]=l;c[(c[v+(I<<5)+28>>2]|0)+((y&65535)<<2)>>2]=l;b[z>>1]=w+1<<16>>16;b[r+(l*28|0)+4>>1]=w;z=b[x>>1]|0;b[x>>1]=z+1<<16>>16;b[r+(l*28|0)+6>>1]=z;c[r+(l*28|0)+12>>2]=c[s>>2];c[r+(l*28|0)+20>>2]=c[t>>2];l=l+1|0}F=F+1|0}L=c[N>>2]|0;c[M>>2]=l;c[N>>2]=L+1;l=g+12|0;c[l>>2]=(c[l>>2]|0)+1;l=L}}else l=-9993;i=O;return l|0}function Lj(d,f,g,h,j){d=d|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;L=i;i=i+16|0;I=L;J=g+28|0;k=c[J>>2]|0;K=g+20|0;G=c[K>>2]|0;H=g+44|0;if((G+1|0)<(c[H>>2]|0)){m=0;l=0;while(1){if((m|0)>=(f|0))break;if((lj(d,m,0,I,0)|0)&h)l=((c[I>>2]&j|0)!=0&1)+l|0;m=m+1|0}if(!l)k=0;else{D=g+76|0;o=(c[D>>2]|0)+(G<<5)|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;c[o+24>>2]=0;c[o+28>>2]=0;o=(c[D>>2]|0)+(G<<5)|0;l=l+2&65535;m=0;n=o+-32|0;while(1){if((m|0)==1)break;C=o+(m<<5)|0;c[C+28>>2]=(c[n+28>>2]|0)+(e[n+24>>1]<<2);b[C+24>>1]=l;b[C+22>>1]=0;c[C+12>>2]=0;c[C+8>>2]=0;c[C+4>>2]=0;c[C>>2]=0;B=C+20|0;b[B>>1]=e[B>>1]|4;m=m+1|0;n=C}z=g+48|0;A=g+80|0;B=g+178|0;C=0;while(1){if((C|0)>=(f|0))break;if(((lj(d,C,0,I,0)|0)&h|0)!=0?(c[I>>2]&j|0)!=0:0){v=c[D>>2]|0;if((G|0)>=(c[H>>2]|0))break;if((k|0)>=(c[z>>2]|0))break;w=v+(G<<5)+22|0;x=b[w>>1]|0;if((x&65535)>=(e[v+(G<<5)+24>>1]|0))break;y=v+(C<<5)+22|0;if((e[y>>1]|0)>=(e[v+(C<<5)+24>>1]|0))break;l=a[d+(C*176|0)+94>>0]|0;m=l+(a[d+(C*176|0)+93>>0]|0)-(a[d+(C*176|0)+99>>0]|0)|0;if((m&-2|0)!=2)break;t=a[d+(C*176|0)+92>>0]|0;t=((m|0)==3&t<<24>>24>1&1)+(m-(t<<24>>24))|0;l=(l|0)<(t|0)?l:t;r=v+(C<<5)+20|0;b[r>>1]=e[r>>1]|2;r=c[A>>2]|0;s=r+(k*28|0)+8|0;c[s>>2]=t;t=r+(k*28|0)+16|0;c[t>>2]=l;a[r+(k*28|0)+24>>0]=0;m=r+(k*28|0)+25|0;a[m>>0]=a[m>>0]&a[B>>0];m=v+(G<<5)+8|0;c[m>>2]=(c[m>>2]|0)+l;m=v+(G<<5)|0;c[m>>2]=(c[m>>2]|0)+l;m=v+(C<<5)+8|0;c[m>>2]=(c[m>>2]|0)+l;m=v+(C<<5)|0;l=(c[m>>2]|0)+l|0;c[m>>2]=l;m=b[y>>1]|0;n=v+(C<<5)+28|0;o=m&65535;u=0;while(1){if((u|0)==(o|0))break;p=c[(c[n>>2]|0)+(u<<2)>>2]|0;q=r+(p*28|0)+8|0;if(((c[q>>2]|0)==0?(E=e[r+(p*28|0)+2>>1]^C,(E|0)<(c[g>>2]|0)):0)?(F=c[v+(E<<5)>>2]|0,(F|0)>0):0){p=(F|0)<(l|0)?F:l;c[q>>2]=(p|0)<2?p:2}u=u+1|0}b[r+(k*28|0)>>1]=C;b[r+(k*28|0)+2>>1]=C^G;c[(c[n>>2]|0)+(o<<2)>>2]=k;c[(c[v+(G<<5)+28>>2]|0)+((x&65535)<<2)>>2]=k;b[y>>1]=m+1<<16>>16;b[r+(k*28|0)+4>>1]=m;y=b[w>>1]|0;b[w>>1]=y+1<<16>>16;b[r+(k*28|0)+6>>1]=y;c[r+(k*28|0)+12>>2]=c[s>>2];c[r+(k*28|0)+20>>2]=c[t>>2];k=k+1|0}C=C+1|0}f=c[K>>2]|0;c[J>>2]=k;c[K>>2]=f+1;k=g+16|0;c[k>>2]=(c[k>>2]|0)+1;k=f}}else k=-9993;i=L;return k|0}function Mj(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;z=g+28|0;h=c[z>>2]|0;A=g+20|0;D=c[A>>2]|0;E=g+12|0;F=g+16|0;a:do if((f+1|0)==(D|0)?((c[g+4>>2]|0)+d+(c[E>>2]|0)+(c[F>>2]|0)|0)<(c[g+44>>2]|0):0){v=g+76|0;k=c[v>>2]|0;B=k+(f<<5)|0;w=k+(f<<5)+20|0;i=b[w>>1]|0;j=i&4;C=j<<16>>16==0;i=i&65535;if(!(i&16))i=0;else i=(i>>>8&1)+1|0;s=k+(f<<5)+28|0;t=g+80|0;r=g+172|0;u=(i|0)==0;p=j<<16>>16!=0;q=a+108|0;o=(i|0)==1;n=a+110|0;i=e[k+(f<<5)+22>>1]|0;while(1){m=i+-1|0;if((i|0)<=0)break;j=c[(c[s>>2]|0)+(m<<2)>>2]|0;if((j+1|0)!=(h|0)){h=-9993;break a}a=c[t>>2]|0;k=a+(j*28|0)|0;l=(e[a+(j*28|0)+2>>1]|0)^f;i=c[v>>2]|0;g=c[a+(j*28|0)+16>>2]|0;H=i+(l<<5)|0;G=(c[H>>2]|0)-g|0;c[H>>2]=G;c[i+(l<<5)+4>>2]=G;G=i+(l<<5)+8|0;g=(c[G>>2]|0)-g|0;c[G>>2]=g;c[i+(l<<5)+12>>2]=g;g=b[r>>1]|0;if(g<<16>>16?(x=i+(l<<5)+20|0,y=b[x>>1]|0,(y&g)<<16>>16==g<<16>>16):0)b[x>>1]=y^g;if(!C){H=i+(l<<5)+20|0;b[H>>1]=(e[H>>1]|0)^(e[w>>1]|0)&2}if(!u){H=i+(l<<5)+20|0;b[H>>1]=(e[H>>1]|0)^(e[w>>1]|0)&8}i=i+(l<<5)+22|0;g=b[i>>1]|0;if(((e[a+(j*28|0)+4>>1]|0)+1|0)!=(g&65535|0)){h=-9993;break a}b[i>>1]=g+-1<<16>>16;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;h=h+-1|0;i=(l|0)<(d|0);if(p&i)b[q>>1]=0;if(!(o&i)){i=m;continue}b[n>>1]=0;i=m}c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;c[B+12>>2]=0;c[B+16>>2]=0;c[B+20>>2]=0;c[B+24>>2]=0;c[B+28>>2]=0;c[z>>2]=h;c[A>>2]=D+-1;if(!C)c[F>>2]=(c[F>>2]|0)+-1;if(u)h=0;else{c[E>>2]=(c[E>>2]|0)+-1;h=0}}else h=-9993;while(0);return h|0}function Nj(a){a=a|0;var b=0,d=0,f=0,g=0,h=0,i=0,j=0,k=0;h=a+76|0;i=a+80|0;a=c[a+20>>2]|0;f=0;while(1){if((f|0)>=(a|0))break;d=c[h>>2]|0;c[d+(f<<5)+12>>2]=c[d+(f<<5)+8>>2];c[d+(f<<5)+4>>2]=c[d+(f<<5)>>2];d=c[h>>2]|0;b=d+(f<<5)+28|0;d=e[d+(f<<5)+22>>1]|0;g=0;while(1){if((g|0)==(d|0))break;k=c[i>>2]|0;j=c[(c[b>>2]|0)+(g<<2)>>2]|0;c[k+(j*28|0)+12>>2]=c[k+(j*28|0)+8>>2];c[k+(j*28|0)+20>>2]=c[k+(j*28|0)+16>>2];g=g+1|0}f=f+1|0}return 0}function Oj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=i;i=i+32|0;s=u+16|0;t=u;g=0;h=-1;while(1){if(!(c[8804+(g<<1<<2)>>2]|0))break;c[t+(g<<2)>>2]=0;h=g;g=g+1|0}k=0;while(1){if((k|0)>=(d|0)){j=0;g=0;break}a:do if(((a[b+(k*176|0)+99>>0]|0)==0?a[b+(k*176|0)+94>>0]|0:0)?(l=lj(b,k,0,s,0)|0,l|0):0){j=(c[s>>2]|0)!=0;g=0;while(1){if((g|0)>(h|0))break a;p=g<<1;if((c[8804+(p<<2)>>2]&l|0)!=0&j?c[8804+((p|1)<<2)>>2]|0:0)break;g=g+1|0}p=t+(g<<2)|0;c[p>>2]=(c[p>>2]|0)+1}while(0);k=k+1|0}while(1){if((j|0)>(h|0))break;g=(c[t+(j<<2)>>2]|0)+g|0;if((g|0)>=(f|0)){h=j;break}j=j+1|0}b:do if(!g)g=0;else{p=e+24|0;n=e+28|0;o=0;g=0;while(1){if(!((o|0)<(d|0)&(g|0)<(f|0)))break b;m=b+(o*176|0)+99|0;c:do if(((a[m>>0]|0)==0?(a[b+(o*176|0)+94>>0]|0)!=0:0)?(q=lj(b,o,0,s,0)|0,(q|0)!=0):0){l=(c[s>>2]|0)!=0;e=0;while(1){if((e|0)>(h|0))break c;k=t+(e<<2)|0;j=c[k>>2]|0;if((j|0?(r=e<<1,(c[8804+(r<<2)>>2]&q|0)!=0&l):0)?c[8804+((r|1)<<2)>>2]|0:0)break;e=e+1|0}lj(b,o,c[p>>2]|0,s,1)|0;c[k>>2]=j+-1;a[m>>0]=(a[m>>0]|0)+-1<<24>>24;pj(-1,b,d,o&65535,c[n>>2]|0)|0;lj(b,o,c[p>>2]|0,s,0)|0;g=g+1|0}while(0);o=o+1|0}}while(0);i=u;return g|0}function Pj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h;a:do if(((a[b+(d*176|0)+99>>0]|0)==0?(a[b+(d*176|0)+94>>0]|0)!=0:0)?(g=lj(b,d,0,e,0)|0,(g|0)!=0):0){d=c[e>>2]|0;f=0;while(1){e=f<<1;b=c[8804+(e<<2)>>2]|0;if(!b){b=0;break a}if(b&g|0?c[8804+((e|1)<<2)>>2]&d|0:0){b=1;break a}f=f+1|0}}else b=0;while(0);i=h;return b|0}function Qj(b,d){b=b|0;d=d|0;var e=0,f=0;f=i;i=i+16|0;e=f;if((a[b+(d*176|0)+94>>0]|0)!=0?((lj(b,d,0,e,0)|0)&64|0)!=0:0)b=(c[e>>2]|0)>>>2&1;else b=0;i=f;return b|0}function Rj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=i;i=i+32|0;s=u+16|0;t=u;g=0;h=-1;while(1){if(!(c[8836+(g<<1<<2)>>2]|0))break;c[t+(g<<2)>>2]=0;h=g;g=g+1|0}k=0;while(1){if((k|0)>=(d|0)){j=0;g=0;break}a:do if((a[b+(k*176|0)+99>>0]|0)==-1?(l=lj(b,k,0,s,0)|0,l|0):0){j=(c[s>>2]|0)!=0;g=0;while(1){if((g|0)>(h|0))break a;p=g<<1;if((c[8836+(p<<2)>>2]&l|0)!=0&j?c[8836+((p|1)<<2)>>2]|0:0)break;g=g+1|0}p=t+(g<<2)|0;c[p>>2]=(c[p>>2]|0)+1}while(0);k=k+1|0}while(1){if((j|0)>(h|0))break;g=(c[t+(j<<2)>>2]|0)+g|0;if((g|0)>=(f|0)){h=j;break}j=j+1|0}b:do if(!g)g=0;else{p=e+24|0;n=e+28|0;o=0;g=0;while(1){if(!((o|0)<(d|0)&(g|0)<(f|0)))break b;m=b+(o*176|0)+99|0;c:do if((a[m>>0]|0)==-1?(q=lj(b,o,0,s,0)|0,(q|0)!=0):0){l=(c[s>>2]|0)!=0;e=0;while(1){if((e|0)>(h|0))break c;k=t+(e<<2)|0;j=c[k>>2]|0;if((j|0?(r=e<<1,(c[8836+(r<<2)>>2]&q|0)!=0&l):0)?c[8836+((r|1)<<2)>>2]|0:0)break;e=e+1|0}lj(b,o,c[p>>2]|0,s,1)|0;c[k>>2]=j+-1;a[m>>0]=(a[m>>0]|0)+1<<24>>24;pj(1,b,d,o&65535,c[n>>2]|0)|0;lj(b,o,c[p>>2]|0,s,0)|0;g=g+1|0}while(0);o=o+1|0}}while(0);i=u;return g|0}function Sj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h;a:do if((a[b+(d*176|0)+99>>0]|0)==-1?(g=lj(b,d,0,e,0)|0,(g|0)!=0):0){b=c[e>>2]|0;f=0;while(1){d=f<<1;e=c[8836+(d<<2)>>2]|0;if(!e){b=0;break a}if(e&g|0?c[8836+((d|1)<<2)>>2]&b|0:0){b=1;break a}f=f+1|0}}else b=0;while(0);i=h;return b|0}function Tj(a,d,e,f,g,h,i,j){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;w=f+24|0;B=c[w>>2]|0;x=c[B+128>>2]|0;B=c[B+124>>2]|0;A=(B+x|0)/2|0;B=(x-B|0)/2|0;x=i+176|0;b[x>>1]=272;y=i+174|0;b[y>>1]=4;z=i+172|0;b[z>>1]=512;v=Kj(d,e,i,64,31,1)|0;u=Kj(d,e,i,607,16777183,-1)|0;b[x>>1]=272;b[y>>1]=4;b[z>>1]=512;r=Lj(d,e,i,607,16736223)|0;p=Lj(d,e,i,17,40960)|0;s=(r|0)>=(e|0);q=(p|0)<(e|0);a:do if(!(q|s^1)){o=c[(c[w>>2]|0)+128>>2]|0;l=0;m=0;while(1){k=Uj(a,i,j,f,d,e,r,p,9)|0;if((k+9999|0)>>>0<20)break a;if(!(k&1)){o=l;break}l=l+1|0;k=o;o=c[(c[w>>2]|0)+128>>2]|0;if((k|0)>(o+1|0))m=((k+1-o|0)/2|0)+m|0;if((l|0)>=(g|0)){o=l;break}}if(!((v|0)<(e|0)|((u|0)<(e|0)|(o|0)==0))?(g=c[w>>2]|0,n=c[g+128>>2]|0,g=c[g+124>>2]|0,(n|0)>(((g|0)>-1?g:0-g|0)|0)):0)while(1){l=n;while(1){k=Uj(a,i,j,f,d,e,u,v,9)|0;if((k+9999|0)>>>0<20)break a;if(!(k&1)){k=o;t=15;break a}k=c[(c[w>>2]|0)+128>>2]|0;if((l|0)>(k|0))break;else l=k}n=k;m=((l-k|0)/2|0)+m|0}else{k=o;t=15}}else{k=0;m=0;t=15}while(0);if((t|0)==15){if(q)l=0;else l=Mj(d,e,p,i)|0;if(s){t=Mj(d,e,r,i)|0;l=(l|0)==0&(t|0)!=0?t:l}if((u|0)>=(e|0)){u=Mj(d,e,u,i)|0;l=(l|0)==0&(u|0)!=0?u:l}if((v|0)>=(e|0)){i=Mj(d,e,v,i)|0;l=(l|0)==0&(i|0)!=0?i:l}b[x>>1]=0;b[y>>1]=0;b[z>>1]=0;if(!l){z=c[w>>2]|0;y=c[z+128>>2]|0;z=c[z+124>>2]|0;if((A-B|0)==(((z+y|0)/2|0)-((y-z|0)/2|0)|0)){if(h)c[h>>2]=m<<1}else k=-9997}else k=l}return k|0}function Uj(d,e,f,g,h,j,k,l,m){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=i;i=i+976|0;v=y+760|0;q=y+756|0;w=y;o=y+958|0;n=y+952|0;a:do switch(m|0){case 1:{if(!(b[h+(l*176|0)+108>>1]|0)){if(!(oi(h,l,o)|0)){n=0;break a}if(!(a[o+3>>0]|0)){n=0;break a}}if(!(b[h+(k*176|0)+108>>1]|0))if((oi(h,k,o)|0)!=0?(a[o+4>>0]|0)!=0:0){u=3;o=2;x=38}else n=0;else{u=3;o=2;x=38}break}case 10:{if(!(b[h+(l*176|0)+108>>1]|0)){if(!(ri(h,l,o)|0)){n=0;break a}if(!(a[o+3>>0]|0)){n=0;break a}}if(!(b[h+(k*176|0)+108>>1]|0))if((ri(h,k,n)|0)!=0?(a[n+4>>0]|0)!=0:0){u=3;o=2;x=38}else n=0;else{u=3;o=2;x=38}break}case 2:{u=11;o=8;x=38;break}case 4:case 3:{if(!(Vj(e,l)|0)){if(!(oi(h,l,o)|0)){n=0;break a}if(!(a[o+3>>0]|0)){n=0;break a}}if(!(Vj(e,k)|0)){if(!(oi(h,k,o)|0)){n=0;break a}if(!(a[o+4>>0]|0)){n=0;break a}}er(v|0,0,192)|0;u=11;o=2;x=38;break}case 5:{n=11;x=22;break}case 7:{n=3;x=22;break}case 6:{n=11;x=30;break}case 8:{n=3;x=30;break}case 9:{u=125;o=0;x=38;break}default:{u=3;o=0;x=38}}while(0);do if((x|0)==22){if(!(Vj(e,l)|0)){if(!(oi(h,l,o)|0)){n=0;break}if(!(a[o+3>>0]|0)){n=0;break}}if(!(Vj(e,k)|0)){if(!(oi(h,k,o)|0)){n=0;break}if(!(a[o+3>>0]|0)){n=0;break}}er(v|0,0,192)|0;u=n;o=2;x=38}else if((x|0)==30){if(!(Vj(e,l)|0)){if(!(oi(h,l,o)|0)){n=0;break}if(!(a[o+4>>0]|0)){n=0;break}}if(!(Vj(e,k)|0))if((oi(h,k,o)|0)!=0?(a[o+4>>0]|0)!=0:0){u=n;o=2;x=38}else n=0;else{u=n;o=2;x=38}}while(0);b:do if((x|0)==38){n=Wj(d,e,f,0)|0;if((n+9999|0)>>>0>=20){n=$j(e,k,l,o,m,v,w,q)|0;c:do if((n|0)<1){if((n|0)<0)switch(n|0){case -9990:{p=0;m=0;d=0;o=0;break c}default:{x=43;break c}}switch(n|0){case 0:break;default:{x=43;break c}}n=_j(e,f,0)|0;break b}else switch(n|0){case 1:{p=0;m=0;d=1;o=0;break c}case 2:{n=_j(e,f,0)|0;n=n|0?n:1;break b}case 4:{r=(u&18|0)==16;p=r&1;m=Ri(e,f,u)|0;if((m+9999|0)>>>0<20){d=0;o=0;break c}if((m|0)<=0){m=0;d=0;o=0;break c}o=m<<1;n=c[q>>2]|0;d:do if((o|0)>=(n|0)){o=o-n|0;q=(g|0)!=0;do if(q?(s=g+20|0,t=c[s>>2]|0,t|0):0){n=g+24|0;d=(c[n>>2]|0)==0;if(!((u&64|0)==0|d)){er(t|0,0,j|0)|0;qj(e,h,j,c[n>>2]|0,c[s>>2]|0,0,1)|0;qj(e,h,j,0,0,c[g+28>>2]|0,0)|0;break}if(d){n=sj(e,j,g,l,k)|0;if((n|0)<0){d=0;break d}if(!n){n=0;d=0;break d}}}while(0);m=Cj(e,w,-1,h,j,u)|0;d=(m+9999|0)>>>0<20?m:0;n=rj(e,h,j,u)|0;if((n+9999|0)>>>0>=20){if(!((n|m)&1)){n=d;d=1}else{l=(u&72|0)==0;n=l?-9995:d;d=l?0:3}if(q&(n|0)==0){n=g+20|0;m=c[n>>2]|0;if((u&64|0)==0|(m|0)==0)n=0;else{if(r){l=dk(e,f,h)|0;m=c[n>>2]|0;n=(l+9999|0)>>>0<20?l:0}else n=0;kj(h,j,c[g+24>>2]|0,m)|0;oj(e,j)|0}}}else d=0}else{n=0;d=0;o=0}while(0);m=tj(e,u&3)|0;m=(m+9999|0)>>>0<20?m:n;break c}default:{x=43;break c}}while(0);if((x|0)==43){_j(e,f,0)|0;n=(n+9999|0)>>>0<20?n:-9997;break}ek(e,v,u&64)|0;Bj(e,w)|0;n=_j(e,f,p|0?h:0)|0;xj(e)|0;if(!m){if(!n)n=(o<<2)+d|0}else n=m}}while(0);i=y;return n|0}function Vj(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;a:do if((((f|0)>-1?(c[d>>2]|0)>(f|0):0)?(k=c[d+76>>2]|0,(k+(f<<5)|0)!=0):0)?(b[k+(f<<5)+20>>1]&2)!=0:0){h=d+80|0;i=k+(f<<5)+28|0;j=e[k+(f<<5)+22>>1]|0;do{if((j|0)<=0){d=0;break a}j=j+-1|0;g=c[h>>2]|0;d=c[(c[i>>2]|0)+(j<<2)>>2]|0}while(!(b[k+((e[g+(d*28|0)+2>>1]^f)<<5)+20>>1]&4));d=(a[g+(d*28|0)+25>>0]|0)==0&1}else d=0;while(0);return d|0}function Wj(a,b,d,f){a=a|0;b=b|0;d=d|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=i;i=i+2064|0;u=B+1040|0;t=B+16|0;v=B+12|0;A=B;c[v>>2]=0;q=b+56|0;g=c[q>>2]|0;n=c[b+60>>2]|0;a:do if((g|0)>(n|0)){m=c[b>>2]|0;z=b+76|0;l=0;h=0;while(1){if((l|0)>=(m|0)){r=h;break}y=c[z>>2]|0;k=y+(l<<5)|0;j=(c[k>>2]|0)+-1|0;if((h|0)<256?(j|0)==(c[y+(l<<5)+8>>2]&16383|0):0){c[k>>2]=j;g=g+-1|0;c[q>>2]=g;c[u+(h<<2)>>2]=l;c[t+(h<<2)>>2]=h;h=h+1|0}l=l+1|0}if((g-n|0)>(r|0))g=-9989;else{c[A>>2]=0;c[A+4>>2]=0;c[A+8>>2]=0;w=d+40|0;x=d+48|0;k=d+56|0;l=b+92|0;m=b+88|0;n=b+72|0;y=d+36|0;p=(r|0)>1;o=0;while(1){if((o|0)>=(r|0)){g=0;s=21;break}j=c[u+(o<<2)>>2]|0;c[w>>2]=0;c[x>>2]=0;c[k>>2]=f;c[m>>2]=c[l>>2];c[n>>2]=0;g=(c[z>>2]|0)+(j<<5)|0;c[g>>2]=(c[g>>2]|0)+1;c[q>>2]=(c[q>>2]|0)+1;g=Si(b,d,128)|0;ij(d)|0;xj(b)|0;c[k>>2]=0;h=(c[z>>2]|0)+(j<<5)|0;c[h>>2]=(c[h>>2]|0)+-1;c[q>>2]=(c[q>>2]|0)+-1;if((g+9999|0)>>>0<20)break;if(g|0){g=-9988;break}g=c[w>>2]|0;if((g|0)>1){Np(c[y>>2]|0,(g|0)/2|0,8,5);h=c[y>>2]|0;if((c[h>>2]|0)!=(j|0)){g=-9988;break}g=c[w>>2]|0;if((c[h+(g+-2<<2)>>2]|0)!=(j|0)){g=-9988;break}if(p){if(!(c[A>>2]|0)){sc(a)|0;if(!(Gb(a,A,c[b>>2]|0,r)|0)){g=-9998;break}h=c[y>>2]|0;g=c[w>>2]|0}Sb(a,A,o,h,g);Tb(a,A,o,u,r)}}o=o+1|0}b:do if((s|0)==21){while(1){s=0;if((g|0)>=(r|0))break;s=(c[z>>2]|0)+(c[u+(g<<2)>>2]<<5)|0;c[s>>2]=(c[s>>2]|0)+1;c[q>>2]=(c[q>>2]|0)+1;g=g+1|0;s=21}if(!p)if((r|0)==1){g=c[w>>2]|0;if(!g){h=0;g=0;while(1){if((h|0)>=1)break;t=c[y>>2]|0;c[t+(g<<2)>>2]=c[u+(h<<2)>>2];c[t+((g|1)<<2)>>2]=-1;h=h+1|0;g=g+2|0}c[w>>2]=g}}else s=50;else{j=0;while(1){if((j|0)==(r|0))break;if((c[t+(j<<2)>>2]|0)==(j|0)){g=j;k=0;while(1){while(1){g=g+1|0;if((g|0)>=(r|0)){s=32;break}h=t+(g<<2)|0;if((c[h>>2]|0)!=(g|0))continue;if(Ub(A,j,g)|0){s=31;break}}if((s|0)==31){Wb(A,j,g);c[h>>2]=j;k=k+1|0;continue}else if((s|0)==32)if(!k)break;else{g=j;k=0;continue}}}j=j+1|0}k=d+32|0;l=0;g=0;while(1){if((l|0)>=(r|0))break;do if((l|0)==(c[t+(l<<2)>>2]|0)){j=u+(l<<2)|0;if(!(Vb(A,l)|0))h=l;else{s=c[y>>2]|0;c[s+(g<<2)>>2]=c[j>>2];c[s+(g+1<<2)>>2]=-1;g=g+2|0;break}c:while(1){do{h=h+1|0;if((h|0)>=(r|0))break c}while((l|0)!=(c[t+(h<<2)>>2]|0));s=c[y>>2]|0;c[s+(g<<2)>>2]=c[j>>2];c[s+(g+1<<2)>>2]=-2-(c[u+(h<<2)>>2]|0);g=g+2|0}g=Xb(a,A,l,c[y>>2]|0,c[j>>2]|0,g,c[k>>2]|0)|0;if((g|0)<0){g=-9988;break b}}while(0);l=l+1|0}c[w>>2]=g;Hb(a,A);s=50}if((s|0)==50)g=c[w>>2]|0;if((g|0)<=1){g=0;break a}p=d+44|0;h=g;o=0;g=0;while(1){if((o|0)>=(h|0))break;j=c[y>>2]|0;n=c[j+(o<<2)>>2]|0;m=c[z>>2]|0;m=(c[m+(n<<5)>>2]|0)-(c[m+(n<<5)+8>>2]&16383)|0;m=(m|0)<1?1:m;k=o;l=0;while(1){if((k|0)>=(h|0)){h=l;break}if((n|0)!=(c[j+(k<<2)>>2]|0)){h=l;break}u=((c[j+(k+1<<2)>>2]|0)!=-1&1)+l|0;k=k+2|0;l=u}j=Yj(b,n,m,m,h+1|0,v)|0;if((j+9999|0)>>>0<20){g=j;break b}u=c[z>>2]|0;u=c[(c[u+(j<<5)+28>>2]|0)+((e[u+(j<<5)+22>>1]|0)+-1<<2)>>2]|0;h=c[x>>2]|0;c[x>>2]=h+1;c[(c[p>>2]|0)+(h<<2)>>2]=u;h=o;while(1){if((h|0)>=(k|0))break;c[(c[y>>2]|0)+(h<<2)>>2]=j;h=h+2|0}h=c[w>>2]|0;o=k;g=g+1|0}j=0;d:while(1){if((j|0)>=(h|0))break;l=c[(c[y>>2]|0)+(j<<2)>>2]|0;m=(c[z>>2]|0)+(l<<5)|0;k=j;while(1){if((k|0)>=(h|0)){j=k;continue d}j=c[y>>2]|0;if((l|0)!=(c[j+(k<<2)>>2]|0)){j=k;continue d}j=c[j+(k+1<<2)>>2]|0;if((j|0)!=-1){h=Zj(m,(c[z>>2]|0)+(((j|0)<0?-2-j|0:j)<<5)|0,b,1,j>>>31)|0;if((h+9999|0)>>>0<20){g=h;break b}v=c[x>>2]|0;c[x>>2]=v+1;c[(c[p>>2]|0)+(v<<2)>>2]=h;h=c[w>>2]|0}k=k+2|0}}c[d+52>>2]=g;break a}while(0);_j(b,d,0)|0;Hb(a,A)}}else g=0;while(0);i=B;return g|0}function Xj(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;e=c[b>>2]|0;if((d|0)>=(e|0))if((d|0)<=(e|0)){e=c[a+4>>2]|0;d=c[b+4>>2]|0;if((e|0)<(d|0))d=-1;else d=(e|0)>(d|0)&1}else d=1;else d=-1;return d|0}function Yj(d,f,g,h,i,j){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;s=d+20|0;k=c[s>>2]|0;l=k+-1|0;r=c[d+76>>2]|0;t=d+28|0;p=c[t>>2]|0;q=c[d+80>>2]|0;if((((p|0)<(c[d+48>>2]|0)?(k|0)<(c[d+44>>2]|0):0)?(u=c[r+(l<<5)+28>>2]|0,m=e[r+(l<<5)+24>>1]|0,n=u,(m+i+(u-(c[d+84>>2]|0)>>2)|0)<(c[d+52>>2]|0)):0)?(o=r+(f<<5)+22|0,!((i|0)<1?1:(e[o>>1]|0)>=(e[r+(f<<5)+24>>1]|0))):0){c[q+(p*28|0)+12>>2]=g;c[q+(p*28|0)+8>>2]=g;c[q+(p*28|0)+20>>2]=h;c[q+(p*28|0)+16>>2]=h;a[q+(p*28|0)+24>>0]=0;b[q+(p*28|0)>>1]=f;b[q+(p*28|0)+2>>1]=k^f;a[q+(p*28|0)+25>>0]=0;b[r+(k<<5)+24>>1]=i;u=r+(k<<5)+22|0;b[u>>1]=0;c[r+(k<<5)>>2]=g;c[r+(k<<5)+4>>2]=g;c[r+(k<<5)+8>>2]=h;c[r+(k<<5)+12>>2]=h;a[r+(k<<5)+16>>0]=0;l=n+(m<<2)|0;c[r+(k<<5)+28>>2]=l;b[r+(k<<5)+20>>1]=64;c[j>>2]=g-h+(c[j>>2]|0);b[q+(p*28|0)+4+(((k|0)<(f|0)&1)<<1)>>1]=b[o>>1]|0;b[q+(p*28|0)+4+(((k|0)>(f|0)&1)<<1)>>1]=b[u>>1]|0;n=b[o>>1]|0;b[o>>1]=n+1<<16>>16;c[(c[r+(f<<5)+28>>2]|0)+((n&65535)<<2)>>2]=p;n=b[u>>1]|0;b[u>>1]=n+1<<16>>16;c[l+((n&65535)<<2)>>2]=p;n=r+(f<<5)|0;l=r+(f<<5)+8|0;c[j>>2]=(c[l>>2]|0)-(c[n>>2]|0)+(c[j>>2]|0);m=(c[l>>2]|0)+h|0;c[l>>2]=m;l=c[n>>2]|0;if((l|0)<(m|0)){c[n>>2]=m;l=m}c[j>>2]=l-m+(c[j>>2]|0);c[t>>2]=(c[t>>2]|0)+1;c[s>>2]=(c[s>>2]|0)+1}else k=-9993;return k|0}function Zj(a,d,f,g,h){a=a|0;d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=c[f+76>>2]|0;A=a-z|0;s=A>>5;z=d-z|0;w=z>>5;x=f+28|0;i=c[x>>2]|0;j=c[f+80>>2]|0;k=j+(i*28|0)|0;y=c[f+44>>2]|0;if((((((((!((A|0)<0|(s|0)>=(y|0))?!((z|0)<0|(w|0)>=(y|0)):0)?!((i|0)<0?1:(i|0)>=(c[f+48>>2]|0)):0)?(l=a+28|0,m=c[f+84>>2]|0,n=(c[l>>2]|0)-m|0,(n|0)>=0):0)?(o=b[a+24>>1]|0,p=c[f+52>>2]|0,((o&65535)+(n>>2)|0)<=(p|0)):0)?(q=d+28|0,r=(c[q>>2]|0)-m|0,(r|0)>=0):0)?(t=b[d+24>>1]|0,((t&65535)+(r>>2)|0)<=(p|0)):0)?(u=a+22|0,(e[u>>1]|0)<(o&65535)):0)?(v=d+22|0,(e[v>>1]|0)<(t&65535)):0){c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;A=(s|0)<(w|0);b[k>>1]=A?s:w;b[j+(i*28|0)+2>>1]=s^w;k=b[u>>1]|0;c[(c[l>>2]|0)+((k&65535)<<2)>>2]=i;c[(c[q>>2]|0)+((e[v>>1]|0)<<2)>>2]=i;b[u>>1]=k+1<<16>>16;b[j+(i*28|0)+4+(((s|0)>(w|0)&1)<<1)>>1]=k;k=b[v>>1]|0;b[v>>1]=k+1<<16>>16;b[j+(i*28|0)+4+((A&1)<<1)>>1]=k;c[j+(i*28|0)+12>>2]=g;c[j+(i*28|0)+8>>2]=g;c[j+(i*28|0)+20>>2]=h;c[j+(i*28|0)+16>>2]=h;k=a+8|0;c[k>>2]=(c[k>>2]|0)+h;A=d+8|0;j=(c[A>>2]|0)+h|0;c[A>>2]=j;k=c[k>>2]|0;if((c[a>>2]|0)<(k|0))c[a>>2]=k;if((c[d>>2]|0)<(j|0))c[d>>2]=j;c[x>>2]=(c[x>>2]|0)+1}else i=-9993;return i|0}function _j(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;u=f+48|0;v=f+44|0;w=d+28|0;x=d+80|0;y=d+20|0;z=d+76|0;A=(g|0)==0;h=c[u>>2]|0;while(1){B=h+-1|0;if((h|0)<=0){C=24;break}m=c[(c[v>>2]|0)+(B<<2)>>2]|0;if((m|0)<0){h=-9997;break}h=c[w>>2]|0;if((m|0)>=(h|0)){h=-9997;break}n=c[x>>2]|0;t=n+(m*28|0)|0;q=b[t>>1]|0;r=q&65535;q=(b[n+(m*28|0)+2>>1]^q)&65535;if((m+1|0)!=(h|0)){h=-9997;break}s=c[y>>2]|0;if(!((r|0)<(s|0)&(q|0)<(s|0))){h=-9997;break}i=c[z>>2]|0;s=i+(r<<5)|0;o=i+(q<<5)|0;j=i+(q<<5)+22|0;h=b[j>>1]|0;k=c[i+(q<<5)+28>>2]|0;if((c[k+((h&65535)+-1<<2)>>2]|0)!=(m|0)){h=-9997;break}p=i+(r<<5)+22|0;l=c[i+(r<<5)+28>>2]|0;if((c[l+((e[p>>1]|0)+-1<<2)>>2]|0)!=(m|0)){h=-9997;break}b[j>>1]=h+-1<<16>>16;h=(b[p>>1]|0)+-1<<16>>16;b[p>>1]=h;j=b[j>>1]|0;c[k+((j&65535)<<2)>>2]=0;c[l+((h&65535)<<2)>>2]=0;n=c[n+(m*28|0)+16>>2]|0;k=i+(q<<5)+8|0;c[k>>2]=(c[k>>2]|0)-n;k=i+(r<<5)+8|0;c[k>>2]=(c[k>>2]|0)-n;if(j<<16>>16==0?(q|0)>=(c[d>>2]|0):0){if((q+1|0)!=(c[y>>2]|0)){h=-9997;break};c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;c[o+24>>2]=0;c[o+28>>2]=0;c[y>>2]=(c[y>>2]|0)+-1;h=b[p>>1]|0}if(h<<16>>16==0?(r|0)>=(c[d>>2]|0):0){if((r+1|0)!=(c[y>>2]|0)){h=-9997;break};c[s>>2]=0;c[s+4>>2]=0;c[s+8>>2]=0;c[s+12>>2]=0;c[s+16>>2]=0;c[s+20>>2]=0;c[s+24>>2]=0;c[s+28>>2]=0;c[y>>2]=(c[y>>2]|0)+-1}if(!A?(r|0)<(c[d>>2]|0):0){j=g+(r*176|0)+100|0;i=a[j>>0]|0;h=i<<24>>24;switch((c[s>>2]|0)-(c[k>>2]|0)|0){case 0:{h=i<<24>>24==2?0:h;break}case 1:{h=2;break}default:{}}a[j>>0]=h};c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;c[t+20>>2]=0;c[t+24>>2]=0;c[w>>2]=(c[w>>2]|0)+-1;h=B}if((C|0)==24){c[u>>2]=0;c[f+52>>2]=0;c[f+56>>2]=0;h=0}return h|0}function $j(d,f,g,h,i,j,k,l){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;v=d+76|0;x=c[v>>2]|0;q=(i+-5|0)>>>0<4;do if(q|(c[x+(f<<5)+8>>2]|0)!=0){n=(h&2)==0;if(!(n|((i|0)!=4?1:(c[c[d+164>>2]>>2]&16|0)==0))){er(j|0,0,192)|0;c[k>>2]=-2;c[l>>2]=0;if((g|0)==(f|0)){m=2;break}o=d+80|0;p=x+(g<<5)+28|0;q=e[x+(g<<5)+22>>1]|0;i=0;m=0;while(1){if((i|0)==(q|0))break;n=(e[(c[o>>2]|0)+((c[(c[p>>2]|0)+(i<<2)>>2]|0)*28|0)+2>>1]|0)^g;if((n|0)!=(f|0))m=((c[(c[v>>2]|0)+(n<<5)>>2]|0)>0&1)+m|0;i=i+1|0}if(!m){m=0;break}if((b[x+(g<<5)+20>>1]&h)<<16>>16==h<<16>>16){m=ak(d,g,h)|0;if((m+9999|0)>>>0<20)break;r=(m|0)==-2?g:m}else{r=g;m=-2}if((b[x+(f<<5)+20>>1]&h)<<16>>16==h<<16>>16){n=ak(d,f,h)|0;if((n+9999|0)>>>0<20){m=n;break}k=(n|0)==-2?f:n}else{k=f;n=-2}i=(m|0)!=-2;if(i&(m|0)==(n|0)){m=1;break}if(i){m=Yj(d,m,1,0,1,l)|0;if((m+9999|0)>>>0<20)break;c[j+180>>2]=m;a[j+188>>0]=1;p=1}else p=0;q=(n|0)==-2;if(q){m=Yj(d,f,1,0,1,l)|0;if((m+9999|0)>>>0<20)break;c[j+180+(p<<2)>>2]=m;a[j+188+p>>0]=1;o=1}else o=0;if(!p){if(i){m=-9995;break}a[j+176>>0]=bk(d,g,k,j,l,0)|0;c[j+168>>2]=g;m=1}else m=0;if(!o){if(q){m=-9995;break}a[j+176+m>>0]=bk(d,n,r,j+(m*84|0)|0,l,0)|0;c[j+168+(m<<2)>>2]=n}m=(c[l>>2]&-2147483647|0)==0?4:-9992;break}if(!q){if(((g|f|0)>-1&(i|0)==9?(o=b[x+(g<<5)+20>>1]|0,o&52):0)?b[x+(f<<5)+20>>1]&52:0){if(o&16?(c[x+(g<<5)+8>>2]|0)==((e[x+(g<<5)+22>>1]|0)<<1|0):0){m=0;break}er(j|0,0,192)|0;c[k>>2]=-2;c[l>>2]=0;m=Yj(d,f,1,0,1,l)|0;if((m+9999|0)>>>0<20)break;c[j+180>>2]=m;a[j+188>>0]=1;a[j+176>>0]=bk(d,g,f,j,l,0)|0;c[j+168>>2]=g;m=4;break}c[l>>2]=0;er(j|0,0,192)|0;c[k>>2]=-2;if(n){m=Yj(d,f,1,0,1,l)|0;if((m+9999|0)>>>0<20)break;c[j+180>>2]=m;a[j+188>>0]=1;a[j+176>>0]=bk(d,g,f,j,l,0)|0;c[j+168>>2]=g}else{m=ck(d,g,16)|0;if((m|0)==-2)n=0;else{m=Aj(d,m,1,k)|0;if((m+9999|0)>>>0<20)break;c[l>>2]=(c[l>>2]|0)+m;m=0;while(1)if((c[k+(m*36|0)>>2]|0)==-2){n=m;break}else m=m+1|0}m=ck(d,f,16)|0;if((m|0)!=-2){m=Aj(d,m,1,k+(n*36|0)|0)|0;if((m+9999|0)>>>0<20)break;c[l>>2]=(c[l>>2]|0)+m;m=n;while(1)if((c[k+(m*36|0)>>2]|0)==-2){n=m;break}else m=m+1|0}m=ck(d,g,4)|0;if((m|0)!=-2){m=Aj(d,m,1,k+(n*36|0)|0)|0;if((m+9999|0)>>>0<20)break;c[l>>2]=(c[l>>2]|0)+m;m=n;while(1)if((c[k+(m*36|0)>>2]|0)==-2){n=m;break}else m=m+1|0}m=ck(d,f,4)|0;if((m|0)!=-2){m=Aj(d,m,0,k+(n*36|0)|0)|0;if((m+9999|0)>>>0<20)break;c[l>>2]=(c[l>>2]|0)+m;m=n;while(1)if((c[k+(m*36|0)>>2]|0)==-2)break;else m=m+1|0}m=Yj(d,f,1,0,1,l)|0;if((m+9999|0)>>>0<20)break;c[j+180>>2]=m;a[j+188>>0]=1;a[j+176>>0]=bk(d,g,f,j,l,0)|0;c[j+168>>2]=g}return ((c[l>>2]&-2147483647|0)==0?4:-9992)|0}w=(i|2|0)==7;er(j|0,0,192)|0;c[k>>2]=-2;c[l>>2]=0;u=d+80|0;r=x+(g<<5)+28|0;s=e[x+(g<<5)+22>>1]|0;o=0;t=0;n=0;while(1){if((t|0)==(s|0))break;q=c[u>>2]|0;i=c[(c[r>>2]|0)+(t<<2)>>2]|0;k=(e[q+(i*28|0)+2>>1]|0)^g;if(w){if((k|0)==(f|0))q=(c[q+(i*28|0)+16>>2]|0)<2;else q=0;i=(c[(c[v>>2]|0)+(k<<5)>>2]|0)>0&1;q=q&1}else{i=(c[q+(i*28|0)+16>>2]|0)>0&1;q=0}o=q+o|0;t=t+1|0;n=i+n|0}if(n|o){k=x+(f<<5)+28|0;r=e[x+(f<<5)+22>>1]|0;s=0;t=0;n=0;while(1){if((t|0)==(r|0))break;o=c[u>>2]|0;q=c[(c[k>>2]|0)+(t<<2)>>2]|0;i=(e[o+(q*28|0)+2>>1]|0)^f;if(w){if((i|0)==(g|0))o=(c[o+(q*28|0)+16>>2]|0)<2;else o=0;q=(c[(c[v>>2]|0)+(i<<5)>>2]|0)>0&1;o=o&1}else{q=(c[o+(q*28|0)+16>>2]|0)>0&1;o=0}s=o+s|0;t=t+1|0;n=q+n|0}if(n|s){if((b[x+(g<<5)+20>>1]&h)<<16>>16==h<<16>>16?(m=ak(d,g,h)|0,(m|0)!=-9995):0){if((m+9999|0)>>>0<20)break;r=(m|0)==-2?g:m}else{r=g;m=-2}if((b[x+(f<<5)+20>>1]&h)<<16>>16==h<<16>>16?(p=ak(d,f,h)|0,(p|0)!=-9995):0){if((p+9999|0)>>>0<20){m=p;break}k=(p|0)==-2?f:p}else{k=f;p=-2}i=(m|0)!=-2;o=i&(m|0)==(p|0);n=o?2:1;i=w^i;if(i)q=0;else{m=Yj(d,r,n,0,1,l)|0;if((m+9999|0)>>>0<20)break;c[j+180>>2]=m;a[j+188>>0]=1;q=1}p=w^(p|0)!=-2;if(o|p)n=p&1^1;else{m=Yj(d,k,n,0,1,l)|0;if((m+9999|0)>>>0<20)break;c[j+180+(q<<2)>>2]=m;a[j+188+q>>0]=1;n=1}if(!q){if(!i){m=-9995;break}a[j+176>>0]=bk(d,r,k,j,l,s)|0;c[j+168>>2]=r;m=1}else m=0;if(!n){if(!p){m=-9995;break}a[j+176+m>>0]=bk(d,k,r,j+(m*84|0)|0,l,s)|0;c[j+168+(m<<2)>>2]=k}m=(c[l>>2]&-2147483647|0)==0?4:-9992}else m=0}else m=0}else m=0;while(0);return m|0}function ak(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;a:do if((c[d>>2]|0)>(f|0)){l=c[d+76>>2]|0;h=b[l+(f<<5)+22>>1]|0;m=g<<16>>16==2?4:g<<16>>16==8?16:0;if(h<<16>>16?(b[l+(f<<5)+20>>1]&g)<<16>>16==g<<16>>16:0){k=c[d+80>>2]|0;j=c[l+(f<<5)+28>>2]|0;h=h&65535;while(1){i=h;h=h+-1|0;g=c[j+(h<<2)>>2]|0;d=e[k+(g*28|0)+2>>1]^f;if((e[l+(d<<5)+20>>1]|0)==(m|0))break;if((i|0)<=1){d=-9995;break a}}d=(a[k+(g*28|0)+25>>0]|0)==0?d:-2}else d=-9995}else d=(c[d+20>>2]|0)>(f|0)?-2:-9993;while(0);return d|0}function bk(a,d,f,g,h,i){a=a|0;d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;o=c[a+76>>2]|0;p=o+(d<<5)|0;c[g>>2]=c[p>>2];c[p>>2]=(c[p>>2]|0)+1;c[h>>2]=(c[h>>2]|0)+1;if(!(b[o+(d<<5)+20>>1]&52)){m=a+80|0;n=o+(d<<5)+28|0;a=(i|0)!=0;i=e[o+(d<<5)+22>>1]|0;l=0;h=1;while(1){if((l|0)==(i|0))break;r=c[m>>2]|0;q=c[(c[n>>2]|0)+(l<<2)>>2]|0;j=r+(q*28|0)+8|0;k=h+1|0;c[g+(h<<2)>>2]=c[j>>2];h=(e[r+(q*28|0)+2>>1]|0)^d;if(a|(h|0)!=(f|0)?(b[o+(h<<5)+20>>1]&52)==0:0){q=c[o+(h<<5)>>2]|0;r=c[p>>2]|0;r=(q|0)<(r|0)?q:r;c[j>>2]=(r|0)<2?r:2}l=l+1|0;h=k}h=i+1|0}else h=1;return h|0}function ck(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;a:do if((c[d>>2]|0)>(f|0)){l=c[d+76>>2]|0;i=d+80|0;j=l+(f<<5)+28|0;k=e[l+(f<<5)+22>>1]|0;do{if((k|0)<=0){d=-2;break a}k=k+-1|0;h=c[i>>2]|0;d=c[(c[j>>2]|0)+(k<<2)>>2]|0}while((b[l+((e[h+(d*28|0)+2>>1]^f)<<5)+20>>1]|0)!=g<<16>>16);d=(a[h+(d*28|0)+25>>0]|0)==0?d:-2}else d=(c[d+20>>2]|0)>(f|0)?-2:-9993;while(0);return d|0}function dk(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;o=f+44|0;p=d+28|0;q=d+20|0;r=d+76|0;s=d+80|0;t=(g|0)==0;f=c[f+48>>2]|0;while(1){n=f+-1|0;if((f|0)<=0){f=0;break}i=c[(c[o>>2]|0)+(n<<2)>>2]|0;if((i|0)<0){f=-9997;break}if((i|0)>=(c[p>>2]|0)){f=-9997;break}j=c[s>>2]|0;f=b[j+(i*28|0)>>1]|0;k=f&65535;f=(b[j+(i*28|0)+2>>1]^f)&65535;m=c[d>>2]|0;if((k|0)>=(m|0)|(f|0)<(m|0)){f=-9997;break}if((f|0)>=(c[q>>2]|0)){f=-9997;break}l=c[r>>2]|0;if((c[(c[l+(f<<5)+28>>2]|0)+((e[j+(i*28|0)+6>>1]|0)<<2)>>2]|0)!=(i|0)){f=-9997;break}if((c[(c[l+(k<<5)+28>>2]|0)+((e[j+(i*28|0)+4>>1]|0)<<2)>>2]|0)!=(i|0)){f=-9997;break}if(t){f=n;continue}m=g+(k*176|0)+100|0;h=a[m>>0]|0;f=h<<24>>24;switch((c[l+(k<<5)>>2]|0)-(c[l+(k<<5)+8>>2]|0)+(c[j+(i*28|0)+16>>2]|0)|0){case 0:{f=h<<24>>24==2?0:f;break}case 1:{f=2;break}default:{}}a[m>>0]=f;f=n}return f|0}function ek(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;q=d+76|0;r=d+80|0;a:do if(!(g&64)){k=1;while(1){if((k|0)<=-1)break;g=a[f+176+k>>0]|0;b:do if(g<<24>>24){j=c[q>>2]|0;i=c[f+168+(k<<2)>>2]|0;c[j+(i<<5)>>2]=c[f+(k*84|0)>>2];g=(g<<24>>24)+-1|0;h=j+(i<<5)+22|0;i=j+(i<<5)+28|0;j=0;while(1){if((j|0)>=(g|0))break b;if((j|0)>=(e[h>>1]|0))break b;p=j+1|0;c[(c[r>>2]|0)+((c[(c[i>>2]|0)+(j<<2)>>2]|0)*28|0)+8>>2]=c[f+(k*84|0)+(p<<2)>>2];j=p}}while(0);k=k+-1|0}m=d+28|0;k=d+20|0;d=1;while(1){if((d|0)<=-1)break a;if(a[f+188+d>>0]|0){g=c[f+180+(d<<2)>>2]|0;h=c[q>>2]|0;i=h+(g<<5)+22|0;j=h+(g<<5)+28|0;l=0;while(1){if((l|0)>=(e[i>>1]|0))break;s=c[r>>2]|0;n=c[(c[j>>2]|0)+(l<<2)>>2]|0;p=s+(n*28|0)|0;n=e[s+(n*28|0)+2>>1]^g;s=c[q>>2]|0;t=s+(n<<5)+22|0;o=(b[t>>1]|0)+-1<<16>>16;b[t>>1]=o;c[(c[s+(n<<5)+28>>2]|0)+((o&65535)<<2)>>2]=0;c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;c[p+12>>2]=0;c[p+16>>2]=0;c[p+20>>2]=0;c[p+24>>2]=0;c[m>>2]=(c[m>>2]|0)+-1;l=l+1|0}c[h+(g<<5)>>2]=0;c[k>>2]=(c[k>>2]|0)+-1}d=d+-1|0}}else{m=d+28|0;k=d+20|0;d=1;while(1){if((d|0)<=-1){k=1;break}if(a[f+188+d>>0]|0){g=c[f+180+(d<<2)>>2]|0;h=c[q>>2]|0;i=h+(g<<5)+22|0;j=h+(g<<5)+28|0;l=0;while(1){if((l|0)>=(e[i>>1]|0))break;w=c[r>>2]|0;s=c[(c[j>>2]|0)+(l<<2)>>2]|0;t=w+(s*28|0)|0;u=e[w+(s*28|0)+2>>1]^g;v=c[q>>2]|0;s=c[w+(s*28|0)+16>>2]|0;w=v+(u<<5)+8|0;c[w>>2]=(c[w>>2]|0)-s;w=v+(u<<5)|0;c[w>>2]=(c[w>>2]|0)-s;w=v+(u<<5)+22|0;s=(b[w>>1]|0)+-1<<16>>16;b[w>>1]=s;c[(c[v+(u<<5)+28>>2]|0)+((s&65535)<<2)>>2]=0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;c[t+20>>2]=0;c[t+24>>2]=0;c[m>>2]=(c[m>>2]|0)+-1;l=l+1|0}c[h+(g<<5)>>2]=0;c[k>>2]=(c[k>>2]|0)+-1}d=d+-1|0}while(1){if((k|0)<=-1)break a;w=a[f+176+k>>0]|0;g=w<<24>>24;c:do if(w<<24>>24?(n=c[q>>2]|0,o=c[f+168+(k<<2)>>2]|0,p=c[f+(k*84|0)>>2]|0,(c[n+(o<<5)+8>>2]|0)<=(p|0)):0){c[n+(o<<5)>>2]=p;g=g+-1|0;h=n+(o<<5)+22|0;i=n+(o<<5)+28|0;j=0;while(1){if((j|0)>=(g|0))break c;if((j|0)>=(e[h>>1]|0))break c;w=j+1|0;c[(c[r>>2]|0)+((c[(c[i>>2]|0)+(j<<2)>>2]|0)*28|0)+8>>2]=c[f+(k*84|0)+(w<<2)>>2];j=w}}while(0);k=k+-1|0}}while(0);return 0}function fk(a,d,e,f,g,h,i,j){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;w=f+24|0;B=c[w>>2]|0;x=c[B+128>>2]|0;B=c[B+124>>2]|0;A=(B+x|0)/2|0;B=(x-B|0)/2|0;x=i+176|0;b[x>>1]=272;y=i+174|0;b[y>>1]=4;z=i+172|0;b[z>>1]=512;v=Kj(d,e,i,64,31,1)|0;t=Kj(d,e,i,17,40960,-1)|0;q=Kj(d,e,i,607,16736223,-1)|0;b[x>>1]=272;b[y>>1]=4;b[z>>1]=512;p=Lj(d,e,i,607,16777183)|0;r=(q|0)>=(e|0);u=(t|0)<(e|0);a:do if(!(u|r^1)){o=c[(c[w>>2]|0)+128>>2]|0;l=0;m=0;while(1){k=Uj(a,i,j,f,d,e,q,t,9)|0;if((k+9999|0)>>>0<20)break a;if(!(k&1)){o=l;break}l=l+1|0;k=o;o=c[(c[w>>2]|0)+128>>2]|0;if((k|0)>(o+1|0))m=((k+1-o|0)/2|0)+m|0;if((l|0)>=(g|0)){o=l;break}}if(!((v|0)<(e|0)|(o|0)==0)?(g=c[w>>2]|0,n=c[g+128>>2]|0,g=c[g+124>>2]|0,(n|0)>(((g|0)>-1?g:0-g|0)|0)):0)while(1){l=n;while(1){k=Uj(a,i,j,f,d,e,q,v,9)|0;if((k+9999|0)>>>0<20)break a;if(!(k&1)){k=o;s=15;break a}k=c[(c[w>>2]|0)+128>>2]|0;if((l|0)>(k|0))break;else l=k}n=k;m=((l-k|0)/2|0)+m|0}else{k=o;s=15}}else{k=0;m=0;s=15}while(0);if((s|0)==15){if((p|0)<(e|0))l=0;else l=Mj(d,e,p,i)|0;if(r){s=Mj(d,e,q,i)|0;l=(l|0)==0&(s|0)!=0?s:l}if(!u){u=Mj(d,e,t,i)|0;l=(l|0)==0&(u|0)!=0?u:l}if((v|0)>=(e|0)){i=Mj(d,e,v,i)|0;l=(l|0)==0&(i|0)!=0?i:l}b[x>>1]=0;b[y>>1]=0;b[z>>1]=0;if(!l){z=c[w>>2]|0;y=c[z+128>>2]|0;z=c[z+124>>2]|0;if((A-B|0)==(((z+y|0)/2|0)-((y-z|0)/2|0)|0)){if(h)c[h>>2]=m<<1}else k=-9997}else k=l}return k|0}function gk(a,d,e,f,g,h,i,j){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;w=h+24|0;A=c[w>>2]|0;B=c[A+128>>2]|0;A=c[A+124>>2]|0;z=(A+B|0)/2|0;A=B-A|0;B=i+176|0;b[B>>1]=272;x=i+174|0;b[x>>1]=4;y=i+172|0;b[y>>1]=512;v=Kj(d,e,i,64,31,1)|0;u=Kj(d,e,i,607,16777183,-1)|0;s=Lj(d,e,i,607,16777183)|0;a:do if((s|0)<(e|0)){m=0;k=0;l=0;t=19}else{b:do if((v|0)>=(e|0)){r=h+28|0;p=c[(c[w>>2]|0)+128>>2]|0;o=b[(c[r>>2]|0)+46>>1]|0;l=0;k=0;c:while(1){q=o;m=k;while(1){k=Uj(a,i,j,h,d,e,s,v,9)|0;if((k+9999|0)>>>0<20)break a;o=b[(c[r>>2]|0)+46>>1]|0;k=k&1;if((o<<16>>16|0)!=(k+(q<<16>>16)|0)){k=-9988;break a}if(!k){p=m;break c}k=m+1|0;m=c[(c[w>>2]|0)+128>>2]|0;if((p|0)>(m+1|0)){q=p;break}else{q=o;p=m;m=k}}p=m;l=((q+1-m|0)/2|0)+l|0}if(!((u|0)<(e|0)|(p|f|0)==0)?(f=c[w>>2]|0,n=c[f+128>>2]|0,f=c[f+124>>2]|0,(n|0)>(((f|0)>-1?f:0-f|0)|0)):0)while(1){m=n;while(1){k=Uj(a,i,j,h,d,e,u,v,9)|0;if((k+9999|0)>>>0<20)break a;if((b[(c[r>>2]|0)+46>>1]|0)!=o<<16>>16){k=-9988;break a}if(!(k&1)){k=p;break b}k=c[(c[w>>2]|0)+128>>2]|0;if((m|0)>(k|0))break;else m=k}n=k;l=((m-k|0)/2|0)+l|0}else k=p}else{l=0;k=0}while(0);m=l;l=Mj(d,e,s,i)|0;t=19}while(0);if((t|0)==19){if((u|0)>=(e|0)){u=Mj(d,e,u,i)|0;l=(l|0)==0&(u|0)!=0?u:l}if((v|0)>=(e|0)){i=Mj(d,e,v,i)|0;l=(l|0)==0&(i|0)!=0?i:l}b[B>>1]=0;b[x>>1]=0;b[y>>1]=0;if(!l){B=c[w>>2]|0;y=c[B+128>>2]|0;B=c[B+124>>2]|0;if((z+((A|0)/-2|0)+((B+y|0)/-2|0)+((y-B|0)/2|0)|0)==(k|0)){if(g)c[g>>2]=m<<1}else k=-9997}else k=l}return k|0}function hk(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;j=i;i=i+16|0;h=j;f=(e|0)!=0;if(f){er(e|0,0,132)|0;g=0}else g=0;while(1){if((g|0)>=(d|0))break;b[a+(g*176|0)+104>>1]=lj(a,g,e,h,0)|0;g=g+1|0}if(f)f=c[e+128>>2]|0;else f=0;i=j;return f|0}function ik(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+16|0;o=p;c[o>>2]=0;l=c[e+28>>2]|0;m=(c[l+60>>2]&4124|0)==4124;k=e+20|0;h=c[k>>2]|0;if(h){if((c[e>>2]|0)>(d|0)){Cq(h);h=e+16|0;j=c[h>>2]|0;if(j|0){Cq(j);c[h>>2]=0};c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;c[e+28>>2]=0;n=6}}else n=6;if((n|0)==6?(n=Bq(d)|0,c[k>>2]=n,n|0):0){c[e>>2]=d;c[e+4>>2]=0}k=e+24|0;j=c[k>>2]|0;h=(c[j+100>>2]|0)+(c[j+4>>2]|0)|0;if(h)if((Fj(b,d,j,l)|0)==(h|0)){j=l+56|0;c[j>>2]=c[j>>2]|(h|0)>0;j=c[k>>2]|0;n=11}else{h=-9997;n=30}else{h=0;n=11}a:do if((n|0)==11){if(m&(c[j>>2]|0)!=0){h=gk(a,b,d,1,o,e,f,g)|0;if((h+9999|0)>>>0<20){n=30;break}j=l+56|0;c[j>>2]=c[j>>2]|((h|0)>0?2:0);j=c[k>>2]|0}j=c[j+124>>2]|0;do if((j|0)>0){h=Oj(b,d,e,j)|0;if((h+9999|0)>>>0<20){n=30;break a}j=l+56|0;c[j>>2]=c[j>>2]|((h|0)>0?8:0);k=c[(c[k>>2]|0)+124>>2]|0;if(m&(k|0)>0){h=Tj(a,b,d,e,k,o,f,g)|0;if((h+9999|0)>>>0<20){n=30;break a}if((h|0)>0){if((Oj(b,d,e,h)|0)!=(h|0)){h=-9997;n=30;break a}c[j>>2]=c[j>>2]|16}}}else{if((j|0)>=0){j=l+56|0;break}h=Rj(b,d,e,0-j|0)|0;if((h+9999|0)>>>0<20){n=30;break a}j=l+56|0;c[j>>2]=c[j>>2]|((h|0)>0?4:0);k=c[(c[k>>2]|0)+124>>2]|0;if(m&(k|0)<0){h=fk(a,b,d,e,0-k|0,o,f,g)|0;if((h+9999|0)>>>0<20){n=30;break a}if((h|0)>0){if((Rj(b,d,e,h)|0)!=(h|0)){h=-9997;n=30;break a}c[j>>2]=c[j>>2]|32}}}while(0);c[j>>2]=(c[o>>2]|0?64:0)|c[j>>2]}while(0);if((n|0)==30)h=(h+9999|0)>>>0<20?h:-9997;i=p;return h|0}function jk(e,f,g,h,j,k,l,m,n,o,p){e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;var q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;G=i;i=i+432|0;q=G+424|0;y=G+208|0;C=G+184|0;D=G+164|0;r=G+32|0;F=G;E=(l|0)!=0;A=l+60|0;v=E?A:m;z=l+64|0;x=E?z:n;c[C>>2]=0;c[C+4>>2]=0;c[C+8>>2]=0;c[C+12>>2]=0;c[C+16>>2]=0;c[C+20>>2]=0;c[D>>2]=0;c[D+4>>2]=0;c[D+8>>2]=0;c[D+12>>2]=0;c[D+16>>2]=0;c[F>>2]=0;c[F+4>>2]=0;c[F+8>>2]=0;c[F+12>>2]=0;c[F+16>>2]=0;c[F+20>>2]=0;c[F+24>>2]=0;c[F+28>>2]=0;n=0;p=0;m=0;while(1){if((n|0)>=(j|0)){n=p;w=m;B=11;break}o=g+(n*176|0)+100|0;if((((a[o>>0]|0)==2?(a[g+(n*176|0)+92>>0]|0)==2:0)?(a[g+(n*176|0)+72>>0]|0)==4:0)?(a[g+(n*176|0)+73>>0]|0)==4:0){p=p+1|0;if(!m){m=Dq(j,4)|0;if(!m){n=-9998;o=0;p=0;break}c[m+(n<<2)>>2]=2;a[o>>0]=0;w=g+(n*176|0)+94|0;a[w>>0]=(a[w>>0]|0)+1<<24>>24}}n=n+1|0}a:do if((B|0)==11){p=c[v>>2]|0;if((j|0)>1&(p&8|0)!=0){o=(j|0)/2|0;u=Dq(o,10)|0;c[C>>2]=u;t=Dq(j,4)|0;c[C+12>>2]=t;if((t|0)==0|(u|0)==0){n=-9998;o=0;p=0;m=w;break}c[C+8>>2]=o;c[C+16>>2]=j}if(E&(p&4|0)!=0){u=Dq(j,6)|0;c[D>>2]=u;if(!u){n=-9998;o=0;p=0;m=w;break}c[D+4>>2]=j}if(E){p=l+8|0;o=c[p>>2]|0;if(o|0)Cq(o);u=Dq(j<<1|1,2)|0;c[p>>2]=u;if(!u){n=-9998;o=0;p=0;m=w;break}u=l+44|0;t=b[u>>1]|0;c[u>>2]=0;c[u+4>>2]=0;c[u+8>>2]=0;c[u+12>>2]=0;b[u>>1]=t}u=kk(g,j,2,1,16,q)|0;if(u){t=mk(c[u+44>>2]|0)|0;if(t){c[u+164>>2]=v;c[u+168>>2]=x;c[u+184>>2]=k;c[u+180>>2]=e;Dj(u,g,j,1,0,0)|0;if(n|0){p=wj(u,t,g,j)|0;b:do if(w|0){m=0;while(1){if((m|0)>=(j|0))break b;o=c[w+(m<<2)>>2]|0;if(o|0){a[g+(m*176|0)+100>>0]=o;s=g+(m*176|0)+94|0;a[s>>0]=(a[s>>0]|0)+-1<<24>>24}m=m+1|0}}while(0);if((p+9999|0)>>>0<20){n=p;o=t;p=u;m=w;break}}p=wj(u,t,g,j)|0;if((p+9999|0)>>>0>=20){k=u+60|0;s=(c[k>>2]|0)+(p<<1)|0;c[k>>2]=s;s=(c[u+56>>2]|0)>(s|0)?43:11;if((E&(c[v>>2]&2048|0)!=0?hk(g,j,r)|0:0)?c[r+128>>2]|0:0){o=(b[l+44>>1]|0)+j|0;c[F+24>>2]=r;c[F+28>>2]=l;p=ik(f,g,j,F,u,t)|0;if((p+9999|0)>>>0<20){n=p;o=t;p=u;m=w;break}if(c[l+56>>2]|0?(Nj(u)|0,h|0):0)ir(h|0,g|0,o*176|0)|0}c:do if(c[v>>2]&8|0)do{p=yi(f,g,j,C,l,u,t)|0;if((p+9999|0)>>>0<20){n=p;o=t;p=u;m=w;break a}if(!p)break c;o=ok(f,u,g,j,C)|0;if((o+9999|0)>>>0<20){n=o;o=t;p=u;m=w;break a}c[x>>2]=c[x>>2]|16}while((p|0)>0);while(0);p=yj(u,t,g,j,y,s,0)|0;if((p+9999|0)>>>0<20){n=p;o=t;p=u;m=w}else{p=0;r=0;o=0;d:while(1){k=(r|0)!=0;m=0;q=p;while(1){n=0;while(1){p=Ii(f,g,j,l,C,u,t)|0;if((p|0)>0)n=n+1|0;else break}if(!(k|(n|0)==0))c[x>>2]=c[x>>2]|2;e=(n|0)!=0;if(!(n|q))n=m;else{n=qk(f,u,g,j,l,C)|0;if((n+9999|0)>>>0<20){o=t;p=u;m=w;break a}e:do if(c[v>>2]&8)while(1){n=yi(f,g,j,C,l,u,t)|0;if((n+9999|0)>>>0<20){o=t;p=u;m=w;break a}m=n+m|0;if((n|0)<=0)break e;n=qk(f,u,g,j,l,C)|0;if((n+9999|0)>>>0<20){o=t;p=u;m=w;break a}c[x>>2]=c[x>>2]|16}while(0);n=yj(u,t,g,j,y,s,0)|0;if((n+9999|0)>>>0<20){o=t;p=u;m=w;break a}n=n+m|0}m=(p|0)>-1;if(e&m){m=n;q=0}else break}if(!m)break;p=c[v>>2]|0;if(!(p&4)){B=79;break}n=k&(n|0)==0;f:do if(!(p&16)){if(n){B=79;break d}p=Fi(f,g,j,D,l,C,u,t)|0;if((p|0)<0)break d;if((p|0)<=0){B=78;break d}c[x>>2]=c[x>>2]|8}else{m=(o|0)!=0;if(m&n){B=79;break d}do if(m)m=o;else{p=Fi(f,g,j,D,l,C,u,t)|0;if((p|0)<0)break d;if((p|0)<=0){m=1;break}c[x>>2]=c[x>>2]|8;o=0;break f}while(0);p=Ei(f,g,j,D,l,C,u,t)|0;if((p|0)<0)break d;if((p|4|0)!=5)if(!p){B=78;break d}else{o=m;break}o=c[x>>2]|0;c[x>>2]=o|32;switch(p|0){case 0:{B=78;break d}case 5:break;default:{o=m;break f}}c[x>>2]=o|4128;p=5;o=m}while(0);r=r+1|0}if((B|0)==78){p=c[v>>2]|0;B=79}do if((B|0)==79){if(p&64|0){p=Gi(f,g,j,D,l,C,u)|0;if((p|0)<0)break;if((p|0)>0)c[x>>2]=c[x>>2]|128}if((E?(c[A>>2]&2048|0)!=0:0)?(c[z>>2]&49152|0)!=0:0){p=Hi(g,j,D,l)|0;p=(p|0)<0?p:0}else p=0}while(0);m=0;while(1){if((m|0)>=(j|0))break;o=a[g+(m*176|0)+92>>0]|0;n=0;while(1){if((n|0)>=(o|0))break;B=g+(m*176|0)+72+n|0;a[B>>0]=d[B>>0]&15;n=n+1|0}m=m+1|0}uk(u,g,j,0)|0;vk(u,0)|0;wk(u,g,j,0)|0;n=p;o=t;p=u;m=w}}else{n=p;o=t;p=u;m=w}}else{n=-9998;o=0;p=u;m=w}}else{n=-9998;o=0;p=0;m=w}}while(0);lk(p)|0;nk(o)|0;p=c[C>>2]|0;if(p|0)Cq(p);p=c[C+12>>2]|0;if(p|0)Cq(p);p=c[D>>2]|0;if(p|0)Cq(p);p=c[F+20>>2]|0;if(p|0?(Cq(p),H=F+16|0,I=c[H>>2]|0,I|0):0){Cq(I);c[H>>2]=0}if(E?(J=l+8|0,K=c[J>>2]|0,K|0):0){Cq(K);c[J>>2]=0}if(((j|0)==1&(n|0)==0?E&(b[g+104>>1]|0)==4096:0)?(b[l+44>>1]|0)==0:0){b[l+46>>1]=1;p=l+56|0;c[p>>2]=c[p>>2]|128;p=a[g+98>>0]|0;if(p<<24>>24){l=l+48+((p<<24>>24)+-1<<1)|0;b[l>>1]=(b[l>>1]|0)+1<<16>>16}if(h|0)ir(h|0,g|0,176)|0}if(m|0)Cq(m);i=G;return (n|0?n:j)|0}function kk(f,g,h,i,j,k){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;l=0;m=0;n=0;while(1){if((l|0)>=(g|0))break;C=(a[f+(l*176|0)+92>>0]|0)+m|0;D=((a[f+(l*176|0)+100>>0]|0)==2&1)+n|0;l=l+1|0;m=C;n=D}w=i+1|0;v=(m|0)/2|0;r=h+1+(g<<1)|0;u=i+3|0;t=(n|0)!=0&1;s=(_(r,u)|0)+g+v<>2]=D,(D|0)!=0):0)?(D=Dq(t,32)|0,F=l+76|0,c[F>>2]=D,(D|0)!=0):0)?(D=Dq(r,4)|0,x=l+84|0,c[x>>2]=D,(D|0)!=0):0){i=l+92|0;o=l+64|0;m=0;while(1){if(!((m|0)<(j|0)&(m|0)<16))break;p=Dq(n,8)|0;q=i+(m<<2)|0;c[q>>2]=p;if(!p){G=12;break}c[p>>2]=n;c[o>>2]=n;D=c[q>>2]|0;c[D+8>>2]=0;c[D+24>>2]=-2;c[D+32>>2]=-2;c[D+16>>2]=0;m=m+1|0}if((G|0)==12){lk(l)|0;l=0;break}c[l+88>>2]=0;c[l+160>>2]=0;c[l+156>>2]=m;n=c[x>>2]|0;m=c[F>>2]|0;c[m+28>>2]=n;i=0;while(1){if((i|0)>=(g|0))break;C=(a[f+(i*176|0)+92>>0]|0)+u|0;b[m+(i<<5)+24>>1]=C;C=n+((C&65535)<<2)|0;D=i+1|0;c[m+(D<<5)+28>>2]=C;n=C;i=D}c[l>>2]=g;c[l+4>>2]=0;c[l+16>>2]=0;c[l+12>>2]=0;c[l+8>>2]=h;c[l+40>>2]=w;c[l+20>>2]=g;c[l+44>>2]=t;c[l+24>>2]=v;c[l+48>>2]=s;c[l+52>>2]=r;D=0;o=0;i=0;n=0;m=0;while(1){if((D|0)>=(g|0))break;C=c[F>>2]|0;x=f+(D*176|0)+92|0;z=f+(D*176|0)+93|0;A=f+(D*176|0)+6|0;h=D&65535;y=C+(D<<5)+28|0;B=f+(D*176|0)+100|0;u=C;p=0;r=0;while(1){q=a[x>>0]|0;if((p|0)>=(q|0))break;w=e[f+(D*176|0)+8+(p<<1)>>1]|0;v=f+(w*176|0)+92|0;q=a[v>>0]|0;s=0;while(1){if((s|0)>=(q|0)){j=s;break}if((e[f+(w*176|0)+8+(s<<1)>>1]|0)==(D|0)){j=s;break}s=s+1|0}q=f+(D*176|0)+72+p|0;s=d[q>>0]|0;t=s&15;if((t+-1|0)>>>0>=3){a[q>>0]=s&240|1;t=1;i=i+1|0}if((w|0)>(D|0)){q=(a[z>>0]|0)-(a[x>>0]|0)|0;if((ii(a[A>>0]|0)|0)==0?(uo(a[A>>0]|0)|0)==0:0)s=0;else s=(a[B>>0]|0)==2&1;u=s+q|0;s=(a[f+(w*176|0)+93>>0]|0)-(a[v>>0]|0)|0;q=f+(w*176|0)+6|0;if((ii(a[q>>0]|0)|0)==0?(uo(a[q>>0]|0)|0)==0:0)q=0;else q=(a[f+(w*176|0)+100>>0]|0)==2&1;q=q+s|0;s=t+-1|0;if((s|0)>2){q=1;s=0}else{q=(u|0)<(q|0)?u:q;q=(q|0)<2?q:2}v=c[E>>2]|0;b[v+(o*28|0)>>1]=h;b[v+(o*28|0)+2>>1]=w^D;c[v+(o*28|0)+20>>2]=s;c[v+(o*28|0)+16>>2]=s;c[v+(o*28|0)+12>>2]=q;c[v+(o*28|0)+8>>2]=q;b[v+(o*28|0)+4>>1]=p;b[v+(o*28|0)+6>>1]=j;a[v+(o*28|0)+24>>0]=0;a[v+(o*28|0)+25>>0]=0;q=c[F>>2]|0;c[(c[q+(w<<5)+28>>2]|0)+(j<<2)>>2]=o;c[(c[y>>2]|0)+(p<<2)>>2]=o;o=o+1|0}else{q=u;s=c[(c[E>>2]|0)+((c[(c[u+(w<<5)+28>>2]|0)+(j<<2)>>2]|0)*28|0)+16>>2]|0}u=q;p=p+1|0;r=s+r|0}b[C+(D<<5)+22>>1]=p;q=(a[z>>0]|0)-q|0;if((ii(a[A>>0]|0)|0)==0?(uo(a[A>>0]|0)|0)==0:0)p=0;else p=(a[B>>0]|0)==2&1;B=p+q|0;c[C+(D<<5)+4>>2]=B;c[C+(D<<5)>>2]=B;c[C+(D<<5)+12>>2]=r;c[C+(D<<5)+8>>2]=r;b[C+(D<<5)+20>>1]=1;D=D+1|0;n=B+n|0;m=r+m|0}c[k>>2]=(i|0)/2|0;c[l+28>>2]=o;c[l+36>>2]=0;c[l+56>>2]=n;c[l+60>>2]=m}else G=9;while(0);if((G|0)==9){lk(l)|0;l=0}return l|0}function lk(a){a=a|0;var b=0,d=0,e=0;if(a|0){b=c[a+80>>2]|0;if(b|0)Cq(b);d=a+156|0;e=0;while(1){if(!((e|0)<16?(e|0)<(c[d>>2]|0):0))break;b=c[a+92+(e<<2)>>2]|0;if(b|0)Cq(b);e=e+1|0}d=a+76|0;b=c[d>>2]|0;do if(b|0){e=c[b+28>>2]|0;if(e){Cq(e);b=c[d>>2]|0;if(!b)break}Cq(b)}while(0);Cq(a)}return 0}function mk(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;d=(a<<1)+2|0;f=((d|0)/2|0)+1|0;f=((f|0)%2|0)+f|0;a=Dq(1,60)|0;if(((((((((a|0)!=0?(h=Dq(d,4)|0,c[a>>2]=h,(h|0)!=0):0)?(e=Dq(d,8)|0,c[a+4>>2]=e,(e|0)!=0):0)?(g=Dq(d,1)|0,c[a+8>>2]=g,(g|0)!=0):0)?(b=Dq(d,4)|0,c[a+12>>2]=b,(b|0)!=0):0)?(b=Dq(f,4)|0,c[a+20>>2]=b,(b|0)!=0):0)?(b=Dq(f,4)|0,c[a+36>>2]=b,(b|0)!=0):0)?(b=Dq(f,4)|0,c[a+44>>2]=b,(b|0)!=0):0)?(b=Dq(f,4)|0,c[a+24>>2]=b,(b|0)!=0):0){b=0;while(1){if((b|0)>=(d|0)){b=0;break}c[e+(b<<3)>>2]=-2;b=b+1|0}while(1){if((b|0)>=(d|0))break;c[h+(b<<2)>>2]=-2;b=b+1|0}er(g|0,0,d|0)|0;c[a+16>>2]=-1;c[a+32>>2]=f;c[a+28>>2]=d;c[a+40>>2]=0}else{nk(a)|0;a=0}return a|0}function nk(a){a=a|0;var b=0;if(a|0){b=c[a>>2]|0;if(b|0)Cq(b);b=c[a+4>>2]|0;if(b|0)Cq(b);Cq(c[a+8>>2]|0);b=c[a+12>>2]|0;if(b|0)Cq(b);b=c[a+20>>2]|0;if(b|0)Cq(b);b=c[a+24>>2]|0;if(b|0)Cq(b);b=c[a+36>>2]|0;if(b|0)Cq(b);b=c[a+44>>2]|0;if(b|0)Cq(b);Cq(a)}return 0} -function wb(a){a=a|0;var b=0;b=i;i=i+a|0;i=i+15&-16;return b|0}function xb(){return i|0}function yb(a){a=a|0;i=a}function zb(a,b){a=a|0;b=b|0;i=a;j=b}function Ab(a,b){a=a|0;b=b|0;if(!n){n=a;o=b}}function Bb(b){b=b|0;a[k>>0]=a[b>>0];a[k+1>>0]=a[b+1>>0];a[k+2>>0]=a[b+2>>0];a[k+3>>0]=a[b+3>>0]}function Cb(b){b=b|0;a[k>>0]=a[b>>0];a[k+1>>0]=a[b+1>>0];a[k+2>>0]=a[b+2>>0];a[k+3>>0]=a[b+3>>0];a[k+4>>0]=a[b+4>>0];a[k+5>>0]=a[b+5>>0];a[k+6>>0]=a[b+6>>0];a[k+7>>0]=a[b+7>>0]}function Db(a){a=a|0;C=a}function Eb(){return C|0}function Fb(a){a=a|0;var b=0;if(a|0?(b=c[a>>2]|0,b|0):0){Cq(b);c[a>>2]=0}return}function Gb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;a=c[a+32>>2]|0;a=(d+-1+a|0)/(a|0)|0;d=Dq(e,4)|0;c[b>>2]=d;do if(d){c[d>>2]=Dq(_(a,e)|0,2)|0;d=c[b>>2]|0;if(!(c[d>>2]|0)){if(d|0)Cq(d);c[b>>2]=0;d=0;break}else{d=1;while(1){if((d|0)>=(e|0))break;f=c[b>>2]|0;c[f+(d<<2)>>2]=(c[f+(d+-1<<2)>>2]|0)+(a<<1);d=d+1|0}c[b+8>>2]=a;c[b+4>>2]=e;d=1;break}}else d=0;while(0);return d|0}function Hb(a,b){a=a|0;b=b|0;var d=0,e=0;if(b|0?(d=c[b>>2]|0,d|0):0){a=c[d>>2]|0;if(a){Cq(a);d=c[b>>2]|0;if(d|0)e=5}else e=5;if((e|0)==5)Cq(d);c[b>>2]=0}return}function Ib(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;o=(c[e+4>>2]|0)+1|0;if(!(c[e+20>>2]|0))p=0;else p=(c[e+28>>2]|0)+1|0;if(!(c[e+32>>2]|0))m=0;else m=(c[e+40>>2]|0)+1|0;n=c[e+52>>2]|0;n=(n|0)==0?0:n+1|0;if(!(c[e+56>>2]|0))q=0;else q=(c[e+64>>2]|0)+1|0;f=a;g=f+76|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[a+20>>2]=d;f=d+1|0;g=Dq(o,2)|0;c[a>>2]=g;h=Dq(f,2)|0;c[a+32>>2]=h;i=Dq(f,2)|0;c[a+28>>2]=i;j=(p|0)!=0;if(j){l=Dq(p,2)|0;c[a+36>>2]=l}else l=0;k=(m|0)!=0;if(k){d=Dq(m,2)|0;c[a+48>>2]=d}else d=0;if(n|0)c[a+52>>2]=Dq(n,4)|0;if(q|0)c[a+64>>2]=Dq(q,1)|0;c[a+4>>2]=0;c[a+8>>2]=c[e+12>>2];c[a+12>>2]=o;c[a+40>>2]=0;c[a+44>>2]=p;c[a+56>>2]=0;c[a+60>>2]=n;c[a+68>>2]=0;c[a+72>>2]=n;c[a+16>>2]=f;c[a+24>>2]=0;b[i>>1]=0;b[h>>1]=0;return ((g|0)==0|j&(l|0)==0|k&(d|0)==0)&1^1|0}function Jb(a){a=a|0;var b=0;if(a|0){b=c[a>>2]|0;if(b|0)Cq(b);b=c[a+32>>2]|0;if(b|0)Cq(b);b=c[a+28>>2]|0;if(b|0)Cq(b);b=c[a+36>>2]|0;if(b|0)Cq(b);b=c[a+48>>2]|0;if(b|0)Cq(b);b=c[a+52>>2]|0;if(b|0)Cq(b);Cq(c[a+64>>2]|0);b=a;a=b+76|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(a|0))}return}function Kb(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0)Cq(b);c[a>>2]=0;return}function Lb(a,b){a=a|0;b=b|0;var d=0;d=Dq(b,2)|0;c[a+4>>2]=d;b=Dq(b,2)|0;c[a>>2]=b;return ((b|0)==0|(d|0)==0)&1^1|0}function Mb(a){a=a|0;var b=0,d=0;if(a|0){b=a+4|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=c[a>>2]|0;if(b|0){Cq(b);c[a>>2]=0}}return}function Nb(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0;f=b[46074]|0;g=a+4|0;h=0;i=1;while(1){if((h|0)>=(d|0)){f=1;break}if(i<<16>>16!=(b[(c[a>>2]|0)+((e[(c[g>>2]|0)+(h<<1)>>1]|0)<<1)>>1]&f)<<16>>16){f=0;break}h=h+1|0;i=i+1<<16>>16}return f|0}function Ob(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;l=d+(f*12|0)+-12|0;if((f|0)>1)d=(c[d+((f+-2|0)*12|0)>>2]|0)+1|0;else d=0;a:do if((d|0)<(g|0)){f=b[46074]|0;h=a+4|0;i=d;d=d+1&65535;while(1){if((i|0)>=(g|0))break a;if(d<<16>>16!=(b[(c[a>>2]|0)+((e[(c[h>>2]|0)+(i<<1)>>1]|0)<<1)>>1]&f)<<16>>16)break a;i=i+1|0;d=d+1<<16>>16}}else i=d;while(0);if((i|0)<(g|0)){c[l>>2]=i;j=b[46074]|0;k=c[a+4>>2]|0;f=c[a>>2]|0;h=b[f+((e[k+(i<<1)>>1]|0)<<1)>>1]|0;d=i;do{d=d+1|0;if((d|0)>=(g|0))break}while(((h^b[f+((e[k+(d<<1)>>1]|0)<<1)>>1])&j)<<16>>16==0);c[l+4>>2]=d;d=d-i|0}else{c[l>>2]=32767;c[l+4>>2]=0;d=0}return d|0}function Pb(a,d,f,g,h){a=a|0;d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0;j=c[(c[d>>2]|0)+(f+-1<<2)>>2]|0;er(j|0,0,c[d+8>>2]<<1|0)|0;i=a+32|0;f=a+24|0;d=0;while(1){if((d|0)>=(h|0))break;l=(e[g+(d<<1)>>1]|0)+-1|0;k=c[i>>2]|0;a=j+(((l|0)/(k|0)|0)<<1)|0;b[a>>1]=b[a>>1]|b[(c[f>>2]|0)+(((l|0)%(k|0)|0)<<1)>>1];d=d+1|0}return}function Qb(a,b,d,f){a=a|0;b=b|0;d=d|0;f=f|0;var g=0,h=0;h=c[a+8>>2]|0;g=c[(c[a>>2]|0)+(b+-1<<2)>>2]|0;a=c[(c[d>>2]|0)+(f+-1<<2)>>2]|0;b=0;while(1){if((b|0)>=(h|0)){a=1;break}if(!((e[g+(b<<1)>>1]|0)&~(e[a+(b<<1)>>1]|0)))b=b+1|0;else{a=0;break}}return a|0}function Rb(a,d,f,g,h,i){a=a|0;d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=i+-1|0;r=c[(c[f>>2]|0)+(q<<2)>>2]|0;q=c[(c[g>>2]|0)+(q<<2)>>2]|0;n=c[f+8>>2]<<1;er(r|0,0,n|0)|0;er(q|0,0,n|0)|0;n=b[46074]|0;o=d+4|0;p=a+32|0;m=a+24|0;g=0;f=1;while(1){if((g|0)>=(h|0))break;j=c[o>>2]|0;i=e[j+(g<<1)>>1]|0;k=c[d>>2]|0;l=b[k+(i<<1)>>1]&n;if(f<<16>>16==l<<16>>16){k=c[p>>2]|0;l=(c[m>>2]|0)+(((i|0)%(k|0)|0)<<1)|0;i=(i|0)/(k|0)|0;k=q+(i<<1)|0;b[k>>1]=b[k>>1]|b[l>>1];i=r+(i<<1)|0;b[i>>1]=b[i>>1]|b[l>>1];i=f}else{while(1){f=g+1|0;if((f|0)>=(h|0))break;a=e[j+(f<<1)>>1]|0;if(l<<16>>16!=(b[k+(a<<1)>>1]&n)<<16>>16)break;g=f;i=(i|0)>(a|0)?a:i}j=c[p>>2]|0;k=r+(((i|0)/(j|0)|0)<<1)|0;b[k>>1]=b[k>>1]|b[(c[m>>2]|0)+(((i|0)%(j|0)|0)<<1)>>1];i=l}g=g+1|0;f=i+1<<16>>16}return}function Sb(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;i=c[(c[d>>2]|0)+(e<<2)>>2]|0;er(i|0,0,c[d+8>>2]<<1|0)|0;h=a+32|0;e=a+24|0;d=1;while(1){if((d|0)>=(g|0))break;k=c[f+(d<<2)>>2]|0;j=c[h>>2]|0;a=i+(((k|0)/(j|0)|0)<<1)|0;b[a>>1]=b[a>>1]|b[(c[e>>2]|0)+(((k|0)%(j|0)|0)<<1)>>1];d=d+2|0}return}function Tb(a,d,f,g,h){a=a|0;d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0;d=c[d>>2]|0;a:do if(d|0){i=c[d+(f<<2)>>2]|0;j=a+32|0;d=a+24|0;f=0;while(1){if((f|0)>=(h|0))break a;l=c[g+(f<<2)>>2]|0;k=c[j>>2]|0;a=i+(((l|0)/(k|0)|0)<<1)|0;b[a>>1]=(e[a>>1]|0)&((e[(c[d>>2]|0)+(((l|0)%(k|0)|0)<<1)>>1]|0)^65535);f=f+1|0}}while(0);return}function Ub(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0;f=c[a>>2]|0;a:do if(!f)d=0;else{g=c[f+(d<<2)>>2]|0;e=c[f+(e<<2)>>2]|0;d=c[a+8>>2]|0;f=0;while(1){if((f|0)>=(d|0)){d=0;break a}if(!((b[e+(f<<1)>>1]&b[g+(f<<1)>>1])<<16>>16))f=f+1|0;else{d=1;break}}}while(0);return d|0}function Vb(a,d){a=a|0;d=d|0;var e=0,f=0;e=c[a>>2]|0;a:do if(!e)e=1;else{f=c[e+(d<<2)>>2]|0;e=c[a+8>>2]|0;d=0;while(1){if((d|0)>=(e|0)){e=1;break a}if(!(b[f+(d<<1)>>1]|0))d=d+1|0;else{e=0;break}}}while(0);return e|0}function Wb(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0;f=c[a>>2]|0;a:do if(f|0){g=c[f+(d<<2)>>2]|0;e=c[f+(e<<2)>>2]|0;d=c[a+8>>2]|0;f=0;while(1){if((f|0)>=(d|0))break a;a=g+(f<<1)|0;b[a>>1]=b[a>>1]|b[e+(f<<1)>>1];f=f+1|0}}while(0);return}function Xb(a,d,e,f,g,h,i){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0;j=c[d>>2]|0;a:do if(j){n=c[j+(e<<2)>>2]|0;l=c[d+8>>2]|0;m=a+32|0;a=a+24|0;k=0;j=0;while(1){if((k|0)>=(l|0))break a;e=b[n+(k<<1)>>1]|0;b:do if(!(e<<16>>16))j=(c[m>>2]|0)+j|0;else{d=0;while(1){if((d|0)>=(c[m>>2]|0))break b;if((b[(c[a>>2]|0)+(d<<1)>>1]&e)<<16>>16){if((h|0)>=(i|0)){h=-1;break a}c[f+(h<<2)>>2]=g;c[f+(h+1<<2)>>2]=j;h=h+2|0}d=d+1|0;j=j+1|0}}while(0);k=k+1|0}}while(0);return h|0}function Yb(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0;h=d+4|0;d=a+4|0;a=0;while(1){if((a|0)>=(f|0))break;b[(c[g>>2]|0)+((e[(c[d>>2]|0)+(a<<1)>>1]|0)<<1)>>1]=b[(c[h>>2]|0)+(a<<1)>>1]|0;a=a+1|0}return}function Zb(a,c){a=a|0;c=c|0;var d=0,e=0,f=0;f=b[a+((c&65535)<<1)>>1]|0;a:do if(f<<16>>16!=c<<16>>16){e=f;while(1){d=b[a+((e&65535)<<1)>>1]|0;if(e<<16>>16==d<<16>>16)break;else e=d}d=f;while(1){if(e<<16>>16==d<<16>>16){c=e;break a}b[a+((c&65535)<<1)>>1]=e;f=d;d=b[a+((d&65535)<<1)>>1]|0;c=f}}while(0);return c|0}function _b(a,c,d){a=a|0;c=c|0;d=d|0;var e=0;e=Zb(a,c)|0;c=Zb(a,d)|0;d=e&65535;if((e&65535)>=(c&65535))if((c&65535)<(e&65535)){b[a+(d<<1)>>1]=c;c=1}else c=0;else{b[a+((c&65535)<<1)>>1]=e;c=1}return c|0}function $b(a,b){a=a|0;b=b|0;return ((Zb(c[a>>2]|0,(b&65535)+65535&65535)|0)&65535)+1&65535|0}function ac(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=0;f=0;while(1){if((j|0)>=(e|0))break;g=b[(c[a>>2]|0)+(j<<1)>>1]|0;h=g&65535;if((h|0)!=(j|0)?(i=c[d>>2]|0,(b[i+(j<<1)>>1]|0)!=(b[i+(h<<1)>>1]|0)):0)f=(_b(i,j&65535,g)|0)+f|0;j=j+1|0}return f|0}function bc(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;i=b[46074]|0;j=a+4|0;k=0;g=0;f=0;h=0;l=1;while(1){if((k|0)>=(d|0))break;if((b[(c[a>>2]|0)+((e[(c[j>>2]|0)+(k<<1)>>1]|0)<<1)>>1]&i)<<16>>16==l<<16>>16){g=((h|0)!=0&1)+g|0;f=f+1|0;h=0}else h=h+1|0;k=k+1|0;l=l+1<<16>>16}if((f+4|0)<(d|0)){l=g+f|0;return ((l|0)==(d|0)|(l+1|0)==(d|0))&1|0}else return 1;return 0}function cc(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0;f=e<<1;ir(c[a+4>>2]|0,c[d+4>>2]|0,f|0)|0;ir(c[a>>2]|0,c[d>>2]|0,f|0)|0;d=b[46074]|0;f=0;while(1){if((f|0)>=(e|0))break;g=(c[a>>2]|0)+(f<<1)|0;b[g>>1]=b[g>>1]&d;f=f+1|0}return}function dc(a,d,e,f,g,h,j,k,l){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=i;i=i+16|0;v=w;c[v>>2]=0;p=j<<1;q=1;while(1){if((q|0)>=3){u=9;break}m=e+(q<<3)+4|0;n=c[m>>2]|0;if(!n){n=Bq(p)|0;c[m>>2]=n}o=e+(q<<3)|0;m=c[o>>2]|0;if(!m){m=Bq(p)|0;c[o>>2]=m}if(!n){m=-30002;break}if(!m){m=-30002;break}else q=q+1|0}do if((u|0)==9){m=e+8|0;cc(m,e,h);p=(f&65535)+65535|0;s=p&65535;p=p&65535;if(p>>>0<(h&65535)>>>0){t=c[m>>2]|0;r=t+(p<<1)|0;f=b[r>>1]|0;q=e+12|0;o=f&65535;n=j+1&65535;while(1){m=o+-1|0;if((o|0)<=0)break;n=b[(c[q>>2]|0)+(m<<1)>>1]|0;j=n&65535;if((j|0)==(p|0)?1:f<<16>>16!=(b[t+(j<<1)>>1]|0))break;else o=m}if(n<<16>>16==s<<16>>16){n=c[q>>2]|0;while(1){q=m+-1|0;if((m|0)<=0){p=n;n=1;break}p=b[n+(q<<1)>>1]|0;o=b[t+((p&65535)<<1)>>1]|0;if(f<<16>>16!=o<<16>>16){u=18;break}b[n+(m<<1)>>1]=p;m=q}if((u|0)==18){p=n;n=(o&65535)+1&65535}b[p+(m<<1)>>1]=s;b[r>>1]=n;n=l+1|0;m=c[e+16>>2]|0;if(!k){m=bf(a,h,d,n,t,m,p,v)|0;break}else{m=cf(a,h,d,n,t,m,p,g&65535,v)|0;break}}else m=-30016}else m=-30016}while(0);i=w;return m|0}function ec(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h=c[d>>2]|0;p=c[d+4>>2]|0;do if((h|0)>(p|0))d=32767;else{if((g|0)!=0?(n=c[g+68>>2]|0,(n|0)!=0):0){l=a+4|0;k=b[46075]|0;g=h&65535;while(1){d=g&65535;if((d|0)>=(p|0))break;if(!((k&b[(c[a>>2]|0)+((e[(c[l>>2]|0)+(d<<1)>>1]|0)<<1)>>1])<<16>>16))break;g=g+1<<16>>16}if((d|0)==(p|0)){d=32767;break}if(!(f<<16>>16)){j=-1;f=0}else{f=(f&65535)+-1|0;j=f;f=b[n+(f<<1)>>1]|0}d=32767;i=32767;while(1){h=g&65535;if((h|0)>=(p|0))break;h=e[(c[l>>2]|0)+(h<<1)>>1]|0;if((k&b[(c[a>>2]|0)+(h<<1)>>1])<<16>>16==0?(m=b[n+(h<<1)>>1]|0,(m&65535)>(f&65535)|((h|0)>(j|0)?m<<16>>16==f<<16>>16:0)):0)if((h|0)<(d|0)?m<<16>>16==i<<16>>16:0){d=h;h=i}else{q=(m&65535)<(i&65535);d=q?h:d;h=q?m:i}else h=i;g=g+1<<16>>16;i=h}d=d&65535}else o=19;a:do if((o|0)==19){i=a+4|0;j=b[46075]|0;h=h&65535;d=32767;while(1){g=h&65535;if((g|0)>=(p|0))break a;g=b[(c[i>>2]|0)+(g<<1)>>1]|0;if((g&65535)>=(f&65535))d=((g&65535)<(d&65535)?(j&b[(c[a>>2]|0)+((g&65535)<<1)>>1])<<16>>16==0:0)?g:d;h=h+1<<16>>16}}while(0);d=d<<16>>16==32767?32767:d+1<<16>>16}while(0);return d|0}function fc(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0,j=0;g=c[d+4>>2]|0;h=b[46075]|0;i=a+4|0;f=c[d>>2]|0;d=0;while(1){if((f|0)>=(g|0))break;j=((b[(c[a>>2]|0)+((e[(c[i>>2]|0)+(f<<1)>>1]|0)<<1)>>1]&h)<<16>>16==0&1)+d|0;f=f+1|0;d=j}return d|0}function gc(a,d,f,g,h){a=a|0;d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0;m=c[(c[g>>2]|0)+(h+-1<<2)>>2]|0;g=c[f>>2]|0;j=c[f+4>>2]|0;a:do if((g|0)<(j|0)){k=d+4|0;l=a+32|0;a=a+24|0;i=b[46075]|0;f=g;g=0;while(1){if((f|0)>=(j|0))break a;h=e[(c[k>>2]|0)+(f<<1)>>1]|0;n=c[l>>2]|0;if(!((b[(c[a>>2]|0)+(((h|0)%(n|0)|0)<<1)>>1]&b[m+(((h|0)/(n|0)|0)<<1)>>1])<<16>>16)){h=(c[d>>2]|0)+(h<<1)|0;n=b[h>>1]|0;b[h>>1]=i|n;g=((i&n)<<16>>16==0&1)+g|0}f=f+1|0}}else g=0;while(0);return g|0}function hc(a,c,d){a=a|0;c=c|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=a+2|0;i=e[a>>1]|0;j=b[46074]|0;l=1;a=m;while(1){if((l|0)>=(i|0))break;k=a+2|0;h=b[c+((e[k>>1]|0)<<1)>>1]&j;a:do if((h&65535)<(d&65535)){g=k;while(1){if(g>>>0<=m>>>0)break a;f=b[a>>1]|0;if((h&65535)>=(b[c+((f&65535)<<1)>>1]&j&65535))break a;b[a>>1]=b[g>>1]|0;b[g>>1]=f;f=a;a=a+-2|0;g=f}}while(0);l=l+1|0;a=k}return}function ic(d,f,g,h,i,j,k){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;c[22854]=(c[22854]|0)+1;z=i+-1|0;if(!z){w=0;l=0}else{l=i+-2|0;w=(e[(c[h+28>>2]|0)+(l<<1)>>1]|0)+-1|0;l=e[(c[h+32>>2]|0)+(l<<1)>>1]|0}s=b[46074]|0;y=g+4|0;o=s;r=w;s=b[(c[g>>2]|0)+((e[(c[y>>2]|0)+(w<<1)>>1]|0)<<1)>>1]&s;while(1){if((r|0)>=(k|0)){d=l;break}m=e[(c[y>>2]|0)+(r<<1)>>1]|0;n=c[g>>2]|0;if(s<<16>>16!=(b[n+(m<<1)>>1]&o)<<16>>16){d=l;break}b[(c[h>>2]|0)+(l<<1)>>1]=s;p=d+(m<<2)|0;hc(c[p>>2]|0,n,s);n=c[p>>2]|0;p=b[n>>1]|0;o=b[46074]|0;q=1;while(1){l=l+1|0;if((q&65535)>(p&65535))break;m=b[(c[g>>2]|0)+((e[n+((q&65535)<<1)>>1]|0)<<1)>>1]&o;if((m&65535)>=(s&65535))break;b[(c[h>>2]|0)+(l<<1)>>1]=m;q=q+1<<16>>16}r=r+1|0;s=s+1<<16>>16}q=c[f+20>>2]|0;if((q|0)!=0?(t=c[h+36>>2]|0,(t|0)!=0):0){o=(r|0)>(j|0)?j:r;m=o&65535;l=w&65535;while(1){n=l&65535;if(n>>>0>=m>>>0)break;b[t+(n<<1)>>1]=b[q+((e[(c[y>>2]|0)+(n<<1)>>1]|0)<<1)>>1]|0;l=l+1<<16>>16}p=l;l=o&65535;while(1){m=p&65535;if((m|0)>=(r|0))break;m=((e[(c[y>>2]|0)+(m<<1)>>1]|0)-j<<1)+j|0;n=0;o=l;while(1){if((n|0)==2)break;b[t+((o&65535)<<1)>>1]=b[q+(m<<1)>>1]|0;m=m+1|0;n=n+1|0;o=o+1<<16>>16}p=p+1<<16>>16;l=l+2<<16>>16}c[h+40>>2]=l&65535}else c[h+40>>2]=0;o=c[f+32>>2]|0;a:do if(o|0?(u=c[h+48>>2]|0,u|0):0){l=((r|0)>(j|0)?j:r)&65535;n=w&65535;while(1){m=n&65535;if(m>>>0>=l>>>0)break a;b[u+(m<<1)>>1]=b[o+((e[(c[y>>2]|0)+(m<<1)>>1]|0)<<1)>>1]|0;n=n+1<<16>>16}}while(0);l=c[f+44>>2]|0;if((l|0)!=0?(v=c[h+52>>2]|0,(v|0)!=0):0){n=w&65535;while(1){m=n&65535;if((m|0)>=(r|0))break;c[v+(m<<2)>>2]=c[l+((e[(c[y>>2]|0)+(m<<1)>>1]|0)<<2)>>2];n=n+1<<16>>16}c[h+56>>2]=r}else c[h+56>>2]=0;n=f+56|0;if((c[n>>2]|0)!=0?(x=h+64|0,(c[x>>2]|0)!=0):0){m=w&65535;while(1){l=m&65535;if((l|0)>=(r|0))break;a[(c[x>>2]|0)+l>>0]=a[(c[n>>2]|0)+(e[(c[y>>2]|0)+(l<<1)>>1]|0)>>0]|0;m=m+1<<16>>16}c[h+68>>2]=r}else c[h+68>>2]=0;c[h+4>>2]=d;b[(c[h+32>>2]|0)+(z<<1)>>1]=d;b[(c[h+28>>2]|0)+(z<<1)>>1]=s;c[h+24>>2]=i;return}function jc(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=e+-1|0;if(g){f=b[(c[a+32>>2]|0)+(e+-2<<1)>>1]|0;e=f&65535;if(d|0)er(d|0,0,g|0)|0;if(f<<16>>16){if(b[(c[a>>2]|0)+(e+-1<<1)>>1]|0)h=6}else{e=0;h=6}}else{e=0;h=6}if((h|0)==6)b[(c[a>>2]|0)+(e<<1)>>1]=0;return}function kc(d,f,g,h,i,j,k){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;H=i+-1|0;I=(g|0)!=0;if(I){m=0;while(1){if((m|0)>=(i|0))break;if(a[g+m>>0]|0)break;m=m+1|0}if((m|0)<(H|0)){l=g+m|0;a[g+H>>0]=a[l>>0]|0;l=a[l>>0]|0}else D=7}else{m=-1;D=7}a:do if((D|0)==7){if(!H){l=c[d+32>>2]|0;n=c[f+32>>2]|0;o=c[d+28>>2]|0;p=c[f+28>>2]|0;q=0;s=0;r=0;t=0}else{t=i+-2|0;r=c[d+32>>2]|0;D=c[f+32>>2]|0;q=c[d+28>>2]|0;s=c[f+28>>2]|0;l=r;n=D;o=q;p=s;q=(e[q+(t<<1)>>1]|0)+-1|0;s=(e[s+(t<<1)>>1]|0)+-1|0;r=e[r+(t<<1)>>1]|0;t=e[D+(t<<1)>>1]|0}x=b[l+(H<<1)>>1]|0;A=x&65535;w=b[n+(H<<1)>>1]|0;z=w&65535;v=(e[o+(H<<1)>>1]|0)+-1|0;p=e[p+(H<<1)>>1]|0;y=p+-1|0;l=c[d+20>>2]|0;u=c[f+20>>2]|0;B=(l|0)<(u|0)?l:u;n=t-r|0;do if((t|0)!=(r|0)){if(!j){if(t>>>0>=r>>>0){l=0;D=74;break}if((l|0)>(u|0)&(s|0)==(u|0)){l=0;break a}else{l=0;D=74;break}}if((((r|0)>=(c[d+8>>2]|0)?(t|0)>=(c[f+8>>2]|0):0)?(b[(c[d>>2]|0)+(r<<1)>>1]|0)==0:0)?(b[(c[f>>2]|0)+(t<<1)>>1]|0)==0:0){l=0;break a}n=t>>>0>r>>>0?r:t;l=(q|0)<(s|0)?q:s;if((c[d+4>>2]|0)==(c[f+4>>2]|0)){r=(v|0)>(y|0)?v:y;v=r;z=z>>>0>>0?A:z;o=c[d+40>>2]|0;q=l;s=l;m=n;D=28}else{q=l;s=l;l=n;D=20}}else{l=t;D=20}while(0);do if((D|0)==20){o=c[d+40>>2]|0;n=z-A|0;if(w<<16>>16!=x<<16>>16){if(j|0){r=(v|0)<(y|0)?v:y;m=c[f+40>>2]|0;v=r;z=z>>>0>A>>>0?A:z;o=(o|0)<(m|0)?o:m;m=l;D=28;break}if((w&65535)<(x&65535)?(c[d+12>>2]|0)>(c[f+12>>2]|0):0)if((y|0)!=(u+1|0))if((y|0)==(u|0)){v=y;r=y;o=y;m=l;D=28;break}else{l=0;D=74;break}else{o=p+-2|0;v=o;r=o;z=z+-1|0;m=l;D=28;break}else{l=0;D=74}}else{r=y;z=A;m=l;D=28}}while(0);b:do if((D|0)==28){p=(k|0)!=0;if(p){u=c[d+8>>2]|0;t=c[f+8>>2]|0;t=(u|0)<(t|0)?u:t;u=(B|0)<(v|0)?B:v;t=(t|0)>(z|0)?z:t}else{u=v;t=z}while(1){if((m|0)>=(t|0))break;n=b[(c[d>>2]|0)+(m<<1)>>1]|0;l=b[(c[f>>2]|0)+(m<<1)>>1]|0;if(n<<16>>16!=l<<16>>16){D=34;break}m=m+1|0}if((D|0)==34){n=(n&65535)-(l&65535)|0;l=0;D=74;break}n=s-q|0;if((s|0)==(q|0)){w=r-v|0;if((r|0)==(v|0)){r=c[d+36>>2]|0;q=(r|0)==0;c:do if(!q?(C=c[f+36>>2]|0,(C|0)!=0):0){m=(v|0)<(B|0);p=m?v:p?B:o;o=m?v:o;m=s;while(1){if((m|0)>=(p|0))break c;n=b[r+(m<<1)>>1]|0;l=b[C+(m<<1)>>1]|0;if(n<<16>>16!=l<<16>>16)break;m=m+1|0}n=(n<<16>>16)-(l<<16>>16)|0;l=1;D=74;break b}else p=0;while(0);m=t;while(1){if((m|0)>=(z|0))break;n=b[(c[d>>2]|0)+(m<<1)>>1]|0;l=b[(c[f>>2]|0)+(m<<1)>>1]|0;if(n<<16>>16!=l<<16>>16){D=48;break}m=m+1|0}if((D|0)==48){n=(n&65535)-(l&65535)|0;l=2;D=74;break}d:do if(!q?(E=c[f+36>>2]|0,(E|0)!=0):0){m=p;while(1){if((m|0)>=(o|0))break d;n=b[r+(m<<1)>>1]|0;l=b[E+(m<<1)>>1]|0;if(n<<16>>16!=l<<16>>16)break;m=m+1|0}n=(n<<16>>16)-(l<<16>>16)|0;m=z-t+m|0;l=2;D=74;break b}while(0);o=c[d+48>>2]|0;e:do if((o|0)!=0?(F=c[f+48>>2]|0,(F|0)!=0):0){m=s;while(1){if((m|0)>=(u|0))break e;n=b[o+(m<<1)>>1]|0;l=b[F+(m<<1)>>1]|0;if(n<<16>>16!=l<<16>>16)break;m=m+1|0}n=(n<<16>>16)-(l<<16>>16)|0;l=3;D=74;break b}while(0);o=c[d+52>>2]|0;f:do if((o|0)!=0?(G=c[f+52>>2]|0,(G|0)!=0):0){m=s;while(1){if((m|0)>=(v|0))break f;n=c[o+(m<<2)>>2]|0;l=c[G+(m<<2)>>2]|0;if((n|0)!=(l|0))break;m=m+1|0}n=(n|0)>(l|0)?1:-1;p=4;D=75;break b}while(0);p=c[d+64>>2]|0;if((p|0)!=0?(c[f+68>>2]|0)!=0:0){o=f+64|0;m=s;while(1){if((m|0)>=(v|0)){n=w;l=4;D=74;break b}n=a[p+m>>0]|0;l=a[(c[o>>2]|0)+m>>0]|0;if(n<<24>>24!=l<<24>>24)break;m=m+1|0}n=n<<24>>24>l<<24>>24?1:-1;p=4;D=75}else{n=w;l=4;D=74}}else{n=w;l=1;D=74}}else{l=1;D=74}}while(0);if((D|0)==74)if(!n)l=0-n|0;else{p=l;D=75}if((D|0)==75){n=(n|0)<0;l=n?p+1|0:~p;if(h){o=h+(p<<3)|0;if(!(c[o>>2]|0)){c[o>>2]=n?i:0-i|0;c[h+(p<<3)+4>>2]=m}l=(p|0)==0?l:0}}if(I)a[g+H>>0]=(l|0)>0?1:l>>31&255}while(0);return l|0}function lc(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;k=(c[a+24>>2]|0)+-1|0;i=(c[d+24>>2]|0)+-1|0;h=e[(c[a+32>>2]|0)+(k<<1)>>1]|0;j=e[(c[d+32>>2]|0)+(i<<1)>>1]|0;k=(e[(c[a+28>>2]|0)+(k<<1)>>1]|0)+-1|0;i=(e[(c[d+28>>2]|0)+(i<<1)>>1]|0)+-1|0;w=c[a+20>>2]|0;q=c[d+20>>2]|0;q=(w|0)<(q|0)?w:q;if(!f){w=h+-1|0;i=c[a>>2]|0;h=(b[i+(w<<1)>>1]|0)==0?w:h;w=j+-1|0;w=(b[(c[d>>2]|0)+(w<<1)>>1]|0)==0?w:j;f=w-h|0;if((w|0)==(h|0)){m=f;r=i;w=k;p=h;l=c[a+40>>2]|0;n=c[d+40>>2]|0;t=c[a+56>>2]|0;u=c[d+56>>2]|0;v=7}else{h=1;v=40}}else{h=h>>>0>>0?h:j;f=c[a+4>>2]|0;f=(h|0)<(f|0)?h:f;i=(k|0)<(i|0)?k:i;h=c[a>>2]|0;if(!((b[h+(f<<1)>>1]|0)!=0?(b[(c[d>>2]|0)+(f<<1)>>1]|0)!=0:0))f=f+-1|0;u=c[a+40>>2]|0;n=c[d+40>>2]|0;n=(u|0)<(n|0)?u:n;u=c[a+56>>2]|0;m=0;r=h;w=i;p=f;l=n;t=u;v=7}a:do if((v|0)==7){k=(g|0)!=0;if(k){o=c[a+8>>2]|0;j=c[d+8>>2]|0;j=(o|0)<(j|0)?o:j;j=(j|0)>(p|0)?p:j}else j=p;i=0;while(1){if((i|0)>=(j|0))break;h=b[r+(i<<1)>>1]|0;f=b[(c[d>>2]|0)+(i<<1)>>1]|0;if(h<<16>>16==f<<16>>16)i=i+1|0;else{v=12;break}}if((v|0)==12){f=(h&65535)-(f&65535)|0;h=1;v=40;break}o=c[a+36>>2]|0;g=(o|0)==0;b:do if(!g?(s=c[d+36>>2]|0,(s|0)!=0):0){m=n-l|0;if((n|0)!=(l|0)){f=m;h=2;v=40;break a}l=(w|0)<(q|0);i=l?w:k?q:n;l=l?w:n;k=0;while(1){if((k|0)>=(i|0))break b;h=b[o+(k<<1)>>1]|0;f=b[s+(k<<1)>>1]|0;if(h<<16>>16==f<<16>>16)k=k+1|0;else break}f=(h<<16>>16)-(f<<16>>16)|0;h=2;v=40;break a}else i=0;while(0);while(1){if((j|0)>=(p|0))break;h=b[r+(j<<1)>>1]|0;f=b[(c[d>>2]|0)+(j<<1)>>1]|0;if(h<<16>>16==f<<16>>16)j=j+1|0;else{v=23;break}}if((v|0)==23){f=(h&65535)-(f&65535)|0;h=3;v=40;break}c:do if(!g?(x=c[d+36>>2]|0,x|0):0){while(1){if((i|0)>=(l|0))break c;h=b[o+(i<<1)>>1]|0;f=b[x+(i<<1)>>1]|0;if(h<<16>>16==f<<16>>16)i=i+1|0;else break}f=(h<<16>>16)-(f<<16>>16)|0;h=3;v=40;break a}while(0);i=c[a+48>>2]|0;d:do if(i|0?(y=c[d+48>>2]|0,y|0):0){j=0;while(1){if((j|0)>=(w|0))break d;h=b[i+(j<<1)>>1]|0;f=b[y+(j<<1)>>1]|0;if(h<<16>>16==f<<16>>16)j=j+1|0;else break}f=(h<<16>>16)-(f<<16>>16)|0;h=4;v=40;break a}while(0);k=c[a+52>>2]|0;if((k|0)!=0?(z=c[d+52>>2]|0,(z|0)!=0):0){j=u-t|0;if((u|0)==(t|0)){i=0;while(1){if((i|0)>=(w|0)){f=j;h=5;v=40;break a}h=c[k+(i<<2)>>2]|0;f=c[z+(i<<2)>>2]|0;if((h|0)==(f|0))i=i+1|0;else break}f=(h|0)>(f|0)?1:-1;h=5;v=41}else{f=j;h=5;v=40}}else{f=m;h=5;v=40}}while(0);if((v|0)==40)if(!f)f=0-f|0;else v=41;if((v|0)==41)f=(f|0)<0?h:0-h|0;return f|0}function mc(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;do if(a){g=0;while(1){if((g|0)>=100)break;h=a+(g<<3)|0;if(c[h>>2]|0){i=4;break}g=g+1|0}if((i|0)==4){c[d>>2]=g;c[e>>2]=c[a+(g<<3)+4>>2];c[f>>2]=c[h>>2];g=1;break}if((g|0)==100)if(!b){c[d>>2]=32767;c[e>>2]=-1;c[f>>2]=0;g=0;break}else{c[d>>2]=b;c[e>>2]=-1;c[f>>2]=0;g=0;break}else g=1}else g=-1;while(0);return g|0}function nc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;f=h+8|0;g=h;if((mc(a,d,f,h+4|0,g)|0)>0?(e=c[f>>2]|0,(e|0)<=(b|0)):0)e=(c[g>>2]|0)>0?e+1|0:~e;else e=0;i=h;return e|0}function oc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;a:do if(a|0){e=0;while(1){if((e|0)==100)break a;d=a+(e<<3)|0;f=c[d>>2]|0;if((((f|0)>-1?f:0-f|0)|0)>=(b|0)){c[d>>2]=0;c[a+(e<<3)+4>>2]=0}e=e+1|0}}while(0);return}function pc(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;v=g+-1|0;if(!v){h=f+28|0;u=h;i=c[f+32>>2]|0;h=c[h>>2]|0;w=0;t=0;x=0;j=0}else{j=g+-2|0;r=c[f+32>>2]|0;u=f+28|0;t=c[u>>2]|0;i=r;h=t;w=(e[(c[d+28>>2]|0)+(j<<1)>>1]|0)+-1|0;t=(e[t+(j<<1)>>1]|0)+-1|0;x=e[(c[d+32>>2]|0)+(j<<1)>>1]|0;j=e[r+(j<<1)>>1]|0}k=e[h+(v<<1)>>1]|0;r=(e[i+(v<<1)>>1]|0)-j|0;h=0;while(1){if((h|0)>=(r|0))break;b[(c[d>>2]|0)+(h+x<<1)>>1]=b[(c[f>>2]|0)+(h+j<<1)>>1]|0;h=h+1|0}p=d+32|0;q=d+28|0;m=k+-1|0;j=c[d+36>>2]|0;a:do if((j|0)!=0?(l=c[f+36>>2]|0,(l|0)!=0):0){if((m|0)>(c[f+20>>2]|0))h=c[f+40>>2]|0;else h=m;i=h-t|0;h=0;while(1){if((h|0)>=(i|0)){l=i;break a}b[j+(h+w<<1)>>1]=b[l+(h+t<<1)>>1]|0;h=h+1|0}}else l=0;while(0);h=c[d+48>>2]|0;b:do if(h|0?(n=c[f+48>>2]|0,n|0):0){i=m-t|0;j=0;while(1){if((j|0)>=(i|0))break b;b[h+(j+w<<1)>>1]=b[n+(j+t<<1)>>1]|0;j=j+1|0}}while(0);h=c[d+52>>2]|0;c:do if((h|0)!=0?(o=c[f+52>>2]|0,(o|0)!=0):0){i=m-t|0;j=0;while(1){if((j|0)>=(i|0)){k=i;break c}c[h+(j+w<<2)>>2]=c[o+(j+t<<2)>>2];j=j+1|0}}else k=0;while(0);j=d+64|0;d:do if((c[j>>2]|0)!=0?(s=f+64|0,(c[s>>2]|0)!=0):0){h=m-t|0;i=0;while(1){if((i|0)>=(h|0))break d;a[(c[j>>2]|0)+(i+w)>>0]=a[(c[s>>2]|0)+(i+t)>>0]|0;i=i+1|0}}else h=0;while(0);x=r+x|0;c[d+4>>2]=x;b[(c[p>>2]|0)+(v<<1)>>1]=x;b[(c[q>>2]|0)+(v<<1)>>1]=b[(c[u>>2]|0)+(v<<1)>>1]|0;if(l|0)c[d+40>>2]=l+w;if(k|0)c[d+56>>2]=k+w;if(h|0)c[d+68>>2]=h+w;c[d+24>>2]=g;return}function qc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=b+24|0;e=0;while(1){if((e|0)>=(c[d>>2]|0))break;f=e+1|0;pc(a,b,f);e=f}return}function rc(a,d,e,f,g,h,i){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=h+-1|0;q=c[(c[e>>2]|0)+(p<<2)>>2]|0;p=c[(c[f>>2]|0)+(p<<2)>>2]|0;h=c[e+8>>2]<<1;er(q|0,0,h|0)|0;er(p|0,0,h|0)|0;h=0;while(1){if((h|0)>=(g|0))break;b[(c[i>>2]|0)+(h<<1)>>1]=32767;h=h+1|0}n=a+32|0;k=a+24|0;l=b[46075]|0;o=b[46074]|0;m=0;while(1){if((m|0)>=(g|0)){h=0;break}h=(c[d>>2]|0)+(m<<1)|0;f=b[h>>1]|0;e=f&65535;a:do if((e|0)!=(m|0)){if(!((l&f)<<16>>16)){b[h>>1]=l|f;j=c[d>>2]|0;h=e;a=(e|0)<(m|0)?e:m;while(1){h=j+(h<<1)|0;f=b[h>>1]|0;e=f&65535;if((f&l)<<16>>16){j=a;break}b[h>>1]=f|l;h=e;a=(a|0)>(e|0)?e:a}e=c[n>>2]|0;f=q+(((j|0)/(e|0)|0)<<1)|0;b[f>>1]=b[f>>1]|b[(c[k>>2]|0)+(((j|0)%(e|0)|0)<<1)>>1];f=j&65535;e=c[i>>2]|0;b[e+(j<<1)>>1]=f;a=c[d>>2]|0;h=j;while(1){h=b[a+(h<<1)>>1]&o&65535;if((j|0)==(h|0))break a;b[e+(h<<1)>>1]=f}}}else{j=c[n>>2]|0;a=(c[k>>2]|0)+(((m|0)%(j|0)|0)<<1)|0;j=(m|0)/(j|0)|0;e=p+(j<<1)|0;b[e>>1]=b[e>>1]|b[a>>1];j=q+(j<<1)|0;b[j>>1]=b[j>>1]|b[a>>1];b[(c[i>>2]|0)+(m<<1)>>1]=f}while(0);m=m+1|0}while(1){if((h|0)>=(g|0))break;i=(c[d>>2]|0)+(h<<1)|0;b[i>>1]=b[i>>1]&o;h=h+1|0}return}function sc(a){a=a|0;var d=0,e=0,f=0;e=a+28|0;if(!(c[e>>2]|0)){c[a+32>>2]=16;f=Dq(16,2)|0;c[a+24>>2]=f;if(!f)a=-1;else{a=1;d=0;while(1){if((d|0)>=16)break;b[f+(d<<1)>>1]=a;a=(a&65535)<<1&65535;d=d+1|0}b[46075]=-32768;b[46074]=32767;c[e>>2]=1;a=1}}else a=0;return a|0}function tc(a){a=a|0;var b=0;a=a+24|0;b=c[a>>2]|0;if(!b)a=0;else{Cq(b);c[a>>2]=0;a=1}return a|0}function uc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;if((a|0)!=0&(b|0)!=0){if(!(c[a+20>>2]|0)){e=-1;d=0}else{d=(c[b+36>>2]|0)==0;e=d?1:-1;d=d&1}if((c[a+12>>2]|0)<(c[a+8>>2]|0)){f=(c[b+8>>2]|0)==(c[b+4>>2]|0);e=f?2:e;d=(f&1)+d|0}if(c[a+32>>2]|0){f=(c[b+48>>2]|0)==0;e=f?3:e;d=(f&1)+d|0}if(c[a+44>>2]|0){f=(c[b+52>>2]|0)==0;e=f?4:e;d=(f&1)+d|0}d=(d|0)==1?e:0}else d=0;return d|0}function vc(d,f,g,j,k,l,m,n,o,p,q,r,s,t,u,v){d=d|0;f=f|0;g=g|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;t=t|0;u=u|0;v=v|0;var w=0,x=0,y=0,z=0,A=0,B=0.0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0.0,Ma=0,Na=0,Oa=0,Pa=0;Ja=i;i=i+1840|0;Fa=Ja+1828|0;Ga=Ja+1824|0;za=Ja+1748|0;Ia=Ja+1672|0;Aa=Ja+1660|0;Ba=Ja+1648|0;Ca=Ja+1636|0;Da=Ja+1632|0;Ha=Ja+1624|0;Ea=Ja+1616|0;na=Ja+816|0;oa=Ja+16|0;ma=Ja+8|0;la=Ja+4|0;pa=Ja;ua=c[r>>2]|0;va=r+8|0;ja=(((c[r+32>>2]|0)!=0&1)+((c[r+20>>2]|0)!=0&1)|0)!=(((c[r+44>>2]|0)!=0)<<31>>31|0);ka=(l|0)!=0|ja;ta=ka&1;if(!t)sa=0;else sa=c[t>>2]|0;c[ma>>2]=0;c[la>>2]=-1;c[pa>>2]=0;ha=(v|0)==0?2048:32766;ia=uc(r,sa)|0;do if((sc(f)|0)<0)t=-1;else{ra=(sa|0)!=0;if(ra?(c[sa+8>>2]|0)!=(c[r+12>>2]|0):0){t=-2;break}z=Dq(j,2)|0;c[Fa>>2]=z;t=Dq(j,2)|0;c[Ga>>2]=t;wa=Dq(j,12)|0;xa=Dq(j,2)|0;ya=Dq(j,1)|0;w=Ib(za,g,r)|0;x=Ib(Ia,g,r)|0;v=Dq(1,76)|0;if(!v)y=0;else y=(Ib(v,g,r)|0)!=0;ba=Gb(f,Aa,j,ha)|0;ca=Gb(f,Ba,j,ha)|0;da=Gb(f,Ca,j,1)|0;ea=Lb(Ha,j)|0;fa=Lb(Ea,j)|0;ga=Dq(j,2)|0;c[Da>>2]=ga;a:do if(x&w&((z|0)!=0&(t|0)!=0&(wa|0)!=0&(xa|0)!=0&(ya|0)!=0&1)&(y&1)&ba&ca&da&ea&fa&(ga|0)!=0){t=0;while(1){if((t|0)>=(j|0))break;b[z+(t<<1)>>1]=t;t=t+1|0}c[s>>2]=0;da=s+4|0;c[da>>2]=0;ea=s+8|0;c[ea>>2]=0;fa=s+12|0;c[fa>>2]=1;ga=s+16|0;c[ga>>2]=0;er(na|0,0,800)|0;er(oa|0,0,800)|0;if(Nb(n,j)|0){cc(Ea,n,j);ic(m,r,n,v,1,g,j);jc(v,0,2);c[ga>>2]=(c[ga>>2]|0)+1;D=0;C=0;t=0;B=1.0;qa=117;break}if(ka)x=2;else{x=(bc(n,g)|0)==0;x=x?2:1}t=za+4|0;w=c[t>>2]|0;if((w|0)>0)er(c[za>>2]|0,0,w<<1|0)|0;c[t>>2]=0;c[za+24>>2]=1;A=1;D=1;C=0;while(1){ca=D+-1|0;t=n+(ca<<3)|0;Ob(t,wa,D,g)|0;w=ec(t,wa+(ca*12|0)|0,0,r)|0;b[xa+(ca<<1)>>1]=w;if(!(!ka?(bc(t,g)|0)!=0:0))x=D+1|0;t=dc(f,m,t,w,g,j,k,l,0)|0;if((t|0)<0)break a;c[s>>2]=(c[s>>2]|0)+1;y=D+1|0;z=n+(D<<3)|0;ic(m,r,z,za,D,g,j);if(ra&(C|0)<1){w=kc(za,sa,0,oa,D,1,ta)|0;A=(w|0)<1?y:A}else w=C;if((w|0)<1)pc(v,za,D);pc(Ia,za,D);if(!(Nb(z,g)|0)){D=y;C=w}else{E=y;y=z;C=x;break}}c[ga>>2]=(c[ga>>2]|0)+1;jc(Ia,0,E);cc(Ha,y,j);do if(ra){if(!w){w=lc(za,sa,1,ta)|0;if((w|0)>0){y=0;x=1;A=1;z=w;break}}if((A|0)>1)cc(Ea,n+(A+-1<<3)|0,j);ca=(A|0)==(E|0);y=ca&1;if(ca){jc(v,0,E);mc(oa,ia,ma,la,pa)|0;x=E;A=E;z=w}else{x=A;z=w}}else{cc(Ea,y,j);jc(v,0,E);y=1;x=E;z=w}while(0);b[xa+(D<<1)>>1]=32767;c[wa+(D*12|0)>>2]=32767;c[wa+(D*12|0)+4>>2]=0;c[wa+(D*12|0)+8>>2]=-1;ba=r+72|0;ca=(sa|0)==0;aa=1;N=x;R=E;Y=x;P=E;O=0;w=0;x=0;X=0;$=E;B=1.0;Q=C;L=0;M=0;b:while(1){if(Ic(d,c[ba>>2]|0)|0){t=-30008;break a}if(!D)break;_=(D|0)<(N|0)?D:N;do if((D|0)>(R|0)){K=D+-1|0;J=xa+(K<<1)|0;H=b[J>>1]|0;if(H<<16>>16==32767){Pa=M;Oa=L;Na=E;Ma=Q;La=B;Ka=t;C=$;F=z;G=X;H=x;I=w;J=O;S=A;T=P;U=Y;V=R;W=aa;Z=y;N=_;D=K;M=Pa;L=Oa;E=Na;Q=Ma;B=La;t=Ka;$=C;z=F;X=G;x=H;w=I;O=J;A=S;P=T;Y=U;R=V;aa=W;y=Z;continue b}I=ya+K|0;c:do if(!(a[I>>0]|0)){Pb(f,Ca,1,xa,K);C=n+(K<<3)|0;F=wa+(K*12|0)|0;G=1;while(1){if((G|0)>(w|0))break c;if(Qb(Ca,1,Ba,G)|0)gc(f,C,F,Aa,G)|0;G=G+1|0}}else{F=wa+(K*12|0)|0;C=n+(K<<3)|0}while(0);a[I>>0]=1;C=ec(C,F,H,r)|0;b[J>>1]=C;if(C<<16>>16==32767){C=M;F=L;G=E;H=Q;La=B;I=t;J=$;S=z;T=X;U=x;V=w;W=O;Z=A;Ka=P;Ma=Y;Na=R;Oa=aa;Pa=y;N=_;D=K;M=C;L=F;E=G;Q=H;B=La;t=I;$=J;z=S;X=T;x=U;w=V;O=W;A=Z;P=Ka;Y=Ma;R=Na;aa=Oa;y=Pa;continue b}else{t=C;K=R;Z=O}}else{J=D+-1|0;H=n+(J<<3)|0;I=wa+(J*12|0)|0;if((D|0)==(R|0))K=R;else{M=ec(H,I,0,r)|0;K=D;L=M}G=xa+(J<<1)|0;F=b[G>>1]|0;C=O;while(1){Pa=$b(Fa,F)|0;C=(Pa<<16>>16==($b(Fa,M)|0)<<16>>16&1)+C|0;F=ec(H,I,F,r)|0;if(F<<16>>16==32767)break;if(F<<16>>16==($b(Fa,F)|0)<<16>>16){t=F;qa=101;break}}if((qa|0)==101){qa=0;b[G>>1]=t;Z=C;break}b[G>>1]=32767;if((E|0)==(D+1|0)){Pa=(C|0)==(fc(H,I)|0);E=Pa?D:E}I=Q;S=t;T=$;U=z;V=X;W=x;Z=w;Ka=A;Ma=P;Na=Y;Oa=aa;Pa=y;N=_;R=K;O=0;D=J;B=B*+(C|0);Q=I;t=S;$=T;z=U;X=V;x=W;w=Z;A=Ka;P=Ma;Y=Na;aa=Oa;y=Pa;continue b}while(0);G=D+1|0;C=(Y|0)>(D|0)?D:Y;oc(na,C);if(ra){F=(A|0)>(D|0)?D:A;oc(oa,F);z=(A|0)<(D|0)?z:0}else F=A;S=(y|0)!=0;T=c[ma>>2]|0;V=c[la>>2]|0;W=na+(T<<3)+4|0;U=oa+(T<<3)+4|0;O=C;P=(P|0)<(D|0)?P:D;A=F;R=D;F=(Y|0)<(D|0)?X:0;H=(Q|0)<(G|0)?Q:G;while(1){t=dc(f,m,n+(R+-1<<3)|0,t,g,j,k,l,0)|0;if((t|0)<0)break a;c[s>>2]=(c[s>>2]|0)+1;G=R+1|0;Q=n+(R<<3)|0;ic(m,r,Q,za,R,g,j);N=ya+R|0;a[N>>0]=0;J=xa+(R<<1)|0;b[J>>1]=32767;c[wa+(R*12|0)>>2]=32767;c[wa+(R*12|0)+4>>2]=0;c[wa+(R*12|0)+8>>2]=-1;if((P|0)==(R|0)){Pa=(kc(za,Ia,0,0,P,0,ta)|0)==0;P=Pa?G:P}d:do if(ca|(z|0)!=0){Pa=(z|0)<1;A=ra&Pa?G:A;if(Pa){I=1;qa=50}else I=0}else{z=kc(za,sa,0,oa,R,1,ta)|0;do if(S&(z|0)==0){z=nc(oa,T,ia)|0;if(!z){z=0;break}C=(z|0)>-1?z:0-z|0;if((C|0)>(T|0)){if((C+-1|0)!=(T|0)){qa=46;break}if((c[U>>2]|0)>=(V|0)){qa=46;break}}z=C;qa=46}else qa=46;while(0);do if((qa|0)==46){qa=0;if((z|0)<1)break;c[ea>>2]=(c[ea>>2]|0)+1;I=0;break d}while(0);I=(z|0)<1;A=I?G:A;qa=50}while(0);do if((qa|0)==50){e:do if(!(S&((F|0)==0&(O|0)==(R|0))))if((F|0)>0){C=F;qa=61}else{D=O;C=F;qa=60}else{C=kc(za,v,0,na,O,0,ta)|0;do if(!C){C=nc(na,T,0)|0;if(!C){D=G;C=0;qa=60;break e}D=(C|0)>-1?C:0-C|0;if((D|0)>(T|0)){if((D+-1|0)!=(T|0))break;if((c[W>>2]|0)>=(V|0))break}if(!D){D=G;C=0;qa=60;break e}else C=0-D|0}while(0);if((C|0)>=0){qa=61;break}c[ea>>2]=(c[ea>>2]|0)+1;D=O;qa=60}while(0);if((qa|0)==60){qa=0;if(ja|(C|y|0)!=0){O=D;F=C;break}}else if((qa|0)==61){qa=0;if(ja){F=C;break}else D=O}pc(v,za,R);O=D;F=C}while(0);C=(P|0)==(G|0);if(!(I&(F|0)>-1|(C|(O|0)==(G|0)))){I=G;J=aa;N=_;G=O;qa=70;break}if(Nb(Q,g)|0){D=Q;qa=65;break}Ob(Q,wa,G,g)|0;t=ec(Q,wa+(R*12|0)|0,0,r)|0;b[J>>1]=t;if(!ka?(bc(Q,g)|0)!=0:0)C=H;else C=R+2|0;a[N>>0]=0;R=G;H=C}f:do if((qa|0)==65){qa=0;c[ga>>2]=(c[ga>>2]|0)+1;if(!K){t=-30016;break a}do if(C)if(lc(za,Ia,0,ta)|0)if(ja){qa=76;break}else{t=-2;break a}else{Yb(Ha,D,j,Da);C=c[fa>>2]|0;D=1;G=$;break}else qa=76;while(0);g:do if((qa|0)==76){qa=0;C=(F|0)<0;if(C&(ca|(z|0)>0)){I=G;J=aa;N=_;G=O;qa=70;break f}if(ra&(z|0)==0)if(C|(lc(za,sa,1,ta)|0)>0){I=G;J=aa;N=_;G=O;z=0;qa=70;break f}else z=0;else if(C){I=G;J=aa;N=_;G=O;qa=70;break f}do if(!((G|0)<($|0)|((y|0)==0|(F|0)>0))){C=lc(za,v,0,ta)|0;if((C|0)>0)break;if((C|0)<0){I=G;J=aa;N=_;G=O;F=0;qa=70;break f}Yb(D,Ea,j,Da);C=(c[fa>>2]|0)+1|0;c[fa>>2]=C;D=0;F=0;break g}while(0);cc(Ea,D,j);if(ja)qc(v,za);mc(oa,ia,ma,la,pa)|0;er(na|0,0,800)|0;jc(v,0,G);c[da>>2]=(c[da>>2]|0)+1;c[fa>>2]=1;I=G;y=1;J=0;N=G;F=0;qa=70;break f}while(0);c[fa>>2]=C+(((aa|0)!=0|(D|F|0)==0)&1);w=w+1|0;w=(w|0)<(ha|0)?w:ha;rc(f,Da,Aa,Ba,j,w,Ga);if(ac(Ga,Fa,j)|0){x=x+1|0;if(L<<16>>16==($b(Fa,L)|0)<<16>>16){J=aa;N=_;I=P;D=_}else{Na=E;La=B;Oa=aa;Pa=y;N=_;R=K;Y=O;O=Z;D=K;X=F;$=G;Q=H;E=Na;B=La;aa=Oa;y=Pa;continue b}}else{J=aa;N=_;I=P;D=_}}while(0);if((qa|0)==70){qa=0;C=H+-1|0;D=E+-1|0;D=(D|0)>(G|0)?D:G;D=(H|0)>(D|0)?D:C;if(ka|(I|0)==(H|0)){Ma=E;La=B;Na=$;Oa=x;Pa=w;aa=J;R=K;Y=G;O=Z;X=F;Q=H;E=Ma;B=La;$=Na;x=Oa;w=Pa;continue}w=w+1|0;w=(w|0)<(ha|0)?w:ha;Rb(f,n+(C<<3)|0,Aa,Ba,j,w);O=G;I=P;G=$}C=D+-1|0;if((a[ya+C>>0]|0)!=1){Pa=E;La=B;aa=J;R=K;Y=O;P=I;O=Z;X=F;$=G;Q=H;E=Pa;B=La;continue}if((b[xa+(C<<1)>>1]|0)==32767){Pa=E;La=B;aa=J;R=K;Y=O;P=I;O=Z;X=F;$=G;Q=H;E=Pa;B=La;continue}gc(f,n+(C<<3)|0,wa+(C*12|0)|0,Aa,w)|0;Pa=E;La=B;aa=J;R=K;Y=O;P=I;O=Z;X=F;$=G;Q=H;E=Pa;B=La}if(!y)t=-30016;else{D=w;C=x;qa=117}}else{D=0;C=0;t=0;B=1.0;qa=117}while(0);do if((qa|0)==117){if(ra?lc(sa,v,1,ta)|0:0){t=-30016;break}z=j<<1;er(o|0,0,z|0)|0;A=Ea+4|0;y=0;while(1){if((y|0)>=(j|0)){w=0;break}w=e[(c[A>>2]|0)+(y<<1)>>1]|0;x=o+((($b(Fa,w+1&65535)|0)&65535)+-1<<1)|0;w=b[(c[Ea>>2]|0)+(w<<1)>>1]|0;if(((b[x>>1]|0)+-1&65535)>=(w&65535))b[x>>1]=w;y=y+1|0}while(1){if((w|0)>=(j|0))break;Pa=e[(c[A>>2]|0)+(w<<1)>>1]|0;b[o+(Pa<<1)>>1]=b[o+((($b(Fa,Pa+1&65535)|0)&65535)+-1<<1)>>1]|0;w=w+1|0}ir(p|0,c[Ea>>2]|0,z|0)|0;ir(q|0,c[A>>2]|0,z|0)|0;w=(c[v+4>>2]|0)+-1|0;c[va>>2]=w;if(ua|0)ir(ua|0,c[v>>2]|0,w<<1|0)|0;c[s+16>>2]=(c[s+8>>2]|0)+(c[s+4>>2]|0)+(c[s+12>>2]|0);h[s+24>>3]=B;c[s+32>>2]=C;c[s+36>>2]=D;if((u|0)!=0?(c[u>>2]|0)==0:0){c[u>>2]=v;v=0}}while(0);Kb(Fa);Kb(Ga);Cq(wa);Cq(xa);Cq(ya);Jb(za);Jb(Ia);if(v|0){Jb(v);Cq(v)}Hb(0,Aa);Hb(0,Ba);Hb(0,Ca);Mb(Ha);Mb(Ea);Fb(Da)}while(0);i=Ja;return t|0}function wc(a,d,f,g,h){a=a|0;d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0;i=0;while(1){if((i|0)>=(a|0))break;b[g+(i<<1)>>1]=i;i=i+1|0}c[h+4>>2]=d;gh(h,g,a,2,8);i=a+-1|0;d=a&65535;b[f+((e[g+(i<<1)>>1]|0)<<1)>>1]=d;a=i;i=1;while(1){if((a|0)<=0)break;l=a+-1|0;m=g+(l<<1)|0;j=(sh(m,g+(a<<1)|0,h)|0)==0;k=j?d:a&65535;b[f+((e[m>>1]|0)<<1)>>1]=k;a=l;d=k;i=(j&1^1)+i|0}return i|0}function xc(d,e,f,g,h,j,k,l,m,n){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=i;i=i+272|0;w=B+8|0;x=B;er(w|0,0,256)|0;c[x>>2]=0;if((f|0)>(e|0)&(n|0)!=0){z=c[n+16>>2]|0;A=c[n+24>>2]|0?0:3;y=c[n>>2]|0}else{z=0;A=0;y=0}u=(m|0)!=0;a:do if(u){er(g|0,0,f*28|0)|0;n=0}else{t=x+1|0;q=0;p=0;n=0;m=0;while(1){if((q|0)>=(e|0)){o=p;break}o=d+(q*144|0)|0;do if(!(kp(o,86667)|0))o=p+1|0;else{if((kp(o,86650)|0?kp(o,86652)|0:0)?kp(o,86654)|0:0){a[x>>0]=a[o>>0]|0;s=a[d+(q*144|0)+1>>0]|0;a[t>>0]=s<<24>>24==0?32:s;if(np(w,x)|0){o=p;break}up(w,x)|0;o=p;n=n+1|0;break}o=p;m=m+1|0}while(0);q=q+1|0;p=o}if((n|0)>1)Np(w,n,2,1);if(o){if(n|0)jr(w+2|0,w|0,n<<1|0)|0;a[w>>0]=67;a[w+1>>0]=32;n=n+1|0}if(m){s=n<<1;a[w+s>>0]=72;a[w+(s|1)>>0]=32;n=n+1|0}s=(j|0)==0;r=(k|0)==0;l=(l|0)==0&(y|0)!=0;p=(h|0)==0;q=(y|0)==0;j=w;k=0;while(1){if((k|0)>=(e|0))break a;o=g+(k*28|0)|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;c[o+24>>2]=0;a[x>>0]=a[d+(k*144|0)>>0]|0;m=a[d+(k*144|0)+1>>0]|0;a[t>>0]=m<<24>>24==0?32:m;m=np(w,x)|0;if(!m)m=n;else m=((m-j|0)/2|0)+1|0;b[o>>1]=m;b[g+(k*28|0)+2>>1]=a[d+(k*144|0)+73>>0]|0;if(!s){if(!q?(b[d+(k*144|0)+92>>1]|0)!=0:0)m=0;else m=a[d+(k*144|0)+75>>0]|0;b[g+(k*28|0)+4>>1]=m}if(!r){if(!q?(b[d+(k*144|0)+92>>1]|0)!=0:0)m=a[d+(k*144|0)+75>>0]|0;else m=0;b[g+(k*28|0)+12>>1]=m}b:do if(l?(o=b[d+(k*144|0)+92>>1]|0,h=o&65535,v=h+-1|0,!(o<<16>>16==0|(h|0)>(z|0))):0){b[g+(k*28|0)+6>>1]=b[y+(v*36|0)+30>>1]|0;m=0;while(1){if((m|0)==2){m=0;break}b[g+(k*28|0)+(m+4<<1)>>1]=b[y+(v*36|0)+(m<<1)>>1]|0;m=m+1|0}while(1){if((m|0)>=(A|0))break b;b[g+(k*28|0)+(m+7<<1)>>1]=b[y+(v*36|0)+(m+2<<1)>>1]|0;m=m+1|0}}while(0);if(p)m=c[d+(k*144|0)+84>>2]|0;else m=0;c[g+(k*28|0)+20>>2]=m;k=k+1|0}}while(0);q=(y|0)==0;m=(u?f:n+1|0)&65535;p=e;while(1){if((p|0)>=(f|0))break;o=p-e|0;n=g+(p*28|0)|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;c[n+16>>2]=0;c[n+20>>2]=0;c[n+24>>2]=0;c:do if(!q?(b[n>>1]=m,b[g+(p*28|0)+2>>1]=21,(o|0)<(z|0)):0){b[g+(p*28|0)+6>>1]=b[y+(o*36|0)+30>>1]|0;n=0;while(1){if((n|0)==2){n=0;break}b[g+(p*28|0)+(n+7<<1)>>1]=b[y+(o*36|0)+(n<<1)>>1]|0;n=n+1|0}while(1){if((n|0)>=(A|0))break c;b[g+(p*28|0)+(n+7<<1)>>1]=b[y+(o*36|0)+(n+2<<1)>>1]|0;n=n+1|0}}while(0);p=p+1|0}i=B;return}function yc(a,c){a=a|0;c=c|0;var d=0,e=0,f=0;a:do if(a|0){f=0;while(1){if((f|0)>=(c|0))break a;e=a+(f<<1)|0;d=b[e>>1]|0;if(d<<16>>16==32766)d=0;else d=(d&65535)+49153&65535;b[e>>1]=d;f=f+1|0}}while(0);return}function zc(a,b){a=a|0;b=b|0;var d=0,e=0;a:do if(a|0){e=0;while(1){if((e|0)>=(b|0))break a;d=a+(e<<2)|0;if((c[d>>2]|0)==2147483647)c[d>>2]=0;e=e+1|0}}while(0);return}function Ac(a){a=a|0;var b=0,d=0,e=0,f=0;a:do if(a|0){b=c[a>>2]|0;if(b){f=a+4|0;e=0;while(1){if((e|0)>=(c[f>>2]|0))break;d=c[b+(e<<2)>>2]|0;if(d){Cq(d);b=c[a>>2]|0}e=e+1|0}if(b){Cq(b);d=0}else d=0}else d=0;while(1){if((d|0)==2)break a;Gh(c[a+24+(d*100|0)+12>>2]|0);b=c[a+24+(d*100|0)+16>>2]|0;if(b|0)Cq(b);Mb(a+24+(d*100|0)+32|0);b=c[a+24+(d*100|0)+40>>2]|0;if(b|0)Cq(b);b=c[a+24+(d*100|0)+44>>2]|0;if(b|0)Cq(b);b=c[a+24+(d*100|0)+48>>2]|0;if(b|0)Cq(b);b=c[a+24+(d*100|0)+56>>2]|0;if(b|0)Cq(b);b=c[a+24+(d*100|0)+60>>2]|0;if(b|0)Cq(b);Mb(a+24+(d*100|0)+68|0);b=c[a+24+(d*100|0)+76>>2]|0;if(b|0)Cq(b);b=c[a+24+(d*100|0)+80>>2]|0;if(b|0)Cq(b);b=c[a+24+(d*100|0)+84>>2]|0;if(b|0)Cq(b);Cq(c[a+24+(d*100|0)+92>>2]|0);Cq(c[a+24+(d*100|0)+96>>2]|0);d=d+1|0}}while(0);return}function Bc(d,f,g,h,j,k,l,m,n,o,p){d=d|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;var q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0;xb=i;i=i+320|0;y=xb+308|0;Ua=xb+304|0;kb=xb+300|0;mb=xb+296|0;ob=xb+292|0;qb=xb+288|0;sb=xb+284|0;ub=xb+280|0;H=xb+40|0;wb=xb+276|0;db=xb+48|0;Ta=xb;c[kb>>2]=0;c[mb>>2]=0;c[ob>>2]=0;c[qb>>2]=0;c[sb>>2]=0;c[ub>>2]=0;c[wb>>2]=0;er(db|0,0,228)|0;q=Ta;r=q+40|0;do{c[q>>2]=0;q=q+4|0}while((q|0)<(r|0));s=H;c[s>>2]=0;c[s+4>>2]=0;s=c[h+4>>2]|0;q=(s|0)==0;do if(!q?(j|0)!=0&(c[k+72>>2]|0)!=0:0){if(!(((c[k+104>>2]|0)>0?(c[j>>2]|0)!=0:0)?(c[j+16>>2]|0)>0:0))ib=6;if((ib|0)==6?(c[j+56>>2]&255|0)==0:0){if((c[j+32>>2]|0)<=1){ib=14;break}if(!(c[j+64>>2]&49152)){ib=14;break}}if((c[k+116>>2]|0)>1)q=(c[j+64>>2]&49152|0)!=0;else q=0;c[H+4>>2]=q&1;q=c[h>>2]|0;if((q|0)!=0?(c[k+12>>2]|0)!=0:0){r=1;h=0}else{q=s;r=0;h=1}_a=j+24|0;Ya=c[_a>>2]|0;c[_a>>2]=1;_a=g;ab=1;Za=1;ib=20}else ib=14;while(0);do if((ib|0)==14){r=c[h>>2]|0;if(r|0?c[k+12>>2]|0:0){_a=f;q=r;s=r;r=1;ab=0;Ya=0;Za=0;h=0;ib=20;break}if(!q?(c[k+72>>2]|0)!=0:0){c[H+4>>2]=(c[k+116>>2]|0)>1&1;_a=f;q=s;r=1;ab=0;Ya=0;Za=1;h=1;ib=20}else{t=0;u=0;Z=0;H=0;I=0;W=0;X=0;Y=0;J=0;K=0;U=0;R=0;S=0;T=0;Q=0;O=0;P=0;r=0;D=0;q=0;E=0;F=0;N=0;M=0;L=0;G=0;s=0;C=0;B=0;z=0;y=0;x=0;w=0;v=0;m=0;h=0;A=-30019;ib=285}}while(0);a:do if((ib|0)==20){gb=Dq(g,28)|0;fb=Dq(g,2)|0;eb=Dq(g,2)|0;S=Dq(g,2)|0;N=Dq(g,2)|0;X=Dq(g,2)|0;x=Dq(g,2)|0;if((gb|0)!=0&(fb|0)!=0&(eb|0)!=0&(S|0)!=0&(N|0)!=0&(X|0)!=0&(x|0)!=0){M=Dq(g,2)|0;Y=Dq(g,2)|0;Sa=g*28|0;hb=Bq(Sa)|0;if((M|0)!=0&(Y|0)!=0&(hb|0)!=0){if(ab){u=Fh(f,_a,s,0,j)|0;if(!u){_=0;t=0;u=0;$=0;H=0;I=0;W=0;J=0;K=0;U=0;R=0;T=0;Z=0;O=0;P=0;V=0;D=0;Q=eb;E=0;F=0;L=0;G=0;s=0;C=0;B=fb;z=0;y=0;w=0;v=0;m=gb;h=hb;r=-30002;break}t=Fh(f,f,s,0,0)|0;if(!t){_=0;t=0;$=0;H=0;I=0;W=0;J=0;K=0;U=0;R=0;T=0;Z=0;O=0;P=0;V=0;D=0;Q=eb;E=0;F=0;L=0;G=0;s=0;C=0;B=fb;z=0;y=0;w=0;v=0;m=gb;h=hb;r=-30002;break}}else{t=Fh(f,f,s,0,0)|0;if(!t){_=0;t=0;u=0;$=0;H=0;I=0;W=0;J=0;K=0;U=0;R=0;T=0;Z=0;O=0;P=0;V=0;D=0;Q=eb;E=0;F=0;L=0;G=0;s=0;C=0;B=fb;z=0;y=0;w=0;v=0;m=gb;h=hb;r=-30002;break}else u=0}w=l+4|0;c[w>>2]=0;Va=l+8|0;c[Va>>2]=g;Wa=l+12|0;c[Wa>>2]=_a;Xa=l+16|0;c[Xa>>2]=f;Qa=l+20|0;c[Qa>>2]=m;xc(s,f,f,gb,1,0,0,0,0,0);m=wc(f,gb,N,X,n)|0;c[Ua>>2]=0;m=(_a-(af(n,f,t,m,N,x,X,Ua,0)|0)<<1)+8|0;v=Dq(m,4)|0;c[l>>2]=v;if(!v){c[w>>2]=0;_=0;$=0;H=0;I=0;W=0;J=0;K=0;U=0;R=0;T=0;Z=0;O=0;P=0;V=0;D=0;Q=eb;E=0;F=0;L=0;G=0;s=0;C=0;B=fb;z=0;y=0;w=0;v=0;m=gb;h=hb;r=-30002;break}c[w>>2]=m;c[v>>2]=N;c[(c[l>>2]|0)+4>>2]=X;Ba=db+(h*76|0)|0;c[Ba>>2]=0;Ca=db+(h*76|0)+20|0;c[Ca>>2]=0;Da=db+(h*76|0)+32|0;c[Da>>2]=0;Ea=db+(h*76|0)+44|0;c[Ea>>2]=0;Fa=db+(h*76|0)+56|0;c[Fa>>2]=0;Ga=db+(h*76|0)+72|0;c[Ga>>2]=c[Qa>>2];cb=k+(h*60|0)+24|0;Ka=c[cb>>2]|0;Ha=db+(h*76|0)+4|0;c[Ha>>2]=Ka+1;Ia=db+(h*76|0)+8|0;c[Ia>>2]=Ka;Ja=db+(h*76|0)+12|0;c[Ja>>2]=Ka;Ka=db+(h*76|0)+24|0;c[Ka>>2]=0;La=db+(h*76|0)+36|0;c[La>>2]=0;Ma=db+(h*76|0)+48|0;c[Ma>>2]=0;Na=db+(h*76|0)+52|0;c[Na>>2]=0;Oa=db+(h*76|0)+60|0;c[Oa>>2]=0;Pa=db+(h*76|0)+64|0;c[Pa>>2]=0;Ra=db+(h*76|0)|0;A=vc(d,n,f,f,g,0,t,c[l>>2]|0,fb,eb,S,Ra,Ta,0,kb,p)|0;if((A|0)>=0){Pc(n,f,fb,N,x,X,y)|0;if(c[y>>2]&3|0){m=c[kb>>2]|0;if(m|0){Jb(m);m=c[kb>>2]|0;if(m|0)Cq(m);c[kb>>2]=0}A=db+(h*76|0)+16|0;c[A>>2]=c[A>>2]|1;A=vc(d,n,f,f,g,0,t,c[l>>2]|0,fb,eb,S,Ra,Ta,0,kb,p)|0;if((A|0)<0){Z=0;H=0;I=0;W=0;J=0;K=0;U=0;R=0;T=0;Q=0;O=0;P=0;r=0;D=0;q=eb;E=0;F=0;L=0;G=0;s=0;C=0;B=fb;z=0;y=0;w=0;v=0;m=gb;h=hb;ib=285;break}}bb=f+1|0;z=Dq(g,2)|0;E=Dq(g,2)|0;T=Dq(g,2)|0;v=Dq(bb,2)|0;if((T|0)!=0&((E|0)!=0&((z|0)!=0&(v|0)!=0))){w=0;while(1){if((w|0)>=(f|0))break;if((b[s+(w*144|0)+92>>1]|0)==0?(B=a[s+(w*144|0)+75>>0]|0,B<<24>>24!=0):0)m=(B<<24>>24)+16383|0;else m=32766;b[v+(w<<1)>>1]=m;w=w+1|0}c[Ba>>2]=0;c[Ca>>2]=v;c[Da>>2]=0;c[Ea>>2]=0;c[Fa>>2]=0;c[Ga>>2]=c[Qa>>2];Aa=c[cb>>2]|0;c[Ha>>2]=Aa+1;ya=db+(h*76|0)+28|0;c[ya>>2]=bb;c[Ia>>2]=Aa;c[Ja>>2]=Aa;c[Ka>>2]=f;c[La>>2]=0;c[Ma>>2]=0;c[Na>>2]=0;c[Oa>>2]=0;c[Pa>>2]=0;Aa=db+(h*76|0)+68|0;c[Aa>>2]=0;za=g<<1;er(x|0,0,za|0)|0;w=0;while(1){if((w|0)>=(f|0)){m=0;break}m=x+((e[fb+(w<<1)>>1]|0)+-1<<1)|0;if((e[m>>1]|0)<(w|0))b[m>>1]=w;w=w+1|0}while(1){if((m|0)>=(f|0)){ib=52;break}if((b[v+(m<<1)>>1]|0)==(b[v+(e[x+((e[fb+(m<<1)>>1]|0)+-1<<1)>>1]<<1)>>1]|0))m=m+1|0;else{ib=48;break}}if((ib|0)==48){m=db+(h*76|0)+16|0;c[m>>2]=c[m>>2]|2;er(hb|0,0,Sa|0)|0;m=0;while(1){if((m|0)==(f|0))break;b[hb+(m*28|0)>>1]=b[fb+(m<<1)>>1]|0;b[hb+(m*28|0)+2>>1]=b[v+(m<<1)>>1]|0;m=m+1|0}af(n,f,t,wc(f,hb,M,Y,n)|0,M,x,Y,Ua,0)|0;c[Aa>>2]=M;A=vc(d,n,f,f,g,1,t,c[l>>2]|0,z,E,T,Ra,Ta,kb,mb,p)|0;if((A|0)<0){Z=0;H=0;I=0;W=0;J=0;K=0;U=0;R=0;Q=0;O=0;P=0;r=0;D=0;q=eb;F=0;L=0;G=0;s=0;C=0;B=fb;y=0;w=0;m=gb;h=hb;ib=285;break}}else if((ib|0)==52){m=Dq(1,76)|0;if(!m){_=m;$=0;H=0;I=0;W=0;J=0;K=0;U=0;R=0;Z=0;O=0;P=0;V=0;D=0;Q=eb;F=0;L=0;G=0;s=0;C=0;B=fb;y=0;w=0;m=gb;h=hb;r=-30002;break}if(!(Ib(m,f,Ra)|0)){_=m;$=0;H=0;I=0;W=0;J=0;K=0;U=0;R=0;Z=0;O=0;P=0;V=0;D=0;Q=eb;F=0;L=0;G=0;s=0;C=0;B=fb;y=0;w=0;m=gb;h=hb;r=-30002;break}qc(m,c[kb>>2]|0);w=m+36|0;y=0;while(1){if((y|0)>=(f|0))break;b[(c[w>>2]|0)+((e[eb+(y<<1)>>1]|0)+-1<<1)>>1]=b[v+(y<<1)>>1]|0;y=y+1|0}c[m+40>>2]=f;c[mb>>2]=m;$a=f<<1;ir(z|0,fb|0,$a|0)|0;ir(E|0,eb|0,$a|0)|0;ir(T|0,S|0,$a|0)|0}wa=k+(h*60|0)+8|0;b:do if((c[wa>>2]|0)!=0?(r|0)!=0&((ab|(c[k+(h*60|0)+40>>2]|0)!=0)^1):0){y=Dq(g,2)|0;F=Dq(g,2)|0;Q=Dq(g,2)|0;C=Dq(bb,4)|0;if((y|0)!=0&(F|0)!=0&(Q|0)!=0&(C|0)!=0){B=0;m=0}else{_=0;$=0;H=0;I=0;W=C;J=0;K=0;U=0;R=0;Z=Q;O=0;P=0;V=0;D=0;Q=eb;L=0;G=0;s=0;C=0;B=fb;w=0;m=gb;h=hb;r=-30002;break a}while(1){if((B|0)>=(f|0)){B=m;break}w=a[s+(B*144|0)+80>>0]|0;if(!(b[s+(B*144|0)+92>>1]|0))A=Nd(w,a[s+(B*144|0)+76>>0]|0,a[s+(B*144|0)+77>>0]|0,a[s+(B*144|0)+78>>0]|0)|0;else A=Nd(w,0,0,0)|0;w=C+(B<<2)|0;if(!A)c[w>>2]=2147483647;else{c[w>>2]=A;m=m+1|0}B=B+1|0}c[Ba>>2]=0;c[Ca>>2]=v;c[Da>>2]=0;c[Ea>>2]=C;c[Fa>>2]=0;c[Ga>>2]=c[Qa>>2];$a=c[cb>>2]|0;c[Ha>>2]=$a+1;c[ya>>2]=bb;c[Ia>>2]=$a;c[Ja>>2]=$a;c[Ka>>2]=f;c[La>>2]=0;c[Ma>>2]=f;c[Na>>2]=bb;c[Oa>>2]=0;c[Pa>>2]=0;c[Aa>>2]=0;c:do if(B|0){er(x|0,0,za|0)|0;w=0;while(1){if((w|0)>=(f|0)){m=0;break}m=x+((e[z+(w<<1)>>1]|0)+-1<<1)|0;if((e[m>>1]|0)<(w|0))b[m>>1]=w;w=w+1|0}while(1){if((m|0)>=(f|0))break c;if((c[C+(m<<2)>>2]|0)==(c[C+(e[x+((e[z+(m<<1)>>1]|0)+-1<<1)>>1]<<2)>>2]|0))m=m+1|0;else break}m=db+(h*76|0)+16|0;c[m>>2]=c[m>>2]|4;er(hb|0,0,Sa|0)|0;m=0;while(1){if((m|0)>=(f|0))break;b[hb+(m*28|0)>>1]=b[z+(m<<1)>>1]|0;c[hb+(m*28|0)+20>>2]=c[C+(m<<2)>>2];m=m+1|0}af(n,f,t,wc(f,hb,M,Y,n)|0,M,x,Y,Ua,0)|0;c[Aa>>2]=M;A=vc(d,n,f,f,g,1,t,c[l>>2]|0,y,F,Q,Ra,Ta,mb,sb,p)|0;if((A|0)<0){Z=0;H=0;I=0;W=C;J=0;K=0;U=0;R=0;O=0;P=0;r=0;D=0;q=eb;L=0;G=0;s=0;C=0;B=fb;w=0;m=gb;h=hb;ib=285;break a}else{W=C;ba=f;$a=Q;_=B;break b}}while(0);m=Dq(1,76)|0;if(!m){_=m;$=0;H=0;I=0;W=C;J=0;K=0;U=0;R=0;Z=Q;O=0;P=0;V=0;D=0;Q=eb;L=0;G=0;s=0;C=0;B=fb;w=0;m=gb;h=hb;r=-30002;break a}if(!(Ib(m,f,Ra)|0)){_=m;$=0;H=0;I=0;W=C;J=0;K=0;U=0;R=0;Z=Q;O=0;P=0;V=0;D=0;Q=eb;L=0;G=0;s=0;C=0;B=fb;w=0;m=gb;h=hb;r=-30002;break a}qc(m,c[mb>>2]|0);w=m+52|0;A=0;while(1){if((A|0)>=(f|0))break;c[(c[w>>2]|0)+((e[E+(A<<1)>>1]|0)+-1<<2)>>2]=c[C+(A<<2)>>2];A=A+1|0}c[m+56>>2]=f;c[sb>>2]=m;W=f<<1;ir(y|0,z|0,W|0)|0;ir(F|0,E|0,W|0)|0;ir(Q|0,T|0,W|0)|0;W=C;ba=f;$a=Q;_=B}else{W=0;ba=0;$a=0;F=0;y=0;_=0}while(0);d:do if(ab){xa=bb+(_a-f<<1)|0;L=Dq(g,2)|0;O=Dq(g,2)|0;J=Dq(g,2)|0;w=Dq(xa,2)|0;if((J|0)!=0&((O|0)!=0&((L|0)!=0&(w|0)!=0)))A=0;else{_=0;$=0;H=0;I=0;K=0;U=0;R=0;Z=$a;P=0;V=0;D=0;Q=eb;G=0;s=0;C=0;B=fb;m=gb;h=hb;r=-30002;break a}while(1){if((A|0)>=(f|0))break;if((b[s+(A*144|0)+92>>1]|0)==0?(D=a[s+(A*144|0)+75>>0]|0,D<<24>>24!=0):0)m=(D<<24>>24)+16383|0;else m=32766;b[w+(A<<1)>>1]=m;A=A+1|0}A=f;C=f;while(1){if((A|0)>=(_a|0))break;m=A-f|0;B=0;D=C;while(1){if((B|0)==2)break;va=b[(c[j>>2]|0)+(m*36|0)+(B<<1)>>1]|0;b[w+(D<<1)>>1]=va<<16>>16==0?32766:(va&65535)+16383&65535;B=B+1|0;D=D+1|0}A=A+1|0;C=C+2|0}$=db+(Za*76|0)|0;c[$>>2]=0;aa=db+(Za*76|0)+20|0;c[aa>>2]=w;ca=db+(Za*76|0)+32|0;c[ca>>2]=0;da=db+(Za*76|0)+44|0;c[da>>2]=0;ea=db+(Za*76|0)+56|0;c[ea>>2]=0;fa=db+(Za*76|0)+72|0;c[fa>>2]=c[Qa>>2];ga=k+(Za*60|0)+12|0;ka=c[ga>>2]|0;ha=db+(Za*76|0)+4|0;c[ha>>2]=ka+1;ia=db+(Za*76|0)+28|0;c[ia>>2]=xa;ja=db+(Za*76|0)+8|0;c[ja>>2]=ka;ka=k+(Za*60|0)+24|0;la=db+(Za*76|0)+12|0;c[la>>2]=c[ka>>2];ma=db+(Za*76|0)+24|0;c[ma>>2]=C;na=db+(Za*76|0)+36|0;c[na>>2]=0;oa=db+(Za*76|0)+48|0;c[oa>>2]=0;pa=db+(Za*76|0)+52|0;c[pa>>2]=0;qa=db+(Za*76|0)+60|0;c[qa>>2]=0;ra=db+(Za*76|0)+64|0;c[ra>>2]=0;ta=db+(Za*76|0)+68|0;c[ta>>2]=0;xc(s,f,_a,gb,1,0,0,1,1,j);m=0;while(1){if((m|0)>=(f|0))break;b[gb+(m*28|0)>>1]=b[(c[c[l>>2]>>2]|0)+(m<<1)>>1]|0;m=m+1|0}va=wc(_a,gb,N,X,n)|0;m=c[l>>2]|0;A=f&65535;cf(n,_a,u,va,c[m>>2]|0,x,c[m+4>>2]|0,A,Ua)|0;er(hb|0,0,Sa|0)|0;m=0;while(1){if((m|0)>=(f|0))break;b[hb+(m*28|0)>>1]=b[z+(m<<1)>>1]|0;b[hb+(m*28|0)+2>>1]=b[w+(m<<1)>>1]|0;m=m+1|0}while(1){if((m|0)>=(_a|0))break;b[hb+(m*28|0)>>1]=b[N+(m<<1)>>1]|0;m=m+1|0}cf(n,_a,u,wc(_a,hb,M,Y,n)|0,M,x,Y,A,Ua)|0;c[ta>>2]=M;sa=db+(Za*76|0)|0;A=vc(d,n,f,_a,g,1,u,c[l>>2]|0,L,O,J,sa,Ta,mb,ob,p)|0;if((A|0)<0){Z=0;H=0;I=0;K=0;U=0;R=0;Q=$a;P=0;r=0;D=0;q=eb;G=0;s=0;C=0;B=fb;m=gb;h=hb;ib=285;break a}va=k+(Za*60|0)+8|0;if((c[va>>2]|0)!=0?(c[k+(Za*60|0)+40>>2]|0)==0:0)ib=114;else{ua=(Ya|0)!=0;if(ua|(c[k+(Za*60|0)+52>>2]|0)==0?ua|(c[H+(Za<<2)>>2]|0)==0:0){H=0;I=0;aa=0;K=0;P=0;G=0}else ib=114}do if((ib|0)==114){ua=j+24|0;c[ua>>2]=Ya;G=Dq(g,2)|0;P=Dq(g,2)|0;K=Dq(g,2)|0;Z=g+1|0;if(!(c[H+(Za<<2)>>2]|0)){H=0;U=0}else{H=Dq(Z,1)|0;U=Z}I=Dq(Z,4)|0;if(!((G|0)!=0&(P|0)!=0&(K|0)!=0&(I|0)!=0)){_=0;$=0;U=0;R=0;Z=$a;V=0;D=0;Q=eb;s=0;C=0;B=fb;m=gb;h=hb;r=-30002;break a}R=(H|0)!=0;if(R|(U|0)==0){D=0;A=0;_=0}else{_=0;$=0;H=0;U=0;R=0;Z=$a;V=0;D=0;Q=eb;s=0;C=0;B=fb;m=gb;h=hb;r=-30002;break a}while(1){if((D|0)>=(f|0))break;B=s+(D*144|0)+92|0;do if(!(b[B>>1]|0)){if(R?a[s+(D*144|0)+79>>0]&1:0){ib=122;break}m=Nd(a[s+(D*144|0)+80>>0]|0,a[s+(D*144|0)+76>>0]|0,a[s+(D*144|0)+77>>0]|0,a[s+(D*144|0)+78>>0]|0)|0;if(!R)break;a[H+D>>0]=1}else ib=122;while(0);do if((ib|0)==122){ib=0;m=Nd(a[s+(D*144|0)+80>>0]|0,0,0,0)|0;if(!R)break;A=((b[B>>1]|0)==0&1)+A|0}while(0);V=(m|0)==0;c[I+(D<<2)>>2]=V?2147483647:m;D=D+1|0;_=_+(V&1^1)|0}Q=R?_a:0;e:do if(R){m=c[j+28>>2]|0;if((A|0)==(e[m>>1]|0))D=1;else{Z=0;U=0;R=0;Q=$a;r=0;D=0;q=eb;s=0;C=0;B=fb;m=gb;h=hb;A=-30004;ib=285;break a}while(1){if((D|0)>(A|0)){m=f;break}B=e[m+(D<<1)>>1]|0;if(b[s+(B*144|0)+92>>1]|0){Z=0;U=0;R=0;Q=$a;r=0;D=0;q=eb;s=0;C=0;B=fb;m=gb;h=hb;A=-30004;ib=285;break a}if(!(a[s+(B*144|0)+79>>0]&1)){Z=0;U=0;R=0;Q=$a;r=0;D=0;q=eb;s=0;C=0;B=fb;m=gb;h=hb;A=-30004;ib=285;break a}else D=D+1|0}while(1){if((m|0)>=(_a|0)){B=0;break e}c[I+(m<<2)>>2]=2147483647;m=m+1|0}}else{m=f;B=0;while(1){if((m|0)>=(_a|0))break e;D=c[(c[j>>2]|0)+((m-f|0)*36|0)+24>>2]|0;V=(D|0)==0;c[I+(m<<2)>>2]=V?2147483647:D;m=m+1|0;B=B+(V&1^1)|0}}while(0);if(R&(A|0)==0){Cq(H);H=0;Q=0;D=0}else D=U;B=B|_;if(!B){Cq(I);I=0;V=0;m=0}else{V=_a;m=Z}U=(H|0)!=0;R=(I|0)!=0;if(!(U|R)){Cq(G);Cq(P);Cq(K);H=0;I=0;aa=V;K=0;P=0;G=0;break}c[$>>2]=0;c[aa>>2]=w;c[ca>>2]=0;c[da>>2]=I;c[ea>>2]=H;c[fa>>2]=c[Qa>>2];ib=c[ga>>2]|0;c[ha>>2]=ib+1;c[ia>>2]=xa;c[ja>>2]=ib;c[la>>2]=c[ka>>2];c[ma>>2]=C;c[na>>2]=0;c[oa>>2]=V;c[pa>>2]=m;c[qa>>2]=Q;c[ra>>2]=D;c[ta>>2]=0;f:do if(B|A){er(x|0,0,za|0)|0;A=0;while(1){if((A|0)>=(_a|0)){m=0;break}m=x+((e[L+(A<<1)>>1]|0)+-1<<1)|0;if((e[m>>1]|0)<(A|0))b[m>>1]=A;A=A+1|0}while(1){A=(m|0)<(_a|0);if(!A){ib=164;break f}if(R?(c[I+(m<<2)>>2]|0)!=(c[I+(e[x+((e[L+(m<<1)>>1]|0)+-1<<1)>>1]<<2)>>2]|0):0){ib=151;break}if(U?(a[H+m>>0]|0)!=(a[H+(e[x+((e[L+(m<<1)>>1]|0)+-1<<1)>>1]|0)>>0]|0):0){ib=155;break}m=m+1|0}if((ib|0)==151){ra=db+(Za*76|0)+16|0;c[ra>>2]=c[ra>>2]|8}else if((ib|0)==155?(ra=db+(Za*76|0)+16|0,c[ra>>2]=c[ra>>2]|8,!A):0){ib=164;break}er(hb|0,0,Sa|0)|0;A=0;while(1){if((A|0)>=(_a|0))break;b[hb+(A*28|0)>>1]=b[L+(A<<1)>>1]|0;if(R)m=c[I+(A<<2)>>2]|0;else m=0;c[hb+(A*28|0)+20>>2]=m;if(U)m=a[H+A>>0]|0;else m=0;a[hb+(A*28|0)+24>>0]=m;A=A+1|0}af(n,_a,u,wc(_a,hb,M,Y,n)|0,M,x,Y,Ua,0)|0;c[ta>>2]=M;A=vc(d,n,f,_a,g,1,u,c[l>>2]|0,G,P,K,sa,Ta,ob,ub,p)|0;if((A|0)<0){Z=0;U=0;R=0;Q=$a;r=0;D=0;q=eb;s=0;C=0;B=fb;m=gb;h=hb;ib=285;break a}}else ib=164;while(0);if((ib|0)==164){B=Dq(1,76)|0;if(!B){_=B;$=0;U=0;R=0;Z=$a;V=0;D=0;Q=eb;s=0;C=0;B=fb;m=gb;h=hb;r=-30002;break a}if(!(Ib(B,f,sa)|0)){_=B;$=0;U=0;R=0;Z=$a;V=0;D=0;Q=eb;s=0;C=0;B=fb;m=gb;h=hb;r=-30002;break a}qc(B,c[ob>>2]|0);if(R){m=B+52|0;A=0;while(1){if((A|0)>=(_a|0))break;c[(c[m>>2]|0)+((e[O+(A<<1)>>1]|0)+-1<<2)>>2]=c[I+(A<<2)>>2];A=A+1|0}c[B+56>>2]=_a}else c[B+56>>2]=0;if(U){m=B+64|0;A=0;while(1){if((A|0)>=(f|0))break;a[(c[m>>2]|0)+((e[O+(A<<1)>>1]|0)+-1)>>0]=a[H+A>>0]|0;A=A+1|0}c[B+68>>2]=_a}else c[B+68>>2]=0;c[ub>>2]=B;ta=_a<<1;ir(G|0,L|0,ta|0)|0;ir(P|0,O|0,ta|0)|0;ir(K|0,J|0,ta|0)|0}c[ua>>2]=1;aa=V}while(0);if(!r){_=0;$=0;Z=aa;Q=xa;U=0;R=0;V=0;ca=0;aa=G;s=0;da=0}else{da=Dq(g,2)|0;V=Dq(g,2)|0;ca=Dq(g,2)|0;$=Dq(bb,2)|0;if((ca|0)!=0&((V|0)!=0&((da|0)!=0&($|0)!=0)))B=0;else{_=0;U=ca;R=0;Z=$a;D=0;Q=eb;s=da;C=0;B=fb;m=gb;h=hb;r=-30002;break a}while(1){if((B|0)>=(f|0))break;r=a[q+(B*144|0)+75>>0]|0;m=r<<24>>24;do if(!(b[s+(B*144|0)+92>>1]|0)){A=a[s+(B*144|0)+75>>0]|0;if(r<<24>>24==A<<24>>24){b[$+(B<<1)>>1]=32766;break}else{b[$+(B<<1)>>1]=m+16383-(A<<24>>24);break}}else b[$+(B<<1)>>1]=r<<24>>24==0?32766:m+16383&65535;while(0);B=B+1|0}c[Ba>>2]=0;c[Ca>>2]=v;c[Da>>2]=$;c[Ea>>2]=0;c[Fa>>2]=0;c[Ga>>2]=c[Qa>>2];ua=c[cb>>2]|0;c[Ha>>2]=ua+1;c[ya>>2]=bb;Z=db+(h*76|0)+40|0;c[Z>>2]=bb;c[Ia>>2]=ua;c[Ja>>2]=ua;c[Ka>>2]=f;c[La>>2]=f;c[Ma>>2]=0;c[Na>>2]=0;c[Oa>>2]=0;c[Pa>>2]=0;c[Aa>>2]=0;if(!((M|0)!=0&(Y|0)!=0&(hb|0)!=0)){_=0;U=ca;R=0;Z=$a;D=0;Q=eb;s=da;C=0;B=fb;m=gb;h=hb;r=-30002;break a}er(hb|0,0,Sa|0)|0;r=0;while(1){if((r|0)>=(f|0))break;b[hb+(r*28|0)>>1]=b[L+(r<<1)>>1]|0;b[hb+(r*28|0)+2>>1]=b[$+(r<<1)>>1]|0;r=r+1|0}af(n,f,t,wc(f,hb,M,Y,n)|0,M,x,Y,Ua,0)|0;c[Aa>>2]=M;A=vc(d,n,f,f,g,0,t,c[l>>2]|0,da,V,ca,Ra,Ta,mb,qb,p)|0;if((A|0)<0){Z=$;U=ca;R=0;Q=$a;r=V;D=0;q=eb;s=da;C=0;B=fb;m=gb;h=hb;ib=285;break a}if((c[va>>2]|0)!=0?(c[k+(Za*60|0)+40>>2]|0)==0:0)m=1;else m=(Ya|0)==0?(c[k+(Za*60|0)+52>>2]|0)!=0:0;r=m&1;U=(o|0)!=0;if(U){do if(m)r=1;else{if(!(c[wa>>2]|0)){r=0;break}r=(c[k+(h*60|0)+40>>2]|0)==0}while(0);r=r&1}if(!r){_=1;Z=aa;Q=xa;U=ca;R=0;ca=0;aa=G;s=da;da=0;break}C=Dq(g,2)|0;D=Dq(g,2)|0;R=Dq(g,2)|0;W=Dq(bb,4)|0;if(!((C|0)!=0&(D|0)!=0&(R|0)!=0&(W|0)!=0)){_=0;U=ca;Z=$a;Q=eb;s=da;B=fb;m=gb;h=hb;r=-30002;break a}B=(q|0)==0;Q=0;r=_;while(1){if((Q|0)>=(f|0)){q=r;break}do if(U)if(B){A=Nd(a[s+(Q*144|0)+80>>0]|0,a[s+(Q*144|0)+76>>0]|0,a[s+(Q*144|0)+77>>0]|0,a[s+(Q*144|0)+78>>0]|0)|0;break}else{A=Nd(a[q+(Q*144|0)+80>>0]|0,a[q+(Q*144|0)+76>>0]|0,a[q+(Q*144|0)+77>>0]|0,a[q+(Q*144|0)+78>>0]|0)|0;break}else A=Nd(a[s+(Q*144|0)+80>>0]|0,a[s+(Q*144|0)+76>>0]|0,a[s+(Q*144|0)+77>>0]|0,a[s+(Q*144|0)+78>>0]|0)|0;while(0);m=W+(Q<<2)|0;if(!A)c[m>>2]=2147483647;else{c[m>>2]=A;r=r+1|0}Q=Q+1|0}c[Ba>>2]=0;c[Ca>>2]=v;c[Da>>2]=$;c[Ea>>2]=W;c[Fa>>2]=0;c[Ga>>2]=c[Qa>>2];o=c[cb>>2]|0;c[Ha>>2]=o+1;c[ya>>2]=bb;c[Z>>2]=bb;c[Ia>>2]=o;c[Ja>>2]=o;c[Ka>>2]=f;c[La>>2]=f;c[Ma>>2]=f;c[Na>>2]=bb;c[Oa>>2]=0;c[Pa>>2]=0;c[Aa>>2]=0;g:do if(q|0){er(x|0,0,za|0)|0;r=0;while(1){if((r|0)>=(f|0)){q=0;break}q=x+((e[da+(r<<1)>>1]|0)+-1<<1)|0;if((e[q>>1]|0)<(r|0))b[q>>1]=r;r=r+1|0}while(1){if((q|0)>=(f|0))break g;if((c[W+(q<<2)>>2]|0)==(c[W+(e[x+((e[da+(q<<1)>>1]|0)+-1<<1)>>1]<<2)>>2]|0))q=q+1|0;else break}q=db+(h*76|0)+16|0;c[q>>2]=c[q>>2]|16;er(hb|0,0,Sa|0)|0;q=0;while(1){if((q|0)>=(f|0))break;b[hb+(q*28|0)>>1]=b[da+(q<<1)>>1]|0;c[hb+(q*28|0)+20>>2]=c[W+(q<<2)>>2];q=q+1|0}af(n,f,t,wc(f,hb,M,Y,n)|0,M,x,Y,Ua,0)|0;c[Aa>>2]=M;A=vc(d,n,f,f,g,1,t,c[l>>2]|0,C,D,R,Ra,Ta,qb,wb,p)|0;if((A|0)<0){Z=$;U=ca;Q=$a;r=V;q=eb;s=da;B=fb;m=gb;h=hb;ib=285;break a}else{_=1;Z=aa;ba=f;Q=xa;U=ca;ca=D;aa=G;s=da;da=C;break d}}while(0);s=Dq(1,76)|0;if(!s){_=s;U=ca;Z=$a;Q=eb;s=da;B=fb;m=gb;h=hb;r=-30002;break a}if(!(Ib(s,f,Ra)|0)){_=s;U=ca;Z=$a;Q=eb;s=da;B=fb;m=gb;h=hb;r=-30002;break a}qc(s,c[qb>>2]|0);q=s+52|0;r=0;while(1){if((r|0)>=(f|0))break;c[(c[q>>2]|0)+((e[V+(r<<1)>>1]|0)+-1<<2)>>2]=c[W+(r<<2)>>2];r=r+1|0}c[s+56>>2]=f;c[wb>>2]=s;_=f<<1;ir(C|0,da|0,_|0)|0;ir(D|0,V|0,_|0)|0;ir(R|0,ca|0,_|0)|0;_=1;Z=aa;ba=f;Q=xa;U=ca;ca=D;aa=G;s=da;da=C}}else{_=(r|0)!=0;$=0;H=0;I=0;Z=0;Q=0;J=0;K=0;U=0;R=0;O=0;P=0;V=0;ca=0;L=0;aa=0;s=0;da=0;w=0}while(0);C=c[kb>>2]|0;D=c[C+4>>2]|0;G=c[mb>>2]|0;B=c[G+4>>2]|0;if((D|0)==(B|0))A=(hp(c[C>>2]|0,c[G>>2]|0,D<<1)|0)!=0;else A=1;q=A&1;if(ab){r=c[qb>>2]|0;if(!r)A=q;else{if((B|0)==(c[r+4>>2]|0))m=(hp(c[G>>2]|0,c[r>>2]|0,B<<1)|0)!=0;else m=1;q=c[G+40>>2]|0;if((q|0)==(c[r+40>>2]|0))q=(hp(c[G+36>>2]|0,c[r+36>>2]|0,q<<1)|0)!=0;else q=1;A=(A|m|q)&1}r=c[ob>>2]|0;if((B|0)>(c[r+4>>2]|0))m=1;else m=(hp(c[G>>2]|0,c[r>>2]|0,B<<1)|0)!=0;q=c[G+40>>2]|0;if((q|0)>(c[r+40>>2]|0))q=1;else q=(hp(c[G+36>>2]|0,c[r+36>>2]|0,q<<1)|0)!=0;A=m&1|A|q&1}else A=q;m=c[sb>>2]|0;if(!m){C=c[ub>>2]|0;if(C){B=c[C+4>>2]|0;q=c[ob>>2]|0;if((B|0)==(c[q+4>>2]|0))r=(hp(c[C>>2]|0,c[q>>2]|0,B<<1)|0)!=0;else r=1;D=c[C+40>>2]|0;if((D|0)==(c[q+40>>2]|0))q=(hp(c[C+36>>2]|0,c[q+36>>2]|0,D<<1)|0)!=0;else q=1;A=r&1|A|q&1;m=c[wb>>2]|0;if(m){q=c[m+4>>2]|0;if((q|0)>(B|0))r=1;else r=(hp(c[m>>2]|0,c[C>>2]|0,q<<1)|0)!=0;q=c[m+40>>2]|0;if((q|0)>(D|0))q=1;else q=(hp(c[m+36>>2]|0,c[C+36>>2]|0,q<<1)|0)!=0;A=r&1|A|q&1}}}else{if((D|0)==(c[m+4>>2]|0))r=(hp(c[C>>2]|0,c[m>>2]|0,D<<1)|0)!=0;else r=1;q=c[G+40>>2]|0;if((q|0)==(c[m+40>>2]|0))q=(hp(c[G+36>>2]|0,c[m+36>>2]|0,q<<1)|0)!=0;else q=1;A=r&1|A|q&1}if(!A){if(ab)c[j+24>>2]=Ya;c[Va>>2]=g;c[Wa>>2]=_a;c[Xa>>2]=f;m=l+36|0;c[m>>2]=t;t=l+136|0;c[t>>2]=u;if(ab){c[l+124>>2]=_a;c[l+128>>2]=f;g=c[ob>>2]|0;q=l+140|0;c[q>>2]=c[g>>2];c[g>>2]=0;c[l+144>>2]=c[k+(Za*60|0)+24>>2];g=c[k+(Za*60|0)+12>>2]|0;c[l+152>>2]=g+1;r=l+148|0;c[r>>2]=g;c[l+156>>2]=O;c[l+160>>2]=J;c[l+164>>2]=L;c[l+168>>2]=w;g=(c[ob>>2]|0)+36|0;j=l+172|0;c[j>>2]=c[g>>2];c[g>>2]=0;g=c[(c[ob>>2]|0)+44>>2]|0;g=(Q|0)<(g|0)?Q:g;k=l+176|0;c[k>>2]=g;c[l+180>>2]=0;c[l+184>>2]=0;c[l+188>>2]=0;_a=l+132|0;c[_a>>2]=c[_a>>2]|c[db+(Za*76|0)+16>>2];yc(w,g);yc(c[j>>2]|0,c[k>>2]|0);q=c[q>>2]|0;do if(q|0){q=q+(c[r>>2]<<1)|0;if(b[q>>1]|0)break;b[q>>1]=0}while(0);q=c[ub>>2]|0;if(!q){J=0;O=0;L=0;G=aa;w=0}else{c[l+192>>2]=P;c[l+196>>2]=K;c[l+200>>2]=aa;J=q+52|0;K=c[J>>2]|0;c[l+204>>2]=K;c[J>>2]=0;J=l+208|0;c[J>>2]=I;I=l+212|0;c[I>>2]=Z;O=(c[ub>>2]|0)+64|0;c[l+216>>2]=c[O>>2];c[O>>2]=0;c[l+220>>2]=H;zc(K,Z);zc(c[J>>2]|0,c[I>>2]|0);H=0;I=0;J=0;K=0;O=0;P=0;L=0;G=0;w=0}}else G=aa;if(_){do if(ab){q=c[qb>>2]|0;u=U;m=R;A=T;B=$a;t=V;D=ca;C=da}else{q=c[mb>>2]|0;c[qb>>2]=q;c[mb>>2]=0;c[wb>>2]=c[sb>>2];c[sb>>2]=0;if((h|0)!=1){u=T;m=$a;A=0;B=0;t=E;D=F;E=0;F=0;s=z;C=y;z=0;y=0;break}r=c[m>>2]|0;if(!r){u=T;m=$a;A=0;B=0;t=E;D=F;E=0;F=0;s=z;C=y;z=0;y=0;break}if(c[t>>2]|0){u=T;m=$a;A=0;B=0;t=E;D=F;E=0;F=0;s=z;C=y;z=0;y=0;break}c[t>>2]=r;c[m>>2]=0;u=T;m=$a;A=0;B=0;t=E;D=F;E=0;F=0;s=z;C=y;z=0;y=0}while(0);c[l+24+(h*100|0)>>2]=f;c[l+24+(h*100|0)+4>>2]=f;ab=l+24+(h*100|0)+16|0;c[ab>>2]=c[q>>2];c[q>>2]=0;g=c[cb>>2]|0;c[l+24+(h*100|0)+20>>2]=g;c[l+24+(h*100|0)+28>>2]=g+1;r=l+24+(h*100|0)+24|0;c[r>>2]=g;c[l+24+(h*100|0)+32>>2]=t;c[l+24+(h*100|0)+36>>2]=u;c[l+24+(h*100|0)+40>>2]=s;c[l+24+(h*100|0)+44>>2]=v;g=(c[qb>>2]|0)+36|0;k=l+24+(h*100|0)+48|0;c[k>>2]=c[g>>2];c[g>>2]=0;g=c[qb>>2]|0;j=c[g+44>>2]|0;j=(bb|0)<(j|0)?bb:j;q=l+24+(h*100|0)+52|0;c[q>>2]=j;bb=l+24+(h*100|0)+56|0;c[bb>>2]=$;g=g+48|0;cb=l+24+(h*100|0)+60|0;c[cb>>2]=c[g>>2];c[g>>2]=0;c[l+24+(h*100|0)+64>>2]=f;f=l+24+(h*100|0)+8|0;c[f>>2]=c[f>>2]|c[db+(h*76|0)+16>>2];yc(v,j);yc(c[bb>>2]|0,c[q>>2]|0);yc(c[k>>2]|0,c[q>>2]|0);yc(c[cb>>2]|0,c[q>>2]|0);q=c[ab>>2]|0;do if(q|0){q=q+(c[r>>2]<<1)|0;if(b[q>>1]|0)break;b[q>>1]=0}while(0);q=c[wb>>2]|0;if(!q){_=0;t=0;u=0;$=0;U=0;R=m;T=A;Z=B;V=0;Q=eb;s=0;B=fb;v=0;m=gb;h=hb;r=0;break}c[l+24+(h*100|0)+68>>2]=D;c[l+24+(h*100|0)+72>>2]=m;c[l+24+(h*100|0)+76>>2]=C;t=q+52|0;u=c[t>>2]|0;c[l+24+(h*100|0)+80>>2]=u;c[t>>2]=0;t=l+24+(h*100|0)+84|0;c[t>>2]=W;_=l+24+(h*100|0)+88|0;c[_>>2]=ba;zc(u,ba);zc(c[t>>2]|0,c[_>>2]|0);_=0;t=0;u=0;$=0;W=0;U=0;R=0;T=A;Z=B;V=0;D=0;Q=eb;s=0;C=0;B=fb;v=0;m=gb;h=hb;r=0}else{_=0;t=0;u=0;Z=$a;D=ca;Q=eb;C=da;B=fb;m=gb;h=hb;r=0}}else{Z=$;Q=$a;r=V;D=ca;q=eb;G=aa;C=da;B=fb;m=gb;h=hb;ib=285}}else{_=0;$=0;H=0;I=0;W=0;J=0;K=0;U=0;R=0;Z=0;O=0;P=0;V=0;D=0;Q=eb;F=0;L=0;G=0;s=0;C=0;B=fb;y=0;w=0;m=gb;h=hb;r=-30002}}else{Z=0;H=0;I=0;W=0;J=0;K=0;U=0;R=0;T=0;Q=0;O=0;P=0;r=0;D=0;q=eb;E=0;F=0;L=0;G=0;s=0;C=0;B=fb;z=0;y=0;w=0;v=0;m=gb;h=hb;ib=285}}else{_=0;t=0;u=0;$=0;H=0;I=0;W=0;J=0;K=0;U=0;R=0;T=0;Z=0;O=0;P=0;V=0;D=0;Q=eb;E=0;F=0;L=0;G=0;s=0;C=0;B=fb;z=0;y=0;w=0;v=0;m=gb;h=hb;r=-30002}}else{_=0;t=0;u=0;$=0;H=0;I=0;W=0;Y=0;J=0;K=0;U=0;R=0;T=0;Z=0;O=0;P=0;V=0;D=0;Q=eb;E=0;F=0;M=0;L=0;G=0;s=0;C=0;B=fb;z=0;y=0;w=0;v=0;m=gb;h=0;r=-30002}}while(0);if((ib|0)==285){_=0;$=Z;Z=Q;V=r;Q=q;r=(A+30019|0)>>>0<20?A:-30016}Gh(t);Gh(u);q=c[kb>>2]|0;if(q|0?(Jb(q),jb=c[kb>>2]|0,jb|0):0)Cq(jb);q=c[mb>>2]|0;if(q|0?(Jb(q),lb=c[mb>>2]|0,lb|0):0)Cq(lb);q=c[ob>>2]|0;if(q|0?(Jb(q),nb=c[ob>>2]|0,nb|0):0)Cq(nb);q=c[qb>>2]|0;if(q|0?(Jb(q),pb=c[qb>>2]|0,pb|0):0)Cq(pb);if(_|0){Jb(_);Cq(_)}q=c[sb>>2]|0;if(q|0?(Jb(q),rb=c[sb>>2]|0,rb|0):0)Cq(rb);q=c[ub>>2]|0;if(q|0?(Jb(q),tb=c[ub>>2]|0,tb|0):0)Cq(tb);q=c[wb>>2]|0;if(q|0?(Jb(q),vb=c[wb>>2]|0,vb|0):0)Cq(vb);if(N|0)Cq(N);if(X|0)Cq(X);q=c[l>>2]|0;if(q|0){c[q+4>>2]=0;c[c[l>>2]>>2]=0}if(M|0)Cq(M);if(Y|0)Cq(Y);if(h|0)Cq(h);if(m|0)Cq(m);if(Q|0)Cq(Q);if(S|0)Cq(S);if(B|0)Cq(B);if(z|0)Cq(z);if(E|0)Cq(E);if(T|0)Cq(T);if(v|0)Cq(v);if(L|0)Cq(L);if(O|0)Cq(O);if(J|0)Cq(J);if(w|0)Cq(w);if(s|0)Cq(s);if(V|0)Cq(V);if(U|0)Cq(U);if($|0)Cq($);if(y|0)Cq(y);if(F|0)Cq(F);if(Z|0)Cq(Z);if(W|0)Cq(W);if(G|0)Cq(G);if(P|0)Cq(P);if(K|0)Cq(K);if(I|0)Cq(I);Cq(H);if(C|0)Cq(C);if(D|0)Cq(D);if(R|0)Cq(R);if(x|0)Cq(x);i=xb;return r|0}function Cc(a){a=a|0;c[a>>2]=Dc()|0;return}function Dc(){var a=0;a=Pa()|0;return ((a|0)==-1?0:a)|0}function Ec(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;Fc(a);if((b|0)!=0&(d|0)!=0){f=c[b>>2]|0;e=c[d>>2]|0;if((f|0)>-1)if((e|0)>-1|(f|0)<1)d=5;else d=6;else if((e|0)<1)d=5;else d=6;do if((d|0)==5)b=f-e|0;else if((d|0)==6){d=c[a+8>>2]|0;b=c[a+12>>2]|0;if(!((f|0)<(d|0)|(e|0)>(b|0))){b=0-((c[a>>2]|0)-f+(e-(c[a+4>>2]|0)))|0;break}if((f|0)>(b|0)|(e|0)<(d|0)){b=f-e|0;break}else{b=f-e+(c[a>>2]|0)-(c[a+4>>2]|0)|0;break}}while(0);b=~~(+(b|0)*.001)}else b=0;return b|0}function Fc(a){a=a|0;if(!(c[a>>2]|0)){c[a>>2]=2147483647;c[a+4>>2]=-2147483647;c[a+8>>2]=1073741823;c[a+12>>2]=-1073741823}return}function Gc(a,b){a=a|0;b=b|0;var d=0,e=0;e=i;i=i+16|0;d=e;if(!b)d=0;else{c[d>>2]=Dc()|0;d=Ec(a,d,b)|0}i=e;return d|0}function Hc(a,b,d){a=a|0;b=b|0;d=d|0;if(b|0){Fc(a);c[b>>2]=(c[b>>2]|0)+~~(+(d>>>0)/1.0e3*1.0e6)}return}function Ic(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;Fc(a);do if(b){f=Dc()|0;e=c[b>>2]|0;if((f|0)>-1){if((e|0)>-1|(f|0)<1)d=5}else if((e|0)<1)d=5;if((d|0)==5){b=(f|0)>(e|0);break}d=c[a+8>>2]|0;b=c[a+12>>2]|0;if((f|0)<(d|0)|(e|0)>(b|0))b=(f|0)>(e|0)|(e|0)>=(d|0)&(f|0)<=(b|0);else b=0}else b=0;while(0);return b&1|0}function Jc(d,f,g,h){d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=(h|0)!=0;if(r&(c[g+44>>2]|0)!=0)q=c[h>>2]|0;else q=0;p=0;k=0;j=0;i=0;l=0;while(1){if((p|0)>=(d|0)){o=k;n=l;break}j=(a[f+(p*144|0)+73>>0]|0)+j|0;o=((c[f+(p*144|0)+84>>2]|0)!=0&1)+l|0;if((a[f+(p*144|0)+124>>0]|0)>0){m=0;n=0;while(1){if((m|0)>=3){l=n;break}l=b[f+(p*144|0)+94+(m<<1)>>1]|0;if(!(l<<16>>16)){l=n;break}m=m+1|0;n=((a[f+(((l&65535)+-1|0)*144|0)+124>>0]|0)>0&1)+n|0}k=((m|0)==0&1)+k|0;i=l+i|0}p=p+1|0;l=o}m=(i|0)/2|0;i=(j|0)/2|0;p=g+16|0;f=c[p>>2]|0;c[p>>2]=(f|0)>(i|0)?f:i;i=i+d|0;d=g+24|0;p=c[d>>2]|0;c[d>>2]=(p|0)>(i|0)?p:i;if(q){l=c[h+16>>2]|0;k=0;j=0;while(1){if((k|0)>=(l|0))break;d=(e[q+(k*36|0)+30>>1]|0)+j|0;k=k+1|0;j=d}i=j+i+l|0}d=(i|0)<1?1:i;q=g+12|0;p=c[q>>2]|0;c[q>>2]=(p|0)>(d|0)?p:d;q=g+20|0;d=c[q>>2]|0;c[q>>2]=(d|0)>(n|0)?d:n;q=g+28|0;d=c[q>>2]|0;c[q>>2]=(d|0)>(m|0)?d:m;q=g+32|0;d=c[q>>2]|0;c[q>>2]=(d|0)>(o|0)?d:o;if(r){g=g+56|0;r=c[g>>2]|0;h=c[h+32>>2]|0;c[g>>2]=(r|0)>(h|0)?r:h}return 0}function Kc(a){a=a|0;var b=0,d=0;b=a+48|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+212|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+216|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}d=a+328|0;b=c[d>>2]|0;if(b|0){Cq(b);c[d>>2]=0}b=a+332|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+336|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+52|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+240|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+244|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+56|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+252|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+248|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+60|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+64|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+68|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+72|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+228|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+232|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+236|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+76|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+80|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+84|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+88|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+200|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+204|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+256|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+260|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+264|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+92|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+220|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+224|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+96|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+208|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}d=a+320|0;Gh(c[d>>2]|0);c[d>>2]=0;c[a+108>>2]=0;c[a+100>>2]=0;d=a+124|0;c[a+116>>2]=0;c[a+184>>2]=0;c[a+176>>2]=0;c[a+196>>2]=0;c[a+188>>2]=0;c[a+168>>2]=0;c[a+164>>2]=0;a=a+268|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;c[a+16>>2]=0;c[a+20>>2]=0;c[a+24>>2]=0;c[a+28>>2]=0;return 0}function Lc(a,b,d,e,f,g,h,i,j,k,l,m,n,o){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0;r=d-b|0;c[a+316>>2]=n;q=(n&1|0)!=0;if((e|0)>0&q){s=Dq(e,2)|0;c[a+48>>2]=s;c[a+144>>2]=e;c[a+160>>2]=e;c[a+152>>2]=f;t=Dq(d,2)|0;c[a+212>>2]=t;f=Dq(d,2)|0;c[a+216>>2]=f;f=((t|0)==0&1)+((s|0)==0&1)+((f|0)==0&1)|0;if(o){o=Dq(b,1)|0;c[a+328>>2]=o;s=Dq(b,1)|0;c[a+332>>2]=s;t=Dq(b,1)|0;c[a+336>>2]=t;f=((o|0)==0&1)+f+((s|0)==0&1)+((t|0)==0&1)|0}}else f=0;o=(n&2|0)!=0;if((m|0)>0&o){t=Dq(m,10)|0;c[a+52>>2]=t;c[a+128>>2]=m;c[a+132>>2]=m;f=((t|0)==0&1)+f|0}if((n&35|0)==35){if((l|0)>0){t=Dq(l,8)|0;c[a+56>>2]=t;c[a+136>>2]=l;c[a+140>>2]=l;f=((t|0)==0&1)+f|0}if((r|0)>0){s=Dq(r,2)|0;c[a+252>>2]=s;t=Dq(r,2)|0;c[a+248>>2]=t;f=((s|0)==0&1)+f+((t|0)==0&1)|0}}if(o){s=Dq(d,2)|0;c[a+240>>2]=s;t=Dq(d,2)|0;c[a+244>>2]=t;f=((s|0)==0&1)+f+((t|0)==0&1)|0}m=(n&8|0)!=0;l=(g|0)>0;if(l&m){s=Dq(g,6)|0;c[a+60>>2]=s;t=Dq(g,6)|0;c[a+68>>2]=t;c[a+100>>2]=g;c[a+108>>2]=g;c[a+104>>2]=g;f=((s|0)==0&1)+f+((t|0)==0&1)|0}o=(i|0)>0;if(o&m){s=Dq(i,4)|0;c[a+64>>2]=s;t=Dq(i,4)|0;c[a+72>>2]=t;c[a+116>>2]=i;c[a+124>>2]=i;c[a+120>>2]=i;f=((s|0)==0&1)+f+((t|0)==0&1)|0}g=(l|o)&m;if(g){s=Dq(d,2)|0;c[a+228>>2]=s;t=Dq(d,2)|0;c[a+232>>2]=t;f=((s|0)==0&1)+f+((t|0)==0&1)|0;if((r|0)>0&((k|0)>0&(n&32|0)!=0)){t=Dq(r,2)|0;c[a+236>>2]=t;f=((t|0)==0&1)+f|0}}m=(n&16|0)!=0;l=(h|0)>0;if(l&m){s=Dq(h,6)|0;c[a+76>>2]=s;t=Dq(h,6)|0;c[a+84>>2]=t;c[a+176>>2]=h;c[a+184>>2]=h;c[a+180>>2]=h;f=((s|0)==0&1)+f+((t|0)==0&1)|0}o=(j|0)>0;if(o&m){s=Dq(j,4)|0;c[a+80>>2]=s;t=Dq(j,4)|0;c[a+88>>2]=t;c[a+188>>2]=j;c[a+196>>2]=j;c[a+192>>2]=j;f=((s|0)==0&1)+f+((t|0)==0&1)|0}if((l|o)&m){s=Dq(d,2)|0;c[a+256>>2]=s;t=Dq(d,2)|0;c[a+260>>2]=t;f=((s|0)==0&1)+f+((t|0)==0&1)|0;if((r|0)>0&((k|0)>0&(n&32|0)!=0)){p=Dq(r,2)|0;c[a+264>>2]=p;f=((p|0)==0&1)+f|0;p=28}else p=28}else if(g)p=28;if((p|0)==28){s=Dq(b,1)|0;c[a+200>>2]=s;t=Dq(b,1)|0;c[a+204>>2]=t;f=((s|0)==0&1)+f+((t|0)==0&1)|0}if(q){if((k|0)>0&(n&32|0)!=0){t=Dq(k,2)|0;c[a+92>>2]=t;f=((t|0)==0&1)+f|0;c[a+164>>2]=k;c[a+168>>2]=k;if((r|0)>0){s=Dq(r,2)|0;c[a+220>>2]=s;t=Dq(r,2)|0;c[a+224>>2]=t;f=((s|0)==0&1)+f+((t|0)==0&1)|0}}t=Dq(e,2)|0;c[a+96>>2]=t;f=((t|0)==0&1)+f|0}t=Dq(d,2)|0;c[a+208>>2]=t;s=a+268|0;c[s>>2]=0;c[s+4>>2]=0;c[s+8>>2]=0;c[s+12>>2]=0;c[s+16>>2]=0;c[s+20>>2]=0;c[s+24>>2]=0;c[s+28>>2]=0;if((f|0)==(((t|0)==0)<<31>>31|0))f=0;else{Kc(a)|0;f=-30002}return f|0}function Mc(d,f,g,h,i,j){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0;a:do if((h|0)!=0&(i|0)>0){er(h|0,0,i*10|0)|0;k=0;p=1;while(1){if((p|0)>(d|0))break;n=e[g+(p+-1<<1)>>1]|0;do if((b[f+(n*144|0)+92>>1]|0)==0?(a[f+(n*144|0)+79>>0]&1)==0:0){if((a[f+(n*144|0)+76>>0]|0)==0?(a[f+(n*144|0)+77>>0]|0)==0:0){m=(a[f+(n*144|0)+78>>0]|0)!=0;o=10;break}l=f+(n*144|0)+80|0;m=1;o=11}else{m=0;o=10}while(0);if((o|0)==10){o=0;l=f+(n*144|0)+80|0;if(m|(a[l>>0]|0)!=0)o=11}if((o|0)==11){if((k|0)>=(i|0)){k=-3e4;break a}b[h+(k*10|0)>>1]=p;b[h+(k*10|0)+8>>1]=a[l>>0]|0;if(m){b[h+(k*10|0)+2>>1]=a[f+(n*144|0)+76>>0]|0;b[h+(k*10|0)+4>>1]=a[f+(n*144|0)+77>>0]|0;l=a[f+(n*144|0)+78>>0]|0}else{b[h+(k*10|0)+2>>1]=0;b[h+(k*10|0)+4>>1]=0;l=0}b[h+(k*10|0)+6>>1]=l;k=k+1|0}p=p+1|0}l=c[j>>2]|0;if(l){if((l|0)!=(k|0)){k=-30001;break}}else c[j>>2]=k}else k=0;while(0);return k|0}function Nc(a,d,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t){a=a|0;d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;t=t|0;var u=0,v=0,w=0,x=0,y=0,z=0,A=0;a:do if((f|0)>(d|0)&(t|0)!=0?(z=t+16|0,x=c[z>>2]|0,(x|0)!=0):0){y=c[t+8>>2]|0;v=y+(x<<1)|0;w=y+(x*3<<1)|0;A=y+(x<<1<<1)|0;k=(g|0)==0;g=d;u=0;while(1){if((g|0)>=(f|0))break;b[y+(u<<1)>>1]=(e[i+(g<<1)>>1]|0)-d;b[v+(u<<1)>>1]=(e[j+(g<<1)>>1]|0)-d;if(!k){b[A+(u<<1)>>1]=(e[l+(g<<1)>>1]|0)-d;b[w+(u<<1)>>1]=(e[m+(g<<1)>>1]|0)-d}g=g+1|0;u=u+1|0}c[a+12>>2]=h;d=t+4|0;k=0;while(1){if((k|0)>=(x|0))break;f=c[t>>2]|0;gh(a,(c[d>>2]|0)+((e[f+(k*36|0)+32>>1]|0)<<1)|0,e[f+(k*36|0)+30>>1]|0,2,9);k=k+1|0}f=(o|0)!=0;m=c[z>>2]|0;if(f){k=(m*3|0)+(c[t+12>>2]|0)|0;if((k|0)<(o|0))j=k+1|0;else{k=-3e4;break}}else j=0;l=0;k=0;while(1){if((l|0)>=(m|0))break;u=e[y+(l<<1)>>1]|0;v=c[t>>2]|0;w=k+3|0;i=v+(u*36|0)+30|0;g=b[i>>1]|0;if((w+(g&65535)|0)>=(j|0)){k=-3e4;break a}b[n+(k<<1)>>1]=g;g=0;while(1){k=k+1|0;if((g|0)==2)break;b[n+(k<<1)>>1]=b[v+(u*36|0)+(g<<1)>>1]|0;g=g+1|0}g=e[v+(u*36|0)+32>>1]|0;u=0;k=w;while(1){if((u|0)>=(e[i>>1]|0|0))break;b[n+(k<<1)>>1]=b[h+((e[(c[d>>2]|0)+(u+g<<1)>>1]|0)<<1)>>1]|0;u=u+1|0;k=k+1|0}l=l+1|0}do if(f){b[n+(k<<1)>>1]=0;if((k+1|0)!=(j|0)){k=~k;break}n=c[p>>2]|0;if(!((n|0)==0|(n|0)==(j|0))){k=-30001;break a}c[p>>2]=j;k=j}else c[p>>2]=0;while(0);if(r){b:do if(!(c[t+32>>2]|0)){l=c[z>>2]|0;u=0;g=0;while(1){while(1){if((u|0)>=(l|0))break b;v=e[A+(u<<1)>>1]|0;w=c[t>>2]|0;if(c[w+(v*36|0)+24>>2]|0)break;u=u+1|0}if((g|0)<(r|0))i=2;else{k=-3e4;break a}while(1){if((i|0)==5)break;b[q+(g<<3)+2+(i+-2<<1)>>1]=b[w+(v*36|0)+(i<<1)>>1]|0;i=i+1|0}u=u+1|0;b[q+(g<<3)>>1]=u;g=g+1|0}}else g=0;while(0);t=c[s>>2]|0;if(!((t|0)==0|(t|0)==(g|0))){k=-30001;break}}else g=0;c[s>>2]=g}else k=0;while(0);return k|0}function Oc(d,f,g,h,j,k,l,m){d=d|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;D=i;i=i+48|0;w=D;C=c[k+48>>2]|0;if((f|0)>(d|0)){x=c[k+304>>2]|0;B=c[x>>2]|0}else{B=0;x=0}z=k+160|0;v=l+8|0;A=l+12|0;p=(m|0)==0&1;m=0;u=1;a:while(1){if((u|0)>(d|0)){w=m;y=5;break}t=e[j+(u+-1<<1)>>1]|0;q=u&65535;if((m|0)>=(c[z>>2]|0)){m=-3e4;break}if(!p){n=C+(m<<1)|0;p=0}else{o=u&65535;n=C+(m<<1)|0;p=e[n>>1]|0;if(o>>>0>p>>>0){m=1;break}p=(o|0)==(p|0)&1}b[n>>1]=q;s=a[g+(t*144|0)+73>>0]|0;n=0;while(1){if((n|0)>=(s|0))break;b[w+(n<<1)>>1]=n;n=n+1|0}c[v>>2]=g+(t*144|0)+6;c[A>>2]=h;ih(l,w,s,2,10)|0;r=0;m=m+1|0;while(1){if((r|0)>=(s|0))break;q=b[h+(e[g+(t*144|0)+6+(e[w+(r<<1)>>1]<<1)>>1]<<1)>>1]|0;if((q&65535|0)<(u|0)){if((m|0)>=(c[z>>2]|0)){m=-3e4;break a}o=C+(m<<1)|0;if(!p)p=0;else{n=b[o>>1]|0;if((q&65535)>(n&65535)){m=1;break a}p=q<<16>>16==n<<16>>16&1}b[o>>1]=q;m=m+1|0}r=r+1|0}u=u+1|0}b:do if((y|0)==5){g=x+4|0;o=w;v=d;c:while(1){u=v+1|0;if((v|0)>=(f|0))break;r=(e[j+(v<<1)>>1]|0)-d|0;q=u&65535;if((o|0)>=(c[z>>2]|0)){m=-3e4;break b}if(!p){m=C+(o<<1)|0;p=0}else{n=u&65535;m=C+(o<<1)|0;p=e[m>>1]|0;if(n>>>0>p>>>0){m=1;break b}p=(n|0)==(p|0)&1}b[m>>1]=q;t=(c[g>>2]|0)+(e[B+(r*36|0)+32>>1]<<1)|0;c[A>>2]=h;s=e[B+(r*36|0)+30>>1]|0;ih(l,t,s,2,9)|0;r=0;o=o+1|0;while(1){if((r|0)>=(s|0)){v=u;continue c}q=b[h+(e[t+(r<<1)>>1]<<1)>>1]|0;if((q&65535|0)<=(v|0)){if((o|0)>=(c[z>>2]|0)){m=-3e4;break b}n=C+(o<<1)|0;if(!p)p=0;else{m=b[n>>1]|0;if((q&65535)>(m&65535)){m=1;break b}p=q<<16>>16==m<<16>>16&1}b[n>>1]=q;o=o+1|0}r=r+1|0}}do if(C|0){m=k+144|0;n=c[m>>2]|0;if(n){if((n|0)!=(o|0)){m=-30001;break b}}else c[m>>2]=o;m=k+152|0;if(o)if((c[m>>2]|0)==(w|0))break;else{m=-30001;break b}else{c[m>>2]=w;break}}while(0);m=p+-1|0}while(0);i=D;return m|0}function Pc(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0;m=i;i=i+16|0;l=m;c[a+12>>2]=d;gh(a,g,b,2,11);a=Te(d,f,g,b,l)|0;j=b<<1;k=(hp(e,f,j)|0)!=0;if(k)ir(e|0,f|0,j|0)|0;if(c[l>>2]|0)Ue(d,f,g,b)|0;if(h|0)c[h>>2]=(c[l>>2]|0)!=0|(k&1)<<1;i=m;return a|0}function Qc(d,e,f,g,h,j,k,l){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0;oa=i;i=i+368|0;A=oa+352|0;ka=oa+12|0;na=oa+8|0;ma=oa+4|0;la=oa;W=c[h+324>>2]|0;U=h+304|0;o=c[U>>2]|0;m=(o|0)==0;if((f|0)>(e|0))if(!m)if(!(c[o+16>>2]|0)){m=0;X=6}else{m=(c[o>>2]|0)!=0;X=6}else{p=0;m=0;o=0}else if(m){p=0;m=0;o=0}else{m=0;X=6}if((X|0)==6)if(((c[o+32>>2]|0)>1?(n=c[o+28>>2]|0,(n|0)!=0):0)?(b[n>>1]|0)!=0:0){p=o;o=(c[o+64>>2]&49152|0)!=0}else{p=o;o=0}da=W+24+(l*100|0)+68|0;ea=W+24+(l*100|0)+72|0;if((c[ea>>2]|0)!=0?(c[da>>2]|0)!=0:0)n=(c[W+24+(l*100|0)+76>>2]|0)!=0;else n=0;Z=m?p:0;p=n^1;if(!((k&2|0)==0|p))if(!(c[h+52>>2]|0))x=o|(c[h+56>>2]|0)!=0;else x=1;else x=0;if(k&8)if(!(c[h+60>>2]|0))n=(c[h+64>>2]|0)!=0;else n=1;else n=0;w=n&1;do if((k&16|0)==0|p)n=0;else{if((c[h+76>>2]|0)==0?(c[h+80>>2]|0)==0:0){n=0;break}n=x}while(0);v=n&1;s=m&x;ia=c[W>>2]|0;ja=c[W+4>>2]|0;aa=c[W+8>>2]|0;ba=c[W+24+(l*100|0)+12>>2]|0;c[la>>2]=0;ca=4-(k>>>14&1)|0;c[na>>2]=Dc()|0;ir(ka|0,h|0,340)|0;if(m){ha=(c[U>>2]|0)+24|0;R=c[ha>>2]|0;c[ha>>2]=1}else R=1;S=h+308|0;T=c[S>>2]|0;c[S>>2]=1;c[h+44>>2]=c[W+24+(l*100|0)+8>>2];ha=h+48|0;p=W+24+(l*100|0)+24|0;ir(c[ha>>2]|0,c[W+24+(l*100|0)+16>>2]|0,c[p>>2]<<1|0)|0;n=h+328|0;a:do if(c[n>>2]|0?(q=W+24+(l*100|0)+48|0,c[q>>2]|0):0){o=0;while(1){if((o|0)>=(e|0))break a;a[(c[n>>2]|0)+o>>0]=b[(c[q>>2]|0)+(o<<1)>>1];o=o+1|0}}while(0);n=h+332|0;b:do if(c[n>>2]|0?(r=W+24+(l*100|0)+60|0,c[r>>2]|0):0){o=0;while(1){if((o|0)>=(e|0))break b;a[(c[n>>2]|0)+o>>0]=b[(c[r>>2]|0)+(o<<1)>>1];o=o+1|0}}while(0);ga=h+144|0;c[ga>>2]=c[p>>2];fa=h+152|0;c[fa>>2]=c[W+24+(l*100|0)+20>>2];n=c[h+216>>2]|0;if(n|0)ir(n|0,c[W+24+(l*100|0)+40>>2]|0,f<<1|0)|0;n=c[h+212>>2]|0;if(n|0){ir(n|0,c[W+24+(l*100|0)+36>>2]|0,f<<1|0)|0;c[h+268>>2]=e}n=W+24+(l*100|0)+92|0;c:do if(c[n>>2]|0?(t=h+336|0,c[t>>2]|0):0){o=0;while(1){if((o|0)>=(e|0))break c;a[(c[t>>2]|0)+o>>0]=(a[(c[n>>2]|0)+o>>0]|0)==0&1;o=o+1|0}}while(0);if(x){n=c[h+240>>2]|0;if(n|0)ir(n|0,c[W+24+(l*100|0)+76>>2]|0,f<<1|0)|0;n=c[h+244>>2]|0;if(n|0){ir(n|0,c[ea>>2]|0,f<<1|0)|0;c[h+276>>2]=f}n=Mc(e,g,c[ea>>2]|0,c[h+52>>2]|0,c[h+132>>2]|0,h+128|0)|0;if((n+30019|0)>>>0>=20)if((n|0)<0){A=0;z=0;y=0;k=0;x=0;w=0;v=0;u=-30005;t=0;s=0;r=0;q=0}else X=49;else{A=0;z=0;y=0;k=0;x=0;w=0;v=0;u=n;t=0;s=0;r=0;q=0}}else{c[h+132>>2]=0;c[h+140>>2]=0;n=0;X=49}d:do if((X|0)==49){do if(m){if((s?(c[da>>2]|0)!=0:0)?(c[ea>>2]|0)!=0:0)n=(c[W+24+(l*100|0)+76>>2]|0)!=0;else n=0;u=Nc(j,e,f,n&1,c[W+24+(l*100|0)+32>>2]|0,c[W+24+(l*100|0)+36>>2]|0,c[W+24+(l*100|0)+40>>2]|0,0,c[ea>>2]|0,c[W+24+(l*100|0)+76>>2]|0,c[h+92>>2]|0,c[h+168>>2]|0,h+164|0,c[h+56>>2]|0,c[h+140>>2]|0,h+136|0,Z)|0;if((u+30019|0)>>>0<20){A=0;z=0;y=0;k=0;x=0;w=0;v=0;t=0;s=0;r=0;q=0;break d}if((u|0)<1){A=0;z=0;y=0;k=0;x=0;w=0;v=0;u=-30005;t=0;s=0;r=0;q=0;break d}p=c[Z+16>>2]|0;q=c[Z+8>>2]|0;n=c[h+224>>2]|0;if(n|0)ir(n|0,q+(p<<1)|0,p<<1|0)|0;n=c[h+220>>2]|0;if(n|0){ir(n|0,q|0,p<<1|0)|0;c[h+272>>2]=p}if(!x)break;n=p<<1;o=c[h+248>>2]|0;if(o|0)ir(o|0,q+(p*3<<1)|0,n|0)|0;ir(c[h+252>>2]|0,q+(n<<1)|0,n|0)|0;c[h+280>>2]=p}else u=n;while(0);n=c[h+96>>2]|0;if(n|0){ir(n|0,c[ha>>2]|0,c[ga>>2]<<1|0)|0;c[h+148>>2]=c[ga>>2];c[h+156>>2]=c[fa>>2]}do if((e|0)<2){if((e|0)>=1?a[g+125>>0]|0:0){o=v;n=0;break}o=0;n=0}else{o=v;n=w}while(0);s=(n|0)!=0;P=x&(o|0)!=0;if(s|P){V=aa<<1;z=Bq(V)|0;_=Bq(V)|0;$=Bq(V)|0;t=Bq(V)|0;if((_|0)!=0&((ba|0)!=0&(z|0)!=0&($|0)!=0)?(c[ha>>2]|0)!=0:0){c[h+320>>2]=ba;ir(ka|0,h|0,340)|0;Q=(k&64|0)!=0;n=(n|o|0)==0;if(Q|n)A=0;else{c[A>>2]=0;c[A+4>>2]=0;c[A+8>>2]=0;c[A+12>>2]=0}O=h+112|0;c[O>>2]=0;Y=h+172|0;c[Y>>2]=0;e:do if(n)q=0;else{q=Dq(ja,4)|0;if(!q){y=0;k=0;x=0;w=0;v=_;u=-30002;s=0;r=$;break d}else n=2;while(1){if((n|0)>=(ja|0))break;o=c[ia+(n<<2)>>2]|0;if(!o)break;b[o>>1]=0;n=n+1|0}N=n+-2|0;n=(N|0)/2|0;if((N|0)<=1)break;r=n+2|0;while(1){if((r|0)>=(ja|0))break e;o=ia+(r<<2)|0;p=c[o>>2]|0;if(!p)break e;c[q+(r-n<<2)>>2]=p;c[o>>2]=0;r=r+1|0}}while(0);do if(s){J=W+24+(l*100|0)+36|0;I=f<<1;ir(z|0,c[J>>2]|0,I|0)|0;K=W+24+(l*100|0)+32|0;ir(_|0,c[K>>2]|0,I|0)|0;ir(t|0,c[W+24+(l*100|0)+40>>2]|0,I|0)|0;L=Pc(j,f,t,_,$,z,0)|0;ir(c[h+208>>2]|0,c[J>>2]|0,I|0)|0;u=Id(g,e,c[K>>2]|0,c[J>>2]|0,_,z,h,j,0)|0;if((u+30019|0)>>>0<20){y=0;k=0;x=0;w=0;v=_;s=0;r=$;break d}if((u|0)<0){y=0;k=0;x=0;w=0;v=_;u=-30010;s=0;r=$;break d}n=Bq(V)|0;if(!Q){s=Bq(V+2|0)|0;if((Ge(A,f)|0)<0){y=0;k=0;x=n;w=0;v=_;u=-30002;r=$;break d}}else s=0;if(!((ia|0)!=0&(q|0)!=0&(n|0)!=0&(Q|(s|0)!=0))){y=0;k=0;x=n;w=0;v=_;u=-30002;r=$;break d}c[q>>2]=_;c[ia>>2]=_;c[q+4>>2]=z;c[ia+4>>2]=z;p=2;while(1){if((p|0)>=(ja|0)){p=2;break}o=c[ia+(p<<2)>>2]|0;if(!o){p=2;break}b[o>>1]=0;p=p+1|0}while(1){if((p|0)>=(ja|0))break;o=c[q+(p<<2)>>2]|0;if(!o)break;b[o>>1]=0;p=p+1|0}E=h+36|0;c[E>>2]=0;F=h+32|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;c[F>>2]=1;u=wf(d,j,g,e,f,aa,0,c[K>>2]|0,c[J>>2]|0,n,t,ia,q,$,L,s,ba,h,A,0,ca)|0;if((u+30019|0)>>>0<20){y=0;k=0;x=n;w=0;v=_;r=$;break d}if(!u){y=h+116|0;k=c[y>>2]|0;k=0-((k|0)>-1?k:0-k|0)|0;c[y>>2]=k;c[ka+116>>2]=k;k=h+100|0;y=c[k>>2]|0;y=0-((y|0)>-1?y:0-y|0)|0;c[k>>2]=y;c[ka+100>>2]=y;y=0;k=0;x=n;w=0;v=_;u=-30010;r=$;break d}M=h+100|0;G=ka+100|0;c[G>>2]=c[M>>2];N=h+116|0;H=ka+116|0;c[H>>2]=c[N>>2];k=h+228|0;r=c[k>>2]|0;if(!r)o=0;else{o=0;u=0;while(1){if((u|0)>=(f|0))break;D=b[n+(u<<1)>>1]|0;p=D&65535;if(D<<16>>16==0|(p|0)>(f|0))o=o+1|0;else b[r+(p+-1<<1)>>1]=u;u=u+1|0}c[h+284>>2]=o|0?0-e|0:e}do if(m){p=h+236|0;if(!(c[p>>2]|0))break;u=Oi(j,Z,e,f,n)|0;if((u|0)<=0)if((u+30019|0)>>>0<20){y=0;k=0;x=n;w=0;v=_;r=$;break d}else break;else{D=c[Z+16>>2]|0;ir(c[p>>2]|0,c[Z+8>>2]|0,D<<1|0)|0;c[h+288>>2]=o|0?0-D|0:D;break}}while(0);o=Bq(V)|0;if(!o){y=0;k=0;x=n;w=0;v=_;u=-30002;r=$;break d}p=c[ka+68>>2]|0;y=h+60|0;c[y>>2]=p;B=h+64|0;c[B>>2]=c[ka+72>>2];r=c[G>>2]|0;c[M>>2]=r;C=h+104|0;c[C>>2]=r;w=ka+104|0;c[w>>2]=r;v=c[H>>2]|0;c[N>>2]=v;D=h+120|0;c[D>>2]=v;x=ka+120|0;c[x>>2]=v;if((r|0)>0|(v|0)>0){ir(p|0,c[ka+60>>2]|0,r*6|0)|0;ir(c[B>>2]|0,c[ka+64>>2]|0,c[N>>2]<<2|0)|0}ir(o|0,n|0,V|0)|0;v=h+232|0;r=c[v>>2]|0;do if(r|0){p=c[k>>2]|0;if(!p)break;ir(r|0,p|0,I|0)|0}while(0);u=Hd(g,f,n,$,h,1)|0;if((u+30019|0)>>>0<20){y=0;k=0;x=n;w=o;v=_;r=$;break d}if((u|0)<=0){if(u|0){X=142;break}c[y>>2]=c[ka+60>>2];c[B>>2]=c[ka+64>>2];c[M>>2]=c[G>>2];c[N>>2]=c[H>>2];if(m){m=o;u=0;X=143;break}else{M=n;w=o;u=0;break}}else r=2;while(1){if((r|0)>=(ja|0)){r=2;break}p=c[ia+(r<<2)>>2]|0;if(!p){r=2;break}b[p>>1]=0;r=r+1|0}while(1){if((r|0)>=(ja|0))break;p=c[q+(r<<2)>>2]|0;if(!p)break;b[p>>1]=0;r=r+1|0}c[E>>2]=0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;c[F>>2]=1;u=wf(d,j,g,e,f,aa,0,c[K>>2]|0,c[J>>2]|0,o,t,ia,q,$,L,s,ba,h,A,0,ca)|0;if((u+30019|0)>>>0<20){y=0;k=0;x=n;w=o;v=_;r=$;break d}if(!u){y=c[N>>2]|0;y=0-((y|0)>-1?y:0-y|0)|0;c[N>>2]=y;c[H>>2]=y;y=c[M>>2]|0;y=0-((y|0)>-1?y:0-y|0)|0;c[M>>2]=y;c[G>>2]=y;y=0;k=0;x=n;w=o;v=_;u=-30010;r=$;break d}I=c[M>>2]|0;c[w>>2]=I;c[C>>2]=I;K=c[N>>2]|0;c[x>>2]=K;c[D>>2]=K;c[y>>2]=c[ka+60>>2];c[B>>2]=c[ka+64>>2];J=c[G>>2]|0;c[M>>2]=J;L=c[H>>2]|0;c[N>>2]=L;if(!((I|0)==(J|0)&(K|0)==(L|0))){y=0;k=0;x=n;w=o;v=_;u=-30015;r=$;break d}u=Hd(g,f,n,$,h,0)|0;if((u+30019|0)>>>0<20){y=0;k=0;x=n;w=o;v=_;r=$;break d}u=c[v>>2]|0;if(u|0){p=0;v=0;while(1){if((v|0)>=(f|0))break;L=b[o+(v<<1)>>1]|0;r=L&65535;if(L<<16>>16==0|(r|0)>(f|0))p=p+1|0;else b[u+(r+-1<<1)>>1]=v;v=v+1|0}c[h+284>>2]=p|0?0-e|0:e}c[O>>2]=(we(c[h+68>>2]|0,c[C>>2]|0,c[h+72>>2]|0,c[D>>2]|0,c[y>>2]|0,c[M>>2]|0,c[B>>2]|0,c[N>>2]|0)|0)+2;if(m){m=o;u=0;X=143}else{M=n;w=o;u=0}}else{n=0;o=0;s=0;X=142}while(0);if((X|0)==142)if(m){m=o;X=143}else{M=n;w=o}if((X|0)==143){c[(c[U>>2]|0)+24>>2]=R;M=n;w=m}c[S>>2]=T;if(!P){y=0;k=0;x=M;v=_;r=$;break}F=f<<1;ir(z|0,c[ea>>2]|0,F|0)|0;ir(_|0,c[da>>2]|0,F|0)|0;ir(t|0,c[W+24+(l*100|0)+76>>2]|0,F|0)|0;I=Pc(j,f,t,_,$,z,0)|0;ir(c[h+208>>2]|0,c[ea>>2]|0,F|0)|0;L=Bq(V)|0;if(!(Q|(s|0)!=0))s=Bq(V+2|0)|0;if(!Q?Ge(A,f)|0:0){y=L;k=0;x=M;v=_;u=-30002;r=$;break}if(!((ia|0)!=0&(q|0)!=0&(L|0)!=0&(Q|(s|0)!=0))){y=L;k=0;x=M;v=_;u=-30002;r=$;break}c[q>>2]=_;c[ia>>2]=_;c[q+4>>2]=z;c[ia+4>>2]=z;ud(g,e,la);vd(h,ka);u=Id(g,e,c[da>>2]|0,c[ea>>2]|0,_,z,h,j,1)|0;if((u+30019|0)>>>0<20){y=L;k=0;x=M;v=_;r=$;break}do if(!u){c[h+176>>2]=0;c[ka+176>>2]=0;c[h+188>>2]=0;c[ka+188>>2]=0;c[h+292>>2]=0;c[h+296>>2]=0;c[h+180>>2]=0;c[ka+180>>2]=0;c[h+192>>2]=0;c[ka+192>>2]=0;m=0;n=0}else{n=2;while(1){if((n|0)>=(ja|0)){n=2;break}m=c[ia+(n<<2)>>2]|0;if(!m){n=2;break}b[m>>1]=0;n=n+1|0}while(1){if((n|0)>=(ja|0))break;m=c[q+(n<<2)>>2]|0;if(!m)break;b[m>>1]=0;n=n+1|0}B=h+36|0;c[B>>2]=0;C=h+32|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;c[C>>2]=1;u=wf(d,j,g,e,f,aa,0,c[da>>2]|0,c[ea>>2]|0,L,t,ia,q,$,I,s,ba,h,A,0,ca)|0;if((u+30019|0)>>>0<20){y=L;k=0;x=M;v=_;r=$;break d}H=h+100|0;m=c[H>>2]|0;if(!u){y=0-((m|0)>-1?m:0-m|0)|0;c[h+176>>2]=y;c[ka+176>>2]=y;y=c[h+116>>2]|0;y=0-((y|0)>-1?y:0-y|0)|0;c[h+188>>2]=y;c[ka+188>>2]=y;y=L;k=0;x=M;v=_;u=-30010;r=$;break d}G=ka+176|0;c[G>>2]=m;K=h+176|0;c[K>>2]=m;D=h+116|0;v=c[D>>2]|0;E=ka+188|0;c[E>>2]=v;J=h+188|0;c[J>>2]=v;v=h+256|0;o=c[v>>2]|0;if(!o)m=0;else{m=0;p=0;while(1){if((p|0)>=(f|0))break;X=b[L+(p<<1)>>1]|0;n=X&65535;if(X<<16>>16==0|(n|0)>(f|0))m=m+1|0;else b[o+(n+-1<<1)>>1]=p;p=p+1|0}c[h+292>>2]=m|0?0-e|0:e}n=h+264|0;do if(c[n>>2]|0){u=Oi(j,Z,e,f,L)|0;if((u|0)<=0)if((u+30019|0)>>>0<20){y=L;k=0;x=M;v=_;r=$;break d}else break;else{X=c[Z+16>>2]|0;ir(c[n>>2]|0,c[Z+8>>2]|0,X<<1|0)|0;c[h+296>>2]=m|0?0-X|0:X;break}}while(0);m=Bq(V)|0;if(!m){y=L;k=0;x=M;v=_;u=-30002;r=$;break d}n=c[ka+84>>2]|0;k=h+60|0;c[k>>2]=n;y=h+64|0;c[y>>2]=c[ka+88>>2];o=c[G>>2]|0;c[H>>2]=o;c[h+104>>2]=o;p=ka+180|0;c[p>>2]=o;Z=c[E>>2]|0;c[D>>2]=Z;c[h+120>>2]=Z;x=ka+192|0;c[x>>2]=Z;if((o|0)>0|(Z|0)>0){ir(n|0,c[ka+76>>2]|0,o*6|0)|0;ir(c[y>>2]|0,c[ka+80>>2]|0,c[D>>2]<<2|0)|0}ir(m|0,L|0,V|0)|0;r=h+260|0;o=c[r>>2]|0;do if(o|0){n=c[v>>2]|0;if(!n)break;ir(o|0,n|0,F|0)|0}while(0);n=Hd(g,f,L,$,h,1)|0;if((n+30019|0)>>>0<20){y=L;k=m;x=M;v=_;u=n;r=$;break d}if((n|0)>0)o=2;else{if(n|0)break;c[k>>2]=c[ka+76>>2];c[y>>2]=c[ka+80>>2];c[H>>2]=c[G>>2];c[D>>2]=c[E>>2];n=0;break}while(1){if((o|0)>=(ja|0)){o=2;break}n=c[ia+(o<<2)>>2]|0;if(!n){o=2;break}b[n>>1]=0;o=o+1|0}while(1){if((o|0)>=(ja|0))break;n=c[q+(o<<2)>>2]|0;if(!n)break;b[n>>1]=0;o=o+1|0}c[B>>2]=0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;c[C>>2]=1;u=wf(d,j,g,e,f,aa,0,c[da>>2]|0,c[ea>>2]|0,m,t,ia,q,$,I,s,ba,h,A,0,ca)|0;if((u+30019|0)>>>0<20){y=L;k=m;x=M;v=_;r=$;break d}o=c[H>>2]|0;if(!u){y=0-((o|0)>-1?o:0-o|0)|0;c[K>>2]=y;c[G>>2]=y;y=c[D>>2]|0;y=0-((y|0)>-1?y:0-y|0)|0;c[J>>2]=y;c[E>>2]=y;y=L;k=m;x=M;v=_;u=-30010;r=$;break d}c[p>>2]=o;v=h+180|0;c[v>>2]=o;n=c[D>>2]|0;c[x>>2]=n;u=h+192|0;c[u>>2]=n;c[k>>2]=c[ka+76>>2];c[y>>2]=c[ka+80>>2];c[H>>2]=c[G>>2];c[D>>2]=c[E>>2];if((o|0)!=(c[K>>2]|0)){y=L;k=m;x=M;v=_;u=-30015;r=$;break d}if((n|0)!=(c[J>>2]|0)){y=L;k=m;x=M;v=_;u=-30015;r=$;break d}n=Hd(g,f,L,$,h,0)|0;if((n+30019|0)>>>0<20){y=L;k=m;x=M;v=_;u=n;r=$;break d}p=c[r>>2]|0;if(p|0){n=0;r=0;while(1){if((r|0)>=(f|0))break;j=b[m+(r<<1)>>1]|0;o=j&65535;if(j<<16>>16==0|(o|0)>(f|0))n=n+1|0;else b[p+(o+-1<<1)>>1]=r;r=r+1|0}c[h+292>>2]=n|0?0-e|0:e}c[Y>>2]=(we(c[h+84>>2]|0,c[v>>2]|0,c[h+88>>2]|0,c[u>>2]|0,c[h+76>>2]|0,c[K>>2]|0,c[h+80>>2]|0,c[J>>2]|0)|0)+2;n=0}while(0);c[h+52>>2]=c[ka+52>>2];y=L;k=m;x=M;v=_;u=n;r=$}else{A=0;y=0;k=0;x=0;w=0;v=_;u=-30002;s=0;r=$;q=0}}else{A=0;z=0;y=0;k=0;x=0;w=0;v=0;t=0;s=0;r=0;q=0}}while(0);if(c[la>>2]|0){ud(g,e,la);wd(h,ka)}m=h+96|0;if(c[m>>2]|0){hh(ha,m,4);hh(ga,h+148|0,4);hh(fa,h+156|0,4)}if(ia|0){c[ia+4>>2]=0;c[ia>>2]=0;m=2;while(1){if((m|0)>=(ja|0))break;if(!(c[ia+(m<<2)>>2]|0))break;m=m+1|0}if(q|0){p=ja+-1|0;o=2;while(1){if((o|0)>=(ja|0))break;n=c[q+(o<<2)>>2]|0;if(!n)break;if((m|0)<(p|0)){c[ia+(m<<2)>>2]=n;m=m+1|0}else Cq(n);o=o+1|0}Cq(q)}}c[h+320>>2]=0;if(z|0)Cq(z);if(r|0)Cq(r);if(v|0)Cq(v);if(t|0)Cq(t);if(s|0)Cq(s);Ie(A);if(y|0)Cq(y);if(k|0)Cq(k);if(x|0)Cq(x);if(w|0)Cq(w);c[ma>>2]=Dc()|0;c[h+28>>2]=Ec(d,ma,na)|0;i=oa;return ((u|0)>-2?e:u)|0}function Rc(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;if((c[f+324>>2]|0)!=0?(c[f+320>>2]|0)==0:0)e=Qc(a,b,d,e,f,g,h,i)|0;else e=-30016;return e|0}function Sc(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;c[a+20>>2]=(b|0)==2?2:1;c[a+16>>2]=d;return}function Tc(a){a=a|0;var b=0;if(a|0?(Cq(c[a>>2]|0),c[a>>2]=0,c[a+4>>2]=0,c[a+8>>2]=0,c[a+12>>2]=0,b=c[a+16>>2]|0,!((b|0)==0|(c[2504]|0)==(b|0)|(c[2475]|0)==(b|0)|(c[2534]|0)==(b|0))):0)oq(b)|0;return}function Uc(b){b=b|0;var d=0,e=0;switch(c[b+20>>2]|0){case 1:{d=b+12|0;e=c[d>>2]|0;if((e|0)<(c[b+8>>2]|0)){c[d>>2]=e+1;d=a[(c[b>>2]|0)+e>>0]|0}else d=-1;break}case 2:{d=lq(c[b+16>>2]|0)|0;break}default:d=-1}return d|0}function Vc(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;g=c+-1|0;do if((c|0)<1)b=0;else{c=0;a:while(1){if((c|0)>=(g|0))break;e=Uc(d)|0;switch(e|0){case -1:{h=6;break a}case 9:{h=4;break a}default:{}}f=c+1|0;a[b+c>>0]=e;if((e|0)==10){c=f;break}else c=f}if((h|0)==4){a[b+c>>0]=10;c=c+1|0}else if((h|0)==6)if(!c){b=0;break}a[b+c>>0]=0}while(0);return b|0}function Wc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+16|0;k=m;h=d+-1|0;j=b+h|0;g=d+-2|0;do{if(!(Vc(b,h,e)|0)){l=3;break}a[j>>0]=0;if(!(op(b,10)|0))d=(cp(b)|0)==(g|0);else d=0;c[f>>2]=d&1;Go(b,k)|0;d=c[k>>2]|0}while(!(d|0));if((l|0)==3){c[f>>2]=0;d=-1}i=m;return d|0}function Xc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0;j=i;i=i+16|0;h=j;g=d+-1|0;if(!(Vc(b,g,e)|0)){c[f>>2]=0;g=-1}else{a[b+g>>0]=0;if(!(op(b,10)|0))g=(cp(b)|0)==(d+-2|0);else g=0;c[f>>2]=g&1;Go(b,h)|0;g=c[h>>2]|0}i=j;return g|0}function Yc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+16|0;m=n;a:do if(a){switch(c[a+20>>2]|0){case 1:break;case 2:{a=a+16|0;l=(c[a>>2]|0)==0;c[m>>2]=d;if(l){e=0;a=Bp(c[2504]|0,b,m)|0}else{e=Bp(c[a>>2]|0,b,m)|0;a=0}a=e|0?e:a;break a}default:{a=0;break a}}c[m>>2]=d;f=Zc(b,m)|0;if((f|0)>-1){k=a+4|0;e=c[k>>2]|0;l=a+8|0;j=c[l>>2]|0;if((e-j|0)<=(f|0)){g=(f|0)<32768?32768:f;h=Dq(e+g|0,1)|0;if(!h){a=-1;break}f=c[a>>2]|0;if(f){if((j|0)>0)ir(h|0,f|0,j|0)|0;Cq(f);e=c[k>>2]|0}c[a>>2]=h;c[k>>2]=e+g}c[m>>2]=d;a=rq((c[a>>2]|0)+(c[l>>2]|0)|0,b,m)|0;if((a|0)>-1)c[l>>2]=(c[l>>2]|0)+a}else a=-1}else a=-1;while(0);i=n;return a|0}function Zc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=b;b=0;a:while(1){switch(a[e>>0]|0){case 0:break a;case 37:{f=e+1|0;e=a[f>>0]|0;if(e<<24>>24==37){e=f;i=4}else{g=0;b:while(1){switch(e<<24>>24){case 48:case 43:case 45:case 32:break;case 35:{b=b+2|0;break}case 42:{j=(c[d>>2]|0)+(4-1)&~(4-1);g=c[j>>2]|0;c[d>>2]=j+4;break}default:break b}j=f+1|0;e=a[j>>0]|0;f=j}c:do if(!g){g=yq(f)|0;while(1){if(!(e<<24>>24)){e=0;break c}if(((e<<24>>24)+-48|0)>>>0>=10)break c;j=f+1|0;e=a[j>>0]|0;f=j}}while(0);if((g|0)<0){b=-1;break a}if(e<<24>>24==46){i=f+1|0;e=a[i>>0]|0;d:do if(e<<24>>24==42){j=(c[d>>2]|0)+(4-1)&~(4-1);h=c[j>>2]|0;c[d>>2]=j+4;f=f+2|0}else{h=yq(i)|0;f=i;while(1){if(!(e<<24>>24))break d;if(((e<<24>>24)+-48|0)>>>0>=10)break d;j=f+1|0;e=a[j>>0]|0;f=j}}while(0);if((h|0)<0){b=-1;break a}e=a[f>>0]|0}else h=0;e:do switch(e<<24>>24|0){case 104:{f=f+1|0;e=a[f>>0]|0;switch(e<<24>>24|0){case 117:case 88:case 120:case 111:case 105:case 100:{i=0;break e}default:{}}i=65536;break}case 108:{f=f+1|0;e=a[f>>0]|0;switch(e<<24>>24|0){case 102:case 117:case 88:case 120:case 111:case 105:case 100:{i=0;break}default:{b=-1;break a}}break}case 76:case 78:case 70:{f=f+1|0;e=a[f>>0]|0;i=0;break}default:i=0}while(0);j=e<<24>>24;e=j|i;f:do if((e|0)>=65635){if((e|0)>=131155)switch(e|0){case 131155:case 131187:case 131171:{b=-1;break a}default:{i=36;break f}}if((e|0)<65651)switch(e|0){case 65635:{i=31;break f}default:{i=36;break f}}if((e|0)<131139)switch(e|0){case 65651:{i=33;break f}default:{i=36;break f}}else switch(e|0){case 131139:{b=-1;break a}default:{i=36;break f}}}else{g:do if((e|0)>=115)if((e|0)<65603)switch(e|0){case 115:break g;default:{i=36;break f}}else switch(e|0){case 65603:{i=31;break f}case 65619:{i=33;break f}default:{i=36;break f}}else{switch(e|0){case 83:break g;case 67:case 99:break;default:{i=36;break f}}c[d>>2]=((c[d>>2]|0)+(4-1)&~(4-1))+4;e=2;i=34;break f}while(0);i=(c[d>>2]|0)+(4-1)&~(4-1);e=c[i>>2]|0;c[d>>2]=i+4;e=cp(e)|0;e=(e|0)<1?1:e;i=34}while(0);h:do if((i|0)==31){c[d>>2]=((c[d>>2]|0)+(4-1)&~(4-1))+4;e=2;i=34}else if((i|0)==33){j=(c[d>>2]|0)+(4-1)&~(4-1);e=c[j>>2]|0;c[d>>2]=j+4;e=cp(e)|0;e=(e|0)<1?1:e;i=34}else if((i|0)==36){i=0;switch(j|0){case 111:case 88:case 120:case 117:case 105:case 100:{c[d>>2]=((c[d>>2]|0)+(4-1)&~(4-1))+4;g=h+g|0;g=(g|0)<32?32:g;break h}case 71:case 103:case 102:case 101:{c[d>>2]=((c[d>>2]|0)+(8-1)&~(8-1))+8;g=h+g|0;g=(g|0)<32?32:g;break h}case 112:{c[d>>2]=((c[d>>2]|0)+(4-1)&~(4-1))+4;g=h+g|0;g=(g|0)<32?32:g;break h}case 110:{c[d>>2]=((c[d>>2]|0)+(4-1)&~(4-1))+4;g=0;break h}default:{b=-1;break a}}}while(0);if((i|0)==34){i=0;e=(e|0)>(g|0)?e:g;if(!h)g=e;else g=(e|0)<(h|0)?e:h}e=f;b=g+b|0}break}default:i=4}if((i|0)==4)b=b+1|0;e=e+1|0}return b|0}function _c(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;e=n;m=n+8|0;a:do if(a){switch(c[a+20>>2]|0){case 1:break;case 2:{c[m>>2]=d;a=c[a+16>>2]|0;c[e>>2]=m;$c(a,b,e)|0;a=0;break a}default:{a=0;break a}}c[m>>2]=d;f=Zc(b,m)|0;if((f|0)>-1){k=a+4|0;e=c[k>>2]|0;l=a+8|0;j=c[l>>2]|0;if((e-j|0)<=(f|0)){g=(f|0)<32768?32768:f;h=Dq(e+g|0,1)|0;if(!h){a=-1;break}f=c[a>>2]|0;if(f){if((j|0)>0)ir(h|0,f|0,j|0)|0;Cq(f);e=c[k>>2]|0}c[a>>2]=h;c[k>>2]=e+g}c[m>>2]=d;a=rq((c[a>>2]|0)+(c[l>>2]|0)|0,b,m)|0;if((a|0)>-1)c[l>>2]=(c[l>>2]|0)+a}else a=-1}else a=-1;while(0);i=n;return a|0}function $c(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;i=i+16|0;f=e;a=(a|0)==0?c[2504]|0:a;c[f>>2]=d;d=Bp(a,b,f)|0;i=e;return d|0}function ad(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+16|0;m=n;a:do if(a){switch(c[a+20>>2]|0){case 1:break;case 2:{a=a+16|0;if(!(c[a>>2]|0)){a=0;break a}c[m>>2]=d;a=bd(c[a>>2]|0,b,m)|0;break a}default:{a=0;break a}}c[m>>2]=d;f=Zc(b,m)|0;if((f|0)>-1){k=a+4|0;e=c[k>>2]|0;l=a+8|0;j=c[l>>2]|0;if((e-j|0)<=(f|0)){g=(f|0)<32768?32768:f;h=Dq(e+g|0,1)|0;if(!h){a=-1;break}f=c[a>>2]|0;if(f){if((j|0)>0)ir(h|0,f|0,j|0)|0;Cq(f);e=c[k>>2]|0}c[a>>2]=h;c[k>>2]=e+g}c[m>>2]=d;a=rq((c[a>>2]|0)+(c[l>>2]|0)|0,b,m)|0;if((a|0)>-1)c[l>>2]=(c[l>>2]|0)+a}else a=-1}else a=-1;while(0);i=n;return a|0}function bd(b,d,e){b=b|0;d=d|0;e=e|0;if(((d|0)!=0&(c[2475]|0)==(b|0)?(a[d>>0]|0)!=0:0)?(a[d+((cp(d)|0)+-1)>>0]|0)==13:0)e=Bp(b,d,e)|0;else e=Bp(b,d,e)|0;return e|0}function cd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=i;i=i+16|0;e=f;if(!a)e=0;else{c[e>>2]=d;e=bd(a,b,e)|0}i=f;return e|0}function dd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=i;i=i+64|0;f=h;switch(c[e+20>>2]|0){case 2:{e=c[e+16>>2]|0;er(b|0,0,d|0)|0;d=pq(b,d,e)|0;if(d)if(!(op(d,10)|0)){do if(!(pq(f,64,e)|0))break;while(!(op(f,10)|0));g=14}else{e=d;g=15}else d=0;break}case 1:{er(b|0,0,d|0)|0;d=ed(b,d,e)|0;if(d)if(!(op(d,10)|0)){do if(!(ed(f,64,e)|0))break;while(!(op(f,10)|0));g=14}else{e=d;g=15}else d=0;break}default:d=0}if((g|0)==14)if(!d)d=0;else{e=d;g=15}if((g|0)==15){d=op(b,13)|0;if(!d)d=e;else{a[d>>0]=10;a[d+1>>0]=0;d=e}}i=h;return d|0}function ed(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=e+12|0;e=(c[e>>2]|0)+(c[j>>2]|0)|0;if((d|0)<1|(e|0)==0)e=0;else{h=d;d=0;g=e;i=b;while(1){if((h|0)<=1){e=i;break}f=a[g>>0]|0;d=f<<24>>24;if(!(f<<24>>24)){e=i;break}c[j>>2]=(c[j>>2]|0)+1;e=i+1|0;a[i>>0]=f;if(f<<24>>24==10)break;else{h=h+-1|0;g=g+1|0;i=e}}a[e>>0]=0;e=(d|0)==0&(e|0)==(b|0)?0:b}return e|0}function fd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;b=(b|0)<1?262144:b;e=Dq(b,1)|0;if(!e)b=-1;else{c[a>>2]=e;c[a+4>>2]=b;c[a+12>>2]=(d|0)<1?262144:d}return b|0}function gd(b){b=b|0;var d=0;if(b|0){d=c[b>>2]|0;if(d|0)a[d>>0]=0;c[b+12>>2]=0;c[b+8>>2]=0}return}function hd(a){a=a|0;if(a|0){Cq(c[a>>2]|0);c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0}return}function id(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;do if(a){if((b|0)<1){d=c[a+4>>2]|0;break}g=c[a+8>>2]|0;h=a+4|0;d=c[h>>2]|0;if((g+b|0)>=(d|0)){e=c[a+12>>2]|0;e=(e|0)>(b|0)?e:b;f=Dq(e+d|0,1)|0;if(!f)d=-1;else{b=c[a>>2]|0;if(b){if((g|0)>0)ir(f|0,b|0,g|0)|0;Cq(b);d=c[h>>2]|0}c[a>>2]=f;d=d+e|0;c[h>>2]=d}}}else d=-1;while(0);return d|0}function jd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=i;i=i+16|0;f=g;if(a){c[f>>2]=d;e=Zc(b,f)|0;if((e|0)>=0){id(a,e)|0;c[f>>2]=d;d=a+8|0;e=rq((c[a>>2]|0)+(c[d>>2]|0)|0,b,f)|0;if((e|0)>-1)c[d>>2]=(c[d>>2]|0)+e}else e=0}else e=-1;i=g;return e|0}function kd(a){a=a|0;var b=0,d=0,e=0,f=0;f=i;i=i+16|0;d=f+8|0;b=f;a:do if((a|0)>=-30007){if((a|0)<-30001)switch(a|0){case -30002:{a=85269;break a}case -30003:{a=10956;break a}case -30004:{a=10943;break a}case -30005:{a=10930;break a}case -30006:{a=10914;break a}case -30007:{a=10901;break a}default:{e=25;break a}}if((a|0)>=-9986){if((a|0)<-9985){switch(a|0){case -9986:break;default:{e=25;break a}}a=10627;break}if((a|0)>=0)switch(a|0){case 0:{a=92409;break a}default:{e=25;break a}}switch(a|0){case -9985:break;default:{e=25;break a}}a=10595;break}if((a|0)<-3e4){switch(a|0){case -30001:break;default:{e=25;break a}}a=10968;break}if((a|0)<-9988){switch(a|0){case -3e4:break;default:{e=25;break a}}a=10984;break}else{switch(a|0){case -9988:break;default:{e=25;break a}}a=10657;break}}else do switch(a|0){case -30008:{a=10881;break a}case -30009:{a=10871;break a}case -30010:{a=10855;break a}case -30011:{a=10841;break a}case -30012:{a=10826;break a}case -30013:{a=10799;break a}case -30014:{a=10781;break a}case -30015:{a=10765;break a}case -30017:{a=10748;break a}case -30016:{a=10738;break a}case -30018:{a=10704;break a}case -30019:{a=10692;break a}default:{e=25;break a}}while(0);while(0);do if((e|0)==25)if((a|0)>-30019){c[b>>2]=a;qq(92152,10560,b)|0;a=92152;break}else{c[d>>2]=-30019-a;qq(92152,10579,d)|0;a=92152;break}while(0);i=f;return a|0}function ld(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0;a:do if(!((b|0)==0|(c|0)==0)?(a[c>>0]|0)!=0:0){f=np(b,c)|0;do if(f|0){if((f|0)!=(b|0)){if((a[f+-1>>0]|0)!=32)break;if((a[f+-2>>0]|1)<<24>>24!=59)break}g=cp(b)|0;e=cp(c)|0;d=f+e|0;if((d|0)==(b+g|0)){d=1;break a}d=a[d>>0]|0;if(d<<24>>24==59)if((a[f+(e+1)>>0]|0)==32){d=1;break a}else break;else if(d<<24>>24==32?(a[f+(e+-1)>>0]|0)==58:0){d=1;break a}else break}while(0);d=cp(b)|0;e=(d|0)>0;if(((cp(c)|0)+d+((e&1)<<1)|0)>=256){if(!((d+3|0)<256&(np(b,10999)|0)==0)){d=0;break}d=b+(cp(b)|0)|0;a[d>>0]=46;a[d+1>>0]=46;a[d+2>>0]=46;a[d+3>>0]=0;d=0;break}if(e){if((a[b+(d+-1)>>0]|0)!=58){g=b+(cp(b)|0)|0;a[g>>0]=59;a[g+1>>0]=0}g=b+(cp(b)|0)|0;a[g>>0]=32;a[g+1>>0]=0}up(b,c)|0;d=1}else d=0;while(0);return d|0}function md(b,c,d,f){b=b|0;c=c|0;d=d|0;f=f|0;var g=0,h=0,i=0;g=c+f|0;a:do if(!(a[g>>0]|0))if(!(a[b+(f*144|0)+124>>0]|0)){a[g>>0]=1;h=b+(f*144|0)+73|0;i=0;while(1){if((i|0)>=(a[h>>0]|0)){g=0;break a}g=e[b+(f*144|0)+6+(i<<1)>>1]|0;if((g|0)!=(d|0)?md(b,c,f,g)|0:0){g=1;break a}i=i+1|0}}else g=1;else g=0;while(0);return g|0}function nd(c,e,f,g){c=c|0;e=e|0;f=f|0;g=g|0;if((f|0)<3?(b[c+(e*144|0)+94+(f<<1)>>1]|0)!=0:0){f=c+(e*144|0)+118+f|0;g=g&7;a[f>>0]=d[f>>0]&248|g;a[c+(e*144|0)+124>>0]=g;c=1}else c=0;return c|0}function od(c,d,e){c=c|0;d=d|0;e=e|0;var f=0;if((e|0)<3?(b[c+(d*144|0)+94+(e<<1)>>1]|0)!=0:0){while(1){f=e+1|0;if((e|0)==2)break;b[c+(d*144|0)+94+(e<<1)>>1]=b[c+(d*144|0)+94+(f<<1)>>1]|0;a[c+(d*144|0)+106+e>>0]=a[c+(d*144|0)+106+f>>0]|0;a[c+(d*144|0)+112+e>>0]=a[c+(d*144|0)+112+f>>0]|0;a[c+(d*144|0)+118+e>>0]=a[c+(d*144|0)+118+f>>0]|0;e=f}b[c+(d*144|0)+98>>1]=0;a[c+(d*144|0)+108>>0]=0;a[c+(d*144|0)+114>>0]=0;a[c+(d*144|0)+120>>0]=0;if(!(b[c+(d*144|0)+94>>1]|0)){a[c+(d*144|0)+124>>0]=0;a[c+(d*144|0)+126>>0]=0;a[c+(d*144|0)+128>>0]=0;e=1}else e=1}else e=0;return e|0}function pd(a,c,d,f){a=a|0;c=c|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0;i=(e[a+(c*144|0)+94+(d<<1)>>1]|0)+-1|0;g=0;while(1){if((g|0)>=3){g=0;break}h=b[a+(i*144|0)+94+(g<<1)>>1]|0;if(!(h<<16>>16)){g=0;break}if(((h&65535)+-1|0)==(c|0)){j=6;break}g=g+1|0}if((j|0)==6)if(!(nd(a,i,g,f)|0))g=0;else g=nd(a,c,d,f)|0;return g|0}function qd(a,c,d){a=a|0;c=c|0;d=d|0;var f=0,g=0,h=0,i=0;h=(e[a+(c*144|0)+94+(d<<1)>>1]|0)+-1|0;f=0;while(1){if((f|0)>=3){f=0;break}g=b[a+(h*144|0)+94+(f<<1)>>1]|0;if(!(g<<16>>16)){f=0;break}if(((g&65535)+-1|0)==(c|0)){i=6;break}f=f+1|0}if((i|0)==6)if(!(od(a,h,f)|0))f=0;else f=od(a,c,d)|0;return f|0}function rd(b,c){b=b|0;c=c|0;var d=0;d=b+(c*144|0)+124|0;if(!(a[d>>0]|0))d=0;else{a[d>>0]=0;a[b+(c*144|0)+126>>0]=0;a[b+(c*144|0)+128>>0]=0;d=1}return d|0}function sd(d,f,g,h,j,k){d=d|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=i;i=i+16|0;G=I;H=Bq(g)|0;if(!H)k=-1;else{E=d+8|0;F=d+12|0;D=(k|0)==0;l=0;m=0;k=0;while(1){C=0;q=0;p=0;n=k;while(1){if((C|0)>(g|0))break;if((C|0)!=(g|0)){l=e[j+(C<<1)>>1]|0;if(p<<16>>16==(b[h+(l<<1)>>1]|0)){r=l;B=49}else B=7}else B=7;do if((B|0)==7){B=0;A=C-q|0;if((A|0)>(m|0)){m=e[j+(q<<1)>>1]|0;z=a[f+(m*144|0)+73>>0]|0;if(!(b[f+(m*144|0)+92>>1]|0))o=a[f+(m*144|0)+75>>0]|0;else o=0;if((o+z|0)>4){m=0;break}else m=0;while(1){if((m|0)>=(z|0))break;b[G+(m<<1)>>1]=m;m=m+1|0}y=(o|0)>1;x=(o|0)<4;w=q;m=0;while(1){if((w|0)>=(C|0))break;v=e[j+(w<<1)>>1]|0;c[E>>2]=f+(v*144|0)+6;c[F>>2]=h;ih(d,G,z,2,10)|0;u=H+v|0;r=0;t=0;s=0;o=-1;a:while(1){while(1){if((r|0)>(z|0))break a;if((r|0)==(z|0)){s=r;break}if(s<<16>>16!=(b[h+(e[f+(v*144|0)+6+(e[G+(r<<1)>>1]<<1)>>1]<<1)>>1]|0)){s=r;break}r=r+1|0}b:do if((s-t|0)>1){r=t;o=0;while(1){if((r|0)>=(s|0))break b;er(H|0,0,g|0)|0;a[u>>0]=1;t=(md(f,H,v,e[f+(v*144|0)+6+(e[G+(r<<1)>>1]<<1)>>1]|0)|0)+o|0;r=r+1|0;o=t}}while(0);r=s+1|0;if(!((r|0)<(z|0)&(o|0)!=0))break;t=s;s=b[h+(e[f+(v*144|0)+6+(e[G+(s<<1)>>1]<<1)>>1]<<1)>>1]|0}do if(y){if(((!D?(a[f+(v*144|0)+76>>0]|0)<=1:0)?(a[f+(v*144|0)+77>>0]|0)<=1:0)?x&(a[f+(v*144|0)+78>>0]|0)<2:0)break;o=0}while(0);w=w+1|0;m=((o|0)==0&1)+m|0}if((m|0)==(A|0)){u=q;while(1){if((u|0)>=(C|0))break;s=e[j+(u<<1)>>1]|0;a[f+(s*144|0)+124>>0]=0;a[f+(s*144|0)+126>>0]=0;a[f+(s*144|0)+128>>0]=0;a[f+(s*144|0)+131>>0]=0;v=0;while(1){if((v|0)>=3)break;t=f+(s*144|0)+94+(v<<1)|0;m=b[t>>1]|0;if(!(m<<16>>16))break;r=(m&65535)+-1|0;m=0;while(1){if((m|0)>=3)break;o=b[f+(r*144|0)+94+(m<<1)>>1]|0;if(!(o<<16>>16))break;if(((o&65535)+-1|0)==(s|0)){B=42;break}m=m+1|0}if((B|0)==42){B=0;od(f,r,m)|0}b[t>>1]=0;a[f+(s*144|0)+106+v>>0]=0;a[f+(s*144|0)+112+v>>0]=0;a[f+(s*144|0)+118+v>>0]=0;v=v+1|0}u=u+1|0}n=A+n|0}}if((C|0)<(g|0)){q=C;r=l;p=b[h+(l<<1)>>1]|0;m=0;B=49}else{r=l;m=0;B=49}}while(0);if((B|0)==49){if((C|0)<(g|0))o=(a[f+(r*144|0)+124>>0]|0)==0;else o=0;l=r;m=(o&1)+m|0}C=C+1|0}if((n|0)==(k|0))break;else k=n}}Cq(H);i=I;return k|0} -function ok(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;if(((i|0)!=0?(E=c[i+4>>2]|0,(E|0)!=0):0)?(j=c[i>>2]|0,(j|0)!=0):0){F=f+28|0;k=c[F>>2]|0;G=f+20|0;D=c[G>>2]|0;C=f+44|0;if((D+E|0)<(c[C>>2]|0)){l=0;m=0;while(1){if((l|0)>=(E|0))break;B=e[j+(l*10|0)+6>>1]|0;l=l+1|0;m=(B|0)>(m|0)?B:m}j=f+76|0;er((c[j>>2]|0)+(D<<5)|0,0,m<<5|0)|0;l=c[i>>2]|0;if((m|0)!=(e[l+((E+-1|0)*10|0)+6>>1]|0))ih(d,l,E,10,23)|0;B=c[j>>2]|0;j=B+(D<<5)|0;l=0;d=j+-32|0;while(1){if((l|0)>=(E|0))break;z=c[i>>2]|0;A=j+(e[z+(l*10|0)+6>>1]<<5)+-32|0;c[A+28>>2]=(c[d+28>>2]|0)+(e[d+24>>1]<<2);b[A+24>>1]=(e[z+(l*10|0)+4>>1]|0)+1;b[A+22>>1]=0;c[A+12>>2]=0;c[A+8>>2]=0;c[A+4>>2]=0;c[A>>2]=0;b[A+20>>1]=16;l=l+1|0;d=A}x=f+48|0;y=f+80|0;z=f+178|0;A=0;while(1){if((A|0)>=(h|0)){j=0;break}j=b[g+(A*176|0)+110>>1]|0;if(j<<16>>16){w=(j&65535)+D|0;q=w+-1|0;j=B+(A<<5)|0;if((w|0)>(c[C>>2]|0)){j=-9993;break}if((k|0)>=(c[x>>2]|0)){j=-9993;break}r=B+(q<<5)+22|0;s=b[r>>1]|0;if((s&65535)>=(e[B+(q<<5)+24>>1]|0)){j=-9993;break}t=B+(A<<5)+22|0;if((e[t>>1]|0)>=(e[B+(A<<5)+24>>1]|0)){j=-9993;break}u=B+(A<<5)+20|0;b[u>>1]=e[u>>1]|8;u=c[y>>2]|0;v=u+(k*28|0)+8|0;c[v>>2]=1;w=u+(k*28|0)+16|0;c[w>>2]=0;a[u+(k*28|0)+24>>0]=0;p=u+(k*28|0)+25|0;a[p>>0]=a[p>>0]&a[z>>0];if((a[g+(A*176|0)+99>>0]|0)!=1){c[w>>2]=1;p=B+(q<<5)+8|0;c[p>>2]=(c[p>>2]|0)+1;p=B+(q<<5)|0;c[p>>2]=(c[p>>2]|0)+1;p=B+(A<<5)+8|0;c[p>>2]=(c[p>>2]|0)+1;c[j>>2]=(c[j>>2]|0)+1}d=B+(A<<5)+28|0;i=e[t>>1]|0;p=0;while(1){if((p|0)==(i|0))break;o=c[(c[d>>2]|0)+(p<<2)>>2]|0;n=c[j>>2]|0;l=e[u+(o*28|0)+2>>1]^A;o=u+(o*28|0)+8|0;do if((c[o>>2]|0)==0?(l|0)<(c[f>>2]|0):0){l=c[B+(l<<5)>>2]|0;if((l|0)<=0)break;n=(l|0)<(n|0)?l:n;c[o>>2]=(n|0)<2?n:2}while(0);p=p+1|0}b[u+(k*28|0)>>1]=A;b[u+(k*28|0)+2>>1]=q^A;p=b[t>>1]|0;c[(c[d>>2]|0)+((p&65535)<<2)>>2]=k;c[(c[B+(q<<5)+28>>2]|0)+((s&65535)<<2)>>2]=k;b[t>>1]=p+1<<16>>16;b[u+(k*28|0)+4>>1]=p;t=b[r>>1]|0;b[r>>1]=t+1<<16>>16;b[u+(k*28|0)+6>>1]=t;c[u+(k*28|0)+12>>2]=c[v>>2];c[u+(k*28|0)+20>>2]=c[w>>2];k=k+1|0}A=A+1|0}c[F>>2]=k;c[G>>2]=(c[G>>2]|0)+m;c[f+12>>2]=E}else j=-9993}else j=0;return j|0}function pk(a,b,c){a=a|0;b=b|0;c=c|0;return (e[a+6>>1]|0)-(e[b+6>>1]|0)|0}function qk(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;do if(!(rk(b,d,e,0)|0)){if(c[c[b+164>>2]>>2]&8|0?(h=ok(a,b,d,e,g)|0,(h+9999|0)>>>0<20):0)break;h=sk(a,b,d,e,f)|0}else h=-9987;while(0);return h|0}function rk(d,f,g,h){d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;if(!d)i=1;else{v=d+76|0;m=c[v>>2]|0;j=c[d+80>>2]|0;a:do if(m)if(j){w=d+28|0;i=c[w>>2]|0;k=0;l=0;while(1){if((l|0)>=(i|0))break;k=((a[j+(l*28|0)+24>>0]|0)!=0&1)+k|0;l=l+1|0}t=(h|0)!=0;u=d+178|0;s=c[d+20>>2]|0;r=c[d>>2]|0;while(1){if((r|0)>=(s|0))break;m=c[v>>2]|0;o=m+(r<<5)+28|0;p=e[m+(r<<5)+22>>1]|0;q=0;while(1){if((q|0)==(p|0))break;i=e[j+((c[(c[o>>2]|0)+(q<<2)>>2]|0)*28|0)+2>>1]^r;if(t&(i|0)<(g|0)){b[f+(i*176|0)+110>>1]=0;b[f+(i*176|0)+108>>1]=0}l=c[v>>2]|0;h=l+(i<<5)+28|0;m=e[l+(i<<5)+22>>1]|0;n=0;while(1){if((n|0)==(m|0))break;y=c[(c[h>>2]|0)+(n<<2)>>2]|0;x=e[j+(y*28|0)+2>>1]^i;c[j+(y*28|0)+8>>2]=c[j+(y*28|0)+12>>2];c[j+(y*28|0)+16>>2]=c[j+(y*28|0)+20>>2];a[j+(y*28|0)+24>>0]=0;y=j+(y*28|0)+25|0;a[y>>0]=a[y>>0]&a[u>>0];y=c[v>>2]|0;c[y+(x<<5)>>2]=c[y+(x<<5)+4>>2];c[y+(x<<5)+8>>2]=c[y+(x<<5)+12>>2];n=n+1|0}c[l+(i<<5)>>2]=c[l+(i<<5)+4>>2];m=c[v>>2]|0;c[m+(i<<5)+8>>2]=c[m+(i<<5)+12>>2];y=m+(i<<5)+20|0;b[y>>1]=e[y>>1]&1;q=q+1|0}r=r+1|0}i=k*100|0;if((c[w>>2]|0)>(c[d+24>>2]|0)){k=c[d>>2]|0;l=d+40|0;h=0;while(1){if((h|0)>=(k|0))break a;b[m+(h<<5)+22>>1]=65534-(c[l>>2]|0)+(e[m+(h<<5)+24>>1]|0);h=h+1|0}}}else{j=0;i=2}else i=2;while(0);i=(j|0)==0?i+4|0:i;i=(c[d+84>>2]|0)==0?i+8|0:i;xj(d)|0;c[d+20>>2]=c[d>>2];c[d+28>>2]=c[d+24>>2];c[d+4>>2]=0;c[d+16>>2]=0;c[d+12>>2]=0;c[d+36>>2]=0}return i|0}function sk(f,g,h,j,k){f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;K=i;i=i+16|0;G=K;do if(((k|0)!=0?(H=c[k+16>>2]|0,(H|0)!=0):0)?(l=c[k>>2]|0,(l|0)!=0):0){I=g+28|0;m=c[I>>2]|0;J=g+20|0;F=c[J>>2]|0;D=g+44|0;if((F+H|0)<(c[D>>2]|0)){n=0;o=0}else{l=-9993;break}while(1){if((n|0)>=(H|0))break;C=e[l+(n*36|0)+28>>1]|0;n=n+1|0;o=(C|0)>(o|0)?C:o}C=g+76|0;er((c[C>>2]|0)+(F<<5)|0,0,o<<5|0)|0;l=c[k>>2]|0;if((o|0)!=(e[l+((H+-1|0)*36|0)+28>>1]|0))ih(f,l,H,36,24)|0;l=(c[C>>2]|0)+(F<<5)|0;n=0;f=l+-32|0;while(1){if((n|0)>=(H|0))break;A=c[k>>2]|0;B=l+(e[A+(n*36|0)+28>>1]<<5)+-32|0;c[B+28>>2]=(c[f+28>>2]|0)+(e[f+24>>1]<<2);b[B+24>>1]=(e[A+(n*36|0)+30>>1]|0)+2;b[B+22>>1]=0;c[B+12>>2]=0;c[B+8>>2]=0;c[B+4>>2]=0;c[B>>2]=0;b[B+20>>1]=4;n=n+1|0;f=B}B=g+48|0;w=k+60|0;x=g+80|0;y=g+178|0;z=G+3|0;A=0;while(1){if((A|0)>=(j|0)){l=0;break}l=b[h+(A*176|0)+108>>1]|0;if(l<<16>>16){v=(l&65535)+F|0;q=v+-1|0;r=c[C>>2]|0;if((v|0)>(c[D>>2]|0)){l=-9993;break}if((m|0)>=(c[B>>2]|0)){l=-9993;break}s=r+(q<<5)+22|0;if((e[s>>1]|0)>=(e[r+(q<<5)+24>>1]|0)){l=-9993;break}t=r+(A<<5)+22|0;if((e[t>>1]|0)>=(e[r+(A<<5)+24>>1]|0)){l=-9993;break}if(!(oi(h,A,G)|0)){if(!(c[w>>2]&524288)){l=-9995;break}if(!(ri(h,A,G)|0)){l=-9995;break}}u=r+(A<<5)+20|0;b[u>>1]=e[u>>1]|2;u=r+(A<<5)+28|0;p=b[t>>1]|0;v=p&65535;k=0;while(1){if((k|0)>=(v|0))break;l=c[(c[u>>2]|0)+(k<<2)>>2]|0;n=c[x>>2]|0;f=n+(l*28|0)+8|0;a:do if((c[f>>2]|0)==0?(E=e[n+(l*28|0)+2>>1]^A,(E|0)<(c[g>>2]|0)):0){if((c[(c[C>>2]|0)+(E<<5)>>2]|0)<=0)break;l=d[h+(A*176|0)+72+k>>0]&15;if((l|1|0)!=9)switch(l|0){case 1:case 4:break;default:break a}c[f>>2]=1}while(0);k=k+1|0}l=c[x>>2]|0;n=l+(m*28|0)+8|0;c[n>>2]=1;f=l+(m*28|0)+16|0;c[f>>2]=0;a[l+(m*28|0)+24>>0]=0;k=l+(m*28|0)+25|0;a[k>>0]=a[k>>0]&a[y>>0];if(a[z>>0]|0){c[f>>2]=1;k=r+(q<<5)+8|0;c[k>>2]=(c[k>>2]|0)+1;k=r+(q<<5)|0;c[k>>2]=(c[k>>2]|0)+1;k=r+(A<<5)+8|0;c[k>>2]=(c[k>>2]|0)+1;k=r+(A<<5)|0;c[k>>2]=(c[k>>2]|0)+1}b[l+(m*28|0)>>1]=A;b[l+(m*28|0)+2>>1]=q^A;c[(c[u>>2]|0)+(v<<2)>>2]=m;c[(c[r+(q<<5)+28>>2]|0)+(e[s>>1]<<2)>>2]=m;b[t>>1]=p+1<<16>>16;b[l+(m*28|0)+4>>1]=p;v=b[s>>1]|0;b[s>>1]=v+1<<16>>16;b[l+(m*28|0)+6>>1]=v;c[l+(m*28|0)+12>>2]=c[n>>2];c[l+(m*28|0)+20>>2]=c[f>>2];m=m+1|0}A=A+1|0}c[I>>2]=m;c[J>>2]=(c[J>>2]|0)+o;c[g+16>>2]=H}else l=0;while(0);i=K;return l|0}function tk(a,b,c){a=a|0;b=b|0;c=c|0;return (e[a+28>>1]|0)-(e[b+28>>1]|0)|0}function uk(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;a:do if(i|0){i=c[f+28>>2]|0;j=f+80|0;k=0;while(1){if((k|0)>=(i|0))break a;a[(c[j>>2]|0)+(k*28|0)+24>>0]=0;k=k+1|0}}while(0);b:do if((((rk(f,g,h,0)|0)==0?(c[f>>2]|0)==(h|0):0)?(c[f+20>>2]|0)==(h|0):0)?(c[f+24>>2]|0)==(c[f+28>>2]|0):0){r=f+76|0;s=f+80|0;o=f+178|0;i=0;q=0;while(1){if((q|0)>=(h|0))break b;p=c[r>>2]|0;f=p+(q<<5)+28|0;l=g+(q*176|0)+108|0;m=e[p+(q<<5)+22>>1]|0;n=0;while(1){if((n|0)>=(m|0))break;j=c[s>>2]|0;k=c[(c[f>>2]|0)+(n<<2)>>2]|0;if((e[j+(k*28|0)>>1]|0)==(q|0)){c:do if((b[l>>1]|0)==0?(b[g+((e[j+(k*28|0)+2>>1]^q)*176|0)+108>>1]|0)==0:0)switch(d[g+(q*176|0)+72+n>>0]&15|0){case 3:case 2:case 1:case 0:{t=21;break c}case 4:{a[j+(k*28|0)+24>>0]=1;i=i+1|0;break c}case 7:case 6:case 5:{a[j+(k*28|0)+24>>0]=2;break c}case 8:{a[j+(k*28|0)+24>>0]=8;break c}case 9:{a[j+(k*28|0)+24>>0]=4;break c}default:{a[j+(k*28|0)+24>>0]=0;break c}}else t=21;while(0);if((t|0)==21){t=0;a[j+(k*28|0)+24>>0]=0}c[j+(k*28|0)+16>>2]=0;c[j+(k*28|0)+8>>2]=0;k=j+(k*28|0)+25|0;a[k>>0]=a[k>>0]&a[o>>0]}n=n+1|0}p=p+(q<<5)|0;c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;c[p+12>>2]=0;q=q+1|0}}else i=-9987;while(0);return i|0}function vk(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;D=c[d+76>>2]|0;G=c[d+80>>2]|0;H=c[d>>2]|0;f=c[d+24>>2]|0;g=H<<1;I=Bq(g)|0;J=Bq(g)|0;E=Bq(g)|0;F=Bq(g)|0;d=(f|0)!=0;if(d)C=Bq(f<<1)|0;else C=0;B=Bq(H)|0;a:do if((I|0)!=0&(J|0)!=0&(E|0)!=0&(F|0)!=0?(B|0)!=0&(d&(C|0)==0^1):0){er(E|0,0,g|0)|0;f=0;A=0;while(1){if((A|0)>=(H|0))break a;d=E+(A<<1)|0;b:do if(!(b[d>>1]|0)){g=e[D+(A<<5)+22>>1]|0;h=D+(A<<5)+28|0;i=0;while(1){if((i|0)>=(g|0))break b;if(!(a[G+((c[(c[h>>2]|0)+(i<<2)>>2]|0)*28|0)+24>>0]&1))i=i+1|0;else break}er(B|0,0,H|0)|0;b[d>>1]=1;b[F+(A<<1)>>1]=1;z=A&65535;b[I>>1]=z;b[J>>1]=z;z=1;d=-1;g=0;h=0;while(1){x=h;c:while(1){w=b[I+(x<<1)>>1]|0;v=w&65535;t=B+v|0;o=D+(v<<5)+22|0;p=D+(v<<5)+28|0;q=(x|0)==0;r=E+(v<<1)|0;y=x;x=x+-1|0;u=I+(x<<1)|0;s=F+(v<<1)|0;h=a[t>>0]|0;d:while(1){n=e[o>>1]|0;while(1){i=h<<24>>24;if((n|0)<=(i|0))break d;h=h+1<<24>>24;a[t>>0]=h;l=c[(c[p>>2]|0)+(i<<2)>>2]|0;if(!(a[G+(l*28|0)+24>>0]&3))continue;k=b[G+(l*28|0)+2>>1]^w;j=k&65535;i=E+(j<<1)|0;m=b[i>>1]|0;if(!(m<<16>>16)){h=y;break c}if(!q?k<<16>>16==(b[u>>1]|0):0)continue;if((m&65535)<(e[r>>1]|0)){i=m;break}}d=d+1|0;b[C+(d<<1)>>1]=l;if((e[s>>1]|0)<=(i&65535))continue;b[s>>1]=i}a[t>>0]=0;e:do if((v|0)!=(A|0)){l=b[u>>1]|0;h=l&65535;i=b[F+(v<<1)>>1]|0;if((i&65535)<(e[E+(h<<1)>>1]|0)){h=F+(h<<1)|0;if((e[h>>1]|0)<=(i&65535))break;b[h>>1]=i;break}f=f+1|0;if((g|0)>-1){h=1;while(1){i=g+-1|0;h=h+1<<16>>16;if((g|0)>0?w<<16>>16!=(b[J+(g<<1)>>1]|0):0)g=i;else{g=i;break}}}else h=1;k=h&65535;f:while(1){if((d|0)>-1)j=d;else break e;while(1){d=j+-1|0;h=e[C+(j<<1)>>1]|0;c[G+(h*28|0)+16>>2]=f;c[G+(h*28|0)+8>>2]=k;i=b[G+(h*28|0)>>1]|0;if(w<<16>>16==i<<16>>16?l<<16>>16==(b[G+(h*28|0)+2>>1]^w)<<16>>16:0)break e;if(l<<16>>16!=i<<16>>16)continue f;if((j|0)>0?w<<16>>16!=(b[G+(h*28|0)+2>>1]^l)<<16>>16:0)j=d;else break e}}}while(0);if((y|0)<=0)break b}h=h+1|0;b[I+(h<<1)>>1]=k;g=g+1|0;b[J+(g<<1)>>1]=k;d=d+1|0;b[C+(d<<1)>>1]=l;y=z+1<<16>>16;b[i>>1]=y;b[F+(j<<1)>>1]=y;z=y}}while(0);A=A+1|0}}else f=-30002;while(0);Cq(I);Cq(J);Cq(E);Cq(F);if(C|0)Cq(C);Cq(B);return f|0}function wk(d,f,g,h){d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=c[d+24>>2]|0;a:do if(((c[d>>2]|0)==(g|0)?(c[d+20>>2]|0)==(g|0):0)?(o|0)==(c[d+28>>2]|0):0){n=d+80|0;if(!h){m=0;g=0;while(1){if((m|0)>=(o|0))break a;d=c[n>>2]|0;h=a[d+(m*28|0)+24>>0]|0;do if((h&255)<2){k=b[d+(m*28|0)>>1]|0;i=k&65535;k=(b[d+(m*28|0)+2>>1]^k)&65535;j=e[d+(m*28|0)+4>>1]|0;l=e[d+(m*28|0)+6>>1]|0;if(h<<24>>24!=1){d=f+(i*176|0)+72+j|0;if((a[d>>0]&15)!=4)break}else{if((c[d+(m*28|0)+8>>2]|0)>=4)break;d=f+(i*176|0)+72+j|0}a[f+(k*176|0)+72+l>>0]=9;a[d>>0]=9;g=g+1|0}while(0);m=m+1|0}}else{m=0;g=0}while(1){if((m|0)>=(o|0))break a;d=c[n>>2]|0;h=a[d+(m*28|0)+24>>0]|0;do if((h&255)<2){j=b[d+(m*28|0)>>1]|0;i=j&65535;j=(b[d+(m*28|0)+2>>1]^j)&65535;k=e[d+(m*28|0)+4>>1]|0;l=e[d+(m*28|0)+6>>1]|0;if(h<<24>>24!=1){d=a[f+(i*176|0)+72+k>>0]|0;if((d&15)!=4)break}else{if((c[d+(m*28|0)+8>>2]|0)>=4)break;d=a[f+(i*176|0)+72+k>>0]|0}if((d&15)==4){a[f+(j*176|0)+52+l>>0]=3;a[f+(i*176|0)+52+k>>0]=3;g=g+1|0}}while(0);m=m+1|0}}else g=-9987;while(0);return g|0}function xk(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0;i=Uj(a,b,c,0,d,e,f,g,h)|0;if((i|0)<=0){d=Uj(a,b,c,0,d,e,g,f,h)|0;if((d|0)<=0){if((i+9999|0)>>>0>=20)i=(d+9999|0)>>>0<20?d:0}else i=d}return i|0}function yk(a){a=a|0;if(a|0){Cq(c[a>>2]|0);Cq(c[a+12>>2]|0);Cq(c[a+8>>2]|0);c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0}return}function zk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;c[d>>2]=92409;m=e+-1|0;f=0;e=1;a:while(1){if((e|0)>=(m|0))break;b:while(1){switch(a[b>>0]|0){case 0:break a;case 9:case 32:break;default:break b}b=b+1|0}l=e+1|0;c[d+(e<<2)>>2]=b;h=f;f=b;e=b;c:while(1){g=0;b=f;d:while(1){switch(a[b>>0]|0){case 34:{i=g;n=9;break d}case 92:break;default:{k=1;j=h;break d}}g=g+1|0;b=b+1|0}if((n|0)==9){n=0;if(!(i&1)){g=(h|0)!=0;if(g){k=b+1|0;j=(a[k>>0]|0)==34;f=j&1;b=j?k:b}else f=0;g=g&1^1}else{f=1;g=h}k=f;j=g;g=(i|0)/2|0}f=g;h=e;while(1){if(!f)break;a[h>>0]=92;f=f+-1|0;h=h+1|0}e=e+g|0;f=a[b>>0]|0;if(!(f<<24>>24)){f=j;break}if(!j)switch(f<<24>>24){case 9:case 32:{n=20;break c}default:{}}if(k){a[e>>0]=f;e=e+1|0}h=j;f=b+1|0}if((n|0)==20){n=0;f=0;b=b+1|0}a[e>>0]=0;e=l}c[d+(e<<2)>>2]=0;return e|0}function Ak(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;d=d+16|0;h=(b|0)!=0;if(h&(a[d>>0]|0)!=0?(i=Bq((cp(d)|0)+1|0)|0,c[b+8>>2]=i,i|0):0)vp(i,d)|0;d=c[g>>2]|0;if(d|0?h&(c[g+8>>2]|0)>0:0){c[b>>2]=d;j=b+4|0;c[j>>2]=0;a:do if(!(c[e+192>>2]&16)){i=0;d=op(d,10)|0;while(1){if(!d)break a;if(hp(d,13115,8)|0){if(i|0)break;h=d+1|0;if(!(a[h>>0]|0))break;else d=0}else{a[d>>0]=0;d=d+1|0;c[j>>2]=d;h=d}i=d;d=op(h,10)|0}a[d>>0]=0}while(0);c[g>>2]=0}Bk(b,f);return}function Bk(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;a:do if(c[d>>2]|0?(g=d+8|0,e=c[g>>2]|0,(e|0)>0):0){while(1){if(!e)break;e=e+-1|0;f=(c[d>>2]|0)+e|0;if((a[f>>0]|0)!=10)break;c[g>>2]=e;a[f>>0]=0;e=c[g>>2]|0}if(b|0){e=c[d>>2]|0;c[b+12>>2]=e;c[d>>2]=0;e=op(e,32)|0;while(1){if(!e)break a;if(!(hp(e,13124,12)|0))a[e>>0]=0;e=op(e+1|0,32)|0}}}while(0);return}function Ck(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;C=i;i=i+368|0;x=C+24|0;v=C;B=C+36|0;w=C+104|0;y=C+72|0;z=C+40|0;c[B>>2]=0;a:do if(b){j=cp(b)|0;if(((j>>>0>=9?(hp(b,87004,6)|0)==0:0)?(a[b+6>>0]|0)==49:0)?(A=a[b+7>>0]|0,r=A<<24>>24==83,A=A<<24>>24==66,s=r|A?8:7,A=r?1:A<<31>>31,(a[b+s>>0]|0)==47):0){n=s+1|0;k=b+n|0;if(!($p(a[k>>0]|0)|0))switch(a[k>>0]|0){case 63:case 47:break;default:{j=20;break a}}Ho(B,b,j);r=c[B>>2]|0;b:do if((r|0)!=0?(t=cp(r)|0,u=t+1|0,m=Dq(u,1)|0,(m|0)!=0):0){l=Dq((t<<1)+2|0,1)|0;if(l){k=Dq(u,1)|0;if(k){b=Dq(u,1)|0;if(b){a[f>>0]=0;a[m>>0]=0;p=t+-1|0;j=n;o=0;c:while(1){n=j;while(1){if(n>>>0>=p>>>0){q=16;break c}j=n+1|0;if((a[r+n>>0]|0)!=47){n=j;continue}switch(a[r+j>>0]|0){case 112:{o=n;continue c}case 114:case 102:{q=19;break c}case 113:case 104:case 99:{n=j;break}default:break c}}}if((q|0)==16)j=n+1|0;else if((q|0)==19)if(A){j=21;break}q=(j|0)==(t|0)?n+2|0:n;j=(o|0)!=0;p=(j?o:q)-s+-1|0;n=r+s|0;ir(m|0,n+1|0,p|0)|0;a[m+p>>0]=0;do if(j){j=q-o|0;if((j|0)<3){j=20;break b}ir(b|0,n+p+1|0,j|0)|0;a[b+j>>0]=0;j=Rp(b+2|0,0,10)|0;if((j|0)>0){if((j|0)>12){n=65;break}n=a[13137+(j+-1)>>0]|0;break}if((j|0)>=0){j=21;break b}if((j|0)<-12)n=65;else n=a[13150+~j>>0]|0}else n=78;while(0);if((q|0)==(u|0)){a[l>>0]=0;j=0}else{j=t-q|0;ir(l|0,(c[B>>2]|0)+q|0,j|0)|0;a[l+j>>0]=0;j=0}while(1){if((j|0)==32)break;a[y+j>>0]=0;j=j+1|0}en(m,cp(m)|0,y);r=Dk(y)|0;s=Ek(y)|0;t=Fk(y)|0;u=Gk(y)|0;j=Ik(y)|0;c[v>>2]=r;c[v+4>>2]=s;c[v+8>>2]=t;c[v+12>>2]=u;c[v+16>>2]=j;qq(w,13163,v)|0;up(f,w)|0;j=0;while(1){if((j|0)==32)break;a[z+j>>0]=0;j=j+1|0}j=cp(l)|0;if((j+-1|0)>>>0<254){vp(k,l)|0;vp(l+j|0,k)|0}en(l,cp(l)|0,z);u=f+(cp(f)|0)|0;a[u>>0]=45;a[u+1>>0]=0;u=Dk(z)|0;v=Ek(z)|0;j=Hk(z)|0;c[x>>2]=u;c[x+4>>2]=v;c[x+8>>2]=j;qq(w,13189,x)|0;up(f,w)|0;j=cp(f)|0;switch(A|0){case 1:{a[f+j>>0]=83;break}case -1:{a[f+j>>0]=66;break}default:a[f+j>>0]=78}a[f+(j+1)>>0]=65;a[f+(j+2)>>0]=45;a[f+(j+3)>>0]=n;a[f+(j+4)>>0]=0;if((d|0)!=0&(g|0)!=0)Jk(y,g);if((e|0)!=0&(h|0)!=0){Kk(z,h);j=0}else j=0}else{j=4;b=0}}else{j=4;b=0;k=0}}else{j=4;l=0;b=0;k=0}}else{j=4;m=0;l=0;b=0;k=0}while(0);Cq(c[B>>2]|0);Cq(m);Cq(l);Cq(k);Cq(b)}else j=3}else j=2;while(0);i=C;return j|0}function Dk(a){a=a|0;return 13205+(((d[a+1>>0]|0)<<8&16128|(d[a>>0]|0))<<2)|0}function Ek(a){a=a|0;return 13205+(((d[a+2>>0]|0)<<8|(d[a+1>>0]|0)|(d[a+3>>0]|0)<<16&983040)>>>6<<2)|0}function Fk(a){a=a|0;return 13205+(((d[a+4>>0]|0)<<8|(d[a+3>>0]|0)|(d[a+5>>0]|0)<<16&196608)>>>4<<2)|0}function Gk(a){a=a|0;return 13205+(((d[a+6>>0]|0)<<8|(d[a+5>>0]|0))>>>2<<2)|0}function Hk(a){a=a|0;return 78741+((((d[a+4>>0]|0)<<8&7936|(d[a+3>>0]|0))>>>4)*3|0)|0}function Ik(a){a=a|0;return 78741+(((d[a+8>>0]|0)<<8&256|(d[a+7>>0]|0))*3|0)|0}function Jk(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;g=h+8|0;f=h;c[f>>2]=(d[a+8>>0]|0)&254;e=9;f=qq(b,80769,f)|0;while(1){if((e|0)==32)break;c[g>>2]=d[a+e>>0];e=e+1|0;f=(qq(b+f|0,80769,g)|0)+f|0}i=h;return}function Kk(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;g=h+8|0;f=h;c[f>>2]=(d[a+4>>0]|0)&224;e=5;f=qq(b,80769,f)|0;while(1){if((e|0)==32)break;c[g>>2]=d[a+e>>0];e=e+1|0;f=(qq(b+f|0,80769,g)|0)+f|0}i=h;return}function Lk(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0;R=i;i=i+64|0;P=R+48|0;q=R+36|0;p=R+24|0;O=R+12|0;Q=R;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;o=0;while(1){if((o|0)==2)break;k=q+(o<<2)|0;c[k>>2]=0;l=P+(o<<2)|0;c[l>>2]=0;m=p+(o<<2)|0;j=0;h=0;n=0;while(1){if((n|0)>=(g|0))break;if(c[f+(n*144|0)+(o*72|0)+24>>2]|0){c[m>>2]=((c[f+(n*144|0)+(o*72|0)+28>>2]|0)!=0&1)+(c[m>>2]|0);j=j+1|0;c[l>>2]=j;h=((c[f+(n*144|0)+(o*72|0)+36>>2]|0)!=0&1)+h|0;c[k>>2]=h}n=n+1|0}o=o+1|0}a:do if((c[P+4>>2]|0)>(c[p+4>>2]|0)?(c[q+4>>2]|0)!=0:0){h=P+8|0;j=0;while(1){if((j|0)>=(g|0)){s=0;break a}do if(c[f+(j*144|0)+96>>2]|0){if(!(c[f+(j*144|0)+100>>2]|0)){if(!(c[f+(j*144|0)+108>>2]|0))break;if(!(c[f+(j*144|0)+76>>2]|0))break;if(!(c[f+(j*144|0)+112>>2]|0))break}c[h>>2]=(c[h>>2]|0)+1}while(0);j=j+1|0}}else s=0;while(0);while(1){if((s|0)>=3){L=1;M=0;h=0;t=40;break}m=Q+(s<<2)|0;c[m>>2]=0;n=O+(s<<2)|0;c[n>>2]=0;o=(s|0)<1?s:1;if(c[P+(s<<2)>>2]|0){r=(s|0)==2;p=1-o|0;h=0;j=0;q=0;while(1){if((q|0)>=(g|0))break;b:do if(!(c[f+(q*144|0)+(o*72|0)+28>>2]|0)){k=c[f+(q*144|0)+(o*72|0)+24>>2]|0;l=(k|0)!=0;do if(r){if(l?c[f+(q*144|0)+(o*72|0)+4>>2]|0:0){k=o;break}if(c[f+(q*144|0)+(p*72|0)+24>>2]|0?(c[f+(q*144|0)+(p*72|0)+28>>2]|0)==0:0){k=p;break}if(!k)break b;else k=o}else if(!l){if(!(c[f+(q*144|0)+(p*72|0)+24>>2]|0))break b;if(!(c[f+(q*144|0)+(p*72|0)+28>>2]|0))k=p;else break b}else k=o;while(0);M=c[f+(q*144|0)+(k*72|0)+8>>2]|0;h=h+M|0;c[m>>2]=h;j=M-(c[f+(q*144|0)+(k*72|0)+12>>2]|0)+j|0;c[n>>2]=j}while(0);q=q+1|0}if(h|0){if(!(Mk(d+(s*60|0)|0,h,g,r&1)|0)){h=0;break}c[d+(s*60|0)+8>>2]=h-j}}s=s+1|0}c:do if((t|0)==40)while(1){if((M|0)>=3)break c;x=(M|0)<1?M:1;if(c[P+(M<<2)>>2]|0){y=(M|0)==2;z=1-x|0;J=O+(M<<2)|0;K=Q+(M<<2)|0;A=d+(M*60|0)|0;B=d+(M*60|0)+28|0;C=d+(M*60|0)+16|0;D=d+(M*60|0)+12|0;E=(x|0)==(M|0);F=d+(M*60|0)+32|0;G=d+(M*60|0)+36|0;H=d+(M*60|0)+52|0;I=0;k=0;j=0;while(1){if((I|0)>=(g|0))break;d:do if(!(c[f+(I*144|0)+(x*72|0)+28>>2]|0)){l=c[f+(I*144|0)+(x*72|0)+24>>2]|0;m=(l|0)!=0;do if(y){if(m?c[f+(I*144|0)+(x*72|0)+4>>2]|0:0){t=x;break}if(!(c[f+(I*144|0)+(z*72|0)+24>>2]|0)){if(!l)break d;if(!(c[f+(I*144|0)+(z*72|0)+28>>2]|0))t=x;else break d}else t=z}else if(!m){if(!(c[f+(I*144|0)+(z*72|0)+24>>2]|0))break d;if(!(c[f+(I*144|0)+(z*72|0)+28>>2]|0))t=z;else break d}else t=x;while(0);s=c[f+(I*144|0)+(t*72|0)+12>>2]|0;p=(c[f+(I*144|0)+(t*72|0)+8>>2]|0)-s|0;w=p+j|0;q=c[J>>2]|0;if((w|0)>(q|0))break c;u=s+k|0;v=u+q|0;if((v|0)>(c[K>>2]|0))break c;l=(c[A>>2]|0)+(j*176|0)|0;if(y&(t|0)==1?(N=c[f+(I*144|0)+76>>2]|0,(N|0)!=0):0)r=N;else r=c[f+(I*144|0)+(t*72|0)>>2]|0;ir(l|0,r|0,p*176|0)|0;o=0;while(1){if((o|0)>=(p|0))break;m=l+92|0;n=0;while(1){if((n|0)>=(a[m>>0]|0))break;S=l+8+(n<<1)|0;b[S>>1]=(e[S>>1]|0)+j;n=n+1|0}l=l+176|0;o=o+1|0}e:do if(s|0){l=(c[A>>2]|0)+(q*176|0)+(k*176|0)|0;ir(l|0,r+(p*176|0)|0,s*176|0)|0;n=0;while(1){if((n|0)>=(s|0))break e;k=l+92|0;m=0;while(1){if((m|0)>=(a[k>>0]|0))break;S=l+8+(m<<1)|0;b[S>>1]=(e[S>>1]|0)+j;m=m+1|0}l=l+176|0;n=n+1|0}}while(0);c[B>>2]=c[B>>2]|c[f+(I*144|0)+(t*72|0)+32>>2];c[C>>2]=(c[C>>2]|0)+(c[f+(I*144|0)+(t*72|0)+20>>2]|0);c[D>>2]=(c[D>>2]|0)+(c[f+(I*144|0)+(t*72|0)+16>>2]|0);if(E)j=(c[f+(I*144|0)+(t*72|0)+36>>2]|0)!=0;else j=0;c[F>>2]=(c[F>>2]|0)+(j&1);c[G>>2]=(c[G>>2]|0)+(c[f+(I*144|0)+(t*72|0)+44>>2]|0);j=0;while(1){if((j|0)==3)break;S=d+(M*60|0)+40+(j<<1)|0;b[S>>1]=(e[S>>1]|0)+(e[f+(I*144|0)+(t*72|0)+48+(j<<1)>>1]|0);S=d+(M*60|0)+46+(j<<1)|0;b[S>>1]=(e[S>>1]|0)+(e[f+(I*144|0)+(t*72|0)+54+(j<<1)>>1]|0);j=j+1|0}j=c[H>>2]|0;if(!j){k=u;j=w}else{k=I<<1;b[j+(k<<1)>>1]=w;b[j+((k|1)<<1)>>1]=v;k=u;j=w}}else{c[G>>2]=(c[G>>2]|0)+(c[f+(I*144|0)+(x*72|0)+44>>2]|0);l=0;while(1){if((l|0)==3)break d;S=d+(M*60|0)+40+(l<<1)|0;b[S>>1]=(e[S>>1]|0)+(e[f+(I*144|0)+(x*72|0)+48+(l<<1)>>1]|0);l=l+1|0}}while(0);I=I+1|0}if((j|0)!=(c[J>>2]|0))break c;if((j+k|0)!=(c[K>>2]|0))break c;c[d+(M*60|0)+20>>2]=(j|0)>0&1;h=L|h}L=L<<1;M=M+1|0;t=40}while(0);i=R;return h|0}function Mk(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;vl(a);g=sl(b)|0;c[a>>2]=g;do if(!g)f=5;else{if(!((d|0)<2|(e|0)!=0)?(g=Dq(2,(d<<1)+2|0)|0,c[a+52>>2]=g,(g|0)==0):0){f=5;break}c[a+4>>2]=b;c[a+56>>2]=(d|0)>1?d:0;e=1}while(0);if((f|0)==5){vl(a);e=0}return e|0}function Nk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;D=i;i=i+2032|0;m=D;l=D+1196|0;k=D+1776|0;g=D+1064|0;q=D+1060|0;r=D+1200|0;B=D+760|0;y=D+424|0;s=D+344|0;t=D+192|0;v=D+184|0;w=D+176|0;u=D+152|0;C=D+128|0;x=D+104|0;p=D+80|0;z=D+64|0;A=D+24|0;o=D+8|0;c[q>>2]=0;f=A;n=f+36|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(n|0));c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[l>>2]=0;if((d|0)!=0?(j=Bq((cp(d)|0)+1|0)|0,(j|0)!=0):0){vp(j,d)|0;h=g;d=zk(j,g,32)|0;g=j}else{c[g>>2]=92409;c[g+4>>2]=0;h=g;d=1;g=0}Sc(u,1,0);Sc(C,1,0);Sc(x,1,0);Sc(p,1,0);c[p>>2]=b;c[p+12>>2]=0;c[p+16>>2]=0;er(k|0,0,256)|0;er(y|0,0,336)|0;er(B|0,0,300)|0;f=s;n=f+76|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(n|0));er(t|0,0,152)|0;c[v+4>>2]=0;c[v>>2]=0;c[w+4>>2]=0;c[w>>2]=0;if((zf(d,h,B,k,l,1,C)|0)<0)f=1002;else{c[B+180>>2]=1;c[B+260>>2]=1;c[B+68>>2]=0;c[B+72>>2]=0;if((fd(z,262144,262144)|0)<1)if(!(c[C>>2]|0))f=1001;else{ad(C,80774,m)|0;f=1001}else f=0;Cq(g)}d=c[B+196>>2]&1;a:do if(!f){h=km(o,y,B,r,p,C,u,x,s,q,0)|0;switch(h|1|0){case -1:break a;case 3:{if(!d){h=2;break a}break}default:{}}f=c[s+68>>2]|0;if(f|0)c[f+16>>2]=1;f=jm(o,A,y,B,r,v,w,p,C,u,x,s,t,c[q>>2]|0,z,0)|0;if((f&-2|0)!=2){Ak(e,y,B,C,u);h=f;break}if((d|0)!=0?(Ak(e,y,B,C,u),(c[e>>2]|0)==0):0){f=Bq(12)|0;c[e>>2]=f;if(!(c[B+192>>2]&16384)){d=80872;n=f+10|0;do{a[f>>0]=a[d>>0]|0;f=f+1|0;d=d+1|0}while((f|0)<(n|0));h=2;break}else{d=80861;n=f+11|0;do{a[f>>0]=a[d>>0]|0;f=f+1|0;d=d+1|0}while((f|0)<(n|0));h=2;break}}else h=2}else{f=c[C>>2]|0;if(!f)h=2;else{ld(f,80825)|0;h=2}}while(0);Xm(v,w,y+328|0);ql(s);ql(t);ql(t+76|0);Tc(u);Tc(x);hd(z);g=0;while(1){if((g|0)==4)break;f=B+152+(g<<2)|0;d=c[f>>2]|0;if(d|0){Cq(d);c[f>>2]=0}g=g+1|0}tc(A)|0;Bk(e,C);i=D;return ((h|0)<0?0:h)|0}function Ok(d,e,f,g,h,i,j,k,l,m,n,o){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0;if((i|0)!=0&(j|0)!=0)a[i>>0]=0;if(k|0)c[k>>2]=0;p=Pk(d,e,f,g,h,n,o)|0;f=c[n>>2]|0;if((f|0)>=0){f=wl(d,k,0,0,i,j,f,l,m,o)|0;if(f|0)c[n>>2]=f}else c[n>>2]=0-f;if(p|0?(h|0)!=0&(c[p+568>>2]|0)>0:0){f=c[n>>2]|0;k=b[p+528>>1]|0;d=p+548|0;j=0;e=0;while(1){if((j|0)>=(k|0))break;g=(c[d>>2]|0)+(j*40|0)+24|0;if(!(kp(g,82004)|0)){Do(g,86994,3)|0;e=e+1|0}j=j+1|0}if(e&1){ld(o,81319)|0;f=(f|0)==0?9:f}c[n>>2]=f}return p|0}function Pk(f,g,j,k,l,m,n){f=f|0;g=g|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0;fa=i;i=i+528|0;M=fa+112|0;S=fa+96|0;Z=fa+512|0;_=fa+430|0;X=fa+200|0;W=fa+194|0;U=fa+164|0;V=fa+134|0;ba=fa+132|0;P=fa+88|0;ca=fa;T=fa+84|0;O=fa+428|0;$=fa+424|0;aa=fa+420|0;Y=fa+130|0;R=fa+128|0;Q=fa+216|0;o=fa+32|0;ea=(g|0)==0;c[m>>2]=0;do if(ea){o=Dq(1,584)|0;if(!o){ld(n,85269)|0;j=o;o=1;da=365;break}else{j=o;L=o+528|0;da=6;break}}else{p=j|0?j:o;er(g|0,0,528)|0;j=p;o=j+52|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(o|0));j=0;L=p;o=g;da=6}while(0);a:do if((da|0)==6){u=L+24|0;c[u>>2]=0;K=L+20|0;c[K>>2]=0;t=L+28|0;c[t>>2]=0;w=L+48|0;c[w>>2]=0;J=dd(Q,204,f)|0;c[M>>2]=J;b:do if(J){Fo(Q);Rk(o,200,83,M)|0;J=dd(Q,204,f)|0;c[M>>2]=J;if(J){Fo(Q);Rk(o+402|0,2,83,M)|0;Rk(o+405|0,8,83,M)|0;Rk(o+414|0,2,67,M)|0;Rk(o+415|0,2,67,M)|0;Rk(o+416|0,2,67,M)|0;Rk(o+417|0,2,67,M)|0;Rk(o+418|0,2,67,M)|0;Rk(o+419|0,2,83,M)|0;Rk(o+422|0,2,78,M)|0;Rk(o+424|0,10,68,M)|0;Rk(o+432|0,12,68,M)|0;J=o+440|0;Rk(J,6,76,M)|0;c[M>>2]=Q;Rk(o+201|0,200,83,M)|0;I=dd(Q,204,f)|0;c[M>>2]=I;if(!I){o=17;da=9}else{Fo(Q);Rk(o+444|0,80,83,M)|0;I=dd(Q,204,f)|0;c[M>>2]=I;c:do if(!I){ld(n,80882)|0;o=21}else{Fo(Q);F=Q+200|0;if(a[F>>0]|0)ld(n,81498)|0;do if((((((((((Rk(L,3,78,M)|0)>=0?(v=L+2|0,(Rk(v,3,78,M)|0)>=0):0)?(Rk(0,3,74,M)|0)>=0:0)?(Rk(0,3,74,M)|0)>=0:0)?(Rk(L+4|0,3,67,M)|0)>=0:0)?(x=L+6|0,(Rk(x,3,78,M)|0)>=0):0)?(Rk(0,3,74,M)|0)>=0:0)?(Rk(0,3,74,M)|0)>=0:0)?(Rk(0,3,74,M)|0)>=0:0)?(Rk(0,3,74,M)|0)>=0:0){G=L+8|0;if((Rk(G,3,78,M)|0)<0)break;H=L+12|0;Rk(H,6,83,M)|0;do if(!(kp(H,80936)|0)){I=Dq(1,64)|0;c[w>>2]=I;if(I|0)break;ld(n,85269)|0;o=19;break c}else c[w>>2]=0;while(0);I=L+32|0;Kl(I,1)|0;do if(c[w>>2]|0){o=al(L,f,n)|0;if(o|0){o=o+70|0;ld(n,n)|0;p=0;o=o|0?o:1;break b}o=Xk(L,n)|0;if(!o)break;o=o+70|0;ld(n,n)|0;p=0;o=o|0?o:1;break b}while(0);do if(ea){o=b[j+528>>1]|0;o=(o<<16>>16>1?o:1)<<16>>16;E=Dq(o,40)|0;c[j+548>>2]=E;if(!E){ld(n,85269)|0;o=2;da=365;break a}if(!k)break;E=Dq(o,32)|0;c[j+556>>2]=E;if(E|0)break;ld(n,85269)|0;o=2;da=365;break a}while(0);if(!(c[w>>2]|0)){o=0;s=0;d:while(1){r=s<<16>>16;if(s<<16>>16>=(b[L>>1]|0))break;E=dd(Q,204,f)|0;c[M>>2]=E;if(!E){da=46;break}Fo(Q);if(a[F>>0]|0)ld(n,81939)|0;e:do if(!o){o=c[t>>2]|0;if(o|0)Do(o+(r<<5)|0,c[M>>2]|0,31)|0;o=c[K>>2]|0;if(!o){o=0;break}do if((Rk(o+(r*40|0)|0,10,68,M)|0)>=0){if((Rk((c[K>>2]|0)+(r*40|0)+8|0,10,68,M)|0)<0)break;if((Rk((c[K>>2]|0)+(r*40|0)+16|0,10,68,M)|0)<0)break;if((Rk(0,1,74,M)|0)<0)break;if(!(Rk((c[K>>2]|0)+(r*40|0)+24|0,3,83,M)|0))break;if((Rk((c[K>>2]|0)+(r*40|0)+30|0,2,67,M)|0)<0)break;if((Rk((c[K>>2]|0)+(r*40|0)+31|0,3,67,M)|0)<0)break;if((Rk((c[K>>2]|0)+(r*40|0)+33|0,3,67,M)|0)<0)break;if((Rk(0,3,74,M)|0)<0)break;if((Rk(0,3,74,M)|0)<0)break;if((Rk((c[K>>2]|0)+(r*40|0)+34|0,3,67,M)|0)<0)break;o=c[K>>2]|0;do if((cp(o+(r*40|0)+24|0)|0)==2){if(!(sp(d[o+(r*40|0)+25>>0]|0)|0))break;E=(rp(d[(c[K>>2]|0)+(r*40|0)+25>>0]|0)|0)&255;a[(c[K>>2]|0)+(r*40|0)+25>>0]=E}while(0);o=c[K>>2]|0;p=o+(r*40|0)+31|0;k=a[p>>0]|0;q=k<<24>>24;do if((k&255)<=7)if(k<<24>>24==4){a[p>>0]=0;a[o+(r*40|0)+32>>0]=2;break}else{a[p>>0]=b[10544+(q<<1)>>1];a[o+(r*40|0)+32>>0]=0;break}else{a[p>>0]=4-q;a[o+(r*40|0)+32>>0]=0}while(0);do if((Rk(0,3,74,M)|0)>=0){if((Rk(0,3,74,M)|0)<0)break;if((Rk(0,3,74,M)|0)<0)break;if((Rk(0,3,74,M)|0)<0)break;if((Rk(0,3,74,M)|0)<0)break;if((Rk(0,3,74,M)|0)>=0){o=0;break e}}while(0);ld(n,80970)|0;Bo(Q)|0;ld(n,Q)|0;if(!(kp(Q,83080)|0)){o=-5;break d}else{o=5;break e}}while(0);ld(n,80970)|0;Bo(Q)|0;ld(n,Q)|0;if(!(kp(Q,83080)|0)){o=-4;break d}else o=4}else if(!(kp(Q,83080)|0)){da=52;break d}while(0);s=s+1<<16>>16}do if((da|0)==46){if(o|0)break;ld(n,80942)|0;o=2}else if((da|0)==52)o=0-((o|0)>-1?o:0-o|0)|0;while(0)}else o=fl(L,f,0,n)|0;if(!o){p=0;q=0}else{p=o>>>31;q=((o|0)<0?0-o|0:o)+30|0}o=(p|0)!=0;do if(!(o|ea&(q|0)<30^1)){E=b[j+530>>1]|0;E=Dq((E<<16>>16>1?E:1)<<16>>16,6)|0;c[j+552>>2]=E;if(E|0)break;ld(n,85269)|0;p=0;o=3;break b}while(0);if(o){p=1;o=q;break b}if(!(c[w>>2]|0)){o=q;k=0;f:while(1){p=k<<16>>16;if(k<<16>>16>=(b[v>>1]|0))break;E=dd(Q,204,f)|0;c[M>>2]=E;if(!E){da=96;break}Fo(Q);o=(o|0)!=0|(a[F>>0]|0)==0?o:3;g:do if(!o){o=c[u>>2]|0;if(!o){o=0;break}do if((Rk(o+(p*6|0)|0,3,78,M)|0)>=0){if((Rk((c[u>>2]|0)+(p*6|0)+2|0,3,78,M)|0)<0)break;if((Rk((c[u>>2]|0)+(p*6|0)+4|0,3,67,M)|0)<0)break;if((Rk((c[u>>2]|0)+(p*6|0)+5|0,3,67,M)|0)<0)break;if((Rk(0,3,74,M)|0)<0)break;if((Rk(0,3,74,M)|0)>=0){o=0;break g}}while(0);ld(n,81032)|0;Bo(Q)|0;ld(n,Q)|0;if(!(kp(Q,83080)|0)){o=-4;break f}else o=4}else if(!(kp(Q,83080)|0)){da=100;break f}while(0);k=k+1<<16>>16}do if((da|0)==96){if(o|0)break;ld(n,81004)|0;o=2}else if((da|0)==100)o=0-((o|0)>-1?o:0-o|0)|0;while(0)}else o=gl(L,f,q,n)|0;if(!o){p=0;o=0}else{p=o>>>31;o=q|0?q:((o|0)<0?0-o|0:o)+40|0}do if(c[w>>2]|0){o=il(L,f,o,n)|0;if(!o){o=0;break}E=(o|0)<0;o=q|0?q:(E?0-o|0:o)+70|0;if(E){p=1;break b}}while(0);if(p|0){p=1;break b}p=0;while(1){if((p<<16>>16|0)>=(b[x>>1]<<1|0)){da=124;break}if(!(dd(Q,204,f)|0)){da=121;break}else p=p+1<<16>>16}if((da|0)==121){if(!o){ld(n,81066)|0;p=2}else p=o;da=125}else if((da|0)==124)if(!o)E=0;else{p=o;da=125}if((da|0)==125)E=o|0?o:p+50|0;b[Y>>1]=0;B=b[L>>1]|0;C=(l|0)==0;D=L+40|0;y=L+32|0;z=B<<16>>16;p=E;v=0;A=0;u=0;x=0;l=0;o=0;w=0;h:while(1){if((a[H>>0]|0)==0?A<<16>>16>=(b[G>>1]|0):0){k=p;break}t=dd(Q,204,f)|0;c[T>>2]=t;if(!t){da=130;break}Fo(Q);i:do if(!(a[F>>0]|0)){k=b[Y>>1]|0;if(k<<16>>16>0){b[Y>>1]=k+-1<<16>>16;s=v;k=u;q=x;r=l;t=w;break}if((x|0)!=0&(l|0)==1){k=Ao(c[T>>2]|0)|0;if((k|0)<1){s=v;k=u;q=0;r=0;t=w;break}if((k+-1|0)>>>0<5){r=(c[K>>2]|0)+(x*40|0)+-40|0;io(c[T>>2]|0,S,M)|0;a[r+31>>0]=c[M>>2];a[r+32>>0]=c[S>>2];j:do if((k|0)==1){k=c[T>>2]|0;switch(a[k>>0]|0){case 68:{a[k>>0]=72;a[r+30>>0]=1;break j}case 84:{a[k>>0]=72;a[r+30>>0]=2;break j}default:{da=143;break j}}}else da=143;while(0);if((da|0)==143){da=0;a[r+30>>0]=0}k=c[T>>2]|0;q=r+24|0;if((cp(k)|0)>>>0<6)vp(q,k)|0;else{a[q>>0]=63;a[q+1>>0]=63;a[q+2>>0]=63;a[q+3>>0]=0}l=r+37|0;a[l>>0]=(a[l>>0]|0)+1<<24>>24}b[Y>>1]=0;s=v;k=u;q=0;r=0;t=w;break}do if((Rk(O,1,83,T)|0)==1){if(Rk($,2,83,T)|0)break;if((Rk(aa,3,83,T)|0)<1)break;switch(a[O>>0]|0){case 86:{b[Y>>1]=0;s=v;k=u;q=x;r=l;t=w;break i}case 71:{b[Y>>1]=1;s=v;k=u;q=x;r=l;t=w;break i}case 65:{do if(c[K>>2]|0){q=Rp(aa,0,10)|0;if((q|0)<=0)break;if((q|0)<=(b[L>>1]|0)){s=v;k=u;r=1;t=w;break i}}while(0);b[Y>>1]=1;s=v;k=u;q=0;r=l;t=w;break i}case 83:{if(kp(aa,81160)|0){s=v;k=u;q=x;r=l;t=w;break i}if((Rk(Y,3,78,T)|0)>=1){s=v;k=u;q=x;r=l;t=w;break i}b[Y>>1]=0;s=v;k=u;q=x;r=l;t=w;break i}case 77:{if(!(kp(aa,81164)|0)){s=c[T>>2]|0;s=s+(ip(s,81168)|0)|0;c[T>>2]=s;s=fp(s,81168)|0;Rk(J,(s|0)<32?s:32,76,T)|0;s=v;k=u;q=x;r=l;t=w;break i}if(!(kp(aa,81170)|0))if(!(a[H>>0]|0)){s=v;k=u;q=x;r=l;t=w;break i}else{k=p;break h}if(!(c[K>>2]|0)){s=v;k=u;q=x;r=l;t=w;break i}do if(!(kp(aa,82006)|0)){if((Rk(R,3,78,T)|0)<=0)break;k=b[R>>1]|0;if((k+-1&65535)>=8)break;t=(v|w|0)==0?-1:v;s=0;while(1){q=s<<16>>16;if(s<<16>>16>=k<<16>>16){da=180;break}r=M+(q<<1)|0;if((Rk(r,0,78,T)|0)<0){da=191;break}k=S+(q<<1)|0;if((Rk(k,0,78,T)|0)<0){da=191;break}da=b[r>>1]|0;if(da<<16>>16<1?1:da<<16>>16>B<<16>>16){da=191;break}if(((b[k>>1]|0)+15&65535)>30){da=191;break}k=b[R>>1]|0;s=s+1<<16>>16}k:do if((da|0)==180){da=0;if((t|0)==-1){q=0;while(1){if((q|0)>=(z|0))break;k=c[K>>2]|0;if(!(a[k+(q*40|0)+37>>0]|0)){a[k+(q*40|0)+32>>0]=0;a[k+(q*40|0)+31>>0]=0}q=q+1|0}k=b[R>>1]|0;t=1}k=k<<16>>16;s=0;while(1){if((s|0)>=(k|0)){k=t;break k}q=(b[M+(s<<1)>>1]|0)+-1|0;r=c[K>>2]|0;if(!(a[r+(q*40|0)+37>>0]|0))a[r+(q*40|0)+31>>0]=b[S+(s<<1)>>1];s=s+1|0}}else if((da|0)==191){da=0;ld(n,81174)|0;Bo(Q)|0;ld(n,Q)|0;k=t}while(0);s=k;k=u;q=x;r=l;t=w;break i}while(0);do if(!(kp(aa,82010)|0)){if((Rk(R,3,78,T)|0)<=0)break;k=b[R>>1]|0;if((k+-1&65535)>=8)break;t=(v|w|0)==0?-1:w;s=0;while(1){q=s<<16>>16;if(s<<16>>16>=k<<16>>16){da=203;break}r=M+(q<<1)|0;if((Rk(r,0,78,T)|0)<0){da=214;break}k=S+(q<<1)|0;if((Rk(k,0,78,T)|0)<0){da=214;break}da=b[r>>1]|0;if(da<<16>>16<1?1:da<<16>>16>B<<16>>16){da=214;break}if((e[k>>1]|0)>3){da=214;break}k=b[R>>1]|0;s=s+1<<16>>16}l:do if((da|0)==203){da=0;if((t|0)==-1){q=0;while(1){if((q|0)>=(z|0))break;k=c[K>>2]|0;if(!(a[k+(q*40|0)+37>>0]|0)){a[k+(q*40|0)+32>>0]=0;a[k+(q*40|0)+31>>0]=0}q=q+1|0}k=b[R>>1]|0;t=1}k=k<<16>>16;s=0;while(1){if((s|0)>=(k|0))break l;q=(b[M+(s<<1)>>1]|0)+-1|0;r=c[K>>2]|0;if(!(a[r+(q*40|0)+37>>0]|0))a[r+(q*40|0)+32>>0]=b[S+(s<<1)>>1];s=s+1|0}}else if((da|0)==214){da=0;ld(n,81197)|0;Bo(Q)|0;ld(n,Q)|0}while(0);s=v;k=u;q=x;r=l;break i}while(0);do if(!(kp(aa,81221)|0)){if((Rk(R,3,78,T)|0)<=0)break;k=b[R>>1]|0;if((k+-1&65535)>=8)break;r=0;while(1){q=r<<16>>16;if(r<<16>>16>=k<<16>>16){q=k;break}k=M+(q<<1)|0;do if((Rk(k,0,78,T)|0)>=0){if((Rk(S+(q<<1)|0,0,78,T)|0)<0){da=224;break}t=b[k>>1]|0;if(t<<16>>16<1?1:t<<16>>16>B<<16>>16)da=224}else da=224;while(0);if((da|0)==224){da=0;b[k>>1]=-1;ld(n,82109)|0;Bo(Q)|0;ld(n,Q)|0}k=b[R>>1]|0;r=r+1<<16>>16}k=(u|0)==0?-1:u;m:do if((k|0)==-1){k=0;while(1){if((k|0)>=(z|0)){k=1;break m}a[(c[K>>2]|0)+(k*40|0)+30>>0]=0;k=k+1|0}}while(0);u=0;while(1){r=u<<16>>16;if(u<<16>>16>=q<<16>>16)break;t=M+(r<<1)|0;q=b[t>>1]|0;n:do if(q<<16>>16>=1){s=(q<<16>>16)+-1|0;ga=c[K>>2]|0;q=ga+(s*40|0)+24|0;if(!(a[ga+(s*40|0)+25>>0]|0))switch(a[q>>0]|0){case 84:case 68:break n;default:{}}s=lo(q)|0;if(!s)break;q=b[S+(r<<1)>>1]|0;r=q-s|0;if((((r|0)>-1?r:0-r|0)|0)>=20)break;a[(c[K>>2]|0)+(((b[t>>1]|0)+-1|0)*40|0)+30>>0]=(q|0)!=(s|0)?r&255:127}while(0);q=b[R>>1]|0;u=u+1<<16>>16}s=v;q=x;r=l;t=w;break i}while(0);do if(kp(aa,81225)|0){if(!(kp(aa,81229)|0))break;if(!(kp(aa,81233)|0))break;if(!(kp(aa,81237)|0))break;if(!(kp(aa,81241)|0))break;if(!(kp(aa,81245)|0))break;if(!(kp(aa,81249)|0))break;if(!(kp(aa,81253)|0))break;if(kp(aa,81257)|0){s=v;k=u;q=x;r=l;t=w;break i}}while(0);if(C){s=v;k=u;q=x;r=l;o=1;t=w;break i}c[M>>2]=c[T>>2];t=c[L>>2]|0;s=t&65535;t=t>>>16&65535;b[W>>1]=-1;o:do if(!(kp(aa,81225)|0)){if((Rk(S,3,78,M)|0)<=0){da=272;break}k=b[S>>1]|0;if((k+-1&65535)<8)s=0;else{da=272;break}while(1){if((s|0)>=(k<<16>>16|0)){k=0;break o}q=X+(s<<1)|0;if((Rk(q,0,78,M)|0)<0){k=5;da=354;break o}ga=Rk(Z,4,83,M)|0;k=ga>>>31;if((ga|0)<0){if(k|0){k=5;da=354;break o}}else{Go(Z,P)|0;do if(kp(Z,83428)|0){if(!(kp(Z,83432)|0)){r=2;break}if(!(kp(Z,83436)|0)){r=3;break}if(!(kp(Z,83440)|0)){r=4;break}if(!(kp(Z,83444)|0)){r=5;break}if(!(kp(Z,83448)|0))r=6;else{k=5;da=354;break o}}else r=1;while(0);if(k|0){k=5;da=354;break o}k=Ol(b[q>>1]|0,I)|0;if((k|0)==-1){if(Ml(I,b[q>>1]|0,r)|0){k=5;da=354;break o}k=(c[D>>2]|0)+-1|0}else c[(c[(c[I>>2]|0)+(k<<2)>>2]|0)+4>>2]=r;q=c[(c[I>>2]|0)+(k<<2)>>2]|0;r=0;while(1){if((r|0)==4)break;h[q+24+(r<<3)>>3]=-777777.777;h[(c[(c[I>>2]|0)+(k<<2)>>2]|0)+56+(r<<3)>>3]=-777777.777;r=r+1|0}a[q+88>>0]=0}k=b[S>>1]|0;s=s+1|0}}else da=272;while(0);p:do if((da|0)==272){da=0;do if(!(kp(aa,81229)|0)){if((Rk(S,3,78,M)|0)<=0)break;k=b[S>>1]|0;if((k+-1&65535)<8){r=k;k=0;q=0;s=0}else break;while(1){if((s|0)>=(r<<16>>16|0))break;r=X+(s<<1)|0;do if((Rk(r,0,78,M)|0)<0)k=1;else{ga=Rk(Z,4,83,M)|0;k=ga>>>31;if((ga|0)>=0){q=Ol(b[r>>1]|0,I)|0;if((q|0)==-1){k=1;q=-1;break}}if(k|0)break;c[(c[(c[y>>2]|0)+(q<<2)>>2]|0)+8>>2]=0;Go(Z,P)|0;if(!(kp(Z,83483)|0)){c[(c[(c[y>>2]|0)+(q<<2)>>2]|0)+8>>2]=1;k=0;break}if(!(kp(Z,83487)|0)){c[(c[(c[y>>2]|0)+(q<<2)>>2]|0)+8>>2]=2;k=0;break}if(!(kp(Z,83491)|0)){c[(c[(c[y>>2]|0)+(q<<2)>>2]|0)+8>>2]=3;k=0;break}if(kp(Z,81261)|0){k=6;da=354;break p}c[(c[(c[y>>2]|0)+(q<<2)>>2]|0)+8>>2]=3;k=0}while(0);r=b[S>>1]|0;s=s+1|0}if(!k){k=0;break p}else{k=6;da=354;break p}}while(0);do if(!(kp(aa,81233)|0)){if((Rk(S,3,78,M)|0)<=0)break;k=b[S>>1]|0;if((k+-1&65535)<8){r=k;k=0;q=0;s=0}else break;while(1){if((s|0)>=(r<<16>>16|0))break;r=X+(s<<1)|0;do if((Rk(r,0,78,M)|0)<0)k=1;else{ga=Rk(ba,0,78,M)|0;k=ga>>>31;if((ga|0)>=0){q=Ol(b[r>>1]|0,I)|0;if((q|0)==-1){k=1;q=-1;break}}if(k|0)break;c[(c[(c[y>>2]|0)+(q<<2)>>2]|0)+16>>2]=b[ba>>1];k=0}while(0);r=b[S>>1]|0;s=s+1|0}if(!k){k=0;break p}else{k=7;da=354;break p}}while(0);do if(!(kp(aa,81237)|0)){if((Rk(S,3,78,M)|0)<=0)break;k=b[S>>1]|0;if((k+-1&65535)<8)q=0;else break;while(1){if((q|0)>=(k<<16>>16|0)){k=0;break p}k=X+(q<<1)|0;if((Rk(k,0,78,M)|0)<0){k=8;da=354;break p}if((Rk(Z,4,83,M)|0)<0){k=8;da=354;break p}k=Ol(b[k>>1]|0,I)|0;if((k|0)==-1){k=8;da=354;break p}c[(c[(c[y>>2]|0)+(k<<2)>>2]|0)+12>>2]=0;Go(Z,P)|0;do if(!(kp(Z,83505)|0))c[(c[(c[y>>2]|0)+(k<<2)>>2]|0)+12>>2]=1;else{if(!(kp(Z,83508)|0)){c[(c[(c[y>>2]|0)+(k<<2)>>2]|0)+12>>2]=2;break}if(kp(Z,83511)|0){k=8;da=354;break p}c[(c[(c[y>>2]|0)+(k<<2)>>2]|0)+12>>2]=3}while(0);k=b[S>>1]|0;q=q+1|0}}while(0);if(!(kp(aa,81241)|0)){if((Rk(W,4,78,M)|0)<=0){k=9;da=354;break}if((Rk(S,3,78,M)|0)<=0){k=9;da=354;break}r=Ol(b[W>>1]|0,I)|0;if((r|0)==-1){k=9;da=354;break}else q=0;while(1){k=b[S>>1]|0;if((q|0)>=(k<<16>>16|0)){q=0;break}k=U+(q<<1)|0;if((Rk(k,0,78,M)|0)<0){k=9;da=354;break p}ga=b[k>>1]|0;if(ga<<16>>16<1?1:ga<<16>>16>s<<16>>16){k=9;da=354;break p}else q=q+1|0}while(1){if((q|0)>=(k<<16>>16|0)){k=0;break p}if(Fl((c[(c[I>>2]|0)+(r<<2)>>2]|0)+168|0,b[U+(q<<1)>>1]|0)|0){k=9;da=354;break p}k=b[S>>1]|0;q=q+1|0}}if(!(kp(aa,81245)|0)){if((Rk(W,4,78,M)|0)<=0){k=10;da=354;break}if((Rk(S,3,78,M)|0)<=0){k=10;da=354;break}r=Ol(b[W>>1]|0,I)|0;if((r|0)==-1){k=10;da=354;break}else q=0;while(1){k=b[S>>1]|0;if((q|0)>=(k<<16>>16|0)){q=0;break}k=V+(q<<1)|0;if((Rk(k,0,78,M)|0)<0){k=10;da=354;break p}ga=b[k>>1]|0;if(ga<<16>>16<1?1:ga<<16>>16>t<<16>>16){k=10;da=354;break p}else q=q+1|0}while(1){if((q|0)>=(k<<16>>16|0)){k=0;break p}if(Fl((c[(c[I>>2]|0)+(r<<2)>>2]|0)+184|0,b[V+(q<<1)>>1]|0)|0){k=10;da=354;break p}k=b[S>>1]|0;q=q+1|0}}if(kp(aa,81249)|0){if(kp(aa,81253)|0){k=0;break}do if((Rk(W,4,78,M)|0)>0){if((Rk(_,80,83,M)|0)<=0){k=0;break}k=Ol(b[W>>1]|0,I)|0;if((k|0)==-1){k=11;da=354;break p}}else k=0;while(0);Go(_,P)|0;vp((c[(c[y>>2]|0)+(k<<2)>>2]|0)+88|0,_)|0;k=0;break}q:do if((Rk(W,4,78,M)|0)>0){if((Rk(S,3,78,M)|0)<=0)break;k=Ol(b[W>>1]|0,I)|0;if((k|0)!=-1&(b[S>>1]|0)==4){q=4;r=0}else break;while(1){if((r|0)>=(q<<16>>16|0))break;if((Rk(ca+(r<<3)|0,0,68,M)|0)<0)break q;q=b[S>>1]|0;r=r+1|0}q=c[(c[I>>2]|0)+(k<<2)>>2]|0;r:do if(+N(+(777777.777-+N(+(+h[q+24>>3]))))<1.0e-07){k=0;while(1){if((k|0)==4)break r;h[q+24+(k<<3)>>3]=+h[ca+(k<<3)>>3];k=k+1|0}}else{k=0;while(1){if((k|0)==4)break r;h[q+56+(k<<3)>>3]=+h[ca+(k<<3)>>3];k=k+1|0}}while(0);k=0;break p}while(0);k=11;da=354}while(0);if((da|0)==354){da=0;Nl(I)}if(!k){s=v;k=u;q=x;r=l;t=w;break i}ld(n,81265)|0;Bo(Q)|0;ld(n,Q)|0;p=(p|0)==0?k:p;s=v;k=u;q=x;r=l;t=w;break i}default:{s=v;k=u;q=x;r=l;t=w;break i}}}while(0);if(!(kp(Q,83080)|0)){da=153;break h}else{s=v;k=u;q=x;r=l;t=w}}else{ld(n,81129)|0;p=(p|0)==0?3:p;s=v;k=u;q=x;r=l;t=w}while(0);v=s;A=A+1<<16>>16;u=k;x=q;l=r;w=t}do if((da|0)==130){if(p|0){k=p;break}ld(n,81095)|0;k=2}else if((da|0)==153){if(!p){k=-4;break}k=0-((p|0)>-1?p:0-p|0)|0}while(0);if(C&(o|0)!=0)ld(n,81299)|0;o=c[D>>2]|0;s:do if((o|0)>0){p=0;while(1){if((p|0)>=(o|0))break s;o=c[D>>2]|0;p=p+1|0}}while(0);if(!k){p=0;o=0;break b}p=(k|0)<0;o=E|0?E:((k|0)<0?0-k|0:k)+60|0;break b}while(0);ld(n,80906)|0;Bo(Q)|0;ld(n,Q)|0;o=23}while(0);p=0}}else{o=13;da=9}}else{o=11;da=9}while(0);if((da|0)==9)p=0;c[m>>2]=p?0-o|0:o;o=(o|0)!=0;if(ea)if(o){da=368;break}else break;else{j=o?0:g;break}}while(0);if((da|0)==365){c[m>>2]=o;da=368}if((da|0)==368)j=Wk(j)|0;i=fa;return j|0}function Qk(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;if((e|0)>0){xp(b,d,e)|0;a[b+e>>0]=0;i=cp(b)|0}else{a[b+e>>0]=0;i=0}e=i;while(1){h=e+-1|0;if((e|0)<=0)break;g=a[d+h>>0]|0;if(!(g<<24>>24))break;if(!(Yp(g&255)|0))break;else e=h}c[f>>2]=b+e;return i|0}function Rk(d,e,f,j){d=d|0;e=e|0;f=f|0;j=j|0;var k=0,l=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,t=0,u=0;u=i;i=i+48|0;t=u+4|0;q=u;p=u+8|0;r=c[j>>2]|0;k=(e|0)>32;o=(e|0)<1&1;l=k?0:o^1;o=k?0:o;switch(f|0){case 83:{k=0;while(1){l=r+k|0;if((k|0)>=(e|0))break;o=a[l>>0]|0;if(!(o<<24>>24))break;if(!(Yp(o&255)|0))break;k=k+1|0}f=Qk(d,l,e-k|0,t)|0;e=c[t>>2]|0;a[e>>0]=0;c[j>>2]=(c[j>>2]|0)+(f+k);k=e-d|0;break}case 76:case 78:case 67:{do if(!k)if(!l){if(!o){l=0;k=-1;break}l=Rp(r,q,10)|0;e=c[q>>2]|0;k=r;c[j>>2]=(c[j>>2]|0)+(e-k);k=(e|0)!=(k|0)&1;break}else{e=Qk(p,r,e,t)|0;c[j>>2]=(c[j>>2]|0)+e;k=c[t>>2]|0;a[k>>0]=0;if((e|0)==0|(k|0)==(p|0)){l=0;k=0;break}l=Rp(p,q,10)|0;k=(c[q>>2]|0)==(k|0)?1:-1;break}else{l=0;k=-1}while(0);a:do switch(f|0){case 67:if((l+128|0)>>>0<256){a[d>>0]=l;break a}else{a[d>>0]=0;k=-1;break a}case 78:if((l+32768|0)>>>0<65536){b[d>>1]=l;break a}else{b[d>>1]=0;k=-1;break a}case 76:if((l+-2147483647|0)>>>0>1){c[d>>2]=l;break a}else{c[d>>2]=0;k=-1;break a}default:k=-1}while(0);break}case 70:case 68:{do if(!k)if(!l){if(!o){n=0.0;k=-1;break}n=+zq(r,q);e=c[q>>2]|0;k=r;c[j>>2]=(c[j>>2]|0)+(e-k);k=(e|0)!=(k|0)&1;break}else{e=Qk(p,r,e,t)|0;c[j>>2]=(c[j>>2]|0)+e;k=c[t>>2]|0;a[k>>0]=0;if((e|0)==0|(k|0)==(p|0)){n=0.0;k=0;break}n=+zq(p,q);k=(c[q>>2]|0)==(k|0)?1:-1;break}else{n=0.0;k=-1}while(0);b:do switch(f|0){case 68:if(n!=s&n!=-s){h[d>>3]=n;break b}else{h[d>>3]=0.0;k=-1;break b}case 70:{m=+N(+n);if(m<=1.1754943508222875e-38){g[d>>2]=0.0;break b}if(!(m>=3402823466385288598117041.0e14)){g[d>>2]=n;break b}else{g[d>>2]=0.0;k=-1;break b}}default:{}}while(0);break}case 74:{k=0;while(1){l=r+k|0;if((k|0)>=(e|0))break;if(!(a[l>>0]|0))break;k=k+1|0}c[j>>2]=l;break}default:k=-1}i=u;return k|0}function Sk(b){b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;f=g;c[f>>2]=0;do if((b|0)!=0?(Io(b,81361,11)|0)==0:0){d=Rp(b+11|0,f,10)|0;e=b+201|0;f=c[f>>2]|0;if(((f|0?(a[f>>0]|0)==0:0)?(Io(e,81373,5)|0)==0:0)?np(b+206|0,81379)|0:0)break;d=0}else d=0;while(0);i=g;return d|0}function Tk(a){a=a|0;var b=0;do if(((a|0)!=0?(c[a+548>>2]|0)!=0:0)?(b=c[a+528>>2]|0,(b&65535)<<16>>16>=1):0){if((b>>>16&65535)<<16>>16>0?(c[a+552>>2]|0)==0:0){b=1;break}b=0}else b=1;while(0);return b|0}function Uk(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+256|0;p=q;n=q+48|0;o=q+16|0;m=q+8|0;if((((c[b+20>>2]|0)==2?(l=c[b+16>>2]|0,!((f|0)==0|(l|0)==0)):0)?(d|0)>-1|(e|0)>(d|0):0)?(xq(l,d,0)|0)==0:0){h=n+203|0;j=(g|0)!=0;while(1){k=uq(l)|0;if(!((k|0)<(e|0)&(k|0)>-1))break;if(!(dd(n,203,b)|0))break;a[h>>0]=0;if(j&(k|0)==(d|0)){Go(n,m)|0;k=c[m>>2]|0?81713:92409;c[p>>2]=g;c[p+4>>2]=k;k=qq(o,81393,p)|0;c[m>>2]=k;Do(n+k|0,n,203-k|0)|0;ir(n|0,o|0,c[m>>2]|0)|0}if(!(op(n,10)|0)){k=n+(cp(n)|0)|0;a[k>>0]=10;a[k+1>>0]=0}kq(n,f)|0}h=xq(l,e,0)|0}else h=1;i=q;return h|0}function Vk(a,d,e,f,g,i,j,k,l,m,n){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;var o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0.0,B=0,C=0,D=0.0,E=0,F=0,G=0,H=0,I=0;h[e>>3]=0.0;h[f>>3]=0.0;h[g>>3]=0.0;h[k>>3]=0.0;h[j>>3]=0.0;h[i>>3]=0.0;h[l>>3]=1.0;do if(!(Tk(a)|0)){u=c[a+528>>2]|0;B=u&65535;o=u<<16>>16;C=a+548|0;u=u>>>16&65535;t=0;q=-1.e+32;r=-1.e+32;s=-1.e+32;v=1.e+32;w=1.e+32;p=1.e+32;while(1){if((t|0)>=(o|0)){A=s;D=v;break}z=c[C>>2]|0;y=+h[z+(t*40|0)>>3];A=+h[z+(t*40|0)+8>>3];D=+h[z+(t*40|0)+16>>3];t=t+1|0;q=y>q?y:q;r=A>r?A:r;s=D>s?D:s;v=y=(o<<16>>16|0))break;H=c[a>>2]|0;G=b[H+(t*6|0)>>1]|0;F=(G<<16>>16)+-1|0;H=b[H+(t*6|0)+2>>1]|0;E=(H<<16>>16)+-1|0;I=c[C>>2]|0;s=+h[I+(F*40|0)>>3]-+h[I+(E*40|0)>>3];x=+h[I+(F*40|0)+8>>3]-+h[I+(E*40|0)+8>>3];y=+h[I+(F*40|0)+16>>3]-+h[I+(E*40|0)+16>>3];if(G<<16>>16>=1?!(H<<16>>16>B<<16>>16|(H<<16>>16<1?1:G<<16>>16>B<<16>>16)|(F|0)==(E|0)):0){v=v+ +O(+(s*s+x*x+y*y));u=u+1|0}else{c[m>>2]=c[m>>2]|1;ld(n,83822)|0;o=b[z>>1]|0}t=t+1|0}s=q-D;t=!(s<=(+N(+q)+ +N(+D))*1.0e-05);s=t?256.0/s:0.0;q=r-w;t=!(q<=(+N(+r)+ +N(+w))*1.0e-05);r=t?256.0/q:0.0;q=A-p;t=!(q<=(+N(+A)+ +N(+p))*1.0e-05);q=t?256.0/q:0.0;t=s>1.0e-10;a=r>1.0e-10;A=+N(+q);o=(t|a)&A<1.0e-10?2:A>1.0e-10?3:0;if(d){a:do switch(o|0){case 3:{if(t&a){s=s0){q=v/+(u|0);r=q*s;if(r>20.0){s=20.0/q;r=D;q=w;break}if(!(r<1.0e-10))if(r<10.0){s=10.0/q;r=D;q=w}else{r=D;q=w}else{s=1.0;r=D;q=w}}else{r=D;q=w}}else{s=1.0;r=D;q=w}}else{s=1.0;r=1.e+32;q=1.e+32;p=1.e+32;o=0}while(0);h[e>>3]=r;h[f>>3]=q;h[g>>3]=p;h[i>>3]=0.0;h[j>>3]=0.0;h[k>>3]=0.0;h[l>>3]=s;return o|0}function Wk(a){a=a|0;var b=0;if(a|0){b=c[a+548>>2]|0;if(b|0)Cq(b);b=c[a+552>>2]|0;if(b|0)Cq(b);b=c[a+556>>2]|0;if(b|0)Cq(b);Nl(a+560|0);b=c[a+576>>2]|0;if(b|0)Yk(b)|0;Cq(a)}return 0}function Xk(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0;g=a+48|0;e=c[g>>2]|0;c[e+4>>2]=0;c[e>>2]=0;f=b[a>>1]|0;if(!(f<<16>>16)){c[e+12>>2]=0;c[e+8>>2]=0}else{f=f<<16>>16;h=e+8|0;c[h>>2]=Dq(f,4)|0;c[e+12>>2]=Dq(f,4)|0;er(c[h>>2]|0,-1,f|0)|0;er(c[(c[g>>2]|0)+12>>2]|0,-1,b[a>>1]|0)|0;e=c[g>>2]|0}c[e+32>>2]=0;f=Dq(1,16)|0;c[e+36>>2]=f;do if(f){h=(zl(f,8)|0)<0;e=c[g>>2]|0;if(h){c[e+36>>2]=0;ld(d,85269)|0;e=-1;break}c[e+40>>2]=0;f=Dq(1,16)|0;c[e+44>>2]=f;if(!f){ld(d,85269)|0;e=-1;break}h=(zl(f,1)|0)<0;e=c[g>>2]|0;if(h){c[e+44>>2]=0;ld(d,85269)|0;e=-1;break}c[e+48>>2]=0;f=Dq(1,16)|0;c[e+52>>2]=f;if(!f){ld(d,85269)|0;e=-1;break}h=(zl(f,4)|0)<0;e=c[g>>2]|0;if(h){c[e+52>>2]=0;ld(d,85269)|0;e=-1;break}c[e+56>>2]=0;f=Dq(1,16)|0;c[e+60>>2]=f;if(!f){ld(d,85269)|0;e=-1;break}e=zl(f,4)|0;if((e|0)<0){c[(c[g>>2]|0)+60>>2]=0;ld(d,85269)|0;e=-1}}else{ld(d,85269)|0;e=-1}while(0);return e|0}function Yk(a){a=a|0;var b=0,d=0;if(a|0){b=c[a+8>>2]|0;if(b|0)Cq(b);b=c[a+12>>2]|0;if(b|0)Cq(b);b=a+36|0;d=c[b>>2]|0;if(d|0){Cl(d);Cq(c[b>>2]|0)}b=a+44|0;d=c[b>>2]|0;if(d|0){Cl(d);Cq(c[b>>2]|0)}b=a+52|0;d=c[b>>2]|0;if(d|0){Cl(d);Cq(c[b>>2]|0)}b=a+60|0;d=c[b>>2]|0;if(d|0){Cl(d);Cq(c[b>>2]|0)}Cq(a)}return 0}function Zk(a,b){a=a|0;b=b|0;b=dd(a,32004,b)|0;if(((b|0)!=0?(cp(b)|0)>=7:0)?(dp(b,81400,7)|0)==0:0){b=b+7|0;Ao(b)|0}else b=0;return b|0}function _k(d,e,f){d=d|0;e=e|0;f=f|0;var j=0.0,k=0,l=0,m=0,n=0;n=i;i=i+4112|0;l=n+8|0;m=n;er(l|0,0,4096)|0;f=Co(f,l,4096,81408)|0;a:do switch(e|0){case 83:if(!f){a[d>>0]=0;f=0;break a}else{Do(d,l,f+1|0)|0;break a}case 73:case 76:case 78:case 67:{k=Rp(l,m,10)|0;f=(c[m>>2]|0)==(l|0)?0:f;switch(e|0){case 76:if((k+-2147483647|0)>>>0>1){c[d>>2]=k;break a}else{c[d>>2]=0;f=-1;break a}case 73:{c[d>>2]=k;break a}case 67:if((k+128|0)>>>0<256){a[d>>0]=k;break a}else{a[d>>0]=0;f=-1;break a}case 78:if((k+32768|0)>>>0<65536){b[d>>1]=k;break a}else{b[d>>1]=0;f=-1;break a}default:{f=-1;break a}}}case 70:case 68:{j=+zq(l,m);f=(c[m>>2]|0)==(l|0)?0:f;switch(e|0){case 68:if(j!=s&j!=-s){h[d>>3]=j;break a}else{h[d>>3]=0.0;f=-1;break a}case 70:{j=+N(+j);if(j<=1.1754943508222875e-38){g[d>>2]=0.0;break a}if(!(j>=3402823466385288598117041.0e14))break a;g[d>>2]=0.0;f=-1;break a}default:{g[d>>2]=j;break a}}}default:f=-1}while(0);i=n;return f|0}function $k(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=i;i=i+4096|0;e=g;er(e|0,0,4096)|0;f=Co(d,e,4096,81415)|0;if(f){Do(b,e,f+1|0)|0;e=c[d>>2]|0;if(e|0?(a[e>>0]|0)==61:0)c[d>>2]=e+1}else a[b>>0]=0;i=g;return f|0}function al(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+36112|0;m=o;l=o+4104|0;k=o+8|0;g=Zk(l,e)|0;c[m>>2]=g;do if((g|0)!=0?(kp(g,81423)|0)==0:0){Fo(l);b[d>>1]=-1;g=d+2|0;b[g>>1]=-1;h=d+4|0;a[h>>0]=-1;b[d+6>>1]=-1;b[d+8>>1]=999;e=Zk(l,e)|0;c[m>>2]=e;if(!e){ld(f,81468)|0;g=1;break}Fo(l);if(a[l+32e3>>0]|0)ld(f,81498)|0;_k(k,83,m)|0;if(kp(k,81519)|0){ld(f,81468)|0;g=1;break}if((_k(d,78,m)|0)<0)ld(f,81526)|0;else{if((((_k(g,78,m)|0)>=0?(j=d+48|0,(_k((c[j>>2]|0)+16|0,73,m)|0)>=0):0)?(_k((c[j>>2]|0)+20|0,73,m)|0)>=0:0)?(_k(h,67,m)|0)>=0:0){g=0;break}ld(f,81572)|0}Bo(l)|0;ld(f,l)|0;g=3}else n=3;while(0);if((n|0)==3){ld(f,81434)|0;g=1}i=o;return g|0}function bl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=i;i=i+32016|0;f=e;a=Zk(f,b)|0;Fo(f);if(!((a|0)!=0?(kp(a,81608)|0)==0:0)){ld(d,81619)|0;c=(c|0)==0?1:c}i=e;return c|0}function cl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=i;i=i+32016|0;f=e;a=Zk(f,b)|0;Fo(f);if(!((a|0)!=0?(kp(a,81653)|0)==0:0)){ld(d,81663)|0;c=(c|0)==0?1:c}i=e;return c|0}function dl(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=i;i=i+36128|0;z=B+8|0;w=B+4112|0;v=B+16|0;x=B+4|0;y=B;f=Zk(w,b)|0;c[z>>2]=f;Fo(w);do if(!f)A=36;else{r=a+48|0;g=0;a:while(1){if(!(kp(f,81698)|0)){t=f;u=g;A=33;break}if((Co(z,v,4096,81713)|0)<6)break;if(kp(v,81715)|0)break;Co(z,v,4096,81722)|0;do if(kp(v,81739)|0){if(!(kp(v,81747)|0)){if((_k(x,67,z)|0)<0)break a;f=(c[r>>2]|0)+52|0;q=2;A=14;break}if(!(kp(v,81755)|0)){if((_k(x,67,z)|0)<0)break a;f=(c[r>>2]|0)+60|0;q=3;A=14}}else{c[x>>2]=1;f=(c[r>>2]|0)+44|0;q=1;A=14}while(0);if((A|0)==14){A=0;p=c[f>>2]|0;if(($k(v,z)|0)<=0)break;if(!(kp(v,81763)|0)){c[y>>2]=0;b:do if((el(0,z,y,0)|0)>=0?(s=c[y>>2]|0,(s|0)!=0):0){c[s>>2]=c[x>>2];m=c[s+4>>2]|0;o=2;while(1){if((o|0)>=(m|0))break;n=s+(o<<2)|0;h=c[n>>2]|0;l=c[r>>2]|0;j=(c[l+4>>2]|0)+(c[l>>2]|0)|0;k=c[l+8>>2]|0;l=c[l+12>>2]|0;f=0;while(1){if((f|0)>=(j|0)){f=-1;break}if((c[k+(f<<2)>>2]|0)==(h|0)){A=23;break}f=f+1|0}if((A|0)==23){A=0;f=c[l+(f<<2)>>2]|0}c[n>>2]=f;o=o+1|0}if((Bl(p,s)|0)>=0)switch(q|0){case 1:{f=(c[r>>2]|0)+40|0;c[f>>2]=(c[f>>2]|0)+1;f=g;break b}case 2:{f=(c[r>>2]|0)+48|0;c[f>>2]=(c[f>>2]|0)+1;f=g;break b}case 3:{f=(c[r>>2]|0)+56|0;c[f>>2]=(c[f>>2]|0)+1;f=g;break b}default:{f=g;break b}}else f=1}else f=1;while(0);g=f}}c[z>>2]=Zk(w,b)|0;Fo(w);f=c[z>>2]|0;if(!f){t=0;u=g;A=33;break}}if((A|0)==33?(u|0)==0:0){if(!t){A=36;break}z=c[a+48>>2]|0;if(((c[z+40>>2]|0)==0?(c[z+48>>2]|0)==0:0)?(c[z+56>>2]|0)==0:0)break;ld(e,81813)|0;break}c[z>>2]=Zk(w,b)|0;Fo(w);A=36}while(0);if((A|0)==36){ld(e,81771)|0;Bo(w)|0;ld(e,w)|0;d=7}i=B;return d|0}function el(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;j=i;i=i+4112|0;a=j+8|0;e=j;c[d>>2]=0;er(a|0,0,4096)|0;Co(b,a,4096,81722)|0;do if((kp(a,81769)|0)==0?(f=Co(b,a,4096,81408)|0,g=Rp(a,e,10)|0,!((g|0)<0?1:(c[e>>2]|0)==(a|0))):0){a=Dq(g+3|0,4)|0;c[d>>2]=a;if(!a)f=-1;else{c[a>>2]=-1;c[a+4>>2]=g;a=g+2|0;e=2;while(1){if((e|0)>=(a|0)){h=7;break}if((_k((c[d>>2]|0)+(e<<2)|0,73,b)|0)<0){f=-1;break}else e=e+1|0}if((h|0)==7)if((f|0)>=0)break;a=c[d>>2]|0}if(a){Cq(a);c[d>>2]=0}}else f=-1;while(0);i=j;return f|0}function fl(e,f,g,j){e=e|0;f=f|0;g=g|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;D=i;i=i+40256|0;B=D+36|0;A=D+8248|0;q=D+4152|0;u=D+32|0;p=D+28|0;y=D+4144|0;r=D+16|0;s=D+8|0;t=D;w=D+24|0;x=D+48|0;v=D+40|0;k=Zk(A,f)|0;c[B>>2]=k;do if((k|0)!=0?(kp(k,81854)|0)==0:0){Fo(A);z=e+48|0;c[c[z>>2]>>2]=0;n=A+32e3|0;o=e+20|0;m=0;while(1){k=m<<16>>16;if(m<<16>>16>=(b[e>>1]|0))break;l=Zk(A,f)|0;c[B>>2]=l;if(!l){C=7;break}Fo(A);if(a[n>>0]|0)ld(j,81939)|0;if(!g)if(c[o>>2]|0){a:do if((((((_k(u,73,B)|0)>=0?(_k(y,83,B)|0)>=0:0)?(_k(r,68,B)|0)>=0:0)?(_k(s,68,B)|0)>=0:0)?(_k(t,68,B)|0)>=0:0)?(_k(p,73,B)|0)>=0:0){if(!(kp(y,82004)|0)){g=c[z>>2]|0;c[(c[g+8>>2]|0)+(k<<2)>>2]=c[u>>2];c[(c[g+12>>2]|0)+(k<<2)>>2]=-1;k=g+4|0;c[k>>2]=(c[k>>2]|0)+1;k=5;g=0;break}l=c[z>>2]|0;c[l>>2]=(c[l>>2]|0)+1;c[(c[l+8>>2]|0)+(k<<2)>>2]=c[u>>2];c[(c[l+12>>2]|0)+(k<<2)>>2]=c[l>>2];l=(c[l>>2]|0)+-1|0;Do((c[o>>2]|0)+(l*40|0)+24|0,y,6)|0;g=c[o>>2]|0;do if((cp(g+(l*40|0)+24|0)|0)==2){if(!(sp(d[g+(l*40|0)+25>>0]|0)|0))break;k=(rp(d[(c[o>>2]|0)+(l*40|0)+25>>0]|0)|0)&255;a[(c[o>>2]|0)+(l*40|0)+25>>0]=k}while(0);k=c[o>>2]|0;h[k+(l*40|0)>>3]=+h[r>>3];h[k+(l*40|0)+8>>3]=+h[s>>3];h[k+(l*40|0)+16>>3]=+h[t>>3];if(!(c[B>>2]|0)){k=0;g=0}else{g=0;while(1){if(($k(q,B)|0)<=0){k=0;break a}b:do if(!(kp(q,82006)|0))if((_k((c[o>>2]|0)+(l*40|0)+31|0,67,B)|0)<0)C=63;else k=1;else{if(!(kp(q,82010)|0))if((_k((c[o>>2]|0)+(l*40|0)+32|0,67,B)|0)<0){C=63;break}else{k=1;break}if(!(kp(q,82014)|0))if((_k((c[o>>2]|0)+(l*40|0)+33|0,67,B)|0)<0){C=63;break}else{k=1;break}if(!(kp(q,82018)|0))if((_k(v,78,B)|0)<0){ld(j,82109)|0;ld(j,A)|0;C=63;break}else{k=lo((c[o>>2]|0)+(l*40|0)+24|0)|0;E=b[v>>1]|0;a[(c[o>>2]|0)+(l*40|0)+30>>0]=(E|0)!=(k|0)?E-k&255:127;k=1;break}if(!(kp(q,82023)|0)){if((_k(w,73,B)|0)<0){C=63;break}k=c[w>>2]|0;a[(c[o>>2]|0)+(l*40|0)+34>>0]=(k|0)==-1?15:k&255;k=1;break}if(!(kp(q,82027)|0)){_k(w,73,B)|0;k=1;break}if(!(kp(q,82034)|0)){_k(w,73,B)|0;k=1;break}do if(kp(q,82040)|0){if(!(kp(q,82047)|0))break;do if(kp(q,82054)|0){if(!(kp(q,82060)|0))break;if(!(kp(q,82066)|0))break;if(!(kp(q,82072)|0)){_k(w,73,B)|0;k=1;break b}if(!(kp(q,82080)|0)){_k(x,83,B)|0;k=1;break b}if(!(kp(q,82088)|0)){_k(x,83,B)|0;k=1;break b}if(!(kp(q,82097)|0)){_k(x,83,B)|0;k=1;break b}if(kp(q,82103)|0){k=1;break b}_k(w,73,B)|0;k=1;break b}while(0);_k(w,73,B)|0;k=1;break b}while(0);_k(w,73,B)|0;k=1}while(0);if((C|0)==63){C=0;ld(j,82139)|0;Bo(A)|0;ld(j,A)|0;g=(kp(A,83080)|0)==0;k=g^1;g=g?-4:4}if(!(k&(c[B>>2]|0)!=0)){k=0;break}}}}else C=21;while(0);if((C|0)==21){C=0;ld(j,81964)|0;Bo(A)|0;ld(j,A)|0;g=(kp(A,83080)|0)==0;k=g?3:5;g=g?-4:4}if((k|0)==3)break}else g=0;else if(!(kp(A,83080)|0)){C=13;break}m=m+1<<16>>16}if((C|0)==7){if(!g){ld(j,81905)|0;g=2}}else if((C|0)==13)g=0-((g|0)>-1?g:0-g|0)|0;if(c[(c[z>>2]|0)+4>>2]|0){ld(j,82188)|0;b[e>>1]=c[c[z>>2]>>2]}k=Zk(A,f)|0;c[B>>2]=k;if(k|0?(kp(k,82213)|0)==0:0){Fo(A);break}ld(j,82222)|0;g=(g|0)==0?1:g}else C=3;while(0);if((C|0)==3){ld(j,81865)|0;g=(g|0)==0?1:g}i=D;return g|0}function gl(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=i;i=i+40240|0;G=I+12|0;F=I+8224|0;x=I+4128|0;y=I+8|0;u=I+18|0;v=I+16|0;w=I+4121|0;B=I+4120|0;z=I+4|0;C=I+24|0;A=I;h=Zk(F,e)|0;c[G>>2]=h;do if((h|0)!=0?(kp(h,82260)|0)==0:0){Fo(F);D=d+48|0;E=c[D>>2]|0;c[E+32>>2]=0;c[E+28>>2]=0;E=d+2|0;t=F+32e3|0;s=d+24|0;r=0;while(1){if(r<<16>>16>=(b[E>>1]|0))break;q=Zk(F,e)|0;c[G>>2]=q;if(!q){H=7;break}Fo(F);f=(f|0)!=0|(a[t>>0]|0)==0?f:3;if(!f)if(c[s>>2]|0){b[u>>1]=-1;b[v>>1]=-1;a[w>>0]=0;a[B>>0]=0;q=c[D>>2]|0;q=(c[q+4>>2]|0)+(c[q>>2]|0)|0;if(((_k(y,73,G)|0)>=0?(_k(w,67,G)|0)>=0:0)?(_k(u,78,G)|0)>=0:0)l=(_k(v,78,G)|0)>>>31;else l=1;h=b[u>>1]|0;k=c[D>>2]|0;j=c[k+8>>2]|0;k=c[k+12>>2]|0;f=0;while(1){if((f|0)>=(q|0)){f=-1;break}if((c[j+(f<<2)>>2]|0)==(h|0)){H=20;break}f=f+1|0}if((H|0)==20){H=0;f=c[k+(f<<2)>>2]|0}d=f&65535;b[u>>1]=d;h=b[v>>1]|0;f=0;while(1){if((f|0)>=(q|0)){f=-1;break}if((c[j+(f<<2)>>2]|0)==(h|0)){H=25;break}f=f+1|0}if((H|0)==25){H=0;f=c[k+(f<<2)>>2]|0}b[v>>1]=f;if(!((l|0)==0&((f&32768|0)==0|d<<16>>16>-1))){ld(g,82345)|0;Bo(F)|0;ld(g,F)|0;if(!(kp(F,83080)|0)){h=1;f=-4}else{f=4;H=29}}else{f=0;H=29}do if((H|0)==29){H=0;if(c[G>>2]|0){d=0;do{if(($k(x,G)|0)<=0)break;a:do if(!(kp(x,82014)|0))if((_k(B,67,G)|0)<0)H=61;else switch(a[B>>0]|0){case 2:{a[B>>0]=4;h=1;break a}case 3:{a[B>>0]=6;h=1;break a}default:{h=1;break a}}else{if(!(kp(x,82385)|0)){_k(z,73,G)|0;h=1;break}if(!(kp(x,82390)|0)){_k(z,73,G)|0;h=1;break}if(!(kp(x,82034)|0)){_k(z,73,G)|0;h=1;break}if(kp(x,82396)|0){if(!(kp(x,82414)|0)){_k(C,83,G)|0;h=1;break}if(kp(x,82419)|0){h=1;break}_k(C,83,G)|0;h=1;break}c[A>>2]=0;p=(hl(0,G,A,0)|0)<0;o=c[A>>2]|0;do if(!(p|(o|0)==0)){h=b[u>>1]|0;h=h<<16>>16<0?b[v>>1]|0:h;if(h<<16>>16<0)break;p=c[o+8>>2]|0;c[o+4>>2]=h<<16>>16;n=3;while(1){if((n|0)>=(p|0))break;m=o+(n<<2)|0;j=c[m>>2]|0;l=c[D>>2]|0;k=c[l+8>>2]|0;l=c[l+12>>2]|0;h=0;while(1){if((h|0)>=(q|0)){h=-1;break}if((c[k+(h<<2)>>2]|0)==(j|0)){H=51;break}h=h+1|0}if((H|0)==51){H=0;h=c[l+(h<<2)>>2]|0}c[m>>2]=h;n=n+1|0}if((Bl(c[(c[D>>2]|0)+36>>2]|0,o)|0)<0)break;h=1;d=1;break a}while(0);H=61}while(0);if((H|0)==61){H=0;if(!f){ld(g,82345)|0;Bo(F)|0;ld(g,F)|0;f=4}if(!(kp(F,83080)|0)){h=0;f=0-((f|0)>-1?f:0-f|0)|0}else h=1}}while(h&(c[G>>2]|0)!=0);h=c[D>>2]|0;if(d){q=h+32|0;c[c[(c[c[h+36>>2]>>2]|0)+(c[q>>2]<<2)>>2]>>2]=a[w>>0];c[q>>2]=(c[q>>2]|0)+1;h=0;break}}else h=c[D>>2]|0;h=h+28|0;q=c[h>>2]|0;p=c[s>>2]|0;b[p+(q*6|0)>>1]=b[u>>1]|0;b[p+(q*6|0)+2>>1]=b[v>>1]|0;a[p+(q*6|0)+4>>0]=a[w>>0]|0;a[p+(q*6|0)+5>>0]=a[B>>0]|0;c[h>>2]=q+1;h=0}while(0);if(h)break}else f=0;else if(!(kp(F,83080)|0)){H=11;break}r=r+1<<16>>16}if((H|0)==7){if(!f){ld(g,82311)|0;f=2}}else if((H|0)==11)f=0-((f|0)>-1?f:0-f|0)|0;if(c[(c[D>>2]|0)+32>>2]|0){ld(g,82426)|0;b[E>>1]=c[(c[D>>2]|0)+28>>2]}h=Zk(F,e)|0;c[G>>2]=h;if(h|0?(kp(h,82464)|0)==0:0){Fo(F);break}ld(g,82473)|0;f=(f|0)==0?1:f}else H=3;while(0);if((H|0)==3){ld(g,82271)|0;f=(f|0)==0?1:f}i=I;return f|0}function hl(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+4112|0;h=k+8|0;a=k;c[d>>2]=0;er(h|0,0,4096)|0;Co(b,h,4096,81722)|0;a:do if((kp(h,81769)|0)==0?(Co(b,h,4096,81408)|0,g=Rp(h,a,10)|0,!((g|0)<0?1:(c[a>>2]|0)==(h|0))):0){f=g+3|0;e=Dq(f,4)|0;c[d>>2]=e;if(!e)a=-1;else{c[e>>2]=-1;c[e+4>>2]=-1;c[e+8>>2]=g;a=3;while(1){if((a|0)>=(f|0)){j=7;break}if((_k((c[d>>2]|0)+(a<<2)|0,73,b)|0)<0){a=-1;break}else a=a+1|0}do if((j|0)==7){a=Co(b,h,4096,81408)|0;if((a|0)>0)if(!(kp(h,82403)|0))break a;else{a=-1;break}else if((a|0)<0)break;else{a=0;break a}}while(0);e=c[d>>2]|0}if(e){Cq(e);c[d>>2]=0}}else a=-1;while(0);i=k;return a|0}function il(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32016|0;g=k;e=Zk(g,b)|0;Fo(g);a:do if(e){do if(!(kp(e,82511)|0))if(!(bl(0,b,c,d)|0)){e=Zk(g,b)|0;Fo(g);if(!e){e=0;f=0;j=10;break a}else{f=0;break}}else{ld(d,d)|0;break a}else f=c;while(0);if(!(kp(e,82524)|0))if(!(cl(0,b,f,d)|0)){e=Zk(g,b)|0;Fo(g);f=0;j=10;break}else{ld(d,d)|0;break}else j=10}else{e=0;f=c;j=10}while(0);do if((j|0)==10){while(1){if(!e){e=0;break}if(kp(e,82536)|0)break;e=Zk(g,b)|0;Fo(g)}while(1){if(!e)break;if(kp(e,82545)|0){h=e;j=19;break}if(dl(a,b,f,d)|0){j=17;break}e=Zk(g,b)|0;Fo(g);f=0}if((j|0)==17){ld(d,d)|0;break}if((j|0)==19?(kp(h,82562)|0)==0:0){Fo(g);break}ld(d,82571)|0;c=(c|0)==0?1:c}while(0);i=k;return c|0}function jl(d,f,g,h,j,k,l,m,n,o,p,q){d=d|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;var r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0;T=i;i=i+32|0;I=T+20|0;J=T+16|0;P=T+12|0;M=T+8|0;K=T+4|0;L=T;c[P>>2]=0;c[M>>2]=0;c[K>>2]=0;c[L>>2]=0;R=(q|0)!=0;if(R)a[q>>0]=0;F=c[o>>2]&16|0?32766:1024;S=(f|0)!=0;G=f+64|0;H=S?P:0;E=S&(h|0)!=0?M:0;O=f+12|0;C=(g|0)!=0;y=f+8|0;z=f+4|0;A=f+68|0;B=f+72|0;D=(f|0)!=0;h=0;a:do{if(S){w=c[f>>2]|0;x=c[G>>2]|0}else{w=0;x=0}g=kl(d,j,H,E,K,L,F,I,J,k,l,m,n,o,p,q)|0;b:do if((g|0)<1){r=c[p>>2]|0;if(!r){ld(q,84786)|0;c[p>>2]=98;break}if((g|0)==0&D&(r+-11|0)>>>0<9?C&(c[O>>2]|0)>0:0){N=11;break a}else{g=0;N=35}}else if(S){r=c[O>>2]|0;h=r+g|0;if((h|0)>=(F|0)){ld(q,82888)|0;c[p>>2]=70;c[O>>2]=-1;break}if(!w){c[f>>2]=c[P>>2];c[G>>2]=c[M>>2];c[P>>2]=0;c[M>>2]=0;c[O>>2]=g;c[y>>2]=c[J>>2];c[z>>2]=c[I>>2];c[A>>2]=c[K>>2];c[B>>2]=c[L>>2];c[K>>2]=0;c[L>>2]=0;break}s=Dq(h,176)|0;c[f>>2]=s;do if(s|0){if(c[M>>2]|0?(v=Dq(h,32)|0,c[G>>2]=v,(v|0)==0):0)break;if(r|0){ir(s|0,w|0,r*176|0)|0;v=c[P>>2]|0;u=0;while(1){if((u|0)>=(g|0))break;s=v+(u*176|0)+92|0;r=c[O>>2]|0;t=0;while(1){if((t|0)>=(a[s>>0]|0))break;U=v+(u*176|0)+8+(t<<1)|0;b[U>>1]=(e[U>>1]|0)+r;t=t+1|0}U=v+(u*176|0)+48|0;b[U>>1]=(e[U>>1]|0)+r;u=u+1|0}s=c[G>>2]|0;if((x|0)!=0&(s|0)!=0)ir(s|0,x|0,r<<5|0)|0}Cq(w);if(x|0)Cq(x);ir((c[f>>2]|0)+((c[O>>2]|0)*176|0)|0,c[P>>2]|0,g*176|0)|0;r=c[G>>2]|0;s=c[M>>2]|0;if((r|0)!=0&(s|0)!=0)ir(r+(c[O>>2]<<5)|0,s|0,g<<5|0)|0;c[O>>2]=(c[O>>2]|0)+g;c[y>>2]=(c[y>>2]|0)+(c[J>>2]|0);x=c[I>>2]|0;U=c[z>>2]|0;c[z>>2]=(x|0)>(U|0)?x:U;c[A>>2]=c[K>>2];c[B>>2]=c[L>>2];break b}while(0);ld(q,85269)|0;c[p>>2]=-1}else N=35;while(0);if((N|0)==35){N=0;h=g+h|0}g=c[P>>2]|0;if(g|0){Cq(g);c[P>>2]=0}g=c[K>>2]|0;if(g|0){Cq(g);c[K>>2]=0}g=c[L>>2]|0;if(g|0){Cq(g);c[L>>2]=0}}while(C&(c[p>>2]|0)==0);if((N|0)==11)c[p>>2]=0;g=c[M>>2]|0;if(g|0)Cq(g);g=c[P>>2]|0;if(g|0)Cq(g);do if(c[p>>2]|0?(ql(f),Q=c[p>>2]|0,Q|0):0){if((Q|0)>10){if(!(R&(Q|0)>19))break}else if(!R)break;if(!(a[q>>0]|0))ld(q,84887)|0}while(0);if(S)h=c[O>>2]|0;i=T;return h|0}function kl(d,e,f,g,h,j,k,l,m,n,o,p,q,r,s,t){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;t=t|0;var u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=i;i=i+592|0;D=G+528|0;E=G+584|0;w=G;u=G+532|0;c[E>>2]=0;x=c[r>>2]&32;B=(f|0)!=0;if(B){u=c[f>>2]|0;if((k|0)!=0&(u|0)!=0)er(u|0,0,k*176|0)|0;if((g|0)!=0?(v=c[g>>2]|0,(v|0)!=0):0){Cq(v);c[g>>2]=0;u=0;w=0}else{u=0;w=0}}y=(o|0)!=0;if(y){z=a[o>>0]|0;a[o>>0]=0}else z=0;A=(g|0)!=0;x=Ok(d,w,u,A&1,x,0,0,p,n,o,s,t)|0;v=(x|0)==0;p=(w|0)!=0;v=p|v?(p&v?w:0):x;w=(v|0)!=0;if((q|0)!=0&w)c[q>>2]=Sk(v)|0;if((y?(n|0)!=0&(a[o>>0]|0)==0:0)?w&(a[n>>0]|0)!=0:0){do if(Jo(n,82603)|0){if(!(Jo(n,82615)|0)){Do(o,v+201|0,256)|0;Go(o,0)|0;break}if(!(Jo(n,82628)|0)){Do(o,v+444|0,256)|0;Go(o,0)|0;break}if((Jo(n,82643)|0)==0?(C=c[v+440>>2]|0,C|0):0){c[D>>2]=C;qq(o,82659,D)|0}}else{Do(o,v,256)|0;Go(o,0)|0}while(0);if(!(a[o>>0]|0))a[o>>0]=z}do if(B&(x|0)!=0?(c[s>>2]|0)==0:0){do if((b[x+528>>1]|0)<=(k|0)){u=ll(x,E,m,c[f>>2]|0,e,s,t)|0;c[f>>2]=u;v=c[s>>2]|0;if((v|0)<=-1){if((v|0)!=-2)break;c[s>>2]=90;u=90;F=35;break}c[l>>2]=nl(x,c[E>>2]|0,u,s,t)|0;if(A){l=x+556|0;c[g>>2]=c[l>>2];c[l>>2]=0}j=(ol(x,h,j,t)|0)==0;u=j?0:80;c[s>>2]=u;if(!j)F=35}else{ld(t,82888)|0;c[s>>2]=70;c[E>>2]=-1;u=70;F=35}while(0);if((F|0)==35)c[s>>2]=u+100;u=c[E>>2]|0;if((u|0)>0?(r|0)!=0&(c[f>>2]|0)!=0:0){v=c[r>>2]|0;if(!(a[x+532>>0]|0)){c[r>>2]=v|2;break}else{c[r>>2]=v|1;break}}}else F=41;while(0);if((F|0)==41)if(B)u=0;else{u=b[u>>1]|0;c[E>>2]=u}if(!p)Wk(x)|0;i=G;return u|0}function ll(d,e,f,g,h,j,k){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;J=i;i=i+80|0;H=J+8|0;G=J;F=J+16|0;if(!(c[22874]|0))c[22874]=$n(86650)|0;c[j>>2]=0;c[e>>2]=b[d+528>>1];c[f>>2]=0;do if(!(Tk(d)|0)){if(!g){g=Dq(c[e>>2]|0,176)|0;if(!g){c[j>>2]=-1;ld(k,85269)|0;g=0;break}}r=d+548|0;s=c[2474]|0;m=0;a:while(1){if((m|0)>=(c[e>>2]|0)){I=9;break}l=g+(m*176|0)|0;Do(l,(c[r>>2]|0)+(m*40|0)+24|0,6)|0;t=m+1|0;b[g+(m*176|0)+48>>1]=t;o=c[r>>2]|0;n=a[o+(m*40|0)+30>>0]|0;u=g+(m*176|0)+98|0;a[u>>0]=n;a[g+(m*176|0)+99>>0]=a[o+(m*40|0)+31>>0]|0;o=a[o+(m*40|0)+32>>0]|0;p=g+(m*176|0)+100|0;a[p>>0]=o;if(n<<24>>24==127)n=1;else n=(n<<24>>24>0&1)+(n<<24>>24)|0;a[u>>0]=n;if(o<<24>>24==1)a[p>>0]=3;n=$n(l)|0;if((s|0)==(n|0)){n=g+(m*176|0)+95|0;o=jo(l,n)|0;p=o&255;q=g+(m*176|0)+94|0;a[q>>0]=p;b:do if((a[l>>0]|0)==0?(v=(a[n>>0]|0)+(a[g+(m*176|0)+96>>0]|0)|0,w=a[g+(m*176|0)+97>>0]|0,(o<<24>>24|0)!=(0-(v+w)|0)):0){a[l>>0]=72;a[l+1>>0]=0;if((v|0)==(0-w|0)){a[q>>0]=p+-1<<24>>24;break}else o=2;while(1){if((o|0)<=-1)break b;n=g+(m*176|0)+95+o|0;p=a[n>>0]|0;if(p<<24>>24)break;o=o+-1|0}a[n>>0]=p+-1<<24>>24;a[u>>0]=o+1}while(0);n=$n(l)|0;if((s|0)==(n|0)){I=24;break}}a[g+(m*176|0)+6>>0]=n;if(!n)break;if((c[22874]|0)!=(n|0)){m=t;continue}if(a[u>>0]|0){m=t;continue}switch(a[l>>0]|0){case 68:{a[u>>0]=2;Do(l,86650,6)|0;m=t;continue a}case 84:{a[u>>0]=3;Do(l,86650,6)|0;m=t;continue a}default:{m=t;continue a}}}if((I|0)==9){B=d+530|0;C=d+552|0;l=0;m=0;D=0;while(1){if((D|0)>=(b[B>>1]|0))break;n=c[C>>2]|0;y=a[n+(D*6|0)+5>>0]|0;x=a[n+(D*6|0)+4>>0]|0;w=b[n+(D*6|0)>>1]|0;p=w<<16>>16;z=p+-1|0;n=b[n+(D*6|0)+2>>1]|0;o=n<<16>>16;A=o+-1|0;c:do if(w<<16>>16>=1?(w=c[e>>2]|0,!((z|0)==(A|0)|((o|0)>(w|0)|(n<<16>>16<1|(p|0)>(w|0))))):0){n=g+(z*176|0)+8|0;v=A&65535;t=g+(z*176|0)+92|0;o=mo(n,v,a[t>>0]|0)|0;q=g+(A*176|0)+8|0;w=z&65535;u=g+(A*176|0)+92|0;r=mo(q,w,a[u>>0]|0)|0;p=(o|0)!=0;s=(r|0)!=0;do if(!(p|s)){n=a[t>>0]|0;o=n<<24>>24;if(n<<24>>24<20?(a[u>>0]|0)<20:0){a[t>>0]=n+1<<24>>24;t=a[u>>0]|0;a[u>>0]=t+1<<24>>24;l=l+1|0;p=o;o=t<<24>>24}else I=54}else{if(!p?(E=a[t>>0]|0,E<<24>>24>=20):0){n=E;I=54;break}if(!s?(a[u>>0]|0)>=20:0){n=a[t>>0]|0;I=54;break}if(p)p=o-n>>1;else{p=a[t>>0]|0;a[t>>0]=p+1<<24>>24;p=p<<24>>24}if(s)n=r-q>>1;else{n=a[u>>0]|0;a[u>>0]=n+1<<24>>24;n=n<<24>>24}ld(k,82683)|0;c[j>>2]=c[j>>2]|2;o=n}while(0);if((I|0)==54){I=0;c[j>>2]=c[j>>2]|4;c[G>>2]=g+((n<<24>>24>19?z:A)*176|0);c[G+4>>2]=20;qq(F,82716,G)|0;ld(k,F)|0;break}if((x+-1&255)>3){c[H>>2]=x<<24>>24;qq(F,85326,H)|0;ld(k,82749)|0;ld(k,F)|0;c[j>>2]=c[j>>2]|8;n=1}else n=x;a[g+(A*176|0)+72+o>>0]=n;a[g+(z*176|0)+72+p>>0]=n;b[g+(z*176|0)+8+(p<<1)>>1]=v;b[g+(A*176|0)+8+(o<<1)>>1]=w;switch(y<<24>>24){case 0:break c;case 3:{a[g+(A*176|0)+52+o>>0]=3;a[g+(z*176|0)+52+p>>0]=3;break c}case 6:case 4:case 1:{switch(y<<24>>24|0){case 1:{m=1;break}case 4:{m=4;break}case 6:{m=6;break}default:{}}a[g+(z*176|0)+52+p>>0]=m;a[g+(A*176|0)+52+o>>0]=0-(m&255);break c}default:{c[j>>2]=c[j>>2]|16;ld(k,82773)|0;break c}}}else I=37;while(0);if((I|0)==37){I=0;c[j>>2]=c[j>>2]|1;ld(k,83822)|0}D=D+1|0}c[f>>2]=l;ml(d,g,e,h,j,k);break}else if((I|0)==24)a[g+(m*176|0)+6>>0]=0;c[j>>2]=-2;ld(k,82663)|0;if(!(c[j>>2]|0))c[j>>2]=-2;ld(k,l)|0}else g=0;while(0);i=J;return g|0}function ml(b,f,g,h,j,k){b=b|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;C=i;i=i+16|0;A=C;y=(b|0)!=0;u=b+548|0;v=A+12|0;x=0;a:while(1){if((x|0)<2)w=0;else break;while(1){if((w|0)>=(c[g>>2]|0))break;r=f+(w*176|0)+6|0;if((x|0)!=(ho(d[r>>0]|0)|0)){c[A>>2]=0;c[A+4>>2]=0;c[A+8>>2]=0;c[A+12>>2]=0;if(y?(z=c[u>>2]|0,(z|0)!=0):0){t=f+(w*176|0)+93|0;b=z+(w*40|0)+34|0}else{b=f+(w*176|0)+93|0;t=b}p=a[b>>0]|0;a[t>>0]=0;s=f+(w*176|0)+92|0;m=0;while(1){b=a[s>>0]|0;l=b<<24>>24;if((m|0)>=(l|0))break;q=a[f+(w*176|0)+72+m>>0]|0;b=(q&255)+-1|0;if(q<<24>>24==0|(b|0)>3){ld(k,82798)|0;b=0}q=A+(b<<2)|0;c[q>>2]=(c[q>>2]|0)+1;m=m+1|0}n=0;while(1){m=n+1|0;if((n|0)==3)break;q=_(c[A+(n<<2)>>2]|0,m)|0;a[t>>0]=(d[t>>0]|0)+q;n=m}o=p<<24>>24;q=c[v>>2]|0;switch(q|0){case 0:break;case 2:{b=(d[t>>0]|0)+3|0;B=27;break}case 3:{b=(d[t>>0]|0)+4|0;B=27;break}default:{p=w&65535;o=0;while(1){if((o|0)>=(b<<24>>24|0))break;n=f+(w*176|0)+72+o|0;if((a[n>>0]|0)==4){b=e[f+(w*176|0)+8+(o<<1)>>1]|0;l=f+(b*176|0)+8|0;m=mo(l,p,a[f+(b*176|0)+92>>0]|0)|0;if(!m){B=35;break a}a[(m-l>>1)+(f+(b*176|0)+72)>>0]=1;a[n>>0]=1;b=a[s>>0]|0}o=o+1|0}a[t>>0]=(d[t>>0]|0)+q;c[j>>2]=c[j>>2]|32;ld(k,84028)|0}}do if((B|0)==27){B=0;n=b&255;a[t>>0]=n;m=(a[f+(w*176|0)+95>>0]|0)+(a[f+(w*176|0)+94>>0]|0)+(a[f+(w*176|0)+96>>0]|0)+(a[f+(w*176|0)+97>>0]|0)|0;b=b<<24>>24;if(p<<24>>24){if((o|0)!=(b+-1+m|0))break;a[t>>0]=n+-1<<24>>24;break}p=f+(w*176|0)+99|0;q=f+(w*176|0)+100|0;o=fo(d[r>>0]|0,a[p>>0]|0,a[q>>0]|0,b,m,l)|0;if(!((o|0)==0|(fo(d[r>>0]|0,a[p>>0]|0,a[q>>0]|0,b+-1|0,m,a[s>>0]|0)|0)!=0)?(po(f,w)|0)==0:0)a[t>>0]=(a[t>>0]|0)+-1<<24>>24}while(0);if(y){s=f+(w*176|0)+94|0;r=c[u>>2]|0;a[s>>0]=eo(f+(w*176|0)|0,a[s>>0]|0,f+(w*176|0)+95|0,a[f+(w*176|0)+99>>0]|0,a[f+(w*176|0)+100>>0]|0,a[t>>0]|0,a[r+(w*40|0)+34>>0]|0,a[r+(w*40|0)+37>>0]|0,h,0)|0}}w=w+1|0}x=x+1|0}if((B|0)==35){c[j>>2]=-2;ld(k,82853)|0}i=C;return}function nl(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,j=0,k=0.0,l=0.0;j=i;i=i+64|0;g=Vk(a,0,j+48|0,j+40|0,j+32|0,j+24|0,j+16|0,j+8|0,j,e,f)|0;a:do if(g|0){e=a+548|0;f=0;while(1){if((f|0)>=(b|0))break a;a=c[e>>2]|0;k=+h[a+(f*40|0)+16>>3];l=+h[a+(f*40|0)+8>>3];h[d+(f*176|0)+112>>3]=+h[a+(f*40|0)>>3];h[d+(f*176|0)+120>>3]=l;h[d+(f*176|0)+128>>3]=k;f=f+1|0}}while(0);i=j;return g|0}function ol(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;v=a+528|0;u=c[a+568>>2]|0;a:do if((u|0)>0){g=Dq(1,32)|0;c[d>>2]=g;if(!g){ld(f,85269)|0;g=9001;i=0;t=82;break}c[g>>2]=Dq(u,4)|0;g=c[c[d>>2]>>2]|0;if(!g){ld(f,85269)|0;g=9001;i=0;t=82;break}c[g>>2]=0;p=c[d>>2]|0;c[p+4>>2]=u;c[p+16>>2]=-1;c[p+20>>2]=0;c[p+28>>2]=0;c[p+12>>2]=0;p=a+560|0;q=a+530|0;r=a+552|0;s=a+548|0;t=0;b:while(1){if((t|0)>=(u|0)){t=31;break a}n=c[(c[p>>2]|0)+(t<<2)>>2]|0;o=Dq(1,232)|0;c[(c[c[d>>2]>>2]|0)+(t<<2)>>2]=o;if(!o){t=9;break}c[o>>2]=c[n>>2];c[o+4>>2]=c[n+4>>2];c[o+8>>2]=c[n+8>>2];c[o+12>>2]=c[n+12>>2];c[o+16>>2]=c[n+16>>2];g=o+48|0;i=o+80|0;j=0;while(1){if((j|0)==4)break;h[g+(j<<3)>>3]=+h[n+24+(j<<3)>>3];h[i+(j<<3)>>3]=+h[n+56+(j<<3)>>3];j=j+1|0}vp(o+112|0,n+88|0)|0;g=c[n+176>>2]|0;j=o+20|0;c[j>>2]=g;k=Dq(g,4)|0;c[o+212>>2]=k;if(!k){t=15;break}l=n+168|0;i=0;while(1){if((i|0)>=(g|0))break;c[k+(i<<2)>>2]=c[(c[l>>2]|0)+(i<<2)>>2];g=c[j>>2]|0;i=i+1|0}m=n+192|0;g=c[m>>2]|0;c[o+24>>2]=g;c:do if((g|0)>0){l=Dq(g<<1,4)|0;c[o+216>>2]=l;if(!l){t=21;break b}j=n+184|0;k=0;while(1){if((k|0)>=(c[m>>2]|0))break c;g=c[(c[j>>2]|0)+(k<<2)>>2]|0;if((g|0)<1){t=25;break b}if((g|0)>(b[q>>1]|0)){t=25;break b}g=g+-1|0;i=c[r>>2]|0;o=b[i+(g*6|0)>>1]|0;g=b[i+(g*6|0)+2>>1]|0;i=k<<1;c[l+(i<<2)>>2]=o;c[l+((i|1)<<2)>>2]=g;i=c[s>>2]|0;if(!(kp(i+((o+-1|0)*40|0)+24|0,86650)|0)){t=28;break b}if(!(kp(i+((g+-1|0)*40|0)+24|0,86650)|0)){t=28;break b}else k=k+1|0}}else c[o+216>>2]=0;while(0);t=t+1|0}if((t|0)==9){ld(f,85269)|0;g=9001;i=0;t=82;break}else if((t|0)==15){ld(f,85269)|0;g=9001;i=0;t=82;break}else if((t|0)==21){ld(f,85269)|0;g=9001;i=0;t=82;break}else if((t|0)==25){ld(f,82945)|0;g=9004;i=0;t=82;break}else if((t|0)==28){ld(f,82992)|0;g=9002;i=0;t=82;break}}else t=31;while(0);d:do if((t|0)==31){r=c[a+576>>2]|0;if(r){i=Dq(1,64)|0;c[e>>2]=i;if(!i){ld(f,85269)|0;g=9001;t=82;break}c[i+24>>2]=c[r+24>>2];o=r+32|0;c[i+32>>2]=c[o>>2];c[i+28>>2]=c[r+28>>2];c[i+16>>2]=c[r+16>>2];c[i>>2]=c[r>>2];c[i+4>>2]=c[r+4>>2];p=r+40|0;c[i+40>>2]=c[p>>2];q=r+56|0;c[i+56>>2]=c[q>>2];s=r+48|0;c[i+48>>2]=c[s>>2];c[i+20>>2]=c[r+20>>2];g=r+8|0;do if(c[g>>2]|0){j=b[v>>1]|0;k=Dq(j,4)|0;c[i+8>>2]=k;if(!k){ld(f,85269)|0;g=9001;t=82;break d}else{ir(k|0,c[g>>2]|0,j|0)|0;break}}while(0);k=r+12|0;do if(c[k>>2]|0){g=b[v>>1]|0;j=Dq(g,4)|0;c[i+12>>2]=j;if(!j){ld(f,85269)|0;g=9001;t=82;break d}else{ir(j|0,c[k>>2]|0,g|0)|0;break}}while(0);g=c[o>>2]|0;e:do if(g|0?(w=r+36|0,c[w>>2]|0):0){v=Dq(g,4)|0;g=i+36|0;c[g>>2]=v;if(!v){ld(f,85269)|0;g=9001;t=82;break d}else n=0;while(1){if((n|0)>=(c[o>>2]|0))break e;j=c[(c[c[w>>2]>>2]|0)+(n<<2)>>2]|0;k=(c[j+8>>2]|0)+3|0;l=Dq(k,4)|0;c[(c[g>>2]|0)+(n<<2)>>2]=l;if(!l)break;else m=0;while(1){if((m|0)>=(k|0))break;c[l+(m<<2)>>2]=c[j+(m<<2)>>2];m=m+1|0}n=n+1|0}ld(f,85269)|0;g=9001;t=82;break d}while(0);g=c[p>>2]|0;f:do if(g|0?(x=r+44|0,c[x>>2]|0):0){w=Dq(g,4)|0;g=i+44|0;c[g>>2]=w;if(!w){ld(f,85269)|0;g=9001;t=82;break d}else n=0;while(1){if((n|0)>=(c[p>>2]|0))break f;j=c[(c[c[x>>2]>>2]|0)+(n<<2)>>2]|0;k=(c[j+4>>2]|0)+2|0;l=Dq(k,4)|0;c[(c[g>>2]|0)+(n<<2)>>2]=l;if(!l)break;else m=0;while(1){if((m|0)>=(k|0))break;c[l+(m<<2)>>2]=c[j+(m<<2)>>2];m=m+1|0}n=n+1|0}ld(f,85269)|0;g=9001;t=82;break d}while(0);g=c[q>>2]|0;g:do if(g|0?(y=r+60|0,c[y>>2]|0):0){x=Dq(g,4)|0;g=i+60|0;c[g>>2]=x;if(!x){ld(f,85269)|0;g=9001;t=82;break d}else n=0;while(1){if((n|0)>=(c[q>>2]|0))break g;j=c[(c[c[y>>2]>>2]|0)+(n<<2)>>2]|0;k=(c[j+4>>2]|0)+2|0;l=Dq(k,4)|0;c[(c[g>>2]|0)+(n<<2)>>2]=l;if(!l)break;else m=0;while(1){if((m|0)>=(k|0))break;c[l+(m<<2)>>2]=c[j+(m<<2)>>2];m=m+1|0}n=n+1|0}ld(f,85269)|0;g=9001;t=82;break d}while(0);g=c[s>>2]|0;if((g|0)!=0?(z=r+52|0,(c[z>>2]|0)!=0):0){y=Dq(g,4)|0;g=i+52|0;c[g>>2]=y;if(!y){ld(f,85269)|0;g=9001;t=82;break}else n=0;while(1){if((n|0)>=(c[s>>2]|0)){g=0;break d}j=c[(c[c[z>>2]>>2]|0)+(n<<2)>>2]|0;k=(c[j+4>>2]|0)+2|0;l=Dq(k,4)|0;c[(c[g>>2]|0)+(n<<2)>>2]=l;if(!l)break;else m=0;while(1){if((m|0)>=(k|0))break;c[l+(m<<2)>>2]=c[j+(m<<2)>>2];m=m+1|0}n=n+1|0}ld(f,85269)|0;g=9001;t=82}else g=0}else g=0}while(0);if((t|0)==82){pl(c[d>>2]|0,i);c[d>>2]=0}return g|0}function pl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;Im(a);if(b|0){a=b+8|0;h=c[a>>2]|0;if(h|0){Cq(h);c[a>>2]=0}a=b+12|0;h=c[a>>2]|0;if(h|0){Cq(h);c[a>>2]=0}j=b+32|0;a=c[j>>2]|0;if(a|0?(k=b+36|0,g=c[k>>2]|0,g|0):0){i=0;while(1){if((i|0)>=(a|0))break;h=c[g+(i<<2)>>2]|0;if(h){Cq(h);c[(c[k>>2]|0)+(i<<2)>>2]=0;g=c[k>>2]|0;a=c[j>>2]|0}i=i+1|0}if(g|0)Cq(g);c[k>>2]=0}i=b+40|0;g=c[i>>2]|0;if(g|0?(l=b+44|0,f=c[l>>2]|0,f|0):0){h=0;while(1){if((h|0)>=(g|0))break;a=c[f+(h<<2)>>2]|0;if(a){Cq(a);c[(c[l>>2]|0)+(h<<2)>>2]=0;f=c[l>>2]|0;g=c[i>>2]|0}h=h+1|0}if(f|0)Cq(f);c[l>>2]=0}h=b+48|0;f=c[h>>2]|0;if(f|0?(m=b+52|0,e=c[m>>2]|0,e|0):0){a=0;while(1){if((a|0)>=(f|0))break;g=c[e+(a<<2)>>2]|0;if(g){Cq(g);c[(c[m>>2]|0)+(a<<2)>>2]=0;e=c[m>>2]|0;f=c[h>>2]|0}a=a+1|0}if(e|0)Cq(e);c[m>>2]=0}a=b+56|0;e=c[a>>2]|0;if(e|0?(n=b+60|0,d=c[n>>2]|0,d|0):0){g=0;while(1){if((g|0)>=(e|0))break;f=c[d+(g<<2)>>2]|0;if(f){Cq(f);c[(c[n>>2]|0)+(g<<2)>>2]=0;d=c[n>>2]|0;e=c[a>>2]|0}g=g+1|0}if(d|0)Cq(d);c[n>>2]=0}c[b>>2]=0}return}function ql(a){a=a|0;var b=0;if(a|0){rl(a);b=c[a+28>>2]|0;if(b|0)Cq(b);b=c[a+32>>2]|0;if(b|0)Cq(b);b=c[a+64>>2]|0;if(b|0)Cq(b);b=c[a+40>>2]|0;if(b|0)Cq(b);b=c[a+44>>2]|0;if(b|0)Cq(b);pl(c[a+68>>2]|0,c[a+72>>2]|0);b=a;a=b+76|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(a|0))}return}function rl(a){a=a|0;var b=0;if(a|0?(b=c[a>>2]|0,b|0):0){Cq(b);c[a>>2]=0}return}function sl(a){a=a|0;return Dq(a,176)|0}function tl(a){a=a|0;var b=0;if(a|0){rl(a);rl(a+4|0);b=a+72|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0))}return}function ul(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;tl(a);f=Dq(b,176)|0;c[a>>2]=f;do if(!f)e=5;else{if(d|0?(f=Dq(b,176)|0,c[a+4>>2]=f,(f|0)==0):0){e=5;break}c[a+8>>2]=b;d=1}while(0);if((e|0)==5){tl(a);d=0}return d|0}function vl(a){a=a|0;var b=0;rl(a);b=c[a+52>>2]|0;if(b|0)Cq(b);b=a+60|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));return}function wl(b,d,e,f,g,h,j,k,l,m){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;B=i;i=i+208|0;A=B;if((g|0)!=0&(h|0)>0)n=(a[g>>0]|0)==0;else n=0;t=n&1;if((e|0)!=0&(f|0)>0)n=(a[e>>0]|0)==0;else n=0;r=n&1;if(!k)n=0;else n=(l|0)!=0&(a[k>>0]|0)!=0;s=n&1;if(d){c[d>>2]=0;if(n){z=(Io(k,83039,3)|0)==0;o=1}else{z=0;o=1}}else{z=0;o=0}x=A+200|0;y=(j|0)==0;v=(j|0)!=0;w=0;n=0;q=0;j=0;p=0;u=r;a:while(1){r=(w|0)!=9;if(!(r&(n|0)==0)){o=0;break}p=dd(A,204,b)|0;if(!p){r=1;n=0;o=1;p=0;break}if((j|0)==0?(hp(A,83043,6)|0)==0:0){F=s;E=t;D=u;C=o;r=w;n=0;j=0;s=F;t=E;u=D;o=C;w=r;continue}j=j+1|0;Eo(A);if(a[x>>0]|0?(a[x>>0]=0,!(v|(w|0)!=3&((w+-5|0)>>>0>1&(w+-1|0)>>>0>1)^1)):0)ld(m,83050)|0;n=a[A>>0]|0;q=(n<<24>>24==0&1)+q|0;switch(w|0){case 8:case 7:case 0:{if(!(kp(A,83080)|0)){C=s;D=t;E=u;F=o;w=9;n=0;s=C;t=D;u=E;o=F;continue a}switch(n<<24>>24){case 0:{C=s;D=t;E=u;F=o;w=8;n=0;s=C;t=D;u=E;o=F;continue a}case 62:{if(!(t|o|u|s)){C=s;D=t;E=u;F=o;w=1;n=0;s=C;t=D;u=E;o=F;continue a}C=s;D=t;E=u;F=o;w=xl(A,k)|0;n=0;s=C;t=D;u=E;o=F;continue a}default:{if(!y){r=s;C=t;D=u;E=o;F=w;n=3;s=r;t=C;u=D;o=E;w=F;continue a}ld(m,83098)|0;Bo(A)|0;ld(m,A)|0;r=s;C=t;D=u;E=o;F=w;n=3;s=r;t=C;u=D;o=E;w=F;continue a}}}case 2:{if(t)if((Ao(A)|0)>0){Do(g,A,h)|0;r=u;t=0}else r=u;else{r=u;t=0}break}case 3:{if(u)if((Ao(A)|0)>0){Do(e,A,f)|0;r=0}else r=u;else r=0;break}case 5:{if(s)if((Ao(A)|0)>0){Do(l,A,256)|0;if((o|0)!=0&z){o=yl(A)|0;c[d>>2]=o;o=(o|0)==0&1;r=u;s=0}else{r=u;s=0}}else r=u;else{r=u;s=0}break}case 4:{if(o)if((Ao(A)|0)>0){o=yl(A)|0;c[d>>2]=o;o=(o|0)==0&1;r=u}else r=u;else{o=0;r=u}break}case 6:case 1:{r=u;break}default:{r=s;C=t;D=u;E=o;F=w;n=0;s=r;t=C;u=D;o=E;w=F;continue a}}w=a[A>>0]|0?6:7;n=0;u=r}if((q|0)==(j|0)&((n|0)!=0&(o&(p|0)==0^1)))n=(a[A>>0]|0)==0?5:n;b:do if((p|0)!=0&(r&((n|0)!=0&(n|0)!=5))){do if(!(dd(A,204,b)|0))break b;while((hp(A,83080,4)|0)!=0);ld(m,83128)|0;n=9}while(0);i=B;return n|0}function xl(b,c){b=b|0;c=c|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+208|0;h=k;b=op(b,60)|0;a:do if(((b|0)!=0?(f=op(b,62)|0,(f|0)!=0):0)?(e=f-b|0,g=e+-1|0,e=e+-2|0,e>>>0<199):0){ir(h|0,b+1|0,g|0)|0;a[h+g>>0]=0;g=0;while(1){b=h+g|0;f=d[b>>0]|0;if(!(Yp(f)|0)){h=b;b=f;f=g;break}else g=g+1|0}while(1){if((e|0)<(f|0))break;if(!(Yp(b)|0))break;e=e+-1|0}e=e-f|0;b=e+1|0;if(((c|0?a[c>>0]|0:0)?(b|0)==(cp(c)|0):0)?(Io(h,c,b)|0)==0:0){e=5;break}switch(e|0){case 3:{if(!(Io(h,83085,b)|0)){e=2;break a}break}case 6:{if(!(Io(h,83090,b)|0)){e=3;break a}break}default:{}}if(!(Io(h,83039,3)|0))e=4;else j=18}else j=18;while(0);if((j|0)==18)e=1;i=k;return e|0}function yl(b){b=b|0;var c=0,d=0,e=0;c=(a[b>>0]|0)==45&1;e=c;while(1){d=a[b+e>>0]|0;if(!(d<<24>>24))break;if(((d&255)+-48|0)>>>0>=10){if(d<<24>>24!=45)break}else{a[b+c>>0]=d;c=c+1|0}e=e+1|0}a[b+c>>0]=0;return Rp(b,0,10)|0}function zl(a,b){a=a|0;b=b|0;var d=0;if((a|0)!=0?(d=Dq(b,4)|0,c[a>>2]=d,(d|0)!=0):0){c[a+4>>2]=b;c[a+12>>2]=b;b=0}else b=-1;return b|0}function Al(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;if(((((a|0)!=0?(b=c[a>>2]|0,(b|0)!=0):0)?(e=a+4|0,f=c[e>>2]|0,(f|0)>0):0)?(g=a+12|0,h=c[g>>2]|0,(h|0)>0):0)?(d=Dq(h+f|0,4)|0,c[a>>2]=d,(d|0)!=0):0){ir(d|0,b|0,c[a+8>>2]<<2|0)|0;Cq(b);c[e>>2]=(c[e>>2]|0)+(c[g>>2]|0);b=0}else b=-1;return b|0}function Bl(a,b){a=a|0;b=b|0;var d=0,e=0;do if(!a)d=-1;else{e=a+8|0;d=c[e>>2]|0;if((d|0)>=(c[a+4>>2]|0)){if(Al(a)|0){d=-1;break}d=c[e>>2]|0}c[e>>2]=d+1;c[(c[a>>2]|0)+(d<<2)>>2]=b;d=0}while(0);return d|0}function Cl(a){a=a|0;var b=0,d=0,e=0;if(a|0){d=a+8|0;e=0;while(1){b=c[a>>2]|0;if((e|0)>=(c[d>>2]|0))break;b=c[b+(e<<2)>>2]|0;if(b|0)Cq(b);e=e+1|0}if(b|0)Cq(b);c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0}return}function Dl(a,b){a=a|0;b=b|0;var d=0;d=Dq(b,4)|0;c[a>>2]=d;if(!d)a=-1;else{c[a+4>>2]=b;c[a+12>>2]=b;c[a+8>>2]=0;a=0}return a|0}function El(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;if(((((a|0)!=0?(b=c[a>>2]|0,(b|0)!=0):0)?(e=a+4|0,f=c[e>>2]|0,(f|0)>0):0)?(g=a+12|0,h=c[g>>2]|0,(h|0)>0):0)?(d=Dq(h+f|0,4)|0,c[a>>2]=d,(d|0)!=0):0){ir(d|0,b|0,c[a+8>>2]<<2|0)|0;Cq(b);c[e>>2]=(c[e>>2]|0)+(c[g>>2]|0);b=0}else b=-1;return b|0}function Fl(a,b){a=a|0;b=b|0;var d=0,e=0;do if(!a)d=-1;else{e=a+8|0;d=c[e>>2]|0;if((d|0)>=(c[a+4>>2]|0)){if(El(a)|0){d=-1;break}d=c[e>>2]|0}c[e>>2]=d+1;c[(c[a>>2]|0)+(d<<2)>>2]=b;d=0}while(0);return d|0}function Gl(a){a=a|0;return}function Hl(a){a=a|0;var b=0;if(a|0?(b=c[a>>2]|0,b|0):0)Cq(b);return}function Il(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=Dq(1,200)|0;c[a>>2]=e;do if(!e)e=-1;else{if((Dl(e+168|0,8)|0)==0?(Dl((c[a>>2]|0)+184|0,8)|0)==0:0){e=c[a>>2]|0;c[e>>2]=b;c[e+4>>2]=d;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;e=0;break}Jl(c[a>>2]|0);e=-1}while(0);return e|0}function Jl(a){a=a|0;if(a|0){Hl(a+168|0);Hl(a+184|0);Cq(a)}return}function Kl(a,b){a=a|0;b=b|0;var d=0;if((a|0)!=0?(d=Dq(b,4)|0,c[a>>2]=d,(d|0)!=0):0){c[a+4>>2]=b;c[a+12>>2]=b;b=0}else b=-1;return b|0}function Ll(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;if(((((a|0)!=0?(b=c[a>>2]|0,(b|0)!=0):0)?(e=a+4|0,f=c[e>>2]|0,(f|0)>0):0)?(g=a+12|0,h=c[g>>2]|0,(h|0)>0):0)?(d=Dq(h+f|0,4)|0,c[a>>2]=d,(d|0)!=0):0){ir(d|0,b|0,c[a+8>>2]<<2|0)|0;Cq(b);c[e>>2]=(c[e>>2]|0)+(c[g>>2]|0);b=0}else b=-1;return b|0}function Ml(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=i;i=i+16|0;e=f;if(!a)b=-1;else{c[e>>2]=0;do if(!(Il(e,b,d)|0)){d=a+8|0;b=c[d>>2]|0;if((b|0)>=(c[a+4>>2]|0)){if(Ll(a)|0){b=-1;break}b=c[d>>2]|0}e=c[e>>2]|0;c[d>>2]=b+1;c[(c[a>>2]|0)+(b<<2)>>2]=e;b=0}else b=-1;while(0)}i=f;return b|0}function Nl(a){a=a|0;var b=0,d=0,e=0;if(a|0){d=a+8|0;e=0;while(1){b=c[a>>2]|0;if((e|0)>=(c[d>>2]|0))break;Jl(c[b+(e<<2)>>2]|0);e=e+1|0}if(b|0)Cq(b);c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0}return}function Ol(a,b){a=a|0;b=b|0;var d=0,e=0;e=c[b+8>>2]|0;d=0;while(1){if((d|0)>=(e|0)){d=-1;break}if((c[c[(c[b>>2]|0)+(d<<2)>>2]>>2]|0)==(a|0))break;d=d+1|0}return d|0}function Pl(b,d,e,f,g,h,j,k){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;v=i;i=i+80|0;t=v+24|0;s=v+16|0;r=v+8|0;q=v;w=v+68|0;l=v+64|0;o=v+60|0;n=v+56|0;p=v+52|0;m=v+48|0;u=v+32|0;c[w>>2]=0;c[l>>2]=0;c[o>>2]=0;c[n>>2]=0;c[p>>2]=0;c[m>>2]=0;Ql(b,d,e,f,g,h,0,0,m,n,p,o,l,w)|0;g=c[w>>2]|0;if(!(Dl(u,g|0?g:255)|0)){Rl(b,d,0,0,h,0,0)|0;Sl(b,d,0,0,0,0,u)|0;if(c[l>>2]|0)Tl(b,d,e,f,h,j,k,c[m>>2]|0,c[n>>2]|0,c[p>>2]|0,c[o>>2]|0,u)|0;if(k|0?a[k>>0]|0:0){if((j|0)!=0?(a[j>>0]|0)!=0:0){c[q>>2]=j;_c(d,83594,q)|0}else _c(d,83602,r)|0;c[s>>2]=k;_c(d,83610,s)|0}_c(d,83616,t)|0;h=0}else h=2;Hl(u);i=v;return h|0}function Ql(b,d,e,f,g,h,j,k,l,m,n,o,p,q){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;var r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=i;i=i+208|0;x=y+104|0;u=y+96|0;t=y+8|0;s=y;r=y+124|0;w=c[b+12>>2]|0;v=c[b>>2]|0;j=r;k=j+82|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(k|0));if(e|0?a[e>>0]|0:0)xp(r,e,80)|0;c[s>>2]=r;_c(d,83156,s)|0;_c(d,83160,t)|0;j=t;k=j+82|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(k|0));if(f|0?a[f>>0]|0:0)xp(t,f,80)|0;c[u>>2]=t;_c(d,83156,u)|0;c[q>>2]=0;j=0;k=0;while(1){if((k|0)>=(w|0))break;e=j+(a[v+(k*176|0)+92>>0]|0)|0;c[q>>2]=e;j=e;k=k+1|0}c[q>>2]=(j|0)/2|0;r=(h|0)==0;u=0;while(1){if((u|0)>=(w|0))break;j=v+(u*176|0)|0;if(((a[v+(u*176|0)+96>>0]|0)+(a[v+(u*176|0)+95>>0]|0)+(a[v+(u*176|0)+97>>0]|0)|0)>0)c[l>>2]=(c[l>>2]|0)+2;else{k=a[v+(u*176|0)+98>>0]|0;s=a[v+(u*176|0)+99>>0]|0;t=((a[v+(u*176|0)+100>>0]|0)+-1&255)<3&1;b=k<<24>>24!=0;do if(r)if(!b?(kp(j,86652)|0)!=0:0)j=(kp(j,86654)|0)==0;else j=1;else if(b?(kp(j,86652)|0)!=0:0){if(k<<24>>24==2?(kp(j,86650)|0)==0:0){j=0;break}if(kp(j,86654)|0)if(k<<24>>24==3)j=(kp(j,86650)|0)==0;else j=0;else j=1;j=j^1}else j=0;while(0);c[o>>2]=(c[o>>2]|0)+(j&1);c[m>>2]=(s<<24>>24!=0&1)+(c[m>>2]|0);c[n>>2]=t+(c[n>>2]|0)}u=u+1|0}c[m>>2]=((c[m>>2]|0)+7|0)/8|0;c[n>>2]=((c[n>>2]|0)+7|0)/8|0;v=((c[o>>2]|0)+7|0)/8|0;c[o>>2]=v;c[p>>2]=(c[m>>2]|0)+1+v+(c[n>>2]|0)+(c[l>>2]|0);q=c[q>>2]|0;c[x>>2]=w;c[x+4>>2]=q;c[x+8>>2]=(g|0)!=0&1;c[x+12>>2]=p;c[x+16>>2]=p|0?83209:92409;_c(d,83216,x)|0;i=y;return 0}function Rl(e,f,g,j,k,l,m){e=e|0;f=f|0;g=g|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;y=i;i=i+48|0;x=y;w=y+40|0;v=c[e+12>>2]|0;u=c[e>>2]|0;s=(k|0)==0;t=0;while(1){if((t|0)>=(v|0))break;b[w>>1]=0;b[w+2>>1]=0;b[w+4>>1]=0;r=u+(t*176|0)|0;do if(!(kp(r,86652)|0))m=1;else{j=a[u+(t*176|0)+98>>0]|0;if(j<<24>>24==2?(kp(r,86650)|0)==0:0){m=1;break}if(kp(r,86654)|0){if(j<<24>>24!=3){m=0;break}if(kp(r,86650)|0){m=0;break}}m=2}while(0);e=u+(t*176|0)+95|0;k=u+(t*176|0)+96|0;q=u+(t*176|0)+97|0;l=((a[k>>0]|0)+(a[e>>0]|0)+(a[q>>0]|0)|0)>0;b[w>>1]=0;b[w+2>>1]=0;b[w+4>>1]=0;if(!l){if(!m)xp(w,r,5)|0;else{l=s?86650:(m|0)==1?86652:86654;b[w>>1]=d[l>>0]|d[l+1>>0]<<8}l=a[u+(t*176|0)+99>>0]|0;j=l<<24>>24;g=a[u+(t*176|0)+100>>0]|0;a:do if((g+-1&255)<3?1:((l<<24>>24>-1?j:0-j|0)|0)>3)j=0;else switch(j|0){case 3:{j=1;break a}case 2:break a;case 1:{j=3;break a}case -1:{j=5;break a}case -2:{j=6;break a}case -3:{j=7;break a}case 0:break a;default:{j=0;break a}}while(0);if((g+-1&255)<3)l=g<<24>>24==2&l<<24>>24==0?4:j;else l=j}else{b[w>>1]=67;l=0}g=a[u+(t*176|0)+98>>0]|0;j=g<<24>>24!=0;do if(s)if((!j?(kp(r,86652)|0)!=0:0)?(kp(r,86654)|0)!=0:0)g=0;else z=37;else if(j?(kp(r,86652)|0)!=0:0){if(g<<24>>24==2?(kp(r,86650)|0)==0:0){g=0;break}if(kp(r,86654)|0)if(g<<24>>24==3?(kp(r,86650)|0)==0:0)g=0;else z=37;else g=0}else g=0;while(0);do if((z|0)==37){z=0;j=g<<24>>24;if(!(g<<24>>24==1|(g+3&255)>8))if(g<<24>>24>0){g=j+-1|0;break}else{g=g<<24>>24<0?j:m;break}else g=0}while(0);n=+h[u+(t*176|0)+112>>3];o=+h[u+(t*176|0)+120>>3];p=+h[u+(t*176|0)+128>>3];j=vj(r,0,0)|0;j=co(d[u+(t*176|0)+6>>0]|0,a[u+(t*176|0)+99>>0]|0,a[u+(t*176|0)+100>>0]|0,a[u+(t*176|0)+93>>0]|0,j,(a[e>>0]|0)+(a[u+(t*176|0)+94>>0]|0)+(a[k>>0]|0)+(a[q>>0]|0)|0,a[u+(t*176|0)+92>>0]|0)|0;if(!(kp(w,86994)|0))b[w>>1]=42;h[x>>3]=n;h[x+8>>3]=o;h[x+16>>3]=p;c[x+24>>2]=w;c[x+28>>2]=g;c[x+32>>2]=l;c[x+36>>2]=(j|0)<0?15:j;_c(f,83253,x)|0;t=t+1|0}i=y;return 0}function Sl(b,f,g,h,j,k,l){b=b|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=i;i=i+48|0;s=u+32|0;t=u+16|0;r=u;q=c[b+12>>2]|0;b=c[b>>2]|0;o=0;a:while(1){if((o|0)>=(q|0))break;m=b+(o*176|0)+92|0;n=o+1|0;p=0;while(1){if((p|0)>=(a[m>>0]|0)){o=n;continue a}h=e[b+(o*176|0)+8+(p<<1)>>1]|0;if((o|0)<(h|0)){j=a[b+(o*176|0)+52+p>>0]|0;k=j<<24>>24;do if(j<<24>>24){h=h+1|0;g=d[b+(o*176|0)+72+p>>0]|0;if(j<<24>>24<0){c[r>>2]=h;c[r+4>>2]=n;c[r+8>>2]=g;c[r+12>>2]=0-k;_c(f,83310,r)|0;g=h;h=n;break}else{c[t>>2]=n;c[t+4>>2]=h;c[t+8>>2]=g;c[t+12>>2]=k;_c(f,83310,t)|0;g=n;break}}else{h=h+1|0;g=d[b+(o*176|0)+72+p>>0]|0;c[s>>2]=n;c[s+4>>2]=h;c[s+8>>2]=g;_c(f,83333,s)|0;g=n}while(0);Fl(l,g)|0;Fl(l,h)|0}p=p+1|0}}i=u;return 0}function Tl(b,e,f,g,h,j,k,l,m,n,o,p){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;var q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;M=i;i=i+160|0;L=M+80|0;K=M+72|0;J=M+64|0;D=M+56|0;C=M+48|0;B=M+40|0;A=M+32|0;z=M+24|0;y=M+16|0;x=M+8|0;w=M;I=M+94|0;H=M+84|0;G=c[b+12>>2]|0;if(((b|0)!=0?(q=c[b+68>>2]|0,(q|0)!=0):0)?(c[q+4>>2]|0)>0:0)F=(c[q+16>>2]|0)!=0;else F=0;E=c[b>>2]|0;if(!l)t=0;else{f=0;g=0;a:while(1){j=f;while(1){if((j|0)>=(G|0))break a;f=j+1|0;if(((a[E+(j*176|0)+96>>0]|0)+(a[E+(j*176|0)+95>>0]|0)+(a[E+(j*176|0)+97>>0]|0)|0)>0)break;else j=f}c[w>>2]=f;_c(e,83356,w)|0;u=E+(j*176|0)|0;k=cp(u)|0;ir(I|0,u|0,k+1|0)|0;u=E+(j*176|0)+94|0;v=0;while(1){if((v|0)==3)break;r=(v|0)==0;if(r)q=a[u>>0]|0;else q=0;t=q+(a[E+(j*176|0)+95+v>>0]|0)|0;if(t){s=I+k|0;if(!r)if((v|0)==1)q=86652;else q=(v|0)==2?86654:85254;else q=86650;r=d[q>>0]|d[q+1>>0]<<8;a[s>>0]=r;a[s+1>>0]=r>>8;k=k+1|0;if((t|0)!=1){c[x>>2]=t;k=(qq(I+k|0,85326,x)|0)+k|0}}v=v+1|0}r=E+(j*176|0)+99|0;q=a[r>>0]|0;if(q<<24>>24){v=I+k|0;q=q<<24>>24>0?43:45;a[v>>0]=q;a[v+1>>0]=q>>8;k=k+1|0;v=a[r>>0]|0;q=v<<24>>24;q=v<<24>>24>-1?q:0-q|0;if((q|0)>1){c[y>>2]=q;k=(qq(I+k|0,85326,y)|0)+k|0}}switch(a[E+(j*176|0)+100>>0]|0){case 1:{v=I+k|0;a[v>>0]=58;a[v+1>>0]=0;break}case 2:{v=I+k|0;a[v>>0]=94;a[v+1>>0]=0;break}case 3:{v=I+k|0;a[v>>0]=a[83363]|0;a[v+1>>0]=a[83364]|0;a[v+2>>0]=a[83365]|0;break}default:{}}c[z>>2]=I;_c(e,83156,z)|0;g=g+2|0}t=(g|0)!=(l|0)&1}a[I>>0]=0;b:do if(m|0){j=G+-1|0;k=0;g=0;while(1){if((k|0)>=(G|0))break b;m=a[E+(k*176|0)+99>>0]|0;f=m<<24>>24;if(m<<24>>24!=0?((a[E+(k*176|0)+96>>0]|0)+(a[E+(k*176|0)+95>>0]|0)+(a[E+(k*176|0)+97>>0]|0)|0)<=0:0){c[A>>2]=k+1;c[A+4>>2]=f;qq(H,83366,A)|0;up(I,H)|0;g=g+1|0}if((g|0)==8|(k|0)==(j|0)&(g|0)!=0){c[B>>2]=g;c[B+4>>2]=I;_c(e,83375,B)|0;a[I>>0]=0;g=0}k=k+1|0}}while(0);a[I>>0]=0;c:do if(n|0){j=G+-1|0;k=0;g=0;while(1){if((k|0)>=(G|0))break c;f=a[E+(k*176|0)+100>>0]|0;if(f<<24>>24!=0?!((f+-1&255)>2?1:((a[E+(k*176|0)+96>>0]|0)+(a[E+(k*176|0)+95>>0]|0)+(a[E+(k*176|0)+97>>0]|0)|0)>0):0){c[C>>2]=k+1;c[C+4>>2]=f<<24>>24;qq(H,83366,C)|0;up(I,H)|0;g=g+1|0}if((g|0)==8|(k|0)==(j|0)&(g|0)!=0){c[D>>2]=g;c[D+4>>2]=I;_c(e,83388,D)|0;a[I>>0]=0;g=0}k=k+1|0}}while(0);a[I>>0]=0;d:do if(o|0){q=(h|0)==0;r=G+-1|0;s=0;g=0;while(1){if((s|0)>=(G|0))break d;f=E+(s*176|0)|0;k=a[E+(s*176|0)+98>>0]|0;j=k<<24>>24!=0;do if(q){if(!((!j?(kp(f,86652)|0)!=0:0)?(kp(f,86654)|0)!=0:0))N=61}else if(j?(kp(f,86652)|0)!=0:0){if(k<<24>>24==2?(kp(f,86650)|0)==0:0)break;if(kp(f,86654)|0)if(!(k<<24>>24==3?(kp(f,86650)|0)==0:0))N=61}while(0);if((N|0)==61){N=0;if(((a[E+(s*176|0)+96>>0]|0)+(a[E+(s*176|0)+95>>0]|0)+(a[E+(s*176|0)+97>>0]|0)|0)<=0){do if(kp(f,86652)|0){if(k<<24>>24==2?(kp(f,86650)|0)==0:0){j=1;f=1;break}if(!(kp(f,86654)|0)){j=1;f=2}else{if(k<<24>>24==3?(kp(f,86650)|0)==0:0){j=1;f=2;break}j=d[E+(s*176|0)+6>>0]|0;f=((k<<24>>24>0)<<31>>31)+(k<<24>>24)|0}}else{j=1;f=1}while(0);o=(ko(j)|0)+f|0;c[J>>2]=s+1;c[J+4>>2]=o;qq(H,83366,J)|0;up(I,H)|0;g=g+1|0}}if((g|0)==8|(s|0)==(r|0)&(g|0)!=0){c[K>>2]=g;c[K+4>>2]=I;_c(e,83401,K)|0;a[I>>0]=0;g=0}s=s+1|0}}while(0);if(F)Ul(b,e,0,0,0,0,p)|0;_c(e,83586,L)|0;i=M;return t|0}function Ul(a,b,d,e,f,g,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;j=j|0;var k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0;H=i;i=i+224|0;G=H+184|0;F=H+144|0;D=H+136|0;C=H+128|0;B=H+120|0;A=H+112|0;z=H+104|0;y=H+96|0;x=H+88|0;w=H+80|0;v=H+72|0;u=H+64|0;t=H+56|0;s=H+48|0;q=H+40|0;p=H+32|0;r=H+24|0;o=H+16|0;n=H+8|0;m=H;E=a+68|0;l=0;d=0;f=-1;e=0;while(1){g=c[E>>2]|0;a=c[g+4>>2]|0;if((l|0)>=(a|0)){d=0;f=-1;break}e=c[(c[g>>2]|0)+(l<<2)>>2]|0;d=(((c[e+4>>2]|0)+-1|0)>>>0<6&1)+d|0;if((l|0)==(a+-1|0)|(d|0)==8){d=(d|0)%8|0;c[m>>2]=(d|0)==0?8:d;_c(b,83414,m)|0;d=f;while(1){f=d+1|0;if((d|0)>=(l|0))break;e=c[(c[c[E>>2]>>2]|0)+(f<<2)>>2]|0;d=c[e+4>>2]|0;if((d+-1|0)>>>0>=6){d=f;continue}d=c[8876+(d<<2)>>2]|0;c[n>>2]=c[e>>2];c[n+4>>2]=d;_c(b,83452,n)|0;d=f}_c(b,83461,o)|0;d=0;f=l}l=l+1|0}a:while(1){l=a+-1|0;m=d;while(1){if((m|0)>=(a|0))break a;e=c[(c[g>>2]|0)+(m<<2)>>2]|0;d=m+1|0;if((m|0)==8|(m|0)==(l|0)){l=d;break}else m=d}o=(l|0)%8|0;c[r>>2]=(o|0)==0?8:o;_c(b,83463,r)|0;while(1){d=f+1|0;if((f|0)>=(m|0))break;e=c[(c[c[E>>2]>>2]|0)+(d<<2)>>2]|0;f=c[e+16>>2]|0;c[p>>2]=c[e>>2];c[p+4>>2]=f;_c(b,83366,p)|0;f=d}_c(b,83461,q)|0;g=c[E>>2]|0;a=c[g+4>>2]|0;d=l;f=m}f=0;d=0;while(1){if((f|0)>=(a|0))break;e=c[(c[g>>2]|0)+(f<<2)>>2]|0;f=f+1|0;d=(((c[e+8>>2]|0)+-1|0)>>>0<3&1)+d|0}b:do if(d){l=0;f=0;d=-1;while(1){if((l|0)>=(a|0))break b;e=c[(c[g>>2]|0)+(l<<2)>>2]|0;f=(((c[e+8>>2]|0)+-1|0)>>>0<3&1)+f|0;if((l|0)==(a+-1|0)|(f|0)==8){r=(f|0)%8|0;c[s>>2]=(r|0)==0?8:r;_c(b,83473,s)|0;while(1){f=d+1|0;if((d|0)>=(l|0))break;e=c[(c[c[E>>2]>>2]|0)+(f<<2)>>2]|0;d=c[e+8>>2]|0;if((d+-1|0)>>>0>=3){d=f;continue}d=c[8904+(d<<2)>>2]|0;c[t>>2]=c[e>>2];c[t+4>>2]=d;_c(b,83452,t)|0;d=f}_c(b,83461,u)|0;a=c[E>>2]|0;g=a;a=c[a+4>>2]|0;f=0;d=l}l=l+1|0}}while(0);f=0;d=0;while(1){if((f|0)>=(a|0))break;e=c[(c[g>>2]|0)+(f<<2)>>2]|0;f=f+1|0;d=(((c[e+12>>2]|0)+-1|0)>>>0<3&1)+d|0}c:do if(!d)n=0;else{l=0;f=0;d=-1;while(1){if((l|0)>=(a|0)){n=0;break c}e=c[(c[g>>2]|0)+(l<<2)>>2]|0;f=(((c[e+12>>2]|0)+-1|0)>>>0<3&1)+f|0;if((l|0)==(a+-1|0)|(f|0)==8){u=(f|0)%8|0;c[v>>2]=(u|0)==0?8:u;_c(b,83495,v)|0;while(1){f=d+1|0;if((d|0)>=(l|0))break;e=c[(c[c[E>>2]>>2]|0)+(f<<2)>>2]|0;d=c[e+12>>2]|0;if((d+-1|0)>>>0>=3){d=f;continue}d=c[8920+(d<<2)>>2]|0;c[w>>2]=c[e>>2];c[w+4>>2]=d;_c(b,83452,w)|0;d=f}_c(b,83461,x)|0;a=c[E>>2]|0;g=a;a=c[a+4>>2]|0;f=0;d=l}l=l+1|0}}while(0);while(1){d=c[g+4>>2]|0;if((n|0)>=(d|0))break;e=c[(c[g>>2]|0)+(n<<2)>>2]|0;a=e+20|0;l=e+212|0;m=0;d=0;f=-1;while(1){g=c[a>>2]|0;if((m|0)>=(g|0))break;d=d+1|0;if((d|0)==15|(m|0)==(g+-1|0)){x=(d|0)%15|0;c[y>>2]=c[e>>2];c[y+4>>2]=(x|0)==0?15:x;_c(b,83514,y)|0;while(1){d=f+1|0;if((f|0)>=(m|0))break;c[z>>2]=c[(c[l>>2]|0)+(d<<2)>>2];_c(b,83528,z)|0;f=d}_c(b,83461,A)|0;d=0;f=m}m=m+1|0}g=c[E>>2]|0;n=n+1|0}s=j+8|0;r=0;while(1){if((r|0)>=(d|0)){a=0;break}e=c[(c[g>>2]|0)+(r<<2)>>2]|0;o=e+24|0;p=e+216|0;q=0;f=0;d=-1;while(1){g=c[o>>2]|0;if((q|0)>=(g|0))break;f=f+1|0;if((f|0)==15|(q|0)==(g+-1|0)){A=(f|0)%15|0;c[B>>2]=c[e>>2];c[B+4>>2]=(A|0)==0?15:A;_c(b,83533,B)|0;d:while(1){n=d+1|0;if((d|0)>=(q|0))break;g=n<<1;a=c[p>>2]|0;f=c[a+(g<<2)>>2]|0;g=c[a+((g|1)<<2)>>2]|0;a=(c[s>>2]|0)/2|0;d=0;while(1){if((d|0)>=(a|0)){d=n;continue d}m=d<<1;A=c[j>>2]|0;l=c[A+(m<<2)>>2]|0;m=c[A+((m|1)<<2)>>2]|0;if((f|0)==(l|0)&(g|0)==(m|0))break;if((g|0)==(l|0)&(f|0)==(m|0))break;d=d+1|0}d=d+1|0;if(!d){d=n;continue}c[C>>2]=d;_c(b,83528,C)|0;d=n}_c(b,83461,D)|0;f=0;d=q}q=q+1|0}g=c[E>>2]|0;d=c[g+4>>2]|0;r=r+1|0}while(1){if((a|0)>=(d|0))break;f=a+1|0;k=+(f|0);d=0;while(1){if((d|0)>=(c[e+20>>2]|0))break;d=d+1|0;e=c[(c[g>>2]|0)+(a<<2)>>2]|0}I=-k;c[F>>2]=c[e>>2];c[F+4>>2]=4;h[F+8>>3]=I;h[F+16>>3]=I;h[F+24>>3]=I;h[F+32>>3]=k;_c(b,83547,F)|0;c[G>>2]=c[e>>2];c[G+4>>2]=4;h[G+8>>3]=k;h[G+16>>3]=k;h[G+24>>3]=k;h[G+32>>3]=I;_c(b,83547,G)|0;g=c[E>>2]|0;d=c[g+4>>2]|0;a=f}i=H;return 0}function Vl(b,f,g,h){b=b|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;a:do if(((b|0?(q=b+4|0,(c[q>>2]|0)>=1):0)?(v=b+20|0,c[v>>2]|0):0)?(w=Dq(g,16)|0,w|0):0){Sm(b,f,g,h,w);p=0;g=0;while(1){if((p|0)>=(c[q>>2]|0))break;o=c[(c[b>>2]|0)+(p<<2)>>2]|0;n=o+36|0;if(((((c[n>>2]|0)!=0?(c[o+40>>2]|0)==0:0)?(r=o+224|0,s=c[r>>2]|0,(s|0)>=1):0)?(t=o+196|0,(c[t>>2]|0)>=1):0)?(u=o+204|0,(c[u>>2]|0)>=1):0){do if((s|0)==1){j=c[c[o+228>>2]>>2]|0;i=c[j>>2]|0;c[o+200>>2]=i;j=c[j+4>>2]|0;c[o+208>>2]=j;if((i|0)==(j|0)){c[n>>2]=3;break}k=i+-1|0;l=a[f+(k*176|0)+92>>0]|0;i=j+-1|0;j=0;while(1){if((j|0)>=(l|0))break;if((e[f+(k*176|0)+8+(j<<1)>>1]|0)==(i|0)){x=j;y=18;break}j=j+1|0}if((y|0)==18?(y=0,(d[f+(k*176|0)+72+x>>0]|0)>1):0)c[n>>2]=2;if((s|0)>1)y=22}else y=22;while(0);if((y|0)==22){y=0;i=Dq(s,4)|0;if(i){g=0;while(1){if((g|0)>=(c[r>>2]|0))break;c[i+(g<<2)>>2]=g;g=g+1|0}Wl(o,w,i);g=c[i>>2]|0;Cq(i)}}j=c[(c[o+228>>2]|0)+(g<<2)>>2]|0;i=c[j>>2]|0;l=o+200|0;c[l>>2]=i;j=c[j+4>>2]|0;m=o+208|0;c[m>>2]=j;switch(c[n>>2]|0){case 1:{Em(i+-1|0,j+-1|0,f,h)|0;break}case 2:{Lm(i+-1|0,j+-1|0,f)|0;break}case 3:{i=f+((i+-1|0)*176|0)+100|0;if((a[i>>0]|0)==3)a[i>>0]=0;break}default:{}}Gm((c[t>>2]|0)+-1|0,(c[l>>2]|0)+-1|0,f,h)|0;Gm((c[u>>2]|0)+-1|0,(c[m>>2]|0)+-1|0,f,h)|0;c[o+24>>2]=2;c[r>>2]=0;i=o+216|0;j=c[i>>2]|0;if(!j){j=Dq(4,4)|0;c[i>>2]=j;if(!j)break a;else{k=j;i=j}}else{k=j;i=j}c[k>>2]=c[t>>2];c[i+4>>2]=c[l>>2];c[i+8>>2]=c[u>>2];c[i+12>>2]=c[m>>2]}p=p+1|0}c[v>>2]=0;Cq(w)}while(0);return}function Wl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=c[a+224>>2]|0;a:do if(d|0){g=a+228|0;i=1;while(1){if((i|0)>=(j|0))break a;h=c[d+(i<<2)>>2]|0;a=i;while(1){f=a+-1|0;if((a|0)<=0)break;e=c[d+(f<<2)>>2]|0;k=c[g>>2]|0;if((Xl(c[k+(e<<2)>>2]|0,c[k+(h<<2)>>2]|0,b)|0)<=0)break;c[d+(a<<2)>>2]=e;a=f}c[d+(a<<2)>>2]=h;i=i+1|0}}while(0);return}function Xl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;h=c[a>>2]|0;i=c[a+4>>2]|0;f=c[b>>2]|0;b=c[b+4>>2]|0;j=(Yl(i,h,d)|0)==-1;a=j?h:i;g=(Yl(b,f,d)|0)==-1;e=g?f:b;b=Yl(j?i:h,g?b:f,d)|0;if((b|0)!=1)if((b|0)!=-1){a=Yl(a,e,d)|0;if((a|0)==-1)a=1;else a=((a|0)==1)<<31>>31}else a=-1;else a=1;return a|0}function Yl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=a+-1|0;h=b+-1|0;e=c[d+(g<<4)+4>>2]|0;f=c[d+(h<<4)+4>>2]|0;do if((e|0)>=(f|0))if((e|0)<=(f|0)){if(!e){e=c[d+(g<<4)>>2]|0;f=c[d+(h<<4)>>2]|0;if((e|0)<(f|0)){e=1;break}if((e|0)>(f|0)){e=-1;break}if(!e){f=c[d+(g<<4)+12>>2]|0;e=c[d+(h<<4)+12>>2]|0;if((f|0)<(e|0)){e=1;break}if((f|0)>(e|0)){e=-1;break}}}if((b|0)>(a|0))e=1;else e=((a|0)>(b|0))<<31>>31}else e=-1;else e=1;while(0);return e|0}function Zl(a){a=a|0;var b=0;if(a|0?(b=c[a>>2]|0,b|0):0){Cq(b);c[a>>2]=0}return}function _l(e,f,g,h,j,k,l){e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;T=i;i=i+48|0;R=T+16|0;P=T+8|0;O=T;Q=T+24|0;if((g|0)!=0&(h|0)>0){N=l&255;L=l<<3;M=0;m=0;l=0;k=0;while(1){if((M|0)==(h|0))break;K=a[g+(M*12|0)+11>>0]|0;J=K&7;K=K>>>3&7;a:do if((J+-1|0)>>>0<4){D=a[g+(M*12|0)+10>>0]|0;H=D<<24>>24;x=b[g+(M*12|0)+8>>1]|0;I=x<<16>>16;o=D<<24>>24!=2;A=D<<24>>24==3;if(!(!((D|1)<<24>>24==3&x<<16>>16>-1&(I|0)<(f|0))?!(D<<24>>24==1&x<<16>>16==-1):0))S=8;b:do if((S|0)==8){S=0;p=e+(I*176|0)+8|0;q=e+(I*176|0)+92|0;n=0;t=-1;while(1){if((n|0)>=4)break;r=b[g+(M*12|0)+(n<<1)>>1]|0;s=r<<16>>16;if((t|0)==(s|0)|(r<<16>>16<0|(s|0)>=(f|0)))break b;if(!(o|r<<16>>16==x<<16>>16)?(mo(p,r,a[q>>0]|0)|0)==0:0)break;n=n+1|0;t=s}if((n|0)==4){do if((D|2)<<24>>24==3){z=b[g+(M*12|0)>>1]|0;B=b[g+(M*12|0)+2>>1]|0;w=b[g+(M*12|0)+4>>1]|0;y=b[g+(M*12|0)+6>>1]|0;n=B&65535;E=e+(n*176|0)+8|0;n=e+(n*176|0)+92|0;F=mo(E,z,a[n>>0]|0)|0;if(!F)break b;v=w&65535;C=e+(v*176|0)+8|0;v=e+(v*176|0)+92|0;G=mo(C,y,a[v>>0]|0)|0;if(!G)break b;o=mo(E,w,a[n>>0]|0)|0;if(!o){u=B;q=0;o=0;n=B;p=-1}else{if(D<<24>>24!=1)break b;n=mo(C,B,a[v>>0]|0)|0;if(!n)break b;t=E;s=C;q=B;x=k;v=o-t>>1;u=n-s>>1;t=F-t>>1;s=G-s>>1;break}while(1){if((o|0)>=20){n=u;break}r=n&65535;s=a[e+(r*176|0)+92>>0]|0;t=0;k=n;l=0;while(1){if((t|0)>=(s|0))break;if((a[e+(r*176|0)+72+t>>0]|0)==2){V=b[e+(r*176|0)+8+(t<<1)>>1]|0;U=u<<16>>16==V<<16>>16;k=U?k:V;m=U?m:t;l=(U&1^1)+l|0}t=t+1|0}if((l|0)!=1?1:k<<16>>16==B<<16>>16){k=u;break}l=o+1|0;U=(o|0)==0?m:p;V=n;q=A&k<<16>>16==x<<16>>16?l:q;o=l;n=k;l=1;p=U;k=u;u=V}if(n<<16>>16!=w<<16>>16)break b;if(!((o|0)>1&((l|0)==0?k<<16>>16!=w<<16>>16:0)))break b;n=mo(C,k,a[v>>0]|0)|0;if(!n){l=0;break b}if(!(D<<24>>24!=3|(o|0)==(q<<1|0))){l=0;break b}s=C;q=B;l=0;x=k;v=p;u=n-s>>1;t=F-E>>1;s=G-s>>1}else{q=32767;z=32767;w=32767;y=32767;x=k;v=-1;u=-1;t=-1;s=-1}while(0);switch(H|0){case 2:{switch(J|0){case 1:{a[e+(I*176|0)+137>>0]=1;k=0;break}case 2:{a[e+(I*176|0)+137>>0]=2;k=0;break}case 4:{a[e+(I*176|0)+137>>0]=4;k=0;break}case 3:{a[e+(I*176|0)+137>>0]=N;k=0;break}default:{k=x;break a}}while(1){if((k|0)==4){k=x;break a}b[e+(I*176|0)+138+(k<<1)>>1]=b[e+((b[g+(M*12|0)+(k<<1)>>1]|0)*176|0)+48>>1]|0;k=k+1|0}}case 3:case 1:break;default:{k=x;break a}}r=q&65535;k=0;while(1){if((k|0)>=3){q=0;break}if(!(a[e+(r*176|0)+152+k>>0]|0)){q=1;break}k=k+1|0}p=w&65535;o=0;while(1){if((o|0)>=3){k=x;break a}n=e+(p*176|0)+152+o|0;if(!(a[n>>0]|0))break;o=o+1|0}if(!((t|s|u|v|0)>-1&q)){k=x;break a}switch(J|0){case 1:{a[e+(r*176|0)+152+k>>0]=1;a[n>>0]=2;break}case 2:{a[e+(r*176|0)+152+k>>0]=1;a[n>>0]=1;break}case 4:{a[e+(r*176|0)+152+k>>0]=4;a[n>>0]=4;break}case 3:{a[e+(r*176|0)+152+k>>0]=N;a[n>>0]=N;break}default:{a[e+(r*176|0)+152+k>>0]=0;a[n>>0]=0}}switch(K|0){case 1:{V=e+(r*176|0)+152+k|0;a[V>>0]=d[V>>0]|8;a[n>>0]=d[n>>0]|16;break}case 2:{V=e+(r*176|0)+152+k|0;a[V>>0]=d[V>>0]|8;a[n>>0]=d[n>>0]|8;break}case 4:{V=e+(r*176|0)+152+k|0;a[V>>0]=d[V>>0]|32;a[n>>0]=d[n>>0]|32;break}case 3:{V=e+(r*176|0)+152+k|0;a[V>>0]=d[V>>0]|L;a[n>>0]=d[n>>0]|L;break}default:{}}a[e+(r*176|0)+146+k>>0]=v;a[e+(r*176|0)+149+k>>0]=t;b[e+(r*176|0)+156+(k<<1)>>1]=b[e+((z&65535)*176|0)+48>>1]|0;a[e+(p*176|0)+146+o>>0]=u;a[e+(p*176|0)+149+o>>0]=s;b[e+(p*176|0)+156+(o<<1)>>1]=b[e+((y&65535)*176|0)+48>>1]|0;k=x;break a}}while(0);c[P>>2]=M+1;qq(Q,83622,P)|0;ld(j,83626)|0;ld(j,Q)|0}else{c[O>>2]=M+1;qq(Q,83622,O)|0;ld(j,83626)|0;ld(j,Q)|0}while(0);M=M+1|0}Rh(e,f)|0;k=fi(e,f,0)|0;if(k|0){c[R>>2]=k;qq(Q,85326,R)|0;ld(j,85329)|0;ld(j,Q)|0}}i=T;return 0}function $l(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0;j=g+-1|0;k=f;while(1){g=np(h,d)|0;if(g|0){m=9;break}g=pp(h,47)|0;if((g|0)!=0?(l=c[i>>2]|0,(g+e|0)>>>0>(f+l|0)>>>0):0){h=l+(k-g)|0;c[i>>2]=h;jr(f|0,g|0,h+1|0)|0;g=c[i>>2]|0}else{c[i>>2]=0;g=0}g=Xc(f+g|0,j-g|0,a,b)|0;if((g|0)<0|(c[b>>2]|0)==0){g=0;break}c[i>>2]=(c[i>>2]|0)+g;h=f}if((m|0)==9)g=g+e|0;return g|0} -function Cf(f,g,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C){f=f|0;g=g|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;t=t|0;u=u|0;v=v|0;w=w|0;x=x|0;y=y|0;z=z|0;A=A|0;B=B|0;C=C|0;var D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Zc=0,$c=0,bd=0,cd=0,dd=0,ed=0,fd=0,hd=0,id=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0;ud=i;i=i+1648|0;td=ud+984|0;rd=ud+976|0;qd=ud+968|0;pd=ud+960|0;od=ud+952|0;nd=ud+944|0;md=ud+936|0;ld=ud+928|0;kd=ud+920|0;id=ud+912|0;hd=ud+904|0;fd=ud+896|0;ed=ud+888|0;dd=ud+880|0;cd=ud+872|0;bd=ud+864|0;$c=ud+856|0;Zc=ud+840|0;Uc=ud+832|0;Tc=ud+824|0;Sc=ud+816|0;Qc=ud+808|0;Pc=ud+800|0;Oc=ud+792|0;Kc=ud+784|0;Jc=ud+776|0;Hc=ud+768|0;Gc=ud+760|0;Cc=ud+752|0;sc=ud+744|0;rc=ud+736|0;qc=ud+728|0;pc=ud+720|0;oc=ud+712|0;nc=ud+704|0;mc=ud+696|0;lc=ud+688|0;kc=ud+680|0;jc=ud+672|0;ic=ud+664|0;hc=ud+656|0;gc=ud+648|0;fc=ud+640|0;ec=ud+632|0;dc=ud+624|0;cc=ud+616|0;bc=ud+608|0;ac=ud+600|0;Ub=ud+592|0;Tb=ud+584|0;Sb=ud+576|0;Rb=ud+568|0;Qb=ud+560|0;Pb=ud+544|0;Ob=ud+536|0;Nb=ud+528|0;Mb=ud+520|0;yb=ud+512|0;xb=ud+504|0;wb=ud+496|0;vb=ud+488|0;ub=ud+480|0;tb=ud+472|0;sb=ud+464|0;rb=ud+456|0;qb=ud+448|0;pb=ud+440|0;ob=ud+432|0;nb=ud+424|0;mb=ud+416|0;lb=ud+408|0;kb=ud+400|0;jb=ud+392|0;ib=ud+384|0;hb=ud+376|0;gb=ud+368|0;fb=ud+360|0;eb=ud+352|0;db=ud+344|0;cb=ud+336|0;bb=ud+328|0;ab=ud+320|0;$a=ud+312|0;_a=ud+304|0;Za=ud+296|0;Ya=ud+288|0;Xa=ud+272|0;Kb=ud+264|0;Jb=ud+256|0;Ib=ud+248|0;Hb=ud+240|0;Gb=ud+224|0;Fb=ud+208|0;Eb=ud+192|0;Db=ud+184|0;Cb=ud+176|0;Bb=ud+168|0;Ab=ud+160|0;zb=ud+152|0;Ma=ud+144|0;La=ud+136|0;Ja=ud+128|0;Ha=ud+120|0;Ga=ud+112|0;Fa=ud+104|0;Ea=ud+96|0;Da=ud+80|0;Ca=ud+72|0;Ba=ud+64|0;Aa=ud+40|0;za=ud+32|0;ya=ud+24|0;J=ud;Va=ud+1632|0;Wa=ud+1628|0;Bc=ud+1080|0;pa=ud+1072|0;sa=ud+1064|0;ta=ud+1056|0;qa=ud+1048|0;ra=ud+1040|0;xa=ud+1032|0;va=ud+1024|0;wa=ud+1016|0;ua=ud+1008|0;Lb=o&128;Wc=(Lb|0)!=0;Q=o>>>13&1;Qa=Bc+76|0;c[Qa>>2]=p;Zb=(p|0)!=0;tc=(q|0)!=0;c[Bc>>2]=(tc?8:0)|(Zb?23:21)|(Zb&tc?32:0);tc=Bc+4|0;c[tc>>2]=Zb?2:0;Zb=Bc+8|0;c[Zb>>2]=B;uc=Bc+88|0;c[uc>>2]=c[s+(k<<2)>>2];vc=Bc+536|0;c[vc>>2]=j+(k<<3);Mc=c[j+(k<<3)+4>>2]|0;wc=Bc+540|0;c[wc>>2]=Mc;_b=Bc+544|0;c[_b>>2]=Mc;Mc=Bc+16|0;c[Mc>>2]=0;xc=Bc+36|0;c[xc>>2]=1;$b=Bc+32|0;c[$b>>2]=1;Rc=Bc+28|0;c[Rc>>2]=2;yc=Bc+20|0;c[yc>>2]=n;zc=Bc+24|0;c[zc>>2]=n;Ac=Bc+48|0;c[Ac>>2]=0;Ra=Bc+44|0;c[Ra>>2]=0;Sa=Bc+40|0;c[Sa>>2]=0;Ta=Bc+64|0;c[Ta>>2]=1;Fc=Bc+68|0;c[Fc>>2]=0;if(Wc)D=3;else D=o&192|0?2:0;Nc=Bc+96|0;c[Nc>>2]=D;Vc=Wc?83461:92216;U=Bc+300|0;D=U;E=D+44|0;do{c[D>>2]=0;D=D+4|0}while((D|0)<(E|0));do if(((g|0)!=0?(c[g>>2]|0)!=0:0)?(Dc=g+4|0,(c[Dc>>2]|0)>=1):0){D=0;while(1){if((D|0)==2)break;c[Bc+292+(D<<2)>>2]=0;c[Bc+284+(D<<2)>>2]=0;c[Bc+276+(D<<2)>>2]=0;c[Bc+268+(D<<2)>>2]=0;c[Bc+260+(D<<2)>>2]=0;c[Bc+252+(D<<2)>>2]=0;c[Bc+228+(D<<2)>>2]=0;c[Bc+172+(D<<2)>>2]=0;c[Bc+220+(D<<2)>>2]=0;c[Bc+164+(D<<2)>>2]=0;c[Bc+212+(D<<2)>>2]=0;c[Bc+204+(D<<2)>>2]=0;c[Bc+156+(D<<2)>>2]=0;c[Bc+148+(D<<2)>>2]=0;c[Bc+244+(D<<2)>>2]=0;c[Bc+236+(D<<2)>>2]=0;c[Bc+188+(D<<2)>>2]=0;c[Bc+180+(D<<2)>>2]=0;c[va+(D<<2)>>2]=0;c[xa+(D<<2)>>2]=0;c[ua+(D<<2)>>2]=0;c[wa+(D<<2)>>2]=0;c[Bc+196+(D<<2)>>2]=0;c[ra+(D<<2)>>2]=0;c[qa+(D<<2)>>2]=0;c[ta+(D<<2)>>2]=0;c[sa+(D<<2)>>2]=0;c[Bc+128+(D<<2)>>2]=0;c[pa+(D<<2)>>2]=0;D=D+1|0}Wb=Bc+60|0;c[Wb>>2]=0;Xb=Bc+56|0;c[Xb>>2]=0;Yb=Bc+80|0;c[Yb>>2]=0;Oa=Bc+136|0;c[Oa>>2]=0;c[Oa+4>>2]=0;c[Oa+8>>2]=0;Oa=Bc+92|0;c[Oa>>2]=0;O=(c[zc>>2]|2|0)==3&1;Vb=Bc+52|0;c[Vb>>2]=O;P=c[vc>>2]|0;O=c[P+(O<<2)>>2]|0;c[wc>>2]=O;F=0;H=0;G=0;E=0;D=0;M=0;P=c[P>>2]|0;while(1){if((M|0)>=(c[uc>>2]|0))break;ge(O,P,U,Q)|0;if(!(c[Ta>>2]|0))I=0;else I=(de(O,P,1)|0)==0;c[Ta>>2]=I&1;if((O|0)!=0?(R=c[O+12>>2]|0,(R|0)!=0):0){I=0;while(1){if((I|0)==3)break;Ia=b[R+66+(I<<1)>>1]|0;Na=Ia<<16>>16;ja=Bc+136+(I<<2)|0;c[ja>>2]=(c[ja>>2]|0)+Na;F=(Ia<<16>>16>-1?Na:0-Na|0)+F|0;I=I+1|0}c[Oa>>2]=(c[Oa>>2]|0)+(b[R+64>>1]|0)}a:do if(c[Vb>>2]|0){K=c[zc>>2]|0;L=O+4|0;J=1;while(1){if((J|0)==2)break a;b:do switch(K|0){case 0:{Na=c[L>>2]|0;if(((Na|0)!=0?(c[Na+12>>2]|0)!=0:0)?(c[Na+32>>2]|0)==0:0)I=1;else{I=c[O>>2]|0;if((I|0)!=0?(c[I+12>>2]|0)!=0:0)I=(c[I+32>>2]|0)==0;else I=0;I=(I^1)<<31>>31}if((I|0)==(J|0))sd=57;break}case 1:{Na=c[L>>2]|0;if((Na|0)!=0?(c[Na+12>>2]|0)!=0:0)I=1;else{I=c[O>>2]|0;if(!I)I=0;else I=(c[I+12>>2]|0)!=0;I=(I^1)<<31>>31}if((I|0)==(J|0))sd=57;break}case 3:{if((J|0)==1){I=c[L>>2]|0;do if((I|0)!=0?(c[I+12>>2]|0)!=0:0){if((c[I+32>>2]|0)<=0){G=G+1|0;I=1;break}do if(!(c[I+76>>2]|0)){I=c[O>>2]|0;if(!I){I=0;break}I=(c[I+12>>2]|0)!=0}else I=0;while(0);H=(I&1)+H|0;I=1}else sd=48;while(0);if((sd|0)==48){sd=0;I=c[O>>2]|0;if(!I)break b;I=(c[I+12>>2]|0)!=0;if(I)I=(I^1)<<31>>31;else break b}if((I|0)==(J|0))sd=57}break}default:{}}while(0);if((sd|0)==57){sd=0;I=c[O+(J<<2)>>2]|0;if(((I|0)!=0?(c[I+12>>2]|0)>0:0)?(S=c[O+8+(J<<2)>>2]|0,(S|0)!=0):0){if((c[I+48>>2]|0)>0)I=1;else I=(c[I+56>>2]|0)>0;E=(I&1)+E|0;D=(b[S+66>>1]|0)+D+(b[S+68>>1]|0)+(b[S+70>>1]|0)|0}}J=J+1|0}}while(0);M=M+1|0;O=O+24|0;P=(P|0)==0?0:P+24|0}a[Bc+304>>0]=c[Oa>>2]|0?2:0;a[Bc+313>>0]=F|0?2:0;ie(U)|0;c[Ta>>2]=(D|0)==0&(c[Ta>>2]|0)!=0&1;ja=(D|E|0)==0;Na=(o&1|0)==0;ia=(H|0)!=0&(G|0)!=0;H=0;G=0;F=0;E=0;ga=0;ha=c[wc>>2]|0;I=0;while(1){if((ga|0)>=(c[uc>>2]|0))break;fa=ha+4|0;K=0;ea=0;while(1){if((ea|0)==2){D=K;break}c:do switch(c[zc>>2]|0){case 0:{Ia=c[fa>>2]|0;if(((Ia|0)!=0?(c[Ia+12>>2]|0)!=0:0)?(c[Ia+32>>2]|0)==0:0)D=1;else{D=c[ha>>2]|0;if((D|0)!=0?(c[D+12>>2]|0)!=0:0)D=(c[D+32>>2]|0)==0;else D=0;D=(D^1)<<31>>31}if((D|0)==(ea|0)){da=0;J=ea;sd=110}else D=K;break}case 1:{Ia=c[fa>>2]|0;if((Ia|0)!=0?(c[Ia+12>>2]|0)!=0:0)D=1;else{D=c[ha>>2]|0;if(!D)D=0;else D=(c[D+12>>2]|0)!=0;D=(D^1)<<31>>31}if((D|0)==(ea|0)){da=1;J=ea;sd=110}else D=K;break}case 2:{Ia=c[fa>>2]|0;if(((((Ia|0)!=0?(c[Ia+12>>2]|0)!=0:0)?(c[Ia+32>>2]|0)>0:0)?(ka=c[ha>>2]|0,(ka|0)!=0):0)?(c[ka+12>>2]|0)!=0:0)D=(c[ka+32>>2]|0)==0;else D=0;if(((D^1)<<31>>31|0)==(ea|0)){da=0;J=ea;sd=110}else D=K;break}case 3:{switch(ea|0){case 1:{Ia=c[fa>>2]|0;if(Ia|0?c[Ia+12>>2]|0:0){da=1;J=1;sd=110;break c}D=c[ha>>2]|0;if(!D){D=K;break c}D=(c[D+12>>2]|0)!=0;if(D){da=1;J=(D^1)<<31>>31;sd=110;break c}else{D=K;break c}}case 0:break;default:{D=K;break c}}D=c[fa>>2]|0;if(D){if(((((c[D+12>>2]|0)!=0?(c[D+32>>2]|0)>0:0)?(la=c[ha>>2]|0,(la|0)!=0):0)?(c[la+12>>2]|0)!=0:0)?(ma=(c[la+32>>2]|0)==0,ma):0){da=ea;J=(ma^1)<<31>>31;sd=110;break c}}else D=0;if(ia&(ea|0)==0){if((D|0)!=0?(c[D+12>>2]|0)!=0:0)J=1;else{D=c[ha>>2]|0;if(!D){D=K;break c}Ia=(c[D+12>>2]|0)!=0;D=(Ia^1)<<31>>31;if(!Ia){D=K;break c}J=D;D=c[ha+(D<<2)>>2]|0}if((c[D+76>>2]|0)==0?(c[D+32>>2]|0)==0:0){da=0;sd=110}else D=K}else D=K;break}default:D=K}while(0);do if((sd|0)==110){sd=0;Y=c[ha+(J<<2)>>2]|0;if((Y|0)!=0?(na=c[Y+12>>2]|0,(na|0)>0):0){ca=K+1|0;I=((ea|0)==0?na:0)+I|0;D=c[Y+32>>2]|0;$=(D|0)>0;if((c[Y+48>>2]|0)>0)aa=1;else aa=(c[Y+56>>2]|0)>0;W=aa&1;Ia=c[Y+72>>2]|0;if((Ia|0)!=0?(e[Ia>>1]|0)>1:0)if(ja)sd=118;else D=1;else if(ja|(D|0)<2)sd=118;else D=1;if((sd|0)==118){sd=0;D=aa}if((J|0)==(ea|0)?c[Y+76>>2]|0:0){Ia=Bc+128+(ea<<2)|0;c[Ia>>2]=(c[Ia>>2]|0)+-1;if($){c[Xb>>2]=c[Xb>>2]|1;D=c[ha>>2]|0;if(!D)D=0;else D=(c[D+12>>2]|0)!=0;c[Wb>>2]=c[Wb>>2]|D&1}c[Yb>>2]=c[Yb>>2]|W;D=ca;break}ba=Y+64|0;P=c[ba>>2]|0;if(!P){_=0;V=0;U=0}else{U=(c[P+28>>2]|0)>0;_=(c[P>>2]|0)>0;V=U;U=U&1}R=_&1;if(D?(oa=c[Y+68>>2]|0,(oa|0)!=0):0){L=(c[oa+28>>2]|0)>0;K=L&1;Ia=(c[oa>>2]|0)>0;D=Ia&1;if(Ia){Q=(c[oa+20>>2]|0)!=0;M=L;O=1}else{Q=0;M=L;O=0}}else{D=0;K=0;Q=0;M=0;O=0}L=Q&1;Z=Y+4|0;Ia=c[Z>>2]|0;G=Ia>>>2&1|G;F=Ia>>>1&1|F;if(V&M)K=(Nf(P,8,c[Y+68>>2]|0,8,0)|0)==0&1;do if(_&O){M=Y+68|0;Ia=(Nf(c[ba>>2]|0,2,c[M>>2]|0,2,(c[Z>>2]&6|0)!=0&1)|0)==0;D=Ia&1;if(Ia)break;L=Q&(c[(c[M>>2]|0)+20>>2]|0)!=(c[(c[ba>>2]|0)+20>>2]|0)&1}while(0);Ia=(F|0)!=0;S=_&Ia&1;Q=(L|D|0)!=0;L=Ia&Q;O=L&1;M=(G|0)!=0;P=_&M&1;Q=M&Q&1;do if(Ia){D=L?D:0;L=S}else{if(!M){L=R;break}if(_)L=(c[c[ba>>2]>>2]|0)>1;else L=0;D=0;L=L&1}while(0);R=(L|0)!=0;X=(D|0)!=0;c[Yb>>2]=c[Yb>>2]|W;Ia=pa+(da<<2)|0;c[Ia>>2]=c[Ia>>2]|W;Ia=sa+(da<<2)|0;c[Ia>>2]=c[Ia>>2]|U;Ia=ta+(da<<2)|0;c[Ia>>2]=c[Ia>>2]|L;if(R)L=0;else L=(c[Z>>2]&8|0)!=0;Ia=Bc+252+(da<<2)|0;c[Ia>>2]=c[Ia>>2]|L&1;if(V)L=0;else L=(c[Z>>2]&16|0)!=0;Ia=Bc+260+(da<<2)|0;c[Ia>>2]=c[Ia>>2]|L&1;Ia=qa+(da<<2)|0;c[Ia>>2]=c[Ia>>2]|K;Ia=ra+(da<<2)|0;c[Ia>>2]=c[Ia>>2]|D;if(X)D=0;else D=(c[Z>>2]&32|0)!=0;Ia=Bc+268+(da<<2)|0;c[Ia>>2]=c[Ia>>2]|D&1;if(!K)D=(c[Z>>2]&64|0)!=0;else D=0;Ia=Bc+276+(da<<2)|0;c[Ia>>2]=c[Ia>>2]|D&1;if(R){D=c[(c[ba>>2]|0)+20>>2]|0;Ia=wa+(da<<2)|0;c[Ia>>2]=(D|0)!=0|c[Ia>>2];D=(D|0)<0}else D=0;M=xa+(da<<2)|0;c[M>>2]=c[M>>2]|D&1;M=Y+68|0;L=c[M>>2]|0;do if(X){D=c[L+20>>2]|0;Ia=va+(da<<2)|0;c[Ia>>2]=c[Ia>>2]|D>>>31;D=(D|0)!=0}else{if(!L){D=0;break}D=c[ba>>2]|0;do if(!D)D=0;else{K=c[L+20>>2]|0;if(!K){D=0;break}D=(K|0)!=(c[D+20>>2]|0)}while(0);K=va+(da<<2)|0;c[K>>2]=c[K>>2]|D&1;K=c[ba>>2]|0;if(!K){D=0;break}D=c[L+20>>2]|0;if(!D){D=0;break}D=(D|0)!=(c[K+20>>2]|0)}while(0);Ia=ua+(da<<2)|0;c[Ia>>2]=c[Ia>>2]|D&1;Ia=Bc+188+(da<<2)|0;c[Ia>>2]=c[Ia>>2]|S;Ia=Bc+244+(da<<2)|0;c[Ia>>2]=c[Ia>>2]|O;Ia=Bc+180+(da<<2)|0;c[Ia>>2]=c[Ia>>2]|P;Ia=Bc+236+(da<<2)|0;c[Ia>>2]=c[Ia>>2]|Q;Ia=c[Z>>2]|0;E=Ia&1|E;H=Ia>>>7&1|H;if($){c[Xb>>2]=c[Xb>>2]|1;D=c[ha>>2]|0;if(!D)D=0;else D=(c[D+12>>2]|0)!=0;c[Wb>>2]=c[Wb>>2]|D&1}if(!Na){D=ca;break}K=c[ha+8+(J<<2)>>2]|0;if(!K){D=ca;break}L=K+4|0;Z=Qf(c[K+36>>2]|0,c[L>>2]|0)|0;Ia=Bc+148+(da<<2)|0;c[Ia>>2]=c[Ia>>2]|Z;if($){Z=Qf(c[K+40>>2]|0,c[K+8>>2]|0)|0;Ia=Bc+156+(da<<2)|0;c[Ia>>2]=c[Ia>>2]|Z}if(aa){aa=Qf(c[K+44>>2]|0,c[L>>2]|0)|0;Ia=Bc+204+(da<<2)|0;c[Ia>>2]=c[Ia>>2]|aa;if($){aa=Qf(c[K+48>>2]|0,c[K+8>>2]|0)|0;Ia=Bc+212+(da<<2)|0;c[Ia>>2]=c[Ia>>2]|aa}do if(_){D=c[K+28>>2]|0;if(!D){D=0;break}J=c[K+24>>2]|0;if(!J){D=0;break}D=(hp(D,J,c[L>>2]<<1)|0)!=0}else D=0;while(0);Ia=Bc+196+(da<<2)|0;c[Ia>>2]=c[Ia>>2]|D&1}do if(R){if(!(c[(c[ba>>2]|0)+20>>2]|0))break;D=Bc+164+(da<<2)|0;c[D>>2]=c[D>>2]|1;D=c[K+20>>2]|0;do if(!D)D=0;else{J=c[K+28>>2]|0;if(!J){D=0;break}D=(hp(D,J,c[L>>2]<<1)|0)!=0}while(0);Ia=Bc+172+(da<<2)|0;c[Ia>>2]=c[Ia>>2]|D&1}while(0);do if(X){if(!(c[(c[M>>2]|0)+20>>2]|0))break;D=Bc+220+(da<<2)|0;c[D>>2]=c[D>>2]|1;D=c[K+24>>2]|0;do if(!D)D=0;else{J=c[K+32>>2]|0;if(!J){D=0;break}D=(hp(D,J,c[L>>2]<<1)|0)!=0}while(0);Ia=Bc+228+(da<<2)|0;c[Ia>>2]=c[Ia>>2]|D&1}while(0);D=c[K+56>>2]|0;if(!D){D=ca;break}if(!(Sf(D,c[L>>2]|0)|0)){D=ca;break}D=Bc+284+(da<<2)|0;c[D>>2]=c[D>>2]|1;D=ca}else D=K}while(0);K=D;ea=ea+1|0}d:do if(D|0){D=0;while(1){if((D|0)==2)break d;Ia=Bc+128+(D<<2)|0;c[Ia>>2]=(c[Ia>>2]|0)+1;D=D+1|0}}while(0);ga=ga+1|0;ha=ha+24|0}D=c[Xb>>2]|0;if(D|0)c[Xb>>2]=(H|0?4:0)+E+D;e:do if(G|F|0){D=0;while(1){if((D|0)==2)break e;c[Bc+172+(D<<2)>>2]=0;c[Bc+164+(D<<2)>>2]=0;c[wa+(D<<2)>>2]=0;c[xa+(D<<2)>>2]=0;c[Bc+228+(D<<2)>>2]=0;c[Bc+220+(D<<2)>>2]=0;c[ua+(D<<2)>>2]=0;c[va+(D<<2)>>2]=0;D=D+1|0}}while(0);D=c[zc>>2]|0;if(D)if((D|0)!=1)if((D|0)!=2)if((D|0)==3)D=1;else{c[Bc+84>>2]=-1;D=0;break}else D=0;else D=1;else D=0;xa=Bc+84|0;c[xa>>2]=D;Ia=Bc+12|0;c[Ia>>2]=0;c[uc>>2]=c[Bc+128+(D<<2)>>2];f:do if(!(o&4)){va=Bc+120|0;c[va>>2]=0;wa=(k|0)==0;if(!wa)if(!(o&8)){E=1;sd=226}else ua=0;else{g:do if(!r){D=(y|0)!=0;do if(D?(a[y>>0]|0)!=0:0){if(z|0?a[z>>0]|0:0){D=81168;E=y;F=84228;G=z;break}D=81168;E=y;F=81168;G=84217}else sd=213;while(0);do if((sd|0)==213){if(z|0?a[z>>0]|0:0){if(!D){D=92346;E=92346;F=92346;G=z;break}D=a[y>>0]|0;F=D<<24>>24==0;D=D<<24>>24?81168:92346;E=F?92346:y;F=F?92346:84228;G=z;break}c[ya>>2]=Vc;c[ya+4>>2]=x;_c(v,12431,ya)|0;c[za>>2]=83461;_c(v,12798,za)|0;break g}while(0);c[Aa>>2]=Vc;c[Aa+4>>2]=x;c[Aa+8>>2]=D;c[Aa+12>>2]=E;c[Aa+16>>2]=F;c[Aa+20>>2]=G;_c(v,12447,Aa)|0;if(A|0){sd=v+8|0;c[sd>>2]=(c[sd>>2]|0)+-1;c[Ba>>2]=A;_c(v,12472,Ba)|0}c[Ca>>2]=83461;_c(v,12798,Ca)|0}while(0);E=(o&8|0)==0;sd=226}if((sd|0)==226){D=(I|0)>1024&1;if(l)D=(c[l+16>>2]|0)==0?D:1;c[Da>>2]=Vc;c[Da+4>>2]=85063;c[Da+8>>2]=Vc;_c(v,12477,Da)|0;gd(g);c[Ea>>2]=12840;jd(g,12798,Ea)|0;if(!D){if(o&16384|0)jd(g,86692,Ga)|0}else jd(g,86665,Fa)|0;c[Ha>>2]=c[g>>2];c[Ha+4>>2]=Vc;_c(v,12485,Ha)|0;ua=E}if((c[s>>2]|0)==0?(c[s+4>>2]|0)==0:0){D=Bc+100|0;ta=Bc+344|0;F=Bc+112|0}else{Ha=c[Nc>>2]|0;F=(k|0)==1?262144:16;D=Bc+100|0;c[D>>2]=F;E=Bc+344|0;Df(8192,Ha,F,E,Mc)|0;gd(g);F=Bc+112|0;c[F>>2]=kg(c[wc>>2]|0,g,Ia,c[zc>>2]|0,c[uc>>2]|0,c[xc>>2]|0)|0;if(Ef(E,Ia,g,-1,1)|0){E=1;D=0;break}c[Ja>>2]=c[g>>2];c[Ja+4>>2]=Vc;_c(v,12485,Ja)|0;ta=E}E=c[Nc>>2]|0;c[D>>2]=32;Df(8192,E,32,ta,Mc)|0;gd(g);c[F>>2]=0;E=mg(f,c[wc>>2]|0,g,Ia,c[zc>>2]|0,c[Bc>>2]|0,c[uc>>2]|0,c[xc>>2]|0)|0;sa=Bc+116|0;c[sa>>2]=E;if((c[F>>2]|0)!=(E|0)){c[F>>2]=E;if(Ef(ta,Ia,g,-2,c[Rc>>2]|0)|0){E=1;D=0;break}c[La>>2]=c[g>>2];c[La+4>>2]=Vc;_c(v,12485,La)|0}if((he(a[Bc+300+((c[va>>2]|0)*11|0)+2>>0]|0)|0)==1?(Ka=c[Nc>>2]|0,c[D>>2]=64,Df(8192,Ka,64,ta,Mc)|0,gd(g),c[F>>2]=0,Ka=ng(c[wc>>2]|0,g,Ia,c[zc>>2]|0,c[Bc>>2]|0,c[tc>>2]|0,c[uc>>2]|0,c[xc>>2]|0)|0,c[sa>>2]=Ka,(c[F>>2]|0)!=(Ka|0)):0){c[F>>2]=Ka;if(Ef(ta,Ia,g,-2,1)|0){E=1;D=0;break}c[Ma>>2]=c[g>>2];c[Ma+4>>2]=Vc;_c(v,12485,Ma)|0}c[Fc>>2]=0;aa=Bc+124|0;qa=(l|0)==0;ba=Bc+332|0;ca=wa?1:2;da=wa?20:40;ea=Bc+322|0;fa=Bc+128|0;ga=Bc+104|0;ha=Bc+408|0;ia=Bc+108|0;ja=Bc+472|0;ka=Bc+72|0;la=Bc+136|0;ra=l+16|0;ma=l+4|0;na=l+8|0;oa=l+12|0;pa=0;h:while(1){Ma=he(a[Bc+300+((c[va>>2]|0)*11|0)+3>>0]|0)|0;c[aa>>2]=Ma;if(Ma|0){Ma=c[Nc>>2]|0;E=c[Fc>>2]|128;c[D>>2]=E;Df(8192,Ma,E,ta,Mc)|0;gd(g);c[F>>2]=0;E=c[aa>>2]|0;if((E|0)==1){c[F>>2]=og(c[wc>>2]|0,c[_b>>2]|0,g,Ia,c[zc>>2]|0,c[uc>>2]|0,c[Ac>>2]|0,c[$b>>2]|0,c[xc>>2]|0)|0;c[Sa>>2]=(c[Sa>>2]|0)+(c[Ac>>2]|0);E=c[aa>>2]|0}if(Ef(ta,Ia,g,0-E|0,c[Rc>>2]|0)|0){E=1;D=0;break f}c[zb>>2]=c[g>>2];c[zb+4>>2]=Vc;_c(v,12485,zb)|0}do if((c[xa>>2]|0)==1&(c[Ac>>2]|0)==0){Ma=he(a[Bc+300+((c[va>>2]|0)*11|0)+4>>0]|0)|0;c[aa>>2]=Ma;if(!Ma){if((c[Rc>>2]|0)!=1)break;_c(v,81713,Cb)|0;break}else{La=c[Nc>>2]|0;Ma=c[Fc>>2]|256;c[D>>2]=Ma;Df(8192,La,Ma,ta,Mc)|0;gd(g);c[F>>2]=0;c[Ab>>2]=c[Oa>>2];jd(g,85248,Ab)|0;if(Ef(ta,Ia,g,0-(c[aa>>2]|0)|0,c[Rc>>2]|0)|0){E=1;D=0;break f}c[Bb>>2]=c[g>>2];c[Bb+4>>2]=Vc;_c(v,12485,Bb)|0;break}}while(0);if(!(qa|(pa|0)!=0)?(Ua=c[ra>>2]|0,Ua|0):0){do if(!(c[ma>>2]|0)){if(c[na>>2]|0)break;if(!(c[oa>>2]|0)){E=40;D=0;break f}}while(0);G=c[l>>2]|0;E=G+1|0;$=Dq(E,4)|0;if(!$){E=1;D=0;break f}_=Dq(E,4)|0;i:do if(!_){E=2;I=0;J=0;H=0;G=0}else{if(ig(f,g,Bc,G,$,_)|0){E=3;I=0;J=0;H=0;G=0;break}Y=Ua+4|0;Z=Dq(c[Y>>2]|0,4)|0;if(!Z){E=3;I=0;J=0;H=Z;G=0;break}E=c[ra>>2]|0;H=E+8|0;J=Dq(c[H>>2]|0,4)|0;if(!J){E=3;I=0;H=Z;G=0;break}E=E+12|0;G=0;while(1){if((G|0)>=(c[H>>2]|0))break;c[J+(G<<2)>>2]=c[(c[E>>2]|0)+(G<<2)>>2];G=G+1|0}G=0;while(1){E=c[Y>>2]|0;if((G|0)>=(E|0)){I=G;break}Ma=um(c[(c[Ua>>2]|0)+(G<<2)>>2]|0)|0;c[Z+(G<<2)>>2]=Ma;if(!Ma){E=4;I=G;H=Z;G=0;break i}G=G+1|0}G=Dq(E,4)|0;if(!G){E=4;H=Z;break}if(Jm(Ua,$,_,Z,G)|0){E=5;H=Z;break}c[Db>>2]=12494;jd(g,12798,Db)|0;W=Ua+8|0;K=0;H=0;X=0;S=0;while(1){if((X|0)>=(c[Y>>2]|0))break;R=c[Z+(c[G+(X<<2)>>2]<<2)>>2]|0;O=c[R+8>>2]|0;M=c[R+12>>2]|0;c[Eb>>2]=c[R+4>>2];c[Eb+4>>2]=O;c[Eb+8>>2]=M;jd(g,12497,Eb)|0;M=R+20|0;O=R+212|0;jg(c[M>>2]|0,c[O>>2]|0,g);E=c[R+24>>2]|0;if((E|0)>2){E=12;H=Z;break i}Q=R+36|0;L=(c[Q>>2]|0)==0;do if((E|0)==2){if(!L?c[R+40>>2]|0:0){sd=287;break}Ma=c[R+216>>2]|0;L=c[Ma>>2]|0;La=c[Ma+4>>2]|0;H=c[Ma+8>>2]|0;Ma=c[Ma+12>>2]|0;E=(no(c[O>>2]|0,L,c[M>>2]|0)|0)==0;K=E?L:La;L=E?La:L;La=(no(c[O>>2]|0,H,c[M>>2]|0)|0)==0;E=La?H:Ma;H=La?Ma:H;if((K|0)<(E|0)){c[Fb>>2]=K;c[Fb+4>>2]=L;c[Fb+8>>2]=E;c[Fb+12>>2]=H;jd(g,12508,Fb)|0;H=L;E=S;break}else{c[Gb>>2]=E;c[Gb+4>>2]=H;c[Gb+8>>2]=K;c[Gb+12>>2]=L;jd(g,12508,Gb)|0;H=L;E=S;break}}else{if(!L){sd=287;break}if((c[R+224>>2]|0)>0)sd=287;else E=S}while(0);j:do if((sd|0)==287){sd=0;P=R+196|0;if((c[P>>2]|0)<=0?(c[R+204>>2]|0)<=0:0)E=S;else sd=289;do if((sd|0)==289){sd=0;O=c[ma>>2]|0;E=0;L=0;k:while(1){l:while(1){switch(a[O+L>>0]|0){case 0:{L=E;break k}case 72:break;default:{L=L+1|0;continue l}}L=L+1|0;M=O+L|0;Ma=(sp(d[M>>0]|0)|0)==0;M=a[M>>0]|0;if(!Ma)break;if(!(M<<24>>24)){sd=295;break k}}E=E+1|0;if(!(M<<24>>24)){L=E;break}}if((sd|0)==295){sd=0;L=E+1|0}if((c[P>>2]|0)>0){Ma=c[l>>2]|0;E=S-L+Ma-(c[W>>2]|0)|0;if((E|0)>=(Ma|0)){E=11;H=Z;break i}K=E+1|0;E=S+1|0}else E=S;if((c[R+204>>2]|0)<=0)break;Ma=c[l>>2]|0;H=E-L+Ma-(c[W>>2]|0)|0;if((H|0)>=(Ma|0)){E=11;H=Z;break i}H=H+1|0;E=E+1|0}while(0);c[Hb>>2]=K;c[Hb+4>>2]=H;jd(g,12526,Hb)|0;switch(c[Q>>2]|0){case 3:{c[Ib>>2]=c[R+200>>2];jd(g,12536,Ib)|0;break j}case 2:{La=c[R+200>>2]|0;Ma=c[R+208>>2]|0;Ka=(La|0)>(Ma|0);c[Jb>>2]=Ka?Ma:La;c[Jb+4>>2]=Ka?La:Ma;jd(g,12541,Jb)|0;break j}case 1:{V=R+224|0;L=c[V>>2]|0;if(!L){La=c[R+200>>2]|0;Ma=c[R+208>>2]|0;Ka=(La|0)>(Ma|0);c[Kb>>2]=Ka?Ma:La;c[Kb+4>>2]=Ka?La:Ma;jd(g,12550,Kb)|0;break j}U=R+228|0;S=1;while(1){if((S|0)>=(L|0)){M=0;break}O=c[U>>2]|0;R=c[O+(S<<2)>>2]|0;M=S;while(1){Q=M+-1|0;if((M|0)<=0)break;P=c[O+(Q<<2)>>2]|0;if((Ff(P,R)|0)<=0)break;c[O+(M<<2)>>2]=P;O=c[U>>2]|0;M=Q}c[O+(M<<2)>>2]=R;S=S+1|0}while(1){if((M|0)>=(L|0))break j;La=c[(c[U>>2]|0)+(M<<2)>>2]|0;Ma=c[La+4>>2]|0;c[Xa>>2]=c[La>>2];c[Xa+4>>2]=Ma;c[Xa+8>>2]=(M|0)==(L+-1|0)?41:44;jd(g,12559,Xa)|0;L=c[V>>2]|0;M=M+1|0}}default:break j}}while(0);if((X|0)<((c[Y>>2]|0)+-1|0))jd(g,11716,Ya)|0;X=X+1|0;S=E}c[Za>>2]=c[g>>2];c[Za+4>>2]=Vc;_c(v,12485,Za)|0;E=0;H=Z}while(0);Cq($);Cq(_);if(G|0)Cq(G);if(H|0){G=0;while(1){if((G|0)>=(I|0))break;tm(c[H+(G<<2)>>2]|0);G=G+1|0}Cq(H)}if(J|0){H=c[ra>>2]|0;G=H+8|0;H=H+12|0;I=0;while(1){if((I|0)>=(c[G>>2]|0))break;c[(c[H>>2]|0)+(I<<2)>>2]=c[J+(I<<2)>>2];I=I+1|0}Cq(J)}if(E|0){D=0;break f}}do if(!(he(a[Bc+300+((c[va>>2]|0)*11|0)+5>>0]|0)|0)){if(he(a[Bc+300+((c[va>>2]|0)*11|0)+6>>0]|0)|0){sd=337;break}if(he(a[Bc+300+((c[va>>2]|0)*11|0)+7>>0]|0)|0){sd=337;break}if(he(a[Bc+300+((c[va>>2]|0)*11|0)+8>>0]|0)|0){sd=337;break}if((c[Rc>>2]|0)!=1)break;_c(v,12570,gb)|0}else sd=337;while(0);do if((sd|0)==337){sd=0;La=c[Nc>>2]|0;Ma=c[Fc>>2]|4;c[D>>2]=Ma;Df(8192,La,Ma,ta,Mc)|0;Ma=he(a[Bc+300+((c[va>>2]|0)*11|0)+5>>0]|0)|0;c[aa>>2]=Ma;do if(!Ma){if((c[Rc>>2]|0)!=1)break;_c(v,81713,$a)|0}else{Ma=c[Nc>>2]|0;E=c[D>>2]|512;c[ga>>2]=E;Df(8192,Ma,E,ha,Mc)|0;gd(g);c[F>>2]=0;E=c[aa>>2]|0;if((E|0)==1){c[F>>2]=qg(c[wc>>2]|0,c[_b>>2]|0,g,Ia,c[zc>>2]|0,c[tc>>2]|0,c[uc>>2]|0,c[Ac>>2]|0,c[$b>>2]|0,c[xc>>2]|0)|0;c[Sa>>2]=(c[Sa>>2]|0)+(c[Ac>>2]|0);E=c[aa>>2]|0}if(Ef(ha,Ia,g,0-E|0,c[Rc>>2]|0)|0){E=1;D=0;break f}c[_a>>2]=c[g>>2];c[_a+4>>2]=Vc;_c(v,12485,_a)|0}while(0);Ma=he(a[Bc+300+((c[va>>2]|0)*11|0)+6>>0]|0)|0;c[aa>>2]=Ma;do if(!Ma){if((c[Rc>>2]|0)!=1)break;_c(v,81713,bb)|0}else{E=c[xa>>2]|0;if(!(c[Bc+188+(E<<2)>>2]|0))E=(c[Bc+180+(E<<2)>>2]|0)!=0;else E=1;c[ka>>2]=E&1;Ma=c[Nc>>2]|0;E=c[D>>2]|1024;c[ga>>2]=E;Df(8192,Ma,E,ha,Mc)|0;gd(g);c[F>>2]=0;E=c[aa>>2]|0;if((E|0)==1){c[F>>2]=rg(c[wc>>2]|0,c[_b>>2]|0,g,Ia,c[zc>>2]|0,c[tc>>2]|0,c[uc>>2]|0,c[ka>>2]|0,c[Ac>>2]|0,c[$b>>2]|0,c[xc>>2]|0)|0;c[Sa>>2]=(c[Sa>>2]|0)+(c[Ac>>2]|0);E=c[aa>>2]|0}if(Ef(ha,Ia,g,0-E|0,c[Rc>>2]|0)|0){E=2;D=0;break f}c[ab>>2]=c[g>>2];c[ab+4>>2]=Vc;_c(v,12485,ab)|0}while(0);Ma=he(a[Bc+300+((c[va>>2]|0)*11|0)+7>>0]|0)|0;c[aa>>2]=Ma;do if(!Ma){if((c[Rc>>2]|0)!=1)break;_c(v,81713,db)|0}else{Ma=c[Nc>>2]|0;E=c[D>>2]|2048;c[ga>>2]=E;Df(8192,Ma,E,ha,Mc)|0;gd(g);c[F>>2]=0;E=c[aa>>2]|0;if((E|0)==1){c[F>>2]=sg(c[wc>>2]|0,g,Ia,c[zc>>2]|0,c[uc>>2]|0)|0;c[Sa>>2]=(c[Sa>>2]|0)+(c[Ac>>2]|0);E=c[aa>>2]|0}if(Ef(ha,Ia,g,0-E|0,c[Rc>>2]|0)|0){E=3;D=0;break f}c[cb>>2]=c[g>>2];c[cb+4>>2]=Vc;_c(v,12485,cb)|0}while(0);Ma=he(a[Bc+300+((c[va>>2]|0)*11|0)+8>>0]|0)|0;c[aa>>2]=Ma;if(Ma|0){E=c[xa>>2]|0;if(!(c[Bc+188+(E<<2)>>2]|0))G=c[Bc+180+(E<<2)>>2]|0?11735:11731;else G=11733;Ma=c[Nc>>2]|0;E=c[D>>2]|4096;c[ga>>2]=E;Df(8192,Ma,E,ha,Mc)|0;gd(g);c[F>>2]=0;E=c[aa>>2]|0;if((E|0)==1){E=Xf(G,g,Ia)|0;c[F>>2]=(c[F>>2]|0)+E;c[Sa>>2]=(c[Sa>>2]|0)+(c[Ac>>2]|0);E=c[aa>>2]|0}if(Ef(ha,Ia,g,0-E|0,c[Rc>>2]|0)|0){E=1;D=0;break f}c[eb>>2]=c[g>>2];c[eb+4>>2]=Vc;_c(v,12485,eb)|0}if((c[Rc>>2]|0)!=1)break;_c(v,81713,fb)|0}while(0);Ma=(c[va>>2]|0)+1|0;c[va>>2]=Ma;m:do if(!(he(a[Bc+300+(Ma*11|0)+9>>0]|0)|0)){if((c[Rc>>2]|0)!=1)break;_c(v,12575,sb)|0;if((c[Rc>>2]|0)!=1)break;_c(v,12579,tb)|0}else{La=c[Nc>>2]|0;Ma=c[Fc>>2]|2;c[D>>2]=Ma;Df(8192,La,Ma,ta,Mc)|0;Ma=he(a[Bc+300+((c[va>>2]|0)*11|0)+9>>0]|0)|0;c[aa>>2]=Ma;if(Ma|0){Ma=c[Nc>>2]|0;E=c[D>>2]|8192;c[ga>>2]=E;Df(8192,Ma,E,ha,Mc)|0;gd(g);c[F>>2]=0;E=c[aa>>2]|0;if((E|0)==1){G=tg(c[wc>>2]|0,c[_b>>2]|0,g,Ia,c[zc>>2]|0,c[tc>>2]|0,c[uc>>2]|0,c[Qa>>2]|0,c[Ac>>2]|0,c[$b>>2]|0,c[xc>>2]|0)|0;c[Ra>>2]=(c[Ra>>2]|0)+(c[Ac>>2]|0);E=c[aa>>2]|0}else G=0;c[sa>>2]=G;c[F>>2]=G;if(Ef(ha,Ia,g,0-E|0,c[Rc>>2]|0)|0){E=1;D=0;break f}c[hb>>2]=c[g>>2];c[hb+4>>2]=Vc;_c(v,12485,hb)|0}Ma=he(a[Bc+300+((c[va>>2]|0)*11|0)+2>>0]|0)|0;c[aa>>2]=Ma;if(Ma|0){La=c[Nc>>2]|0;Ma=c[D>>2]|16384;c[ga>>2]=Ma;Df(8192,La,Ma,ha,Mc)|0;gd(g);c[F>>2]=0;Ma=gg(la,g,c[tc>>2]|0,Ia)|0;c[F>>2]=(c[F>>2]|0)+Ma;c[Ra>>2]=(c[Ra>>2]|0)+(c[Ac>>2]|0);if(Ef(ha,Ia,g,0-(c[aa>>2]|0)|0,c[Rc>>2]|0)|0){E=2;D=0;break f}c[ib>>2]=c[g>>2];c[ib+4>>2]=Vc;_c(v,12485,ib)|0}do if(!(he(a[Bc+300+((c[va>>2]|0)*11|0)+5>>0]|0)|0)){if(he(a[Bc+300+((c[va>>2]|0)*11|0)+6>>0]|0)|0)break;if(he(a[Bc+300+((c[va>>2]|0)*11|0)+7>>0]|0)|0)break;if(he(a[Bc+300+((c[va>>2]|0)*11|0)+8>>0]|0)|0)break;if((c[Rc>>2]|0)!=1)break m;_c(v,12570,rb)|0;break m}while(0);La=c[Nc>>2]|0;Ma=c[D>>2]|4;c[ga>>2]=Ma;Df(8192,La,Ma,ha,Mc)|0;Ma=he(a[Bc+300+((c[va>>2]|0)*11|0)+5>>0]|0)|0;c[aa>>2]=Ma;do if(!Ma){if((c[Rc>>2]|0)!=1)break;_c(v,81713,kb)|0}else{Ma=c[Nc>>2]|0;E=c[ga>>2]|512;c[ia>>2]=E;Df(8192,Ma,E,ja,Mc)|0;gd(g);c[F>>2]=0;E=c[aa>>2]|0;if((E|0)==1){c[F>>2]=ug(c[wc>>2]|0,c[_b>>2]|0,g,Ia,c[zc>>2]|0,c[tc>>2]|0,c[uc>>2]|0,c[Ac>>2]|0,c[$b>>2]|0,c[xc>>2]|0)|0;c[Ra>>2]=(c[Ra>>2]|0)+(c[Ac>>2]|0);E=c[aa>>2]|0}if(Ef(ja,Ia,g,0-E|0,c[Rc>>2]|0)|0){E=3;D=0;break f}c[jb>>2]=c[g>>2];c[jb+4>>2]=Vc;_c(v,12485,jb)|0}while(0);Ma=he(a[Bc+300+((c[va>>2]|0)*11|0)+6>>0]|0)|0;c[aa>>2]=Ma;do if(!Ma){if((c[Rc>>2]|0)!=1)break;_c(v,81713,mb)|0}else{E=c[xa>>2]|0;if(!(c[Bc+244+(E<<2)>>2]|0))E=(c[Bc+236+(E<<2)>>2]|0)!=0;else E=1;c[ka>>2]=E&1;Ma=c[Nc>>2]|0;E=c[ga>>2]|1024;c[ia>>2]=E;Df(8192,Ma,E,ja,Mc)|0;gd(g);c[F>>2]=0;E=c[aa>>2]|0;if((E|0)==1){c[F>>2]=vg(c[wc>>2]|0,c[_b>>2]|0,g,Ia,c[zc>>2]|0,c[tc>>2]|0,c[uc>>2]|0,c[ka>>2]|0,c[Ac>>2]|0,c[$b>>2]|0,c[xc>>2]|0)|0;c[Ra>>2]=(c[Ra>>2]|0)+(c[Ac>>2]|0);E=c[aa>>2]|0}if(Ef(ja,Ia,g,0-E|0,c[Rc>>2]|0)|0){E=5;D=0;break f}c[lb>>2]=c[g>>2];c[lb+4>>2]=Vc;_c(v,12485,lb)|0}while(0);Ma=he(a[Bc+300+((c[va>>2]|0)*11|0)+7>>0]|0)|0;c[aa>>2]=Ma;do if(!Ma){if((c[Rc>>2]|0)!=1)break;_c(v,81713,ob)|0}else{Ma=c[Nc>>2]|0;E=c[ga>>2]|2048;c[ia>>2]=E;Df(8192,Ma,E,ja,Mc)|0;gd(g);c[F>>2]=0;E=c[aa>>2]|0;if((E|0)==1){c[F>>2]=wg(c[wc>>2]|0,g,Ia,c[zc>>2]|0,c[uc>>2]|0)|0;c[Ra>>2]=(c[Ra>>2]|0)+(c[Ac>>2]|0);E=c[aa>>2]|0}if(Ef(ja,Ia,g,0-E|0,c[Rc>>2]|0)|0){E=5;D=0;break f}c[nb>>2]=c[g>>2];c[nb+4>>2]=Vc;_c(v,12485,nb)|0}while(0);Ma=he(a[Bc+300+((c[va>>2]|0)*11|0)+8>>0]|0)|0;c[aa>>2]=Ma;if(Ma|0){E=c[xa>>2]|0;if(!(c[Bc+244+(E<<2)>>2]|0))G=c[Bc+236+(E<<2)>>2]|0?11735:11731;else G=11733;Ma=c[Nc>>2]|0;E=c[ga>>2]|4096;c[ia>>2]=E;Df(8192,Ma,E,ja,Mc)|0;gd(g);c[F>>2]=0;E=c[aa>>2]|0;if((E|0)==1){E=Xf(G,g,Ia)|0;c[F>>2]=(c[F>>2]|0)+E;c[Ra>>2]=(c[Ra>>2]|0)+(c[Ac>>2]|0);E=c[aa>>2]|0}if(Ef(ja,Ia,g,0-E|0,c[Rc>>2]|0)|0){E=6;D=0;break f}c[pb>>2]=c[g>>2];c[pb+4>>2]=Vc;_c(v,12485,pb)|0}if((c[Rc>>2]|0)!=1)break;_c(v,81713,qb)|0}while(0);E=c[zc>>2]|0;if((E|0)==4){do if(!((c[yc>>2]|0)!=3|(c[Ac>>2]|0)==0)){if((he(a[ba>>0]|0)|0)!=1)break;do if((Hg(c[wc>>2]|0,c[_b>>2]|0,Va,Wa,c[zc>>2]|0,c[uc>>2]|0)|0)>0){La=c[Nc>>2]|0;Ma=c[Fc>>2]|131072;c[D>>2]=Ma;Df(8192,La,Ma,ta,Mc)|0;gd(g);c[F>>2]=0;c[F>>2]=Ig(f,c[Va>>2]|0,c[Wa>>2]|0,g,Ia,c[tc>>2]|0,c[uc>>2]|0)|0;c[Ra>>2]=(c[Ra>>2]|0)+(c[Ac>>2]|0);if(Ef(ta,Ia,g,-1,c[Rc>>2]|0)|0){sd=430;break h}c[ub>>2]=c[g>>2];c[ub+4>>2]=Vc;_c(v,12485,ub)|0;Ma=c[Zb>>2]|0;c[Ma>>2]=c[Ma>>2]|ca}else{if((c[Rc>>2]|0)!=1)break;_c(v,81713,vb)|0}while(0)}while(0);E=c[zc>>2]|0}if((E|0)!=3){Pa=E;sd=447;break}do if(!(c[Ac>>2]|0)){if(!(c[Ta>>2]|0))break;if((c[Xb>>2]|0)==0|(c[Wb>>2]|0)==0){sd=437;break}E=c[Zb>>2]|0;c[E>>2]=da|c[E>>2];E=c[zc>>2]|0;if((E|0)!=3){Pa=E;sd=447;break h}else sd=437}else sd=437;while(0);if((sd|0)==437?(sd=0,c[Ta>>2]|0):0)break;if(!(he(a[ea>>0]|0)|0)){sd=439;break}c[zc>>2]=4;c[xa>>2]=0;c[wc>>2]=c[c[vc>>2]>>2];c[Ac>>2]=1;c[va>>2]=2;c[uc>>2]=c[fa>>2];c[Fc>>2]=1;Ma=c[Nc>>2]|0;c[D>>2]=1;Df(8192,Ma,1,ta,Mc)|0;Ma=c[Nc>>2]|0;E=c[Fc>>2]|32768;c[D>>2]=E;Df(8192,Ma,E,ta,Mc)|0;gd(g);c[F>>2]=0;E=he(a[Bc+300+((c[va>>2]|0)*11|0)>>0]|0)|0;c[aa>>2]=E;if((E|0)==1){G=lg(c[wc>>2]|0,c[_b>>2]|0,g,Ia,c[zc>>2]|0,c[uc>>2]|0,c[xc>>2]|0)|0;c[Sa>>2]=(c[Sa>>2]|0)+(c[Ac>>2]|0);E=c[aa>>2]|0}else G=c[F>>2]|0;c[sa>>2]=G;c[F>>2]=G;if(Ef(ta,Ia,g,0-E|0,c[Rc>>2]|0)|0){E=1;D=0;break f}c[wb>>2]=c[g>>2];c[wb+4>>2]=Vc;_c(v,12485,wb)|0;Ma=he(a[Bc+300+((c[va>>2]|0)*11|0)+2>>0]|0)|0;c[aa>>2]=Ma;if((Ma|0)==1){La=c[Nc>>2]|0;Ma=c[Fc>>2]|65536;c[D>>2]=Ma;Df(8192,La,Ma,ta,Mc)|0;gd(g);c[F>>2]=0;Ma=pg(c[wc>>2]|0,g,Ia,c[zc>>2]|0,c[Bc>>2]|0,c[uc>>2]|0,c[xc>>2]|0)|0;c[sa>>2]=Ma;c[F>>2]=Ma;if(Ef(ta,Ia,g,0-(c[aa>>2]|0)|0,c[Rc>>2]|0)|0){E=2;D=0;break f}c[xb>>2]=c[g>>2];c[xb+4>>2]=Vc;_c(v,12485,xb)|0;c[Sa>>2]=(c[Sa>>2]|0)+(c[Ac>>2]|0)}pa=pa+1|0}if((sd|0)==430){E=7;D=0;break}else if((sd|0)==439){Pa=c[zc>>2]|0;sd=447}if((sd|0)==447?!((Pa|0)!=4|(c[yc>>2]|0)!=3|(c[Ac>>2]|0)==0):0){c[zc>>2]=3;c[xa>>2]=1;c[wc>>2]=c[(c[vc>>2]|0)+4>>2];c[Ac>>2]=0;c[uc>>2]=c[Bc+132>>2];if(!(c[Sa>>2]|0)){Kb=c[Zb>>2]|0;c[Kb>>2]=c[Kb>>2]|(wa?4:8)}if(!(c[Ra>>2]|0)){Kb=c[Zb>>2]|0;c[Kb>>2]=c[Kb>>2]|(wa?16:32)}c[Fc>>2]=0}if(!(ua|wa&(m|0)!=0^1)?(c[s+4>>2]|0)!=0:0){c[yb>>2]=Vc;_c(v,12798,yb)|0;if(!(Cf(f,g,j,1,l,0,n,o|1,p,q,r,s,t,u,v,w,x,y,z,A,B,C)|0)){E=0;D=0;break}else D=1}else D=0;if(!qa?c[ra>>2]|0:0)Gf(v);if((o&49152|0)==32768&(D|0)==0){Kb=C&255;sd=a[12582+(Kb>>>4&3)>>0]|0;c[Mb>>2]=a[12582+(Kb&15)>>0];c[Mb+4>>2]=sd;_c(v,12599,Mb)|0}if(!(D|Lb)){if(!(c[s>>2]|0))D=(c[s+4>>2]|0)==0?12579:92409;else D=92409;c[Nb>>2]=D;c[Nb+4>>2]=83461;_c(v,12485,Nb)|0}gd(g);sd=467}else sd=467;while(0);n:do if((sd|0)==467){c[Fc>>2]=0;if(Na){c[uc>>2]=c[Bc+128+(c[xa>>2]<<2)>>2];switch(k|0){case 0:{jd(g,83657,Ob)|0;Sb=c[g>>2]|0;c[Pb>>2]=o&512|0?83461:92409;c[Pb+4>>2]=Sb;c[Pb+8>>2]=Vc;Yc(v,12605,Pb)|0;Pb=c[Nc>>2]|0;c[Bc+100>>2]=16;Sb=Bc+344|0;Df(8496,Pb,16,Sb,Mc)|0;gd(g);c[Bc+112>>2]=0;c[Qb>>2]=12840;jd(g,12798,Qb)|0;if(Ef(Sb,Ia,g,-1,c[Rc>>2]|0)|0){E=1;D=0;break n}c[Rb>>2]=c[g>>2];c[Rb+4>>2]=Vc;Yc(v,12485,Rb)|0;break}case 1:{Qb=c[Nc>>2]|0;c[Bc+100>>2]=131072;Rb=Bc+344|0;Df(8496,Qb,131072,Rb,Mc)|0;c[Sb>>2]=Rb;c[Sb+4>>2]=Vc;Yc(v,12485,Sb)|0;break}default:{}}if((c[s>>2]|0)==0?(T=s+4|0,(c[T>>2]|0)==0):0){R=Bc+100|0;O=Bc+344|0;S=Bc+112|0}else{G=c[Nc>>2]|0;E=Bc+100|0;c[E>>2]=32;F=Bc+344|0;Df(8496,G,32,F,Mc)|0;gd(g);G=Bc+112|0;c[G>>2]=0;D=c[Xb>>2]|0;if(!D)D=0;else D=(c[Vb>>2]|0)==0?0:D;c[Tb>>2]=D;jd(g,85326,Tb)|0;if(Ef(F,Ia,g,-1,c[Rc>>2]|0)|0){E=1;D=0;break}c[Ub>>2]=c[g>>2];c[Ub+4>>2]=Vc;Yc(v,12485,Ub)|0;R=E;O=F;S=G;T=s+4|0}P=Bc+104|0;Q=Bc+408|0;H=Bc+128|0;M=(k|0)==0;I=M?4:8;J=Bc+108|0;K=Bc+472|0;L=M?16:32;M=M?20:40;o:while(1){if(!((c[s>>2]|0)==0?!(c[T>>2]|0):0)){Tb=c[Nc>>2]|0;Ub=(c[Ac>>2]|0?32768:64)|c[Fc>>2];c[R>>2]=Ub;Df(8496,Tb,Ub,O,Mc)|0;gd(g);c[S>>2]=0;c[S>>2]=Eg(f,c[wc>>2]|0,c[_b>>2]|0,g,Ia,c[zc>>2]|0,c[tc>>2]|0,c[uc>>2]|0,c[Ac>>2]|0,c[$b>>2]|0)|0;if(Ef(O,Ia,g,-1,c[Rc>>2]|0)|0){E=1;D=0;break n}c[ac>>2]=c[g>>2];c[ac+4>>2]=Vc;Yc(v,12485,ac)|0}if(!(c[Bc+148+(c[xa>>2]<<2)>>2]|0)){if((c[Rc>>2]|0)==1)Yc(v,81713,cc)|0}else{Tb=c[Nc>>2]|0;Ub=c[Fc>>2]|128;c[R>>2]=Ub;Df(8496,Tb,Ub,O,Mc)|0;gd(g);c[S>>2]=0;c[S>>2]=xg(c[wc>>2]|0,c[_b>>2]|0,g,Ia,c[zc>>2]|0,c[tc>>2]|0,c[uc>>2]|0,c[Ac>>2]|0,c[$b>>2]|0,c[xc>>2]|0)|0;if(Ef(O,Ia,g,-1,c[Rc>>2]|0)|0){E=1;D=0;break n}c[bc>>2]=c[g>>2];c[bc+4>>2]=Vc;Yc(v,12485,bc)|0}do if(!((c[Vb>>2]|0)==0|(c[Xb>>2]|0)==0))if((c[Ac>>2]|0)==0?(c[Bc+156+(c[xa>>2]<<2)>>2]|0)!=0:0){Tb=c[Nc>>2]|0;Ub=c[Fc>>2]|256;c[R>>2]=Ub;Df(8496,Tb,Ub,O,Mc)|0;gd(g);c[S>>2]=0;c[S>>2]=Fg(c[wc>>2]|0,g,Ia,c[zc>>2]|0,c[tc>>2]|0,c[uc>>2]|0,c[xc>>2]|0)|0;if(Ef(O,Ia,g,-1,c[Rc>>2]|0)|0){E=1;D=0;break n}c[dc>>2]=c[g>>2];Yc(v,12798,dc)|0;break}else{if((c[Rc>>2]|0)!=1)break;Yc(v,81713,ec)|0;break}while(0);do if(!(c[Bc+164+(c[xa>>2]<<2)>>2]|0)){if((c[Rc>>2]|0)==1)Yc(v,12579,ic)|0}else{Ub=c[Nc>>2]|0;Tb=c[Fc>>2]|4;c[R>>2]=Tb;Df(8496,Ub,Tb,O,Mc)|0;Tb=c[Nc>>2]|0;Ub=c[R>>2]|512;c[P>>2]=Ub;Df(8496,Tb,Ub,Q,Mc)|0;gd(g);c[S>>2]=0;c[S>>2]=yg(c[wc>>2]|0,c[_b>>2]|0,g,Ia,c[zc>>2]|0,c[tc>>2]|0,c[uc>>2]|0,c[Ac>>2]|0,c[$b>>2]|0,c[xc>>2]|0)|0;if(Ef(Q,Ia,g,-1,c[Rc>>2]|0)|0){E=1;D=0;break n}c[fc>>2]=c[g>>2];c[fc+4>>2]=Vc;Yc(v,12485,fc)|0;if(!(c[Bc+172+(c[xa>>2]<<2)>>2]|0)){if((c[Rc>>2]|0)!=1)break;Yc(v,81713,hc)|0;break}else{Tb=c[Nc>>2]|0;Ub=c[R>>2]|1024;c[P>>2]=Ub;Df(8496,Tb,Ub,Q,Mc)|0;gd(g);c[S>>2]=0;c[S>>2]=zg(f,c[wc>>2]|0,c[_b>>2]|0,g,Ia,c[zc>>2]|0,c[tc>>2]|0,c[uc>>2]|0,c[Ac>>2]|0,c[$b>>2]|0)|0;if(Ef(Q,Ia,g,-1,c[Rc>>2]|0)|0){E=1;D=0;break n}c[gc>>2]=c[g>>2];c[gc+4>>2]=Vc;Yc(v,12485,gc)|0;break}}while(0);while(1){if(!(c[Ac>>2]|0))D=0;else D=(c[c[Zb>>2]>>2]&L|0)!=0;p:do if(!(D|(c[Yb>>2]|0)==0)){D=c[xa>>2]|0;do if(!(c[Bc+196+(D<<2)>>2]|0)){if(c[Bc+204+(D<<2)>>2]|0)break;if(!((c[Vb>>2]|0)==0|(c[Xb>>2]|0)==0)?c[Bc+212+(D<<2)>>2]|0:0)break;if(!(c[Bc+220+(D<<2)>>2]|0))break p;if(c[Bc+268+(D<<2)>>2]|0)break;if(!(c[Bc+276+(D<<2)>>2]|0))break p}while(0);Ub=c[Nc>>2]|0;Tb=c[Fc>>2]|2;c[R>>2]=Tb;Df(8496,Ub,Tb,O,Mc)|0;gd(g);Tb=c[Nc>>2]|0;Ub=c[R>>2]|65536;c[P>>2]=Ub;Df(8496,Tb,Ub,Q,Mc)|0;if(!(c[Bc+196+(c[xa>>2]<<2)>>2]|0)){c[kc>>2]=Q;c[kc+4>>2]=Vc;Yc(v,12485,kc)|0}else{gd(g);c[S>>2]=0;c[S>>2]=Ag(f,c[wc>>2]|0,c[_b>>2]|0,g,Ia,c[zc>>2]|0,c[tc>>2]|0,c[uc>>2]|0,c[Ac>>2]|0,c[$b>>2]|0)|0;if(Ef(Q,Ia,g,-1,c[Rc>>2]|0)|0){E=1;D=0;break n}c[jc>>2]=c[g>>2];c[jc+4>>2]=Vc;Yc(v,12485,jc)|0}do if(!(c[Bc+204+(c[xa>>2]<<2)>>2]|0)){if((c[Rc>>2]|0)!=1)break;Yc(v,81713,mc)|0}else{Tb=c[Nc>>2]|0;Ub=c[R>>2]|128;c[P>>2]=Ub;Df(8496,Tb,Ub,Q,Mc)|0;gd(g);c[S>>2]=0;c[S>>2]=Bg(c[wc>>2]|0,c[_b>>2]|0,g,Ia,c[zc>>2]|0,c[tc>>2]|0,c[uc>>2]|0,c[Ac>>2]|0,c[$b>>2]|0,c[xc>>2]|0)|0;if(Ef(Q,Ia,g,-2,c[Rc>>2]|0)|0){E=1;D=0;break n}c[lc>>2]=c[g>>2];c[lc+4>>2]=Vc;Yc(v,12485,lc)|0}while(0);do if(!((c[Vb>>2]|0)==0|(c[Xb>>2]|0)==0))if(!(c[Bc+212+(c[xa>>2]<<2)>>2]|0)){if((c[Rc>>2]|0)!=1)break;Yc(v,81713,oc)|0;break}else{Tb=c[Nc>>2]|0;Ub=c[R>>2]|256;c[P>>2]=Ub;Df(8496,Tb,Ub,Q,Mc)|0;gd(g);c[S>>2]=0;c[S>>2]=Jg(c[wc>>2]|0,g,Ia,c[zc>>2]|0,c[tc>>2]|0,c[uc>>2]|0,c[$b>>2]|0,c[xc>>2]|0)|0;if(Ef(Q,Ia,g,-2,c[Rc>>2]|0)|0){E=1;D=0;break n}c[nc>>2]=c[g>>2];c[nc+4>>2]=Vc;Yc(v,12485,nc)|0;break}while(0);if(!(c[Bc+220+(c[xa>>2]<<2)>>2]|0)){if((c[Rc>>2]|0)!=1)break;Yc(v,12579,sc)|0;break}Ub=c[Nc>>2]|0;Tb=c[R>>2]|4;c[P>>2]=Tb;Df(8496,Ub,Tb,Q,Mc)|0;Tb=c[Nc>>2]|0;Ub=c[P>>2]|512;c[J>>2]=Ub;Df(8496,Tb,Ub,K,Mc)|0;gd(g);c[S>>2]=0;c[S>>2]=Cg(c[wc>>2]|0,c[_b>>2]|0,g,Ia,c[zc>>2]|0,c[tc>>2]|0,c[uc>>2]|0,c[Ac>>2]|0,c[$b>>2]|0,c[xc>>2]|0)|0;if(Ef(K,Ia,g,-1,c[Rc>>2]|0)|0){E=1;D=0;break n}c[pc>>2]=c[g>>2];Yc(v,12798,pc)|0;if(!(c[Bc+228+(c[xa>>2]<<2)>>2]|0)){if((c[Rc>>2]|0)!=1)break;Yc(v,81713,rc)|0;break}else{Tb=c[Nc>>2]|0;Ub=c[P>>2]|1024;c[J>>2]=Ub;Df(8496,Tb,Ub,K,Mc)|0;gd(g);c[S>>2]=0;c[S>>2]=Dg(f,c[wc>>2]|0,c[_b>>2]|0,g,Ia,c[zc>>2]|0,c[tc>>2]|0,c[uc>>2]|0,c[Ac>>2]|0,c[$b>>2]|0)|0;if(Ef(K,Ia,g,-1,c[Rc>>2]|0)|0){E=1;D=0;break n}c[qc>>2]=c[g>>2];c[qc+4>>2]=Vc;Yc(v,12485,qc)|0;break}}while(0);F=c[zc>>2]|0;E=(c[Xb>>2]|0)==0;G=(F|0)!=3|E;D=c[Wb>>2]|0;if(!(G|(D|0)==0)?(c[B>>2]&M|0)==(M|0):0){sd=540;break o}D=(D|0)==0;if(G|D){sd=543;break o}c[zc>>2]=4;c[xa>>2]=0;c[wc>>2]=c[c[vc>>2]>>2];c[Ac>>2]=1;c[uc>>2]=c[H>>2];c[Fc>>2]=1;gd(g);if(!(c[B>>2]&I))continue o}}if((sd|0)==540){c[Wb>>2]=0;sd=545}else if((sd|0)==543)if(D|(E|((F|0)!=4|(c[yc>>2]|0)!=3)))sd=545;else{c[zc>>2]=3;c[xa>>2]=1;c[wc>>2]=c[(c[vc>>2]|0)+4>>2];c[Ac>>2]=0;c[uc>>2]=c[Bc+132>>2];c[Fc>>2]=0;sd=546}if((sd|0)==545)if(!(c[Ac>>2]|0))sd=546;else sd=585;do if((sd|0)==546){if(!(c[Bc+284+(c[xa>>2]<<2)>>2]|0))D=0;else{yc=c[Nc>>2]|0;Bc=c[Fc>>2]|2048;c[R>>2]=Bc;Df(8496,yc,Bc,O,Mc)|0;gd(g);c[S>>2]=0;c[S>>2]=Gg(c[wc>>2]|0,g,Ia,c[zc>>2]|0,c[tc>>2]|0,c[uc>>2]|0,c[xc>>2]|0)|0;if(Ef(O,Ia,g,-1,c[Rc>>2]|0)|0){E=1;D=0;break n}c[Cc>>2]=c[g>>2];c[Cc+4>>2]=Vc;Yc(v,12485,Cc)|0;D=c[Ac>>2]|0}if((l|0)!=0&(D|0)==0)if((((c[l>>2]|0)!=0?(Ec=l+4|0,(c[Ec>>2]|0)!=0):0)?(Ic=l+8|0,(c[Ic>>2]|0)!=0):0)?(Lc=l+12|0,(c[Lc>>2]|0)!=0):0){K=c[Dc>>2]|0;K=(K|0)>80?80:K;E=c[Nc>>2]|0;F=c[Fc>>2]|8;c[R>>2]=F;Df(8496,E,F,O,Mc)|0;F=c[Nc>>2]|0;E=c[R>>2]|4096;c[P>>2]=E;Df(8496,F,E,Q,Mc)|0;gd(g);E=c[g>>2]|0;c[Gc>>2]=Q;c[Gc+4>>2]=E;Yc(v,12485,Gc)|0;E=c[Ec>>2]|0;F=cp(E)|0;L=g+8|0;G=c[L>>2]|0;c[S>>2]=G;G=K-G|0;H=0;while(1){if((F|0)<=(H|0))break;q:do if((F-H|0)<(G|0))D=F;else{D=H+G|0;while(1){if((H|0)>=(D|0))break q;if(sp(d[E+D>>0]|0)|0)break q;D=D+-1|0}}while(0);if((D|0)<=(H|0))break;sd=D-H|0;ir((c[g>>2]|0)+(c[L>>2]|0)|0,E+H|0,sd|0)|0;a[(c[g>>2]|0)+((c[L>>2]|0)+sd)>>0]=0;sd=c[Rc>>2]|0?92409:83461;c[Hc>>2]=c[g>>2];c[Hc+4>>2]=sd;Yc(v,12485,Hc)|0;H=D}J=(a[Vc>>0]|0)==0;if(!J){c[Jc>>2]=Vc;Yc(v,12798,Jc)|0}gd(g);G=c[Nc>>2]|0;F=c[R>>2]|8192;c[P>>2]=F;Df(8496,G,F,Q,Mc)|0;gd(g);F=c[g>>2]|0;c[Kc>>2]=Q;c[Kc+4>>2]=F;Yc(v,12485,Kc)|0;F=c[Ic>>2]|0;G=cp(F)|0;H=K-(c[S>>2]|0)|0;I=0;while(1){if((G|0)<=(I|0))break;r:do if((G-I|0)<(H|0))D=G;else{E=I+H|0;while(1){D=E+-1|0;if((I|0)>=(D|0))break r;if((a[F+D>>0]|0)==59){D=E;break}else E=D}}while(0);if((D|0)<=(I|0))break;sd=D-I|0;ir(c[g>>2]|0,F+I|0,sd|0)|0;a[(c[g>>2]|0)+sd>>0]=0;c[L>>2]=sd;sd=c[Rc>>2]|0?92409:83461;c[Oc>>2]=c[g>>2];c[Oc+4>>2]=sd;Yc(v,12485,Oc)|0;gd(g);I=D}if(!J){c[Pc>>2]=Vc;Yc(v,12798,Pc)|0}I=c[Nc>>2]|0;H=c[R>>2]|16384;c[P>>2]=H;Df(8496,I,H,Q,Mc)|0;gd(g);H=c[g>>2]|0;c[Qc>>2]=Q;c[Qc+4>>2]=H;Yc(v,12485,Qc)|0;H=c[Lc>>2]|0;I=cp(H)|0;F=K-(c[S>>2]|0)|0;G=0;while(1){if((I|0)<=(G|0))break;s:do if((I-G|0)<(F|0))D=I;else{E=G+F|0;while(1){D=E+-1|0;if((G|0)>=(D|0))break s;if((a[H+D>>0]|0)==59){D=E;break}else E=D}}while(0);if((D|0)<=(G|0))break;sd=D-G|0;ir(c[g>>2]|0,H+G|0,sd|0)|0;a[(c[g>>2]|0)+sd>>0]=0;c[L>>2]=sd;sd=c[Rc>>2]|0?92409:83461;c[Sc>>2]=c[g>>2];c[Sc+4>>2]=sd;Yc(v,12485,Sc)|0;gd(g);G=D}if(J){sd=585;break}c[Tc>>2]=Vc;Yc(v,12798,Tc)|0;sd=585}else sd=586;else sd=585}while(0);if((sd|0)==585?l|0:0)sd=586;if((sd|0)==586?(Xc=c[l+16>>2]|0,Xc|0):0){gd(g);Yc(v,83693,Uc)|0;I=Xc+4|0;K=0;while(1){if((K|0)>=(c[I>>2]|0))break;J=c[(c[Xc>>2]|0)+(K<<2)>>2]|0;Uc=c[J+8>>2]|0;F=c[J+12>>2]|0;c[Zc>>2]=c[J+4>>2];c[Zc+4>>2]=Uc;c[Zc+8>>2]=F;jd(g,12497,Zc)|0;F=J+112|0;c[$c>>2]=a[F>>0]|0?F:12346;jd(g,12612,$c)|0;jg(c[J+20>>2]|0,c[J+212>>2]|0,g);F=J+24|0;if((c[F>>2]|0)>0){jd(g,81769,bd)|0;G=J+216|0;H=0;while(1){E=(c[F>>2]<<1)+-1|0;D=c[G>>2]|0;if((H|0)>=(E|0))break;c[cd>>2]=c[D+(H<<2)>>2];jd(g,12617,cd)|0;H=H+1|0}c[dd>>2]=c[D+(E<<2)>>2];jd(g,12536,dd)|0}if(+N(+(777777.777-+N(+(+h[J+48>>3]))))>1.0e-07){jd(g,12622,ed)|0;D=0;while(1){if((D|0)==3)break;h[fd>>3]=+h[J+48+(D<<3)>>3];jd(g,12624,fd)|0;D=D+1|0}h[hd>>3]=+h[J+72>>3];jd(g,12629,hd)|0}if(+N(+(777777.777-+N(+(+h[J+80>>3]))))>1.0e-07){jd(g,12622,id)|0;D=0;while(1){if((D|0)==3)break;h[kd>>3]=+h[J+80+(D<<3)>>3];jd(g,12624,kd)|0;D=D+1|0}h[ld>>3]=+h[J+104>>3];jd(g,12629,ld)|0}if((K|0)<((c[I>>2]|0)+-1|0))jd(g,11716,md)|0;K=K+1|0}c[nd>>2]=c[g>>2];c[nd+4>>2]=Vc;Yc(v,12485,nd)|0}if(!((k|0)!=0|(m|0)==0|(o&8|0)==0)?(c[T>>2]|0)!=0:0){c[od>>2]=Vc;Yc(v,12798,od)|0;if(!(Cf(f,g,j,1,0,0,n,o|4,p,q,r,s,t,u,v,w,x,y,z,A,B,C)|0)){E=0;D=0;break}}else sd=611;if((sd|0)==611?!Wc:0){if(!(c[s>>2]|0))D=(c[T>>2]|0)==0?12579:92409;else D=92409;c[pd>>2]=D;Yc(v,83156,pd)|0}c[qd>>2]=o&512|0?83461:92409;Yc(v,12798,qd)|0;E=0;D=1}else{E=0;D=1}}while(0);if(c[Ia>>2]|0)Yc(v,12634,rd)|0;if(E){H=(y|0)!=0;if(H){sd=a[y>>0]|0;D=sd<<24>>24?81168:92346;if(sd<<24>>24)if(!z){F=81168;E=y;sd=627}else{F=a[z>>0]|0;G=F;F=F<<24>>24?84228:81168;E=y;sd=625}else sd=623}else{D=92346;sd=623}do if((sd|0)==623)if(!z)if(H){F=92346;E=92346;sd=627;break}else{H=D;E=92346;F=92346;D=92346;break}else{G=a[z>>0]|0;F=92346;E=92346;sd=625;break}while(0);if((sd|0)==625){G=G<<24>>24!=0;if(G|H^1){H=D;D=G?z:92346}else sd=627}if((sd|0)==627){H=D;D=a[y>>0]|0?84217:92346}c[td>>2]=x;c[td+4>>2]=H;c[td+8>>2]=E;c[td+12>>2]=F;c[td+16>>2]=D;ad(w,12672,td)|0;D=0}}else sd=6;while(0);if((sd|0)==6){H=(y|0)!=0;if(H){td=a[y>>0]|0;D=td<<24>>24?81168:92346;if(td<<24>>24)if(!z){F=81168;E=y;sd=14}else{F=a[z>>0]|0;I=F<<24>>24?84228:81168;E=y;sd=12}else sd=10}else{D=92346;sd=10}do if((sd|0)==10)if(!z)if(H){F=92346;E=92346;sd=14;break}else{H=D;E=92346;F=92346;D=92346;break}else{I=92346;E=92346;F=a[z>>0]|0;sd=12;break}while(0);if((sd|0)==12){G=F<<24>>24!=0;if(G|H^1){H=D;F=I;D=G?z:92346}else{F=I;sd=14}}if((sd|0)==14){H=D;D=a[y>>0]|0?84217:92346}c[J>>2]=x;c[J+4>>2]=H;c[J+8>>2]=E;c[J+12>>2]=F;c[J+16>>2]=D;ad(w,12362,J)|0;D=0}i=ud;return D|0}function Df(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;a:do if((d+-1|0)>>>0<2){h=1;j=0;i=-1;while(1){if((j|0)==19)break;l=(h&e|0)==0?i:j;h=h<<1;j=j+1|0;i=l}if((i|0)>-1){switch(d|0){case 1:{h=c[b+(i<<4)+8>>2]|0;break}case 2:{vp(f,c[b+(i<<4)>>2]|0)|0;break a}default:h=12490}vp(f,h)|0;c[g>>2]=c[b+(i<<4)+12>>2]}else k=23}else if((d|0)==3){a[f>>0]=123;a[f+1>>0]=0;j=1;d=0;i=-1;h=0;while(1){if((d|0)==19){e=i;break}if(j&e){if(h|0){l=f+(cp(f)|0)|0;a[l>>0]=58;a[l+1>>0]=0}up(f,c[b+(d<<4)+4>>2]|0)|0;i=d;h=h+1|0}j=j<<1;d=d+1|0}if(!h){a[f>>0]=63;a[f+1>>0]=63;a[f+2>>0]=63;a[f+3>>0]=0;break}h=f+(cp(f)|0)|0;a[h>>0]=125;a[h+1>>0]=0;h=b+(e<<4)|0;i=c[h>>2]|0;j=cp(i)|0;d=cp(f)|0;if(!d)vp(f,i)|0;else{jr(f+j|0,f|0,d+1|0)|0;ir(f|0,c[h>>2]|0,j|0)|0}c[g>>2]=c[b+(e<<4)+12>>2]}else k=23;while(0);if((k|0)==23){a[f>>0]=63;a[f+1>>0]=63;a[f+2>>0]=63;a[f+3>>0]=0}return f|0}function Ef(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;if(!(c[d>>2]|0))if(((f|0)<0?!((g|0)==0|((f|0)>-2?(a[c[e>>2]>>0]|0)==0:0)):0)?(h=cp(b)|0,(h|0)>0):0){id(e,h+4|0)|0;g=c[e>>2]|0;f=e+8|0;jr(g+h|0,g|0,(c[f>>2]|0)+1|0)|0;ir(c[e>>2]|0,b|0,h|0)|0;c[f>>2]=cp(c[e>>2]|0)|0;h=0}else h=0;else h=1;return h|0}function Ff(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=c[a>>2]|0;a=c[a+4>>2]|0;e=(g|0)<(a|0)?g:a;f=c[b>>2]|0;b=c[b+4>>2]|0;d=(f|0)<(b|0)?f:b;a=(g|0)>(a|0)?g:a;b=(f|0)>(b|0)?f:b;do if((e|0)>=(d|0))if((e|0)>(d|0))a=1;else{if((e|0)==(d|0)){if((a|0)<(b|0)){a=-1;break}if((a|0)>(b|0)){a=1;break}}a=0}else a=-1;while(0);return a|0}function Gf(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=i;i=i+16|0;u=w;o=c[b>>2]|0;p=Hf(o)|0;if(p|0){s=b+8|0;q=c[s>>2]|0;t=Dq(q+1|0,1)|0;r=q+-1|0;g=0;e=0;d=0;l=0;m=48;f=0;a:while(1){k=(e|0)==0;j=(e|0)==0;e=f;while(1){if((g|0)>=(q|0))break a;f=(g|0)==(r|0);h=o+g|0;if(!e){a[t+d>>0]=a[h>>0]|0;d=d+1|0;if(k)e=0;else e=(a[h>>0]|0)==40&1}else if(!j)e=(a[h>>0]|0)==45?0:e;if(f|(a[h>>0]|0)==47){j=f;k=g;n=e;break}g=g+1|0}e=j&1;l=(e^1)+l|0;b:do if(m<<24>>24==102|((l|0)==2|j&(l|0)==1)){e=e+k|0;if((a[o+(e+-1)>>0]|0)==122?(a[o+(e+-2)>>0]|0)==90:0){e=e+-3|0;d=d+-2|0;while(1){if((e|0)<=-1){e=d;break}if((a[o+e>>0]|0)==46){e=d;break}e=e+-1|0;d=d+-1|0}d=e+-1|0;e=t+(e+-2)|0;if(j){a[e>>0]=0;break}else{a[e>>0]=47;break}}}else if(j|(l|0)>2){switch(m<<24>>24){case 102:case 112:case 115:case 122:break b;default:{}}h=m<<24>>24==109?46:59;f=e+k|0;g=0;while(1){e=f+-1|0;if((f|0)<=0)break;if(!((g|0)<(p|0)?(a[o+e>>0]|0)==(h|0):0))break;f=e;g=g+1|0;d=d+-1|0}if(j){v=31;break a}a[t+(d+-1)>>0]=47}while(0);g=k+1|0;m=a[o+g>>0]|0;f=m<<24>>24==114;e=f?0:m<<24>>24==122&1;l=f?1:l;f=n}if((v|0)==31)a[t+d>>0]=0;c[s>>2]=0;c[u>>2]=t;_c(b,12798,u)|0;Cq(t)}i=w;return}function Hf(b){b=b|0;var c=0,e=0,f=0,g=0;a:do if(!b)c=0;else{f=cp(b)|0;g=0;e=0;c=0;while(1){if((g|0)>=(f|0))break a;e=((a[b+g>>0]|0)==47&1)+e|0;if((e|0)==2){if((a[b+(g+-1)>>0]|0)!=122)break a;if((a[b+(g+-2)>>0]|0)!=90)break a;c=g+-3|0;while(1){if((c|0)<=-1)break;if(((d[b+c>>0]|0)+-48|0)>>>0>=10)break;c=c+-1|0}c=Rp(b+c+1|0,0,10)|0}g=g+1|0}}while(0);return c|0}function If(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+160|0;m=s+4|0;p=s;q=d+16|0;c[q>>2]=0;r=d+20|0;c[r>>2]=0;c[p>>2]=0;k=b+64|0;f=c[k>>2]|0;n=b+12|0;if(f){j=0;while(1){h=Jf(c[n>>2]|0,f,p,m,142)|0;if(!h)break;f=c[k>>2]|0;j=h+j|0}f=j+1|0;h=Bq(f)|0;c[d+12>>2]=h;c[p>>2]=0;if(((h|0)!=0?(j|0)==(Jf(c[n>>2]|0,c[k>>2]|0,p,h,f)|0):0)?(c[p>>2]|0)==(c[n>>2]|0):0){f=c[k>>2]|0;if(!f)l=9;else{Cq(f);c[k>>2]=0;l=9}}else f=-1}else l=9;if((l|0)==9){c[p>>2]=0;h=c[n>>2]|0;j=0;while(1){f=Kf(a,h,c[b>>2]|0,p,m,142,e)|0;if(!f){f=j;break}f=f+j|0;h=c[n>>2]|0;if(!h)break;else j=f}h=f+1|0;j=Bq(h)|0;c[d+4>>2]=j;c[p>>2]=0;if(((j|0)!=0?(f|0)==(Kf(a,c[n>>2]|0,c[b>>2]|0,p,j,h,e)|0):0)?(g=c[p>>2]|0,(g|0)==(c[n>>2]|0)):0){c[p>>2]=1;h=0;while(1){f=Lf(a,g,c[b>>2]|0,p,m,142,0)|0;if(!f){f=h;break}f=f+h|0;g=c[n>>2]|0;if(!g)break;else h=f}g=f+2|0;h=Bq(g)|0;c[d+8>>2]=h;c[p>>2]=1;if(((h|0)!=0?(f|0)==(Lf(a,c[n>>2]|0,c[b>>2]|0,p,h,g,e)|0):0)?(o=c[p>>2]|0,(o|0)==(c[n>>2]|0)):0){c[d>>2]=o;f=c[b+68>>2]|0;if((f|0?(c[f+4>>2]|0)>0:0)?c[f+16>>2]|0:0)c[q>>2]=f;f=c[b+72>>2]|0;if(!f)f=0;else{c[r>>2]=f;f=0}}else f=-1}else f=-1}i=s;return f|0}function Jf(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=i;i=i+96|0;C=E;B=E+12|0;z=E+56|0;y=E+8|0;x=E+4|0;A=E+24|0;u=B+10|0;v=B;w=A;k=0;j=c[f>>2]|0;while(1){if((j|0)>=(d|0))break;n=A;o=e+(j<<5)|0;p=n+32|0;do{a[n>>0]=a[o>>0]|0;n=n+1|0;o=o+1|0}while((n|0)<(p|0));t=0;l=0;s=0;while(1){if((t|0)>=30){m=s;break}n=B;o=A+t|0;p=n+10|0;do{a[n>>0]=a[o>>0]|0;n=n+1|0;o=o+1|0}while((n|0)<(p|0));a[u>>0]=0;Go(B,x)|0;if(!(+N(+(+zq(B,y)))<1.0e-06)){o=(c[y>>2]|0)-v|0;c[x>>2]=o;m=op(B,101)|0;c[y>>2]=m;if(!m){m=op(B,69)|0;c[y>>2]=m;if(!m){m=op(B,100)|0;c[y>>2]=m;if(!m){m=op(B,68)|0;c[y>>2]=m;if(!m)n=o;else D=11}else D=11}else D=11}else D=11;do if((D|0)==11){D=0;o=m-v|0;m=m+1|0;n=Rp(m,y,10)|0;if(!n){c[x>>2]=o;n=o;break}else{c[C>>2]=n;n=o+1+(qq(m,85326,C)|0)|0;c[x>>2]=n;break}}while(0);m=a[B>>0]|0;if(m<<24>>24==46)m=0;else m=((m&255)+-48|0)>>>0>9;r=m&1;p=op(B,46)|0;c[y>>2]=p;p=(p|0)==0?o:p-v|0;q=o+-1|0;m=q;while(1){if((p|0)>=(m|0))break;if((a[B+m>>0]|0)!=48)break;m=m+-1|0}m=(((m|0)==(p|0))<<31>>31)+m|0;if((m|0)<(q|0)){jr(B+m+1|0,B+q+1|0,n-q|0)|0;n=n+1-o+m|0;c[x>>2]=n}m=r;while(1){if((m|0)>=(n|0))break;if((a[B+m>>0]|0)!=48)break;m=m+1|0}if((r|0)<(m|0)){jr(B+r|0,B+m|0,n-r|0)|0;n=r-m+n|0;c[x>>2]=n;m=s}else m=s}else{b[B>>1]=48;c[x>>2]=1;n=1;m=s+1|0}if(!l)l=0;else{a[z+l>>0]=44;l=l+1|0}ir(z+l|0,B|0,n|0)|0;t=t+10|0;l=l+n|0;s=m}if((l|0)<32)er(z+l|0,0,32-l|0)|0;n=A;o=z;p=n+32|0;do{a[n>>0]=a[o>>0]|0;n=n+1|0;o=o+1|0}while((n|0)<(p|0));if((m|0)!=3){l=lp(A,0,32)|0;if(!l)n=32;else n=l-w|0}else n=0;l=n+k|0;m=l+1|0;if((m|0)>=(h|0))break;if(n|0)ir(g+k|0,A|0,n|0)|0;a[g+l>>0]=59;k=m;j=j+1|0}a[g+k>>0]=0;c[f>>2]=j;i=E;return k|0}function Kf(f,g,h,j,k,l,m){f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;K=i;i=i+144|0;H=K+56|0;F=K+48|0;E=K+40|0;D=K+32|0;J=K+24|0;I=K+16|0;G=K+8|0;o=K;C=K+104|0;B=K+64|0;n=c[j>>2]|0;if(!n){n=c[m+292>>2]|0;if(!(n&1))n=n&2|0?12346:92409;else n=12726;c[o>>2]=g;c[o+4>>2]=n;n=qq(k,12728,o)|0;m=c[j>>2]|0}else{m=n;n=0}while(1){if((m|0)>=(g|0))break;y=h+(m*176|0)|0;x=h+(m*176|0)+137|0;a:do if(a[x>>0]|0){u=h+(m*176|0)+8|0;s=h+(m*176|0)+92|0;v=h+(m*176|0)+48|0;p=0;o=0;w=0;r=0;while(1){if((w|0)>=4)break;t=h+(m*176|0)+138+(w<<1)|0;L=(e[t>>1]|0)+65535|0;q=L&65535;if((mo(u,L&65535,a[s>>0]|0)|0)!=0?(A=b[h+(q*176|0)+48>>1]|0,A<<16>>16==(b[t>>1]|0)):0){b[B+(o<<1)>>1]=A;o=o+1|0}else{if((q|0)!=(m|0)){v=0;break a}if((b[v>>1]|0)!=(b[t>>1]|0)){v=0;break a}p=p+1|0;r=w}w=w+1|0}if((p|0)<2&(p+o|0)==4){q=ih(f,B,o,2,12)|0;o=a[x>>0]|0;p=o<<24>>24;if((o+-1&255)<2){v=2-((q+r+p|0)%2|0)|0;break}else{v=(o+-3&255)<2?p:0;break}}else v=0}else{s=h+(m*176|0)+92|0;v=0}while(0);p=cp(y)|0;ir(C|0,y|0,p|0)|0;o=vj(y,0,0)|0;u=h+(m*176|0)+6|0;q=h+(m*176|0)+99|0;t=h+(m*176|0)+100|0;o=co(d[u>>0]|0,a[q>>0]|0,a[t>>0]|0,a[h+(m*176|0)+93>>0]|0,o,a[h+(m*176|0)+94>>0]|0,a[s>>0]|0)|0;if(!o){q=a[q>>0]|0;if(!(q<<24>>24)){q=a[t>>0]|0;if(!(q<<24>>24)){if(!((a[h+(m*176|0)+98>>0]|0)==0?!(v|0?1:((a[h+(m*176|0)+96>>0]|0)+(a[h+(m*176|0)+95>>0]|0)|0)!=(0-(a[h+(m*176|0)+97>>0]|0)|0)):0)){o=p;z=30}}else{o=p;z=31}}else{r=p;z=28}}else{c[G>>2]=(o|0)>0?o:0;o=(qq(C+p|0,85326,G)|0)+p|0;q=a[q>>0]|0;if(!(q<<24>>24))z=30;else{r=o;z=28}}if((z|0)==28){L=q<<24>>24;o=r+1|0;a[C+r>>0]=q<<24>>24>0?43:45;q=q<<24>>24>-1?L:0-L|0;if((q|0)>1){c[I>>2]=q;o=(qq(C+o|0,85326,I)|0)+o|0;z=30}else z=30}if((z|0)==30){q=a[t>>0]|0;if(!(q<<24>>24))z=32;else z=31}if((z|0)==31){c[J>>2]=q<<24>>24;o=(qq(C+o|0,12733,J)|0)+o|0;z=32}b:do if((z|0)==32){z=0;r=a[h+(m*176|0)+98>>0]|0;s=r<<24>>24;if(r<<24>>24){q=ko(d[u>>0]|0)|0;if(r<<24>>24!=1)q=((r<<24>>24>0)<<31>>31)+s+q|0;c[D>>2]=(o|0)==(p|0)?90921:92409;c[D+4>>2]=q;o=(qq(C+o|0,12737,D)|0)+o|0}if(v){r=C+o|0;s=(o|0)==(p|0)?90921:92409;if((v|0)!=1)if((v|0)!=2)if((v|0)==3)q=12747;else q=(v|0)==4?85254:92409;else q=12745;else q=12743;c[E>>2]=s;c[E+4>>2]=q;o=(qq(r,12485,E)|0)+o|0}if(((a[h+(m*176|0)+96>>0]|0)+(a[h+(m*176|0)+95>>0]|0)|0)==(0-(a[h+(m*176|0)+97>>0]|0)|0))p=o;else{s=0;while(1){if((s|0)==3){p=o;break b}q=a[h+(m*176|0)+95+s>>0]|0;r=q<<24>>24;if(q<<24>>24){L=a[83760+s>>0]|0;c[F>>2]=(o|0)==(p|0)?90921:92409;c[F+4>>2]=L;o=(qq(C+o|0,12749,F)|0)+o|0;if(q<<24>>24>1){c[H>>2]=r;o=(qq(C+o|0,85326,H)|0)+o|0}}s=s+1|0}}}while(0);o=p+n|0;if((o|0)>=(l|0))break;ir(k+n|0,C|0,p|0)|0;L=m+1|0;a[k+o>>0]=0;c[j>>2]=L;n=o;m=L}i=K;return n|0}function Lf(f,g,h,j,k,l,m){f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;Z=i;i=i+224|0;Y=Z;X=Z+80|0;Q=Z+40|0;V=Z+36|0;R=Z+32|0;T=Z+28|0;W=Z+24|0;S=Z+20|0;U=Z+16|0;N=m+16|0;O=f+12|0;n=0;m=c[j>>2]|0;while(1){if((m|0)>=(g|0))break;M=h+(m*176|0)+92|0;o=a[M>>0]|0;if(o<<24>>24>1){o=o<<24>>24;p=0;while(1){if((p|0)>=(o|0))break;b[Q+(p<<1)>>1]=p;p=p+1|0}c[O>>2]=h+(m*176|0)+8;ih(f,Q,o,2,9)|0}else b[Q>>1]=0;J=m&65535;K=h+(m*176|0)+152|0;L=0;p=0;while(1){if((L|0)>=(a[M>>0]|0))break;s=e[Q+(L<<1)>>1]|0;I=e[h+(m*176|0)+8+(s<<1)>>1]|0;if((I|0)<(m|0)){o=a[h+(m*176|0)+52+s>>0]|0;a:do switch(d[h+(m*176|0)+72+s>>0]|0){case 1:switch(o|0){case 1:{H=112;break a}case -1:{H=80;break a}case 6:{H=110;break a}case -6:{H=78;break a}case 4:{H=118;break a}case -4:{H=86;break a}default:{H=115;break a}}case 2:{switch(o|0){case -3:case 3:{H=119;break a}default:{}}H=100;break}case 3:{H=116;break}case 4:{H=97;break}default:H=115}while(0);t=h+(I*176|0)+8|0;t=(mo(t,J,a[h+(I*176|0)+92>>0]|0)|0)-t>>1;b:do if(!(a[K>>0]|0))r=0;else{o=0;while(1){if((o|0)>=3){r=0;break b}if(!(a[h+(m*176|0)+152+o>>0]|0)){r=0;break b}if((s|0)==(a[h+(m*176|0)+146+o>>0]|0))break;else o=o+1|0}r=hi(h,m,s,V,R,T)|0}while(0);c:do if(a[h+(I*176|0)+152>>0]|0){o=0;while(1){if((o|0)>=3){o=0;G=34;break c}if(!(a[h+(I*176|0)+152+o>>0]|0)){o=0;G=34;break c}if((t|0)==(a[h+(I*176|0)+146+o>>0]|0))break;else o=o+1|0}o=hi(h,I,t,W,S,U)|0;if((r|0)==1&(o|0)==1){q=0;G=35}else G=34}else{o=0;G=34}while(0);d:do if((G|0)==34)if(!((r|0)>1?(m|0)>(c[V>>2]|0):0))if((o|0)>1?(P=c[W>>2]|0,(I|0)>(P|0)):0){c[V>>2]=P;c[R>>2]=c[S>>2];c[T>>2]=c[U>>2];q=0;r=-1;while(1){if((q|0)>=3){v=I;s=t;q=r;G=45;break d}if(!(a[h+(I*176|0)+152+q>>0]|0)){v=I;s=t;q=r;G=45;break d}G=(a[h+(I*176|0)+146+q>>0]|0)==(t|0)?q:r;q=q+1|0;r=G}}else{r=0;o=0;G=77}else{q=0;G=35}while(0);e:do if((G|0)==35)while(1){if((q|0)>=3){o=r;v=m;q=-1;G=45;break e}if(!(a[h+(m*176|0)+152+q>>0]|0)){o=r;v=m;q=-1;G=45;break e}if((a[h+(m*176|0)+146+q>>0]|0)==(s|0)){o=r;v=m;G=45;break e}q=q+1|0;G=35}while(0);f:do if((G|0)==45){G=0;if(o){z=a[h+(v*176|0)+152+q>>0]|0;A=z&7;D=z>>>3;F=D&7;w=a[(c[T>>2]|0)+(h+((c[V>>2]|0)*176|0)+152)>>0]|0;x=w&7;C=w>>>3;E=C&7;y=(x+-1|A+-1)>>>0<2;B=(E+-1|F+-1)>>>0<2;do if(y|B){t=h+(v*176|0)+92|0;u=0;o=g;while(1){if((u|0)>=(a[t>>0]|0))break;do if((u|0)!=(s|0)){r=e[h+(v*176|0)+8+(u<<1)>>1]|0;if(B){if(!((r|0)<(o|0)&(ho(d[h+(r*176|0)+6>>0]|0)|0)==0))break}else if((r|0)>=(o|0))break;o=r}while(0);u=u+1|0}t=(o|0)<(g|0);if(t)s=(o|0)!=(e[h+(v*176|0)+8+(a[h+(v*176|0)+149+q>>0]<<1)>>1]|0)&1;else{ld(N,12754)|0;s=0}r=0;o=g;while(1){q=c[V>>2]|0;if((r|0)>=(a[h+(q*176|0)+92>>0]|0))break;do if((r|0)!=(c[R>>2]|0)){q=e[h+(q*176|0)+8+(r<<1)>>1]|0;if(B){if(!((q|0)<(o|0)&(ho(d[h+(q*176|0)+6>>0]|0)|0)==0))break}else if((q|0)>=(o|0))break;o=q}while(0);r=r+1|0}if((o|0)>=(g|0)){ld(N,12754)|0;r=0;o=0;G=77;break f}o=(o|0)!=(e[h+(q*176|0)+8+(a[(c[T>>2]|0)+(h+(q*176|0)+149)>>0]<<1)>>1]|0)&1;if(!t){r=0;o=0;G=77;break f}if(y)r=2-(w+z+s+o&1)|0;else r=A>>>0>>0?A:x;if(B){o=2-(C+D+s+o&1)|0;break}if((F|0)!=0&(E|0)!=0)o=F>>>0>>0?F:E;else o=0}else{q=(A|0)!=0&(x|0)!=0?(A>>>0>>0?A:x):0;o=(F|0)!=0&(E|0)!=0?(F>>>0>>0?F:E):0;if((q|0)!=0|(o|0)==0)r=q;else{r=4;G=77;break f}}while(0);q=X+p|0;if((r|0)!=1)if((r|0)!=2)if((r|0)==3)r=12747;else G=81;else r=12812;else r=12805}else{r=0;o=0;G=77}}while(0);if((G|0)==77){q=X+p|0;G=81}if((G|0)==81)r=(r|0)==4?85254:92409;if((o|0)!=1)if((o|0)!=2)if((o|0)==3)o=12747;else o=(o|0)==4?85254:92409;else o=12812;else o=12805;c[Y>>2]=H;c[Y+4>>2]=r;c[Y+8>>2]=o;c[Y+12>>2]=I+1;p=(qq(q,12789,Y)|0)+p|0}L=L+1|0}o=p+n|0;if((o+2|0)>=(l|0))break;ir(k+n|0,X|0,p|0)|0;a[k+o>>0]=59;n=o+1|0;m=m+1|0}a[k+n>>0]=0;c[j>>2]=(g|0)>0?m:0;i=Z;return n|0}function Mf(a){a=a|0;var b=0,d=0;if(a|0){d=a+4|0;Cq(c[d>>2]|0);b=a+8|0;Cq(c[b>>2]|0);a=a+12|0;Cq(c[a>>2]|0);c[d>>2]=0;c[b>>2]=0;c[a>>2]=0}return}function Nf(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;a:do if(d){switch(e|0){case 8:{h=c[d+28>>2]|0;if((((h|0)>0?(n=c[d+40>>2]|0,n|0):0)?(o=c[d+32>>2]|0,o|0):0)?(i=c[d+36>>2]|0,i|0):0){if(!f){h=(g|0)==1;break a}if((((((((g|0)==8?(h|0)==(c[f+28>>2]|0):0)?(j=c[f+40>>2]|0,j|0):0)?(k=c[f+32>>2]|0,k|0):0)?(l=c[f+36>>2]|0,l|0):0)?(m=h<<1,(hp(o,k,m)|0)==0):0)?(hp(i,l,m)|0)==0:0)?(hp(n,j,h)|0)==0:0){h=1;break a}}h=0;break a}case 2:{m=0;break}default:{h=(e|0)==4;if(h)m=h&1;else{h=0;break a}}}p=c[d>>2]|0;if((p|0)>0){i=(m|0)!=0;if(i){if(!(c[d+20>>2]|0)){h=0;break}h=d+12|0;e=d+16|0}else{h=d+4|0;e=d+8|0}o=c[h>>2]|0;n=c[e>>2]|0;if((o|0)!=0&(n|0)!=0){if(!f){if((g|0)==1){if(!i){h=1;break}if(c[d+20>>2]|0){h=1;break}}h=0;break}if((g|0)!=2){h=(g|0)==4;if(h)j=h&1;else{h=0;break}}else j=0;if((p|0)==(c[f>>2]|0)){if(!j){if(i?(c[f+20>>2]|0)==0:0){h=0;break}h=f+4|0;e=f+8|0}else{if(!(c[f+20>>2]|0)){h=0;break}if(!(c[d+20>>2]|0)){h=0;break}h=f+12|0;e=f+16|0}l=c[h>>2]|0;k=c[e>>2]|0;if((l|0)!=0&(k|0)!=0){if((m|0)==(j|0)){if(hp(n,k,p)|0){h=0;break}h=(hp(o,l,p<<1)|0)==0;break}else{e=0;h=0}while(1){if((e|0)>=(p|0))break;if((b[o+(e<<1)>>1]|0)!=(b[l+(e<<1)>>1]|0))break;i=a[n+e>>0]|0;j=a[k+e>>0]|0;if(((i+-1<<24>>24|j+-1<<24>>24)&255)>=2){if(i<<24>>24!=j<<24>>24)break}else{if(((j<<24>>24)+(i<<24>>24)|0)!=3)break;h=h+1|0}e=e+1|0}h=(p|0)==(e|0)&(h|0)>0}else h=0}else h=0}else h=0}else h=0}else h=0;while(0);return h&1|0}function Of(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;do if(((a|0)!=0&(b|0)!=0?(c[a+76>>2]|0)==0:0)?(c[b+76>>2]|0)==0:0){f=c[a+48>>2]|0;if((f|0)<=0?(c[a+56>>2]|0)<=0:0){d=0;break}if((f|0)==(c[b+48>>2]|0)?(g=c[a+56>>2]|0,(g|0)==(c[b+56>>2]|0)):0){if(f|0){d=c[a+52>>2]|0;if(!d){d=0;break}e=c[b+52>>2]|0;if(!e){d=0;break}if(hp(d,e,f*10|0)|0){d=0;break}}if(g){d=c[a+60>>2]|0;if((d|0)!=0?(h=c[b+60>>2]|0,(h|0)!=0):0)d=(hp(d,h,g*10|0)|0)==0;else d=0}else d=1}else d=0}else d=0;while(0);return d&1|0}function Pf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;do if((a|0)!=0&(d|0)!=0){do if(!(b&1&e)){if((((((e|b)&1|0)==0?(f=c[a+4>>2]|0,(f|0)>0):0)?(f|0)==(c[d+4>>2]|0):0)?(c[a+72>>2]|0)==0:0)?(c[d+72>>2]|0)==0:0){if(b&2)if(!(c[a+12>>2]|0))a=0;else a=c[a+44>>2]|0;else a=c[a+36>>2]|0;if(!(e&2)){g=f;h=a;j=d+36|0;k=28;break}if(c[d+12>>2]|0){g=f;h=a;j=d+44|0;k=28}}}else{f=c[a+8>>2]|0;if((((f|0)>0?(f|0)==(c[d+8>>2]|0):0)?(c[a+72>>2]|0)==0:0)?(c[d+72>>2]|0)==0:0){if(b&2)if(!(c[a+12>>2]|0))a=0;else a=c[a+48>>2]|0;else a=c[a+40>>2]|0;if(!(e&2)){g=f;h=a;j=d+40|0;k=28;break}if(c[d+12>>2]|0){g=f;h=a;j=d+48|0;k=28}}}while(0);if((((k|0)==28?(i=c[j>>2]|0,(h|0)!=0&(i|0)!=0):0)?(hp(h,i,g<<1)|0)==0:0)?Qf(h,g)|0:0){a=1;break}a=0}else a=0;while(0);return a|0}function Qf(a,b){a=a|0;b=b|0;var c=0,d=0;a:do if(!a)a=0;else{d=0;while(1){if((d|0)>=(b|0)){a=0;break a}b:do if((d|0)==((e[a+(d<<1)>>1]|0)+-1|0)){c=d;while(1){if((c|0)>=(b|0))break b;if((d|0)<(c|0)?(d|0)==((e[a+(c<<1)>>1]|0)+-1|0):0){a=1;break a}else c=c+1|0}}while(0);d=d+1|0}}while(0);return a|0}function Rf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;a:do if(((((a|0)!=0&(d|0)!=0?(f=c[a+4>>2]|0,(f|0)>=1):0)?(f|0)==(c[d+4>>2]|0):0)?(c[a+72>>2]|0)==0:0)?(c[d+72>>2]|0)==0:0){if(b&2|0?(c[a+12>>2]|0)==0:0){a=0;break}if(e&2|0?(c[d+12>>2]|0)==0:0){a=0;break}switch(b|0){case 0:{a=a+20|0;break}case 2:{a=a+24|0;break}case 1:{a=a+28|0;break}case 3:{a=a+32|0;break}default:{a=0;break a}}b=c[a>>2]|0;switch(e|0){case 0:{a=d+20|0;break}case 2:{a=d+24|0;break}case 1:{a=d+28|0;break}case 3:{a=d+32|0;break}default:{a=0;break a}}a=c[a>>2]|0;if((b|0)!=0&(a|0)!=0?(hp(b,a,f<<1)|0)==0:0){a=1;break}a=0}else a=0;while(0);return a|0}function Sf(b,c){b=b|0;c=c|0;var d=0,e=0;a:do if((b|0)!=0&(c|0)>0){d=0;e=0;while(1){if(!((e|0)<(c|0)&(d|0)==0))break a;if((a[b+(e*3|0)>>0]|0)==0?(a[b+(e*3|0)+1>>0]|0)==0:0)d=(a[b+(e*3|0)+2>>0]|0)!=0;else d=1;d=d&1;e=e+1|0}}else d=0;while(0);return d|0}function Tf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;if((((a|0)!=0&(b|0)!=0?(e=c[a+4>>2]|0,(e|0)==(c[b+4>>2]|0)):0)?(f=c[a+56>>2]|0,(Sf(f,e)|0)!=0):0)?(d=c[b+56>>2]|0,(d|0)!=0):0)d=(hp(f,d,e*3|0)|0)==0;else d=0;return d&1|0}function Uf(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0;j=i;i=i+2064|0;h=j;g=j+8|0;do if((a|0)!=1?(c[f>>2]|0)==0:0){if(!(e&2))a=Wf(g,2048,0,a)|0;else a=Vf(g,2048,0,a)|0;if(((cp(b)|0)+a|0)>=2048){c[f>>2]=c[f>>2]|1;a=0;break}vp(g+a|0,b)|0;c[h>>2]=g;a=jd(d,12798,h)|0;if((a|0)==-1){c[f>>2]=c[f>>2]|1;a=-1}}else a=0;while(0);i=j;return a|0}function Vf(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;a:do if((c|0)>=2){f=b;while(1){if(!d)break;g=a[d>>0]|0;if(!(g<<24>>24))break;c=c+-1|0;if(!c){d=-1;break a}a[f>>0]=g;d=d+1|0;f=f+1|0}if((c|0)>=2){if(!e){a[f>>0]=46;a[f+1>>0]=0;d=1;break}if((e|0)<0){a[f>>0]=45;d=0-e|0;c=c+-1|0;f=f+1|0}else d=e;g=d;d=f;while(1){if(!g)break;c=c+-1|0;if(!c){d=-1;break a}e=(g|0)%27|0;a[d>>0]=(e|0)==0?64:e+96&255;g=(g|0)/27|0;d=d+1|0}if((c|0)>=1){a[d>>0]=0;me(f);a[f>>0]=Zp(a[f>>0]|0)|0;d=d-b|0}else d=-1}else d=-1}else d=-1;while(0);return d|0}function Wf(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;a:do if((c|0)>=2){f=b;while(1){if(!d)break;g=a[d>>0]|0;if(!(g<<24>>24))break;c=c+-1|0;if(!c){d=-1;break a}a[f>>0]=g;d=d+1|0;f=f+1|0}if((c|0)>=2){if(!e){d=f+1|0;a[f>>0]=48;a[d>>0]=0;d=d-b|0;break}if((e|0)<0){a[f>>0]=45;d=0-e|0;c=c+-1|0;f=f+1|0}else d=e;g=d;d=f;while(1){if(!g)break;c=c+-1|0;if(!c){d=-1;break a}e=(g|0)%10|0;a[d>>0]=(e|0)==0?48:e+48&255;g=(g|0)/10|0;d=d+1|0}if((c|0)>=1){a[d>>0]=0;me(f);d=d-b|0}else d=-1}else d=-1}else d=-1;while(0);return d|0}function Xf(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=i;i=i+16|0;f=g;if(((b|0)!=0?(a[b>>0]|0)!=0:0)?(c[e>>2]|0)==0:0){d=jd(d,b,f)|0;if((d|0)==-1){c[e>>2]=c[e>>2]|1;d=-1}}else d=0;i=g;return d|0}function Yf(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+2064|0;l=m+8|0;k=m;j=m+16|0;do if(((b|0)!=0?(a[b>>0]|0)!=0:0)?(c[f>>2]|0)==0:0){g=e+8|0;h=c[g>>2]|0;if((d|0)!=1){d=Wf(j,2048,0,d)|0;if((d|0)==-1){c[f>>2]=c[f>>2]|1;d=-1;break}if((d|0)>0?(c[k>>2]=j,(jd(e,12801,k)|0)==-1):0)c[f>>2]=c[f>>2]|1}c[l>>2]=b;if((jd(e,12801,l)|0)==-1)c[f>>2]=c[f>>2]|1;d=(c[g>>2]|0)-h|0}else d=0;while(0);i=m;return d|0}function Zf(d,e,f,g,h,j,k,l,m){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=i;i=i+2064|0;x=y+8|0;n=y;w=y+16|0;p=c[m>>2]|0;q=(h|0)==0;s=(l&2|0)!=0;t=(l&8|0)==0;u=(l&42|0)==42;do if((f|0)<2)e=0;else{v=k+8|0;r=c[v>>2]|0;o=ne(d,e,f,h,j,l)|0;if(!o){c[m>>2]=(c[m>>2]|0)+1;e=0;break}e=(p|0)==0;if((g|0)!=0&e)jd(k,12844,n)|0;a:do if(e){g=(h|0)!=0;h=0;f=0;while(1){e=b[o+(h<<1)>>1]|0;if(!(e<<16>>16))break a;j=(e&65535)>32766?0:e&65535;d=b[o+(h+1<<1)>>1]|0;d=d<<16>>16==0?0:(d&65535)+-16|0;l=b[o+(h+2<<1)>>1]|0;do if(t)if(l<<16>>16==0|s&l<<16>>16==45)e=0;else{a[w>>0]=l;e=1}else{if(!u){if(!((g|(h|0)>3)&((l<<16>>16==0|s&l<<16>>16==44)^1))){e=0;break}a[w>>0]=l;e=1;break}if(q&((h|0)>3&l<<16>>16==45)){if(!f){l=h;f=0}else{e=0;f=f+-1|0;break}while(1){if(!(e<<16>>16))break;if((b[o+(l+2<<1)>>1]|0)!=45)break;n=l+3|0;e=b[o+(n<<1)>>1]|0;l=n;f=f+1|0}if(!f)e=0;else e=Wf(w,2048,0,f)|0;f=f+-1|0}else{e=0;f=0}}while(0);l=(j|h|0)!=0;if(s){if(l)e=(Vf(w+e|0,2048-e|0,0,j)|0)+e|0;if(d)e=(Wf(w+e|0,2048-e|0,0,d)|0)+e|0}else{if(l)l=(Wf(w+e|0,2048-e|0,0,j)|0)+e|0;else l=e;if(d){a[w+l>>0]=72;e=l+1|0;if((d|0)>1)e=(Wf(w+e|0,2047-l|0,0,d)|0)+e|0}else e=l}if((e|0)>0){c[x>>2]=w;jd(k,12798,x)|0}h=h+3|0}}while(0);c[m>>2]=c[m>>2]|p;Cq(o);e=(c[v>>2]|0)-r|0}while(0);i=y;return e|0}function _f(a,d,f,g,h,j){a=a|0;d=d|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=i;i=i+2064|0;v=x+8|0;u=x+16|0;q=c[j>>2]|0;r=g+8|0;s=c[r>>2]|0;o=h&2;t=(o|0)==0;p=(f|0)!=0;if(p&(q|o|0)==0)jd(g,12844,x)|0;a:do if(!q){n=(h&1|0)!=0;m=0;o=0;l=0;while(1){if((o|0)>=(d|0))break a;f=b[a+(o<<1)>>1]|0;if(n){k=(f&65535)<(l&65535);h=k&1;if(!k){k=o+1|0;if((k|0)<(d|0))if((e[a+(k<<1)>>1]|0)<(f&65535)){l=f;w=10}else h=m;else{h=m;f=l}}else w=10}else{h=0;w=10}if((w|0)==10){w=0;f=f&65535;do if(t)if(n){f=Wf(u,2048,h|0?12805:12844,f)|0;break}else{f=Wf(u,2048,o|0?12844:0,f)|0;break}else f=Vf(u,2048,p&(m|0)==0?12844:0,f)|0;while(0);if((f|0)>0){c[v>>2]=u;jd(g,12798,v)|0;h=m+1|0;f=l}else{h=m;f=l}}m=h;o=o+1|0;l=f}}while(0);c[j>>2]=c[j>>2]|q;i=x;return (c[r>>2]|0)-s|0}function $f(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;D=i;i=i+2160|0;p=D+16|0;y=D+8|0;A=D+104|0;x=D+20|0;k=c[j>>2]|0;B=g+8|0;C=c[B>>2]|0;v=h&2;z=(v|0)!=0;if((b|0)!=0&(k|v|0)==0)jd(g,12844,D)|0;a:do if((e|0)!=0&((f|0)>0&(k|0)==0)){if(!(h&16)){n=0;o=1;b=0;while(1){if((o|0)>(f|0)){k=0;w=73;break a}if((o|0)<(f|0)){k=a[e+b>>0]|0;if((a[e+o>>0]|0)==k<<24>>24)k=n;else w=56}else{k=a[e+b>>0]|0;w=56}if((w|0)==56){w=0;if(k<<24>>24){m=k<<24>>24;b=b+1|0;if(z)h=Vf(A,2048,0,b)|0;else h=Wf(A,2048,n|0?12844:0,b)|0;do if((b|0)<(o|0)){b=A+h|0;if(z){k=(Vf(b,2048,0,o)|0)+h|0;w=65;break}else{h=(Wf(b,2048-h|0,12805,o)|0)+h|0;w=66;break}}else if(z){k=h;w=65}else w=66;while(0);do if((w|0)==65){w=0;b=Wf(A+k|0,2048-k|0,0,m)|0}else if((w|0)==66){w=0;l=k<<24>>24>0?86650:12807;k=k<<24>>24>-1?m:0-m|0;b=A+h|0;if((k|0)>1){b=Wf(b,2048-h|0,l,k)|0;k=h;break}else{k=d[l>>0]|d[l+1>>0]<<8;a[b>>0]=k;a[b+1>>0]=k>>8;b=1;k=h;break}}while(0);k=b+k|0;if((k|0)<=-1){k=1;w=73;break a}if(k){c[p>>2]=A;jd(g,12801,p)|0;k=n+1|0;b=o}else{k=n;b=o}}else{k=n;b=o}}n=k;o=o+1|0}}k=21;h=16;l=-4;p=x;while(1){er(p|0,0,k<<2|0)|0;b=0;o=0;k=0;while(1){if((o|0)==(f|0))break;n=a[e+o>>0]|0;m=n<<24>>24;do if((m|0)>=(l|0)){if((m|0)>(h|0)){b=b+1|0;h=m;break}if(!b){b=p+(m-l<<2)|0;c[b>>2]=(c[b>>2]|0)+1;b=0}}else{b=b+1|0;l=m}while(0);o=o+1|0;k=(n<<24>>24==0&1)+k|0}if((k|0)==(f|0)){w=74;break}if(!b){v=p;u=p;w=17;break}if((p|0)!=(x|0)){b=p;k=p;w=19;break}k=h-l+1|0;b=Bq(k<<2)|0;if(!b){w=22;break}else p=b}if((w|0)==17){k=0;t=l;while(1){if((t|0)>(h|0))break;b=c[u+(t-l<<2)>>2]|0;b:do if((t|0)!=0&(b|0)!=0){q=(t|0)>0?86650:12807;r=(t|0)>-1?t:0-t|0;s=(r|0)>1;n=0;while(1){o=(b|0)!=0;while(1){if(!(o&(n|0)<(f|0)))break b;m=n+1|0;if((t|0)==(a[e+n>>0]|0))break;else n=m}n=m;while(1){b=b+-1|0;if((n|0)>=(f|0))break;if(!(b|0?(t|0)==(a[e+n>>0]|0):0))break;n=n+1|0}if(z){p=k;o=Vf(A,2048,0,m)|0}else{p=k+1|0;o=Wf(A,2048,k|0?12844:0,m)|0}do if((m|0)<(n|0)){k=A+o|0;if(z){k=(Vf(k,2048,0,n)|0)+o|0;w=42;break}else{k=(Wf(k,2048-o|0,12805,n)|0)+o|0;w=40;break}}else{k=o;w=40}while(0);do if((w|0)==40){w=0;if(z|(b|0)==0)if(!z){m=A+k|0;if(s){k=(Wf(m,2048-k|0,q,r)|0)+k|0;break}else{o=d[q>>0]|d[q+1>>0]<<8;a[m>>0]=o;a[m+1>>0]=o>>8;k=k+1|0;break}}else w=42}while(0);if((w|0)==42)k=(Wf(A+k|0,2048-k|0,0,t)|0)+k|0;if((k|0)<=0){k=p;continue}c[y>>2]=A;jd(g,12801,y)|0;k=p+1|0}}while(0);t=t+1|0}if((u|0)!=(x|0)&(u|0)!=0)Cq(v);k=0;w=73;break}else if((w|0)==19){c[j>>2]=c[j>>2]|1;if(!k){k=0;break}else{Cq(b);k=0;break}}else if((w|0)==22){c[j>>2]=c[j>>2]|1;k=0;break}else if((w|0)==74){k=0;break}}else w=73;while(0);if((w|0)==73){c[j>>2]=c[j>>2]|k;k=(c[B>>2]|0)-C|0}i=D;return k|0}function ag(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;if((e|0)==0|(h&1|0)==0)b=_f(b,c,d,g,h,i)|0;else b=Zf(a,b,c,d,e,f,g,h,i)|0;return b|0}function bg(e,f,g,h,j,k){e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=i;i=i+2080|0;w=x+16|0;r=x+8|0;l=x;q=x+24|0;t=c[k>>2]|0;if((e|0)!=0&(f|0)!=0?(b[e>>1]|0)!=0:0){u=h+8|0;v=c[u>>2]|0;o=j&2;p=(o|0)!=0;if((g|0)!=0&(t|o|0)==0){c[l>>2]=12844;jd(h,12798,l)|0}o=e+2|0;n=f+-1|0;if(!t){j=0;e=0;m=0;while(1){if((j|0)>=(n|0))break;f=b[o+(j<<1)>>1]|0;g=f&65535;a:do if((m|0)==(e|0))if(!p)if(!j){b[q>>1]=40;e=0;s=32;break}else{a[q>>0]=a[12809]|0;a[q+1>>0]=a[12810]|0;a[q+2>>0]=a[12811]|0;e=0;s=32;break}else e=0;else{l=(e|0)>1;b:do if(p&l)g=Vf(q,2048,0,g)|0;else{c:do if(!p){if(l){g=Wf(q,2048,12844,g)|0;break b}if(f<<16>>16){switch(e|0){case 0:{l=86650;break}case 1:{l=12805;break}default:break c}if(f<<16>>16==1){b[q>>1]=d[l>>0]|d[l+1>>0]<<8;g=cp(q)|0;break b}else{g=Wf(q,2048,l,g)|0;break b}}}else{switch(e|0){case 0:{g=Wf(q,2048,(j|0)==1?12844:0,g)|0;break b}case 1:{l=12805;break}case 2:{l=12812;break}default:break c}switch(g|0){case 0:break c;case 1:{b[q>>1]=d[l>>0]|d[l+1>>0]<<8;g=cp(q)|0;break b}default:{g=Wf(q,2048,l,g)|0;break b}}}while(0);e=e+1|0;g=m;break a}while(0);e=e+1|0;if((g|0)>0){g=m;s=32}else g=m}while(0);if((s|0)==32){s=0;c[r>>2]=q;jd(h,12798,r)|0}j=j+1|0;m=g}if((j|0)!=0&(p^1))jd(h,12846,w)|0}c[k>>2]=c[k>>2]|t;j=(c[u>>2]|0)-v|0}else j=0;i=x;return j|0}function cg(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=i;i=i+2064|0;v=w+8|0;u=w+16|0;q=c[h>>2]|0;er(u|0,0,2048)|0;r=f+8|0;s=c[r>>2]|0;t=(q|0)==0;if((e|0)!=0&t)jd(f,12814,w)|0;o=(g&2|0)==0;e=0;p=0;while(1){if(!(t&(p|0)<(d|0)))break;n=b+(p*3|0)|0;if(!(((a[n>>0]|0)==0?(a[b+(p*3|0)+1>>0]|0)==0:0)?(a[b+(p*3|0)+2>>0]|0)==0:0)){if(o){g=Wf(u,2048,e|0?12844:0,p+1|0)|0;j=a[n>>0]|0;do if(j<<24>>24){k=j<<24>>24;l=u+g|0;m=2048-g|0;if(j<<24>>24>0){g=(Wf(l,m,12812,k)|0)+g|0;break}else{g=(Wf(l,m,0,k)|0)+g|0;break}}while(0);j=a[b+(p*3|0)+1>>0]|0;k=j<<24>>24==0;a:do if(!k)switch(j<<24>>24|0){case 1:{a[u+g>>0]=100;g=g+1|0;break a}case 2:{a[u+g>>0]=116;g=g+1|0;break a}default:{a[u+g>>0]=117;g=g+1|0;break a}}while(0);j=a[b+(p*3|0)+2>>0]|0;if(j<<24>>24){if(k){a[u+g>>0]=46;g=g+1|0}g=(Wf(u+g|0,2048-g|0,0,j<<24>>24)|0)+g|0}}else{g=Vf(u,2048,0,p+1|0)|0;j=a[n>>0]|0;do if(j<<24>>24){k=j<<24>>24;l=u+g|0;m=2048-g|0;if(j<<24>>24>0){g=(Wf(l,m,12812,k)|0)+g|0;break}else{g=(Wf(l,m,0,k)|0)+g|0;break}}while(0);j=a[b+(p*3|0)+1>>0]|0;k=j<<24>>24==0;b:do if(!k){if(!(a[n>>0]|0)){a[u+g>>0]=46;g=g+1|0}switch(j<<24>>24|0){case 1:{a[u+g>>0]=100;g=g+1|0;break b}case 2:{a[u+g>>0]=116;g=g+1|0;break b}default:{a[u+g>>0]=117;g=g+1|0;break b}}}while(0);j=a[b+(p*3|0)+2>>0]|0;if(j<<24>>24){if(!((a[n>>0]|0)==0|k^1)){a[u+g>>0]=46;g=g+1|0}g=(Wf(u+g|0,2048-g|0,0,j<<24>>24)|0)+g|0}}if(g){a[u+g>>0]=0;c[v>>2]=u;jd(f,12798,v)|0;a[u>>0]=0;e=e+1|0}}p=p+1|0}c[h>>2]=c[h>>2]|q;i=w;return (c[r>>2]|0)-s|0}function dg(a,b,d,f,g,h){a=a|0;b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+2080|0;s=t+16|0;r=t+8|0;q=t+24|0;m=c[h>>2]|0;n=f+8|0;o=c[n>>2]|0;p=(m|0)==0;if((d|0)!=0&p)jd(f,12814,t)|0;k=(g&2|0)==0;d=0;l=0;while(1){if(!(p&(l|0)<(b|0)))break;if((l|0)==((e[a+(l<<1)>>1]|0)+-1|0)){j=l;while(1){if((j|0)==(b|0))break;if((l|0)==((e[a+(j<<1)>>1]|0)+-1|0)){g=(j|0)==(l|0);if(k)Wf(q,2048,g?81769:12844,j+1|0)|0;else Vf(q,2048,g&(d|0)!=0?12844:0,j+1|0)|0;c[r>>2]=q;jd(f,12798,r)|0;d=d+1|0}j=j+1|0}jd(f,12846,s)|0}l=l+1|0}c[h>>2]=c[h>>2]|m;i=t;return (c[n>>2]|0)-o|0}function eg(d,f,g,h,j){d=d|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=i;i=i+2064|0;C=F;B=F+8|0;l=c[j>>2]|0;h=h&2;D=g+8|0;E=c[D>>2]|0;if(!l){A=(h|0)==0;x=(h|0)!=0;y=x?2:1;h=0;z=0;k=0;while(1){if((z|0)>=(f|0))break;v=d+(z*10|0)|0;q=x?0:z|0?12844:92409;r=d+(z*10|0)+2|0;s=d+(z*10|0)+8|0;t=d+(z*10|0)+6|0;u=d+(z*10|0)+4|0;w=0;o=B;p=0;a:while(1){if((w|0)>=5)break;switch(w|0){case 0:{k=e[v>>1]|0;l=sb[y&3](o,2048-p|0,q,k)|0;n=27;break}case 1:{k=b[r>>1]|0;n=12;break}case 2:{k=b[s>>1]|0;n=12;break}case 3:{k=b[t>>1]|0;n=12;break}case 4:{k=b[u>>1]|0;n=12;break}default:n=12}b:do if((n|0)==12){n=0;if(!A){switch(w|0){case 1:{l=Wf(o,2048-p|0,0,k)|0;n=27;break b}case 4:case 3:case 2:break;default:{l=0;n=28;break b}}if(!k){l=0;k=0;n=28;break}l=2048-p|0;if((l|0)<=1){h=1;break a}a[o>>0]=a[12817+(w+-1)>>0]|0;m=o+1|0;if((k|0)==1){a[m>>0]=0;l=1;k=1;n=28;break}else{l=Wf(m,l+-1|0,0,k)|0;l=(l>>>31^1)+l|0;n=27;break}}else{if(!k){k=0;m=o;l=p;break}if((w|0)==1){l=k-((k|0)>0&1)|0;l=Wf(o,2048-p|0,c[8784+((k>>>31^1)<<2)>>2]|0,(l|0)>-1?l:0-l|0)|0;n=27;break}l=2048-p|0;if((k|0)!=1){l=Wf(o,l,c[8792+(w+-2<<2)>>2]|0,k)|0;n=27;break}if((l|0)<=1){h=1;k=1;break a}vp(o,c[8792+(w+-2<<2)>>2]|0)|0;l=1;k=1;n=28;break}}while(0);if((n|0)==27)if((l|0)<0){h=1;break}else n=28;if((n|0)==28){m=o+l|0;l=l+p|0}w=w+1|0;o=m;p=l}c[C>>2]=B;jd(g,12798,C)|0;z=z+1|0}k=c[j>>2]|0}else{k=l;h=l}c[j>>2]=k|h;i=F;return (c[D>>2]|0)-E|0}function fg(b,d,f,g,h){b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;D=i;i=i+2064|0;A=D;z=D+8|0;k=c[h>>2]|0;g=g&2;B=f+8|0;C=c[B>>2]|0;if(!k){y=(g|0)==0;v=(g|0)!=0;w=v?2:1;g=0;x=0;j=0;while(1){if((x|0)>=(d|0))break;t=b+(x<<3)|0;p=v?0:x|0?12844:92409;q=b+(x<<3)+6|0;r=b+(x<<3)+4|0;s=b+(x<<3)+2|0;u=0;m=z;o=0;a:while(1){if((u|0)>=4)break;switch(u|0){case 0:{j=e[t>>1]|0;l=sb[w&3](m,2048-o|0,p,j)|0;n=20;break}case 1:{j=e[q>>1]|0;n=11;break}case 2:{j=e[r>>1]|0;n=11;break}case 3:{j=e[s>>1]|0;n=11;break}default:n=11}do if((n|0)==11){n=0;if(!j){j=0;k=o}else{if(!y){k=2048-o|0;l=Wf(m,k,0,j)|0;if((l|0)<=0){n=20;break}if((k-l|0)<=1){g=1;break a}n=l+1|0;a[m+l>>0]=a[12822+(u+-1)>>0]|0;a[m+n>>0]=0;l=n;n=20;break}k=2048-o|0;if((j|0)!=1){l=Wf(m,k,c[8792+(u+-1<<2)>>2]|0,j)|0;n=20;break}if((k|0)<=1){g=1;j=1;break a}vp(m,c[8792+(u+-1<<2)>>2]|0)|0;l=1;j=1;n=21}}while(0);if((n|0)==20)if((l|0)<0){g=1;break}else n=21;if((n|0)==21){m=m+l|0;k=l+o|0}u=u+1|0;o=k}c[A>>2]=z;jd(f,12798,A)|0;x=x+1|0}j=c[h>>2]|0}else{j=k;g=k}c[h>>2]=j|g;i=D;return (c[B>>2]|0)-C|0}function gg(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+2064|0;p=s;o=s+8|0;h=c[f>>2]|0;q=d+8|0;r=c[q>>2]|0;if(!h){l=(e&2|0)==0;m=1;j=o;k=0;a:while(1){if((m|0)>=4){e=0;break}h=c[b+(3-m<<2)>>2]|0;if(!h){g=j;e=k}else{do if(!l){g=2048-k|0;e=Wf(j,g,0,h)|0;if((e|0)>0){if((g-e|0)<=1){e=1;break a}n=e+1|0;a[j+e>>0]=a[12822+(m+-1)>>0]|0;a[j+n>>0]=0;e=n;n=13}else n=13}else{e=2048-k|0;if((h|0)!=1){e=Wf(j,e,c[8792+(m+-1<<2)>>2]|0,h)|0;n=13;break}if((e|0)<=1){e=1;break a}vp(j,c[8792+(m+-1<<2)>>2]|0)|0;e=1}while(0);if((n|0)==13){n=0;if((e|0)<0){e=1;break}}g=j+e|0;e=e+k|0}m=m+1|0;j=g;k=e}c[p>>2]=o;jd(d,12798,p)|0;g=c[f>>2]|0}else{g=h;e=h}c[f>>2]=g|e;i=s;return (c[q>>2]|0)-r|0}function hg(b,d,f,g,h,j,k,l){b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;D=i;i=i+2064|0;z=D;y=D+8|0;g=c[l>>2]|0;B=j+8|0;C=c[B>>2]|0;if(!g){x=(b|0)!=0;t=(k&2|0)==0;u=(d|0)!=0;v=(f|0)!=0;g=0;w=0;while(1){if((w|0)>=(h|0))break;o=b+(w<<1)|0;p=w|0?12844:0;q=d+(w<<1)|0;r=f+w|0;s=0;m=y;n=0;a:while(1){if((s|0)>=3)break;do if(!(x&(s|0)==0)){if(u&(s|0)==1){k=e[q>>1]|0;A=12;break}if(v&(s|0)==2){k=a[r>>0]|0;A=12}else k=n}else{k=e[o>>1]|0;A=12}while(0);if((A|0)==12){A=0;do if(t){if((s|0)<2){k=Wf(m,2048-n|0,(n|0)==0?p:12805,k)|0;A=20;break}if((n+1|0)>=2048){g=1;break a}if(k>>>0<5)k=a[12826+k>>0]|0;else k=33;E=m+1|0;a[m>>0]=k;a[E>>0]=0;k=1;m=E}else{k=sb[((s|0)==2?1:2)&3](m,2048-n|0,0,k)|0;A=20}while(0);if((A|0)==20){A=0;if((k|0)<0){g=1;break}}m=m+k|0;k=k+n|0}s=s+1|0;n=k}c[z>>2]=y;jd(j,12798,z)|0;w=w+1|0}k=c[l>>2]|0}else k=g;c[l>>2]=k|g;i=D;return (c[B>>2]|0)-C|0}function ig(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0;n=i;i=i+16|0;m=n;if(!((g|0)==0|(h|0)==0)?(c[d>>2]|0)!=0:0){gd(d);c[e+112>>2]=Eg(b,c[e+540>>2]|0,c[e+544>>2]|0,d,e+12|0,c[e+24>>2]|0,c[e+4>>2]|0,c[e+88>>2]|0,c[e+48>>2]|0,c[e+32>>2]|0)|0;e=0;while(1){if((e|0)>=(f|0))break;l=e+1|0;c[g+(l<<2)>>2]=-1;c[h+(e<<2)>>2]=-1;e=l}k=d+8|0;f=0;j=1;l=0;b=0;a:while(1){if((l|0)>(c[k>>2]|0)){e=0;break}e=a[(c[d>>2]|0)+l>>0]|0;switch(e<<24>>24){case 0:case 59:case 44:{a[m+b>>0]=0;c[g+((yq(m)|0)<<2)>>2]=f;c[h+(f<<2)>>2]=j;a[m>>0]=0;if(!(e<<24>>24)){e=0;break a}else{f=f+1|0;e=(e<<24>>24==59&1)+j|0;b=0}break}default:{if(((e<<24>>24)+-48|0)>>>0>=10){e=2;break a}a[m+b>>0]=e;e=j;b=b+1|0}}j=e;l=l+1|0}gd(d)}else e=1;i=n;return e|0}function jg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;k=l+16|0;j=l+8|0;h=l;e=a+-1|0;a=0;g=0;while(1){if((a|0)>=(e|0))break;f=a+1|0;a=c[b+(a<<2)>>2]|0;if((c[b+(f<<2)>>2]|0)!=(a+1|0)){c[j>>2]=a;jd(d,12836,j)|0;a=f;g=0;continue}if(!g){c[h>>2]=a;jd(d,12832,h)|0;a=f;g=1;continue}else{a=f;g=g+1|0;continue}}c[k>>2]=c[b+(e<<2)>>2];jd(d,85326,k)|0;i=l;return}function kg(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;s=d+8|0;i=c[s>>2]|0;if(b){x=(f|0)==0;a:do if(x){j=c[b+4>>2]|0;if((j|0?c[j+12>>2]|0:0)?(c[j+32>>2]|0)==0:0){r=32;break}j=c[b>>2]|0;if((j|0)!=0?(c[j+12>>2]|0)!=0:0)j=(c[j+32>>2]|0)!=0;else j=1;j=j<<31>>31;r=30}else{if((f|2|0)==3){j=c[b+4>>2]|0;if(j|0?c[j+12>>2]|0:0){r=32;break}j=c[b>>2]|0;if(!j)j=1;else j=(c[j+12>>2]|0)==0;j=j<<31>>31;r=30;break}switch(f|0){case 4:{j=c[b>>2]|0;if((j|0?c[j+12>>2]|0:0)?(c[j+32>>2]|0)==0:0){r=32;break a}j=c[b+4>>2]|0;if(!j){j=0;break a}if(!(c[j+12>>2]|0)){j=0;break a}if(!(c[j+32>>2]|0)){r=32;break a}else{j=0;break a}}case 2:break;default:{j=0;break a}}r=c[b+4>>2]|0;if(((((r|0)!=0?(c[r+12>>2]|0)!=0:0)?(c[r+32>>2]|0)>0:0)?(j=c[b>>2]|0,(j|0)!=0):0)?(c[j+12>>2]|0)!=0:0)j=(c[j+32>>2]|0)!=0;else j=1;j=j<<31>>31;r=30}while(0);if((r|0)==30)if((j|0)>-1){j=c[b+(j<<2)>>2]|0;r=32}else j=0;o=(h|0)!=0;p=(f|2|0)==3;m=0;q=1;n=0;while(1){if((q|0)>(g|0))break;b:do if((q|0)<(g|0)){h=b+(q*24|0)|0;c:do if(x){l=c[b+(q*24|0)+4>>2]|0;if((l|0?c[l+12>>2]|0:0)?(c[l+32>>2]|0)==0:0){h=1;break}h=c[h>>2]|0;if((h|0)!=0?(c[h+12>>2]|0)!=0:0)h=(c[h+32>>2]|0)==0;else h=0;h=(h^1)<<31>>31;r=64}else{if(p){l=c[b+(q*24|0)+4>>2]|0;if(l|0?c[l+12>>2]|0:0){h=1;break}h=c[h>>2]|0;if(!h)h=0;else h=(c[h+12>>2]|0)!=0;h=(h^1)<<31>>31;r=64;break}switch(f|0){case 4:{l=c[h>>2]|0;if((l|0?c[l+12>>2]|0:0)?(c[l+32>>2]|0)==0:0){h=0;break c}h=c[b+(q*24|0)+4>>2]|0;if(!h){r=65;break b}if(!(c[h+12>>2]|0)){r=65;break b}if(!(c[h+32>>2]|0)){h=1;break c}else{r=65;break b}}case 2:break;default:{r=65;break b}}r=c[b+(q*24|0)+4>>2]|0;if(((((r|0)!=0?(c[r+12>>2]|0)!=0:0)?(c[r+32>>2]|0)>0:0)?(t=c[h>>2]|0,(t|0)!=0):0)?(c[t+12>>2]|0)!=0:0)h=(c[t+32>>2]|0)==0;else h=0;h=(h^1)<<31>>31;r=64}while(0);if((r|0)==64){r=0;if((h|0)<=-1){r=65;break}}k=c[b+(q*24|0)+(h<<2)>>2]|0;h=(j|0)!=0;if(h&(o&(k|0)!=0)){h=c[k+16>>2]|0;if((((h|0)!=0?(u=c[j+16>>2]|0,(u|0)!=0):0)?(a[h>>0]|0)!=0:0)?(kp(u,h)|0)==0:0){k=m;h=n+1|0}else{h=1;l=k;r=72}}else{l=k;r=72}}else r=65;while(0);if((r|0)==65){h=(j|0)!=0;l=0;r=72}if((r|0)==72){r=0;k=m+1|0;if(m|0)Xf(90921,d,e)|0;if((h?(v=j+16|0,w=c[v>>2]|0,(w|0)!=0):0)?(a[w>>0]|0)!=0:0){Uf(n+1|0,92409,d,0,e)|0;Pd(c[v>>2]|0,d,e)|0;h=0;j=l}else{h=0;j=l}}m=k;q=q+1|0;n=h}i=(c[s>>2]|0)-i|0}return i|0}function lg(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;D=e+8|0;E=c[D>>2]|0;w=(g|0)==0;a:do if(w){j=c[b+4>>2]|0;if((j|0?c[j+12>>2]|0:0)?(c[j+32>>2]|0)==0:0){t=31;break}j=c[b>>2]|0;if((j|0)!=0?(c[j+12>>2]|0)!=0:0)j=(c[j+32>>2]|0)!=0;else j=1;j=j<<31>>31;t=29}else{if((g|2|0)==3){j=c[b+4>>2]|0;if(j|0?c[j+12>>2]|0:0){t=31;break}j=c[b>>2]|0;if(!j)j=1;else j=(c[j+12>>2]|0)==0;j=j<<31>>31;t=29;break}switch(g|0){case 4:{j=c[b>>2]|0;if((j|0?c[j+12>>2]|0:0)?(c[j+32>>2]|0)==0:0){t=31;break a}j=c[b+4>>2]|0;if(!j){k=0;break a}if(!(c[j+12>>2]|0)){k=0;break a}if(!(c[j+32>>2]|0)){t=31;break a}else{k=0;break a}}case 2:break;default:{k=0;break a}}t=c[b+4>>2]|0;if(((((t|0)!=0?(c[t+12>>2]|0)!=0:0)?(c[t+32>>2]|0)>0:0)?(j=c[b>>2]|0,(j|0)!=0):0)?(c[j+12>>2]|0)!=0:0)j=(c[j+32>>2]|0)!=0;else j=1;j=j<<31>>31;t=29}while(0);if((t|0)==29)if((j|0)>-1){j=c[b+(j<<2)>>2]|0;t=31}else k=0;if((t|0)==31)k=j;j=c[d+4>>2]|0;if((j|0)!=0?(c[j+12>>2]|0)!=0:0)t=37;else{j=c[d>>2]|0;if((j|0)!=0?(l=(c[j+12>>2]|0)!=0,l):0){j=c[d+((l^1)<<31>>31<<2)>>2]|0;t=37}else j=0}if((t|0)==37)if((((k|0)!=0&(j|0)!=0?(c[j+76>>2]|0)==0:0)?(m=c[k+16>>2]|0,(m|0)!=0):0)?(n=c[j+16>>2]|0,(n|0)!=0):0)j=(kp(m,n)|0)==0;else j=0;s=(g|2|0)==3;r=(i|0)!=0;j=j&1;o=0;q=1;p=0;i=k;while(1){if((q|0)>(h|0))break;do if((q|0)<(h|0)){k=b+(q*24|0)|0;b:do if(w){t=c[b+(q*24|0)+4>>2]|0;if((t|0?c[t+12>>2]|0:0)?(c[t+32>>2]|0)==0:0){k=1;t=74;break}k=c[k>>2]|0;if((k|0)!=0?(c[k+12>>2]|0)!=0:0)k=(c[k+32>>2]|0)==0;else k=0;k=(k^1)<<31>>31;t=73}else{if(s){t=c[b+(q*24|0)+4>>2]|0;if(t|0?c[t+12>>2]|0:0){k=1;t=74;break}k=c[k>>2]|0;if(!k)k=0;else k=(c[k+12>>2]|0)!=0;k=(k^1)<<31>>31;t=73;break}switch(g|0){case 4:{n=c[k>>2]|0;if((n|0?c[n+12>>2]|0:0)?(c[n+32>>2]|0)==0:0){k=0;t=74;break b}k=c[b+(q*24|0)+4>>2]|0;if(!k){l=0;break b}if(!(c[k+12>>2]|0)){l=0;break b}if(!(c[k+32>>2]|0)){k=1;t=74;break b}else{l=0;break b}}case 2:break;default:{l=0;break b}}t=c[b+(q*24|0)+4>>2]|0;if(((((t|0)!=0?(c[t+12>>2]|0)!=0:0)?(c[t+32>>2]|0)>0:0)?(u=c[k>>2]|0,(u|0)!=0):0)?(c[u+12>>2]|0)!=0:0)k=(c[u+32>>2]|0)==0;else k=0;k=(k^1)<<31>>31;t=73}while(0);if((t|0)==73){t=0;if((k|0)>-1)t=74;else l=0}if((t|0)==74){t=0;l=c[b+(q*24|0)+(k<<2)>>2]|0}k=c[d+(q*24|0)+4>>2]|0;if(k|0?c[k+12>>2]|0:0){n=l;break}k=c[d+(q*24|0)>>2]|0;if((k|0)!=0?(v=(c[k+12>>2]|0)!=0,v):0){n=l;k=c[d+(q*24|0)+((v^1)<<31>>31<<2)>>2]|0}else{n=l;k=0}}else{n=0;k=0}while(0);if(j){l=(n|0)!=0;m=(k|0)!=0;if(l|m){if(((l&m?(c[k+76>>2]|0)==0:0)?(x=c[n+16>>2]|0,(x|0)!=0):0)?(y=c[k+16>>2]|0,(y|0)!=0):0)j=(kp(x,y)|0)==0;else j=0;j=j&1}}else j=0;k=(i|0)!=0;if((((k&(r&(n|0)!=0)?(z=c[n+16>>2]|0,(z|0)!=0):0)?(A=c[i+16>>2]|0,(A|0)!=0):0)?(a[z>>0]|0)!=0:0)?(kp(A,z)|0)==0:0){l=o;m=p+1|0;k=i}else{l=o+1|0;if(o|0)Xf(90921,e,f)|0;if((k?(B=i+16|0,C=c[B>>2]|0,(C|0)!=0):0)?(a[C>>0]|0)!=0:0){Uf(p+1|0,92409,e,0,f)|0;Pd(c[B>>2]|0,e,f)|0;m=0;k=n}else{m=0;k=n}}o=l;q=q+1|0;p=m;i=k}if(!j)j=c[D>>2]|0;else{c[D>>2]=E;j=E}a[(c[e>>2]|0)+j>>0]=0;return (c[D>>2]|0)-E|0}function mg(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=e+8|0;k=c[y>>2]|0;if(d){x=(g|0)==0;a:do if(x){l=c[d+4>>2]|0;if((l|0?c[l+12>>2]|0:0)?(c[l+32>>2]|0)==0:0){u=32;break}l=c[d>>2]|0;if((l|0)!=0?(c[l+12>>2]|0)!=0:0)l=(c[l+32>>2]|0)!=0;else l=1;l=l<<31>>31;u=30}else{if((g|2|0)==3){l=c[d+4>>2]|0;if(l|0?c[l+12>>2]|0:0){u=32;break}l=c[d>>2]|0;if(!l)l=1;else l=(c[l+12>>2]|0)==0;l=l<<31>>31;u=30;break}switch(g|0){case 4:{l=c[d>>2]|0;if((l|0?c[l+12>>2]|0:0)?(c[l+32>>2]|0)==0:0){u=32;break a}l=c[d+4>>2]|0;if(!l){m=0;break a}if(!(c[l+12>>2]|0)){m=0;break a}if(!(c[l+32>>2]|0)){u=32;break a}else{m=0;break a}}case 2:break;default:{m=0;break a}}u=c[d+4>>2]|0;if(((((u|0)!=0?(c[u+12>>2]|0)!=0:0)?(c[u+32>>2]|0)>0:0)?(l=c[d>>2]|0,(l|0)!=0):0)?(c[l+12>>2]|0)!=0:0)l=(c[l+32>>2]|0)!=0;else l=1;l=l<<31>>31;u=30}while(0);if((u|0)==30)if((l|0)>-1){l=c[d+(l<<2)>>2]|0;u=32}else m=0;if((u|0)==32)m=l;r=(j|0)!=0;s=(g|2|0)==3;p=0;t=1;o=0;l=0;q=m;while(1){if((t|0)>(i|0))break;b:do if((t|0)<(i|0)){m=d+(t*24|0)|0;c:do if(x){n=c[d+(t*24|0)+4>>2]|0;if((n|0?c[n+12>>2]|0:0)?(c[n+32>>2]|0)==0:0){m=1;break}m=c[m>>2]|0;if((m|0)!=0?(c[m+12>>2]|0)!=0:0)m=(c[m+32>>2]|0)==0;else m=0;m=(m^1)<<31>>31;u=64}else{if(s){n=c[d+(t*24|0)+4>>2]|0;if(n|0?c[n+12>>2]|0:0){m=1;break}m=c[m>>2]|0;if(!m)m=0;else m=(c[m+12>>2]|0)!=0;m=(m^1)<<31>>31;u=64;break}switch(g|0){case 4:{n=c[m>>2]|0;if((n|0?c[n+12>>2]|0:0)?(c[n+32>>2]|0)==0:0){m=0;break c}m=c[d+(t*24|0)+4>>2]|0;if(!m){u=65;break b}if(!(c[m+12>>2]|0)){u=65;break b}if(!(c[m+32>>2]|0)){m=1;break c}else{u=65;break b}}case 2:break;default:{u=65;break b}}u=c[d+(t*24|0)+4>>2]|0;if(((((u|0)!=0?(c[u+12>>2]|0)!=0:0)?(c[u+32>>2]|0)>0:0)?(v=c[m>>2]|0,(v|0)!=0):0)?(c[v+12>>2]|0)!=0:0)m=(c[v+32>>2]|0)==0;else m=0;m=(m^1)<<31>>31;u=64}while(0);if((u|0)==64){u=0;if((m|0)<=-1){u=65;break}}n=c[d+(t*24|0)+(m<<2)>>2]|0;m=(q|0)!=0;if(((m&(r&(n|0)!=0)?(w=c[n+24>>2]|0,(w|0)>1):0)?(c[q+24>>2]|0)==(w|0):0)?(hp(c[q+28>>2]|0,c[n+28>>2]|0,w<<1)|0)==0:0){j=p;o=o+1|0;m=q;break}if(m)u=72;else{j=p;o=0;m=n}}else u=65;while(0);if((u|0)==65){u=0;if(!q){j=p;o=0;m=0}else{n=0;u=72}}do if((u|0)==72){u=0;j=p+1|0;if(p|0)Xf(11716,e,f)|0;m=q+24|0;if((c[m>>2]|0)>1){Uf(o+1|0,82004,e,0,f)|0;Zf(b,c[q+28>>2]|0,c[m>>2]|0,0,0,c[q+12>>2]|0,e,h,f)|0;o=0;m=n;break}else{o=0;l=l+1|0;m=n;break}}while(0);p=j;t=t+1|0;q=m}if((l|0)==(i|0)?(c[y>>2]|0)>(k|0):0){c[y>>2]=k;a[(c[e>>2]|0)+k>>0]=0}k=(c[y>>2]|0)-k|0}return k|0}function ng(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=(f|0)==0;a:do if(z){k=c[b+4>>2]|0;if((k|0?c[k+12>>2]|0:0)?(c[k+32>>2]|0)==0:0){w=31;break}k=c[b>>2]|0;if((k|0)!=0?(c[k+12>>2]|0)!=0:0)k=(c[k+32>>2]|0)!=0;else k=1;k=k<<31>>31;w=29}else{if((f|2|0)==3){k=c[b+4>>2]|0;if(k|0?c[k+12>>2]|0:0){w=31;break}k=c[b>>2]|0;if(!k)k=1;else k=(c[k+12>>2]|0)==0;k=k<<31>>31;w=29;break}switch(f|0){case 4:{k=c[b>>2]|0;if((k|0?c[k+12>>2]|0:0)?(c[k+32>>2]|0)==0:0){w=31;break a}k=c[b+4>>2]|0;if(!k){l=0;break a}if(!(c[k+12>>2]|0)){l=0;break a}if(!(c[k+32>>2]|0)){w=31;break a}else{l=0;break a}}case 2:break;default:{l=0;break a}}y=c[b+4>>2]|0;if(((((y|0)!=0?(c[y+12>>2]|0)!=0:0)?(c[y+32>>2]|0)>0:0)?(k=c[b>>2]|0,(k|0)!=0):0)?(c[k+12>>2]|0)!=0:0)k=(c[k+32>>2]|0)!=0;else k=1;k=k<<31>>31;w=29}while(0);if((w|0)==29)if((k|0)>-1){k=c[b+(k<<2)>>2]|0;w=31}else l=0;if((w|0)==31)l=k;x=d+8|0;y=c[x>>2]|0;t=(j|0)!=0;u=(f|2|0)==3;p=0;v=1;s=0;k=0;r=l;while(1){if((v|0)>(i|0))break;b:do if((v|0)<(i|0)){l=b+(v*24|0)|0;c:do if(z){q=c[b+(v*24|0)+4>>2]|0;if((q|0?c[q+12>>2]|0:0)?(c[q+32>>2]|0)==0:0){l=1;break}l=c[l>>2]|0;if((l|0)!=0?(c[l+12>>2]|0)!=0:0)l=(c[l+32>>2]|0)==0;else l=0;l=(l^1)<<31>>31;w=63}else{if(u){q=c[b+(v*24|0)+4>>2]|0;if(q|0?c[q+12>>2]|0:0){l=1;break}l=c[l>>2]|0;if(!l)l=0;else l=(c[l+12>>2]|0)!=0;l=(l^1)<<31>>31;w=63;break}switch(f|0){case 4:{q=c[l>>2]|0;if((q|0?c[q+12>>2]|0:0)?(c[q+32>>2]|0)==0:0){l=0;break c}l=c[b+(v*24|0)+4>>2]|0;if(!l){w=64;break b}if(!(c[l+12>>2]|0)){w=64;break b}if(!(c[l+32>>2]|0)){l=1;break c}else{w=64;break b}}case 2:break;default:{w=64;break b}}w=c[b+(v*24|0)+4>>2]|0;if(((((w|0)!=0?(c[w+12>>2]|0)!=0:0)?(c[w+32>>2]|0)>0:0)?(A=c[l>>2]|0,(A|0)!=0):0)?(c[A+12>>2]|0)!=0:0)l=(c[A+32>>2]|0)==0;else l=0;l=(l^1)<<31>>31;w=63}while(0);if((w|0)==63){w=0;if((l|0)<=-1){w=64;break}}l=c[b+(v*24|0)+(l<<2)>>2]|0;o=(r|0)!=0;d:do if(o&(t&(l|0)!=0)){j=c[l+12>>2]|0;if((j|0)<=0?(c[l+32>>2]|0)<=1:0)break;m=r+12|0;if((c[m>>2]|0)==(j|0)){if(j|0?hp(c[r+40>>2]|0,c[l+40>>2]|0,j)|0:0)break;if(ce(r,l)|0){w=78;break b}if((c[r+32>>2]|0)<2){j=c[m>>2]|0;m=r+40|0;n=0;while(1){if((n|0)>=(j|0))break d;if(!(a[(c[m>>2]|0)+n>>0]|0))n=n+1|0;else break}}j=p;m=s+1|0;l=r;break b}}while(0);if(o)w=78;else{j=p;m=0}}else w=64;while(0);if((w|0)==64){w=0;if(!r){j=p;m=0;l=0}else{l=0;w=78}}e:do if((w|0)==78){w=0;q=p+1|0;if(p|0)Xf(11716,d,e)|0;p=r+32|0;f:do if((c[p>>2]|0)>1){m=r+12|0;j=r+40|0}else{m=r+12|0;n=c[m>>2]|0;j=r+40|0;o=0;while(1){if((o|0)>=(n|0))break;if(!(a[(c[j>>2]|0)+o>>0]|0))o=o+1|0;else break f}j=q;m=0;k=k+1|0;break e}while(0);Uf(s+1|0,82004,d,0,e)|0;j=$f(0,c[j>>2]|0,c[m>>2]|0,d,g,e)|0;bg(c[r+36>>2]|0,c[p>>2]|0,(j|0)!=0&1,d,h,e)|0;j=q;m=0}while(0);p=j;v=v+1|0;s=m;r=l}if((k|0)==(i|0)?(c[x>>2]|0)>(y|0):0){c[x>>2]=y;a[(c[d>>2]|0)+y>>0]=0}return (c[x>>2]|0)-y|0}function og(a,b,d,e,f,g,h,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;J=i;i=i+16|0;I=J+8|0;H=J;B=(h|0)!=0;w=B?b:0;x=d+8|0;y=c[x>>2]|0;z=(f|0)==0;A=(f|2|0)==3;v=B&(j|0)!=0;t=(k|0)!=0;q=0;k=1;u=0;l=0;m=0;p=0;o=0;n=0;r=0;while(1){if((u|0)>(g|0))break;do if((u|0)<(g|0)){h=a+(u*24|0)|0;a:do if(z){s=c[a+(u*24|0)+4>>2]|0;if((s|0?c[s+12>>2]|0:0)?(c[s+32>>2]|0)==0:0){h=1;s=34;break}h=c[h>>2]|0;if((h|0)!=0?(c[h+12>>2]|0)!=0:0)h=(c[h+32>>2]|0)==0;else h=0;h=(h^1)<<31>>31;s=33}else{if(A){s=c[a+(u*24|0)+4>>2]|0;if(s|0?c[s+12>>2]|0:0){h=1;s=34;break}h=c[h>>2]|0;if(!h)h=0;else h=(c[h+12>>2]|0)!=0;h=(h^1)<<31>>31;s=33;break}switch(f|0){case 4:{j=c[h>>2]|0;if((j|0?c[j+12>>2]|0:0)?(c[j+32>>2]|0)==0:0){h=0;s=34;break a}h=c[a+(u*24|0)+4>>2]|0;if(!h){b=0;break a}if(!(c[h+12>>2]|0)){b=0;break a}if(!(c[h+32>>2]|0)){h=1;s=34;break a}else{b=0;break a}}case 2:break;default:{b=0;break a}}s=c[a+(u*24|0)+4>>2]|0;if(((((s|0)!=0?(c[s+12>>2]|0)!=0:0)?(c[s+32>>2]|0)>0:0)?(F=c[h>>2]|0,(F|0)!=0):0)?(c[F+12>>2]|0)!=0:0)h=(c[F+32>>2]|0)==0;else h=0;h=(h^1)<<31>>31;s=33}while(0);if((s|0)==33){s=0;if((h|0)>-1)s=34;else b=0}if((s|0)==34){s=0;b=c[a+(u*24|0)+(h<<2)>>2]|0}if(B){h=c[w+(u*24|0)+4>>2]|0;if(h|0?c[h+12>>2]|0:0){j=b;o=h;break}h=c[w+(u*24|0)>>2]|0;if((h|0)!=0?(G=(c[h+12>>2]|0)!=0,G):0){j=b;o=c[w+(u*24|0)+((G^1)<<31>>31<<2)>>2]|0}else{j=b;o=0}}else j=b}else{j=0;o=B?0:o}while(0);do if((((v?(j|0)!=0&(o|0)!=0:0)?(c[o+76>>2]|0)==0:0)?(C=c[j+8>>2]|0,(C|0)!=0):0)?(b=c[o+8>>2]|0,(C|0)==(b|0)&(b|0)!=0):0){if((p|0)!=0?(c[p+12>>2]|0)!=0:0){h=q+1|0;if(q|0)Xf(11716,d,e)|0;b=c[p+8>>2]|0;if(b){Uf(l+1|0,82004,d,0,e)|0;c[H>>2]=b;jd(d,85248,H)|0}}else if(((n|0)!=0?(c[n+12>>2]|0)!=0:0)?(c[n+76>>2]|0)==0:0){h=q+1|0;if(q)Xf(11716,d,e)|0}else h=q;b=Af(40)|0;if((r|0)!=0&(m|0)!=0){if(b|0?(kp(b,r)|0)==0:0){k=1;l=0;m=m+1|0;j=0;n=0;b=r;break}if(h|0)Xf(11716,d,e)|0;Yf(r,m,d,e)|0;h=h+1|0;k=1;l=0;m=1;j=0;n=0}else{k=1;l=0;m=1;j=0;n=0}}else s=64;while(0);do if((s|0)==64){s=0;if(k|0){if(!((r|0)!=0&(m|0)!=0)){h=q;k=0;l=0;n=o;b=r;break}if(q|0)Xf(11716,d,e)|0;Yf(r,m,d,e)|0;h=q+1|0;k=0;l=0;m=0;n=o;b=0;break}b=(p|0)!=0;if((b&(t&(j|0)!=0)?(D=c[j+8>>2]|0,D|0):0)?(k=c[p+8>>2]|0,(D|0)==(k|0)&(k|0)!=0):0){h=q;k=0;l=l+1|0;j=p;b=r;break}h=q+1|0;if(q|0)Xf(11716,d,e)|0;if((b?(c[p+12>>2]|0)!=0:0)?(E=c[p+8>>2]|0,(E|0)!=0):0){Uf(l+1|0,82004,d,0,e)|0;c[I>>2]=E;jd(d,85248,I)|0;k=0;l=0;n=o;b=r}else{k=0;l=0;n=o;b=r}}while(0);q=h;u=u+1|0;p=j;r=b}i=J;return (c[x>>2]|0)-y|0}function pg(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;x=(f|0)==0;a:do if(x){j=c[b+4>>2]|0;if((j|0?c[j+12>>2]|0:0)?(c[j+32>>2]|0)==0:0){r=31;break}j=c[b>>2]|0;if((j|0)!=0?(c[j+12>>2]|0)!=0:0)j=(c[j+32>>2]|0)!=0;else j=1;j=j<<31>>31;r=29}else{if((f|2|0)==3){j=c[b+4>>2]|0;if(j|0?c[j+12>>2]|0:0){r=31;break}j=c[b>>2]|0;if(!j)j=1;else j=(c[j+12>>2]|0)==0;j=j<<31>>31;r=29;break}switch(f|0){case 4:{j=c[b>>2]|0;if((j|0?c[j+12>>2]|0:0)?(c[j+32>>2]|0)==0:0){r=31;break a}j=c[b+4>>2]|0;if(!j){k=0;break a}if(!(c[j+12>>2]|0)){k=0;break a}if(!(c[j+32>>2]|0)){r=31;break a}else{k=0;break a}}case 2:break;default:{k=0;break a}}w=c[b+4>>2]|0;if(((((w|0)!=0?(c[w+12>>2]|0)!=0:0)?(c[w+32>>2]|0)>0:0)?(j=c[b>>2]|0,(j|0)!=0):0)?(c[j+12>>2]|0)!=0:0)j=(c[j+32>>2]|0)!=0;else j=1;j=j<<31>>31;r=29}while(0);if((r|0)==29)if((j|0)>-1){j=c[b+(j<<2)>>2]|0;r=31}else k=0;if((r|0)==31)k=j;v=d+8|0;w=c[v>>2]|0;s=(i|0)!=0;t=(f|2|0)==3;m=0;u=1;q=0;j=0;p=k;while(1){if((u|0)>(h|0))break;b:do if((u|0)<(h|0)){k=b+(u*24|0)|0;c:do if(x){o=c[b+(u*24|0)+4>>2]|0;if((o|0?c[o+12>>2]|0:0)?(c[o+32>>2]|0)==0:0){k=1;break}k=c[k>>2]|0;if((k|0)!=0?(c[k+12>>2]|0)!=0:0)k=(c[k+32>>2]|0)==0;else k=0;k=(k^1)<<31>>31;r=63}else{if(t){o=c[b+(u*24|0)+4>>2]|0;if(o|0?c[o+12>>2]|0:0){k=1;break}k=c[k>>2]|0;if(!k)k=0;else k=(c[k+12>>2]|0)!=0;k=(k^1)<<31>>31;r=63;break}switch(f|0){case 4:{o=c[k>>2]|0;if((o|0?c[o+12>>2]|0:0)?(c[o+32>>2]|0)==0:0){k=0;break c}k=c[b+(u*24|0)+4>>2]|0;if(!k){r=64;break b}if(!(c[k+12>>2]|0)){r=64;break b}if(!(c[k+32>>2]|0)){k=1;break c}else{r=64;break b}}case 2:break;default:{r=64;break b}}r=c[b+(u*24|0)+4>>2]|0;if(((((r|0)!=0?(c[r+12>>2]|0)!=0:0)?(c[r+32>>2]|0)>0:0)?(y=c[k>>2]|0,(y|0)!=0):0)?(c[y+12>>2]|0)!=0:0)k=(c[y+32>>2]|0)==0;else k=0;k=(k^1)<<31>>31;r=63}while(0);if((r|0)==63){r=0;if((k|0)<=-1){r=64;break}}l=c[b+(u*24|0)+(k<<2)>>2]|0;k=(p|0)!=0;if(k&(s&(l|0)!=0)){k=c[l+12>>2]|0;if(((k|0)>0?(c[p+12>>2]|0)==(k|0):0)?(z=c[p+44>>2]|0,(hp(z,c[l+44>>2]|0,k)|0)==0):0){i=0;while(1){if((i|0)>=(k|0)){k=1;o=l;r=72;break b}if(!(a[z+i>>0]|0))i=i+1|0;else break}i=m;l=q+1|0;k=p}else{k=1;o=l;r=72}}else{o=l;r=72}}else r=64;while(0);if((r|0)==64){k=(p|0)!=0;o=0;r=72}do if((r|0)==72){r=0;n=m+1|0;if(m|0)Xf(11716,d,e)|0;if(k){m=p+12|0;i=c[m>>2]|0;l=p+44|0;k=0;while(1){if((k|0)>=(i|0)){r=79;break}if(!(a[(c[l>>2]|0)+k>>0]|0))k=k+1|0;else{r=78;break}}if((r|0)==78){r=0;Uf(q+1|0,82004,d,0,e)|0;$f(0,c[l>>2]|0,c[m>>2]|0,d,g,e)|0;i=n;l=0;k=o;break}else if((r|0)==79){r=0;i=n;l=0;j=j+1|0;k=o;break}}else{i=n;l=0;k=o}}while(0);m=i;u=u+1|0;q=l;p=k}if((j|0)==(h|0)?(c[v>>2]|0)>(w|0):0){c[v>>2]=w;a[(c[d>>2]|0)+w>>0]=0}return (c[v>>2]|0)-w|0}function qg(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;B=(i|0)!=0;w=B?b:0;x=d+8|0;y=c[x>>2]|0;z=(f|0)==0;A=(f|2|0)==3;v=B&(j|0)!=0;t=(k|0)!=0;q=0;k=1;u=0;l=0;m=0;p=0;o=0;n=0;r=0;while(1){if((u|0)>(h|0))break;do if((u|0)<(h|0)){i=a+(u*24|0)|0;a:do if(z){s=c[a+(u*24|0)+4>>2]|0;if((s|0?c[s+12>>2]|0:0)?(c[s+32>>2]|0)==0:0){i=1;s=34;break}i=c[i>>2]|0;if((i|0)!=0?(c[i+12>>2]|0)!=0:0)i=(c[i+32>>2]|0)==0;else i=0;i=(i^1)<<31>>31;s=33}else{if(A){s=c[a+(u*24|0)+4>>2]|0;if(s|0?c[s+12>>2]|0:0){i=1;s=34;break}i=c[i>>2]|0;if(!i)i=0;else i=(c[i+12>>2]|0)!=0;i=(i^1)<<31>>31;s=33;break}switch(f|0){case 4:{j=c[i>>2]|0;if((j|0?c[j+12>>2]|0:0)?(c[j+32>>2]|0)==0:0){i=0;s=34;break a}i=c[a+(u*24|0)+4>>2]|0;if(!i){b=0;break a}if(!(c[i+12>>2]|0)){b=0;break a}if(!(c[i+32>>2]|0)){i=1;s=34;break a}else{b=0;break a}}case 2:break;default:{b=0;break a}}s=c[a+(u*24|0)+4>>2]|0;if(((((s|0)!=0?(c[s+12>>2]|0)!=0:0)?(c[s+32>>2]|0)>0:0)?(J=c[i>>2]|0,(J|0)!=0):0)?(c[J+12>>2]|0)!=0:0)i=(c[J+32>>2]|0)==0;else i=0;i=(i^1)<<31>>31;s=33}while(0);if((s|0)==33){s=0;if((i|0)>-1)s=34;else b=0}if((s|0)==34){s=0;b=c[a+(u*24|0)+(i<<2)>>2]|0}if(B){i=c[w+(u*24|0)+4>>2]|0;if(i|0?c[i+12>>2]|0:0){j=b;o=i;break}i=c[w+(u*24|0)>>2]|0;if((i|0)!=0?(K=(c[i+12>>2]|0)!=0,K):0){j=b;o=c[w+(u*24|0)+((K^1)<<31>>31<<2)>>2]|0}else{j=b;o=0}}else j=b}else{j=0;o=B?0:o}while(0);do if((((v?(j|0)!=0&(o|0)!=0:0)?(C=c[j+64>>2]|0,(C|0)!=0):0)?(D=c[o+64>>2]|0,(D|0)!=0):0)?(Nf(C,8,D,8,0)|0)!=0:0){if((p|0)!=0?(c[p+12>>2]|0)!=0:0){i=q+1|0;if(q|0)Xf(11716,d,e)|0;b=c[p+64>>2]|0;if((b|0)!=0?(E=b+28|0,(c[E>>2]|0)>0):0){Uf(l+1|0,82004,d,0,e)|0;hg(c[b+32>>2]|0,c[b+36>>2]|0,c[b+40>>2]|0,0,c[E>>2]|0,d,g,e)|0}}else if((n|0)!=0?(c[n+12>>2]|0)!=0:0){i=q+1|0;if(q)Xf(11716,d,e)|0}else i=q;b=Af(33)|0;if((r|0)!=0&(m|0)!=0){if(b|0?(kp(b,r)|0)==0:0){k=1;l=0;m=m+1|0;j=0;n=0;b=r;break}if(i|0)Xf(11716,d,e)|0;Yf(r,m,d,e)|0;i=i+1|0;k=1;l=0;m=1;j=0;n=0}else{k=1;l=0;m=1;j=0;n=0}}else s=64;while(0);do if((s|0)==64){s=0;if(k|0){if(!((r|0)!=0&(m|0)!=0)){i=q;k=0;l=0;n=o;b=r;break}if(q|0)Xf(11716,d,e)|0;Yf(r,m,d,e)|0;i=q+1|0;k=0;l=0;m=0;n=o;b=0;break}b=(p|0)!=0;if(((b&(t&(j|0)!=0)?(F=c[j+64>>2]|0,F|0):0)?(G=c[p+64>>2]|0,G|0):0)?Nf(F,8,G,8,0)|0:0){i=q;k=0;l=l+1|0;j=p;b=r;break}i=q+1|0;if(q|0)Xf(11716,d,e)|0;if(((b?(c[p+12>>2]|0)!=0:0)?(H=c[p+64>>2]|0,(H|0)!=0):0)?(I=H+28|0,(c[I>>2]|0)>0):0){Uf(l+1|0,82004,d,0,e)|0;hg(c[H+32>>2]|0,c[H+36>>2]|0,c[H+40>>2]|0,0,c[I>>2]|0,d,g,e)|0;k=0;l=0;n=o;b=r}else{k=0;l=0;n=o;b=r}}while(0);q=i;u=u+1|0;p=j;r=b}return (c[x>>2]|0)-y|0}function rg(a,b,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;B=(j|0)!=0;w=B?b:0;x=d+8|0;y=c[x>>2]|0;z=(f|0)==0;A=(f|2|0)==3;v=B&(k|0)!=0;s=(l|0)!=0;q=0;k=1;t=0;l=0;m=0;p=0;o=0;n=0;r=0;while(1){if((t|0)>(h|0))break;do if((t|0)<(h|0)){i=a+(t*24|0)|0;a:do if(z){u=c[a+(t*24|0)+4>>2]|0;if((u|0?c[u+12>>2]|0:0)?(c[u+32>>2]|0)==0:0){i=1;u=34;break}i=c[i>>2]|0;if((i|0)!=0?(c[i+12>>2]|0)!=0:0)i=(c[i+32>>2]|0)==0;else i=0;i=(i^1)<<31>>31;u=33}else{if(A){u=c[a+(t*24|0)+4>>2]|0;if(u|0?c[u+12>>2]|0:0){i=1;u=34;break}i=c[i>>2]|0;if(!i)i=0;else i=(c[i+12>>2]|0)!=0;i=(i^1)<<31>>31;u=33;break}switch(f|0){case 4:{b=c[i>>2]|0;if((b|0?c[b+12>>2]|0:0)?(c[b+32>>2]|0)==0:0){i=0;u=34;break a}i=c[a+(t*24|0)+4>>2]|0;if(!i){j=0;break a}if(!(c[i+12>>2]|0)){j=0;break a}if(!(c[i+32>>2]|0)){i=1;u=34;break a}else{j=0;break a}}case 2:break;default:{j=0;break a}}u=c[a+(t*24|0)+4>>2]|0;if(((((u|0)!=0?(c[u+12>>2]|0)!=0:0)?(c[u+32>>2]|0)>0:0)?(H=c[i>>2]|0,(H|0)!=0):0)?(c[H+12>>2]|0)!=0:0)i=(c[H+32>>2]|0)==0;else i=0;i=(i^1)<<31>>31;u=33}while(0);if((u|0)==33){u=0;if((i|0)>-1)u=34;else j=0}if((u|0)==34){u=0;j=c[a+(t*24|0)+(i<<2)>>2]|0}if(B){i=c[w+(t*24|0)+4>>2]|0;if(i|0?c[i+12>>2]|0:0){b=j;o=i;break}i=c[w+(t*24|0)>>2]|0;if((i|0)!=0?(I=(c[i+12>>2]|0)!=0,I):0){b=j;o=c[w+(t*24|0)+((I^1)<<31>>31<<2)>>2]|0}else{b=j;o=0}}else b=j}else{b=0;o=B?0:o}while(0);do if((((v?(b|0)!=0&(o|0)!=0:0)?(C=c[b+64>>2]|0,(C|0)!=0):0)?(D=c[o+64>>2]|0,(D|0)!=0):0)?(Nf(C,2,D,2,0)|0)!=0:0){if((p|0)!=0?(c[p+12>>2]|0)!=0:0){i=q+1|0;if(q|0)Xf(11716,d,e)|0;j=c[p+64>>2]|0;if((j|0)!=0?(c[j>>2]|0)>0:0){Uf(l+1|0,82004,d,0,e)|0;hg(c[j+4>>2]|0,0,c[j+8>>2]|0,0,c[j>>2]|0,d,g,e)|0}}else if((n|0)!=0?(c[n+12>>2]|0)!=0:0){i=q+1|0;if(q)Xf(11716,d,e)|0}else i=q;j=Af(33)|0;if((r|0)!=0&(m|0)!=0){if(j|0?(kp(j,r)|0)==0:0){k=1;l=0;m=m+1|0;b=0;n=0;j=r;break}if(i|0)Xf(11716,d,e)|0;Yf(r,m,d,e)|0;i=i+1|0;k=1;l=0;m=1;b=0;n=0}else{k=1;l=0;m=1;b=0;n=0}}else u=64;while(0);do if((u|0)==64){u=0;if(k|0){if(!((r|0)!=0&(m|0)!=0)){i=q;k=0;l=0;n=o;j=r;break}if(q|0)Xf(11716,d,e)|0;Yf(r,m,d,e)|0;i=q+1|0;k=0;l=0;m=0;n=o;j=0;break}j=(p|0)!=0;if(((j&(s&(b|0)!=0)?(E=c[b+64>>2]|0,E|0):0)?(F=c[p+64>>2]|0,F|0):0)?Nf(E,2,F,2,0)|0:0){i=q;k=0;l=l+1|0;b=p;j=r;break}i=q+1|0;if(q|0)Xf(11716,d,e)|0;if(((j?(c[p+12>>2]|0)!=0:0)?(G=c[p+64>>2]|0,(G|0)!=0):0)?(c[G>>2]|0)>0:0){Uf(l+1|0,82004,d,0,e)|0;hg(c[G+4>>2]|0,0,c[G+8>>2]|0,0,c[G>>2]|0,d,g,e)|0;k=0;l=0;n=o;j=r}else{k=0;l=0;n=o;j=r}}while(0);q=i;t=t+1|0;p=b;r=j}return (c[x>>2]|0)-y|0}function sg(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;i=b+8|0;j=c[i>>2]|0;k=(e|0)==0;l=(e|2|0)==3;p=0;while(1){if(!((p|0)<(f|0)&(c[d>>2]|0)==0))break;g=a+(p*24|0)|0;a:do if(k){h=c[a+(p*24|0)+4>>2]|0;if((h|0?c[h+12>>2]|0:0)?(c[h+32>>2]|0)==0:0){g=1;h=32;break}g=c[g>>2]|0;if((g|0)!=0?(c[g+12>>2]|0)!=0:0)g=(c[g+32>>2]|0)==0;else g=0;g=(g^1)<<31>>31;h=31}else{if(l){h=c[a+(p*24|0)+4>>2]|0;if(h|0?c[h+12>>2]|0:0){g=1;h=32;break}g=c[g>>2]|0;if(!g)g=0;else g=(c[g+12>>2]|0)!=0;g=(g^1)<<31>>31;h=31;break}switch(e|0){case 4:{h=c[g>>2]|0;if((h|0?c[h+12>>2]|0:0)?(c[h+32>>2]|0)==0:0){g=0;h=32;break a}g=c[a+(p*24|0)+4>>2]|0;if(!g){h=36;break a}if(!(c[g+12>>2]|0)){h=36;break a}if(!(c[g+32>>2]|0)){g=1;h=32;break a}else{h=36;break a}}case 2:break;default:{h=36;break a}}h=c[a+(p*24|0)+4>>2]|0;if(((((h|0)!=0?(c[h+12>>2]|0)!=0:0)?(c[h+32>>2]|0)>0:0)?(m=c[g>>2]|0,(m|0)!=0):0)?(c[m+12>>2]|0)!=0:0)g=(c[m+32>>2]|0)==0;else g=0;g=(g^1)<<31>>31;h=31}while(0);if((h|0)==31)if((g|0)>-1)h=32;else h=36;if((h|0)==32){h=0;g=c[a+(p*24|0)+(g<<2)>>2]|0;if(((g|0)!=0?(n=c[g+64>>2]|0,(n|0)!=0):0)?(o=c[n+20>>2]|0,(o|0)!=0):0)Xf((o|0)<0?12840:12842,b,d)|0;else h=36}if((h|0)==36)Xf(90921,b,d)|0;p=p+1|0}return (c[i>>2]|0)-j|0} -function am(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;l=i-f|0;do if((c[d>>2]|0)==0?(k=(c[j>>2]|0)-l|0,(g-k|0)>(h|0)):0){if((i|0)!=(f|0)){c[j>>2]=k;jr(f|0,i|0,k+1|0)|0;i=c[e>>2]|0;if(!i)i=f;else{c[e>>2]=i+(0-l);i=f}}h=c[j>>2]|0;h=Xc(f+h|0,g+-1-h|0,a,b)|0;if((h|0)<=0){c[d>>2]=1;break}f=op(i+(c[j>>2]|0)|0,47)|0;c[e>>2]=f;if(!f)k=(c[b>>2]|0)==0;else k=1;c[d>>2]=k&1;c[j>>2]=(c[j>>2]|0)+h}while(0);return i|0}function bm(f,g,j,k,l,m,n,o,p,q,r,s,t,u,v){f=f|0;g=g|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;t=t|0;u=u|0;v=v|0;var w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0.0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;Y=i;i=i+262240|0;L=Y+80|0;J=Y+76|0;X=Y+88|0;H=Y+72|0;I=Y+68|0;W=Y+64|0;A=Y+44|0;V=Y;c[W>>2]=0;if(!(c[22875]|0)){w=92282;x=83657;y=w+9|0;do{a[w>>0]=a[x>>0]|0;w=w+1|0;x=x+1|0}while((w|0)<(y|0));c[22875]=8}K=(m|0)!=0;if(K){w=c[m>>2]|0;if((n|0)!=0&(w|0)!=0)er(w|0,0,n*176|0)|0;if(g|0?(z=c[g>>2]|0,z|0):0){Cq(z);c[g>>2]=0}}c[A+16>>2]=0;c[A+12>>2]=0;y=A+8|0;c[y>>2]=0;c[p>>2]=0;c[o>>2]=0;do if((l|0)==4){c[y>>2]=0;U=A+4|0;while(1){w=Wc(X,262143,f,U)|0;if((w|0)<=0){T=257;break}if((c[U>>2]|0)==0?(hp(X,83666,10)|0)==0:0){cm(X,q,r,s,10,A);continue}x=c[22875]|0;if(!(hp(X,92282,x)|0))break}if((T|0)==257){c[J>>2]=w;if(c[W>>2]|0)Zl(W);if((c[u>>2]|0)==40){w=0;break}c[u>>2]=11;w=0;break}c[J>>2]=w;a:do if(!(np(X,83693)|0)){if(!(c[y>>2]|0)){c[A>>2]=0;if(s|0)c[s>>2]=0;if(q|0)a[q>>0]=0;if(r|0)a[r>>0]=0}c[y>>2]=0;w=op(X+x|0,47)|0;if(w|0?(a[w+1>>0]|0)==47:0)switch(a[w+2>>0]|0){case 10:case 0:{w=0;break a}default:{}}x=$l(f,U,12270,4,X,262144,X,J)|0;if(!x){c[u>>2]=40;ld(v,83742)|0;w=-1;T=261;break}C=op(x,47)|0;c[I>>2]=C;c[L>>2]=((C|0)!=0|(c[U>>2]|0)==0)&1;C=n*176|0;s=0;z=0;w=0;q=0;l=0;y=0;while(1){x=am(f,U,L,I,X,262144,32767,x,J)|0;if(!w){y=Rp(x,H,10)|0;x=c[H>>2]|0;if(!((y|0)!=0&(x|0)!=0)){w=0;break a}z=a[x>>0]|0;if(!(z<<24>>24)){w=0;break a}switch(z<<24>>24|0){case 99:{s=s|1;x=x+1|0;break}case 110:{s=s|2;x=x+1|0;break}default:{}}do if(K?(D=c[m>>2]|0,(D|0)!=0):0){if((y|0)>(n|0)){Cq(D);c[m>>2]=0;T=43;break}er(D|0,0,C|0)|0;z=c[m>>2]|0;if(z)l=y+1|0;else T=43}else T=43;while(0);if((T|0)==43){T=0;l=y+1|0;z=sl(l)|0;if(!z){T=44;break}}S=Dq(l,12)|0;c[W>>2]=S;if(!S){T=46;break}else B=s}else B=s;if(!(aq(d[x>>0]|0)|0)){S=B;R=z;z=q;T=75;break}if(!((w|0)<(y|0)&(sp(d[x>>0]|0)|0)!=0)){S=B;R=z;z=q;T=75;break}s=x+1|0;A=z+(w*176|0)|0;a[A>>0]=a[x>>0]|0;if((aq(d[s>>0]|0)|0)!=0?(_p(d[s>>0]|0)|0)!=0:0){a[z+(w*176|0)+1>>0]=a[s>>0]|0;x=x+2|0}else x=s;r=z+(w*176|0)+6|0;a[r>>0]=$n(A)|0;s=a[x>>0]|0;if(((s&255)+-48|0)>>>0<10){x=(Rp(x,H,10)|0)&255;a[z+(w*176|0)+93>>0]=x<<24>>24==0?15:x;x=c[H>>2]|0;s=a[x>>0]|0}S=s<<24>>24==43?1:(s<<24>>24==45)<<31>>31;s=z+(w*176|0)+99|0;a[s>>0]=S;if(S<<24>>24){x=x+1|0;if(((d[x>>0]|0)+-48|0)>>>0<10){x=(Rp(x,H,10)|0)<<24>>24;a[s>>0]=_(a[s>>0]|0,x)|0;x=c[H>>2]|0}}s=a[x>>0]|0;if(s<<24>>24==46){x=x+1|0;s=a[x>>0]|0;if(((s&255)+-48|0)>>>0<10){a[z+(w*176|0)+100>>0]=Rp(x,H,10)|0;x=c[H>>2]|0;s=a[x>>0]|0}}if(s<<24>>24==105){x=x+1|0;s=a[x>>0]|0;if(((s&255)+-48|0)>>>0<10){s=Rp(x,H,10)|0;x=c[H>>2]|0;s=s-(ko(d[r>>0]|0)|0)|0;a[z+(w*176|0)+98>>0]=(s>>>31^1)+s;s=a[x>>0]|0}}switch(s<<24>>24|0){case 111:{s=1;T=67;break}case 101:{s=2;T=67;break}case 117:{s=3;T=67;break}case 63:{s=4;T=67;break}default:{}}if((T|0)==67){T=0;S=c[W>>2]|0;b[S+(q*12|0)+8>>1]=w;a[S+(q*12|0)+11>>0]=s;a[S+(q*12|0)+10>>0]=2;q=q+1|0;x=x+1|0}A=0;while(1){if((A|0)==3)break;do if((a[x>>0]|0)==(a[83760+A>>0]|0)){s=z+(w*176|0)+95+A|0;a[s>>0]=1;x=x+1|0;if(((d[x>>0]|0)+-48|0)>>>0>=10)break;a[s>>0]=Rp(x,H,10)|0;x=c[H>>2]|0}while(0);A=A+1|0}s=B;w=w+1|0}if((T|0)==44){c[u>>2]=1;ld(v,85269)|0;w=0;break}else if((T|0)==46){c[u>>2]=1;ld(v,85269)|0;w=0;break}else if((T|0)==75){if((w|0)==(y|0)&(c[L>>2]|0)!=0?(Q=c[I>>2]|0,(Q|0)==0|(x|0)==(Q|0)):0){x=$l(f,U,12275,4,X,262144,x,J)|0;if(!x){c[u>>2]=40;ld(v,83786)|0;w=-1;T=261;break}Q=op(x,47)|0;c[I>>2]=Q;c[L>>2]=((Q|0)!=0|(c[U>>2]|0)==0)&1;if((w|0)==1){w=1;x=am(f,U,L,I,X,262144,32767,x,J)|0}y=1;G=z;b:while(1){c:while(1){D=(y|0)<(w|0);n=R+(y*176|0)+92|0;E=y&65535;while(1){if(!D){T=123;break b}x=am(f,U,L,I,X,262144,32767,x,J)|0;Q=c[I>>2]|0;if(!((Q|0)==0|x>>>0>>0)){T=123;break b}z=a[x>>0]|0;if(z<<24>>24==59)break;if(!(aq(z&255)|0)){T=90;break b}s=x+1|0;A=a[x>>0]|0;switch(a[s>>0]|0){case 45:{z=1;T=95;break}case 43:{z=2;T=95;break}case 117:{z=3;T=95;break}case 63:{z=4;T=95;break}default:{z=0;C=0;x=s}}d:do if((T|0)==95){T=0;s=x+2|0;switch(a[s>>0]|0){case 45:{C=8;x=x+3|0;break d}case 43:{C=16;x=x+3|0;break d}case 117:{C=24;x=x+3|0;break d}case 63:{C=32;x=x+3|0;break d}default:{C=0;x=s;break d}}}while(0);if(((d[x>>0]|0)+-48|0)>>>0>=10){T=101;break b}Q=Rp(x,H,10)|0;B=Q+-1|0;if((Q|0)>(w|0)){T=103;break b}x=c[H>>2]|0;do switch(A|0){case 118:{s=4;A=-4;r=1;break}case 86:{s=-4;A=4;r=1;break}case 119:{s=3;A=3;r=2;break}case 115:{s=0;A=0;r=1;break}case 100:{s=0;A=0;r=2;break}case 116:{s=0;A=0;r=3;break}case 97:{s=0;A=0;r=4;break}case 112:{s=1;A=-1;r=1;break}case 80:{s=-1;A=1;r=1;break}case 110:{s=6;A=-6;r=1;break}case 78:{s=-6;A=6;r=1;break}default:{T=115;break b}}while(0);P=a[n>>0]|0;a[n>>0]=P+1<<24>>24;P=P<<24>>24;a[R+(y*176|0)+72+P>>0]=r;a[R+(y*176|0)+52+P>>0]=s;q=B&65535;b[R+(y*176|0)+8+(P<<1)>>1]=q;P=R+(B*176|0)+92|0;Q=a[P>>0]|0;a[P>>0]=Q+1<<24>>24;Q=Q<<24>>24;a[R+(B*176|0)+72+Q>>0]=r;a[R+(B*176|0)+52+Q>>0]=A;b[R+(B*176|0)+8+(Q<<1)>>1]=E;z=C|z;if(z){A=z;s=E;break c}}y=y+1|0;x=x+1|0}if((l|0)>(G|0))z=c[W>>2]|0;else{l=w+l|0;z=Dq(l,12)|0;if(!z){T=121;break}ir(z|0,c[W>>2]|0,G*12|0)|0;Zl(W);c[W>>2]=z}b[z+(G*12|0)+2>>1]=q;b[z+(G*12|0)+4>>1]=s;a[z+(G*12|0)+11>>0]=A;a[z+(G*12|0)+10>>0]=1;G=G+1|0}if((T|0)==90){c[u>>2]=40;ld(v,83805)|0;w=-1;T=261;break}else if((T|0)==101){c[u>>2]=40;ld(v,83805)|0;w=-1;T=261;break}else if((T|0)==103){c[u>>2]=40;ld(v,83822)|0;w=-1;T=261;break}else if((T|0)==115){c[u>>2]=40;ld(v,83847)|0;w=-1;T=261;break}else if((T|0)==121){c[u>>2]=1;ld(v,85269)|0;w=0;break}else if((T|0)==123){if((y|0)==(w|0)&(c[L>>2]|0)!=0?(Q=c[I>>2]|0,(Q|0)==0|(x|0)==(Q|0)):0){l=$l(f,U,12286,4,X,262144,x,J)|0;if(!l){c[u>>2]=40;ld(v,83885)|0;w=-1;T=261;break}x=((w|0)>1?w:1)<<5;Q=Bq(x)|0;if(!Q){c[u>>2]=1;ld(v,85269)|0;w=0;break}er(Q|0,32,x|0)|0;s=op(l,47)|0;c[I>>2]=s;c[L>>2]=((s|0)!=0|(c[U>>2]|0)==0)&1;B=0;z=0;y=0;x=l;e:while(1){while(1){if((y|0)>=(w|0)){l=B;break e}x=am(f,U,L,I,X,262144,32767,x,J)|0;s=c[I>>2]|0;if(!((s|0)==0|x>>>0>>0)){l=B;break e}l=a[x>>0]|0;if(l<<24>>24==59)l=0;else break;while(1){if((l|0)==3)break;a[(l*10|0)+4+(Q+(y<<5))>>0]=48;l=l+1|0}y=y+1|0;x=x+1|0}C=R+(y*176|0)+112|0;D=R+(y*176|0)+120|0;n=R+(y*176|0)+128|0;r=0;while(1){A=l<<24>>24==59;if((r|0)==3)break;do if(A){a[(r*10|0)+4+(Q+(y<<5))>>0]=48;l=0;F=0.0}else{if(l<<24>>24==44){a[(r*10|0)+4+(Q+(y<<5))>>0]=48;l=0;x=x+1|0;F=0.0;break}F=+zq(x,H);l=+N(+F)>1.0e-06&1;q=c[H>>2]|0;A=r*10|0;if(!q){a[A+4+(Q+(y<<5))>>0]=48;break}ir(Q+(y<<5)+A|0,x|0,q-x|0)|0;if((a[q>>0]|0)!=44){x=q;break}x=q+1|0;c[H>>2]=x}while(0);switch(r|0){case 0:{h[C>>3]=F;A=l|B;break}case 1:{h[D>>3]=F;A=l|B;break}case 2:{h[n>>3]=F;A=B;z=l|z;break}default:A=B}l=a[x>>0]|0;B=A;r=r+1|0}if(!A){T=155;break}y=y+1|0;x=x+1|0}if((T|0)==155){c[u>>2]=40;ld(v,83915)|0;w=-1;T=261;break}do if(c[L>>2]|0){if(!((y|0)==(w|0)&((s|0)==0|(x|0)==(s|0))))break;P=l|z;do if(K){f:do if(!(c[m>>2]|0)){c[m>>2]=R;m=(P|0)==0;M=V+12|0;O=0;l=0;z=0;y=0;x=0;g:while(1){if((O|0)<1)L=0;else break;while(1){if((L|0)>=(w|0))break;c[V>>2]=0;c[V+4>>2]=0;c[V+8>>2]=0;c[V+12>>2]=0;J=R+(L*176|0)+93|0;H=a[J>>0]|0;a[J>>0]=0;K=L+1|0;b[R+(L*176|0)+48>>1]=K;I=R+(L*176|0)+92|0;A=R+(L*176|0)+112|0;q=R+(L*176|0)+120|0;r=R+(L*176|0)+128|0;B=0;z=0;y=0;x=0;while(1){s=a[I>>0]|0;if((B|0)>=(s<<24>>24|0)){r=s;break}E=a[R+(L*176|0)+72+B>>0]|0;s=(E&255)+-1|0;if(E<<24>>24==0|(s|0)>3){ld(v,83971)|0;s=0}E=V+(s<<2)|0;c[E>>2]=(c[E>>2]|0)+1;if(!m){E=e[R+(L*176|0)+8+(B<<1)>>1]|0;z=+N(+(+h[A>>3]-+h[R+(E*176|0)+112>>3]))>1.0e-06|z;y=+N(+(+h[q>>3]-+h[R+(E*176|0)+120>>3]))>1.0e-06|y;x=+N(+(+h[r>>3]-+h[R+(E*176|0)+128>>3]))>1.0e-06|x}B=B+1|0;l=l+1|0}s=0;q=0;while(1){A=q+1|0;if((q|0)==3)break;s=(_(c[V+(q<<2)>>2]|0,A)|0)+s|0;q=A}E=H<<24>>24;A=c[M>>2]|0;switch(A|0){case 0:break;case 2:{A=3;T=183;break}case 3:{A=4;T=183;break}default:{n=L&65535;q=r;D=0;while(1){if((D|0)>=(q<<24>>24|0))break;C=R+(L*176|0)+72+D|0;if((a[C>>0]|0)==4){q=e[R+(L*176|0)+8+(D<<1)>>1]|0;r=R+(q*176|0)+8|0;B=mo(r,n,a[R+(q*176|0)+92>>0]|0)|0;if(!B){T=245;break g}a[(B-r>>1)+(R+(q*176|0)+72)>>0]=1;a[C>>0]=1;q=a[I>>0]|0}D=D+1|0}c[u>>2]=c[u>>2]|32;ld(v,84028)|0;T=183}}do if((T|0)==183){T=0;s=A+s|0;A=a[R+(L*176|0)+94>>0]|0;q=a[R+(L*176|0)+95>>0]|0;r=a[R+(L*176|0)+96>>0]|0;B=a[R+(L*176|0)+97>>0]|0;if(H<<24>>24){s=(((E|0)==(s+-1+A+q+r+B|0))<<31>>31)+s|0;break}H=q+A+r+B|0;C=R+(L*176|0)+6|0;D=R+(L*176|0)+99|0;n=R+(L*176|0)+100|0;B=fo(d[C>>0]|0,a[D>>0]|0,a[n>>0]|0,s,H,a[I>>0]|0)|0;A=s+-1|0;if((B|0)==0|(fo(d[C>>0]|0,a[D>>0]|0,a[n>>0]|0,A,H,a[I>>0]|0)|0)!=0)break;I=(po(R,L)|0)==0;s=I?A:s}while(0);a[J>>0]=s;J=R+(L*176|0)+94|0;a[J>>0]=eo(R+(L*176|0)|0,a[J>>0]|0,R+(L*176|0)+95|0,a[R+(L*176|0)+99>>0]|0,a[R+(L*176|0)+100>>0]|0,s<<24>>24,E,0,j,0)|0;L=K}O=O+1|0}if((T|0)==245){c[u>>2]=-2;ld(v,84180)|0;w=0;break a}if((P|0)!=0&(l+1|0)>>>0>2){T=y+z+x|0;c[o>>2]=(T|0)==3?3:(T|0)>0?2:0;c[p>>2]=(l|0)/2|0}H=V+2|0;I=0;x=0;while(1){if((I|0)>=(G|0))break f;z=c[W>>2]|0;h:do switch(a[z+(I*12|0)+10>>0]|0){case 2:{y=b[z+(I*12|0)+8>>1]|0;A=y<<16>>16;if(!(a[z+(I*12|0)+11>>0]|0))break h;l=a[R+(A*176|0)+92>>0]|0;if((l+-3&255)>=2)break h;if(l<<24>>24==3){b[z+(I*12|0)>>1]=y;z=c[W>>2]|0;y=1}else y=0;l=l<<24>>24;s=0;while(1){if((s|0)>=(l|0))break h;b[z+(I*12|0)+(y<<1)>>1]=b[R+(A*176|0)+8+(s<<1)>>1]|0;s=s+1|0;y=y+1|0}}case 1:{E=b[z+(I*12|0)+2>>1]|0;B=E<<16>>16;A=b[z+(I*12|0)+4>>1]|0;n=A<<16>>16;s=R+(B*176|0)+8|0;y=R+(B*176|0)+92|0;A=mo(s,A,a[y>>0]|0)|0;q=R+(n*176|0)+8|0;z=R+(n*176|0)+92|0;r=mo(q,E,a[z>>0]|0)|0;if(!((A|0)!=0&(r|0)!=0)){T=c[W>>2]|0;a[T+(I*12|0)+10>>0]=0;b[T+(I*12|0)+8>>1]=-1;b[T+(I*12|0)+6>>1]=-1;b[T+(I*12|0)>>1]=-1;c[u>>2]=c[u>>2]|64;ld(v,84069)|0;break h}D=A-s>>1;C=r-q>>1;y=(a[y>>0]|0)==2;do if(y){if(((d[R+(B*176|0)+73>>0]|0)+(d[R+(B*176|0)+72>>0]|0)|0)!=4){l=0;break}if((a[R+(B*176|0)+94>>0]|0)!=(0-((a[R+(B*176|0)+95>>0]|0)+(a[R+(B*176|0)+96>>0]|0)+(a[R+(B*176|0)+97>>0]|0))|0)){l=0;break}if((a[z>>0]|0)==2?((d[R+(n*176|0)+73>>0]|0)+(d[R+(n*176|0)+72>>0]|0)|0)==4:0){l=0;break}l=1}else l=0;while(0);do if((a[z>>0]|0)==2){if(((d[R+(n*176|0)+73>>0]|0)+(d[R+(n*176|0)+72>>0]|0)|0)!=4){y=0;break}if((a[R+(n*176|0)+94>>0]|0)!=(0-((a[R+(n*176|0)+95>>0]|0)+(a[R+(n*176|0)+96>>0]|0)+(a[R+(n*176|0)+97>>0]|0))|0)){y=0;break}if(y?((d[R+(B*176|0)+73>>0]|0)+(d[R+(B*176|0)+72>>0]|0)|0)==4:0){y=0;break}y=1}else y=0;while(0);if((y+l|0)==1){s=(l|0)==0|(y|0)!=0;r=s?B:n;D=s?D:C;q=r&65535;s=(s?n:E&65535)&65535;b[V>>1]=q;b[H>>1]=s;z=q;l=2;while(1){if((l|0)>=20){T=223;break}x=s&65535;y=a[R+(x*176|0)+92>>0]|0;if(y<<24>>24!=2){x=z;z=s;T=222;break}if(((d[R+(x*176|0)+73>>0]|0)+(d[R+(x*176|0)+72>>0]|0)|0)!=4){x=z;z=s;T=222;break}if((a[R+(x*176|0)+94>>0]|0)!=(0-((a[R+(x*176|0)+95>>0]|0)+(a[R+(x*176|0)+96>>0]|0)+(a[R+(x*176|0)+97>>0]|0))|0)){x=z;z=s;T=222;break}x=b[R+(x*176|0)+8+(((b[R+(x*176|0)+8>>1]|0)==z<<16>>16&1)<<1)>>1]|0;b[V+(l<<1)>>1]=x;T=s;l=l+1|0;s=x;x=z;z=T}if((T|0)==222)if((l|0)>2){A=l;T=224}else T=228;else if((T|0)==223){y=a[R+((z&65535)*176|0)+92>>0]|0;A=l;T=224}do if((T|0)==224){T=0;s=z&65535;l=R+(s*176|0)+8|0;y=mo(l,x,y<<24>>24)|0;if(!y){T=228;break}y=y-l>>1;l=c[W>>2]|0;b[l+(I*12|0)>>1]=b[R+(r*176|0)+8+(((D|0)==0&1)<<1)>>1]|0;b[l+(I*12|0)+2>>1]=q;b[l+(I*12|0)+4>>1]=z;b[l+(I*12|0)+6>>1]=b[R+(s*176|0)+8+(((y|0)==0&1)<<1)>>1]|0;if(!(A&1)){b[l+(I*12|0)+8>>1]=-1;break}else{b[l+(I*12|0)+8>>1]=b[V+(((A|0)/2|0)<<1)>>1]|0;a[l+(I*12|0)+10>>0]=3;break}}while(0);if((T|0)==228){y=c[W>>2]|0;a[y+(I*12|0)+10>>0]=0;b[y+(I*12|0)+8>>1]=-1;b[y+(I*12|0)+6>>1]=-1;b[y+(I*12|0)>>1]=-1;c[u>>2]=c[u>>2]|64;ld(v,84098)|0;y=-1}z=c[W>>2]|0;C=y}else{z=c[W>>2]|0;b[z+(I*12|0)>>1]=b[R+(B*176|0)+8+(((A|0)==(s|0)&1)<<1)>>1]|0;b[z+(I*12|0)+6>>1]=b[R+(n*176|0)+8+(((r|0)==(q|0)&1)<<1)>>1]|0;b[z+(I*12|0)+8>>1]=-1}if(!((C|D|0)>-1?(a[z+(I*12|0)+10>>0]|0)!=0:0))break h;if((((d[z+(I*12|0)+11>>0]|0)>>>3&7)+-1|0)>>>0<2)B=0;else break h;while(1){if((B|0)==2)break h;r=(B|0)!=0;l=c[W>>2]|0;l=b[(r?l+(I*12|0)+4|0:l+(I*12|0)+2|0)>>1]|0;s=r?C:D;A=R+(l*176|0)+92|0;q=0;y=w;while(1){if((q|0)>=(a[A>>0]|0))break;z=e[R+(l*176|0)+8+(q<<1)>>1]|0;do if((q|0)!=(s|0)){if(ho(d[R+(z*176|0)+6>>0]|0)|0)break;y=(z|0)<(y|0)?z:y}while(0);q=q+1|0}if((y|0)<(w|0))b[(c[W>>2]|0)+(I*12|0)+((r?3:0)<<1)>>1]=y;else ld(v,84134)|0;B=B+1|0}}default:{}}while(0);I=I+1|0}}while(0);if(G|0)_l(R,w,c[W>>2]|0,G,v,u,k)|0;if(!t)break;c[t>>2]=c[t>>2]|S}else{if(!R)break;Cq(R)}while(0);if(c[W>>2]|0)Zl(W);if(!g){Cq(Q);T=261;break a}else{c[g>>2]=Q;T=261;break a}}while(0);c[u>>2]=40;ld(v,83943)|0;w=-1;T=261;break}c[u>>2]=40;ld(v,83863)|0;w=-1;T=261;break}}c[u>>2]=40;ld(v,83764)|0;w=-1;T=261;break}}else{c[u>>2]=40;ld(v,83697)|0;w=-1;T=261}while(0);if((T|0)==261)if((w|0)==-1&(c[W>>2]|0)!=0){Zl(W);w=-1}if(c[U>>2]|0)do W=(Xc(X,262143,f,U)|0)<1;while(!(W|(c[U>>2]|0)==0))}else w=0;while(0);i=Y;return w|0}function cm(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+16|0;o=p+4|0;n=p;g=b+g|0;c[h>>2]=0;c[h>>2]=Rp(g,n,10)|0;b=c[n>>2]|0;if((b|0)!=0?(a[b>>0]|0)==46:0)g=(a[b+1>>0]|0)==32?b+2|0:g;j=g+(ip(g,83677)|0)|0;k=(d|0)!=0;if(k)a[d>>0]=0;l=(e|0)!=0;if(l)a[e>>0]=0;do if(a[j>>0]|0){b=op(j,61)|0;c[n>>2]=b;if(!b){g=np(j,83681)|0;c[n>>2]=g;if(!g)break;g=g-j+1|0;g=(g|0)<63?g:63;c[o>>2]=g;if(!k)break;Do(d,j,g)|0;break}g=b-j+1|0;g=(g|0)<63?g:63;c[o>>2]=g;if(k){Do(d,j,g)|0;Go(d,o)|0}g=b+1|0;b=cp(g)|0;c[n>>2]=g+b;if((b|0)>0?(m=b+1|0,m=(m|0)<254?m:254,c[o>>2]=m,l):0)Do(e,g,m)|0}while(0);if(f|0)c[f>>2]=c[h>>2];c[h+8>>2]=1;c[h+16>>2]=0;c[h+12>>2]=0;i=p;return}function dm(b,d,e,f,g,h,j,k,l,m,n,o,p,q,r,s){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;var t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=i;i=i+512|0;v=H;A=H+464|0;C=H+496|0;B=H+460|0;D=H+456|0;G=H+96|0;E=H+32|0;F=H+8|0;y=H+4|0;a[C>>0]=s;c[B>>2]=0;c[D>>2]=0;if((((o|0)!=0?(t=c[o+68>>2]|0,(t|0)!=0):0)?(c[t+4>>2]|0)>0:0)?(c[t+16>>2]|0)!=0:0){w=((c[f+180>>2]|0)+-1|0)>>>0<2;t=0}else{w=0;t=1}z=e+284|0;c[z>>2]=0;c[e+288>>2]=0;er(G|0,0,360)|0;s=E;u=s+64|0;do{c[s>>2]=0;s=s+4|0}while((s|0)<(u|0));if(!(t|w))Vl(c[o+68>>2]|0,c[o>>2]|0,c[o+12>>2]|0,o+8|0);t=f+192|0;if((c[t>>2]&16|0)!=0?(c[v>>2]=q,qq(A,84230,v)|0,(Pl(o,m,A,0,c[e+292>>2]&1,(c[t>>2]|0)>>>11&1,c[f+68>>2]|0,c[f+72>>2]|0)|0)!=0):0)t=0;else{c[F>>2]=0;c[F+4>>2]=0;c[F+8>>2]=0;c[F+12>>2]=0;c[F+16>>2]=0;c[F+20>>2]=0;em(d,B,e,0,o,F)|0;t=c[B>>2]|0;if((t&-2|0)!=2){v=fm(d,b,e,f,g,h,j,0,k,l,m,n,o,p,G,q,0,E)|0;t=(t|0)>(v|0)?t:v;c[B>>2]=t;if(w?(x=o+68|0,(ym(c[x>>2]|0)|0)==2):0){v=p+68|0;c[v>>2]=c[x>>2];Mm(p,G+60|0,y,e+16|0);y=(c[y>>2]|0)==0?0:2;t=(t|0)>(y|0)?t:y;c[B>>2]=t;c[v>>2]=0}}if(((t&-2|0)!=2?(c[e+320>>2]&256|0)!=0:0)?(c[f+288>>2]&256|0)!=0:0){g=fm(d,b,e,f,g,h,j,1,k,l,m,n,o,p,G,q,0,E)|0;t=(t|0)>(g|0)?t:g;c[B>>2]=t;if(w){g=p+68|0;c[g>>2]=c[o+68>>2];Mm(p,G+240|0,A,e+16|0);A=(c[A>>2]|0)==0?0:2;t=(t|0)>(A|0)?t:A;c[B>>2]=t;c[g>>2]=0}}if((t&-2|0)!=2){if((c[e+292>>2]&1|0?(c[f+184>>2]&1552|0)==16:0)?(Wm(h,e+328|0)|0)==0:0)ld(e+16|0,84681)|0;if((c[z>>2]|0)==0?(c[e+280>>2]|0)==0:0){A=_m(e,f,p,q,k,l,m,n)|0;t=(t|0)>(A|0)?t:A;c[B>>2]=t}}hm(C,f);if((t&-2|0)!=2)Tm(d,m,r,l,f,o,p,G,F,e+328|0,e+304|0,e+296|0,e+312|0,e+320|0,E,q,h,j,D,a[C>>0]|0)|0;if(c[f+220>>2]|0)c[f+252>>2]=1;im(t,e,f,n,k);s=0;while(1){if((s|0)==2)break;else u=0;while(1){if((u|0)==3)break;vl(G+(s*180|0)+(u*60|0)|0);u=u+1|0}s=s+1|0}Mf(F)}i=H;return t|0}function em(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(If(a,f,g,d)|0){ld(d+16|0,84245)|0;c[d+12>>2]=99;c[d+8>>2]=2;c[b>>2]=2}return g|0}function fm(b,d,f,g,h,j,k,l,m,n,o,p,q,r,s,t,u,v){b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;t=t|0;u=u|0;v=v|0;var w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0;ya=i;i=i+400|0;sa=ya+120|0;ra=ya+72|0;qa=ya+64|0;ta=ya+32|0;pa=ya;ua=ya+312|0;wa=ya+320|0;u=ya+240|0;w=ya+168|0;xa=ya+160|0;oa=ya+156|0;c[ua>>2]=t;na=r+(l*76|0)|0;va=s+(l*180|0)|0;la=g+208|0;ma=g+212|0;c[ma>>2]=c[la>>2];c[xa>>2]=u;c[xa+4>>2]=w;x=wa;y=x+72|0;do{c[x>>2]=0;x=x+4|0}while((x|0)<(y|0));x=u;y=x+72|0;do{c[x>>2]=0;x=x+4|0}while((x|0)<(y|0));x=w;y=x+72|0;do{c[x>>2]=0;x=x+4|0}while((x|0)<(y|0));er(va|0,0,180)|0;u=(c[q>>2]|0)==0;if(!(c[g+268>>2]|0))if(u)u=0;else ka=5;else if(u)if(!(c[q+12>>2]|0)){u=0;ka=6}else u=0;else ka=5;if((ka|0)==5){u=c[q+12>>2]|0;if(!u)u=0;else ka=6}a:do if((ka|0)==6){ja=(l|0)==1;if(ja)if((c[q+24>>2]|0)<1){u=0;break}else D=1;else if(l>>>0>1){ld(f+16|0,84288)|0;c[f+12>>2]=97;c[f+8>>2]=3;u=3;break}else D=(l|0)!=0;if(!(c[r>>2]|0))if((u|0)>0)ka=13;else{u=0;s=0;w=0;ka=31}else if((c[r+12>>2]|0)==0&(u|0)>0)ka=13;else{u=0;s=0;w=0;ka=31}if((ka|0)==13){if(c[la>>2]|0)Cc(oa);rm(d,f,g,q,r)|0;t=g+288|0;s=c[t>>2]|c[f+312>>2];c[v+(l<<3)>>2]=s;c[v+(l<<3)+4>>2]=s;s=f+320|0;w=c[g+292>>2]|c[s>>2];c[v+16+(l<<3)>>2]=w;c[v+16+(l<<3)+4>>2]=w;s=c[s>>2]|0;w=(s&2069|0)!=0;y=w&1;if(!(s&2325))u=(c[r+16>>2]|0)>1;else u=1;x=u&1;if(!(s&256))t=0;else t=(c[t>>2]&256|0)!=0;s=c[r+16>>2]|0;if((s|0)>1)u=1;else u=w&(s|0)==1?16:0;do if(t)if((c[r+92>>2]|0)>1){u=u|2;break}else{u=w&(s|0)==1?u|32:u;break}while(0);if(c[la>>2]|0){ia=Gc(d,oa)|0;c[ma>>2]=(c[ma>>2]|0)-ia}if(c[g+220>>2]|0?Um(b,d,f,g,h,m,n,q,c[ua>>2]|0,-1,x,u)|0:0){u=0;break}if((c[f+8>>2]&-2|0)==2)u=nm(f,g,7,m,n,o,p,r,ua)|0;else{s=x;w=y;ka=31}}do if((ka|0)==31){ha=r+(l*76|0)+16|0;x=c[ha>>2]|0;t=(x|0)>1;if(t)ia=Dq(x,144)|0;else ia=0;switch(l|0){case 0:{w=(c[f+320>>2]&3349|0)!=0;t=t&w;u=t?4:0;t=t&1;w=w&1;break}case 1:{if((c[f+320>>2]&256|0)!=0?(c[g+288>>2]&256|0)!=0:0){w=(c[f+324>>2]&2069|0)!=0;t=t&w;u=t?8:0;t=t&1;w=w&1}else t=s;break}default:t=0}ga=g+220|0;if((c[ga>>2]|0)!=0?(c[r+(l*76|0)+12>>2]|0)>0:0){if(Um(b,d,f,g,h,m,n,na,c[ua>>2]|0,l,t,u)|0){u=0;break a}u=c[ha>>2]|0}else u=x;B=f+328+(l<<2)|0;y=c[B>>2]|0;if((y|0)>(u|0)){u=j+(l<<2)|0;C=c[k+(l<<2)>>2]|0}else{C=u+1|0;z=Dq(C,8)|0;C=Dq(C,8)|0;if(!((z|0)!=0&(C|0)!=0)){ld(f+16|0,84321)|0;c[f+12>>2]=99;c[f+8>>2]=3;u=0;break a}u=j+(l<<2)|0;s=c[u>>2]|0;x=(s|0)==0;if((y|0)>0&(x^1))ir(z|0,s|0,y<<3|0)|0;A=k+(l<<2)|0;t=c[A>>2]|0;if((t|0)!=0&(y|0)>0)ir(C|0,t|0,y<<3|0)|0;if(!x){Cq(s);t=c[A>>2]|0}if(t|0)Cq(t);c[u>>2]=z;c[A>>2]=C;c[B>>2]=c[ha>>2]}ca=c[u>>2]|0;da=f+284|0;ea=g+248|0;V=l+-1|0;fa=r+(V*76|0)+16|0;ba=r+(V*76|0)+32|0;aa=j+(V<<2)|0;V=k+(V<<2)|0;W=f+304+(l<<2)|0;X=f+296+(l<<2)|0;Y=f+288|0;Z=g+184|0;_=g+68|0;$=g+72|0;R=D?84362:92346;S=g+188|0;T=g+84|0;U=(ia|0)==0;N=w|0?84377:92346;O=wa+8|0;P=c[2475]|0;Q=0;b:while(1){if(c[da>>2]|0){u=0;break}if((Q|0)>=(c[ha>>2]|0)){u=0;break}if(c[la>>2]|0)Cc(oa);if(ja?(c[ea>>2]&1|0)==0:0)ka=63;else ka=62;if((ka|0)==62?(ka=0,c[Y>>2]|0):0)ka=63;if((ka|0)==63){ka=0;z=Q+1|0;w=ca+(Q<<3)|0;x=C+(Q<<3)|0;y=0;u=0;while(1){if((y|0)>=(c[fa>>2]|0))break;c:do if((z|0)==(e[(c[ba>>2]|0)+(y<<1)>>1]|0)){t=c[aa>>2]|0;if((c[t+(y<<3)>>2]|0)==0?(c[t+(y<<3)+4>>2]|0)==0:0)break;s=u+1|0;if(!u){t=t+(y<<3)|0;M=c[t+4>>2]|0;L=w;c[L>>2]=c[t>>2];c[L+4>>2]=M;L=(c[V>>2]|0)+(y<<3)|0;M=c[L+4>>2]|0;t=x;c[t>>2]=c[L>>2];c[t+4>>2]=M;t=0;while(1){if((t|0)==2){u=s;break c}u=c[ca+(Q<<3)+(t<<2)>>2]|0;d:do if(u|0){M=u+80|0;c[M>>2]=(c[M>>2]|0)+1;if((c[u+12>>2]|0)<=0)break;switch(t|0){case 0:{c[W>>2]=(c[W>>2]|0)+1;break d}case 1:break;default:break d}if((c[u+32>>2]|0)>0){c[X>>2]=(c[X>>2]|0)+1;break}M=c[w>>2]|0;if(M|0?c[M+12>>2]|0:0)break;c[W>>2]=(c[W>>2]|0)+1}while(0);u=c[C+(Q<<3)+(t<<2)>>2]|0;if(u|0){M=u+52|0;c[M>>2]=(c[M>>2]|0)+1}t=t+1|0}}else u=s}while(0);y=y+1|0}if((u|0)==1){Q=z;continue}if((u|0)>1){ka=86;break}}u=om(d,f,g,n,o,wa,na,Q,c[ua>>2]|0)|0;if(c[la>>2]|0){M=Gc(d,oa)|0;c[ma>>2]=(c[ma>>2]|0)-M}if((u&-2|0)==2)break;if(!((c[ga>>2]|0)==0|(c[wa>>2]|0)==0)?(c[Y>>2]|0)==0:0){z=c[ha>>2]|0;if((z|0)==1){z=c[ua>>2]|0;y=c[_>>2]|0;w=(y|0)==0;do if(w){u=92346;x=92346;s=92346;ka=97}else{ka=a[y>>0]|0;u=ka<<24>>24?81168:92346;if(!(ka<<24>>24)){x=92346;s=92346;ka=97;break}t=c[$>>2]|0;if(!t){t=y;s=81168;ka=100;break}x=y;s=a[t>>0]|0?84228:81168;ka=97}while(0);do if((ka|0)==97){ka=0;t=c[$>>2]|0;if(t|0?a[t>>0]|0:0){w=x;break}if(w){w=x;t=92346}else{t=x;ka=100}}while(0);if((ka|0)==100){ka=0;w=t;t=a[y>>0]|0?84217:92346}c[pa>>2]=N;c[pa+4>>2]=z;c[pa+8>>2]=u;c[pa+12>>2]=w;c[pa+16>>2]=s;c[pa+20>>2]=t;c[pa+24>>2]=R;qq(h,84421,pa)|0}else{A=Q+1|0;B=c[ua>>2]|0;y=c[_>>2]|0;w=(y|0)==0;do if(w){u=92346;x=92346;s=92346;ka=106}else{ka=a[y>>0]|0;u=ka<<24>>24?81168:92346;if(!(ka<<24>>24)){x=92346;s=92346;ka=106;break}t=c[$>>2]|0;if(!t){t=y;s=81168;ka=109;break}x=y;s=a[t>>0]|0?84228:81168;ka=106}while(0);do if((ka|0)==106){ka=0;t=c[$>>2]|0;if(t|0?a[t>>0]|0:0){w=x;break}if(w){w=x;t=92346}else{t=x;ka=109}}while(0);if((ka|0)==109){ka=0;w=t;t=a[y>>0]|0?84217:92346}c[ta>>2]=A;c[ta+4>>2]=z;c[ta+8>>2]=B;c[ta+12>>2]=u;c[ta+16>>2]=w;c[ta+20>>2]=s;c[ta+24>>2]=t;c[ta+28>>2]=R;qq(h,84455,ta)|0}M=Vm(b,c[wa>>2]|0,c[O>>2]|0,0,1,0,0,1,0,0,0,c[S>>2]|0,T,c[Z>>2]|0,h)|0;c[Y>>2]=(M|0)==27&1;if(!M)cd(P,84508,qa)|0}if(gm(b,d,f,g,wa,q,ca,C,l,Q,0,xa,v,0)|0){u=Q;ka=158;break}M=Q+1|0;J=ca+(Q<<3)|0;K=C+(Q<<3)|0;L=0;u=0;while(1){if(!(c[ga>>2]|0))break;if(!((L|0)<2&(c[Y>>2]|0)==0))break;I=xa+(L<<2)|0;t=c[I>>2]|0;e:do if(c[t+24>>2]|0){if(c[t+28>>2]|0)break;F=(c[(c[ca+(Q<<3)+(L<<2)>>2]|0)+32>>2]|0)>0;G=(c[t+32>>2]|0)>0;E=G&1;F=F?84548:(c[Z>>2]&1|0)!=0&(F^1)?84538:92346;G=G?2:1;H=0;while(1){if((H|0)==(G|0))break e;t=c[I>>2]|0;if(!(c[t+4>>2]|0))t=0;else t=(c[t+40>>2]|0)!=0;k=(H|0)>0?84559:92346;j=t&1;f:while(1){if((j|0)<=-1)break;r=(j|0)>0;u=(r&1)+u|0;z=c[ha>>2]|0;B=r?84570:84583;D=c[ua>>2]|0;A=c[_>>2]|0;y=(A|0)==0;if((z|0)>1){do if(y){t=92346;x=92346;w=92346;ka=130}else{ka=a[A>>0]|0;t=ka<<24>>24?81168:92346;if(!(ka<<24>>24)){x=92346;w=92346;ka=130;break}s=c[$>>2]|0;if(!s){s=A;w=81168;ka=133;break}x=A;w=a[s>>0]|0?84228:81168;ka=130}while(0);do if((ka|0)==130){ka=0;s=c[$>>2]|0;if(s|0?a[s>>0]|0:0)break;if(y)s=92346;else{s=x;ka=133}}while(0);if((ka|0)==133){ka=0;x=s;s=a[A>>0]|0?84217:92346}c[ra>>2]=B;c[ra+4>>2]=M;c[ra+8>>2]=z;c[ra+12>>2]=D;c[ra+16>>2]=F;c[ra+20>>2]=k;c[ra+24>>2]=t;c[ra+28>>2]=x;c[ra+32>>2]=w;c[ra+36>>2]=s;c[ra+40>>2]=R;qq(h,84594,ra)|0}else{do if(y){t=92346;x=92346;w=92346;ka=139}else{ka=a[A>>0]|0;t=ka<<24>>24?81168:92346;if(!(ka<<24>>24)){x=92346;w=92346;ka=139;break}s=c[$>>2]|0;if(!s){s=A;w=81168;ka=142;break}x=A;w=a[s>>0]|0?84228:81168;ka=139}while(0);do if((ka|0)==139){ka=0;s=c[$>>2]|0;if(s|0?a[s>>0]|0:0)break;if(y)s=92346;else{s=x;ka=142}}while(0);if((ka|0)==142){ka=0;x=s;s=a[A>>0]|0?84217:92346}c[sa>>2]=B;c[sa+4>>2]=D;c[sa+8>>2]=F;c[sa+12>>2]=k;c[sa+16>>2]=t;c[sa+20>>2]=x;c[sa+24>>2]=w;c[sa+28>>2]=s;c[sa+32>>2]=R;qq(h,84648,sa)|0}do if(!(r&(u|0)!=1)){if(!(c[ga>>2]|0))break;t=c[I>>2]|0;s=c[t+8>>2]|0;if(r)t=Vm(b,c[t+4>>2]|0,s,c[t+12>>2]|0,0,c[t+44>>2]|0,t+48|0,E,L,0,0,c[S>>2]|0,T,c[Z>>2]|0,h)|0;else t=Vm(b,c[t>>2]|0,s,0,0,0,0,H,L,J,K,c[S>>2]|0,T,c[Z>>2]|0,h)|0;r=(t|0)==27;c[Y>>2]=r&1;if(r)break f}while(0);j=j+-1|0}H=H+1|0}}while(0);L=L+1|0}if(U){Q=M;continue}else t=0;while(1){if((t|0)==2){Q=M;continue b}u=c[xa+(t<<2)>>2]|0;if(c[u+24>>2]|0){x=ia+(Q*144|0)+(t*72|0)|0;s=u;y=x+72|0;do{c[x>>2]=c[s>>2];x=x+4|0;s=s+4|0}while((x|0)<(y|0));x=u;y=x+72|0;do{c[x>>2]=0;x=x+4|0}while((x|0)<(y|0))}t=t+1|0}}if((ka|0)==86){ld(f+16|0,84391)|0;c[f+12>>2]=99;c[f+8>>2]=2;u=0;break a}else if((ka|0)==158)u=Zm(f,g,na,u,c[ua>>2]|0,m,n,o,p)|0;t=(ia|0)!=0;if(!(t&(u&-2|0)!=2))if(t)t=0;else break;else{Lk(va,ia,c[ha>>2]|0)|0;t=0}while(1){if((t|0)<(c[ha>>2]|0))s=0;else break;while(1){if((s|0)==2)break;tl(ia+(t*144|0)+(s*72|0)|0);s=s+1|0}t=t+1|0}Cq(ia)}while(0);tl(wa);t=0;while(1){if((t|0)==2)break a;tl(c[xa+(t<<2)>>2]|0);t=t+1|0}}while(0);i=ya;return u|0}function gm(a,d,f,g,h,j,k,l,m,n,o,p,q,r){a=a|0;d=d|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;var s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=i;i=i+32|0;H=I+28|0;y=I+24|0;z=I+20|0;A=I+16|0;D=I+8|0;E=I;c[z>>2]=c[g+288>>2];c[A>>2]=c[f+320>>2]|c[g+292>>2];Cc(H);r=(c[g+192>>2]&3|0)==0;o=0;while(1){if((o|0)==2)break;c[D+(o<<2)>>2]=0;c[E+(o<<2)>>2]=0;o=o+1|0}s=r&1;w=g+184|0;x=h+8|0;t=h+16|0;u=h+20|0;v=0;while(1){if((v|0)==2)break;r=(v|0)==1;if(!(c[A>>2]&49152|(r?2:0)))o=0;else o=c[w>>2]&4;if((v|0)==0?(c[w>>2]&1|0)!=0:0)G=12;else G=10;do if((G|0)==10){G=0;if(r?c[w>>2]&2|0:0){G=12;break}tl(c[p+(v<<2)>>2]|0)}while(0);if((G|0)==12){G=0;c[D+(v<<2)>>2]=Nn(c[h>>2]|0,c[x>>2]|0,t,u,o)|0;r=Pn(c[x>>2]|0,c[u>>2]|0,o,s)|0;c[E+(v<<2)>>2]=r;if(r|0)c[r+12>>2]=c[u>>2];ul(c[p+(v<<2)>>2]|0,c[x>>2]|0,v)|0}v=v+1|0}r=Gc(d,H)|0;F=g+208|0;if(c[F>>2]|0){v=g+212|0;c[v>>2]=(c[v>>2]|0)-r}c[f>>2]=(c[f>>2]|0)+r;Cc(H);if(c[F>>2]|0){c[y>>2]=c[H>>2];r=c[g+212>>2]|0;if((r|0)>0){Hc(d,y,r);r=y}else r=y}else r=0;s=qe(a,d,D,E,j,c[h>>2]|0,p,c[x>>2]|0,c[w>>2]|0,c[g+272>>2]|0,c[g+276>>2]|0,z,A,r,0,f+16|0)|0;In(c[h>>2]|0,c[x>>2]|0,n+1|0)|0;o=0;while(1){if((o|0)==2)break;r=c[E+(o<<2)>>2]|0;if(r|0?(c[r+4>>2]|0)>0:0){h=q+32+(m<<3)+(o<<2)|0;c[h>>2]=c[h>>2]|c[r+84>>2];h=q+(m<<3)+(o<<2)|0;c[h>>2]=c[h>>2]|c[r+76>>2];h=q+16+(m<<3)+(o<<2)|0;c[h>>2]=c[h>>2]|c[r+80>>2];h=q+48+(m<<3)+(o<<2)|0;c[h>>2]=c[h>>2]|c[r+88>>2]}o=o+1|0}do if((s|0)>=0){if(!s){c[f+4>>2]=-1;break}r=c[D>>2]|0;if(r|0?(B=c[r>>2]|0,B|0):0){c[f+4>>2]=B;break}r=c[D+4>>2]|0;if(r|0?(C=c[r>>2]|0,C|0):0)c[f+4>>2]=C}else c[f+4>>2]=s;while(0);v=f+4|0;if(!(c[v>>2]|0))$m(D,p,f)|0;r=Gc(d,H)|0;if(c[F>>2]|0){C=g+212|0;c[C>>2]=(c[C>>2]|0)-r}c[f>>2]=(c[f>>2]|0)+r;Cc(H);r=0;while(1){if((r|0)==2)break;B=D+(r<<2)|0;c[k+(n<<3)+(r<<2)>>2]=c[B>>2];C=E+(r<<2)|0;c[l+(n<<3)+(r<<2)>>2]=c[C>>2];c[B>>2]=0;c[C>>2]=0;r=r+1|0}r=c[v>>2]|0;if(!r){r=c[k+(n<<3)>>2]|0;if(!r)u=0;else u=(c[r+12>>2]|0)>0;o=c[k+(n<<3)+4>>2]|0;if(!o)s=0;else s=(c[o+12>>2]|0)>0;if(u){r=(c[r+32>>2]|0)==0;if(r|s^1)G=54;else G=53}else if(s)G=53;else{o=0;r=0}if((G|0)==53){r=(c[o+32>>2]|0)==0;G=54}if((G|0)==54){r=r&1;if(s)o=(c[o+32>>2]|0)>0;else o=0}if((r|0)==(o<<31>>31|0)){r=0;G=68}else{t=s&1;s=f+304+(m<<2)|0;c[s>>2]=(c[s>>2]|0)+r;s=f+296+(m<<2)|0;c[s>>2]=(c[s>>2]|0)+(o&1);s=l+(n<<3)+4|0;o=u&1^1;while(1){if((o|0)>(t|0))break;r=c[k+(n<<3)+(o<<2)>>2]|0;if((c[r+48>>2]|0)==0?(c[r+56>>2]|0)==0:0){r=c[r+72>>2]|0;if(!r)r=0;else r=(e[r>>1]|0)>1}else r=1;if((o|0)==1){G=c[s>>2]|0;r=(r|((b[G+68>>1]|0)+(b[G+66>>1]|0)+(b[G+70>>1]|0)|0)>0)&1}else r=r&1;G=c[p+(o<<2)>>2]|0;c[G+24>>2]=1;c[G+32>>2]=r;o=o+1|0}r=c[v>>2]|0;G=67}}else G=67;if((G|0)==67)switch(r|0){case -30013:case -30002:{o=3;break}default:G=68}if((G|0)==68)o=(r|0)==0?0:2;r=Gc(d,H)|0;if(c[F>>2]|0){g=g+212|0;c[g>>2]=(c[g>>2]|0)-r}c[f>>2]=(c[f>>2]|0)+r;i=I;return o|0}function hm(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;if((c[d+180>>2]|0)!=6?(a[b>>0]=0,c[d+192>>2]&32768|0):0){f=d+288|0;if(!(c[f>>2]&256))e=0;else{a[b>>0]=8;e=8}g=d+184|0;d=c[g>>2]|0;if(d&1){e=(e&255|4)&255;a[b>>0]=e;d=c[g>>2]|0}if(d&16384){e=(e&255|1)&255;a[b>>0]=e;d=c[g>>2]|0}if(!(d&6144)){e=(e&255|2)&255;a[b>>0]=e}d=c[f>>2]|0;if(d&524288){e=(e&255|16)&255;a[b>>0]=e;d=c[f>>2]|0}if(d&1048576){e=(e&255|32)&255;a[b>>0]=e}if(!(c[g>>2]&16))a[b>>0]=e&252}return}function im(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;if((((e|0)!=0&((a&-2|0)!=2&(c[d+236>>2]|0)!=0)?(i=c[e+16>>2]|0,i|0):0)?(g=c[b+272>>2]|0,(g|0)>-1):0)?(h=c[b+276>>2]|0,(g|0)<(h|0)):0)Uk(f,g,h,i,0)|0;return}function jm(b,d,e,f,g,h,j,k,l,m,n,o,p,q,r,s){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;var t=0,u=0,v=0,w=0,x=0,y=0;y=i;i=i+32|0;w=y;do if(((((o|0)!=0?(t=c[o+68>>2]|0,(t|0)!=0):0)?(c[t+4>>2]|0)>0:0)?(c[t+16>>2]|0)!=0:0)?((c[f+180>>2]|0)+-1|0)>>>0<2:0){u=e+16|0;v=xm(o,c[f+276>>2]|0,u)|0;if(!v)if(!(Bm(o,u)|0)){x=19;break}else{ld(u,84731)|0;c[o+12>>2]=-1;t=2;break}c[e+4>>2]=v;k=c[f+68>>2]|0;m=(k|0)==0;if(!m){g=a[k>>0]|0;t=g<<24>>24?81168:92346;if(g<<24>>24){d=c[f+72>>2]|0;if(!d){h=t;j=k;b=81168}else{h=t;j=k;b=a[d>>0]|0?84228:81168}}else{h=t;j=92346;b=92346}}else{h=92346;j=92346;b=92346}d=c[f+72>>2]|0;if(!d)if(m)t=92346;else x=14;else{t=(a[d>>0]|0)!=0;if(t|m)t=t?d:92346;else x=14}if((x|0)==14)t=a[k>>0]|0?84217:92346;c[w>>2]=v;c[w+4>>2]=u;c[w+8>>2]=q;c[w+12>>2]=h;c[w+16>>2]=j;c[w+20>>2]=b;c[w+24>>2]=t;ad(l,84692,w)|0;c[o+12>>2]=-1;t=2}else x=19;while(0);if((x|0)==19)t=dm(b,d,e,f,g,h,j,k,l,m,n,o,p,q,r,s)|0;i=y;return t|0}function km(a,b,d,e,f,g,h,j,k,l,m){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;D=i;i=i+336|0;A=D;v=(m|0)!=0;h=v&1;ql(k);do if(v){s=f+16|0;if((c[s>>2]|0)!=(c[2534]|0)){t=(c[d+180>>2]|0)==5?0:h;q=c[m>>2]|0;o=(q|0)==0;p=m+4|0;h=c[p>>2]|0;if(!o?(n=m+8|0,r=c[n>>2]|0,(h|0)>(r+1|0)):0){h=r;e=q}else{e=Dq(h+100|0,4)|0;if(!e){h=3;break}if(o){c[p>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;h=0}else{if(h|0)ir(e|0,q|0,h<<2|0)|0;Cq(q);h=c[p>>2]|0}c[p>>2]=h+100;c[m>>2]=e;h=m+8|0;n=h;h=c[h>>2]|0}e=c[e+(h<<2)>>2]|0;if((e|0)==-1)h=-1;else{if(t){if(xq(c[s>>2]|0,e,0)|0){h=3;break}h=c[n>>2]|0;if(h)if((c[m+12>>2]|0)>(h|0))e=-1;else{h=3;break}else{h=0;e=-1}}c[l>>2]=h;p=t;u=18}}else h=3}else{p=h;e=-1;u=18}while(0);a:do if((u|0)==18){h=lm(a,b,d,f,k,0,0)|0;if(!h){b:do switch(c[d+180>>2]|0){case 2:case 1:case 4:{h=c[d+80>>2]|0;if(!h){c[l>>2]=(c[l>>2]|0)+1;break b}else{c[l>>2]=h;break b}}default:c[l>>2]=(c[l>>2]|0)+1}while(0);h=nm(b,d,7,f,g,0,j,k,l)|0}if((((c[f+20>>2]|0)==2?(B=f+16|0,w=c[B>>2]|0,v&(w|0)!=0):0)?(x=c[m>>2]|0,x|0):0)?(C=m+8|0,y=c[C>>2]|0,z=y+1|0,(c[x+(z<<2)>>2]|0)<1):0){c:do switch(h|0){case 3:case -1:{c[x+(y<<2)>>2]=-1;n=0;break}default:{if((w|0)==(c[2534]|0)){h=3;break a}if((c[m+4>>2]|0)<=(z|0)){h=3;break a}if(!p){e=-1;n=lm(a,A,d,f,0,0,0)|0;break c}o=uq(w)|0;n=lm(a,A,d,f,0,0,0)|0;if((o|0)!=-1)xq(c[B>>2]|0,o,0)|0}}while(0);if((n|0)==3|((h|0)==-1|(h|0)==3|(n|0)==-1)){n=c[C>>2]|0;c[(c[m>>2]|0)+(n+1<<2)>>2]=-1}else{if(p)e=c[b+276>>2]|0;n=c[C>>2]|0;c[(c[m>>2]|0)+(n+1<<2)>>2]=e}e=m+12|0;if((c[e>>2]|0)<=(n+1|0))c[e>>2]=n+2}if((h|0)==-1){c[l>>2]=(c[l>>2]|0)+-1;h=-1}}while(0);i=D;return h|0}function lm(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;D=i;i=i+32|0;l=D+8|0;j=D;A=D+20|0;B=D+16|0;w=D+12|0;z=(c[e+192>>2]&3|0)==0&1;c[B>>2]=0;C=e+184|0;t=4-((c[C>>2]|0)>>>14&1)|0;if(!(c[e+272>>2]|0))h=32;else{c[B>>2]=16;h=48}if(c[e+276>>2]|0)c[B>>2]=h;er(d|0,0,336)|0;m=e+180|0;a:do switch(c[m>>2]|0){case 2:case 1:{if(!g){c[w>>2]=0;if((c[e+228>>2]|0)==0?(C=jl(f,0,0,0,0,0,0,0,0,B,w,0)|0,(C|0)>0?1:((c[w>>2]|0)+-11|0)>>>0>8):0){h=0;k=78;break a}else{h=-1;break a}}l=e+72|0;h=c[l>>2]|0;if(h|0?a[h>>0]|0:0){h=pp(h,43)|0;if(((((h|0)!=0?(a[h+-1>>0]|0)==91:0)?(q=h+1|0,r=Rp(q,w,10)|0,(r|0)>0):0)?(s=c[w>>2]|0,(a[s>>0]|0)==93):0)?(a[s+1>>0]|0)==0:0){c[j>>2]=r+1;qq(q,84776,j)|0}else{x=c[l>>2]|0;x=x+(cp(x)|0)|0;a[x>>0]=a[84780]|0;a[x+1>>0]=a[84781]|0;a[x+2>>0]=a[84782]|0;a[x+3>>0]=a[84783]|0;a[x+4>>0]=a[84784]|0;a[x+5>>0]=a[84785]|0}}Cc(A);k=f+20|0;if((c[k>>2]|0)==2?(v=c[f+16>>2]|0,v|0):0){if((v|0)==(c[2534]|0))h=-1;else h=uq(v)|0;c[d+272>>2]=h}h=e+76|0;j=e+80|0;jl(f,g,c[e+228>>2]|0,z,c[e+256>>2]|0,c[e+68>>2]|0,c[l>>2]|0,h,j,B,d+12|0,d+16|0)|0;if(!((c[e+240>>2]|0)!=0?(c[h>>2]|0)!=999999:0))c[h>>2]=0;if(!((c[e+244>>2]|0)!=0?(c[j>>2]|0)>=0:0))c[j>>2]=0;if((c[k>>2]|0)==2?(y=c[f+16>>2]|0,y|0):0){if((y|0)==(c[2534]|0))h=-1;else h=uq(y)|0;c[d+276>>2]=h}c[d>>2]=(Gc(b,A)|0)+(c[d>>2]|0);h=c[e+264>>2]|0;do if(!(h&4)){if(h&8|0){c[B>>2]=2;h=2;break}h=c[B>>2]|0;if(h&1){h=h&-3;c[B>>2]=h}}else{c[B>>2]=1;h=1}while(0);l=d+292|0;k=h&3|c[l>>2]&-4;c[l>>2]=k;j=c[C>>2]|0;if((j&8208|0)==8208){j=j&-1537;if(!(h&1)){c[C>>2]=j|512;c[l>>2]=k|2;h=0;k=78;break a}else{c[C>>2]=j;c[l>>2]=k|1;h=0;k=78;break a}}else{h=0;k=78}break}case 4:{if(!g){c[w>>2]=0;if((c[e+228>>2]|0)==0?(C=mm(f,0,0,0,0,0,4,0,0,0,0,w,0)|0,(C|0)>0?1:((c[w>>2]|0)+-11|0)>>>0>8):0){h=0;k=78;break a}else{h=-1;break a}}k=e+72|0;h=c[k>>2]|0;if(h|0?a[h>>0]|0:0){h=pp(h,43)|0;if(((((h|0)!=0?(a[h+-1>>0]|0)==91:0)?(n=h+1|0,o=Rp(n,w,10)|0,(o|0)>0):0)?(p=c[w>>2]|0,(a[p>>0]|0)==93):0)?(a[p+1>>0]|0)==0:0){c[l>>2]=o+1;qq(n,84776,l)|0}else{y=c[k>>2]|0;y=y+(cp(y)|0)|0;a[y>>0]=a[84780]|0;a[y+1>>0]=a[84781]|0;a[y+2>>0]=a[84782]|0;a[y+3>>0]=a[84783]|0;a[y+4>>0]=a[84784]|0;a[y+5>>0]=a[84785]|0}}Cc(A);j=f+20|0;if((c[j>>2]|0)==2?(u=c[f+16>>2]|0,u|0):0){if((u|0)==(c[2534]|0))h=-1;else h=uq(u)|0;c[d+272>>2]=h}mm(f,g,c[e+228>>2]|0,z,c[e+256>>2]|0,t,c[m>>2]|0,c[e+68>>2]|0,c[k>>2]|0,e+80|0,B,d+12|0,d+16|0)|0;if((c[j>>2]|0)==2?(x=c[f+16>>2]|0,x|0):0){if((x|0)==(c[2534]|0))h=-1;else h=uq(x)|0;c[d+276>>2]=h}c[d>>2]=(Gc(b,A)|0)+(c[d>>2]|0);h=c[e+264>>2]|0;do if(!(h&4)){if(h&8|0){c[B>>2]=2;j=2;break}h=c[B>>2]|0;if(!(h&1))j=h;else{j=h&-3;c[B>>2]=j}}else{c[B>>2]=1;j=1}while(0);h=d+292|0;c[h>>2]=c[h>>2]|j;h=c[C>>2]|0;if((h&8208|0)==8208){h=h&-1537;if(!(j&1)){c[C>>2]=h|512;h=0;k=78;break a}else{c[C>>2]=h;h=0;k=78;break a}}else{h=0;k=78}break}default:{h=3;k=78}}while(0);i=D;return h|0}function mm(d,f,g,h,j,k,l,m,n,o,p,q,r){d=d|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;var s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0;R=i;i=i+16|0;G=R+12|0;H=R+8|0;L=R+4|0;I=R;c[L>>2]=0;c[I>>2]=0;E=c[p>>2]&16|0?32766:1024;P=(r|0)!=0;if(P)a[r>>0]=0;if(o|0)c[o>>2]=0;Q=(f|0)!=0;F=f+64|0;C=Q&(h|0)!=0?I:0;D=Q?L:0;M=f+12|0;z=(g|0)!=0;A=f+8|0;K=f+4|0;B=(f|0)!=0;h=0;a:do{if(Q){x=c[f>>2]|0;y=c[F>>2]|0}else{x=0;y=0}g=bm(d,C,j,k,l,D,32766,G,H,m,n,o,p,q,r)|0;b:do if((g|0)<1){s=c[q>>2]|0;if(!s){ld(r,84786)|0;c[q>>2]=98;break}if((g|0)==0&B&(s+-11|0)>>>0<9?z&(c[M>>2]|0)>0:0){J=13;break a}else{g=0;J=37}}else if(Q){s=c[M>>2]|0;h=s+g|0;if((h|0)>=(E|0)){ld(r,84802)|0;c[q>>2]=70;c[M>>2]=-1;break}if(!x){c[f>>2]=c[L>>2];c[F>>2]=c[I>>2];c[L>>2]=0;c[I>>2]=0;c[M>>2]=g;c[A>>2]=c[H>>2];c[K>>2]=c[G>>2];break}t=Dq(h,176)|0;c[f>>2]=t;do if(t|0){if(c[I>>2]|0?(w=Dq(h,32)|0,c[F>>2]=w,(w|0)==0):0)break;if(s|0){ir(t|0,x|0,s*176|0)|0;w=c[L>>2]|0;v=0;while(1){if((v|0)>=(g|0))break;t=w+(v*176|0)+92|0;s=c[M>>2]|0;u=0;while(1){if((u|0)>=(a[t>>0]|0))break;S=w+(v*176|0)+8+(u<<1)|0;b[S>>1]=(e[S>>1]|0)+s;u=u+1|0}S=w+(v*176|0)+48|0;b[S>>1]=(e[S>>1]|0)+s;v=v+1|0}t=c[F>>2]|0;if((y|0)!=0&(t|0)!=0)ir(t|0,y|0,s<<5|0)|0}Cq(x);if(y|0)Cq(y);ir((c[f>>2]|0)+((c[M>>2]|0)*176|0)|0,c[L>>2]|0,g*176|0)|0;s=c[F>>2]|0;t=c[I>>2]|0;if((s|0)!=0&(t|0)!=0)ir(s+(c[M>>2]<<5)|0,t|0,g<<5|0)|0;c[M>>2]=(c[M>>2]|0)+g;c[A>>2]=(c[A>>2]|0)+(c[H>>2]|0);y=c[G>>2]|0;S=c[K>>2]|0;c[K>>2]=(y|0)>(S|0)?y:S;break b}while(0);ld(r,85269)|0;c[q>>2]=-1}else J=37;while(0);if((J|0)==37){J=0;h=g+h|0}g=c[L>>2]|0;if(g|0){Cq(g);c[L>>2]=0}}while(z&(c[q>>2]|0)==0);if((J|0)==13)c[q>>2]=0;g=c[I>>2]|0;if(g|0)Cq(g);g=c[L>>2]|0;if(g|0)Cq(g);g=c[q>>2]|0;do if(Q&(g|0)==0){if(fi(c[f>>2]|0,c[M>>2]|0,0)|0?(ld(r,84850)|0,(c[K>>2]|0)==0):0){c[q>>2]=1;J=51;break}O=c[q>>2]|0;J=50}else{O=g;J=50}while(0);if((J|0)==50?O|0:0)J=51;do if((J|0)==51?(ql(f),N=c[q>>2]|0,N|0):0){if((N|0)>10){if(!(P&(N|0)>19))break}else if(!P)break;if(!(a[r>>0]|0))ld(r,84887)|0}while(0);if(Q)h=c[M>>2]|0;i=R;return h|0}function nm(b,d,e,f,g,h,j,k,l){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=i;i=i+128|0;D=F+96|0;z=F+64|0;v=F+32|0;u=F+24|0;t=F;w=b+12|0;h=c[w>>2]|0;do if((h+-11|0)>>>0>=9){if((c[l>>2]|0)<(c[d+172>>2]|0)){h=b+8|0;c[h>>2]=-2;k=-2;break}C=b+16|0;k=pe(d,h,C,c[k+12>>2]|0)|0;h=b+8|0;c[h>>2]=k;if((k|0)==3){if(e&4|0){s=c[w>>2]|0;t=c[l>>2]|0;p=c[d+68>>2]|0;q=(p|0)==0;if(!q){u=a[p>>0]|0;k=u<<24>>24?81168:92346;if(u<<24>>24){m=c[d+72>>2]|0;if(!m){r=p;o=81168}else{r=p;o=a[m>>0]|0?84228:81168}}else{r=92346;o=92346}}else{k=92346;r=92346;o=92346}n=c[d+72>>2]|0;if(!n)if(q)m=92346;else E=24;else{m=(a[n>>0]|0)!=0;if(m|q)m=m?n:92346;else E=24}if((E|0)==24)m=a[p>>0]|0?84217:92346;c[v>>2]=s;c[v+4>>2]=C;c[v+8>>2]=t;c[v+12>>2]=k;c[v+16>>2]=r;c[v+20>>2]=o;c[v+24>>2]=m;ad(g,84997,v)|0}k=c[j+16>>2]|0;if(((k|0?(x=c[b+272>>2]|0,(x|0)>-1):0)?(y=c[b+276>>2]|0,(x|0)<(y|0)):0)?(c[d+236>>2]|0)==0:0)Uk(f,x,y,k,c[l>>2]|0)|0;k=c[h>>2]|0}if((k|0)==2){if(e&2|0){s=c[w>>2]|0;t=c[d+192>>2]&16|0?85055:85063;u=c[l>>2]|0;q=c[d+68>>2]|0;r=(q|0)==0;if(!r){y=a[q>>0]|0;k=y<<24>>24?81168:92346;if(y<<24>>24){m=c[d+72>>2]|0;if(!m){p=q;o=81168}else{p=q;o=a[m>>0]|0?84228:81168}}else{p=92346;o=92346}}else{k=92346;p=92346;o=92346}n=c[d+72>>2]|0;if(!n)if(r)m=92346;else E=41;else{m=(a[n>>0]|0)!=0;if(m|r)m=m?n:92346;else E=41}if((E|0)==41)m=a[q>>0]|0?84217:92346;c[z>>2]=s;c[z+4>>2]=t;c[z+8>>2]=C;c[z+12>>2]=u;c[z+16>>2]=k;c[z+20>>2]=p;c[z+24>>2]=o;c[z+28>>2]=m;ad(g,85069,z)|0}k=c[j+16>>2]|0;if(((k|0?(A=c[b+272>>2]|0,(A|0)>-1):0)?(B=c[b+276>>2]|0,(A|0)<(B|0)):0)?(c[d+236>>2]|0)==0:0)Uk(f,A,B,k,c[l>>2]|0)|0}if((e&1|0)==0|(c[h>>2]|0)!=1)k=0;else{s=c[l>>2]|0;o=c[d+68>>2]|0;p=(o|0)==0;if(!p){b=a[o>>0]|0;k=b<<24>>24?81168:92346;if(b<<24>>24){m=c[d+72>>2]|0;if(!m){q=k;r=o;n=81168}else{q=k;r=o;n=a[m>>0]|0?84228:81168}}else{q=k;r=92346;n=92346}}else{q=92346;r=92346;n=92346}m=c[d+72>>2]|0;if(!m)if(p)k=92346;else E=56;else{k=(a[m>>0]|0)!=0;if(k|p)k=k?m:92346;else E=56}if((E|0)==56)k=a[o>>0]|0?84217:92346;c[D>>2]=C;c[D+4>>2]=s;c[D+8>>2]=q;c[D+12>>2]=r;c[D+16>>2]=n;c[D+20>>2]=k;ad(g,85119,D)|0;k=0}}else{r=b+16|0;if(a[r>>0]|0){s=c[l>>2]|0;p=c[d+68>>2]|0;q=(p|0)==0;if(!q){D=a[p>>0]|0;h=D<<24>>24?81168:92346;if(D<<24>>24){k=c[d+72>>2]|0;if(!k){n=h;o=p;m=81168}else{n=h;o=p;m=a[k>>0]|0?84228:81168}}else{n=h;o=92346;m=92346}}else{n=92346;o=92346;m=92346}k=c[d+72>>2]|0;if(!k)if(q)h=92346;else E=10;else{h=(a[k>>0]|0)!=0;if(h|q)h=h?k:92346;else E=10}if((E|0)==10)h=a[p>>0]|0?84217:92346;c[t>>2]=r;c[t+4>>2]=s;c[t+8>>2]=n;c[t+12>>2]=o;c[t+16>>2]=m;c[t+20>>2]=h;ad(g,84901,t)|0}c[u>>2]=(c[l>>2]|0)+-1;ad(g,84950,u)|0;h=b+8|0;k=-1}while(0);E=c[h>>2]|0;i=F;return ((E|0)>0?E:k)|0}function om(b,d,f,g,h,j,k,l,m){b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=i;i=i+32|0;t=w;q=w+28|0;Cc(q);u=k+28|0;ul(j,e[(c[u>>2]|0)+(l<<1)>>1]|0,0)|0;s=l+1|0;r=j+8|0;c[r>>2]=Hn(c[k>>2]|0,c[k+12>>2]|0,s,c[j>>2]|0)|0;q=Gc(b,q)|0;c[d>>2]=(c[d>>2]|0)+q;q=c[r>>2]|0;if((q|0)>=1?(e[(c[u>>2]|0)+(l<<1)>>1]|0)==(q|0):0)h=c[d+8>>2]|0;else{q=d+16|0;ld(q,85162)|0;k=c[f+68>>2]|0;n=(k|0)==0;if(!n){p=a[k>>0]|0;h=p<<24>>24?81168:92346;if(p<<24>>24){b=c[f+72>>2]|0;if(!b){o=h;p=k;j=81168}else{o=h;p=k;j=a[b>>0]|0?84228:81168}}else{o=h;p=92346;j=92346}}else{o=92346;p=92346;j=92346}b=c[f+72>>2]|0;if(!b)if(n)h=92346;else v=11;else{h=(a[b>>0]|0)!=0;if(h|n)h=h?b:92346;else v=11}if((v|0)==11)h=a[k>>0]|0?84217:92346;c[t>>2]=q;c[t+4>>2]=s;c[t+8>>2]=m;c[t+12>>2]=o;c[t+16>>2]=p;c[t+20>>2]=j;c[t+24>>2]=h;ad(g,85187,t)|0;h=c[r>>2]|0;if((h|0)>=0)h=(e[(c[u>>2]|0)+(l<<1)>>1]|0)!=(h|0)?-30011:-30019;c[d+4>>2]=h;c[d+8>>2]=2;h=2}i=w;return h|0}function pm(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=i;i=i+64|0;r=s+16|0;q=s+8|0;p=s;o=s+24|0;a:do if(((b|0)!=0?(m=b+12|0,g=c[m>>2]|0,(g|0)>0):0)?(n=c[b>>2]|0,(n|0)!=0):0){l=(e|0)==0;k=0;e=0;while(1){if((k|0)>=(g|0))break a;b=a[n+(k*176|0)+94>>0]|0;if(!l)b=(a[n+(k*176|0)+95>>0]|0)+b+(a[n+(k*176|0)+96>>0]|0)+(a[n+(k*176|0)+97>>0]|0)|0;g=n+(k*176|0)+99|0;h=n+(k*176|0)+100|0;j=fo(d[n+(k*176|0)+6>>0]|0,a[g>>0]|0,a[h>>0]|0,a[n+(k*176|0)+93>>0]|0,b,a[n+(k*176|0)+92>>0]|0)|0;if(j){e=e+1|0;ld(f,85219)|0;t=n+(k*176|0)|0;b=cp(t)|0;ir(o|0,t|0,b+1|0)|0;g=a[g>>0]|0;if(g<<24>>24){c[p>>2]=g<<24>>24;b=(qq(o+b|0,85248,p)|0)+b|0}g=a[h>>0]|0;if(g<<24>>24){h=o+b|0;if(g<<24>>24!=1)if(g<<24>>24==2)g=85258;else g=g<<24>>24==3?85252:85254;else g=85256;c[q>>2]=g;b=(qq(h,85260,q)|0)+b|0}c[r>>2]=j;qq(o+b|0,85264,r)|0;ld(f,o)|0}g=c[m>>2]|0;k=k+1|0}}else e=0;while(0);i=s;return e|0}function qm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=c[a>>2]|0;if(i){d=c[b+12>>2]|0;if((c[a+12>>2]|0)<(d|0)){e=d;h=4}else m=i}else{e=c[b+12>>2]|0;h=4}if((h|0)==4){d=e;m=Dq(e+1|0,176)|0}l=a+32|0;f=c[l>>2]|0;if(f){e=c[b+16>>2]|0;if((c[a+16>>2]|0)<(e|0))h=9;else{k=a+28|0;j=c[k>>2]|0;g=j}}else{e=c[b+16>>2]|0;h=9}if((h|0)==9){j=Dq(e+1|0,2)|0;g=a+28|0;k=g;g=c[g>>2]|0}if((g|0)!=0?(c[a+16>>2]|0)>=(e|0):0)h=f;else h=Dq(e+1|0,2)|0;e=(m|0)!=0;f=(j|0)!=0;g=(h|0)!=0;if(!(e&f&g)){if(!((i|0)==(m|0)|e^1))Cq(m);if(f?(c[k>>2]|0)!=(j|0):0)Cq(j);if(g?(c[l>>2]|0)!=(h|0):0){Cq(h);d=-1}else d=-1}else{e=c[b>>2]|0;if(e|0)ir(m|0,e|0,d*176|0)|0;d=c[b+28>>2]|0;if(d|0)ir(j|0,d|0,c[b+16>>2]<<1|0)|0;d=c[b+32>>2]|0;if(d|0)ir(h|0,d|0,c[b+16>>2]<<1|0)|0;d=c[a>>2]|0;if(!((d|0)==0|(d|0)==(m|0)))Cq(d);d=c[k>>2]|0;if(!((d|0)==0|(d|0)==(j|0)))Cq(d);d=c[l>>2]|0;if(!((d|0)==0|(d|0)==(h|0)))Cq(d);f=a;d=b;e=f+36|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(e|0));c[a>>2]=m;c[k>>2]=j;c[l>>2]=h;f=a+36|0;e=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(e|0));d=0}return d|0}function rm(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=i;i=i+32|0;q=v+8|0;k=v;u=v+12|0;p=v+16|0;c[u>>2]=0;a:do if((qm(g,f)|0)>=0){r=g+12|0;m=e+288|0;if((kn(c[r>>2]|0,c[g>>2]|0,c[m>>2]&262144,c[e+284>>2]|0)|0)>0){ld(d+16|0,85280)|0;b=d+8|0;if((c[b>>2]|0)<1)c[b>>2]=1;o=d+320|0;c[o>>2]=c[o>>2]|2048}if(!(c[m>>2]&2))b=0;else b=(un(g,0)|0)>0&1;j=g+20|0;c[j>>2]=b;e=c[m>>2]|0;if(!(e&128)){l=g+24|0;c[l>>2]=0;h=0}else{wn(g,e>>>9&1,u)|0;h=d+320|0;c[h>>2]=c[h>>2]|c[u>>2];h=g+24|0;l=h;b=c[j>>2]|0;h=c[h>>2]|0;e=c[m>>2]|0}c[f+20>>2]=b;c[f+24>>2]=h;if(((e&2|0)!=0?(c[j>>2]|0)!=0:0)?(un(g,1)|0)>0:0){e=d+16|0;ld(e,85304)|0;b=d+320|0;c[b>>2]=c[b>>2]|4;b=d+8|0;if((c[b>>2]|0)<1)c[b>>2]=1;b=fi(c[g>>2]|0,c[r>>2]|0,0)|0;if(b|0){c[k>>2]=b;qq(p,85326,k)|0;ld(e,85329)|0;ld(e,p)|0}}else c[j>>2]=0;o=Gn(g,0)|0;n=g+16|0;c[n>>2]=o;if((o|0)<0){ld(d+16|0,85269)|0;c[d+12>>2]=99;c[d+8>>2]=3;break}b=En(c[g>>2]|0,c[r>>2]|0)|0;if(b|0){if(b&1|0){o=d+320|0;c[o>>2]=c[o>>2]|16384}if(b&2|0){o=d+320|0;c[o>>2]=c[o>>2]|32768}}o=d+16|0;pm(g,1,o)|0;if(!(c[l>>2]|0)){k=c[g>>2]|0;b=c[r>>2]|0;j=0;while(1){if((j|0)<(b|0))f=0;else break a;while(1){if((f|0)>=3)break;e=k+(j*176|0)+152+f|0;h=a[e>>0]|0;if(!(h<<24>>24))break;a[e>>0]=h&7;f=f+1|0}j=j+1|0}}l=Gn(g,0)|0;c[n>>2]=l;if((l|0)<0){ld(o,85269)|0;c[d+12>>2]=99;c[d+8>>2]=3;break}b=c[m>>2]|0;if(b&256){b=g+76|0;if((qm(b,g)|0)<0){ld(o,85269)|0;c[d+12>>2]=99;c[d+8>>2]=3;break}c[d+316>>2]=c[d+312>>2];c[d+324>>2]=c[d+320>>2];b=c[b>>2]|0;e=c[g+88>>2]|0;f=0;while(1){if((f|0)<(e|0))k=0;else break;while(1){if((k|0)>=3)break;h=b+(f*176|0)+152+k|0;j=a[h>>0]|0;if(!(j<<24>>24))break;a[h>>0]=j&7;k=k+1|0}f=f+1|0}b=c[m>>2]|0}b=xn(g,b>>>9&1,u)|0;if((b|0)<=0){if((b|0)>=0)break;ld(o,85387)|0;c[d+12>>2]=b;c[d+8>>2]=2;break}ld(o,85364)|0;l=d+320|0;c[l>>2]=c[l>>2]|256;m=d+8|0;if((c[m>>2]|0)<1)c[m>>2]=1;k=Gn(g,1)|0;c[n>>2]=k;if((k|0)<0){ld(o,85269)|0;c[d+12>>2]=99;c[m>>2]=3;break}b=c[g>>2]|0;e=c[r>>2]|0;f=0;while(1){if((f|0)<(e|0))k=0;else break;while(1){if((k|0)>=3)break;h=b+(f*176|0)+152+k|0;n=a[h>>0]|0;j=n<<24>>24;if(!(n<<24>>24))break;if(j&56|0)a[h>>0]=j>>>3&7;k=k+1|0}f=f+1|0}b=fi(c[g>>2]|0,c[r>>2]|0,1)|0;if(b|0){c[q>>2]=b;qq(p,85326,q)|0;ld(o,85329)|0;ld(o,p)|0}if((ln(c[r>>2]|0,c[g>>2]|0)|0)>0){ld(o,85280)|0;if((c[m>>2]|0)<1)c[m>>2]=1;r=d+324|0;c[r>>2]=c[r>>2]|2048;c[l>>2]=c[l>>2]|2048}}else{ld(d+16|0,85269)|0;c[d+12>>2]=99;c[d+8>>2]=3}while(0);h=d+8|0;if((g|0)!=0&(c[h>>2]|0)<2){if((nn(c[g+12>>2]|0,c[g>>2]|0)|0)>0){ld(d+16|0,85280)|0;if((c[h>>2]|0)<1)c[h>>2]=1;b=d+320|0;e=c[b>>2]|2048;c[b>>2]=e}else{e=d+320|0;b=e;e=c[e>>2]|0}if((((e&256|0)!=0?(s=c[g+76>>2]|0,(s|0)!=0):0)?(t=c[g+88>>2]|0,(t|0)>0):0)?(nn(t,s)|0)>0:0){ld(d+16|0,85280)|0;if((c[h>>2]|0)<1)c[h>>2]=1;d=d+324|0;c[d>>2]=c[d>>2]|2048;c[b>>2]=c[b>>2]|2048}}else b=d+320|0;c[b>>2]=c[b>>2]|c[u>>2];i=v;return c[h>>2]|0}function sm(a){a=a|0;return}function tm(a){a=a|0;var b=0,d=0;if(a|0){b=a+212|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+216|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=c[a+228>>2]|0;if(b|0)Sn(c[a+220>>2]|0,b);Cq(a)}return}function um(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0;b=Dq(1,232)|0;a:do if(b){c[b>>2]=c[a>>2];c[b+4>>2]=c[a+4>>2];c[b+8>>2]=c[a+8>>2];c[b+12>>2]=c[a+12>>2];c[b+16>>2]=c[a+16>>2];i=b+20|0;c[i>>2]=c[a+20>>2];k=b+24|0;c[k>>2]=c[a+24>>2];c[b+28>>2]=c[a+28>>2];c[b+32>>2]=c[a+32>>2];c[b+36>>2]=c[a+36>>2];c[b+40>>2]=c[a+40>>2];d=b+48|0;e=b+80|0;f=0;while(1){if((f|0)==4)break;h[d+(f<<3)>>3]=+h[a+48+(f<<3)>>3];h[e+(f<<3)>>3]=+h[a+80+(f<<3)>>3];f=f+1|0}vp(b+112|0,a+112|0)|0;c[b+196>>2]=c[a+196>>2];c[b+200>>2]=c[a+200>>2];c[b+204>>2]=c[a+204>>2];c[b+208>>2]=c[a+208>>2];d=c[a+224>>2]|0;l=b+224|0;c[l>>2]=d;f=c[a+220>>2]|0;j=b+220|0;c[j>>2]=(f|0)>(d|0)?f:d;d=c[i>>2]|0;f=Dq(d,4)|0;c[b+212>>2]=f;if(f){g=a+212|0;e=0;while(1){if((e|0)>=(d|0))break;c[f+(e<<2)>>2]=c[(c[g>>2]|0)+(e<<2)>>2];d=c[i>>2]|0;e=e+1|0}d=c[k>>2]|0;f=Dq(d<<1,4)|0;c[b+216>>2]=f;if(f){g=a+216|0;e=0;while(1){if((e|0)>=(d<<1|0))break;c[f+(e<<2)>>2]=c[(c[g>>2]|0)+(e<<2)>>2];d=c[k>>2]|0;e=e+1|0}f=b+228|0;if(!(Rn(c[j>>2]|0,2,f)|0)){d=a+228|0;e=0;while(1){if((e|0)>=(c[l>>2]|0))break a;k=c[(c[d>>2]|0)+(e<<2)>>2]|0;a=c[(c[f>>2]|0)+(e<<2)>>2]|0;c[a>>2]=c[k>>2];c[a+4>>2]=c[k+4>>2];e=e+1|0}}else m=17}else m=17}else m=17}else m=17;while(0);if((m|0)==17){tm(b);b=0}return b|0}function vm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=c[a+20>>2]|0;d=c[b+20>>2]|0;a:do if((g|0)>=(d|0))if((g|0)>(d|0))d=1;else{f=a+212|0;b=b+212|0;e=0;while(1){if((e|0)>=(g|0)){d=0;break a}d=c[(c[f>>2]|0)+(e<<2)>>2]|0;a=c[(c[b>>2]|0)+(e<<2)>>2]|0;if((d|0)<(a|0)){d=-1;break a}if((d|0)>(a|0)){d=1;break}else e=e+1|0}}else d=-1;while(0);return d|0}function wm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;k=a+24|0;m=a+216|0;l=a+212|0;i=a+20|0;j=0;while(1){a=c[k>>2]|0;if((j|0)>=(a|0)){r=7;break}g=j<<1;e=c[m>>2]|0;h=c[e+(g<<2)>>2]|0;a=g|1;e=c[e+(a<<2)>>2]|0;s=(no(c[l>>2]|0,h,c[i>>2]|0)|0)==0&1;t=(no(d,h,b)|0)!=0&1;f=(no(c[l>>2]|0,e,c[i>>2]|0)|0)==0&1;f=((no(d,e,b)|0)!=0|f|0)==0;if(!((t|s|0)==0|f)){a=1;break}if(!f){t=c[m>>2]|0;c[t+(g<<2)>>2]=e;c[t+(a<<2)>>2]=h}j=j+1|0}if((r|0)==7)if((a|0)==2?(n=c[m>>2]|0,o=c[n>>2]|0,p=n+8|0,q=c[p>>2]|0,(o|0)>(q|0)):0){a=n+12|0;r=c[a>>2]|0;s=n+4|0;t=c[s>>2]|0;c[n>>2]=q;c[s>>2]=r;c[p>>2]=o;c[a>>2]=t;a=0}else a=0;return a|0}function xm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=i;i=i+16|0;w=x;c[w>>2]=0;u=c[a+68>>2]|0;l=u+4|0;v=c[l>>2]|0;k=c[a+12>>2]|0;a:do if((u|0)==0|(v|0)<1)b=0;else{do if((v|0)==1){b=c[c[u>>2]>>2]|0;if((c[b+4>>2]|0)==3){c[w>>2]=9001;ld(d,85417)|0;break}if(((c[b+8>>2]|0)+-1|0)>>>0<3){c[w>>2]=9002;ld(d,85450)|0}else r=3}else r=3;while(0);b:do if((r|0)==3){t=u+12|0;s=u+8|0;j=0;b=0;c:while(1){if((j|0)>=(v|0)){r=33;break}b=c[(c[u>>2]|0)+(j<<2)>>2]|0;switch(c[b+24>>2]|0){case 2:case 0:break;default:{r=10;break c}}g=b+20|0;e=c[g>>2]|0;if((e|0)<1){r=14;break}if((e|0)>(k|0)){r=19;break}h=b+212|0;f=0;while(1){if((f|0)>=(e|0))break;e=c[(c[h>>2]|0)+(f<<2)>>2]|0;if((e|0)<1|(e|0)>(k|0)){r=24;break c}if(no(c[t>>2]|0,e,c[s>>2]|0)|0){r=29;break c}e=c[g>>2]|0;f=f+1|0}c[b+224>>2]=0;r=b+196|0;q=b+28|0;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;c[r+12>>2]=0;j=j+1|0}if((r|0)==10){if(!(c[w>>2]|0))c[w>>2]=9003;ld(d,85493)|0;break}else if((r|0)==14){if(!(c[w>>2]|0))c[w>>2]=9004;ld(d,85548)|0;break}else if((r|0)==19){if(!(c[w>>2]|0))c[w>>2]=9005;ld(d,85567)|0;break}else if((r|0)==24){if(!(c[w>>2]|0))c[w>>2]=9006;ld(d,85590)|0;break}else if((r|0)==29){if(!(c[w>>2]|0))c[w>>2]=9007;ld(d,85626)|0;break}else if((r|0)==33){c[s>>2]=0;e=0;f=0;while(1){if((f|0)>=(k|0))break;if(!(kp((c[a>>2]|0)+(f*176|0)|0,86994)|0)){e=e+1|0;c[s>>2]=e}f=f+1|0}d:do if((e|0)>0){g=Dq(e,4)|0;c[t>>2]=g;if(!g){if(!(c[w>>2]|0))c[w>>2]=9010;ld(d,85656)|0;break b}else{e=0;h=0}while(1){f=e;while(1){if((f|0)>=(k|0)){j=0;break d}e=f+1|0;if(!(kp((c[a>>2]|0)+(f*176|0)|0,86994)|0))break;else f=e}c[g+(h<<2)>>2]=e;h=h+1|0}}else j=0;while(0);e:while(1){e=c[l>>2]|0;if((j|0)>=(e|0)){r=63;break}b=c[(c[u>>2]|0)+(j<<2)>>2]|0;f:do if((c[b+4>>2]|0)==3){if((c[b+24>>2]|0)>0){r=50;break e}else{f=e;e=0;h=0}while(1){if((h|0)>=(f|0))break;f=c[u>>2]|0;g=c[f+(h<<2)>>2]|0;if((c[g+4>>2]|0)!=3?(r=c[f+(j<<2)>>2]|0,(oo(c[g+212>>2]|0,c[g+20>>2]|0,c[r+212>>2]|0,c[r+20>>2]|0)|0)!=0):0){e=e+1|0;if((e|0)==2)break f}f=c[l>>2]|0;h=h+1|0}if((e|0)<2){r=59;break e}}while(0);j=j+1|0}if((r|0)==50){if(!(c[w>>2]|0))c[w>>2]=9026;ld(d,85674)|0;break}else if((r|0)==59){if(!(c[w>>2]|0))c[w>>2]=9027;ld(d,85738)|0;break}else if((r|0)==63){g:do switch(ym(u)|0){case 1:{j=b+28|0;g=b+8|0;h=0;h:while(1){if((h|0)>=(v|0))break g;b=c[(c[u>>2]|0)+(h<<2)>>2]|0;e=b+4|0;f=c[e>>2]|0;if((f|0)==1){c[e>>2]=2;ld(d,85797)|0;b=c[(c[u>>2]|0)+(h<<2)>>2]|0;f=c[b+4>>2]|0}if((f|0)==3?(m=b+8|0,(c[m>>2]|0)==0):0){c[m>>2]=2;ld(d,85842)|0;b=c[(c[u>>2]|0)+(h<<2)>>2]|0}e=b+12|0;if(c[e>>2]|0){c[e>>2]=0;ld(d,85879)|0;b=c[(c[u>>2]|0)+(h<<2)>>2]|0}i:do switch(c[b+4>>2]|0){case 2:{c[j>>2]=10;break}case 4:{c[j>>2]=10;break}case 6:{c[j>>2]=10;break}case 5:{c[j>>2]=10;break}case 3:{c[j>>2]=12;switch(c[g>>2]|0){case 1:{c[j>>2]=14;break i}case 3:{c[j>>2]=15;break i}case 0:case 2:{c[j>>2]=13;break i}default:break i}}case 0:{c[j>>2]=11;break}default:break h}while(0);h=h+1|0}if(!(c[w>>2]|0))c[w>>2]=9028;ld(d,85932)|0;break b}case 2:{p=a+8|0;q=0;j:while(1){if((q|0)>=(v|0))break g;o=c[(c[u>>2]|0)+(q<<2)>>2]|0;zm(o,a,w,d);f=o+24|0;g=o+4|0;if((c[f>>2]|0)==0?(c[g>>2]|0)==1:0){c[g>>2]=3;ld(d,86027)|0}if((c[g>>2]|0)==3){c[o+28>>2]=25;c[o+36>>2]=0;b=o+8|0;if(!(c[b>>2]|0)){c[b>>2]=2;ld(d,85842)|0}}else{h=o+216|0;j=o+212|0;n=o+20|0;m=0;while(1){if((m|0)>=(c[f>>2]|0))break;l=m<<1;b=c[h>>2]|0;k=c[b+(l<<2)>>2]|0;l=c[b+((l|1)<<2)>>2]|0;b=c[a>>2]|0;e=b+((k+-1|0)*176|0)|0;if(!(kp(e,86650)|0)){r=100;break j}if(!(kp(e,86652)|0)){r=100;break j}if(!(kp(e,86654)|0)){r=100;break j}b=b+((l+-1|0)*176|0)|0;if(!(kp(b,86650)|0)){r=106;break j}if(!(kp(b,86652)|0)){r=106;break j}if(!(kp(b,86654)|0)){r=106;break j}e=(no(c[j>>2]|0,k,c[n>>2]|0)|0)==0&1;b=(no(c[t>>2]|0,k,c[s>>2]|0)|0)!=0&1;k=(no(c[j>>2]|0,l,c[n>>2]|0)|0)==0&1;if((b|e|0)==0|((no(c[t>>2]|0,l,c[s>>2]|0)|0)!=0|k|0)==0)m=m+1|0;else{r=110;break j}}switch(c[g>>2]|0){case 6:case 5:case 4:case 1:{b=o+12|0;if(!(c[b>>2]|0)){ld(d,86154)|0;c[b>>2]=3}e=c[o+196>>2]|0;b=c[o+204>>2]|0;do if(!e){if((b|0)<1)r=125}else{if(!b)if((e|0)<1){r=125;break}else break;c[o+28>>2]=21;b=c[n>>2]|0;if((b|0)==1){c[o+36>>2]=3;break}e=o+36|0;if((b|0)==2){c[e>>2]=2;break}else{c[e>>2]=1;break}}while(0);if((r|0)==125){r=0;c[o+28>>2]=23}if(c[o+36>>2]|0?(n=(c[p>>2]|0)+2|0,c[o+220>>2]=n,n=Rn(n,2,o+228|0)|0,c[w>>2]=n,n|0):0){r=128;break j}break}default:{}}if(!(c[o+28>>2]|0)){r=130;break}}q=q+1|0}if((r|0)==100){if(!(c[w>>2]|0))c[w>>2]=9030;ld(d,86068)|0;break b}else if((r|0)==106){if(!(c[w>>2]|0))c[w>>2]=9031;ld(d,86068)|0;break b}else if((r|0)==110){if(!(c[w>>2]|0))c[w>>2]=9032;ld(d,86108)|0;break b}else if((r|0)==128){ld(d,86198)|0;break b}else if((r|0)==130){if(!(c[w>>2]|0))c[w>>2]=9035;ld(d,86227)|0;break b}break}default:{if(!(c[w>>2]|0))c[w>>2]=9035;ld(d,86268)|0;break b}}while(0);c[u+16>>2]=1;if(!(c[w>>2]|0)){b=0;break a}else break}}}while(0);c[u+16>>2]=0;b=c[w>>2]|0}while(0);i=x;return b|0}function ym(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;a:do if(a){j=a+4|0;i=c[j>>2]|0;g=0;d=0;b=0;while(1){if((g|0)>=(i|0))break;e=c[(c[a>>2]|0)+(g<<2)>>2]|0;f=c[e+24>>2]|0;do if((f|0)!=2?(c[e+224>>2]|0)<=0:0){if((c[e+196>>2]|0)>0?(c[e+204>>2]|0)>0:0){h=8;break}if(!f){c[e+192>>2]=1;d=d+1|0}}else h=8;while(0);if((h|0)==8){h=0;c[e+192>>2]=2;b=b+1|0}g=g+1|0}if((i|0)!=(d|0))if((i|0)!=(b|0))if((i|0)==(b+d|0)){b:do if((d|0)<(b|0)){g=a+12|0;h=a+8|0;b=0;i=0;while(1){if((i|0)>=(c[j>>2]|0))break;d=c[(c[a>>2]|0)+(i<<2)>>2]|0;if((c[d+192>>2]|0)==1){f=0;while(1){if((f|0)>=(c[d+20>>2]|0))break;e=c[(c[d+212>>2]|0)+(f<<2)>>2]|0;c:do if(!(no(c[g>>2]|0,e,c[h>>2]|0)|0)){d=0;while(1){if((d|0)>=(c[j>>2]|0))break b;b=c[(c[a>>2]|0)+(d<<2)>>2]|0;if((c[b+192>>2]|0)==2?no(c[b+212>>2]|0,e,c[b+20>>2]|0)|0:0){b=1;break c}d=d+1|0}}while(0);d=c[(c[a>>2]|0)+(i<<2)>>2]|0;f=f+1|0}if(!b)break b}i=i+1|0}if(b|0){b=2;break a}}while(0);b=3}else b=4;else b=2;else b=1}else b=-1;while(0);return b|0}function zm(b,d,f,g){b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;c[f>>2]=0;l=c[b+216>>2]|0;do if(l|0?(c[b+24>>2]|0)>=1:0){o=c[d+12>>2]|0;j=c[l>>2]|0;i=c[l+4>>2]|0;h=b+200|0;c[h>>2]=j;k=b+196|0;c[k>>2]=i;n=c[d>>2]|0;if(!(kp(n+((i+-1|0)*176|0)|0,86994)|0)){h=i;i=j}else{c[h>>2]=i;c[k>>2]=j;h=j}if(kp(n+((h+-1|0)*176|0)|0,86994)|0){c[b+36>>2]=0;c[k>>2]=0;break}if(!((i|0)<1|(i|0)>(o|0))?!((h|0)<1|(h|0)>(o|0)):0){k=c[l+8>>2]|0;j=c[l+12>>2]|0;h=b+208|0;c[h>>2]=k;l=b+204|0;c[l>>2]=j;if(!(kp(n+((j+-1|0)*176|0)|0,86994)|0)){h=j;m=k}else{c[h>>2]=j;c[l>>2]=k;h=k;m=j}if(kp(n+((h+-1|0)*176|0)|0,86994)|0){c[b+36>>2]=0;c[l>>2]=0;break}if(!((m|0)<1|(m|0)>(o|0))?!((h|0)<1|(h|0)>(o|0)):0){if((i|0)==(m|0)){c[b+36>>2]=3;break}l=i+-1|0;j=c[d>>2]|0;k=a[j+(l*176|0)+92>>0]|0;h=m+-1|0;i=0;while(1){if((i|0)>=(k|0)){h=27;break}if((e[j+(l*176|0)+8+(i<<1)>>1]|0)==(h|0)){h=26;break}else i=i+1|0}if((h|0)==26){c[b+36>>2]=2;break}else if((h|0)==27){c[b+36>>2]=1;break}}if(!(c[f>>2]|0))c[f>>2]=9091;ld(g,85991)|0;c[b+36>>2]=0;break}if(!(c[f>>2]|0))c[f>>2]=9090;ld(g,85991)|0;c[b+36>>2]=0}while(0);return}function Am(c,d){c=c|0;d=d|0;var e=0;e=0;while(1){if((e|0)>=(d|0))break;a[c+(e*176|0)+162>>0]=0;b[c+(e*176|0)+164>>1]=0;b[c+(e*176|0)+166>>1]=0;b[c+(e*176|0)+168>>1]=0;e=e+1|0}return 0}function Bm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;h=k;c[h>>2]=0;f=a+68|0;j=0;while(1){d=c[f>>2]|0;if((j|0)>=(c[d+4>>2]|0)){d=0;break}e=c[(c[d>>2]|0)+(j<<2)>>2]|0;if((c[e+28>>2]|0)==21?(g=e+36|0,c[g>>2]|0):0){zm(e,a,h,b);d=c[h>>2]|0;if(d|0)break;if(c[g>>2]|0){if(Cm(e,c[a>>2]|0)|0?(c[g>>2]|0)==1:0)ld(b,86307)|0;Dm(e,a,h,0);d=c[h>>2]|0;if(d|0)break}}j=j+1|0}i=k;return d|0}function Cm(a,b){a=a|0;b=b|0;var e=0,f=0;f=a+212|0;a=a+20|0;e=0;while(1){if((e|0)>=(c[a>>2]|0)){a=0;break}if(!(ho(d[b+(((c[(c[f>>2]|0)+(e<<2)>>2]|0)+-1|0)*176|0)+6>>0]|0)|0))e=e+1|0;else{a=1;break}}return a|0}function Dm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;c[e>>2]=0;switch(c[b+36>>2]|0){case 0:break;case 1:{h=b+200|0;g=d+8|0;Em((c[b+196>>2]|0)+-1|0,(c[h>>2]|0)+-1|0,c[d>>2]|0,g)|0;f=b+208|0;Em((c[b+204>>2]|0)+-1|0,(c[f>>2]|0)+-1|0,c[d>>2]|0,g)|0;Gm((c[h>>2]|0)+-1|0,(c[f>>2]|0)+-1|0,c[d>>2]|0,g)|0;g=5;break}case 2:{f=b+200|0;h=b+208|0;Hm((c[f>>2]|0)+-1|0,(c[h>>2]|0)+-1|0,c[d>>2]|0)|0;g=d+8|0;Em((c[b+196>>2]|0)+-1|0,(c[f>>2]|0)+-1|0,c[d>>2]|0,g)|0;Em((c[b+204>>2]|0)+-1|0,(c[h>>2]|0)+-1|0,c[d>>2]|0,g)|0;g=5;break}case 3:{f=(c[b+200>>2]|0)+-1|0;h=c[d>>2]|0;a[h+(f*176|0)+100>>0]=3;g=d+8|0;Em((c[b+196>>2]|0)+-1|0,f,h,g)|0;Em((c[b+204>>2]|0)+-1|0,(c[b+208>>2]|0)+-1|0,c[d>>2]|0,g)|0;g=5;break}default:g=6}if((g|0)==5?(c[e>>2]|0)==0:0)g=6;if((g|0)==6)c[b+40>>2]=1;return}function Em(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=Fm(b,d,e,0)|0;if(((Fm(d,b,e,0)|0)+g|0)==2){c[f>>2]=(c[f>>2]|0)+-1;g=e+(b*176|0)+92|0;a[g>>0]=(a[g>>0]|0)+-1<<24>>24;g=e+(b*176|0)+93|0;a[g>>0]=(a[g>>0]|0)+-1<<24>>24;g=e+(d*176|0)+92|0;a[g>>0]=(a[g>>0]|0)+-1<<24>>24;e=e+(d*176|0)+93|0;a[e>>0]=(a[e>>0]|0)+-1<<24>>24;e=1}else e=0;return e|0}function Fm(c,d,f,g){c=c|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=f+(c*176|0)+92|0;i=a[k>>0]|0;g=0;while(1){if((g|0)>=(i|0)){g=0;break}h=f+(c*176|0)+8+(g<<1)|0;if((e[h>>1]|0)==(d|0)){j=4;break}g=g+1|0}a:do if((j|0)==4){a[f+(c*176|0)+52+g>>0]=0;a[f+(c*176|0)+72+g>>0]=0;b[h>>1]=0;i=g;while(1){h=i+1|0;g=a[k>>0]|0;if((h|0)>=(g|0))break;b[f+(c*176|0)+8+(i<<1)>>1]=b[f+(c*176|0)+8+(h<<1)>>1]|0;a[f+(c*176|0)+72+i>>0]=a[f+(c*176|0)+72+h>>0]|0;a[f+(c*176|0)+52+i>>0]=a[f+(c*176|0)+52+h>>0]|0;i=h}g=g+-1|0;while(1){if((g|0)>=20){g=1;break a}b[f+(c*176|0)+8+(g<<1)>>1]=0;a[f+(c*176|0)+72+g>>0]=0;a[f+(c*176|0)+52+g>>0]=0;g=g+1|0}}while(0);return g|0}function Gm(d,f,g,h){d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0;j=g+(d*176|0)+92|0;l=a[j>>0]|0;k=l<<24>>24;if(l<<24>>24<=19?(m=g+(f*176|0)+92|0,i=a[m>>0]|0,i<<24>>24<=19):0){l=0;while(1){if((l|0)>=(k|0)){n=5;break}if((e[g+(d*176|0)+8+(l<<1)>>1]|0|0)==(f|0))break;else l=l+1|0}if((n|0)==5){b[g+(d*176|0)+8+(k<<1)>>1]=f;a[g+(d*176|0)+72+k>>0]=1;a[g+(d*176|0)+52+k>>0]=0;a[j>>0]=(a[j>>0]|0)+1<<24>>24;i=g+(d*176|0)+93|0;a[i>>0]=(a[i>>0]|0)+1<<24>>24;i=a[m>>0]|0}i=i<<24>>24;j=0;while(1){if((j|0)>=(i|0)){n=9;break}if((e[g+(f*176|0)+8+(j<<1)>>1]|0|0)==(d|0))break;else j=j+1|0}if((n|0)==9){b[g+(f*176|0)+8+(i<<1)>>1]=d;a[g+(f*176|0)+72+i>>0]=1;a[g+(f*176|0)+52+i>>0]=0;a[m>>0]=(a[m>>0]|0)+1<<24>>24;n=g+(f*176|0)+93|0;a[n>>0]=(a[n>>0]|0)+1<<24>>24}c[h>>2]=(c[h>>2]|0)+1;i=1}else i=0;return i|0}function Hm(b,c,d){b=b|0;c=c|0;d=d|0;var f=0,g=0,h=0,i=0,j=0;f=a[d+(b*176|0)+92>>0]|0;g=f<<24>>24;a:do if((f<<24>>24<=19?(j=d+(c*176|0)+92|0,(a[j>>0]|0)<=19):0)?(i=d+(b*176|0)+93|0,(a[i>>0]|0)<=19):0){f=0;while(1){if((f|0)>=(g|0)){f=0;break}if((e[d+(b*176|0)+8+(f<<1)>>1]|0)==(c|0)){h=6;break}f=f+1|0}if((h|0)==6){f=d+(b*176|0)+72+f|0;g=a[f>>0]|0;if((g&255)>3){f=0;break}a[f>>0]=g+1<<24>>24;a[i>>0]=(a[i>>0]|0)+1<<24>>24;f=1}i=d+(c*176|0)+93|0;if((a[i>>0]|0)<=19){h=a[j>>0]|0;g=0;while(1){if((g|0)>=(h|0))break a;if((e[d+(c*176|0)+8+(g<<1)>>1]|0)==(b|0))break;g=g+1|0}g=d+(c*176|0)+72+g|0;h=a[g>>0]|0;if((h&255)<=3){a[g>>0]=h+1<<24>>24;a[i>>0]=(a[i>>0]|0)+1<<24>>24;f=f+1|0}else f=0}else f=0}else f=0;while(0);return f|0}function Im(a){a=a|0;var b=0,d=0,e=0,f=0;if(a|0){d=a+12|0;e=c[d>>2]|0;if(e|0){Cq(e);c[d>>2]=0;c[a+8>>2]=0}f=a+4|0;d=c[f>>2]|0;if(d|0?(b=c[a>>2]|0,b|0):0){e=0;while(1){if((e|0)>=(d|0))break;tm(c[b+(e<<2)>>2]|0);d=c[f>>2]|0;b=c[a>>2]|0;e=e+1|0}if(b|0)Cq(b)}Cq(a)}return}function Jm(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=a+8|0;q=a+12|0;i=0;while(1){if((i|0)>=(c[p>>2]|0)){r=3;break}h=(c[q>>2]|0)+(i<<2)|0;g=(c[b+(c[h>>2]<<2)>>2]|0)+1|0;if(!g){g=10;break}c[h>>2]=g;i=i+1|0}a:do if((r|0)==3){s=a+4|0;m=0;while(1){g=c[s>>2]|0;if((m|0)>=(g|0)){k=0;break}l=c[e+(m<<2)>>2]|0;k=l+20|0;a=l+212|0;j=0;g=-1;while(1){if((j|0)>=(c[k>>2]|0))break;h=c[a>>2]|0;i=(c[b+(c[h+(j<<2)>>2]<<2)>>2]|0)+1|0;if(i){g=g+1|0;c[h+(g<<2)>>2]=i}j=j+1|0}c[k>>2]=g+1;g=l+24|0;h=l+216|0;j=0;while(1){if((j|0)>=(c[g>>2]<<1|0))break;i=(c[h>>2]|0)+(j<<2)|0;a=(c[b+(c[i>>2]<<2)>>2]|0)+1|0;if(!a){g=11;break a}c[i>>2]=a;j=j+1|0}g=l+196|0;h=(c[b+(c[g>>2]<<2)>>2]|0)+1|0;if(!h){g=11;break a}c[g>>2]=h;g=l+204|0;h=(c[b+(c[g>>2]<<2)>>2]|0)+1|0;if(!h){g=11;break a}c[g>>2]=h;g=l+200|0;h=(c[b+(c[g>>2]<<2)>>2]|0)+1|0;if(!h){g=11;break a}c[g>>2]=h;g=l+208|0;h=(c[b+(c[g>>2]<<2)>>2]|0)+1|0;if(!h){g=11;break a}c[g>>2]=h;j=l+224|0;g=l+228|0;a=0;while(1){if((a|0)>=(c[j>>2]|0))break;h=c[(c[g>>2]|0)+(a<<2)>>2]|0;i=(c[b+(c[h>>2]<<2)>>2]|0)+1|0;if(i|0?(n=h+4|0,o=(c[b+(c[n>>2]<<2)>>2]|0)+1|0,o|0):0){c[h>>2]=(i|0)<(o|0)?i:o;c[n>>2]=(i|0)>(o|0)?i:o}a=a+1|0}m=m+1|0}while(1){if((k|0)>=(g|0)){h=0;break}j=c[e+(k<<2)>>2]|0;g=j+212|0;h=j+20|0;Ih(c[g>>2]|0,c[h>>2]|0)|0;if(wm(j,c[p>>2]|0,c[q>>2]|0)|0){g=12;break a}i=c[g>>2]|0;a=c[d+((c[i>>2]|0)+-1<<2)>>2]|0;g=c[h>>2]|0;h=1;while(1){if((h|0)>=(g|0))break;if((c[d+((c[i+(h<<2)>>2]|0)+-1<<2)>>2]|0)==(a|0))h=h+1|0;else{r=32;break}}if((r|0)==32){r=0;c[j+32>>2]=1}g=c[s>>2]|0;k=k+1|0}while(1){if((h|0)>=(g|0)){k=1;break}c[f+(h<<2)>>2]=h;g=c[s>>2]|0;h=h+1|0}while(1){if((k|0)>=(g|0)){g=0;break a}j=c[f+(k<<2)>>2]|0;h=e+(j<<2)|0;g=k;while(1){a=g+-1|0;if((g|0)<=0)break;i=c[f+(a<<2)>>2]|0;if((vm(c[e+(i<<2)>>2]|0,c[h>>2]|0)|0)<=0)break;c[f+(g<<2)>>2]=i;g=a}c[f+(g<<2)>>2]=j;g=c[s>>2]|0;k=k+1|0}}while(0);return g|0}function Km(a){a=a|0;return}function Lm(b,c,d){b=b|0;c=c|0;d=d|0;var f=0,g=0,h=0,i=0;i=d+(b*176|0)+93|0;a:do if((a[i>>0]|0)<=19){g=a[d+(b*176|0)+92>>0]|0;f=0;while(1){if((f|0)>=(g|0)){f=0;break}if((e[d+(b*176|0)+8+(f<<1)>>1]|0)==(c|0)){h=5;break}f=f+1|0}if((h|0)==5){f=d+(b*176|0)+72+f|0;g=a[f>>0]|0;if((g&255)<2){f=0;break}a[f>>0]=g+-1<<24>>24;a[i>>0]=(a[i>>0]|0)+-1<<24>>24;f=1}h=a[d+(c*176|0)+92>>0]|0;g=0;while(1){if((g|0)>=(h|0))break a;if((e[d+(c*176|0)+8+(g<<1)>>1]|0)==(b|0))break;g=g+1|0}g=d+(c*176|0)+72+g|0;h=a[g>>0]|0;if((h&255)>=2){a[g>>0]=h+-1<<24>>24;c=d+(c*176|0)+93|0;a[c>>0]=(a[c>>0]|0)+-1<<24>>24;f=f+1|0}else f=0}else f=0;while(0);return f|0}function Mm(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;c[d>>2]=0;g=a+68|0;k=0;while(1){f=c[g>>2]|0;if((k|0)>=(c[f+4>>2]|0))break;f=c[(c[f>>2]|0)+(k<<2)>>2]|0;if(((((c[f+36>>2]|0?(Nm(f,a,d,e),(c[d>>2]|0)==0):0)?(h=c[(c[c[g>>2]>>2]|0)+(k<<2)>>2]|0,(c[h+224>>2]|0)>=2):0)?(Om(h,a,d,0),(c[d>>2]|0)==0):0)?(Rm(c[(c[c[g>>2]>>2]|0)+(k<<2)>>2]|0,a,b,0,0),(c[d>>2]|0)==0):0)?(i=c[(c[c[g>>2]>>2]|0)+(k<<2)>>2]|0,j=i+224|0,(c[j>>2]|0)==0):0){c[i+36>>2]=1;c[j>>2]=1;f=c[c[i+228>>2]>>2]|0;c[f>>2]=c[i+200>>2];c[f+4>>2]=c[i+208>>2]}k=k+1|0}return}function Nm(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=a+224|0;c[f>>2]=0;g=a+228|0;h=Tn(b,c[a+20>>2]|0,c[a+212>>2]|0,f,c[g>>2]|0)|0;do if(!h){if(!(c[d>>2]|0))c[d>>2]=9037;ld(e,86198)|0;c[a+36>>2]=0}else{i=c[h+12>>2]|0;j=c[i+(c[a+200>>2]<<2)>>2]|0;i=c[i+(c[a+208>>2]<<2)>>2]|0;k=(j|0)>(i|0);b=Vn(h,b,k?i:j,k?j:i)|0;if(b|0){c[c[b+24>>2]>>2]=c[b+4>>2];c[b+20>>2]=1;c[f>>2]=0;Xn(b,f,c[g>>2]|0);Un(h);Wn(b);c[d>>2]=0;break}if(!(c[d>>2]|0))c[d>>2]=9039;ld(e,86198)|0;c[a+36>>2]=0}while(0);return}function Om(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;if((a|0?(g=a+224|0,(c[g>>2]|0)>=1):0)?(c[d>>2]=1,f=b+12|0,h=Dq((c[f>>2]|0)+1|0,4)|0,h|0):0){c[d>>2]=0;if(Pm(c[b+68>>2]|0,c[b>>2]|0,c[f>>2]|0,b+8|0,h,0,(c[a+200>>2]|0)+-1|0)|0){a=a+228|0;f=0;do{b=c[a>>2]|0;e=c[b+(f<<2)>>2]|0;d=c[e>>2]|0;e=c[e+4>>2]|0;i=c[h+(d<<2)>>2]|0;if((i|0)==-1?1:(i|0)!=(c[h+(e<<2)>>2]|0))f=f+1|0;else Qm(d,e,g,b)}while((f|0)<(c[g>>2]|0))}Cq(h);return}return}function Pm(a,b,d,f,g,h,i){a=a|0;b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0;a:do if(!g)j=0;else{m=a+4|0;k=0;while(1){if((k|0)>=(c[m>>2]|0))break;j=c[(c[a>>2]|0)+(k<<2)>>2]|0;if(c[j+40>>2]|0)Em((c[j+200>>2]|0)+-1|0,(c[j+208>>2]|0)+-1|0,b,f)|0;k=k+1|0}yf(b,d,i)|0;j=0;while(1){if((j|0)>(d|0))break;c[g+(j<<2)>>2]=-1;j=j+1|0}j=(h|0)==0;i=0;while(1){if((i|0)>=(d|0))break;n=(e[b+(i*176|0)+166>>1]|0)>2;k=n&1;if(n?(l=e[b+(i*176|0)+48>>1]|0,c[g+(l<<2)>>2]=e[b+(i*176|0)+164>>1],!j):0)c[h+(l<<2)>>2]=k;i=i+1|0}Am(b,d)|0;k=0;j=0;while(1){if((k|0)>=(d|0))break;n=((c[g+(k<<2)>>2]|0)>>>31^1)+j|0;k=k+1|0;j=n}i=0;while(1){if((i|0)>=(c[m>>2]|0))break a;k=c[(c[a>>2]|0)+(i<<2)>>2]|0;if(c[k+40>>2]|0)Gm((c[k+200>>2]|0)+-1|0,(c[k+208>>2]|0)+-1|0,b,f)|0;i=i+1|0}}while(0);return j|0}function Qm(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;g=(a|0)>(b|0);h=g?a:b;g=g?b:a;a=c[d>>2]|0;b=0;while(1){if((b|0)>=(a|0))break;f=c[e+(b<<2)>>2]|0;if((c[f>>2]|0)==(g|0)?(c[f+4>>2]|0)==(h|0):0){i=5;break}b=b+1|0}if((i|0)==5){while(1){b=b+1|0;if((b|0)>=(a|0))break;i=c[e+(b<<2)>>2]|0;c[f>>2]=c[i>>2];c[f+4>>2]=c[i+4>>2];a=c[d>>2]|0;f=i;i=5}c[d>>2]=a+-1}return}function Rm(b,d,f,g,h){b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;if(((c[b+20>>2]|0)>=2?(c[b+24>>2]|0)>=2:0)?(r=b+224|0,(c[r>>2]|0)>=1):0){i=(f|0)!=0;if(i){g=(c[d+12>>2]|0)+2|0;h=Dq(g,4)|0;g=Dq(g,4)|0;if((h|0)!=0&(g|0)!=0){Qn(f,h,g);d=1;p=h}else{d=1;p=h}}else{d=0;g=0;p=0}o=b+228|0;n=i&d;h=0;do{j=c[o>>2]|0;l=c[j+(h<<2)>>2]|0;k=c[l>>2]|0;l=c[l+4>>2]|0;a:do if(n?(q=c[f>>2]|0,(q|0)!=0):0){m=c[g+(k<<2)>>2]|0;i=a[q+(m*176|0)+92>>0]|0;b=g+(l<<2)|0;d=0;while(1){if((d|0)>=(i|0)){s=16;break a}if((e[q+(m*176|0)+8+(d<<1)>>1]|0)==(c[b>>2]|0))break;d=d+1|0}if((a[q+(m*176|0)+72+d>>0]|0)==8)Qm(k,l,r,j);else s=16}else s=16;while(0);if((s|0)==16){s=0;h=h+1|0}}while((h|0)<(c[r>>2]|0));if(p|0)Cq(p);if(g|0)Cq(g)}return}function Sm(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;if(g|0){h=0;while(1){if((h|0)>=(e|0))break;c[g+(h<<4)+4>>2]=0;c[g+(h<<4)+12>>2]=0;c[g+(h<<4)+8>>2]=-1;c[g+(h<<4)>>2]=c[8936+((d[b+(h*176|0)+6>>0]|0)<<2)>>2];h=h+1|0}h=e+1|0;k=Dq(h,4)|0;if(k|0){j=Dq(h,4)|0;a:do if(j|0?(i=Pm(a,b,e,f,k,j,0)|0,i|0):0){f=0;while(1){if((f|0)>=(e|0))break;h=c[k+(f<<2)>>2]|0;if((h|0)>-1){c[g+(f<<4)+8>>2]=h;c[g+(f<<4)+12>>2]=c[j+(f<<2)>>2]}f=f+1|0}a=(i|0)>0?i:0;h=0;f=0;while(1){if((h|0)>=(e|0))break;if((c[g+(h<<4)+8>>2]|0)==(a|0)){i=c[9416+((d[b+(h*176|0)+6>>0]|0)<<2)>>2]|0;f=(i|0)>(f|0)?i:f}h=h+1|0}h=0;while(1){if((h|0)>=(e|0))break a;if((c[g+(h<<4)+8>>2]|0)==(a|0))c[g+(h<<4)+4>>2]=f;h=h+1|0}}while(0);Cq(k);Cq(j);return}}return}function Tm(a,d,e,f,g,h,j,k,l,m,n,o,p,q,r,s,t,u,v,w){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;t=t|0;u=u|0;v=v|0;w=w|0;var x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=i;i=i+32|0;E=G;F=G+8|0;k=(c[q>>2]|0)>>>8;x=0;while(1){if((x|0)==2)break;h=p+(x<<2)|0;j=q+(x<<2)|0;y=0;while(1){if((y|0)==2)break;c[h>>2]=c[h>>2]|c[r+(x<<3)+(y<<2)>>2];c[j>>2]=c[j>>2]|c[r+16+(x<<3)+(y<<2)>>2];y=y+1|0}x=x+1|0}D=k&1;h=0;k=0;while(1){if((h|0)==2)break;C=c[m+(h<<2)>>2]|0;h=h+1|0;k=(k|0)<(C|0)?C:k}j=(k|0)<1?1:k;k=0;x=0;while(1){if((x|0)==2)break;a:do if(!(c[m+(x<<2)>>2]|0)){h=0;while(1){if((h|0)==2)break a;c[F+(x<<3)+(h<<2)>>2]=0;h=h+1|0}}else{h=0;while(1){if((h|0)==2)break a;C=Dq(j,24)|0;c[F+(x<<3)+(h<<2)>>2]=C;k=((C|0)==0&1)+k|0;h=h+1|0}}while(0);x=x+1|0}b:do if(!k){z=0;while(1){if((z|0)==2)break;r=m+(z<<2)|0;c:do if(c[r>>2]|0){k=t+(z<<2)|0;h=u+(z<<2)|0;q=0;while(1){if((q|0)==2)break;j=c[r>>2]|0;x=F+(z<<3)+(q<<2)|0;y=0;while(1){if((y|0)<(j|0))p=0;else break;while(1){if((p|0)==2)break;c[(c[x>>2]|0)+(y*24|0)+(p<<2)>>2]=c[(c[k>>2]|0)+(y<<3)+(p<<2)>>2];c[(c[x>>2]|0)+(y*24|0)+8+(p<<2)>>2]=c[(c[h>>2]|0)+(y<<3)+(p<<2)>>2];p=p+1|0}b[(c[x>>2]|0)+(y*24|0)+16>>1]=y;y=y+1|0}q=q+1|0}k=F+(z<<3)|0;h=F+(z<<3)+4|0;j=0;while(1){switch(j|0){case 2:break c;case 0:{Np(c[k>>2]|0,c[r>>2]|0,24,6);break}case 1:{Np(c[h>>2]|0,c[r>>2]|0,24,7);break}default:{}}j=j+1|0}}while(0);z=z+1|0}C=g+192|0;k=c[C>>2]|0;if(!(k&200))q=0;else{B=k&-201;q=k&8;r=g+188|0;z=g+200|0;t=g+260|0;u=g+68|0;A=g+72|0;j=g+76|0;y=(q|0)==0;p=1;x=1;while(1){if((p|0)>=3)break b;h=(p|0)==2;k=h?128:64;do if(c[C>>2]&k){k=k|B;if((p|0)!=1){if(!h)break;c[E>>2]=86375;Yc(d,86360,E)|0;k=k&-1033}k=k|q;x=(Bf(a,e,F,0,l,D,3,k,c[r>>2]|0,c[z>>2]|0,c[t>>2]|0,m,n,o,d,f,s,c[u>>2]|0,c[A>>2]|0,c[j>>2]|0,v,w)|0)&x;if(y&(x|0)!=0)x=(Bf(a,e,F,1,l,D,3,k,c[r>>2]|0,c[z>>2]|0,c[t>>2]|0,m,n,o,d,f,s,c[u>>2]|0,c[A>>2]|0,c[j>>2]|0,v,w)|0)&x;if(!x){x=0;break b}}while(0);p=p+1|0}}while(1){if((q|0)==2){x=1;break b}h=c[m+(q<<2)>>2]|0;d:do if(h|0){j=F+(q<<3)+4|0;x=t+(q<<2)|0;y=u+(q<<2)|0;p=0;while(1){if((p|0)>=(h|0))break d;e=c[j>>2]|0;e:do if((c[e+(p*24|0)>>2]|0)!=0?(c[e+(p*24|0)+4>>2]|0)==0:0){k=0;while(1){if((k|0)==2)break e;e=1-k|0;c[(c[x>>2]|0)+(p<<3)+(k<<2)>>2]=c[(c[j>>2]|0)+(p*24|0)+(e<<2)>>2];c[(c[y>>2]|0)+(p<<3)+(k<<2)>>2]=c[(c[j>>2]|0)+(p*24|0)+8+(e<<2)>>2];k=k+1|0}}else{k=0;A=44}while(0);f:do if((A|0)==44)while(1){A=0;if((k|0)==2)break f;c[(c[x>>2]|0)+(p<<3)+(k<<2)>>2]=c[(c[j>>2]|0)+(p*24|0)+(k<<2)>>2];c[(c[y>>2]|0)+(p<<3)+(k<<2)>>2]=c[(c[j>>2]|0)+(p*24|0)+8+(k<<2)>>2];k=k+1|0;A=44}while(0);p=p+1|0}}while(0);q=q+1|0}}else x=-30002;while(0);h=0;while(1){if((h|0)==2)break;else j=0;while(1){if((j|0)==2)break;k=c[F+(h<<3)+(j<<2)>>2]|0;if(k|0)Cq(k);j=j+1|0}h=h+1|0}i=G;return (x|0?0:3)|0}function Um(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;return 0}function Vm(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;return 0}function Wm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;h=0;a:while(1){if((h|0)>=2){d=0;break}d=c[b+(h<<2)>>2]|0;b:do if(d|0){e=a+(h<<2)|0;g=0;while(1){if((g|0)<(d|0))i=0;else break b;while(1){if((i|0)>=2)break;f=c[(c[e>>2]|0)+(g<<3)+(i<<2)>>2]|0;if((f|0?(c[f+76>>2]|0)==0:0)?(c[f+12>>2]|0)>0:0){j=c[f+64>>2]|0;if(((j|0?c[j+8>>2]|0:0)?(c[j>>2]|0)>0:0)?c[j+20>>2]|0:0){d=1;break a}j=c[f+68>>2]|0;if(((j|0?c[j+8>>2]|0:0)?(c[j>>2]|0)>0:0)?c[j+20>>2]|0:0){d=1;break a}}i=i+1|0}g=g+1|0}}while(0);h=h+1|0}return d|0}function Xm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=0;while(1){if((h|0)==2)break;i=d+(h<<2)|0;f=c[i>>2]|0;e=a+(h<<2)|0;g=b+(h<<2)|0;Ym(c[e>>2]|0,c[g>>2]|0,f);c[i>>2]=0;if(f|0){f=c[e>>2]|0;if(f|0){Cq(f);c[e>>2]=0}e=c[g>>2]|0;if(e|0){Cq(e);c[g>>2]=0}}h=h+1|0}return}function Ym(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;a:do if(a|0){d=0;while(1){if((d|0)<(c|0))e=0;else break a;while(1){if((e|0)==2)break;Ln(a+(d<<3)+(e<<2)|0)|0;e=e+1|0}d=d+1|0}}while(0);b:do if(b|0){d=0;while(1){if((d|0)<(c|0))e=0;else break b;while(1){if((e|0)==2)break;On(b+(d<<3)+(e<<2)|0)|0;e=e+1|0}d=d+1|0}}while(0);return}function Zm(b,d,e,f,g,h,j,k,l){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;t=i;i=i+32|0;s=t;q=b+4|0;h=c[q>>2]|0;if(!h)h=c[b+8>>2]|0;else{r=b+16|0;ld(r,kd(h)|0)|0;p=c[q>>2]|0;o=f+1|0;m=c[d+68>>2]|0;n=(m|0)==0;if(!n){f=a[m>>0]|0;h=f<<24>>24?81168:92346;if(f<<24>>24){e=c[d+72>>2]|0;if(!e){l=h;f=m;k=81168}else{l=h;f=m;k=a[e>>0]|0?84228:81168}}else{l=h;f=92346;k=92346}}else{l=92346;f=92346;k=92346}e=c[d+72>>2]|0;if(!e)if(n)h=92346;else u=10;else{h=(a[e>>0]|0)!=0;if(h|n)h=h?e:92346;else u=10}if((u|0)==10)h=a[m>>0]|0?84217:92346;c[s>>2]=p;c[s+4>>2]=r;c[s+8>>2]=g;c[s+12>>2]=o;c[s+16>>2]=l;c[s+20>>2]=f;c[s+24>>2]=k;c[s+28>>2]=h;ad(j,86400,s)|0;h=c[q>>2]|0;h=(h|0)==-30002|(h|0)==-30013?3:2;c[b+8>>2]=h}i=t;return h|0}function _m(b,d,e,f,g,h,j,k){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;r=i;i=i+32|0;q=r;if((c[b+4>>2]|0)==0?(s=b+16|0,a[s>>0]|0):0){o=c[d+68>>2]|0;p=(o|0)==0;if(!p){n=a[o>>0]|0;e=n<<24>>24?81168:92346;if(n<<24>>24){j=c[d+72>>2]|0;if(!j){m=e;n=o;l=81168}else{m=e;n=o;l=a[j>>0]|0?84228:81168}}else{m=e;n=92346;l=92346}}else{m=92346;n=92346;l=92346}j=c[d+72>>2]|0;if(!j)if(p)e=92346;else w=10;else{e=(a[j>>0]|0)!=0;if(e|p)e=e?j:92346;else w=10}if((w|0)==10)e=a[o>>0]|0?84217:92346;c[q>>2]=s;c[q+4>>2]=f;c[q+8>>2]=m;c[q+12>>2]=n;c[q+16>>2]=l;c[q+20>>2]=e;ad(h,86452,q)|0;c[b+8>>2]=1;if((((c[d+232>>2]|0?(c[d+236>>2]|0)==0:0)?(t=c[k+16>>2]|0,t|0):0)?(u=c[b+272>>2]|0,(u|0)>-1):0)?(v=c[b+276>>2]|0,(u|0)<(v|0)):0)Uk(g,u,v,t,f)|0}i=r;return c[b+8>>2]|0}function $m(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=d+16|0;g=0;d=0;while(1){if((g|0)==2)break;e=c[a+(g<<2)>>2]|0;if((e|0)!=0?(c[e+12>>2]|0)>0:0)d=an(e,c[b+(g<<2)>>2]|0,f)|0|d;g=g+1|0}return d|0}function an(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=c[d>>2]|0;if(h){f=c[b+12>>2]|0;g=0;b=0;d=0;while(1){if((g|0)>=(f|0))break;i=a[h+(g*176|0)+101>>0]|0;g=g+1|0;b=((i&10)!=0&1)+b|0;d=((i&20)!=0&1)+d|0}if(b|0){ld(e,86490)|0;ld(e,86508)|0}if(!d)d=0;else{ld(e,86490)|0;ld(e,86518)|0}}else{b=0;d=0}return (d|b|0)!=0|0}function bn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;if((d|0)>=1){h=c[a>>2]|0;f=h&63;e=64-f|0;h=h+d|0;c[a>>2]=h;if(h>>>0>>0){h=a+4|0;c[h>>2]=(c[h>>2]|0)+1}if(!((f|0)==0|(e|0)>(d|0))){ir(a+40+f|0,b|0,e|0)|0;cn(a,a+40|0);b=b+e|0;d=d-e|0;f=0}g=d+~((d|0)<63?d:63)+64&-64;h=b+g|0;e=d;while(1){if((e|0)<=63)break;cn(a,b);b=b+64|0;e=e+-64|0}b=d-g|0;if((b|0)>0)ir(a+40+f|0,h|0,b|0)|0}return}function cn(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0;ka=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(d[b+2>>0]|0)<<8|(d[b+3>>0]|0);ma=(d[b+5>>0]|0)<<16|(d[b+4>>0]|0)<<24;la=d[b+7>>0]|0;ha=ma|(d[b+6>>0]|0)<<8|la;ja=(d[b+9>>0]|0)<<16|(d[b+8>>0]|0)<<24;ia=d[b+11>>0]|0;t=ja|(d[b+10>>0]|0)<<8|ia;ga=(d[b+13>>0]|0)<<16|(d[b+12>>0]|0)<<24;fa=d[b+15>>0]|0;x=ga|(d[b+14>>0]|0)<<8|fa;ea=(d[b+17>>0]|0)<<16|(d[b+16>>0]|0)<<24;da=d[b+19>>0]|0;E=ea|(d[b+18>>0]|0)<<8|da;ca=(d[b+21>>0]|0)<<16|(d[b+20>>0]|0)<<24;ba=d[b+23>>0]|0;C=ca|(d[b+22>>0]|0)<<8|ba;aa=(d[b+25>>0]|0)<<16|(d[b+24>>0]|0)<<24;$=d[b+27>>0]|0;A=aa|(d[b+26>>0]|0)<<8|$;_=(d[b+29>>0]|0)<<16|(d[b+28>>0]|0)<<24;Z=d[b+31>>0]|0;y=_|(d[b+30>>0]|0)<<8|Z;Y=(d[b+33>>0]|0)<<16|(d[b+32>>0]|0)<<24;X=d[b+35>>0]|0;I=Y|(d[b+34>>0]|0)<<8|X;W=(d[b+37>>0]|0)<<16|(d[b+36>>0]|0)<<24;V=d[b+39>>0]|0;H=W|(d[b+38>>0]|0)<<8|V;U=(d[b+41>>0]|0)<<16|(d[b+40>>0]|0)<<24;T=d[b+43>>0]|0;G=U|(d[b+42>>0]|0)<<8|T;S=(d[b+45>>0]|0)<<16|(d[b+44>>0]|0)<<24;R=d[b+47>>0]|0;F=S|(d[b+46>>0]|0)<<8|R;Q=(d[b+49>>0]|0)<<16|(d[b+48>>0]|0)<<24;P=d[b+51>>0]|0;D=Q|(d[b+50>>0]|0)<<8|P;O=(d[b+53>>0]|0)<<16|(d[b+52>>0]|0)<<24;N=d[b+55>>0]|0;B=O|(d[b+54>>0]|0)<<8|N;M=(d[b+57>>0]|0)<<16|(d[b+56>>0]|0)<<24;v=M|(d[b+58>>0]|0)<<8;L=d[b+59>>0]|0;z=v|L;K=(d[b+61>>0]|0)<<16|(d[b+60>>0]|0)<<24;u=K|(d[b+62>>0]|0)<<8;J=d[b+63>>0]|0;w=u|J;r=a+8|0;s=c[r>>2]|0;p=a+12|0;q=c[p>>2]|0;n=a+16|0;o=c[n>>2]|0;l=a+20|0;i=a+24|0;k=c[i>>2]|0;g=a+28|0;h=c[g>>2]|0;e=a+32|0;f=c[e>>2]|0;b=a+36|0;a=ka+1116352408+(c[b>>2]|0)+((k>>>6|k<<26)^(k>>>11|k<<21)^(k>>>25|k<<7))+((f^h)&k^f)|0;m=a+(c[l>>2]|0)|0;a=((s>>>2|s<<30)^(s>>>13|s<<19)^(s>>>22|s<<10))+(o&(q|s)|q&s)+a|0;f=ha+1899447441+f+(m&(h^k)^h)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))|0;o=f+o|0;f=((a>>>2|a<<30)^(a>>>13|a<<19)^(a>>>22|a<<10))+((a|s)&q|a&s)+f|0;h=t+-1245643825+h+(o&(m^k)^k)+((o>>>6|o<<26)^(o>>>11|o<<21)^(o>>>25|o<<7))|0;q=h+q|0;h=((f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10))+((f|a)&s|f&a)+h|0;k=x+-373957723+k+(q&(o^m)^m)+((q>>>6|q<<26)^(q>>>11|q<<21)^(q>>>25|q<<7))|0;j=k+s|0;k=((h>>>2|h<<30)^(h>>>13|h<<19)^(h>>>22|h<<10))+((h|f)&a|h&f)+k|0;m=E+961987163+m+(j&(q^o)^o)+((j>>>6|j<<26)^(j>>>11|j<<21)^(j>>>25|j<<7))|0;a=m+a|0;m=((k>>>2|k<<30)^(k>>>13|k<<19)^(k>>>22|k<<10))+((k|h)&f|k&h)+m|0;o=C+1508970993+o+(a&(j^q)^q)+((a>>>6|a<<26)^(a>>>11|a<<21)^(a>>>25|a<<7))|0;f=o+f|0;o=((m>>>2|m<<30)^(m>>>13|m<<19)^(m>>>22|m<<10))+((m|k)&h|m&k)+o|0;q=A+-1841331548+q+(f&(a^j)^j)+((f>>>6|f<<26)^(f>>>11|f<<21)^(f>>>25|f<<7))|0;h=q+h|0;q=((o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10))+((o|m)&k|o&m)+q|0;j=y+-1424204075+j+(h&(f^a)^a)+((h>>>6|h<<26)^(h>>>11|h<<21)^(h>>>25|h<<7))|0;k=j+k|0;j=((q>>>2|q<<30)^(q>>>13|q<<19)^(q>>>22|q<<10))+((q|o)&m|q&o)+j|0;a=I+-670586216+a+(k&(h^f)^f)+((k>>>6|k<<26)^(k>>>11|k<<21)^(k>>>25|k<<7))|0;m=a+m|0;a=((j>>>2|j<<30)^(j>>>13|j<<19)^(j>>>22|j<<10))+((j|q)&o|j&q)+a|0;f=H+310598401+f+(m&(k^h)^h)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))|0;o=f+o|0;f=((a>>>2|a<<30)^(a>>>13|a<<19)^(a>>>22|a<<10))+((a|j)&q|a&j)+f|0;h=G+607225278+h+(o&(m^k)^k)+((o>>>6|o<<26)^(o>>>11|o<<21)^(o>>>25|o<<7))|0;q=h+q|0;h=((f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10))+((f|a)&j|f&a)+h|0;k=F+1426881987+k+(q&(o^m)^m)+((q>>>6|q<<26)^(q>>>11|q<<21)^(q>>>25|q<<7))|0;j=k+j|0;k=((h>>>2|h<<30)^(h>>>13|h<<19)^(h>>>22|h<<10))+((h|f)&a|h&f)+k|0;m=D+1925078388+m+(j&(q^o)^o)+((j>>>6|j<<26)^(j>>>11|j<<21)^(j>>>25|j<<7))|0;a=m+a|0;m=((k>>>2|k<<30)^(k>>>13|k<<19)^(k>>>22|k<<10))+((k|h)&f|k&h)+m|0;o=B+-2132889090+o+(a&(j^q)^q)+((a>>>6|a<<26)^(a>>>11|a<<21)^(a>>>25|a<<7))|0;f=o+f|0;o=((m>>>2|m<<30)^(m>>>13|m<<19)^(m>>>22|m<<10))+((m|k)&h|m&k)+o|0;q=z+-1680079193+q+(f&(a^j)^j)+((f>>>6|f<<26)^(f>>>11|f<<21)^(f>>>25|f<<7))|0;h=q+h|0;q=((o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10))+((o|m)&k|o&m)+q|0;j=w+-1046744716+j+(h&(f^a)^a)+((h>>>6|h<<26)^(h>>>11|h<<21)^(h>>>25|h<<7))|0;k=j+k|0;j=((q>>>2|q<<30)^(q>>>13|q<<19)^(q>>>22|q<<10))+((q|o)&m|q&o)+j|0;v=((ha<<14|ma>>>18)^ha>>>3^(ha>>>7|la<<25))+ka+H+((z<<13|M>>>19)^v>>>10^(z<<15|M>>>17))|0;a=v+-459576895+a+(k&(h^f)^f)+((k>>>6|k<<26)^(k>>>11|k<<21)^(k>>>25|k<<7))|0;m=a+m|0;a=((j>>>2|j<<30)^(j>>>13|j<<19)^(j>>>22|j<<10))+((j|q)&o|j&q)+a|0;u=((t<<14|ja>>>18)^t>>>3^(t>>>7|ia<<25))+ha+G+((w<<13|K>>>19)^u>>>10^(w<<15|K>>>17))|0;f=u+-272742522+f+(m&(k^h)^h)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))|0;o=f+o|0;f=((a>>>2|a<<30)^(a>>>13|a<<19)^(a>>>22|a<<10))+((a|j)&q|a&j)+f|0;t=((x<<14|ga>>>18)^x>>>3^(x>>>7|fa<<25))+t+F+((v>>>19|v<<13)^v>>>10^(v>>>17|v<<15))|0;h=t+264347078+h+(o&(m^k)^k)+((o>>>6|o<<26)^(o>>>11|o<<21)^(o>>>25|o<<7))|0;q=h+q|0;h=((f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10))+((f|a)&j|f&a)+h|0;x=((E<<14|ea>>>18)^E>>>3^(E>>>7|da<<25))+x+D+((u>>>19|u<<13)^u>>>10^(u>>>17|u<<15))|0;k=x+604807628+k+(q&(o^m)^m)+((q>>>6|q<<26)^(q>>>11|q<<21)^(q>>>25|q<<7))|0;j=k+j|0;k=((h>>>2|h<<30)^(h>>>13|h<<19)^(h>>>22|h<<10))+((h|f)&a|h&f)+k|0;E=((C<<14|ca>>>18)^C>>>3^(C>>>7|ba<<25))+E+B+((t>>>19|t<<13)^t>>>10^(t>>>17|t<<15))|0;m=E+770255983+m+(j&(q^o)^o)+((j>>>6|j<<26)^(j>>>11|j<<21)^(j>>>25|j<<7))|0;a=m+a|0;m=((k>>>2|k<<30)^(k>>>13|k<<19)^(k>>>22|k<<10))+((k|h)&f|k&h)+m|0;C=((A<<14|aa>>>18)^A>>>3^(A>>>7|$<<25))+C+z+((x>>>19|x<<13)^x>>>10^(x>>>17|x<<15))|0;o=C+1249150122+o+(a&(j^q)^q)+((a>>>6|a<<26)^(a>>>11|a<<21)^(a>>>25|a<<7))|0;f=o+f|0;o=((m>>>2|m<<30)^(m>>>13|m<<19)^(m>>>22|m<<10))+((m|k)&h|m&k)+o|0;A=((y<<14|_>>>18)^y>>>3^(y>>>7|Z<<25))+A+w+((E>>>19|E<<13)^E>>>10^(E>>>17|E<<15))|0;q=A+1555081692+q+(f&(a^j)^j)+((f>>>6|f<<26)^(f>>>11|f<<21)^(f>>>25|f<<7))|0;h=q+h|0;q=((o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10))+((o|m)&k|o&m)+q|0;y=((I<<14|Y>>>18)^I>>>3^(I>>>7|X<<25))+y+v+((C>>>19|C<<13)^C>>>10^(C>>>17|C<<15))|0;j=y+1996064986+j+(h&(f^a)^a)+((h>>>6|h<<26)^(h>>>11|h<<21)^(h>>>25|h<<7))|0;k=j+k|0;j=((q>>>2|q<<30)^(q>>>13|q<<19)^(q>>>22|q<<10))+((q|o)&m|q&o)+j|0;I=((H<<14|W>>>18)^H>>>3^(H>>>7|V<<25))+I+u+((A>>>19|A<<13)^A>>>10^(A>>>17|A<<15))|0;a=I+-1740746414+a+(k&(h^f)^f)+((k>>>6|k<<26)^(k>>>11|k<<21)^(k>>>25|k<<7))|0;m=a+m|0;a=((j>>>2|j<<30)^(j>>>13|j<<19)^(j>>>22|j<<10))+((j|q)&o|j&q)+a|0;H=((G<<14|U>>>18)^G>>>3^(G>>>7|T<<25))+H+t+((y>>>19|y<<13)^y>>>10^(y>>>17|y<<15))|0;f=H+-1473132947+f+(m&(k^h)^h)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))|0;o=f+o|0;f=((a>>>2|a<<30)^(a>>>13|a<<19)^(a>>>22|a<<10))+((a|j)&q|a&j)+f|0;G=((F<<14|S>>>18)^F>>>3^(F>>>7|R<<25))+G+x+((I>>>19|I<<13)^I>>>10^(I>>>17|I<<15))|0;h=G+-1341970488+h+(o&(m^k)^k)+((o>>>6|o<<26)^(o>>>11|o<<21)^(o>>>25|o<<7))|0;q=h+q|0;h=((f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10))+((f|a)&j|f&a)+h|0;F=((D<<14|Q>>>18)^D>>>3^(D>>>7|P<<25))+F+E+((H>>>19|H<<13)^H>>>10^(H>>>17|H<<15))|0;k=F+-1084653625+k+(q&(o^m)^m)+((q>>>6|q<<26)^(q>>>11|q<<21)^(q>>>25|q<<7))|0;j=k+j|0;k=((h>>>2|h<<30)^(h>>>13|h<<19)^(h>>>22|h<<10))+((h|f)&a|h&f)+k|0;D=((B<<14|O>>>18)^B>>>3^(B>>>7|N<<25))+D+C+((G>>>19|G<<13)^G>>>10^(G>>>17|G<<15))|0;m=D+-958395405+m+(j&(q^o)^o)+((j>>>6|j<<26)^(j>>>11|j<<21)^(j>>>25|j<<7))|0;a=m+a|0;m=((k>>>2|k<<30)^(k>>>13|k<<19)^(k>>>22|k<<10))+((k|h)&f|k&h)+m|0;B=((z<<14|M>>>18)^z>>>3^(z>>>7|L<<25))+B+A+((F>>>19|F<<13)^F>>>10^(F>>>17|F<<15))|0;o=B+-710438585+o+(a&(j^q)^q)+((a>>>6|a<<26)^(a>>>11|a<<21)^(a>>>25|a<<7))|0;f=o+f|0;o=((m>>>2|m<<30)^(m>>>13|m<<19)^(m>>>22|m<<10))+((m|k)&h|m&k)+o|0;z=((w<<14|K>>>18)^w>>>3^(w>>>7|J<<25))+z+y+((D>>>19|D<<13)^D>>>10^(D>>>17|D<<15))|0;q=z+113926993+q+(f&(a^j)^j)+((f>>>6|f<<26)^(f>>>11|f<<21)^(f>>>25|f<<7))|0;h=q+h|0;q=((o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10))+((o|m)&k|o&m)+q|0;w=((v>>>18|v<<14)^v>>>3^(v>>>7|v<<25))+w+I+((B>>>19|B<<13)^B>>>10^(B>>>17|B<<15))|0;j=w+338241895+j+(h&(f^a)^a)+((h>>>6|h<<26)^(h>>>11|h<<21)^(h>>>25|h<<7))|0;k=j+k|0;j=((q>>>2|q<<30)^(q>>>13|q<<19)^(q>>>22|q<<10))+((q|o)&m|q&o)+j|0;v=((u>>>18|u<<14)^u>>>3^(u>>>7|u<<25))+v+H+((z>>>19|z<<13)^z>>>10^(z>>>17|z<<15))|0;a=v+666307205+a+(k&(h^f)^f)+((k>>>6|k<<26)^(k>>>11|k<<21)^(k>>>25|k<<7))|0;m=a+m|0;a=((j>>>2|j<<30)^(j>>>13|j<<19)^(j>>>22|j<<10))+((j|q)&o|j&q)+a|0;u=((t>>>18|t<<14)^t>>>3^(t>>>7|t<<25))+u+G+((w>>>19|w<<13)^w>>>10^(w>>>17|w<<15))|0;f=u+773529912+f+(m&(k^h)^h)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))|0;o=f+o|0;f=((a>>>2|a<<30)^(a>>>13|a<<19)^(a>>>22|a<<10))+((a|j)&q|a&j)+f|0;t=((x>>>18|x<<14)^x>>>3^(x>>>7|x<<25))+t+F+((v>>>19|v<<13)^v>>>10^(v>>>17|v<<15))|0;h=t+1294757372+h+(o&(m^k)^k)+((o>>>6|o<<26)^(o>>>11|o<<21)^(o>>>25|o<<7))|0;q=h+q|0;h=((f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10))+((f|a)&j|f&a)+h|0;x=((E>>>18|E<<14)^E>>>3^(E>>>7|E<<25))+x+D+((u>>>19|u<<13)^u>>>10^(u>>>17|u<<15))|0;k=x+1396182291+k+(q&(o^m)^m)+((q>>>6|q<<26)^(q>>>11|q<<21)^(q>>>25|q<<7))|0;j=k+j|0;k=((h>>>2|h<<30)^(h>>>13|h<<19)^(h>>>22|h<<10))+((h|f)&a|h&f)+k|0;E=((C>>>18|C<<14)^C>>>3^(C>>>7|C<<25))+E+B+((t>>>19|t<<13)^t>>>10^(t>>>17|t<<15))|0;m=E+1695183700+m+(j&(q^o)^o)+((j>>>6|j<<26)^(j>>>11|j<<21)^(j>>>25|j<<7))|0;a=m+a|0;m=((k>>>2|k<<30)^(k>>>13|k<<19)^(k>>>22|k<<10))+((k|h)&f|k&h)+m|0;C=((A>>>18|A<<14)^A>>>3^(A>>>7|A<<25))+C+z+((x>>>19|x<<13)^x>>>10^(x>>>17|x<<15))|0;o=C+1986661051+o+(a&(j^q)^q)+((a>>>6|a<<26)^(a>>>11|a<<21)^(a>>>25|a<<7))|0;f=o+f|0;o=((m>>>2|m<<30)^(m>>>13|m<<19)^(m>>>22|m<<10))+((m|k)&h|m&k)+o|0;A=((y>>>18|y<<14)^y>>>3^(y>>>7|y<<25))+A+w+((E>>>19|E<<13)^E>>>10^(E>>>17|E<<15))|0;q=A+-2117940946+q+(f&(a^j)^j)+((f>>>6|f<<26)^(f>>>11|f<<21)^(f>>>25|f<<7))|0;h=q+h|0;q=((o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10))+((o|m)&k|o&m)+q|0;y=((I>>>18|I<<14)^I>>>3^(I>>>7|I<<25))+y+v+((C>>>19|C<<13)^C>>>10^(C>>>17|C<<15))|0;j=y+-1838011259+j+(h&(f^a)^a)+((h>>>6|h<<26)^(h>>>11|h<<21)^(h>>>25|h<<7))|0;k=j+k|0;j=((q>>>2|q<<30)^(q>>>13|q<<19)^(q>>>22|q<<10))+((q|o)&m|q&o)+j|0;I=((H>>>18|H<<14)^H>>>3^(H>>>7|H<<25))+I+u+((A>>>19|A<<13)^A>>>10^(A>>>17|A<<15))|0;a=I+-1564481375+a+(k&(h^f)^f)+((k>>>6|k<<26)^(k>>>11|k<<21)^(k>>>25|k<<7))|0;m=a+m|0;a=((j>>>2|j<<30)^(j>>>13|j<<19)^(j>>>22|j<<10))+((j|q)&o|j&q)+a|0;H=((G>>>18|G<<14)^G>>>3^(G>>>7|G<<25))+H+t+((y>>>19|y<<13)^y>>>10^(y>>>17|y<<15))|0;f=H+-1474664885+f+(m&(k^h)^h)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))|0;o=f+o|0;f=((a>>>2|a<<30)^(a>>>13|a<<19)^(a>>>22|a<<10))+((a|j)&q|a&j)+f|0;G=((F>>>18|F<<14)^F>>>3^(F>>>7|F<<25))+G+x+((I>>>19|I<<13)^I>>>10^(I>>>17|I<<15))|0;h=G+-1035236496+h+(o&(m^k)^k)+((o>>>6|o<<26)^(o>>>11|o<<21)^(o>>>25|o<<7))|0;q=h+q|0;h=((f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10))+((f|a)&j|f&a)+h|0;F=((D>>>18|D<<14)^D>>>3^(D>>>7|D<<25))+F+E+((H>>>19|H<<13)^H>>>10^(H>>>17|H<<15))|0;k=F+-949202525+k+(q&(o^m)^m)+((q>>>6|q<<26)^(q>>>11|q<<21)^(q>>>25|q<<7))|0;j=k+j|0;k=((h>>>2|h<<30)^(h>>>13|h<<19)^(h>>>22|h<<10))+((h|f)&a|h&f)+k|0;D=((B>>>18|B<<14)^B>>>3^(B>>>7|B<<25))+D+C+((G>>>19|G<<13)^G>>>10^(G>>>17|G<<15))|0;m=D+-778901479+m+(j&(q^o)^o)+((j>>>6|j<<26)^(j>>>11|j<<21)^(j>>>25|j<<7))|0;a=m+a|0;m=((k>>>2|k<<30)^(k>>>13|k<<19)^(k>>>22|k<<10))+((k|h)&f|k&h)+m|0;B=((z>>>18|z<<14)^z>>>3^(z>>>7|z<<25))+B+A+((F>>>19|F<<13)^F>>>10^(F>>>17|F<<15))|0;o=B+-694614492+o+(a&(j^q)^q)+((a>>>6|a<<26)^(a>>>11|a<<21)^(a>>>25|a<<7))|0;f=o+f|0;o=((m>>>2|m<<30)^(m>>>13|m<<19)^(m>>>22|m<<10))+((m|k)&h|m&k)+o|0;z=((w>>>18|w<<14)^w>>>3^(w>>>7|w<<25))+z+y+((D>>>19|D<<13)^D>>>10^(D>>>17|D<<15))|0;q=z+-200395387+q+(f&(a^j)^j)+((f>>>6|f<<26)^(f>>>11|f<<21)^(f>>>25|f<<7))|0;h=q+h|0;q=((o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10))+((o|m)&k|o&m)+q|0;w=((v>>>18|v<<14)^v>>>3^(v>>>7|v<<25))+w+I+((B>>>19|B<<13)^B>>>10^(B>>>17|B<<15))|0;j=w+275423344+j+(h&(f^a)^a)+((h>>>6|h<<26)^(h>>>11|h<<21)^(h>>>25|h<<7))|0;k=j+k|0;j=((q>>>2|q<<30)^(q>>>13|q<<19)^(q>>>22|q<<10))+((q|o)&m|q&o)+j|0;v=((u>>>18|u<<14)^u>>>3^(u>>>7|u<<25))+v+H+((z>>>19|z<<13)^z>>>10^(z>>>17|z<<15))|0;a=v+430227734+a+(k&(h^f)^f)+((k>>>6|k<<26)^(k>>>11|k<<21)^(k>>>25|k<<7))|0;m=a+m|0;a=((j>>>2|j<<30)^(j>>>13|j<<19)^(j>>>22|j<<10))+((j|q)&o|j&q)+a|0;u=((t>>>18|t<<14)^t>>>3^(t>>>7|t<<25))+u+G+((w>>>19|w<<13)^w>>>10^(w>>>17|w<<15))|0;f=u+506948616+f+(m&(k^h)^h)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))|0;o=f+o|0;f=((a>>>2|a<<30)^(a>>>13|a<<19)^(a>>>22|a<<10))+((a|j)&q|a&j)+f|0;t=((x>>>18|x<<14)^x>>>3^(x>>>7|x<<25))+t+F+((v>>>19|v<<13)^v>>>10^(v>>>17|v<<15))|0;h=t+659060556+h+(o&(m^k)^k)+((o>>>6|o<<26)^(o>>>11|o<<21)^(o>>>25|o<<7))|0;q=h+q|0;h=((f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10))+((f|a)&j|f&a)+h|0;x=((E>>>18|E<<14)^E>>>3^(E>>>7|E<<25))+x+D+((u>>>19|u<<13)^u>>>10^(u>>>17|u<<15))|0;k=x+883997877+k+(q&(o^m)^m)+((q>>>6|q<<26)^(q>>>11|q<<21)^(q>>>25|q<<7))|0;j=k+j|0;k=((h>>>2|h<<30)^(h>>>13|h<<19)^(h>>>22|h<<10))+((h|f)&a|h&f)+k|0;E=((C>>>18|C<<14)^C>>>3^(C>>>7|C<<25))+E+B+((t>>>19|t<<13)^t>>>10^(t>>>17|t<<15))|0;m=E+958139571+m+(j&(q^o)^o)+((j>>>6|j<<26)^(j>>>11|j<<21)^(j>>>25|j<<7))|0;a=m+a|0;m=((k>>>2|k<<30)^(k>>>13|k<<19)^(k>>>22|k<<10))+((k|h)&f|k&h)+m|0;C=((A>>>18|A<<14)^A>>>3^(A>>>7|A<<25))+C+z+((x>>>19|x<<13)^x>>>10^(x>>>17|x<<15))|0;o=C+1322822218+o+(a&(j^q)^q)+((a>>>6|a<<26)^(a>>>11|a<<21)^(a>>>25|a<<7))|0;f=o+f|0;o=((m>>>2|m<<30)^(m>>>13|m<<19)^(m>>>22|m<<10))+((m|k)&h|m&k)+o|0;A=((y>>>18|y<<14)^y>>>3^(y>>>7|y<<25))+A+w+((E>>>19|E<<13)^E>>>10^(E>>>17|E<<15))|0;q=A+1537002063+q+(f&(a^j)^j)+((f>>>6|f<<26)^(f>>>11|f<<21)^(f>>>25|f<<7))|0;h=q+h|0;q=((o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10))+((o|m)&k|o&m)+q|0;y=((I>>>18|I<<14)^I>>>3^(I>>>7|I<<25))+y+v+((C>>>19|C<<13)^C>>>10^(C>>>17|C<<15))|0;j=y+1747873779+j+(h&(f^a)^a)+((h>>>6|h<<26)^(h>>>11|h<<21)^(h>>>25|h<<7))|0;k=j+k|0;j=((q>>>2|q<<30)^(q>>>13|q<<19)^(q>>>22|q<<10))+((q|o)&m|q&o)+j|0;u=((H>>>18|H<<14)^H>>>3^(H>>>7|H<<25))+I+u+((A>>>19|A<<13)^A>>>10^(A>>>17|A<<15))|0;a=u+1955562222+a+(k&(h^f)^f)+((k>>>6|k<<26)^(k>>>11|k<<21)^(k>>>25|k<<7))|0;m=a+m|0;a=((j>>>2|j<<30)^(j>>>13|j<<19)^(j>>>22|j<<10))+((j|q)&o|j&q)+a|0;t=((G>>>18|G<<14)^G>>>3^(G>>>7|G<<25))+H+t+((y>>>19|y<<13)^y>>>10^(y>>>17|y<<15))|0;f=t+2024104815+f+(m&(k^h)^h)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))|0;o=f+o|0;f=((a>>>2|a<<30)^(a>>>13|a<<19)^(a>>>22|a<<10))+((a|j)&q|a&j)+f|0;x=((F>>>18|F<<14)^F>>>3^(F>>>7|F<<25))+G+x+((u>>>19|u<<13)^u>>>10^(u>>>17|u<<15))|0;h=x+-2067236844+h+(o&(m^k)^k)+((o>>>6|o<<26)^(o>>>11|o<<21)^(o>>>25|o<<7))|0;q=h+q|0;h=((f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10))+((f|a)&j|f&a)+h|0;t=((D>>>18|D<<14)^D>>>3^(D>>>7|D<<25))+F+E+((t>>>19|t<<13)^t>>>10^(t>>>17|t<<15))|0;k=t+-1933114872+k+(q&(o^m)^m)+((q>>>6|q<<26)^(q>>>11|q<<21)^(q>>>25|q<<7))|0;j=k+j|0;k=((h>>>2|h<<30)^(h>>>13|h<<19)^(h>>>22|h<<10))+((h|f)&a|h&f)+k|0;x=((B>>>18|B<<14)^B>>>3^(B>>>7|B<<25))+D+C+((x>>>19|x<<13)^x>>>10^(x>>>17|x<<15))|0;m=x+-1866530822+m+(j&(q^o)^o)+((j>>>6|j<<26)^(j>>>11|j<<21)^(j>>>25|j<<7))|0;a=m+a|0;m=((k>>>2|k<<30)^(k>>>13|k<<19)^(k>>>22|k<<10))+((k|h)&f|k&h)+m|0;t=((z>>>18|z<<14)^z>>>3^(z>>>7|z<<25))+B+A+((t>>>19|t<<13)^t>>>10^(t>>>17|t<<15))|0;o=t+-1538233109+o+(a&(j^q)^q)+((a>>>6|a<<26)^(a>>>11|a<<21)^(a>>>25|a<<7))|0;f=o+f|0;o=((m>>>2|m<<30)^(m>>>13|m<<19)^(m>>>22|m<<10))+((m|k)&h|m&k)+o|0;q=z+-1090935817+((w>>>18|w<<14)^w>>>3^(w>>>7|w<<25))+y+((x>>>19|x<<13)^x>>>10^(x>>>17|x<<15))+q+(f&(a^j)^j)+((f>>>6|f<<26)^(f>>>11|f<<21)^(f>>>25|f<<7))|0;h=q+h|0;q=((o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10))+((o|m)&k|o&m)+q|0;j=w+-965641998+((v>>>18|v<<14)^v>>>3^(v>>>7|v<<25))+u+((t>>>19|t<<13)^t>>>10^(t>>>17|t<<15))+j+(h&(f^a)^a)+((h>>>6|h<<26)^(h>>>11|h<<21)^(h>>>25|h<<7))|0;c[r>>2]=((q|o)&m|q&o)+s+((q>>>2|q<<30)^(q>>>13|q<<19)^(q>>>22|q<<10))+j;c[p>>2]=q+(c[p>>2]|0);c[n>>2]=o+(c[n>>2]|0);c[l>>2]=m+(c[l>>2]|0);c[i>>2]=k+(c[i>>2]|0)+j;c[g>>2]=h+(c[g>>2]|0);c[e>>2]=f+(c[e>>2]|0);c[b>>2]=a+(c[b>>2]|0);return}function dn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+16|0;f=e;g=c[b>>2]|0;h=c[b+4>>2]|0;a[f>>0]=h>>>21;a[f+1>>0]=h>>>13;a[f+2>>0]=h>>>5;a[f+3>>0]=h<<3|g>>>29;a[f+4>>0]=g>>>21;a[f+5>>0]=g>>>13;a[f+6>>0]=g>>>5;a[f+7>>0]=g<<3;g=g&63;bn(b,86526,(g>>>0<56?56:120)-g|0);bn(b,f,8);f=b+8|0;a[d>>0]=(c[f>>2]|0)>>>24;a[d+1>>0]=(c[f>>2]|0)>>>16;a[d+2>>0]=(c[f>>2]|0)>>>8;a[d+3>>0]=c[f>>2];f=b+12|0;a[d+4>>0]=(c[f>>2]|0)>>>24;a[d+5>>0]=(c[f>>2]|0)>>>16;a[d+6>>0]=(c[f>>2]|0)>>>8;a[d+7>>0]=c[f>>2];f=b+16|0;a[d+8>>0]=(c[f>>2]|0)>>>24;a[d+9>>0]=(c[f>>2]|0)>>>16;a[d+10>>0]=(c[f>>2]|0)>>>8;a[d+11>>0]=c[f>>2];f=b+20|0;a[d+12>>0]=(c[f>>2]|0)>>>24;a[d+13>>0]=(c[f>>2]|0)>>>16;a[d+14>>0]=(c[f>>2]|0)>>>8;a[d+15>>0]=c[f>>2];f=b+24|0;a[d+16>>0]=(c[f>>2]|0)>>>24;a[d+17>>0]=(c[f>>2]|0)>>>16;a[d+18>>0]=(c[f>>2]|0)>>>8;a[d+19>>0]=c[f>>2];f=b+28|0;a[d+20>>0]=(c[f>>2]|0)>>>24;a[d+21>>0]=(c[f>>2]|0)>>>16;a[d+22>>0]=(c[f>>2]|0)>>>8;a[d+23>>0]=c[f>>2];f=b+32|0;a[d+24>>0]=(c[f>>2]|0)>>>24;a[d+25>>0]=(c[f>>2]|0)>>>16;a[d+26>>0]=(c[f>>2]|0)>>>8;a[d+27>>0]=c[f>>2];b=b+36|0;a[d+28>>0]=(c[b>>2]|0)>>>24;a[d+29>>0]=(c[b>>2]|0)>>>16;a[d+30>>0]=(c[b>>2]|0)>>>8;a[d+31>>0]=c[b>>2];i=e;return}function en(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;i=i+112|0;f=e;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=1779033703;c[f+12>>2]=-1150833019;c[f+16>>2]=1013904242;c[f+20>>2]=-1521486534;c[f+24>>2]=1359893119;c[f+28>>2]=-1694144372;c[f+32>>2]=528734635;c[f+36>>2]=1541459225;bn(f,a,b);dn(f,d);i=e;return}function fn(b,c){b=b|0;c=c|0;var d=0,f=0;d=a[b+98>>0]|0;f=a[c+98>>0]|0;if(d<<24>>24==f<<24>>24)d=(e[b+106>>1]|0)-(e[c+106>>1]|0)|0;else d=(d<<24>>24)-(f<<24>>24)|0;return d|0}function gn(b,d,f,g){b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0;do if((a[b+(d*176|0)+100>>0]|0)==2){i=a[b+(d*176|0)+92>>0]|0;j=0;h=0;while(1){if((j|0)>=(i|0))break;if((a[b+((e[b+(d*176|0)+8+(j<<1)>>1]|0)*176|0)+100>>0]|0)==2){c[f>>2]=j;h=h+1|0}j=j+1|0}if((h|0)==1){h=e[b+(d*176|0)+8+(c[f>>2]<<1)>>1]|0;j=a[b+(h*176|0)+92>>0]|0;d=0;i=0;while(1){if((d|0)>=(j|0))break;if((a[b+((e[b+(h*176|0)+8+(d<<1)>>1]|0)*176|0)+100>>0]|0)==2){c[g>>2]=d;i=i+1|0}d=d+1|0}if((i|0)==1)break}h=-1}else h=-1;while(0);return h|0}function hn(b,f,g){b=b|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;t=0;while(1){if((t|0)>=(b|0))break;s=f+(t*176|0)+99|0;do if((a[s>>0]|0)==-1){r=a[f+(t*176|0)+6>>0]|0;h=r&255;if(!(lp(86590,h,4)|0)){if(!(lp(86594,h,3)|0))break;if((a[f+(t*176|0)+93>>0]|0)<7)break}if((d[f+(t*176|0)+100>>0]|0)<2){n=a[f+(t*176|0)+92>>0]|0;o=f+(t*176|0)+98|0;p=r<<24>>24==85;i=-1;q=0;h=0;m=999;j=999;while(1){if((q|0)>=(n|0))break;l=e[f+(t*176|0)+8+(q<<1)>>1]|0;a:do if((((a[f+(l*176|0)+92>>0]|0)==1?(a[f+(t*176|0)+72+q>>0]|0)==2:0)?(a[f+(l*176|0)+99>>0]|0)==0:0)?(d[f+(l*176|0)+100>>0]|0)<2:0){k=d[f+(l*176|0)+6>>0]|0;switch(k|0){case 8:break;case 16:{switch(r<<24>>24){case 34:case 52:case 85:break;default:{k=m;break a}}break}case 34:{switch(r<<24>>24){case 52:case 85:break;default:{k=m;break a}}break}case 52:{if(!p){k=m;break a}break}default:{k=m;break a}}if((k|0)<(m|0)){i=l;h=q;j=(a[o>>0]|0)+(((a[f+(l*176|0)+98>>0]|0)>0)<<31>>31)|0;break}if((k|0)==(m|0)){u=(a[o>>0]|0)+(((a[f+(l*176|0)+98>>0]|0)>0)<<31>>31)|0;v=(u|0)<(j|0);i=v?l:i;h=v?q:h;k=m;j=v?u:j}else k=m}else k=m;while(0);q=q+1|0;m=k}if((i|0)>-1){a[s>>0]=0;a[f+(i*176|0)+99>>0]=-1;a[f+(t*176|0)+72+h>>0]=1;a[f+(i*176|0)+72>>0]=1;a[f+(i*176|0)+52>>0]=0;a[f+(t*176|0)+52+h>>0]=0;v=f+(t*176|0)+93|0;a[v>>0]=(a[v>>0]|0)+-1<<24>>24;v=f+(i*176|0)+93|0;a[v>>0]=(a[v>>0]|0)+-1<<24>>24;c[g>>2]=(c[g>>2]|0)+1}}}while(0);t=t+1|0}return 0}function jn(b,f,g){b=b|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=0;while(1){if((p|0)>=(b|0))break;n=f+(p*176|0)+99|0;if(((((a[n>>0]|0)==1?lp(86597,d[f+(p*176|0)+6>>0]|0,3)|0:0)?(a[f+(p*176|0)+92>>0]|0)==3:0)?(o=f+(p*176|0)+93|0,(a[o>>0]|0)==3):0)?(d[f+(p*176|0)+100>>0]|0)<2:0){l=-1;m=0;j=0;i=0;h=0;while(1){if((m|0)>=3){k=0;break}k=e[f+(p*176|0)+8+(m<<1)>>1]|0;if(a[f+(k*176|0)+99>>0]|0){k=1;break}if((a[f+(k*176|0)+6>>0]|0)==7){if((a[f+(k*176|0)+92>>0]|0)>3){k=1;break}if((a[f+(k*176|0)+93>>0]|0)>3){k=1;break}q=(l|0)<0;l=q?k:l;j=q?m:j;i=(a[f+(k*176|0)+94>>0]|0)+i+(a[f+(k*176|0)+95>>0]|0)+(a[f+(k*176|0)+96>>0]|0)+(a[f+(k*176|0)+97>>0]|0)|0;h=h+1|0}m=m+1|0}if((l|0)>-1&(((i|0)<1|((h|0)!=2|k))^1)){a[n>>0]=0;a[f+(l*176|0)+99>>0]=1;a[f+(p*176|0)+72+j>>0]=2;i=a[f+(l*176|0)+92>>0]|0;h=0;while(1){if((h|0)>=(i|0))break;if((p|0)==(e[f+(l*176|0)+8+(h<<1)>>1]|0))break;h=h+1|0}a[f+(l*176|0)+72+h>>0]=2;a[o>>0]=(a[o>>0]|0)+1<<24>>24;q=f+(l*176|0)+93|0;a[q>>0]=(a[q>>0]|0)+1<<24>>24;c[g>>2]=(c[g>>2]|0)+1}}p=p+1|0}return 0} -function kn(b,f,g,h){b=b|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;T=i;i=i+32|0;Q=T+8|0;R=T+4|0;S=T;l=T+12|0;c[S>>2]=0;if(h|0){hn(b,f,S)|0;jn(b,f,S)|0}if(!(c[22876]|0)){k=86600;h=0;while(1){j=op(k,59)|0;if(!j)break;v=j-k|0;ir(l|0,k|0,v|0)|0;a[l+v>>0]=0;a[92347+h>>0]=$n(l)|0;k=j+1|0;h=h+1|0}c[22877]=h;c[22878]=$n(86650)|0;v=($n(86667)|0)&255;u=c[22877]|0;c[22877]=u+1;a[92347+u>>0]=v;u=($n(86687)|0)&255;v=c[22877]|0;c[22877]=v+1;a[92347+v>>0]=u;c[22876]=h}h=c[22878]|0;j=0;while(1){if((j|0)>=(b|0)){h=0;v=0;break}if((((((((a[f+(j*176|0)+92>>0]|0)==1?(m=f+(j*176|0)+99|0,n=a[m>>0]|0,v=n<<24>>24,((n<<24>>24>-1?v:0-v|0)|0)==1):0)?(d[f+(j*176|0)+100>>0]|0)<2:0)?(a[f+(j*176|0)+72>>0]|0)==1:0)?(h|0)==(d[f+(j*176|0)+6>>0]|0):0)?(o=e[f+(j*176|0)+8>>1]|0,(h|0)!=(d[f+(o*176|0)+6>>0]|0)):0)?(a[f+(j*176|0)+94>>0]|0)==(0-((a[f+(j*176|0)+95>>0]|0)+(a[f+(j*176|0)+96>>0]|0)+(a[f+(j*176|0)+97>>0]|0))|0):0)?(a[f+(o*176|0)+94>>0]|0)==(0-((a[f+(o*176|0)+95>>0]|0)+(a[f+(o*176|0)+96>>0]|0)+(a[f+(o*176|0)+97>>0]|0))|0):0){v=f+(o*176|0)+99|0;a[v>>0]=(d[v>>0]|0)+(n&255);a[m>>0]=0}j=j+1|0}while(1){if((v|0)>=(b|0))break;u=f+(v*176|0)+99|0;do if(((((a[u>>0]|0)==1?(d[f+(v*176|0)+100>>0]|0)<2:0)?(D=f+(v*176|0)+93|0,E=f+(v*176|0)+92|0,(a[D>>0]|0)!=(a[E>>0]|0)):0)?(w=f+(v*176|0)+6|0,x=d[w>>0]|0,(lp(92347,x,c[22876]|0)|0)!=0):0)?(t=ao(x,1,0)|0,(t|0)==((a[f+(v*176|0)+94>>0]|0)+(a[D>>0]|0)+(a[f+(v*176|0)+95>>0]|0)+(a[f+(v*176|0)+96>>0]|0)+(a[f+(v*176|0)+97>>0]|0)|0)):0){j=a[E>>0]|0;if(j<<24>>24==1?(y=f+(v*176|0)+72|0,(a[y>>0]|0)==2):0){h=e[f+(v*176|0)+8>>1]|0;o=f+(h*176|0)+92|0;j=0;a:while(1){if((j|0)>=(a[o>>0]|0)){M=71;break}k=e[f+(h*176|0)+8+(j<<1)>>1]|0;do if((((a[f+(k*176|0)+92>>0]|0)==1?(z=f+(k*176|0)+99|0,(a[z>>0]|0)==-1):0)?(A=a[f+(k*176|0)+6>>0]|0,A<<24>>24==(a[w>>0]|0)):0)?(d[f+(k*176|0)+100>>0]|0)<2:0){l=f+(k*176|0)+72|0;if((a[l>>0]|0)!=1)break;t=ao(A&255,-1,0)|0;m=f+(k*176|0)+93|0;if((t|0)==((a[f+(k*176|0)+94>>0]|0)+(a[m>>0]|0)+(a[f+(k*176|0)+95>>0]|0)+(a[f+(k*176|0)+96>>0]|0)+(a[f+(k*176|0)+97>>0]|0)|0)){p=z;n=l;break a}}while(0);j=j+1|0}if((M|0)==71){M=0;c[R>>2]=j;break}c[R>>2]=j;l=a[o>>0]|0;k=0;while(1){if((k|0)>=(l|0))break;if((v|0)==(e[f+(h*176|0)+8+(k<<1)>>1]|0))break;else k=k+1|0}c[Q>>2]=k;a[p>>0]=0;a[u>>0]=0;a[f+(h*176|0)+72+k>>0]=1;a[y>>0]=1;a[D>>0]=(a[D>>0]|0)+-1<<24>>24;a[f+(h*176|0)+72+j>>0]=2;a[n>>0]=2;a[m>>0]=(a[m>>0]|0)+1<<24>>24;c[S>>2]=(c[S>>2]|0)+1;break}o=j<<24>>24;n=c[22878]|0;l=-1;m=0;j=0;while(1){if((m|0)>=(o|0)){t=l;break}k=e[f+(v*176|0)+8+(m<<1)>>1]|0;if((d[f+(k*176|0)+6>>0]|0)==(n|0)){if((a[f+(k*176|0)+93>>0]|0)!=1){t=l;break}if((d[f+(k*176|0)+100>>0]|0)>=2){t=l;break}k=l;j=j+1|0}else{t=(a[f+(v*176|0)+72+m>>0]|0)==2;h=t?k:h;k=t?m:l}l=k;m=m+1|0}if((t|0)>-1&(j+1|0)==(o|0)){s=f+(h*176|0)+92|0;j=0;while(1){if((j|0)>=(a[s>>0]|0)){M=72;break}p=e[f+(h*176|0)+8+(j<<1)>>1]|0;n=f+(p*176|0)+99|0;if((((a[n>>0]|0)==-1?(B=a[f+(p*176|0)+6>>0]|0,B<<24>>24==(a[w>>0]|0)):0)?(d[f+(p*176|0)+100>>0]|0)<2:0)?(r=ao(B&255,-1,0)|0,C=f+(p*176|0)+93|0,(r|0)==((a[f+(p*176|0)+94>>0]|0)+(a[C>>0]|0)+(a[f+(p*176|0)+95>>0]|0)+(a[f+(p*176|0)+96>>0]|0)+(a[f+(p*176|0)+97>>0]|0)|0)):0){r=a[f+(p*176|0)+92>>0]|0;o=c[22878]|0;m=-1;q=0;k=0;while(1){if((q|0)>=(r|0))break;l=e[f+(p*176|0)+8+(q<<1)>>1]|0;if((d[f+(l*176|0)+6>>0]|0)!=(o|0)){if((h|0)!=(l|0))break;if((a[f+(p*176|0)+72+q>>0]|0)==1)m=q;else break}else{if((a[f+(l*176|0)+93>>0]|0)!=1)break;if((d[f+(l*176|0)+100>>0]|0)>=2)break;k=k+1|0}q=q+1|0}if(((m>>>31^1)+k|0)==(r|0)){o=C;break}}j=j+1|0}if((M|0)==72){M=0;c[R>>2]=j;break}c[R>>2]=j;l=a[s>>0]|0;k=0;while(1){if((k|0)>=(l|0))break;if((v|0)==(e[f+(h*176|0)+8+(k<<1)>>1]|0))break;else k=k+1|0}c[Q>>2]=k;a[n>>0]=0;a[u>>0]=0;a[f+(h*176|0)+72+k>>0]=1;a[f+(v*176|0)+72+t>>0]=1;a[D>>0]=(a[D>>0]|0)+-1<<24>>24;a[f+(h*176|0)+72+j>>0]=2;a[f+(p*176|0)+72+m>>0]=2;a[o>>0]=(a[o>>0]|0)+1<<24>>24;c[S>>2]=(c[S>>2]|0)+1}}while(0);v=v+1|0}t=(g|0)==0;u=0;while(1){if((u|0)>=(b|0)){j=0;break}b:do if((((((((((((a[f+(u*176|0)+92>>0]|0)==1?(F=f+(u*176|0)+99|0,(a[F>>0]|0)==-1):0)?(d[f+(u*176|0)+100>>0]|0)<2:0)?(a[f+(u*176|0)+94>>0]|0)==(0-((a[f+(u*176|0)+95>>0]|0)+(a[f+(u*176|0)+96>>0]|0)+(a[f+(u*176|0)+97>>0]|0))|0):0)?(G=f+(u*176|0)+72|0,(a[G>>0]|0)==1):0)?(H=c[22876]|0,I=H+-4|0,lp(92351,d[f+(u*176|0)+6>>0]|0,I)|0):0)?(J=e[f+(u*176|0)+8>>1]|0,K=f+(J*176|0)+99|0,(a[K>>0]|0)==2):0)?lp(92352,d[f+(J*176|0)+6>>0]|0,H+-5|0)|0:0)?(a[f+(J*176|0)+92>>0]|0)==4:0)?(d[f+(J*176|0)+100>>0]|0)<2:0)?(L=f+(J*176|0)+93|0,(a[L>>0]|0)==4):0)?(a[f+(J*176|0)+94>>0]|0)==(0-((a[f+(J*176|0)+95>>0]|0)+(a[f+(J*176|0)+96>>0]|0)+(a[f+(J*176|0)+97>>0]|0))|0):0){h=0;c:while(1){if((h|0)>=4){M=108;break}j=e[f+(J*176|0)+8+(h<<1)>>1]|0;do if((j|0)!=(u|0)){if((a[f+(j*176|0)+92>>0]|0)!=1)break;k=f+(j*176|0)+99|0;if((a[k>>0]|0)!=-1)break;if(!(lp(92351,d[f+(j*176|0)+6>>0]|0,I)|0))break;if((d[f+(j*176|0)+100>>0]|0)>=2)break;if((a[f+(j*176|0)+94>>0]|0)!=(0-((a[f+(j*176|0)+95>>0]|0)+(a[f+(j*176|0)+96>>0]|0)+(a[f+(j*176|0)+97>>0]|0))|0))break;l=f+(j*176|0)+72|0;if((a[l>>0]|0)==1){s=k;break c}}while(0);h=h+1|0}if((M|0)==108){M=0;c[R>>2]=h;break}c[R>>2]=h;k=0;while(1){if((k|0)>=4)break;if((u|0)==(e[f+(J*176|0)+8+(k<<1)>>1]|0))break;else k=k+1|0}c[Q>>2]=k;r=f+(J*176|0)+72+k|0;n=f+(J*176|0)+52+k|0;o=f+(u*176|0)+52|0;p=f+(u*176|0)+93|0;q=f+(J*176|0)+72+h|0;k=f+(J*176|0)+52+h|0;m=f+(j*176|0)+52|0;h=f+(j*176|0)+93|0;j=0;while(1){switch(j|0){case 2:break b;case 0:{a[F>>0]=(a[F>>0]|0)+1<<24>>24;a[r>>0]=2;a[G>>0]=2;a[n>>0]=0;a[o>>0]=0;a[p>>0]=(a[p>>0]|0)+1<<24>>24;a[L>>0]=(a[L>>0]|0)+1<<24>>24;if(!t)a[K>>0]=(a[K>>0]|0)+-1<<24>>24;c[S>>2]=(c[S>>2]|0)+1;break}case 1:{a[s>>0]=(a[s>>0]|0)+1<<24>>24;a[q>>0]=2;a[l>>0]=2;a[k>>0]=0;a[m>>0]=0;a[h>>0]=(a[h>>0]|0)+1<<24>>24;a[L>>0]=(a[L>>0]|0)+1<<24>>24;if(!t)a[K>>0]=(a[K>>0]|0)+-1<<24>>24;c[S>>2]=(c[S>>2]|0)+1;break}default:{}}j=j+1|0}}while(0);u=u+1|0}while(1){if((j|0)>=(b|0))break;h=f+(j*176|0)+100|0;if(((a[h>>0]|0)==2?(N=gn(f,j,Q,R)|0,(N|0)>-1):0)?(O=(c[Q>>2]|0)+(f+(j*176|0)+72)|0,P=a[O>>0]|0,(P&255)<3):0){a[O>>0]=P+1<<24>>24;M=f+(j*176|0)+93|0;a[M>>0]=(a[M>>0]|0)+1<<24>>24;M=(c[R>>2]|0)+(f+(N*176|0)+72)|0;a[M>>0]=(a[M>>0]|0)+1<<24>>24;M=f+(N*176|0)+93|0;a[M>>0]=(a[M>>0]|0)+1<<24>>24;a[h>>0]=0;a[f+(N*176|0)+100>>0]=0}j=j+1|0}b=ln(b,f)|0;i=T;return (c[S>>2]|0)+b|0}function ln(f,g){f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0;Da=i;i=i+48|0;l=Da+40|0;Ba=Da+24|0;za=Da+12|0;Aa=Da;if(!(c[22879]|0)){k=86621;h=0;while(1){j=op(k,59)|0;if(!j)break;T=j-k|0;ir(l|0,k|0,T|0)|0;a[l+T>>0]=0;a[92357+h>>0]=$n(l)|0;k=j+1|0;h=h+1|0}a[92357+h>>0]=0;c[22879]=h;q=g;r=0;n=0;o=0;p=0;s=0;m=0;t=0;w=0;x=0}else{q=g;r=0;n=0;o=0;p=0;s=0;m=0;t=0;w=0;x=0}while(1){if((r|0)>=(f|0)){k=s;l=t;q=w;r=x;break}j=a[q+99>>0]|0;l=j<<24>>24==1;a:do switch(j<<24>>24){case 1:case -1:{h=lp(92357,d[q+6>>0]|0,c[22879]|0)|0;if(!h){h=s;k=t;l=w;j=x}else{k=h-92357|0;if((k|0)>7)if(j<<24>>24>0){p=p+1|0;h=s;k=t;l=w;j=x;break a}else{o=o+1|0;h=s;k=t;l=w;j=x;break a}h=j<<24>>24>0;if((k|0)>3)if(h){h=s;k=t;l=w+1|0;j=x;break a}else{h=s;k=t+1|0;l=w;j=x;break a}h=h&1;m=h+m|0;h=(h^1)+s|0;if(l&(k|0)>0?(u=b[q+92>>1]|0,(u&255)<<24>>24==4):0)j=(u&-256)<<16>>16==1024;else j=0;k=t;l=w;j=(j&1)+x|0}break}case 0:{T=b[q+94>>1]|0;if((((T&65535)<<24>>24)+(a[q+93>>0]|0)+(((T&65535)>>>8&65535)<<24>>24)+(a[q+96>>0]|0)+(a[q+97>>0]|0)|0)==2?(v=q+6|0,(ao(d[v>>0]|0,0,0)|0)==4):0){n=((lp(92365,d[v>>0]|0,2)|0)!=0&1)+n|0;h=s;k=t;l=w;j=x}else{h=s;k=t;l=w;j=x}break}default:{h=s;k=t;l=w;j=x}}while(0);q=q+176|0;r=r+1|0;s=h;t=k;w=l;x=j}h=p+n+o+m+k+q+l|0;b:do if(!h)h=0;else{J=za+4|0;K=Ba+4|0;L=Aa+4|0;M=Ba+4|0;N=Aa+8|0;O=za+4|0;P=Ba+8|0;Q=za+8|0;R=Aa+4|0;S=Ba+4|0;T=za+4|0;j=h;G=q;y=r;h=0;I=1;while(1){c:do switch(I|0){case 19:break b;case 1:{x=0;while(1){if(!((l|0)>0&((m|0)>0&(x|0)<(f|0)))){w=0;v=l;q=y;break}w=g+(x*176|0)+99|0;if((((a[w>>0]|0)==1?(to(g,x)|0)==3:0)?(vo(g,x)|0)==4:0)?(lp(92357,d[g+(x*176|0)+6>>0]|0,4)|0)!=0:0){u=g+(x*176|0)+92|0;v=0;s=0;r=0;q=0;while(1){if((v|0)>=(a[u>>0]|0))break;t=e[g+(x*176|0)+8+(v<<1)>>1]|0;d:do if(((to(g,t)|0)==1?(qo(g,t)|0)==0:0)?(lp(92361,d[g+(t*176|0)+6>>0]|0,4)|0)!=0:0){do if((a[g+(x*176|0)+72+v>>0]|0)==1){if((a[g+(t*176|0)+99>>0]|0)!=-1)break;c[Ba+(r<<2)>>2]=v;r=r+1|0;break d}while(0);do if((a[g+(t*176|0)+72>>0]|0)==2){if(a[g+(t*176|0)+99>>0]|0)break;s=s+1|0;break d}while(0);q=q+1|0}while(0);v=v+1|0}if(!((r|0)<1|(s|0)<1|(q|0)!=0)?($=mn(g,x,Ba,r)|0,($|0)>-1):0){H=e[g+(x*176|0)+8+($<<1)>>1]|0;F=g+(H*176|0)+8|0;F=(mo(F,x&65535,a[g+(H*176|0)+92>>0]|0)|0)-F>>1;E=g+(x*176|0)+72+$|0;a[E>>0]=(a[E>>0]|0)+1<<24>>24;F=g+(H*176|0)+72+F|0;a[F>>0]=(a[F>>0]|0)+1<<24>>24;F=g+(x*176|0)+93|0;a[F>>0]=(a[F>>0]|0)+1<<24>>24;F=g+(H*176|0)+93|0;a[F>>0]=(a[F>>0]|0)+1<<24>>24;a[w>>0]=(a[w>>0]|0)+-1<<24>>24;F=g+(H*176|0)+99|0;a[F>>0]=(a[F>>0]|0)+1<<24>>24;a[g+(x*176|0)+100>>0]=0;a[g+(H*176|0)+100>>0]=0;j=j+-2|0;m=m+-1|0;l=l+-1|0;h=h+1|0}}x=x+1|0}while(1){if(!((v|0)>0&((q|0)>0&(w|0)<(f|0)))){l=v;H=q;break c}u=g+(w*176|0)+99|0;if((((a[u>>0]|0)==1?(to(g,w)|0)==4:0)?(vo(g,w)|0)==4:0)?(lp(92358,d[g+(w*176|0)+6>>0]|0,3)|0)!=0:0){s=g+(w*176|0)+92|0;t=0;l=0;while(1){if((t|0)>=(a[s>>0]|0))break;r=e[g+(w*176|0)+8+(t<<1)>>1]|0;if(((((to(g,r)|0)==1?(qo(g,r)|0)==0:0)?(lp(92361,d[g+(r*176|0)+6>>0]|0,4)|0)!=0:0)?(a[g+(w*176|0)+72+t>>0]|0)==1:0)?(a[g+(r*176|0)+99>>0]|0)==-1:0){c[Ba+(l<<2)>>2]=t;l=l+1|0}t=t+1|0}if((l|0)>0?(pa=mn(g,w,Ba,l)|0,(pa|0)>-1):0){l=e[g+(w*176|0)+8+(pa<<1)>>1]|0;H=g+(l*176|0)+8|0;H=(mo(H,w&65535,a[g+(l*176|0)+92>>0]|0)|0)-H>>1;F=g+(w*176|0)+72+pa|0;a[F>>0]=(a[F>>0]|0)+1<<24>>24;H=g+(l*176|0)+72+H|0;a[H>>0]=(a[H>>0]|0)+1<<24>>24;H=g+(w*176|0)+93|0;a[H>>0]=(a[H>>0]|0)+1<<24>>24;H=g+(l*176|0)+93|0;a[H>>0]=(a[H>>0]|0)+1<<24>>24;a[u>>0]=(a[u>>0]|0)+-1<<24>>24;H=g+(l*176|0)+99|0;a[H>>0]=(a[H>>0]|0)+1<<24>>24;a[g+(w*176|0)+100>>0]=0;a[g+(l*176|0)+100>>0]=0;j=j+-2|0;m=m+-1|0;l=v+-1|0;q=q+-1|0;h=h+1|0}else l=v}else l=v;w=w+1|0;v=l}}default:H=y}while(0);e:do if((I+-2|0)>>>0<8){x=(I|0)==2;y=(I|0)==3;z=(I|0)==4;A=(I|0)==5;B=(I|0)==6;C=(I|0)==7;D=(I|0)==8;E=(I|0)==9;F=0;w=G;while(1){if(!((j|0)>0&(F|0)<(f|0))){F=l;l=w;break e}v=g+(F*176|0)+99|0;f:do if(((((((a[v>>0]|0)==0?(to(g,F)|0)==1:0)?(vo(g,F)|0)==2:0)?(qo(g,F)|0)==0:0)?(lp(92361,d[g+(F*176|0)+6>>0]|0,4)|0)!=0:0)?(qa=wo(g,F)|0,(qa|0)>-1):0)?(d[g+(F*176|0)+72+qa>>0]|0)<4:0){t=b[g+(F*176|0)+8+(qa<<1)>>1]|0;u=t&65535;do if((x&(n|0)>0?(a[g+(u*176|0)+99>>0]|0)==0:0)?(to(g,u)|0)==2:0){if((vo(g,u)|0)!=3)break;if(qo(g,u)|0)break;if(!(lp(92357,d[g+(u*176|0)+6>>0]|0,4)|0))break;q=xo(g,u,F)|0;if((q|0)<=-1)break;s=g+(u*176|0)+72+q|0;if((d[s>>0]|0)>=4)break;q=e[g+(u*176|0)+8+(q<<1)>>1]|0;if(a[g+(q*176|0)+99>>0]|0)break;if((a[g+(q*176|0)+92>>0]|0)!=2)break;r=g+(q*176|0)+93|0;if((a[r>>0]|0)!=2)break;if(qo(g,q)|0)break;if(!(lp(92365,d[g+(q*176|0)+6>>0]|0,2)|0))break;G=(b[g+(q*176|0)+8>>1]|0)!=t<<16>>16&1;a[g+(u*176|0)+93>>0]=5;a[r>>0]=4;a[s>>0]=3;a[g+(q*176|0)+72+G>>0]=3;a[g+(q*176|0)+100>>0]=0;j=j+-1|0;n=n+-1|0;q=w;h=h+1|0;break f}while(0);if(((o|0)>0&(y&(w|0)>0)?(ra=g+(u*176|0)+99|0,(a[ra>>0]|0)==1):0)?(to(g,u)|0)==2:0){if((vo(g,u)|0)!=3){q=w;break}if(qo(g,u)|0){q=w;break}if(!(lp(92361,d[g+(u*176|0)+6>>0]|0,4)|0)){q=w;break}q=xo(g,u,F)|0;if((q|0)<=-1){q=w;break}s=g+(u*176|0)+72+q|0;if((d[s>>0]|0)>=4){q=w;break}q=e[g+(u*176|0)+8+(q<<1)>>1]|0;r=g+(q*176|0)+99|0;if((a[r>>0]|0)!=-1){q=w;break}if((to(g,q)|0)>=4){q=w;break}G=vo(g,q)|0;if(((a[g+(q*176|0)+94>>0]|0)+G+(a[g+(q*176|0)+95>>0]|0)+(a[g+(q*176|0)+96>>0]|0)+(a[g+(q*176|0)+97>>0]|0)|0)!=3){q=w;break}if(!(lp(92365,d[g+(q*176|0)+6>>0]|0,2)|0)){q=w;break}G=(b[g+(q*176|0)+8>>1]|0)!=t<<16>>16&1;a[ra>>0]=(a[ra>>0]|0)+-1<<24>>24;a[r>>0]=(a[r>>0]|0)+1<<24>>24;v=g+(u*176|0)+93|0;a[v>>0]=(d[v>>0]|0)+1;v=g+(q*176|0)+93|0;a[v>>0]=(d[v>>0]|0)+1;a[s>>0]=2;a[g+(q*176|0)+72+G>>0]=2;j=j+-2|0;o=o+-1|0;q=w+-1|0;h=h+1|0}else q=w}else Ca=106;while(0);g:do if((Ca|0)==106){Ca=0;if((((((((l+k|0)>0&(a[v>>0]|0)==-1?(m+p+w|0)>0:0)?(to(g,F)|0)==1:0)?(vo(g,F)|0)==1:0)?(qo(g,F)|0)==0:0)?lp(92361,d[g+(F*176|0)+6>>0]|0,4)|0:0)?(sa=wo(g,F)|0,(sa|0)>-1):0)?(ta=g+(F*176|0)+72+sa|0,(d[ta>>0]|0)<4):0){t=b[g+(F*176|0)+8+(sa<<1)>>1]|0;u=t&65535;r=(l|0)>0;do if((m|0)>0&(z&r)){q=g+(u*176|0)+99|0;if((a[q>>0]|0)!=1)break;if((to(g,u)|0)>=4)break;if((vo(g,u)|0)!=4)break;if(qo(g,u)|0)break;if(!(lp(92357,d[g+(u*176|0)+6>>0]|0,4)|0))break;G=g+(u*176|0)+8|0;G=(mo(G,F&65535,a[g+(u*176|0)+92>>0]|0)|0)-G>>1;a[v>>0]=(a[v>>0]|0)+1<<24>>24;a[q>>0]=(a[q>>0]|0)+-1<<24>>24;q=g+(F*176|0)+93|0;a[q>>0]=(a[q>>0]|0)+1<<24>>24;q=g+(u*176|0)+93|0;a[q>>0]=(a[q>>0]|0)+1<<24>>24;a[ta>>0]=(a[ta>>0]|0)+1<<24>>24;q=g+(u*176|0)+72+G|0;a[q>>0]=(a[q>>0]|0)+1<<24>>24;j=j+-2|0;m=m+-1|0;l=l+-1|0;q=w;h=h+1|0;break g}while(0);do if((w|0)>0&(A&r)){q=g+(u*176|0)+99|0;if((a[q>>0]|0)!=1)break;if((to(g,u)|0)>=4)break;if((vo(g,u)|0)!=3)break;if(qo(g,u)|0)break;if(!(lp(92361,d[g+(u*176|0)+6>>0]|0,4)|0))break;G=g+(u*176|0)+8|0;G=(mo(G,F&65535,a[g+(u*176|0)+92>>0]|0)|0)-G>>1;a[v>>0]=(a[v>>0]|0)+1<<24>>24;a[q>>0]=(a[q>>0]|0)+-1<<24>>24;q=g+(F*176|0)+93|0;a[q>>0]=(a[q>>0]|0)+1<<24>>24;q=g+(u*176|0)+93|0;a[q>>0]=(a[q>>0]|0)+1<<24>>24;a[ta>>0]=(a[ta>>0]|0)+1<<24>>24;q=g+(u*176|0)+72+G|0;a[q>>0]=(a[q>>0]|0)+1<<24>>24;j=j+-2|0;l=l+-1|0;q=w+-1|0;h=h+1|0;break g}while(0);if(!((p|0)>0&(B&r))){q=w;break}if(a[g+(u*176|0)+99>>0]|0){q=w;break}if((to(g,u)|0)!=2){q=w;break}if((vo(g,u)|0)!=2){q=w;break}if(qo(g,u)|0){q=w;break}if(!(lp(92361,d[g+(u*176|0)+6>>0]|0,4)|0)){q=w;break}q=xo(g,u,F)|0;if((q|0)<=-1){q=w;break}s=g+(u*176|0)+72+q|0;if((d[s>>0]|0)>=4){q=w;break}q=e[g+(u*176|0)+8+(q<<1)>>1]|0;r=g+(q*176|0)+99|0;if((a[r>>0]|0)!=1){q=w;break}if((to(g,q)|0)>=4){q=w;break}G=vo(g,q)|0;if(((a[g+(q*176|0)+94>>0]|0)+G+(a[g+(q*176|0)+95>>0]|0)+(a[g+(q*176|0)+96>>0]|0)+(a[g+(q*176|0)+97>>0]|0)|0)!=3){q=w;break}if(!(lp(92365,d[g+(q*176|0)+6>>0]|0,2)|0)){q=w;break}G=g+(q*176|0)+8|0;G=(mo(G,t,a[g+(q*176|0)+92>>0]|0)|0)-G>>1;t=g+(u*176|0)+8|0;t=(mo(t,F&65535,a[g+(u*176|0)+92>>0]|0)|0)-t>>1;a[v>>0]=(a[v>>0]|0)+1<<24>>24;a[r>>0]=(a[r>>0]|0)+-1<<24>>24;v=g+(F*176|0)+93|0;a[v>>0]=(d[v>>0]|0)+1;v=g+(u*176|0)+93|0;a[v>>0]=(d[v>>0]|0)+2;v=g+(q*176|0)+93|0;a[v>>0]=(d[v>>0]|0)+1;a[ta>>0]=2;a[g+(u*176|0)+72+t>>0]=2;a[s>>0]=2;a[g+(q*176|0)+72+G>>0]=2;j=j+-2|0;p=p+-1|0;l=l+-1|0;q=w;h=h+1|0;break}if(((((((k|0)>0&(a[v>>0]|0)==-1?(m+p+w|0)>0:0)?(to(g,F)|0)==1:0)?(G=vo(g,F)|0,((a[g+(F*176|0)+94>>0]|0)+G+(a[g+(F*176|0)+95>>0]|0)+(a[g+(F*176|0)+96>>0]|0)+(a[g+(F*176|0)+97>>0]|0)|0)==2):0)?(lp(92357,d[g+(F*176|0)+6>>0]|0,4)|0)!=0:0)?(ua=wo(g,F)|0,(ua|0)>-1):0)?(va=g+(F*176|0)+72|0,(d[g+(F*176|0)+72+ua>>0]|0)<4):0){t=e[g+(F*176|0)+8>>1]|0;do if(C&(m|0)>0){q=g+(t*176|0)+99|0;if((a[q>>0]|0)!=1)break;if((to(g,t)|0)>=4)break;if((vo(g,t)|0)!=4)break;if(qo(g,t)|0)break;if(!(lp(92357,d[g+(t*176|0)+6>>0]|0,4)|0))break;G=g+(t*176|0)+8|0;G=(mo(G,F&65535,a[g+(t*176|0)+92>>0]|0)|0)-G>>1;a[v>>0]=(a[v>>0]|0)+1<<24>>24;a[q>>0]=(a[q>>0]|0)+-1<<24>>24;q=g+(F*176|0)+93|0;a[q>>0]=(a[q>>0]|0)+1<<24>>24;q=g+(t*176|0)+93|0;a[q>>0]=(a[q>>0]|0)+1<<24>>24;a[va>>0]=(a[va>>0]|0)+1<<24>>24;q=g+(t*176|0)+72+G|0;a[q>>0]=(a[q>>0]|0)+1<<24>>24;j=j+-2|0;k=k+-1|0;m=m+-1|0;q=w;h=h+1|0;break g}while(0);do if(D&(w|0)>0){q=g+(t*176|0)+99|0;if((a[q>>0]|0)!=1)break;if((to(g,t)|0)!=2)break;if((vo(g,t)|0)!=3)break;if(qo(g,t)|0)break;if(!(lp(92361,d[g+(t*176|0)+6>>0]|0,4)|0))break;G=g+(t*176|0)+8|0;G=(mo(G,F&65535,a[g+(t*176|0)+92>>0]|0)|0)-G>>1;a[v>>0]=(a[v>>0]|0)+1<<24>>24;a[q>>0]=(a[q>>0]|0)+-1<<24>>24;q=g+(F*176|0)+93|0;a[q>>0]=(a[q>>0]|0)+1<<24>>24;q=g+(t*176|0)+93|0;a[q>>0]=(a[q>>0]|0)+1<<24>>24;a[va>>0]=(a[va>>0]|0)+1<<24>>24;q=g+(t*176|0)+72+G|0;a[q>>0]=(a[q>>0]|0)+1<<24>>24;j=j+-2|0;k=k+-1|0;q=w+-1|0;h=h+1|0;break g}while(0);if(!(E&(p|0)>0)){q=w;break}q=g+(t*176|0)+99|0;if((a[q>>0]|0)!=1){q=w;break}r=g+(t*176|0)+92|0;if((a[r>>0]|0)!=2){q=w;break}s=g+(t*176|0)+93|0;if((a[s>>0]|0)!=3){q=w;break}if(qo(g,t)|0){q=w;break}if(!(lp(92365,d[g+(t*176|0)+6>>0]|0,2)|0)){q=w;break}G=g+(t*176|0)+8|0;G=(mo(G,F&65535,a[r>>0]|0)|0)-G>>1;a[v>>0]=(a[v>>0]|0)+1<<24>>24;a[q>>0]=(a[q>>0]|0)+-1<<24>>24;q=g+(F*176|0)+93|0;a[q>>0]=(a[q>>0]|0)+1<<24>>24;a[s>>0]=(a[s>>0]|0)+1<<24>>24;a[va>>0]=(a[va>>0]|0)+1<<24>>24;q=g+(t*176|0)+72+G|0;a[q>>0]=(a[q>>0]|0)+1<<24>>24;j=j+-2|0;p=p+-1|0;k=k+-1|0;q=w;h=h+1|0}else q=w}while(0);F=F+1|0;w=q}}else{F=l;l=G}while(0);h:do if((I+-10|0)>>>0<6){y=(I|0)==10;z=(I|0)==11;A=(I|0)==12;B=(I|0)==13;C=(I|0)==14;D=(I|0)==15;E=0;x=l;while(1){if(!((j|0)>0&(E|0)<(f|0))){G=x;break h}w=g+(E*176|0)+99|0;l=(k+o|0)>0;i:do if((((l&((x+m|0)>0&(a[w>>0]|0)==1)?(to(g,E)|0)<5:0)?(vo(g,E)|0)==4:0)?(qo(g,E)|0)==0:0)?(lp(92357,d[g+(E*176|0)+6>>0]|0,4)|0)!=0:0){v=(m|0)>0;u=(o|0)>0;do if(u&(y&v)){s=a[g+(E*176|0)+92>>0]|0;t=0;q=0;l=-1;while(1){if((t|0)>=(s|0))break;r=e[g+(E*176|0)+8+(t<<1)>>1]|0;do if((a[g+(r*176|0)+99>>0]|0)==-1){if((a[g+(r*176|0)+92>>0]|0)>=4)break;if(((a[g+(r*176|0)+94>>0]|0)+(a[g+(r*176|0)+93>>0]|0)+(a[g+(r*176|0)+95>>0]|0)+(a[g+(r*176|0)+96>>0]|0)+(a[g+(r*176|0)+97>>0]|0)|0)!=3)break;if((a[g+(E*176|0)+72+t>>0]|0)!=1)break;G=(lp(92365,d[g+(r*176|0)+6>>0]|0,2)|0)==0;q=(G&1^1)+q|0;l=G?l:t}while(0);t=t+1|0}if(((q|0)==1?(wa=g+(E*176|0)+72+l|0,(d[wa>>0]|0)<4):0)?(xa=e[g+(E*176|0)+8+(l<<1)>>1]|0,(ro(g,E,xa,92357,c[22879]|0)|0)==0):0){if(ro(g,xa,E,92357,c[22879]|0)|0)break;l=g+(xa*176|0)+8|0;l=(mo(l,E&65535,a[g+(xa*176|0)+92>>0]|0)|0)-l>>1;a[w>>0]=(a[w>>0]|0)+-1<<24>>24;G=g+(xa*176|0)+99|0;a[G>>0]=(a[G>>0]|0)+1<<24>>24;G=g+(E*176|0)+93|0;a[G>>0]=(a[G>>0]|0)+1<<24>>24;G=g+(xa*176|0)+93|0;a[G>>0]=(a[G>>0]|0)+1<<24>>24;a[wa>>0]=(a[wa>>0]|0)+1<<24>>24;l=g+(xa*176|0)+72+l|0;a[l>>0]=(a[l>>0]|0)+1<<24>>24;j=j+-2|0;o=o+-1|0;m=m+-1|0;l=x;h=h+1|0;break i}}while(0);do if(u&(z&v)){s=a[g+(E*176|0)+92>>0]|0;t=0;q=0;l=-1;while(1){if((t|0)>=(s|0))break;r=e[g+(E*176|0)+8+(t<<1)>>1]|0;do if((a[g+(r*176|0)+99>>0]|0)==-1){if((a[g+(r*176|0)+92>>0]|0)>=4)break;if(((a[g+(r*176|0)+94>>0]|0)+(a[g+(r*176|0)+93>>0]|0)+(a[g+(r*176|0)+95>>0]|0)+(a[g+(r*176|0)+96>>0]|0)+(a[g+(r*176|0)+97>>0]|0)|0)!=3)break;if((a[g+(E*176|0)+72+t>>0]|0)!=2)break;G=(lp(92365,d[g+(r*176|0)+6>>0]|0,2)|0)==0;q=(G&1^1)+q|0;l=G?l:t}while(0);t=t+1|0}if((q|0)==1?(ya=e[g+(E*176|0)+8+(l<<1)>>1]|0,(ro(g,E,ya,92357,c[22879]|0)|0)==0):0){if(ro(g,ya,E,92357,c[22879]|0)|0)break;G=g+(ya*176|0)+8|0;G=(mo(G,E&65535,a[g+(ya*176|0)+92>>0]|0)|0)-G>>1;a[w>>0]=(a[w>>0]|0)+-1<<24>>24;w=g+(ya*176|0)+99|0;a[w>>0]=(a[w>>0]|0)+1<<24>>24;w=g+(E*176|0)+93|0;a[w>>0]=(a[w>>0]|0)+1<<24>>24;w=g+(ya*176|0)+93|0;a[w>>0]=(a[w>>0]|0)+1<<24>>24;l=g+(E*176|0)+72+l|0;a[l>>0]=(a[l>>0]|0)+1<<24>>24;l=g+(ya*176|0)+72+G|0;a[l>>0]=(a[l>>0]|0)+1<<24>>24;j=j+-2|0;o=o+-1|0;m=m+-1|0;l=x;h=h+1|0;break i}}while(0);if(A&v&(k|0)>0){s=g+(E*176|0)+92|0;t=0;q=0;l=-1;while(1){if((t|0)>=(a[s>>0]|0))break;r=e[g+(E*176|0)+8+(t<<1)>>1]|0;do if((a[g+(r*176|0)+99>>0]|0)==-1){if((to(g,r)|0)>=3)break;G=vo(g,r)|0;if(((a[g+(r*176|0)+94>>0]|0)+G+(a[g+(r*176|0)+95>>0]|0)+(a[g+(r*176|0)+96>>0]|0)+(a[g+(r*176|0)+97>>0]|0)|0)!=2)break;if((a[g+(E*176|0)+72+t>>0]|0)!=1)break;G=(lp(92357,d[g+(r*176|0)+6>>0]|0,4)|0)==0;q=(G&1^1)+q|0;l=G?l:t}while(0);t=t+1|0}if((q|0)==1?(U=e[g+(E*176|0)+8+(l<<1)>>1]|0,(ro(g,E,U,92357,c[22879]|0)|0)==0):0){if(ro(g,U,E,92357,c[22879]|0)|0){l=x;break}G=g+(U*176|0)+8|0;G=(mo(G,E&65535,a[g+(U*176|0)+92>>0]|0)|0)-G>>1;a[w>>0]=(a[w>>0]|0)+-1<<24>>24;w=g+(U*176|0)+99|0;a[w>>0]=(a[w>>0]|0)+1<<24>>24;w=g+(E*176|0)+93|0;a[w>>0]=(a[w>>0]|0)+1<<24>>24;w=g+(U*176|0)+93|0;a[w>>0]=(a[w>>0]|0)+1<<24>>24;l=g+(E*176|0)+72+l|0;a[l>>0]=(a[l>>0]|0)+1<<24>>24;l=g+(U*176|0)+72+G|0;a[l>>0]=(a[l>>0]|0)+1<<24>>24;j=j+-2|0;k=k+-1|0;m=m+-1|0;l=x;h=h+1|0}else l=x}else l=x}else Ca=218;while(0);j:do if((Ca|0)==218){Ca=0;if((((l&((x|0)>0&(a[w>>0]|0)==1)?(to(g,E)|0)<4:0)?(vo(g,E)|0)==3:0)?(qo(g,E)|0)==0:0)?(lp(92361,d[g+(E*176|0)+6>>0]|0,4)|0)!=0:0){u=(o|0)>0;do if(B&u){s=a[g+(E*176|0)+92>>0]|0;t=0;q=0;l=-1;while(1){if((t|0)>=(s|0))break;r=e[g+(E*176|0)+8+(t<<1)>>1]|0;do if((a[g+(r*176|0)+99>>0]|0)==-1){if((a[g+(r*176|0)+92>>0]|0)>=4)break;if(((a[g+(r*176|0)+94>>0]|0)+(a[g+(r*176|0)+93>>0]|0)+(a[g+(r*176|0)+95>>0]|0)+(a[g+(r*176|0)+96>>0]|0)+(a[g+(r*176|0)+97>>0]|0)|0)!=3)break;if((a[g+(E*176|0)+72+t>>0]|0)!=1)break;G=(lp(92365,d[g+(r*176|0)+6>>0]|0,2)|0)==0;q=(G&1^1)+q|0;l=G?l:t}while(0);t=t+1|0}if((q|0)==1?(V=e[g+(E*176|0)+8+(l<<1)>>1]|0,(ro(g,E,V,92357,c[22879]|0)|0)==0):0){if(ro(g,V,E,92357,c[22879]|0)|0)break;G=g+(V*176|0)+8|0;G=(mo(G,E&65535,a[g+(V*176|0)+92>>0]|0)|0)-G>>1;a[w>>0]=(a[w>>0]|0)+-1<<24>>24;w=g+(V*176|0)+99|0;a[w>>0]=(a[w>>0]|0)+1<<24>>24;w=g+(E*176|0)+93|0;a[w>>0]=(a[w>>0]|0)+1<<24>>24;w=g+(V*176|0)+93|0;a[w>>0]=(a[w>>0]|0)+1<<24>>24;l=g+(E*176|0)+72+l|0;a[l>>0]=(a[l>>0]|0)+1<<24>>24;l=g+(V*176|0)+72+G|0;a[l>>0]=(a[l>>0]|0)+1<<24>>24;j=j+-2|0;o=o+-1|0;l=x+-1|0;h=h+1|0;break j}}while(0);do if(C&u){s=a[g+(E*176|0)+92>>0]|0;t=0;l=0;q=-1;while(1){if((t|0)>=(s|0))break;r=e[g+(E*176|0)+8+(t<<1)>>1]|0;do if((a[g+(r*176|0)+99>>0]|0)==-1){if((a[g+(r*176|0)+92>>0]|0)>=4)break;if(((a[g+(r*176|0)+94>>0]|0)+(a[g+(r*176|0)+93>>0]|0)+(a[g+(r*176|0)+95>>0]|0)+(a[g+(r*176|0)+96>>0]|0)+(a[g+(r*176|0)+97>>0]|0)|0)!=3)break;if((a[g+(E*176|0)+72+t>>0]|0)!=2)break;G=(lp(92365,d[g+(r*176|0)+6>>0]|0,2)|0)==0;l=(G&1^1)+l|0;q=G?q:t}while(0);t=t+1|0}if((l|0)==1){l=e[g+(E*176|0)+8+(q<<1)>>1]|0;if(ro(g,E,l,92357,c[22879]|0)|0)break;if(ro(g,l,E,92357,c[22879]|0)|0)break;G=g+(l*176|0)+8|0;G=(mo(G,E&65535,a[g+(l*176|0)+92>>0]|0)|0)-G>>1;a[w>>0]=(a[w>>0]|0)+-1<<24>>24;w=g+(l*176|0)+99|0;a[w>>0]=(a[w>>0]|0)+1<<24>>24;w=g+(E*176|0)+93|0;a[w>>0]=(a[w>>0]|0)+1<<24>>24;w=g+(l*176|0)+93|0;a[w>>0]=(a[w>>0]|0)+1<<24>>24;w=g+(E*176|0)+72+q|0;a[w>>0]=(a[w>>0]|0)+1<<24>>24;l=g+(l*176|0)+72+G|0;a[l>>0]=(a[l>>0]|0)+1<<24>>24;j=j+-2|0;o=o+-1|0;l=x+-1|0;h=h+1|0;break j}}while(0);if(D&(k|0)>0){s=g+(E*176|0)+92|0;t=0;l=0;q=-1;while(1){if((t|0)>=(a[s>>0]|0))break;r=e[g+(E*176|0)+8+(t<<1)>>1]|0;do if((a[g+(r*176|0)+99>>0]|0)==-1){if((to(g,r)|0)>=3)break;G=vo(g,r)|0;if(((a[g+(r*176|0)+94>>0]|0)+G+(a[g+(r*176|0)+95>>0]|0)+(a[g+(r*176|0)+96>>0]|0)+(a[g+(r*176|0)+97>>0]|0)|0)!=2)break;if((a[g+(E*176|0)+72+t>>0]|0)!=1)break;G=(lp(92357,d[g+(r*176|0)+6>>0]|0,4)|0)==0;l=(G&1^1)+l|0;q=G?q:t}while(0);t=t+1|0}if((l|0)==1){l=e[g+(E*176|0)+8+(q<<1)>>1]|0;if(ro(g,E,l,92357,c[22879]|0)|0){l=x;break}if(ro(g,l,E,92357,c[22879]|0)|0){l=x;break}G=g+(l*176|0)+8|0;G=(mo(G,E&65535,a[g+(l*176|0)+92>>0]|0)|0)-G>>1;a[w>>0]=(a[w>>0]|0)+-1<<24>>24;w=g+(l*176|0)+99|0;a[w>>0]=(a[w>>0]|0)+1<<24>>24;w=g+(E*176|0)+93|0;a[w>>0]=(a[w>>0]|0)+1<<24>>24;w=g+(l*176|0)+93|0;a[w>>0]=(a[w>>0]|0)+1<<24>>24;w=g+(E*176|0)+72+q|0;a[w>>0]=(a[w>>0]|0)+1<<24>>24;l=g+(l*176|0)+72+G|0;a[l>>0]=(a[l>>0]|0)+1<<24>>24;j=j+-2|0;k=k+-1|0;l=x+-1|0;h=h+1|0}else l=x}else l=x}else l=x}while(0);E=E+1|0;x=l}}else G=l;while(0);if((I|0)==16&(p|0)>0&(k|0)>0){w=0;while(1){if((w|0)>=(f|0))break;do if(((((((((a[g+(w*176|0)+99>>0]|0)==0?(to(g,w)|0)==2:0)?(vo(g,w)|0)==2:0)?(qo(g,w)|0)==0:0)?(W=wo(g,w)|0,c[za>>2]=W,(W|0)>-1):0)?(X=e[g+(w*176|0)+8+(W<<1)>>1]|0,c[Ba>>2]=X,Y=g+(X*176|0)+99|0,(a[Y>>0]|0)!=0):0)?(Z=xo(g,w,X)|0,c[J>>2]=Z,(Z|0)>-1):0)?(E=a[Y>>0]|0,_=e[g+(w*176|0)+8+(Z<<1)>>1]|0,c[K>>2]=_,(E|0)==(0-(a[g+(_*176|0)+99>>0]|0)|0)):0)?(E=vo(g,X)|0,((vo(g,_)|0)+E|0)<6):0){if(!(lp(92361,d[g+(w*176|0)+6>>0]|0,4)|0))break;else{v=-1;u=0;r=-1;t=-1}while(1){if((u|0)==2){u=r;break}s=c[Ba+(u<<2)>>2]|0;q=g+(s*176|0)+99|0;l=a[q>>0]|0;do if(l<<24>>24==-1){E=to(g,s)|0;if(((a[g+(s*176|0)+94>>0]|0)+E+(a[g+(s*176|0)+95>>0]|0)+(a[g+(s*176|0)+96>>0]|0)+(a[g+(s*176|0)+97>>0]|0)|0)==2?lp(92357,d[g+(s*176|0)+6>>0]|0,4)|0:0){q=v;l=s;break}l=a[q>>0]|0;Ca=281}else Ca=281;while(0);do if((Ca|0)==281){Ca=0;if(l<<24>>24!=1){q=v;l=t;break}if(((a[g+(s*176|0)+94>>0]|0)+(a[g+(s*176|0)+93>>0]|0)+(a[g+(s*176|0)+95>>0]|0)+(a[g+(s*176|0)+96>>0]|0)+(a[g+(s*176|0)+97>>0]|0)|0)!=3){q=v;l=t;break}l=(lp(92365,d[g+(s*176|0)+6>>0]|0,2)|0)==0;q=l?v:u;r=l?r:s;l=t}while(0);v=q;u=u+1|0;t=l}if((u|t|0)<0)break;if(so(g,u,t,92357,c[22879]|0)|0)break;if(so(g,t,u,92357,c[22879]|0)|0)break;l=1-v|0;q=w&65535;r=g+(w*176|0)+93|0;s=0;while(1){if((s|0)==2)break;D=(s|0)!=0;E=D?u:t;B=c[za+((D?v:l)<<2)>>2]|0;C=g+(E*176|0)+8|0;C=(mo(C,q,a[g+(E*176|0)+92>>0]|0)|0)-C>>1;B=g+(w*176|0)+72+B|0;a[B>>0]=(a[B>>0]|0)+1<<24>>24;C=g+(E*176|0)+72+C|0;a[C>>0]=(a[C>>0]|0)+1<<24>>24;a[r>>0]=(a[r>>0]|0)+1<<24>>24;C=g+(E*176|0)+93|0;a[C>>0]=(a[C>>0]|0)+1<<24>>24;E=g+(E*176|0)+99|0;a[E>>0]=(d[E>>0]|0)+(D?255:1);s=s+1|0}j=j+-2|0;p=p+-1|0;k=k+-1|0;h=h+1|0}while(0);w=w+1|0}}if((o|0)>0&((I|0)==17&(p|0)>0)){w=0;while(1){if((w|0)>=(f|0))break;do if((((((((a[g+(w*176|0)+99>>0]|0)==0?(to(g,w)|0)==3:0)?(vo(g,w)|0)==3:0)?(qo(g,w)|0)==0:0)?(aa=wo(g,w)|0,c[Aa>>2]=aa,(aa|0)>-1):0)?(ba=e[g+(w*176|0)+8+(aa<<1)>>1]|0,c[Ba>>2]=ba,ca=xo(g,w,ba)|0,c[L>>2]=ca,(ca|0)>-1):0)?(da=e[g+(w*176|0)+8+(ca<<1)>>1]|0,c[M>>2]=da,ea=yo(g,w,ba,da)|0,c[N>>2]=ea,(ea|0)>-1):0)?(fa=a[g+(ba*176|0)+99>>0]|0,ga=fa<<24>>24,c[za>>2]=ga,ha=a[g+(da*176|0)+99>>0]|0,ia=ha<<24>>24,c[O>>2]=ia,ja=e[g+(w*176|0)+8+(ea<<1)>>1]|0,c[P>>2]=ja,ka=a[g+(ja*176|0)+99>>0]|0,la=ka<<24>>24,c[Q>>2]=la,((ha<<24>>24==0&1)+(fa<<24>>24==0&1)+(ka<<24>>24==0&1)|0)==1):0){if((ia+ga|0)!=(0-la|0))break;if(!(fa<<24>>24))l=0;else l=(a[g+(ba*176|0)+94>>0]|0)+(a[g+(ba*176|0)+93>>0]|0)+(a[g+(ba*176|0)+95>>0]|0)+(a[g+(ba*176|0)+96>>0]|0)+(a[g+(ba*176|0)+97>>0]|0)|0;if(!(ha<<24>>24))q=0;else q=(a[g+(da*176|0)+94>>0]|0)+(a[g+(da*176|0)+93>>0]|0)+(a[g+(da*176|0)+95>>0]|0)+(a[g+(da*176|0)+96>>0]|0)+(a[g+(da*176|0)+97>>0]|0)|0;if(!(ka<<24>>24))r=0;else r=(a[g+(ja*176|0)+94>>0]|0)+(a[g+(ja*176|0)+93>>0]|0)+(a[g+(ja*176|0)+95>>0]|0)+(a[g+(ja*176|0)+96>>0]|0)+(a[g+(ja*176|0)+97>>0]|0)|0;if((((q|0)==3&1)+((l|0)==3&1)+((r|0)==3&1)|0)!=2)break;if(!(lp(92357,d[g+(w*176|0)+6>>0]|0,4)|0))break;else{q=-1;u=-1;r=0;t=-1;s=-1}while(1){if((r|0)==3){v=q;break}k:do if(c[za+(r<<2)>>2]|0){l=c[Ba+(r<<2)>>2]|0;switch(a[g+(l*176|0)+99>>0]|0){case -1:{E=(lp(92365,d[g+(l*176|0)+6>>0]|0,2)|0)==0;q=E?q:r;t=E?t:l;break k}case 1:{E=(lp(92365,d[g+(l*176|0)+6>>0]|0,2)|0)==0;u=E?u:r;s=E?s:l;break k}default:break k}}while(0);r=r+1|0}if((t|s|0)<0)break;if(so(g,s,t,92357,c[22879]|0)|0)break;if(so(g,t,s,92357,c[22879]|0)|0)break;l=w&65535;q=g+(w*176|0)+93|0;r=0;while(1){if((r|0)==2)break;D=(r|0)!=0;E=D?s:t;B=c[Aa+((D?u:v)<<2)>>2]|0;C=g+(E*176|0)+8|0;C=(mo(C,l,a[g+(E*176|0)+92>>0]|0)|0)-C>>1;B=g+(w*176|0)+72+B|0;a[B>>0]=(a[B>>0]|0)+1<<24>>24;C=g+(E*176|0)+72+C|0;a[C>>0]=(a[C>>0]|0)+1<<24>>24;a[q>>0]=(a[q>>0]|0)+1<<24>>24;C=g+(E*176|0)+93|0;a[C>>0]=(a[C>>0]|0)+1<<24>>24;E=g+(E*176|0)+99|0;a[E>>0]=(d[E>>0]|0)+(D?255:1);r=r+1|0}j=j+-2|0;o=o+-1|0;p=p+-1|0;h=h+1|0}while(0);w=w+1|0}}if((I|0)==18?(n|0)>0|(p|0)>0&(o|0)>0:0){A=0;while(1){if((A|0)>=(f|0))break;z=g+(A*176|0)+99|0;l:do if((((((a[z>>0]|0)==0?(to(g,A)|0)==2:0)?(vo(g,A)|0)==3:0)?(qo(g,A)|0)==0:0)?(ma=wo(g,A)|0,c[Aa>>2]=ma,(ma|0)>-1):0)?(na=e[g+(A*176|0)+8+(ma<<1)>>1]|0,c[Ba>>2]=na,oa=xo(g,A,na)|0,c[R>>2]=oa,(oa|0)>-1):0){E=a[g+(na*176|0)+99>>0]|0;l=e[g+(A*176|0)+8+(oa<<1)>>1]|0;c[S>>2]=l;if((E|0)!=(0-(a[g+(l*176|0)+99>>0]|0)|0))break;q=(a[g+(na*176|0)+94>>0]|0)+(a[g+(na*176|0)+93>>0]|0)+(a[g+(na*176|0)+95>>0]|0)+(a[g+(na*176|0)+96>>0]|0)+(a[g+(na*176|0)+97>>0]|0)|0;c[za>>2]=q;r=(a[g+(l*176|0)+94>>0]|0)+(a[g+(l*176|0)+93>>0]|0)+(a[g+(l*176|0)+95>>0]|0)+(a[g+(l*176|0)+96>>0]|0)+(a[g+(l*176|0)+97>>0]|0)|0;c[T>>2]=r;if((r+q|0)!=6)break;E=q-r|0;if((((E|0)>-1?E:0-E|0)|0)>=3)break;if(!(lp(92357,d[g+(A*176|0)+6>>0]|0,4)|0))break;if(!(lp(92365,d[g+(na*176|0)+6>>0]|0,2)|0))break;if(!(lp(92365,d[g+(l*176|0)+6>>0]|0,2)|0))break;else{q=-1;r=-1;u=0;s=-1;v=-1}while(1){if((u|0)==2){y=v;break}t=c[Ba+(u<<2)>>2]|0;l=c[za+(u<<2)>>2]|0;m:do switch(l|0){case 4:{q=u;s=t;l=v;break}case 3:{if((a[(c[Aa+(u<<2)>>2]|0)+(g+(A*176|0)+72)>>0]|0)==1){q=u;s=t;l=v;break m}if((a[(c[Aa+(u<<2)>>2]|0)+(g+(A*176|0)+72)>>0]|0)==2)Ca=350;else l=v;break}default:if((l|0)==2)Ca=350;else l=v}while(0);if((Ca|0)==350){Ca=0;r=u;l=t}u=u+1|0;v=l}if((s|y|0)<0)break;l=a[g+(y*176|0)+92>>0]|0;if(((a[g+(y*176|0)+94>>0]|0)+(l<<24>>24)+(a[g+(y*176|0)+95>>0]|0)+(a[g+(y*176|0)+96>>0]|0)+(a[g+(y*176|0)+97>>0]|0)|0)!=2)break;do if((c[za+(r<<2)>>2]|0)!=2){if(!(a[g+(y*176|0)+99>>0]|0)){Ca=356;break}if(so(g,y,s,92357,c[22879]|0)|0)break l;if(so(g,s,y,92357,c[22879]|0)|0)break l}else Ca=356;while(0);do if((Ca|0)==356){Ca=0;if(l<<24>>24!=2)break;if(lp(92357,d[g+((e[g+(y*176|0)+8+(((e[g+(y*176|0)+8>>1]|0)==(A|0)&1)<<1)>>1]|0)*176|0)+6>>0]|0,4)|0)break l}while(0);if(!(a[g+(y*176|0)+99>>0]|0)){j=j+-1|0;n=n+-1|0}else{j=j+-2|0;o=o+-1|0;p=p+-1|0}l=A&65535;t=g+(A*176|0)+93|0;x=0;while(1){if((x|0)==2)break;u=(x|0)!=0;v=u?r:q;w=c[za+(v<<2)>>2]|0;if((w|0)<4){B=c[Aa+(v<<2)>>2]|0;E=u?y:s;C=4-w|0;D=g+(E*176|0)+8|0;D=(mo(D,l,a[g+(E*176|0)+92>>0]|0)|0)-D>>1;B=g+(A*176|0)+72+B|0;a[B>>0]=(d[B>>0]|0)+C;D=g+(E*176|0)+72+D|0;a[D>>0]=(d[D>>0]|0)+C;a[t>>0]=(d[t>>0]|0)+C;D=g+(E*176|0)+93|0;a[D>>0]=(d[D>>0]|0)+C;a[g+(E*176|0)+99>>0]=0;a[g+(E*176|0)+100>>0]=0}x=x+1|0}a[z>>0]=0;a[g+(A*176|0)+100>>0]=0;h=h+1|0}while(0);A=A+1|0}}l=F;y=H;I=I+1|0}}while(0);i=Da;return h|0}function mn(b,f,g,h){b=b|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0;do if((h|0)!=1)if((h|0)>=1){l=a[b+((e[b+(f*176|0)+8+(c[g>>2]<<1)>>1]|0)*176|0)+92>>0]|0;m=1;j=1;while(1){if((m|0)==(h|0))break;k=c[g+(m<<2)>>2]|0;i=a[b+((e[b+(f*176|0)+8+(k<<1)>>1]|0)*176|0)+92>>0]|0;if((i|0)>=(l|0))if((i|0)==(l|0)){c[g+(j<<2)>>2]=k;i=l;j=j+1|0}else i=l;else{c[g>>2]=k;j=1}l=i;m=m+1|0}i=c[g>>2]|0;if((j|0)!=1){i=e[b+(f*176|0)+8+(i<<1)>>1]|0;m=d[b+(i*176|0)+6>>0]|0;n=1;h=1;while(1){if((n|0)>=(j|0))break;l=c[g+(n<<2)>>2]|0;i=e[b+(f*176|0)+8+(l<<1)>>1]|0;k=d[b+(i*176|0)+6>>0]|0;if((k|0)>=(m|0))if((k|0)==(m|0)){c[g+(h<<2)>>2]=l;k=m;l=h+1|0}else{k=m;l=h}else{c[g>>2]=l;l=1}m=k;n=n+1|0;h=l}if((h|0)==1){i=c[g>>2]|0;break}if((a[b+(i*176|0)+92>>0]|0)>1)i=-1;else{l=a[b+((e[b+(f*176|0)+8+(c[g>>2]<<1)>>1]|0)*176|0)+98>>0]|0;m=1;j=1;while(1){if((m|0)>=(h|0))break;k=c[g+(m<<2)>>2]|0;n=a[b+((e[b+(f*176|0)+8+(k<<1)>>1]|0)*176|0)+6>>0]|0;i=n&255;if(!((l|0)!=0&n<<24>>24==0|(i|0)<(l|0)))if((i|0)==(l|0)){c[g+(j<<2)>>2]=k;i=l;j=j+1|0}else i=l;else{c[g>>2]=k;j=1}l=i;m=m+1|0}i=c[g>>2]|0}}}else i=-1;else i=c[g>>2]|0;while(0);return i|0}function nn(a,b){a=a|0;b=b|0;return 0}function on(f,g,h){f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;N=i;i=i+16|0;M=N+8|0;K=N+4|0;L=N;y=f+(g*176|0)+92|0;n=a[y>>0]|0;l=n<<24>>24;z=l+-1|0;if(n<<24>>24>0){D=f+(g*176|0)+72+h|0;x=a[D>>0]|0;x=(x&255)>3?1:x&255;m=f+(g*176|0)+137|0;do if(a[m>>0]|0){o=f+(g*176|0)+48|0;j=0;while(1){if((j|0)>=4)break;if((b[f+(g*176|0)+138+(j<<1)>>1]|0)==(b[o>>1]|0)){w=6;break}else j=j+1|0}if((w|0)==6){a[m>>0]=0;break}k=f+(g*176|0)+8+(h<<1)|0;j=0;while(1){if((j|0)>=(l|0)){w=12;break}if((b[f+((e[k>>1]|0)*176|0)+48>>1]|0)==(b[f+(g*176|0)+138+(j<<1)>>1]|0)){w=11;break}j=j+1|0}if((w|0)==11){b[f+(g*176|0)+138+(j<<1)>>1]=b[o>>1]|0;break}else if((w|0)==12){a[m>>0]=0;break}}while(0);a:do if(a[f+(g*176|0)+152>>0]|0){r=n<<24>>24<3;s=f+(g*176|0)+154|0;t=f+(g*176|0)+148|0;u=f+(g*176|0)+151|0;v=f+(g*176|0)+160|0;j=0;while(1){if((j|0)>=3)break a;l=f+(g*176|0)+152+j|0;m=a[l>>0]|0;if(!(m<<24>>24))break a;q=f+(g*176|0)+146+j|0;k=a[q>>0]|0;n=k<<24>>24;if((n|0)!=(h|0)?(A=f+(g*176|0)+149+j|0,B=a[A>>0]|0,C=B<<24>>24,E=(C|0)==(h|0),F=(m+-1&255)<2,!(F&(r&E))):0){do if(!E){if((n|0)>(h|0))a[q>>0]=k+-1<<24>>24;if((C|0)>(h|0))a[A>>0]=B+-1<<24>>24}else{o=a[y>>0]|0;p=0;while(1){if((p|0)>=(o|0))break;if(!((p|0)==(h|0)|(p|0)==(n|0))){J=p;w=34;break}p=p+1|0}if((w|0)==34?(w=0,(J|0)>=0):0){if(F)a[l>>0]=3-(m&255);a[A>>0]=J-((J|0)>(h|0)&1);a[q>>0]=n-((n|0)>(h|0)&1);b[f+(g*176|0)+156+(j<<1)>>1]=b[f+((e[f+(g*176|0)+8+(J<<1)>>1]|0)*176|0)+48>>1]|0;break}if(F){if((hi(f,g,n,M,K,L)|0)>0){a[l>>0]=4;a[(c[L>>2]|0)+(f+((c[M>>2]|0)*176|0)+152)>>0]=4}k=a[q>>0]|0}a[A>>0]=-99;p=k<<24>>24;a[q>>0]=p-((p|0)>(h|0)&1);b[f+(g*176|0)+156+(j<<1)>>1]=0}while(0);j=j+1|0;continue}if(((hi(f,g,n,M,K,L)|0)!=0?(G=c[L>>2]|0,H=c[M>>2]|0,(G|0)<3):0)?(I=f+(H*176|0)+152+G|0,(a[I>>0]|0)!=0):0){if((j|0)<2){p=2-j|0;jr(l|0,l+1|0,p|0)|0;jr(q|0,q+1|0,p|0)|0;q=f+(g*176|0)+149+j|0;jr(q|0,q+1|0,p|0)|0;q=f+(g*176|0)+156+(j<<1)|0;jr(q|0,q+2|0,p<<1|0)|0}a[s>>0]=0;a[t>>0]=0;a[u>>0]=0;b[v>>1]=0;if((G|0)<2){q=2-G|0;jr(I|0,I+1|0,q|0)|0;p=f+(H*176|0)+146+G|0;jr(p|0,p+1|0,q|0)|0;p=f+(H*176|0)+149+G|0;jr(p|0,p+1|0,q|0)|0;p=f+(H*176|0)+156+(G<<1)|0;jr(p|0,p+2|0,q<<1|0)|0}a[f+(H*176|0)+154>>0]=0;a[f+(H*176|0)+148>>0]=0;a[f+(H*176|0)+151>>0]=0;b[f+(H*176|0)+160>>1]=0}else j=j+1|0}}while(0);if((z|0)>(h|0)){L=f+(g*176|0)+8+(h<<1)|0;M=z-h|0;jr(L|0,L+2|0,M<<1|0)|0;L=f+(g*176|0)+52+h|0;jr(L|0,L+1|0,M|0)|0;jr(D|0,D+1|0,M|0)|0}b[f+(g*176|0)+8+(z<<1)>>1]=0;a[f+(g*176|0)+52+z>>0]=0;a[f+(g*176|0)+72+z>>0]=0;a[y>>0]=z;j=f+(g*176|0)+93|0;a[j>>0]=(d[j>>0]|0)-x;j=1}else j=0;i=N;return j|0}function pn(c,d,f,g){c=c|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=e[c+(f*176|0)+8+(g<<1)>>1]|0;i=a[c+(k*176|0)+92>>0]|0;h=0;while(1){if((h|0)>=(i|0)){h=0;break}if((e[c+(k*176|0)+8+(h<<1)>>1]|0)==(f|0)){j=5;break}h=h+1|0}if((j|0)==5){j=on(c,f,g)|0;h=(on(c,k,h)|0)+j|0;if((d|0)!=0&(h|0)!=0){i=b[c+(f*176|0)+106>>1]|0;if(i<<16>>16)b[d+((i&65535)+-1<<1)>>1]=0;i=b[c+(k*176|0)+106>>1]|0;if(i<<16>>16)b[d+((i&65535)+-1<<1)>>1]=0}}return (h|0)==2|0}function qn(b,f,g,h,i){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;if(!(a[92369]|0)){a[92369]=$n(86667)|0;a[92370]=$n(86671)|0;a[92371]=$n(86650)|0;a[92372]=$n(86669)|0;a[92373]=$n(86673)|0;a[92374]=$n(86694)|0;a[92375]=$n(86746)|0;a[92376]=$n(86799)|0}a:do if((a[b+(f*176|0)+6>>0]|0)==(a[92372]|0)?(s=a[b+(f*176|0)+92>>0]|0,k=(a[b+(f*176|0)+96>>0]|0)+(a[b+(f*176|0)+95>>0]|0)+(a[b+(f*176|0)+97>>0]|0)+(a[b+(f*176|0)+94>>0]|0)|0,(k+s|0)==5):0){a[i>>0]=0;a[i+1>>0]=0;a[i+2>>0]=0;a[i+3>>0]=0;t=a[92371]|0;u=a[92370]|0;v=a[92369]|0;w=a[92373]|0;x=a[92374]|0;y=a[92375]|0;z=a[92376]|0;A=b+(f*176|0)+99|0;m=-1;B=0;l=-1;j=0;while(1){if((B|0)>=(s|0))break;r=e[b+(f*176|0)+8+(B<<1)>>1]|0;if(a[b+(r*176|0)+94>>0]|0){j=0;break a}p=a[b+(r*176|0)+99>>0]|0;n=p<<24>>24;q=p<<24>>24==0;if(!q){if((a[b+(r*176|0)+6>>0]|0)!=u<<24>>24){j=0;break a}if((n|0)!=(0-(a[A>>0]|0)|0)){j=0;break a}}n=a[b+(r*176|0)+100>>0]|0;if((n&255)>=2){j=0;break a}o=a[b+(r*176|0)+6>>0]|0;if(o<<24>>24==t<<24>>24?((p|n)<<24>>24==0?(a[b+(r*176|0)+92>>0]|0)==1:0):0){r=i+(a[b+(r*176|0)+98>>0]|0)|0;a[r>>0]=(a[r>>0]|0)+1<<24>>24;k=k+1|0}else C=15;do if((C|0)==15){C=0;if(o<<24>>24==u<<24>>24?!(j|0?1:(a[b+(r*176|0)+92>>0]|0)!=2):0){j=e[b+(r*176|0)+8+(((e[b+(r*176|0)+8>>1]|0)==(f|0)&1)<<1)>>1]|0;if((a[b+(j*176|0)+6>>0]|0)!=v<<24>>24){j=0;break a}if(a[b+(j*176|0)+99>>0]|0){j=0;break a}if((d[b+(j*176|0)+100>>0]|0)<2){m=r;l=B;j=1;break}else{j=0;break a}}if(!((o<<24>>24==w<<24>>24?1:o<<24>>24==x<<24>>24)|o<<24>>24==y<<24>>24|o<<24>>24==z<<24>>24)){j=0;break a}if((a[b+(r*176|0)+92>>0]|0)!=1){j=0;break a}if((a[b+(r*176|0)+93>>0]|0)!=1|q^1){j=0;break a}if(j|0?1:((a[b+(r*176|0)+95>>0]|0)+(a[b+(r*176|0)+96>>0]|0)|0)!=(0-(a[b+(r*176|0)+97>>0]|0)|0)){j=0;break a}else{m=r;l=B;j=1}}while(0);B=B+1|0}if(!((k|0)!=4|(j|0)!=1)){c[g>>2]=m;c[h>>2]=l;j=1}else j=0}else j=0;while(0);return j|0}function rn(c,f,g,i,j){c=c|0;f=f|0;g=g|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0,w=0.0,x=0.0;n=a[c+(f*176|0)+92>>0]|0;if(!(a[92377]|0))a[92377]=$n(86650)|0;l=c+(f*176|0)+99|0;m=a[l>>0]|0;if(m<<24>>24?(k=c+(g*176|0)+99|0,(m<<24>>24|0)==(0-(a[k>>0]|0)|0)):0){a[k>>0]=0;a[l>>0]=0}t=c+(g*176|0)+92|0;if((a[t>>0]|0)==2)k=(e[c+(g*176|0)+10>>1]|0)==(f|0)&1;else k=0;on(c,g,k)|0;on(c,f,i)|0;s=n+-1|0;n=c+(f*176|0)+94|0;i=0;while(1){if((i|0)>=4)break;if(!i){k=a[n>>0]|0;if(k<<24>>24){q=12;break}if(a[j>>0]|0){r=0;q=19;break}}else{m=c+(f*176|0)+95+i|0;l=a[m>>0]|0;if(l<<24>>24){k=i;q=15;break}if(a[j+i>>0]|0){p=i;q=18;break}}i=i+1|0}if((q|0)==12){a[n>>0]=k+-1<<24>>24;g=c+(g*176|0)+94|0;a[g>>0]=(a[g>>0]|0)+1<<24>>24}else if((q|0)==15){a[m>>0]=l+-1<<24>>24;g=c+(g*176|0)+95+k|0;a[g>>0]=(a[g>>0]|0)+1<<24>>24}else if((q|0)==18?(p|0)>-1:0){r=p;q=19}if((q|0)==19){n=a[92377]|0;i=c+(g*176|0)+112|0;p=c+(g*176|0)+120|0;j=c+(g*176|0)+128|0;l=-1;q=0;k=-1;o=-1.0;while(1){if((q|0)>=(s|0))break;m=e[c+(f*176|0)+8+(q<<1)>>1]|0;if((a[c+(m*176|0)+6>>0]|0)==n<<24>>24?(a[c+(m*176|0)+98>>0]|0)==(r|0):0){x=+h[c+(m*176|0)+112>>3]-+h[i>>3];w=+h[c+(m*176|0)+120>>3]-+h[p>>3];u=+h[c+(m*176|0)+128>>3]-+h[j>>3];u=x*x+w*w+u*u;v=o<0.0|o>u;l=v?m:l;k=v?q:k;o=v?u:o}q=q+1|0}v=a[t>>0]|0;b[c+(g*176|0)+8+(v<<1)>>1]=l;a[c+(g*176|0)+52+v>>0]=0;s=c+(l*176|0)+72|0;a[c+(g*176|0)+72+v>>0]=a[s>>0]|0;v=c+(g*176|0)+93|0;a[v>>0]=(d[v>>0]|0)+(d[s>>0]|0);a[t>>0]=(a[t>>0]|0)+1<<24>>24;b[c+(l*176|0)+8>>1]=g;a[c+(l*176|0)+52>>0]=0;on(c,f,k)|0}return 1}function sn(b,c){b=b|0;c=c|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if(!(a[92378]|0)){a[92378]=$n(86667)|0;a[92379]=$n(86671)|0;a[92380]=$n(86650)|0;a[92381]=$n(86673)|0;a[92382]=$n(86694)|0;a[92383]=$n(86746)|0;a[92384]=$n(86799)|0}i=b+(c*176|0)+92|0;q=a[i>>0]|0;j=q<<24>>24;a:do if((q<<24>>24!=0?(k=b+(c*176|0)+6|0,f=go(d[k>>0]|0)|0,(f&3|0)!=0):0)?(a[b+(c*176|0)+94>>0]|0)==0:0){g=b+(c*176|0)+99|0;l=f&1;do if(!(a[g>>0]|0)){if(l|0?(j|0)==(ao(d[k>>0]|0,0,0)|0):0)break;if(!((f&2|0)!=0?(j|0)==(ao(d[k>>0]|0,0,1)|0):0))h=11}else h=11;while(0);if((h|0)==11){f=a[g>>0]|0;if((l|0)==0|f<<24>>24<1){f=0;break}if((j|0)!=(ao(d[k>>0]|0,f<<24>>24,0)|0)){f=0;break}}i=a[i>>0]|0;j=a[92381]|0;k=a[92382]|0;l=a[92383]|0;m=a[92384]|0;n=a[92379]|0;o=a[92378]|0;p=a[92380]|0;q=0;while(1){if((q|0)>=(i|0)){f=1;break a}f=e[b+(c*176|0)+8+(q<<1)>>1]|0;g=a[b+(f*176|0)+6>>0]|0;if(!((((((g<<24>>24==j<<24>>24?1:g<<24>>24==k<<24>>24)|g<<24>>24==l<<24>>24|g<<24>>24==m<<24>>24?(a[b+(f*176|0)+92>>0]|0)==1:0)?(a[b+(f*176|0)+93>>0]|0)==1:0)?(a[b+(f*176|0)+99>>0]|0)==0:0)?(d[b+(f*176|0)+100>>0]|0)<2:0)?(a[b+(f*176|0)+94>>0]|0)==(0-((a[b+(f*176|0)+95>>0]|0)+(a[b+(f*176|0)+96>>0]|0)+(a[b+(f*176|0)+97>>0]|0))|0):0)){if(g<<24>>24!=n<<24>>24){f=0;break a}if((a[b+(f*176|0)+94>>0]|0)!=(0-((a[b+(f*176|0)+95>>0]|0)+(a[b+(f*176|0)+96>>0]|0)+(a[b+(f*176|0)+97>>0]|0))|0)){f=0;break a}if((a[b+(f*176|0)+92>>0]|0)!=2){f=0;break a}if(a[b+(f*176|0)+99>>0]|0){f=0;break a}if((d[b+(f*176|0)+100>>0]|0)>=2){f=0;break a}if((a[b+(f*176|0)+93>>0]|0)!=2){f=0;break a}g=e[b+(f*176|0)+8+(((e[b+(f*176|0)+8>>1]|0)==(c|0)&1)<<1)>>1]|0;if((a[b+(g*176|0)+6>>0]|0)!=o<<24>>24){f=0;break a}if(a[b+(g*176|0)+94>>0]|0){f=0;break a}if((a[b+(g*176|0)+93>>0]|0)!=4){f=0;break a}if(a[b+(g*176|0)+99>>0]|0){f=0;break a}if((d[b+(g*176|0)+100>>0]|0)>=2){f=0;break a}f=a[b+(g*176|0)+92>>0]|0;if(f<<24>>24==4){f=0;break a}h=f<<24>>24;f=0;while(1){if((f|0)>=(h|0))break;if((a[b+((e[b+(g*176|0)+8+(f<<1)>>1]|0)*176|0)+6>>0]|0)==p<<24>>24)break;f=f+1|0}if((f|0)!=(h|0)){f=0;break a}}q=q+1|0}}else f=0;while(0);return f|0}function tn(c,d){c=c|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=c+(d*176|0)+92|0;i=c+(d*176|0)+99|0;f=0;while(1){if((f|0)>=(a[o>>0]|0))break;k=c+(d*176|0)+8+(f<<1)|0;l=e[k>>1]|0;m=c+(l*176|0)+92|0;n=a[m>>0]|0;g=c+(l*176|0)+8|0;if(n<<24>>24==2){j=c+(l*176|0)+10|0;if((e[g>>1]|0)==(d|0)){b[g>>1]=b[j>>1]|0;g=c+(l*176|0)+53|0;a[c+(l*176|0)+52>>0]=a[g>>0]|0;h=c+(l*176|0)+73|0;a[c+(l*176|0)+72>>0]=a[h>>0]|0}else{g=c+(l*176|0)+53|0;h=c+(l*176|0)+73|0}b[j>>1]=0;a[g>>0]=0;a[h>>0]=0}else{b[g>>1]=0;a[c+(l*176|0)+52>>0]=0;a[c+(l*176|0)+72>>0]=0}a[c+(l*176|0)+99>>0]=-1;a[m>>0]=n+-1<<24>>24;n=c+(l*176|0)+93|0;a[n>>0]=(a[n>>0]|0)+-1<<24>>24;b[k>>1]=0;a[c+(d*176|0)+52+f>>0]=0;a[c+(d*176|0)+72+f>>0]=0;a[i>>0]=(a[i>>0]|0)+1<<24>>24;f=f+1|0}a[o>>0]=0;a[c+(d*176|0)+93>>0]=0;return f|0}function un(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;n=i;i=i+16|0;l=n+4|0;k=n;m=n+8|0;h=c[b>>2]|0;j=c[b+12>>2]|0;g=(e|0)==0;b=b+8|0;f=0;e=0;while(1){if((f|0)>=(j|0))break;o=a[h+(f*176|0)+92>>0]|0;do if((o<<24>>24!=0?o<<24>>24==(a[h+(f*176|0)+93>>0]|0):0)?(d[h+(f*176|0)+100>>0]|0)<2:0){if(qn(h,f,k,l,m)|0){if(!g){rn(h,f,c[k>>2]|0,c[l>>2]|0,m)|0;c[b>>2]=(c[b>>2]|0)+-1}e=e+1|0;break}if(sn(h,f)|0){if(!g){o=tn(h,f)|0;c[l>>2]=o;c[b>>2]=(c[b>>2]|0)-o}e=e+1|0}}while(0);f=f+1|0}i=n;return e|0}function vn(b,c,e){b=b|0;c=c|0;e=e|0;if(!((go(d[b+(c*176|0)+6>>0]|0)|0)&3))return 0;else return ((a[b+(c*176|0)+95>>0]|0)+(a[b+(c*176|0)+94>>0]|0)+(a[b+(c*176|0)+96>>0]|0)+(a[b+(c*176|0)+97>>0]|0)|0)!=(0-(a[b+(c*176|0)+93>>0]|0)|0)|0;return 0}function wn(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+16|0;p=s+4|0;o=s;q=s+8|0;k=c[b>>2]|0;l=c[b+12>>2]|0;m=(f|0)!=0;n=0;h=0;g=0;while(1){if((n|0)>=(l|0))break;j=a[k+(n*176|0)+92>>0]|0;if(!(j<<24>>24)){if((a[k+(n*176|0)+94>>0]|0)!=(0-((a[k+(n*176|0)+95>>0]|0)+(a[k+(n*176|0)+96>>0]|0)+(a[k+(n*176|0)+97>>0]|0))|0))r=9}else if(j<<24>>24==(a[k+(n*176|0)+93>>0]|0)?(d[k+(n*176|0)+100>>0]|0)<=1:0){if((qn(k,n,o,p,q)|0)==0?(sn(k,n)|0)==0:0)r=9}else r=9;do if((r|0)==9){r=0;j=vn(k,n,e)|0;if((j|0)==1){h=h+1|0;g=(a[k+(n*176|0)+94>>0]|0)+g+(a[k+(n*176|0)+95>>0]|0)+(a[k+(n*176|0)+96>>0]|0)+(a[k+(n*176|0)+97>>0]|0)|0;break}if(m&(j|0)==2)c[f>>2]=c[f>>2]|512}while(0);n=n+1|0}c[b+24>>2]=h|0?g+1|0:0;i=s;return h|0}function xn(f,g,h){f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=i;i=i+16|0;w=G+4|0;o=G;p=G+8|0;A=c[f>>2]|0;B=f+12|0;y=c[B>>2]|0;k=c[f+24>>2]|0;k=(k|0)>0?k+-1|0:0;z=c[f+32>>2]|0;D=k+y|0;F=Dq(D,176)|0;C=(F|0)!=0;a:do if(C){E=Dq(D,1)|0;b:do if(E){if(!(c[22880]|0)){a[92385]=$n(86673)|0;a[92386]=$n(86694)|0;a[92387]=$n(86746)|0;a[92388]=$n(86799)|0;a[92389]=$n(86893)|0;a[92390]=$n(86669)|0;a[92391]=$n(86690)|0;a[92392]=$n(86740)|0;a[92393]=$n(86671)|0;a[92394]=$n(86692)|0;a[92395]=$n(86743)|0;a[92396]=$n(86796)|0;a[92397]=$n(86665)|0;a[92398]=0;c[22880]=5}ir(F|0,A|0,y*176|0)|0;c[w>>2]=0;m=(h|0)!=0;n=0;j=0;while(1){if((n|0)>=(y|0))break;l=a[F+(n*176|0)+92>>0]|0;if(!(l<<24>>24)){if((a[F+(n*176|0)+94>>0]|0)!=(0-((a[F+(n*176|0)+95>>0]|0)+(a[F+(n*176|0)+96>>0]|0)+(a[F+(n*176|0)+97>>0]|0))|0))x=13}else if(l<<24>>24==(a[F+(n*176|0)+93>>0]|0)?(d[F+(n*176|0)+100>>0]|0)<=1:0){if((qn(F,n,o,w,p)|0)==0?(sn(F,n)|0)==0:0)x=13}else x=13;do if((x|0)==13){x=0;l=vn(F,n,g)|0;if((l|0)==1){v=(a[F+(n*176|0)+95>>0]|0)+(a[F+(n*176|0)+94>>0]|0)+(a[F+(n*176|0)+96>>0]|0)+(a[F+(n*176|0)+97>>0]|0)|0;c[w>>2]=v;a[E+n>>0]=v+1;j=v+j|0;break}if(m&(l|0)==2)c[h>>2]=c[h>>2]|512}while(0);n=n+1|0}if((j|0)==(k|0)){v=0;j=y;c:while(1){if(!((k|0)>0&(v|0)<(y|0)))break;s=E+v|0;l=a[s>>0]|0;if(l<<24>>24>=2){t=F+(v*176|0)+94|0;u=F+(v*176|0)+106|0;m=j;j=0;while(1){if((j|0)>=4)break;o=(j|0)==0;p=j+-1+(F+(v*176|0)+95)|0;q=a[(o?t:p)>>0]|0;r=j&255;n=0;while(1){if((n|0)>=(q|0))break;if((m|0)>=(D|0)){x=52;break c}g=F+(m*176|0)|0;a[g>>0]=72;a[F+(m*176|0)+6>>0]=$n(g)|0;a[F+(m*176|0)+98>>0]=r;b[F+(m*176|0)+106>>1]=b[u>>1]|0;g=m+1|0;yn(F,g,v,m,1)|0;b[F+(m*176|0)+48>>1]=g;l=l+-1<<24>>24;a[s>>0]=l;if(o)a[t>>0]=(a[t>>0]|0)+-1<<24>>24;else a[p>>0]=(a[p>>0]|0)+-1<<24>>24;n=n+1|0;m=g;k=k+-1|0}j=j+1|0}c[w>>2]=j;if(l<<24>>24==1)j=m;else{j=E;break b}}v=v+1|0}if((x|0)==52){c[w>>2]=j;j=E;break}if((j|0)==(D|0)){g=0;j=0;while(1){if((g|0)>=(y|0)){g=0;break}d:do if(a[E+g>>0]|0){m=F+(g*176|0)+92|0;l=a[m>>0]|0;while(1){while(1){k=l+-1|0;if((l|0)<=0)break d;if((l|0)>(a[m>>0]|0)){l=k;continue}if(!(a[E+(e[F+(g*176|0)+8+(k<<1)>>1]|0)>>0]|0))break;else l=k}l=k;j=(Bn(F,z,E,92385,c[22880]|0,y,g,k,h)|0)+j|0}}while(0);g=g+1|0}while(1){if((g|0)>=(y|0))break;e:do if(a[E+g>>0]|0){m=F+(g*176|0)+92|0;l=a[m>>0]|0;while(1){while(1){k=l+-1|0;if((l|0)<=0)break e;if((l|0)>(a[m>>0]|0)){l=k;continue}if(!(a[E+(e[F+(g*176|0)+8+(k<<1)>>1]|0)>>0]|0))l=k;else break}l=k;j=(Bn(F,z,E,92385,c[22880]|0,y,g,k,h)|0)+j|0}}while(0);g=g+1|0}if(j){if(!((A|0)!=0&C)){Cq(E);if(!C)break a}else{Cq(A);Cq(E)}c[f>>2]=F;c[B>>2]=D;break a}else j=E}else j=E}else j=E}else j=0;while(0);Cq(F);Cq(j);j=-6}else j=-6;while(0);i=G;return j|0}function yn(c,f,g,j,k){c=c|0;f=f|0;g=g|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0,C=0;z=i;i=i+160|0;w=z;n=c+(g*176|0)|0;x=c+(g*176|0)+92|0;l=a[x>>0]|0;if(!(l<<24>>24))if(!(a[c+(j*176|0)+92>>0]|0)){o=0.0;t=0.0;p=0.0;q=0.0;s=0.0}else{o=+zn(c+(j*176|0)|0,c+((e[c+(j*176|0)+8>>1]|0)*176|0)|0);t=0.0;p=0.0;q=0.0;s=0.0}else{l=l<<24>>24;m=0;q=0.0;p=0.0;o=0.0;r=0.0;while(1){if((m|0)>=(l|0))break;v=e[c+(g*176|0)+8+(m<<1)>>1]|0;A=p+ +h[c+(v*176|0)+112>>3];s=o+ +h[c+(v*176|0)+120>>3];t=r+ +h[c+(v*176|0)+128>>3];m=m+1|0;q=q+ +zn(n,c+(v*176|0)|0);p=A;o=s;r=t}s=+(m|0);p=p/s;A=o/s;B=p-+h[c+(g*176|0)+112>>3];t=A-+h[c+(g*176|0)+120>>3];o=q/s;t=+O(+(B*B+t*t));q=A;s=r/s}r=+An(c,f,g,j,k,w,20);r=o<1.0e-06&r>1.0e-06?r:o;a:do if(r>1.0e-06){if(!(t*10.0>3]-p)/t;q=r*(+h[c+(g*176|0)+120>>3]-q)/t;o=r*(+h[c+(g*176|0)+128>>3]-s)/t;if(p*p+q*q>3]>3]>=p)){C=(u|0)>(m|0);n=0;m=C?u:m;k=v;l=C?v:l}else{n=u+1|0;k=(u|0)==0?f:v}f=f+1|0;u=n;v=k}if(m|0)break;if(!(p>r)){p=s;break a}p=p*.75}q=(+(l|0)+ +(m+-1|0)*.5)*.3141592653589793;B=p/1.5;p=B*+Q(+q);q=B*+R(+q);o=o/t*B}else p=s}else{p=0.0;q=0.0;o=0.0}while(0);l=c+(j*176|0)+92|0;do if(a[l>>0]|0){l=e[c+(j*176|0)+8>>1]|0;m=a[c+(l*176|0)+92>>0]|0;n=0;while(1){if((n|0)>=(m|0)){m=32;break}if((e[c+(l*176|0)+8+(n<<1)>>1]|0)==(j|0)){m=29;break}n=n+1|0}if((m|0)==29){on(c,l,n)|0;m=33;break}else if((m|0)==32)if(!n){m=33;break}else{l=0;break}}else{a[l>>0]=1;a[c+(j*176|0)+93>>0]=1;a[c+(j*176|0)+72>>0]=1;l=j;m=33}while(0);if((m|0)==33){l=c+(l*176|0)+99|0;m=a[l>>0]|0;if(m<<24>>24>0?(y=c+(g*176|0)+99|0,(a[y>>0]|0)<0):0){a[l>>0]=m+-1<<24>>24;a[y>>0]=(a[y>>0]|0)+1<<24>>24}l=a[x>>0]|0;b[c+(g*176|0)+8+(l<<1)>>1]=j;y=c+(j*176|0)+72|0;a[c+(g*176|0)+72+l>>0]=a[y>>0]|0;a[c+(g*176|0)+52+l>>0]=0;C=c+(g*176|0)+93|0;a[C>>0]=(d[C>>0]|0)+(d[y>>0]|0);a[x>>0]=l+1;b[c+(j*176|0)+106>>1]=b[c+(g*176|0)+106>>1]|0;b[c+(j*176|0)+8>>1]=g;a[c+(j*176|0)+52>>0]=0;h[c+(j*176|0)+112>>3]=p+ +h[c+(g*176|0)+112>>3];h[c+(j*176|0)+120>>3]=q+ +h[c+(g*176|0)+120>>3];h[c+(j*176|0)+128>>3]=o+ +h[c+(g*176|0)+128>>3];l=1}i=z;return l|0}function zn(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0;e=+h[a+112>>3]-+h[b+112>>3];d=+h[a+120>>3]-+h[b+120>>3];c=+h[a+128>>3]-+h[b+128>>3];return +(+O(+(e*e+d*d+c*c)))}function An(c,d,f,g,j,k,l){c=c|0;d=d|0;f=f|0;g=g|0;j=j|0;k=k|0;l=l|0;var m=0.0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0.0,y=0.0,z=0.0,A=0,B=0.0,C=0,D=0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,P=0,R=0,S=0.0,T=0.0,U=0,V=0,X=0,Y=0,Z=0;Z=i;i=i+32|0;U=Z+24|0;X=Z+16|0;V=Z+8|0;Y=Z;T=6.283185307179586/+(l|0);n=0;while(1){if((n|0)>=(l|0))break;h[k+(n<<3)>>3]=1.e+30;n=n+1|0}S=T*.5;J=(j|0)==0;K=c+(f*176|0)+106|0;L=c+(f*176|0)+112|0;P=c+(f*176|0)+120|0;m=0.0;p=0.0;R=0;n=0;o=0.0;while(1){if((R|0)>=(d|0))break;a:do if(!((R|0)==(f|0)|(R|0)==(g|0))){if(J?(b[c+(R*176|0)+106>>1]|0)!=(b[K>>1]|0):0)break;G=c+(R*176|0)+92|0;H=c+(R*176|0)+112|0;I=c+(R*176|0)+120|0;F=0;while(1){if((F|0)>=(a[G>>0]|0))break a;j=e[c+(R*176|0)+8+(F<<1)>>1]|0;D=(j|0)==(f|0);b:do if(!((j|0)==(g|0)|((j|0)<=(R|0)|D)^1)){r=+h[L>>3];q=+h[H>>3]-r;h[U>>3]=q;t=+h[P>>3];s=+h[I>>3]-t;h[X>>3]=s;r=+h[c+(j*176|0)+112>>3]-r;h[V>>3]=r;t=+h[c+(j*176|0)+120>>3]-t;h[Y>>3]=t;if(t*q-r*s<-1.0e-14){hh(U,V,8);hh(X,Y,8);B=+h[U>>3];y=+h[V>>3];s=+h[X>>3];t=+h[Y>>3]}else{B=q;y=r}x=y-B;z=t-s;q=x*x+z*z;if(q>1.0e-14){u=-(B*x+s*z)/q;do if(!(u<0.0))if(u>1.0){r=+O(+(y*y+t*t));break}else{r=+O(+(q*(u*u)));break}else r=+O(+(B*B+s*s));while(0);m=m+ +O(+q);n=n+1|0;E=r}else{E=+O(+(B*B+s*s));u=.5}if(E>=1.0e-07){r=+W(+s,+B);if(D)q=r;else q=+W(+t,+y);t=r>q?q+6.283185307179586:q;C=r<0.0;y=C?r+6.283185307179586:r;C=~~+M(+((S+(C?t+6.283185307179586:t))/T));x=x*u+B;s=z*u+s;t=x*x+s*s;j=1;A=~~+M(+((S+y)/T));while(1){if((A|0)>(C|0))break b;v=(A|0)%(l|0)|0;w=k+(v<<3)|0;r=+h[w>>3];if(!(rq){h[w>>3]=q;j=0}else j=0}A=A+1|0}}q=B*B+s*s;r=y*y+t*t;if(!(q>1.0e-12&r>1.0e-12)){if(q<=1.0e-12&r<=1.0e-12)break;if(q>r)q=+W(+s,+B);else q=+W(+t,+y);j=k+(((~~+M(+((S+(q<0.0?q+6.283185307179586:q))/T))|0)%(l|0)|0)<<3)|0;if(!(+h[j>>3]>E))break;h[j>>3]=E;break}q=B*y+s*t;if(q>1.0e-14){B=+W(+s,+B);j=k+(((~~+M(+((S+(B<0.0?B+6.283185307179586:B))/T))|0)%(l|0)|0)<<3)|0;if(!(+h[j>>3]>E))break;h[j>>3]=E;break}if(q<-1.0e-14){q=+W(+s,+B);q=q<0.0?q+6.283185307179586:q;j=k+(((~~+M(+((S+q)/T))|0)%(l|0)|0)<<3)|0;if(+h[j>>3]>E)h[j>>3]=E;j=k+(((~~+M(+((S+(q+3.141592653589793))/T))|0)%(l|0)|0)<<3)|0;if(+h[j>>3]>E)h[j>>3]=E}}while(0);F=F+1|0}}while(0);R=R+1|0}if(!n)m=0.0;else m=m/+(n|0);i=Z;return +m}function Bn(b,f,g,h,j,k,l,m,n){b=b|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;E=i;i=i+160|0;y=E+80|0;x=E;B=e[b+(l*176|0)+8+(m<<1)>>1]|0;C=b+(B*176|0)+92|0;v=a[C>>0]|0;w=0;o=0;p=0;q=0;while(1){if((w|0)>=(v|0)){r=o;v=p;break}u=x+(w<<2)|0;c[u>>2]=0;t=e[b+(B*176|0)+8+(w<<1)>>1]|0;if((t|0)<(k|0)?(a[g+t>>0]|0)!=0:0){m=p+1|0;c[y+(p<<2)>>2]=w;if((d[b+(B*176|0)+72+w>>0]|0)>3){p=a[b+(t*176|0)+92>>0]|0;r=0;s=0;while(1){if((s|0)>=(p|0))break;F=((d[b+(t*176|0)+72+s>>0]|0)>3&1)+r|0;c[u>>2]=F;r=F;s=s+1|0}o=o+1|0}}else m=p;F=((d[b+(B*176|0)+72+w>>0]|0)>3&1)+q|0;w=w+1|0;p=m;q=F}if(!r){o=v;p=0}else{p=0;while(1){if((p|0)>=(v|0))break;m=c[y+(p<<2)>>2]|0;o=c[x+(m<<2)>>2]|0;if(o|0){F=b+((e[b+(B*176|0)+8+(m<<1)>>1]|0)*176|0)+93|0;a[F>>0]=((o+-1|0)/2|0)+((o|0)/-2|0)+(d[F>>0]|0)}p=p+1|0}o=b+(B*176|0)+93|0;a[o>>0]=((q-r|0)/2|0)+((q|0)/-2|0)+(d[o>>0]|0);o=v;p=0}while(1){m=o+-1|0;if((o|0)<=0){u=p;break}o=m;p=(pn(b,f,B,c[y+(m<<2)>>2]|0)|0)+p|0}a:do if((!((q|0)!=(r|0)&(q-r&-2|0)!=2)?(D=b+(B*176|0)+100|0,(d[D>>0]|0)<2):0)?(A=b+(B*176|0)+6|0,z=op(h,d[A>>0]|0)|0,z|0):0){s=b+(B*176|0)+93|0;t=(a[b+(B*176|0)+94>>0]|0)+(a[s>>0]|0)+(a[b+(B*176|0)+95>>0]|0)+(a[b+(B*176|0)+96>>0]|0)+(a[b+(B*176|0)+97>>0]|0)|0;b:do if(!t)if((z-h|0)<(j|0))m=-1;else break a;else{m=-1;while(1){if((m|0)>=2)break a;if((t|0)==(ao(d[A>>0]|0,m,0)|0))break b;m=m+1|0}}while(0);p=b+(B*176|0)+99|0;q=a[p>>0]|0;r=(m|0)==(q<<24>>24|0);if(r){o=a[D>>0]|0;if(!(o<<24>>24))break;if(!((v|0)==1&o<<24>>24!=1))break}else if((v|0)!=1)break;if((((t|0)==4&(m|0)==1?(a[C>>0]|0)==2:0)?(a[s>>0]|0)==4:0)?(a[b+(B*176|0)+72>>0]|0)==(a[b+(B*176|0)+73>>0]|0):0)break;if(!((n|0)==0|r))c[n>>2]=c[n>>2]|1024;F=b+(l*176|0)+99|0;a[F>>0]=(q&255)-m+(d[F>>0]|0);a[p>>0]=m}while(0);i=E;return u|0}function Cn(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;f=0;while(1){if((f|0)>=(b|0))break;e=c+(f*176|0)+94|0;g=0;while(1){if((g|0)==3)break;a[e>>0]=(d[e>>0]|0)+(d[c+(f*176|0)+95+g>>0]|0);g=g+1|0}f=f+1|0}return 0}function Dn(f,g,h){f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=i;i=i+48|0;A=E;B=E+8|0;C=Dq(f,2)|0;y=f*176|0;D=Bq(y)|0;do if((C|0)!=0&(D|0)!=0){m=0;j=0;while(1){if((m|0)>=(f|0))break;b[g+(m*176|0)+106>>1]=m;do if(!(a[g+(m*176|0)+1>>0]|0)){k=g+(m*176|0)|0;l=lp(86646,a[k>>0]|0,4)|0;l=l|0?l-86646|0:4;if((l+-1|0)>>>0>=2){if((l|0)==4){k=0;break}}else{a[k>>0]=72;a[g+(m*176|0)+98>>0]=l+1}if((a[g+(m*176|0)+92>>0]|0)==1?(a[g+(m*176|0)+93>>0]|0)==1:0)k=(a[g+(m*176|0)+94>>0]|0)==(0-((a[g+(m*176|0)+95>>0]|0)+(a[g+(m*176|0)+96>>0]|0)+(a[g+(m*176|0)+97>>0]|0))|0);else k=0}else k=0;while(0);m=m+1|0;j=(k&1)+j|0}if(((f|0)==2&(j|0)==2?(x=b[g+94>>1]|0,((x&65535)<<24>>24|0)==(0-((((x&65535)>>>8&65535)<<24>>24)+(a[g+96>>0]|0)+(a[g+97>>0]|0))|0)):0)?(x=b[g+270>>1]|0,((x&65535)<<24>>24|0)==(0-((((x&65535)>>>8&65535)<<24>>24)+(a[g+272>>0]|0)+(a[g+273>>0]|0))|0)):0){if((a[g+98>>0]|0)<(a[g+274>>0]|0)){b[C>>1]=1;m=0;l=1}else{b[C+2>>1]=1;m=1;l=0}j=g+(m*176|0)+99|0;k=a[j>>0]|0;if(!(k<<24>>24))j=l&65535;else{x=l&65535;w=g+(x*176|0)+99|0;a[w>>0]=(d[w>>0]|0)+(k&255);a[j>>0]=0;j=x}ir(D+(j*176|0)|0,g|0,176)|0;ir(D+(m*176|0)|0,g+176|0,176)|0;j=1}else{n=(h|0)!=0;o=0;k=0;while(1){if((o|0)>=(f|0))break;j=g+(o*176|0)|0;do if((((((a[g+(o*176|0)+1>>0]|0)==0?(a[g+(o*176|0)+94>>0]|0)==(0-((a[g+(o*176|0)+95>>0]|0)+(a[g+(o*176|0)+96>>0]|0)+(a[g+(o*176|0)+97>>0]|0))|0):0)?(a[j>>0]|0)==72:0)?(a[g+(o*176|0)+98>>0]|0)<4:0)?(a[g+(o*176|0)+92>>0]|0)==1:0)?(a[g+(o*176|0)+93>>0]|0)==1:0){h=e[g+(o*176|0)+8>>1]|0;if((h|0)<=(o|0)?(e[C+(h<<1)>>1]|0)>=(f-k|0):0){q=35;break}k=k+1|0;l=g+(o*176|0)+99|0;m=a[l>>0]|0;if(m<<24>>24?(p=g+(h*176|0)+99|0,a[p>>0]=(d[p>>0]|0)+(m&255),a[l>>0]=0,n&(o|0)>(h|0)):0)a[D+((e[C+(h<<1)>>1]|0)*176|0)+99>>0]=a[p>>0]|0;l=f-k|0;b[C+(o<<1)>>1]=l}else q=35;while(0);if((q|0)==35){q=0;l=o-k|0;b[C+(o<<1)>>1]=l}ir(D+((l&65535)*176|0)|0,j|0,176)|0;o=o+1|0}if(!k){j=f;break}j=f-k|0;if((k|0)>1)Np(D+(j*176|0)|0,k,176,8)}k=j;while(1){if((k|0)>=(f|0))break;b[C+(e[D+(k*176|0)+106>>1]<<1)>>1]=k;k=k+1|0}x=0;while(1){if((x|0)>=(j|0))break;k=A;c[k>>2]=0;c[k+4>>2]=0;k=B;l=k+40|0;do{b[k>>1]=0;k=k+2|0}while((k|0)<(l|0));w=D+(x*176|0)+92|0;v=D+(x*176|0)+152|0;r=D+(x*176|0)+93|0;s=x&65535;t=D+(x*176|0)+94|0;u=0;f=0;m=0;k=0;p=0;while(1){l=a[w>>0]|0;if((u|0)>=(l|0)){q=m;break}o=D+(x*176|0)+8+(u<<1)|0;l=b[C+(e[o>>1]<<1)>>1]|0;q=l&65535;a:do if((j|0)<=(q|0)){o=D+(q*176|0)+98|0;l=a[o>>0]|0;if((l+-1&255)<3){h=(l<<24>>24)+-1+(D+(x*176|0)+95)|0;a[h>>0]=(a[h>>0]|0)+1<<24>>24;h=A+(a[o>>0]<<1)|0;l=(b[h>>1]|0)==0&1;b[h>>1]=u+1;h=f}else{a[t>>0]=(a[t>>0]|0)+1<<24>>24;b[A>>1]=u+1;l=(f|0)==0&1;h=f+1|0}n=l+m|0;f=a[r>>0]|0;a[r>>0]=f<<24>>24<1?0:(f&255)+255&255;b[D+(q*176|0)+8>>1]=s;if(!(a[v>>0]|0)){m=n;l=p}else{m=0;while(1){if((m|0)>=3){m=n;l=p;break a}if(!(a[D+(x*176|0)+152+m>>0]|0)){m=n;l=p;break a}l=D+(x*176|0)+149+m|0;if((u|0)==(a[l>>0]|0))a[l>>0]=d[o>>0]^255;m=m+1|0}}}else{if(a[v>>0]|0){if((k|0)<3)b[B+(k<<1)>>1]=u+1;k=k+1|0;if((p|0)!=(u|0)){h=p&255;n=0;while(1){if((n|0)>=3)break;if(!(a[D+(x*176|0)+152+n>>0]|0))break;l=D+(x*176|0)+146+n|0;if((u|0)!=(a[l>>0]|0)){l=D+(x*176|0)+149+n|0;if((u|0)==(a[l>>0]|0))a[l>>0]=h}else a[l>>0]=h;n=n+1|0}l=b[C+(e[o>>1]<<1)>>1]|0}}b[D+(x*176|0)+8+(p<<1)>>1]=l;a[D+(x*176|0)+72+p>>0]=a[D+(x*176|0)+72+u>>0]|0;a[D+(x*176|0)+52+p>>0]=a[D+(x*176|0)+52+u>>0]|0;h=f;l=p+1|0}while(0);u=u+1|0;f=h;p=l}if(((l|0)>(p|0)?(q|0)==(l-p|0)&(a[v>>0]|0)!=0:0)?(z=q+k|0,(z|0)<21):0){jr(B+(q<<1)|0,B|0,k<<1|0)|0;k=1;o=0;while(1){if((o|0)==4)break;l=b[A+(o<<1)>>1]|0;if(l<<16>>16){b[B+(q-k<<1)>>1]=l;l=~o;m=0-k&255;n=0;while(1){if((n|0)>=3)break;if(!(a[D+(x*176|0)+152+n>>0]|0))break;h=D+(x*176|0)+149+n|0;if((a[h>>0]|0)==(l|0))a[h>>0]=m;n=n+1|0}k=k+1|0}o=o+1|0}lh(B,z)|0}a[w>>0]=p;x=x+1|0}ir(g|0,D|0,y|0)|0}else j=-1;while(0);Cq(C);Cq(D);i=E;return j|0}function En(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;h=c[22881]|0;if(!h){c[22881]=$n(86650)|0;c[22882]=$n(86667)|0;c[22883]=$n(86669)|0;c[22884]=$n(86690)|0;c[22885]=$n(86671)|0;c[22886]=$n(86692)|0;c[22887]=$n(86743)|0;c[22888]=$n(86796)|0;c[22889]=$n(86673)|0;c[22890]=$n(86694)|0;c[22891]=$n(86746)|0;c[22892]=$n(86799)|0;s=c[22881]|0}else s=h;t=f;u=0;m=0;i=0;h=0;while(1){if((u|0)>=(g|0))break;l=b[t+98>>1]|0;n=l&255;l=(l&65535)>>>8&255;if(!(n<<24>>24))j=((a[t+96>>0]|0)+(a[t+95>>0]|0)|0)!=(0-(a[t+97>>0]|0)|0);else j=1;h=(j&1)+h|0;k=d[t+6>>0]|0;j=0;while(1){if((j|0)>=12){k=m;break}if((c[91524+(j<<2)>>2]|0)==(k|0)){w=11;break}j=j+1|0}a:do if((w|0)==11){w=0;if(((j|0)>=0?(v=l<<24>>24,((l<<24>>24>-1?v:0-v|0)|0)<=1):0)?(d[t+100>>0]|0)<2:0){switch(j|0){case 3:case 2:{j=v+3|0;w=19;break}case 7:case 6:case 5:case 4:{j=v+2|0;w=19;break}case 11:case 10:case 9:case 8:{if(!(l<<24>>24)){k=m;j=1}else{k=m;break a}break}case 0:{if(l<<24>>24==1&(a[t+92>>0]|0)==0){k=1;j=0}else{k=m;break a}break}default:{k=m;break a}}if((w|0)==19){w=0;if((j|0)<0){k=m;break}else k=m}p=b[t+94>>1]|0;q=a[t+96>>0]|0;r=a[t+97>>0]|0;if((j|0)==((((p&65535)>>>8&65535)<<24>>24)+((p&65535)<<24>>24)+q+r+(a[t+93>>0]|0)|0)){b:do if(!k){p=c[t+92>>2]|0;o=p<<24>>24;j=0;n=0;while(1){if((n|0)>=(o|0)){l=j;break}m=e[t+8+(n<<1)>>1]|0;if(a[f+(m*176|0)+99>>0]|0)if(!(l<<24>>24))l=0;else{m=0;break b}if((d[f+(m*176|0)+100>>0]|0)>=2){m=0;break b}if((d[f+(m*176|0)+6>>0]|0)==(s|0)?(a[f+(m*176|0)+92>>0]|0)==1:0)j=((a[f+(m*176|0)+98>>0]|0)!=0&1)+j|0;n=n+1|0}m=1;j=(p>>24)+l+q+r|0;h=h-l|0}else{m=1;j=n<<24>>24!=0&1}while(0);i=(m&(j|0)!=0&1)+i|0}}else k=m}while(0);t=t+176|0;u=u+1|0;m=k}return (h|0?2:0)|(i|0)!=0|0}function Fn(a,c){a=a|0;c=c|0;var d=0,f=0;d=b[a>>1]|0;f=b[c>>1]|0;if(f<<16>>16==d<<16>>16)d=(e[a+2>>1]|0)-(e[c+2>>1]|0)|0;else d=(f&65535)-(d&65535)|0;return d|0}function Gn(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;u=c[d>>2]|0;v=c[d+12>>2]|0;if(!f)s=0;else s=(c[d+32>>2]|0)==0?0:f;if(!v)f=0;else{w=Dq(v,2)|0;do if(!w){f=0;g=0;x=53}else{o=Dq(v,2)|0;if(o|0?(p=Dq(v,1)|0,p|0):0){n=0;f=0;while(1){if((n|0)>=(v|0)){k=f;break}g=w+(n<<1)|0;a:do if(!(b[g>>1]|0)){f=f+1|0;m=f&65535;b[g>>1]=m;l=n;while(1){i=p+l|0;j=a[u+(l*176|0)+92>>0]|0;k=a[i>>0]|0;while(1){if(k<<24>>24>=j<<24>>24)break;h=k;k=k+1<<24>>24;a[i>>0]=k;h=e[u+(l*176|0)+8+(h<<24>>24<<1)>>1]|0;g=w+(h<<1)|0;if(!(b[g>>1]|0)){x=13;break}}if((x|0)==13){x=0;b[g>>1]=m;b[o+(h<<1)>>1]=l;l=h;continue}if((l|0)==(n|0))break a;l=e[o+(l<<1)>>1]|0}}while(0);n=n+1|0}Cq(o);Cq(p);f=c[d+16>>2]|0;i=k+1|0;h=Dq(i,2)|0;if(!h){f=h;g=0;x=53;break}g=Dq(((k|0)>(f|0)?k:f)+1|0,2)|0;if(!g){f=h;x=53;break}t=Dq(i,6)|0;b:do if(!t)f=-1;else{f=0;while(1){if((f|0)>=(k|0)){f=0;break}b[t+(f*6|0)+2>>1]=f;f=f+1|0}while(1){if((f|0)>=(v|0))break;r=t+(((e[w+(f<<1)>>1]|0)+-1|0)*6|0)|0;b[r>>1]=(b[r>>1]|0)+1<<16>>16;f=f+1|0}Np(t,k,6,9);f=0;while(1){if((f|0)>=(k|0))break;b[h+(f<<1)>>1]=b[t+(f*6|0)>>1]|0;r=f+1|0;b[t+((e[t+(f*6|0)+2>>1]|0)*6|0)+4>>1]=r;f=r}q=v+1|0;r=q&65535;n=(s|0)==0;p=0;while(1){if((p|0)>=(v|0))break;o=b[t+(((e[w+(p<<1)>>1]|0)+-1|0)*6|0)+4>>1]|0;c:do if(!n){f=u+(p*176|0)+106|0;l=b[f>>1]|0;i=g+((o&65535)+-1<<1)|0;if(!(l<<16>>16)){b[i>>1]=r;break}m=b[i>>1]|0;if(m<<16>>16!=l<<16>>16){if(!(m<<16>>16)){b[i>>1]=l;break}else j=0;while(1){if((j|0)>=(k|0))break c;i=g+(j<<1)|0;s=b[i>>1]|0;if(s<<16>>16==l<<16>>16?1:s<<16>>16==m<<16>>16)b[i>>1]=r;j=j+1|0}}}else f=u+(p*176|0)+106|0;while(0);b[f>>1]=o;p=p+1|0}if(n){f=0;while(1){if((f|0)>=(k|0)){f=k;break b}v=f+1|0;b[g+(f<<1)>>1]=v;f=v}}f=q&65535;i=d+32|0;n=0;while(1){if((n|0)>=(k|0)){f=k;break b}j=g+(n<<1)|0;l=b[j>>1]|0;m=l&65535;if((m|0)!=(f|0)){if(l<<16>>16?(b[(c[i>>2]|0)+(m+-1<<1)>>1]|0)==0:0)b[j>>1]=0}else b[j>>1]=0;n=n+1|0}}while(0);Cq(w);Cq(t);if((f|0)<0){x=55;break}else{l=h;break}}Cq(w);Cq(o);l=0;g=0;k=-1;f=-1}while(0);if((x|0)==53){Cq(w);h=f;f=-1;x=55}if((x|0)==55){if(h|0)Cq(h);if(!g){l=0;g=0;k=f}else{Cq(g);l=0;g=0;k=f}}j=d+28|0;h=c[j>>2]|0;if(h|0)Cq(h);h=d+32|0;i=c[h>>2]|0;if(i|0)Cq(i);c[j>>2]=l;c[h>>2]=g;c[d+16>>2]=k}return f|0}function Hn(c,d,f,g){c=c|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;j=Dq(d,2)|0;if(!j)h=-30002;else{i=0;h=0;while(1){if((i|0)>=(d|0))break;if((e[c+(i*176|0)+106>>1]|0)==(f|0)){b[j+(i<<1)>>1]=h;ir(g+(h*176|0)|0,c+(i*176|0)|0,176)|0;h=h+1|0}i=i+1|0}i=0;a:while(1){if((i|0)>=(h|0))break;c=i+1|0;b[g+(i*176|0)+50>>1]=c;f=g+(i*176|0)+92|0;d=0;while(1){if((d|0)>=(a[f>>0]|0)){i=c;continue a}k=g+(i*176|0)+8+(d<<1)|0;b[k>>1]=b[j+(e[k>>1]<<1)>>1]|0;d=d+1|0}}Cq(j)}return h|0}function In(a,c,d){a=a|0;c=c|0;d=d|0;var e=0;d=d&65535;e=0;while(1){if((e|0)>=(c|0))break;b[a+(e*176|0)+106>>1]=d;e=e+1|0}return 0}function Jn(a){a=a|0;var b=0,d=0;if(a|0){b=a+4|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+8|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+12|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+16|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+32|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+36|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+40|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}}return 0}function Kn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=Dq(1,44)|0;do if(!d)d=0;else{if(a){f=Dq(a,2)|0;c[d+4>>2]=f;if(((f|0?(f=Dq(a,1)|0,c[d+8>>2]=f,f|0):0)?(f=Dq(a,2)|0,c[d+12>>2]=f,f|0):0)?(f=Dq(a,1)|0,c[d+16>>2]=f,f|0):0)e=7}else e=7;if((e|0)==7){if(!b)break;f=Dq(b,2)|0;c[d+32>>2]=f;if((f|0?(f=Dq(b,2)|0,c[d+36>>2]=f,f|0):0)?(f=Dq(b,1)|0,c[d+40>>2]=f,f|0):0)break}Jn(d)|0;Cq(d);d=0}while(0);return d|0}function Ln(a){a=a|0;var b=0,d=0,e=0;b=c[a>>2]|0;if(b){e=b+80|0;d=c[e>>2]|0;c[e>>2]=d+-1;if((d|0)>0)b=1;else{Mn(b)|0;Cq(b);c[a>>2]=0;b=0}}else b=0;return b|0}function Mn(a){a=a|0;var b=0,d=0,e=0,f=0;if(a|0){e=a+64|0;Jn(c[e>>2]|0)|0;f=a+68|0;Jn(c[f>>2]|0)|0;b=a+20|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+28|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+36|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+40|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+44|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+52|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+60|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=a+72|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=c[e>>2]|0;if(b|0){Cq(b);c[e>>2]=0}b=c[f>>2]|0;if(b|0){Cq(b);c[f>>2]=0}b=a+16|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}}return 0}function Nn(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+16|0;p=r;m=g&4;a:do if((d|0)>=1?(n=Dq(1,88)|0,c[p>>2]=n,(n|0)!=0):0){j=0;g=0;k=0;while(1){if((j|0)==(d|0))break;g=(a[b+(j*176|0)+92>>0]|0)+g|0;if(((((a[b+(j*176|0)+98>>0]|0)==0?(l=b+(j*176|0)|0,(kp(l,86652)|0)!=0):0)?(kp(l,86654)|0)!=0:0)?(a[b+(j*176|0)+95>>0]|0)==0:0)?(a[b+(j*176|0)+96>>0]|0)==0:0)h=(a[b+(j*176|0)+97>>0]|0)!=0;else h=1;j=j+1|0;k=(h&1)+k|0}j=(g|0)/2|0;c[e>>2]=j;c[f>>2]=k;f=Dq(d,1)|0;c[n+20>>2]=f;do if(f){f=Dq(j+d|0,2)|0;g=c[p>>2]|0;c[g+28>>2]=f;if(f){f=Dq(((d*5|0)/2|0)+1|0,2)|0;c[g+36>>2]=f;if((f|0?(f=Dq(d,1)|0,c[g+40>>2]=f,f|0):0)?(f=Dq(d,1)|0,c[g+44>>2]=f,f|0):0){c[g+16>>2]=0;h=(m|0)!=0;if(h){if(k|0){f=Dq(k,10)|0;c[g+52>>2]=f;if(!f)break;f=Dq(k,8)|0;c[g+60>>2]=f;if(!f)break}f=Dq(d+1|0,2)|0;c[g+72>>2]=f;if(!f)break}f=Kn(d,j)|0;c[g+64>>2]=f;if(f|0){if(!h)break a;d=Kn(d,j)|0;c[g+68>>2]=d;if(d|0)break a}}}else{o=g;q=25}}else{o=c[p>>2]|0;q=25}while(0);if((q|0)==25?(o|0)==0:0){g=0;break}Ln(p)|0;g=0}else g=0;while(0);i=r;return g|0}function On(a){a=a|0;var b=0,d=0,e=0;e=c[a>>2]|0;if(e){b=e+52|0;d=c[b>>2]|0;c[b>>2]=d+-1;if((d|0)>0)b=1;else{b=e+20|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}d=e+24|0;b=c[d>>2]|0;if(b|0){Cq(b);c[d>>2]=0}b=e+28|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=e+32|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=e+60|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=e+56|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=e+36|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=e+40|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=e+44|0;d=c[b>>2]|0;if(d|0){Cq(d);c[b>>2]=0}b=c[e+48>>2]|0;if(b|0)Cq(b);Cq(e);c[a>>2]=0;b=0}}else b=0;return b|0}function Pn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;n=i;i=i+16|0;l=n;g=d&4;h=(a|0)/2|0;j=h+a|0;a:do if((a|0)>=1?(f=Dq(92,1)|0,c[l>>2]=f,(f|0)!=0):0){d=Dq(2,j)|0;c[f+20>>2]=d;do if(d){f=Dq(2,j)|0;d=c[l>>2]|0;c[d+28>>2]=f;if(f){f=Dq(2,j)|0;c[d+36>>2]=f;if(f|0){f=(a|0)>1;if(f?(o=Dq(2,h+1|0)|0,c[d+40>>2]=o,(o|0)==0):0)break;o=Dq(3,a)|0;c[d+56>>2]=o;if(o|0){if(e|0?(o=Dq(32,a)|0,c[d+60>>2]=o,(o|0)==0):0)break;if(!g)break a;o=Dq(2,j)|0;c[d+24>>2]=o;if((o|0)!=0?(o=Dq(2,j)|0,c[d+32>>2]=o,(o|0)!=0):0){o=Dq(2,j)|0;c[d+44>>2]=o;if((b|0)!=0&(o|0)==0)break}else m=16;if((m|0)==16?b|0:0)break;o=Dq(2,h+1|0)|0;c[d+48>>2]=o;if(!(f&(b|0)!=0&(o|0)==0))break a}}}else{k=d;m=18}}else{k=c[l>>2]|0;m=18}while(0);if((m|0)==18?(k|0)==0:0){d=0;break}On(l)|0;d=0}else d=0;while(0);i=n;return d|0}function Qn(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,h=0;a:do if((b|0)!=0&(d|0)!=0){f=a+4|0;g=0;while(1){if((g|0)>=(c[f>>2]|0))break a;h=e[(c[a>>2]|0)+(g*176|0)+48>>1]|0;c[b+(g<<2)>>2]=h;c[d+(h<<2)>>2]=g;g=g+1|0}}while(0);return}function Rn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=Dq(a,4)|0;c[d>>2]=e;a:do if(!e)e=1;else{f=0;while(1){if((f|0)>=(a|0)){e=0;break a}c[e+(f<<2)>>2]=Dq(b,4)|0;e=c[d>>2]|0;if(!(c[e+(f<<2)>>2]|0)){e=1;break}else f=f+1|0}}while(0);return e|0}function Sn(a,b){a=a|0;b=b|0;var d=0,e=0;if(b|0){e=0;while(1){if((e|0)>=(a|0))break;d=c[b+(e<<2)>>2]|0;if(d|0)Cq(d);e=e+1|0}Cq(b)}return}function Tn(b,f,g,h,i){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;h=Dq(1,20)|0;a:do if(!h)h=0;else{j=c[b+12>>2]|0;k=Dq(j+1|0,4)|0;r=h+12|0;c[r>>2]=k;b:do if((k|0?(l=Dq(f,4)|0,c[h+4>>2]=l,l|0):0)?(q=Dq(f,4)|0,s=h+8|0,c[s>>2]=q,q|0):0){c[h>>2]=0;i=0;while(1){if((i|0)>=(f|0)){i=0;break}p=c[g+(i<<2)>>2]|0;q=c[h>>2]|0;c[h>>2]=q+1;c[l+(q<<2)>>2]=p;i=i+1|0}while(1){if((i|0)>(j|0)){i=0;break}c[k+(i<<2)>>2]=-1;i=i+1|0}while(1){if((i|0)>=(f|0))break;c[k+(c[l+(i<<2)>>2]<<2)>>2]=i;i=i+1|0}i=Dq(f,4)|0;q=h+16|0;c[q>>2]=i;if(i|0){p=0;while(1){if((p|0)>=(c[h>>2]|0))break a;n=(c[g+(p<<2)>>2]|0)+-1|0;o=a[(c[b>>2]|0)+(n*176|0)+92>>0]|0;c[i+(p<<2)>>2]=Dq(o,8)|0;i=c[q>>2]|0;f=c[i+(p<<2)>>2]|0;if(!f)break b;else{m=0;j=-1}while(1){if((m|0)>=(o|0))break;k=c[b>>2]|0;l=c[(c[r>>2]|0)+((e[k+(n*176|0)+8+(m<<1)>>1]|0)+1<<2)>>2]|0;if((l|0)>=0){j=j+1|0;c[f+(j<<3)>>2]=l;c[f+(j<<3)+4>>2]=d[k+(n*176|0)+72+m>>0]}m=m+1|0}c[(c[s>>2]|0)+(p<<2)>>2]=j+1;p=p+1|0}}}while(0);Un(h)}while(0);return h|0}function Un(a){a=a|0;var b=0,d=0,e=0,f=0;if(a|0){b=c[a+4>>2]|0;if(b|0)Cq(b);b=c[a+8>>2]|0;if(b|0)Cq(b);b=c[a+12>>2]|0;if(b|0)Cq(b);f=a+16|0;b=c[f>>2]|0;if(b|0){e=0;while(1){if((e|0)>=(c[a>>2]|0))break;d=c[b+(e<<2)>>2]|0;if(d){Cq(d);b=c[f>>2]|0}e=e+1|0}if(b|0)Cq(b)}Cq(a)}return}function Vn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=Dq(1,28)|0;if((b|0)!=0?(c[b>>2]=a,c[b+4>>2]=d,c[b+8>>2]=e,d=Dq(c[a>>2]|0,4)|0,c[b+24>>2]=d,(d|0)==0):0){Cq(b);b=0}return b|0}function Wn(a){a=a|0;var b=0;if(a|0){b=c[a+24>>2]|0;if(b|0)Cq(b);Cq(a)}return}function Xn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=a+20|0;e=c[j>>2]|0;a:do if((e|0)>=1){k=a+24|0;h=c[(c[k>>2]|0)+(e+-1<<2)>>2]|0;i=a+8|0;f=0;while(1){e=c[a>>2]|0;if((f|0)>=(c[(c[e+8>>2]|0)+(h<<2)>>2]|0)){f=0;break}e=c[(c[(c[e+16>>2]|0)+(h<<2)>>2]|0)+(f<<3)>>2]|0;if((no(c[k>>2]|0,e,c[j>>2]|0)|0)==0?(e|0)==(c[i>>2]|0):0){g=6;break}f=f+1|0}if((g|0)==6){f=c[j>>2]|0;c[j>>2]=f+1;c[(c[k>>2]|0)+(f<<2)>>2]=e;f=1;while(1){e=c[j>>2]|0;if((f|0)>=(e|0))break;g=c[k>>2]|0;Yn(a,c[g+(f+-1<<2)>>2]|0,c[g+(f<<2)>>2]|0,b,d);f=f+1|0}c[(c[k>>2]|0)+(e+-1<<2)>>2]=0;c[j>>2]=(c[j>>2]|0)+-1;f=0}while(1){e=c[a>>2]|0;if((f|0)>=(c[(c[e+8>>2]|0)+(h<<2)>>2]|0))break a;e=c[(c[(c[e+16>>2]|0)+(h<<2)>>2]|0)+(f<<3)>>2]|0;if((e|0)!=(c[i>>2]|0)?(no(c[k>>2]|0,e,c[j>>2]|0)|0)==0:0){g=c[j>>2]|0;c[j>>2]=g+1;c[(c[k>>2]|0)+(g<<2)>>2]=e;Xn(a,b,d);c[(c[k>>2]|0)+((c[j>>2]|0)+-1<<2)>>2]=0;c[j>>2]=(c[j>>2]|0)+-1}f=f+1|0}}while(0);return}function Yn(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=c[(c[a>>2]|0)+4>>2]|0;a=c[g+(b<<2)>>2]|0;b=c[g+(d<<2)>>2]|0;g=(a|0)>(b|0);d=g?b:a;b=g?a:b;a=c[e>>2]|0;g=0;while(1){if((g|0)>=(a|0)){h=6;break}i=c[f+(g<<2)>>2]|0;if((c[i>>2]|0)==(d|0)?(c[i+4>>2]|0)==(b|0):0)break;g=g+1|0}if((h|0)==6){c[c[f+(a<<2)>>2]>>2]=d;c[(c[f+(c[e>>2]<<2)>>2]|0)+4>>2]=b;c[e>>2]=(c[e>>2]|0)+1}return}function Zn(b,d){b=b|0;d=d|0;b=((b|0)>1?1:-1)+b|0;if(b>>>0<121){vp(d,c[8+(b<<6)>>2]|0)|0;b=0}else{a[d>>0]=a[86997]|0;a[d+1>>0]=a[86998]|0;a[d+2>>0]=a[86999]|0;b=-1}return b|0}function _n(b){b=b|0;var d=0,e=0,f=0;d=0;while(1){f=c[8+(d<<6)>>2]|0;e=a[f>>0]|0;if(!(e<<24>>24))break;if(!(kp(f,b)|0))break;d=d+1|0}return (e<<24>>24?d:255)|0}function $n(a){a=a|0;a=_n(a)|0;if((a|0)<255){a=a+-1|0;a=(a|0)<1?1:a}return a|0}function ao(b,c,d){b=b|0;c=c|0;d=d|0;c=c+2|0;if(c>>>0>4|(d|0)>4)c=0;else c=a[8+(((b|0)>1?b+1|0:0)<<6)+36+(c*5|0)+d>>0]|0;return c|0}function bo(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;do if(f|e){if((b+2|0)>>>0>4){d=(d|0)==(f|0)?0:d;break}if(!((d|0)==(f|0)&(ao(a,b,0)|0)==0)){h=e+d|0;g=(c|0)==2?1:(c|0)==3?2:0;c=0;d=0;while(1){if((c|0)>=5){e=0;break}e=(ao(a,b,c)|0)-g|0;if(!((e|0)>(h|0)|((e|0)<1|(e|0)<(f|0)))){d=d+1|0;if((e|0)==(h|0)){e=1;break}}c=c+1|0}d=e&(d|0)==1?0:h}else d=0}else d=0;while(0);return d|0}function co(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0;m=i;i=i+16|0;j=m;if((h|0)!=0?(Zn(a,j)|0)!=-1:0)h=eo(j,0,0,b,d,f,0,0,0,0)|0;else h=g;l=g+e|0;if(((b+2|0)>>>0<=4?(ao(a,b,0)|0)!=0:0)?(h|0)==(g|0)&((e|0)==(f|0)?(c[8+(((a|0)>1?a+1|0:0)<<6)+32>>2]|0)==0:0):0){d=(d|0)==2?1:(d|0)==3?2:0;g=0;j=0;h=0;while(1){if((g|0)>=5){f=0;break}f=ao(a,b,g)|0;if((f|0)>0?(k=f-d|0,(k|0)>=(e|0)):0){h=h+1|0;j=((k|0)<=(l|0)&1)+j|0;if((k|0)==(l|0)){f=1;break}}g=g+1|0}h=(h|0)==1&((j|0)==1&f)?0:l|0?l:-1}else h=(e|0)==(f|0)&(h|g|0)==0?0:l;i=m;return h|0}function eo(b,d,e,f,g,h,i,j,k,l){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0;m=c[22893]|0;if(!m){o=_n(86669)|0;c[22893]=o;c[22894]=_n(86692)|0;c[22895]=_n(86667)|0}else o=m;do if(!j){if(i|0){if(!((h|0)!=0|(i|0)!=15)){d=0;break}d=i-h|0;d=(d|0)<0?0:d;break}n=f+2|0;if((n>>>0<5?(p=_n(b)|0,(p|0)!=255):0)?(c[8+(p<<6)+32>>2]|k|0)==0:0){if(g>>>0>1){f=a[8+(p<<6)+36+(n*5|0)>>0]|0;i=f<<24>>24;if(!(f<<24>>24))m=0;else{if((g|0)==2)m=1;else m=(g|2|0)==3?2:i;m=i-m-h|0;m=(m|0)<0?0:m}}else{j=0;while(1){i=a[8+(p<<6)+36+(n*5|0)+j>>0]|0;m=i<<24>>24;if(i<<24>>24!=0&(m|0)<(h|0))j=j+1|0;else break}g=(g|f|0)==0;if(!(i<<24>>24==5&(g&(p|0)==(o|0)))?!((h|0)==3&(i<<24>>24==4&(g&(p|0)==(c[22894]|0)))):0){if(l)m=((i<<24>>24>0&(p|0)!=(c[22895]|0))<<31>>31)+m|0}else m=3;m=m-h|0;m=(m|0)<0?0:m}if(e){j=0;i=0;while(1){if((j|0)==3)break;h=(a[e+j>>0]|0)+i|0;j=j+1|0;i=h}if(i)m=(m|0)<(i|0)?d:m-i|0}return ((m|0)<(d|0)?d:m)|0}}while(0);return d|0}function fo(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;a:do if(f|e){if((b+2|0)>>>0>4){d=(d|0)==(f|0)?0:d;break}if(!((d|0)==(f|0)&(ao(a,b,0)|0)==0)){d=e+d|0;if((c|0)==2)f=1;else f=(c|2|0)==3?2:0;e=0;while(1){if((e|0)>=5)break a;c=(ao(a,b,e)|0)-f|0;if((c|0)>0&(c|0)==(d|0)){d=0;break}else e=e+1|0}}else d=0}else d=0;while(0);return d|0}function go(a){a=a|0;return c[8+(a+1<<6)+24>>2]|0}function ho(a){a=a|0;return (c[8+(a+1<<6)+24>>2]&3|0)!=0|0}function io(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+16|0;o=q;j=0;h=0;m=1;f=0;while(1){n=ep(b,87e3)|0;if(!n)break;g=a[n>>0]|0;switch(g<<24>>24|0){case 45:case 43:{l=0;j=0;while(1){k=g<<24>>24==43;if(!k){g=g<<24>>24==45;if(g)k=g<<31>>31;else{g=l;break}}else k=k&1;m=l+1|0;g=a[n+m>>0]|0;l=m;m=k;j=k+j|0}g=Rp(n+g|0,o,10)|0;if(!g)g=j;else g=(_(g+-1|0,m)|0)+j|0;j=(c[o>>2]|0)-n|0;h=g+h|0;g=m;break}case 94:{f=1;while(1)if(g<<24>>24==(a[n+f>>0]|0))f=f+1|0;else{j=f;g=m;break}break}default:g=m}m=n+j|0;jr(n|0,m|0,(cp(m)|0)+1|0)|0;m=g}g=pp(b,58)|0;if((g|0)!=0?(a[g+1>>0]|0)==0:0){a[g>>0]=0;f=1}else p=15;if((p|0)==15){while(1){g=pp(b,46)|0;if(!g)break;if(a[g+1>>0]|0)break;a[g>>0]=0;f=f+1|0;p=15}f=(f|0)==1?2:(f|0)==2?3:0}c[d>>2]=f;c[e>>2]=h;i=q;return (f|h|0)!=0|0}function jo(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+16|0;p=q;o=b;g=b;m=0;j=cp(b)|0;f=0;while(1){if((m|0)>=(j|0))break;switch(d[g>>0]|0|0){case 72:{k=0;n=7;break}case 68:{k=1;n=7;break}case 84:{k=2;n=7;break}default:{c[p>>2]=b+m+1;n=14}}if((n|0)==7){n=0;l=b+m|0;g=l+1|0;c[p>>2]=g;h=d[g>>0]|0;if(!(_p(h)|0)){if((h+-48|0)>>>0<10)g=Rp(g,p,10)|0;else g=1;if(!k)f=g+f|0;else{k=e+k|0;a[k>>0]=(d[k>>0]|0)+g}h=c[p>>2]|0;j=m+o+j-h|0;jr(l|0,h|0,j+1|0)|0;h=m}else n=14}if((n|0)==14)h=m+1|0;g=b+h|0;m=h}i=q;return f|0}function ko(a){a=a|0;a=((a|0)>1?1:-1)+a|0;if(a>>>0<121)a=c[8+(a<<6)+4>>2]|0;else a=0;return a|0}function lo(a){a=a|0;a=_n(a)|0;if((a|0)==255)a=0;else a=c[8+(a<<6)+4>>2]|0;return a|0}function mo(a,c,d){a=a|0;c=c|0;d=d|0;while(1){if(!d){a=0;break}if((b[a>>1]|0)==c<<16>>16)break;d=d+-1|0;a=a+2|0}return a|0}function no(a,b,d){a=a|0;b=b|0;d=d|0;while(1){if(!d){a=0;break}if((c[a>>2]|0)==(b|0))break;d=d+-1|0;a=a+4|0}return a|0}function oo(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=0;a:while(1){if((i|0)>=(b|0)){f=1;break}h=c[a+(i<<2)>>2]|0;f=e;g=d;while(1){if(!f){f=0;break a}if((c[g>>2]|0)==(h|0))break;f=f+-1|0;g=g+4|0}i=i+1|0}return f|0}function po(b,f){b=b|0;f=f|0;var g=0,h=0,i=0,j=0;i=a[b+(f*176|0)+92>>0]|0;j=0;g=0;while(1){if((j|0)>=(i|0))break;if(c[8+((d[b+((e[b+(f*176|0)+8+(j<<1)>>1]|0)*176|0)+6>>0]|0)+1<<6)+24>>2]&3){h=a[b+(f*176|0)+72+j>>0]|0;if((h&255)>=4){g=-1;break}g=(h&255)+g|0}j=j+1|0}return g|0}function qo(b,f){b=b|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=c[22896]|0;if(!g){g=$n(86650)|0;c[22896]=g}i=a[b+(f*176|0)+92>>0]|0;j=0;k=0;while(1){if((j|0)>=(i|0)){g=k;break}h=e[b+(f*176|0)+8+(j<<1)>>1]|0;if((a[b+(h*176|0)+92>>0]|0)==1)h=(g|0)==(d[b+(h*176|0)+6>>0]|0);else h=0;j=j+1|0;k=(h&1)+k|0}return (a[b+(f*176|0)+94>>0]|0)+g+(a[b+(f*176|0)+95>>0]|0)+(a[b+(f*176|0)+96>>0]|0)+(a[b+(f*176|0)+97>>0]|0)|0}function ro(b,c,f,g,h){b=b|0;c=c|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0;i=a[b+(f*176|0)+99>>0]|0;j=a[b+(c*176|0)+92>>0]|0;l=0;while(1){if((l|0)>=(j|0)){i=0;break}k=e[b+(c*176|0)+8+(l<<1)>>1]|0;if(((k|0)!=(f|0)?(a[b+(k*176|0)+99>>0]|0)==i<<24>>24:0)?lp(g,d[b+(k*176|0)+6>>0]|0,h)|0:0){i=1;break}l=l+1|0}return i|0}function so(c,f,g,h,j){c=c|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=i;i=i+32|0;w=x;b[w>>1]=f;a[c+(f*176|0)+102>>0]=1;u=c+(g*176|0)+99|0;v=1;f=0;l=1;k=0;while(1){if((v|0)==3)break;else m=l;while(1){if((f|0)>=(l|0)){l=m;break}r=e[w+(f<<1)>>1]|0;s=a[c+(r*176|0)+92>>0]|0;t=0;while(1){if((t|0)>=(s|0))break;n=b[c+(r*176|0)+8+(t<<1)>>1]|0;q=n&65535;o=c+(q*176|0)+102|0;if(((a[o>>0]|0)==0?(a[c+(q*176|0)+92>>0]|0)<4:0)?(lp(h,d[c+(q*176|0)+6>>0]|0,j)|0)!=0:0){p=m+1|0;b[w+(m<<1)>>1]=n;a[o>>0]=1;if((q|0)==(g|0))m=p;else{m=p;k=((a[u>>0]|0)==(a[c+(q*176|0)+99>>0]|0)&1)+k|0}}t=t+1|0}f=f+1|0}v=v+1|0}f=0;while(1){if((f|0)>=(l|0))break;a[c+((e[w+(f<<1)>>1]|0)*176|0)+102>>0]=0;f=f+1|0}i=x;return k|0}function to(b,f){b=b|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=(a[b+(f*176|0)+95>>0]|0)+(a[b+(f*176|0)+94>>0]|0)+(a[b+(f*176|0)+96>>0]|0)+(a[b+(f*176|0)+97>>0]|0)|0;g=a[b+(f*176|0)+6>>0]|0;h=a[b+(f*176|0)+99>>0]|0;m=ao(g&255,h<<24>>24,0)|0;i=b+(f*176|0)+93|0;n=a[i>>0]|0;a:do if((n+l|0)>(m|0)){g=a[b+(f*176|0)+92>>0]|0;k=0;i=0;h=0;while(1){if((k|0)>=(g|0))break;if(c[8+((d[b+((e[b+(f*176|0)+8+(k<<1)>>1]|0)*176|0)+6>>0]|0)+1<<6)+24>>2]&3){j=d[b+(f*176|0)+72+k>>0]&15;if(j>>>0>3)break a;i=i+1|0;h=j+h|0}k=k+1|0}if((l-h+n|0)==(m|0))g=g-i|0;else o=19}else if((h<<24>>24==1?(uo(g)|0)==2:0)?((a[i>>0]|0)+l|0)==(m|0):0){g=a[b+(f*176|0)+92>>0]|0;k=0;i=0;h=0;while(1){if((k|0)>=(g|0))break;if(c[8+((d[b+((e[b+(f*176|0)+8+(k<<1)>>1]|0)*176|0)+6>>0]|0)+1<<6)+24>>2]&3){j=d[b+(f*176|0)+72+k>>0]&15;if(j>>>0>3)break a;i=i+1|0;h=j+h|0}k=k+1|0}if((h|0)==1)g=g-i|0;else o=19}else o=19;while(0);if((o|0)==19)g=a[b+(f*176|0)+92>>0]|0;return g|0}function uo(b){b=b|0;var d=0,e=0,f=0;d=c[22897]|0;if(!d){a[92401]=$n(86671)|0;a[92402]=$n(86692)|0;a[92403]=$n(86743)|0;a[92404]=$n(86796)|0;c[22898]=4;a[92405]=$n(86669)|0;c[22897]=5;e=5}else e=d;d=0;while(1){if((d|0)>=(e|0)){d=0;break}if((a[92401+d>>0]|0)==b<<24>>24){f=6;break}d=d+1|0}if((f|0)==6)d=(d|0)<(c[22898]|0)?2:3;return d|0}function vo(b,f){b=b|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;m=(a[b+(f*176|0)+95>>0]|0)+(a[b+(f*176|0)+94>>0]|0)+(a[b+(f*176|0)+96>>0]|0)+(a[b+(f*176|0)+97>>0]|0)|0;g=a[b+(f*176|0)+6>>0]|0;h=a[b+(f*176|0)+99>>0]|0;n=ao(g&255,h<<24>>24,0)|0;i=b+(f*176|0)+93|0;k=a[i>>0]|0;l=k<<24>>24;a:do if((l+m|0)>(n|0)){g=a[b+(f*176|0)+92>>0]|0;j=0;h=0;while(1){if((j|0)>=(g|0)){g=h;break}if(c[8+((d[b+((e[b+(f*176|0)+8+(j<<1)>>1]|0)*176|0)+6>>0]|0)+1<<6)+24>>2]&3){i=d[b+(f*176|0)+72+j>>0]&15;if(i>>>0>3)break a;h=i+h|0}j=j+1|0}if((m-g+l|0)==(n|0))g=l-g|0;else{g=k;p=20}}else if(h<<24>>24==1){l=(uo(g)|0)==2;k=a[i>>0]|0;if(l?(o=k<<24>>24,(o+m|0)==(n|0)):0){g=a[b+(f*176|0)+92>>0]|0;j=0;h=0;while(1){if((j|0)>=(g|0)){g=h;break}if(c[8+((d[b+((e[b+(f*176|0)+8+(j<<1)>>1]|0)*176|0)+6>>0]|0)+1<<6)+24>>2]&3){i=d[b+(f*176|0)+72+j>>0]&15;if(i>>>0>3)break a;h=i+h|0}j=j+1|0}if((g|0)==1)g=o+-1|0;else{g=k;p=20}}else{g=k;p=20}}else{g=k;p=20}while(0);if((p|0)==20)g=g<<24>>24;return g|0}function wo(b,f){b=b|0;f=f|0;var g=0,h=0;h=a[b+(f*176|0)+92>>0]|0;g=0;while(1){if((g|0)>=(h|0)){g=-1;break}if(!(c[8+((d[b+((e[b+(f*176|0)+8+(g<<1)>>1]|0)*176|0)+6>>0]|0)+1<<6)+24>>2]&3))break;g=g+1|0}return g|0}function xo(b,f,g){b=b|0;f=f|0;g=g|0;var h=0,i=0,j=0;i=a[b+(f*176|0)+92>>0]|0;h=0;while(1){if((h|0)>=(i|0)){h=-1;break}j=e[b+(f*176|0)+8+(h<<1)>>1]|0;if((j|0)!=(g|0)?(c[8+((d[b+(j*176|0)+6>>0]|0)+1<<6)+24>>2]&3|0)==0:0)break;h=h+1|0}return h|0}function yo(b,f,g,h){b=b|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0;j=a[b+(f*176|0)+92>>0]|0;i=0;while(1){if((i|0)>=(j|0)){i=-1;break}k=e[b+(f*176|0)+8+(i<<1)>>1]|0;if(!((k|0)==(g|0)|(k|0)==(h|0))?(c[8+((d[b+(k*176|0)+6>>0]|0)+1<<6)+24>>2]&3|0)==0:0)break;i=i+1|0}return i|0}function zo(b){b=b|0;var d=0,e=0,f=0;d=c[22899]|0;if(!d){a[92407]=$n(86671)|0;c[22900]=1;a[92408]=$n(86667)|0;c[22899]=2;e=2}else e=d;d=0;while(1){if((d|0)>=(e|0)){d=0;break}if((a[92407+d>>0]|0)==b<<24>>24){f=6;break}d=d+1|0}if((f|0)==6)d=(d|0)<(c[22900]|0)?2:4;return d|0}function Ao(b){b=b|0;var c=0,e=0,f=0,g=0,h=0;g=0;c=cp(b)|0;f=0;while(1){if((c|0)<=(g|0))break;e=b+g|0;if(!(Yp(d[e>>0]|0)|0))if((f|0)>0){h=g-f|0;jr(b+h|0,e|0,1-g+c|0)|0;e=h;c=c-f|0;f=-1}else{e=g;f=-1}else{a[e>>0]=32;e=g;f=f+1|0}g=e+1|0}if((c|0)!=(f|0)){e=f+1|0;if((c|0)>(f|0)&(e|0)!=0){c=c-e|0;a[b+c>>0]=0}}else{a[b>>0]=0;c=0}return c|0}function Bo(b){b=b|0;var c=0,d=0,e=0,f=0;a:do if(!b)c=0;else{f=0;c=0;while(1){d=b+f|0;e=a[d>>0]|0;if(!(e<<24>>24))break a;if((e+-32&255)>94){a[d>>0]=46;c=c+1|0}f=f+1|0}}while(0);return c|0}function Co(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;g=c[b>>2]|0;j=0;while(1){h=g+j|0;i=a[h>>0]|0;if(!(i<<24>>24)){m=j;break}if(!(Yp(i&255)|0)){m=j;break}j=j+1|0}g=0;a:while(1){j=h+g|0;i=a[j>>0]|0;if(!(i<<24>>24))break;k=i&255;i=f;while(1){l=a[i>>0]|0;if(!(l<<24>>24))break;if((k|0)==(l<<24>>24|0))break a;else i=i+1|0}g=g+1|0}i=g+1|0;if((g|0)<(e|0)){Do(d,h,i)|0;a[d+i>>0]=0;if(!(a[j>>0]|0))h=0;else h=(c[b>>2]|0)+m+g|0;c[b>>2]=h}else g=-1;return g|0}function Do(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if((b|0)==0|((a|0)==0|(c|0)==0))d=0;else{d=lp(b,0,c)|0;d=(d|0)==0?c+-1|0:d-b|0;if(d|0)jr(a|0,b|0,d|0)|0;er(a+d|0,0,c-d|0)|0;d=1}return d|0}function Eo(b){b=b|0;var c=0,e=0;c=cp(b)|0;while(1){e=c+-1|0;if((c|0)<=0)break;if(!(Yp(d[b+e>>0]|0)|0))break;else c=e}a[b+c>>0]=0;return}function Fo(b){b=b|0;var c=0,d=0,e=0;if((((b|0?(c=cp(b)|0,c|0):0)?(d=b+(c+-1)|0,(a[d>>0]|0)==10):0)?(a[d>>0]=0,c>>>0>1):0)?(e=b+(c+-2)|0,(a[e>>0]|0)==13):0)a[e>>0]=0;return}function Go(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;if((b|0)!=0?(e=cp(b)|0,(e|0)!=0):0){f=0;while(1){if((e|0)<=(f|0))break;g=a[b+f>>0]|0;if(g<<24>>24<=-1)break;if(!(Yp(g<<24>>24)|0))break;f=f+1|0}if(f){e=e-f|0;jr(b|0,b+f|0,e+1|0)|0}while(1){if((e|0)<=0)break;f=e+-1|0;g=a[b+f>>0]|0;if(g<<24>>24<=-1)break;if(!(Yp(g<<24>>24)|0))break;else e=f}a[b+e>>0]=0}else e=0;if(d|0)c[d>>2]=e;return b|0}function Ho(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;c[b>>2]=0;if((d|0?a[d>>0]|0:0)?(g=np(d,87004)|0,g|0):0){d=0;a:while(1){if(d>>>0>=e>>>0)break;f=a[g+d>>0]|0;if(!((f+-48&255)<10|((f&-33)+-65&255)<26))switch(f<<24>>24|0){case 64:case 63:case 61:case 59:case 47:case 46:case 45:case 44:case 43:case 42:case 41:case 40:break;default:break a}d=d+1|0}e=Dq(d+1|0,1)|0;c[b>>2]=e;ir(e|0,g|0,d|0)|0;a[e+d>>0]=0}return}function Io(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;while(1){i=d+-1|0;if(!d){e=0;break}d=a[b>>0]|0;g=d&255;h=a[c>>0]|0;if(d<<24>>24!=h<<24>>24?(f=(d+-65&255)<26?g+32|0:g,e=h&255,e=(h+-65&255)<26?e+32|0:e,(f|0)!=(e|0)):0){j=6;break}d=i;b=b+1|0;c=c+1|0}if((j|0)==6)e=f-e|0;return e|0}function Jo(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;while(1){e=a[b>>0]|0;if(!(e<<24>>24)){b=7;break}f=e<<24>>24;g=a[c>>0]|0;if(e<<24>>24!=g<<24>>24?(d=(e+-65&255)<26?f+32|0:f,h=g<<24>>24,h=(g+-65&255)<26?h+32|0:h,(d|0)!=(h|0)):0){c=h;b=6;break}c=c+1|0;b=b+1|0}if((b|0)==6)c=d-c|0;else if((b|0)==7)c=((a[c>>0]|0)!=0)<<31>>31;return c|0}function Ko(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;o=i;i=i+592|0;n=o;m=o+24|0;l=o+552|0;j=o+296|0;k=o+40|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;e=l;f=e+28|0;do{a[e>>0]=0;e=e+1|0}while((e|0)<(f|0));b=Nk(b,92409,m)|0;if(((b|0)!=0?(g=c[m+12>>2]|0,(g|0)!=0):0)?(a[g>>0]|0)!=0:0){f=(b|0)==1;h=f?92409:g;f=f?g:92409}else{h=92409;f=92409}b=c[m>>2]|0;if((b|0)!=0?(a[b>>0]|0)!=0:0){if(Ck(b,0,0,l,j,k)|0)a[l>>0]=0;e=b}else e=92409;b=c[m+4>>2]|0;if(!b)b=92409;else b=(a[b>>0]|0)==0?92409:b;q=cp(d)|0;p=cp(e)|0;g=cp(f)|0;k=cp(h)|0;j=cp(b)|0;j=q+74+p+g+k+j+(cp(l)|0)|0;k=i;i=i+((1*j|0)+15&-16)|0;c[n>>2]=d;c[n+4>>2]=e;c[n+8>>2]=b;c[n+12>>2]=f;c[n+16>>2]=h;c[n+20>>2]=l;yp(k,j,87011,n)|0;ab(k|0);yk(m);i=o;return 0}function Lo(){Mo(0);return}function Mo(a){a=a|0;Aa(8072,87086);Ja(8080,87091,1,1,0);Ua(8088,87096,1,-128,127);Ua(8104,87101,1,-128,127);Ua(8096,87113,1,0,255);Ua(8112,87127,2,-32768,32767);Ua(8120,87133,2,0,65535);Ua(8128,87148,4,-2147483648,2147483647);Ua(8136,87152,4,0,-1);Ua(8144,87165,4,-2147483648,2147483647);Ua(8152,87170,4,0,-1);Wa(8160,87184,4);Wa(8168,87190,8);Oa(7816,87298);Oa(7848,87373);Ha(7872,4,87469);Ra(7896,87501);sa(7904,0,87548);No(87578);Oo(87646);Po(87716);Qo(87778);Ro(87849);So(87909);sa(7960,4,88009);sa(7968,5,88070);No(88109);Oo(88141);Po(88174);Qo(88207);Ro(88241);So(88274);sa(7976,6,88339);sa(7984,7,88401);sa(7992,7,88464);return}function No(a){a=a|0;sa(7912,0,a|0);return}function Oo(a){a=a|0;sa(7920,1,a|0);return}function Po(a){a=a|0;sa(7928,2,a|0);return}function Qo(a){a=a|0;sa(7936,3,a|0);return}function Ro(a){a=a|0;sa(7944,4,a|0);return}function So(a){a=a|0;sa(7952,5,a|0);return}function To(a){a=a|0;return tp(c[a+4>>2]|0)|0}function Uo(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=c[a+60>>2];a=Vo(db(6,d|0)|0)|0;i=b;return a|0}function Vo(a){a=a|0;if(a>>>0>4294963200){c[(Wo()|0)>>2]=0-a;a=-1}return a|0}function Wo(){var a=0;if(!(c[22901]|0))a=91648;else a=c[(Ta()|0)+64>>2]|0;return a|0}function Xo(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+48|0;n=q+16|0;m=q;e=q+32|0;o=a+28|0;f=c[o>>2]|0;c[e>>2]=f;p=a+20|0;f=(c[p>>2]|0)-f|0;c[e+4>>2]=f;c[e+8>>2]=b;c[e+12>>2]=d;k=a+60|0;l=a+44|0;b=2;f=f+d|0;while(1){if(!(c[22901]|0)){c[n>>2]=c[k>>2];c[n+4>>2]=e;c[n+8>>2]=b;h=Vo(jb(146,n|0)|0)|0}else{eb(8,a|0);c[m>>2]=c[k>>2];c[m+4>>2]=e;c[m+8>>2]=b;h=Vo(jb(146,m|0)|0)|0;oa(0)}if((f|0)==(h|0)){f=6;break}if((h|0)<0){f=8;break}f=f-h|0;g=c[e+4>>2]|0;if(h>>>0<=g>>>0)if((b|0)==2){c[o>>2]=(c[o>>2]|0)+h;j=g;b=2}else j=g;else{j=c[l>>2]|0;c[o>>2]=j;c[p>>2]=j;j=c[e+12>>2]|0;h=h-g|0;e=e+8|0;b=b+-1|0}c[e>>2]=(c[e>>2]|0)+h;c[e+4>>2]=j-h}if((f|0)==6){n=c[l>>2]|0;c[a+16>>2]=n+(c[a+48>>2]|0);a=n;c[o>>2]=a;c[p>>2]=a}else if((f|0)==8){c[a+16>>2]=0;c[o>>2]=0;c[p>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[e+4>>2]|0)|0}i=q;return d|0}function Yo(a){a=a|0;if(!(c[a+68>>2]|0))Zo(a);return}function Zo(a){a=a|0;return}function _o(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=i;i=i+32|0;g=f;e=f+20|0;c[g>>2]=c[a+60>>2];c[g+4>>2]=0;c[g+8>>2]=b;c[g+12>>2]=e;c[g+16>>2]=d;if((Vo(hb(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;i=f;return a|0}function $o(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=i;i=i+80|0;f=g;c[b+36>>2]=1;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21505,c[f+8>>2]=g+12,Ya(54,f|0)|0):0)a[b+75>>0]=-1;f=Xo(b,d,e)|0;i=g;return f|0}function ap(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;m=i;i=i+48|0;h=m+16|0;g=m;f=m+32|0;c[f>>2]=d;j=f+4|0;l=b+48|0;n=c[l>>2]|0;c[j>>2]=e-((n|0)!=0&1);k=b+44|0;c[f+8>>2]=c[k>>2];c[f+12>>2]=n;if(!(c[22901]|0)){c[h>>2]=c[b+60>>2];c[h+4>>2]=f;c[h+8>>2]=2;f=Vo(ib(145,h|0)|0)|0}else{eb(9,b|0);c[g>>2]=c[b+60>>2];c[g+4>>2]=f;c[g+8>>2]=2;f=Vo(ib(145,g|0)|0)|0;oa(0)}if((f|0)>=1){j=c[j>>2]|0;if(f>>>0>j>>>0){g=c[k>>2]|0;h=b+4|0;c[h>>2]=g;c[b+8>>2]=g+(f-j);if(!(c[l>>2]|0))f=e;else{c[h>>2]=g+1;a[d+(e+-1)>>0]=a[g>>0]|0;f=e}}}else{c[b>>2]=c[b>>2]|f&48^16;c[b+8>>2]=0;c[b+4>>2]=0}i=m;return f|0}function bp(a){a=a|0;if(!(c[a+68>>2]|0))Zo(a);return}function cp(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=4;else{d=b;b=f;while(1){if(!(a[d>>0]|0))break a;d=d+1|0;b=d;if(!(b&3)){b=d;e=4;break}}}while(0);if((e|0)==4){while(1){d=c[b>>2]|0;if(!((d&-2139062144^-2139062144)&d+-16843009))b=b+4|0;else break}if((d&255)<<24>>24)do b=b+1|0;while((a[b>>0]|0)!=0)}return b-f|0}function dp(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0;if(!e)c=0;else{f=a[b>>0]|0;a:do if(!(f<<24>>24))f=0;else while(1){e=e+-1|0;g=a[c>>0]|0;if(!(f<<24>>24==g<<24>>24&((e|0)!=0&g<<24>>24!=0)))break a;b=b+1|0;c=c+1|0;f=a[b>>0]|0;if(!(f<<24>>24)){f=0;break}}while(0);c=(f&255)-(d[c>>0]|0)|0}return c|0}function ep(b,c){b=b|0;c=c|0;b=b+(fp(b,c)|0)|0;return (a[b>>0]|0?b:0)|0}function fp(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=i;i=i+32|0;f=g;e=a[d>>0]|0;if(e<<24>>24!=0?(a[d+1>>0]|0)!=0:0){c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[f+24>>2]=0;c[f+28>>2]=0;do{h=f+(((e&255)>>>5&255)<<2)|0;c[h>>2]=c[h>>2]|1<<(e&31);d=d+1|0;e=a[d>>0]|0}while(e<<24>>24!=0);d=a[b>>0]|0;a:do if(!(d<<24>>24))e=b;else{e=b;do{if(c[f+(((d&255)>>>5&255)<<2)>>2]&1<<(d&31)|0)break a;e=e+1|0;d=a[e>>0]|0}while(d<<24>>24!=0)}while(0);e=e-b|0}else e=(gp(b,e<<24>>24)|0)-b|0;i=g;return e|0}function gp(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d&255;a:do if(!f)b=b+(cp(b)|0)|0;else{if(b&3){e=d&255;do{g=a[b>>0]|0;if(g<<24>>24==0?1:g<<24>>24==e<<24>>24)break a;b=b+1|0}while((b&3|0)!=0)}f=_(f,16843009)|0;e=c[b>>2]|0;b:do if(!((e&-2139062144^-2139062144)&e+-16843009))do{g=e^f;if((g&-2139062144^-2139062144)&g+-16843009|0)break b;b=b+4|0;e=c[b>>2]|0}while(!((e&-2139062144^-2139062144)&e+-16843009|0));while(0);e=d&255;while(1){g=a[b>>0]|0;if(g<<24>>24==0?1:g<<24>>24==e<<24>>24)break;else b=b+1|0}}while(0);return b|0}function hp(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;a:do if(!d)d=0;else{f=d;e=b;while(1){b=a[e>>0]|0;d=a[c>>0]|0;if(b<<24>>24!=d<<24>>24)break;f=f+-1|0;if(!f){d=0;break a}else{e=e+1|0;c=c+1|0}}d=(b&255)-(d&255)|0}while(0);return d|0}function ip(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+32|0;g=h;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[g+24>>2]=0;c[g+28>>2]=0;f=a[d>>0]|0;do if(!(f<<24>>24))d=0;else{if(!(a[d+1>>0]|0)){d=b;while(1)if((a[d>>0]|0)==f<<24>>24)d=d+1|0;else break;d=d-b|0;break}else{e=d;d=f}do{f=g+(((d&255)>>>5&255)<<2)|0;c[f>>2]=c[f>>2]|1<<(d&31);e=e+1|0;d=a[e>>0]|0}while(d<<24>>24!=0);e=a[b>>0]|0;a:do if(!(e<<24>>24))d=b;else{d=b;do{if(!(c[g+(((e&255)>>>5&255)<<2)>>2]&1<<(e&31)))break a;d=d+1|0;e=a[d>>0]|0}while(e<<24>>24!=0)}while(0);d=d-b|0}while(0);i=h;return d|0}function jp(b,d){b=b|0;d=d|0;var e=0,f=0;e=d;a:do if(!((e^b)&3)){if(e&3)do{e=a[d>>0]|0;a[b>>0]=e;if(!(e<<24>>24))break a;d=d+1|0;b=b+1|0}while((d&3|0)!=0);e=c[d>>2]|0;if(!((e&-2139062144^-2139062144)&e+-16843009)){f=b;while(1){d=d+4|0;b=f+4|0;c[f>>2]=e;e=c[d>>2]|0;if((e&-2139062144^-2139062144)&e+-16843009|0)break;else f=b}}f=8}else f=8;while(0);if((f|0)==8){f=a[d>>0]|0;a[b>>0]=f;if(f<<24>>24)do{d=d+1|0;b=b+1|0;f=a[d>>0]|0;a[b>>0]=f}while(f<<24>>24!=0)}return b|0}function kp(b,c){b=b|0;c=c|0;var d=0,e=0;e=a[b>>0]|0;d=a[c>>0]|0;if(e<<24>>24==0?1:e<<24>>24!=d<<24>>24)c=e;else{do{b=b+1|0;c=c+1|0;e=a[b>>0]|0;d=a[c>>0]|0}while(!(e<<24>>24==0?1:e<<24>>24!=d<<24>>24));c=e}return (c&255)-(d&255)|0}function lp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=d&255;f=(e|0)!=0;a:do if(f&(b&3|0)!=0){g=d&255;while(1){if((a[b>>0]|0)==g<<24>>24){i=6;break a}b=b+1|0;e=e+-1|0;f=(e|0)!=0;if(!(f&(b&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(f)i=6;else e=0;b:do if((i|0)==6){g=d&255;if((a[b>>0]|0)!=g<<24>>24){f=_(h,16843009)|0;c:do if(e>>>0>3)while(1){h=c[b>>2]^f;if((h&-2139062144^-2139062144)&h+-16843009|0)break;b=b+4|0;e=e+-4|0;if(e>>>0<=3){i=11;break c}}else i=11;while(0);if((i|0)==11)if(!e){e=0;break}while(1){if((a[b>>0]|0)==g<<24>>24)break b;b=b+1|0;e=e+-1|0;if(!e){e=0;break}}}}while(0);return (e|0?b:0)|0}function mp(b){b=b|0;var c=0,e=0;c=0;while(1){if((d[88501+c>>0]|0)==(b|0)){e=2;break}c=c+1|0;if((c|0)==87){c=87;b=88589;e=5;break}}if((e|0)==2)if(!c)b=88589;else{b=88589;e=5}if((e|0)==5)while(1){e=b;while(1){b=e+1|0;if(!(a[e>>0]|0))break;else e=b}c=c+-1|0;if(!c)break;else e=5}return b|0} -function Th(f,g,j,k,l,m,n,o,p,q){f=f|0;g=g|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;var r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,P=0.0,Q=0,R=0.0,S=0.0,T=0.0,U=0.0,V=0,X=0,Y=0,Z=0,$=0,aa=0,ba=0,ca=0,da=0.0,ea=0.0,fa=0.0,ga=0.0,ha=0.0,ia=0.0,ja=0.0,ka=0.0,la=0.0,ma=0.0,na=0.0,oa=0.0,pa=0.0,qa=0.0,ra=0.0,sa=0.0,ta=0.0,ua=0.0,va=0.0,wa=0.0,xa=0.0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0.0,ic=0.0;gc=i;i=i+368|0;Sb=gc+288|0;Tb=gc+264|0;Ub=gc+248|0;Vb=gc+240|0;Zb=gc+232|0;cc=gc+224|0;ec=gc+348|0;fc=gc+344|0;_b=gc+152|0;Yb=gc+120|0;bc=gc+336|0;dc=gc+320|0;$b=gc+304|0;Wb=gc+24|0;Xb=gc;ac=gc+352|0;do if((g|0)!=0&(j|0)!=0){r=0;while(1){if((r|0)>=(k|0))break;t=r+1|0;r=j+(r*144|0)+94|0;s=r+32|0;do{b[r>>1]=0;r=r+2|0}while((r|0)<(s|0));r=t}Eb=(m|0)!=0;Fb=(n|0)!=0;if(Eb|Fb){X=Yb+4|0;Y=(o&256|0)==0;V=bc+4|0;Z=0;r=0;s=0;while(1){if((Z|0)>=(k|0))break;u=Kh(g,Z,p)|0;Q=g+(Z*176|0)+92|0;w=a[Q>>0]|0;if(u){v=g+(Z*176|0)+94|0;t=a[v>>0]|0;if(t<<24>>24<4?((t<<24>>24)+(w<<24>>24)|0)==(u|0):0)r=r+1|0;else Db=11}else{t=g+(Z*176|0)+94|0;v=t;t=a[t>>0]|0;Db=11}if((Db|0)==11){Db=0;a:do if(((t<<24>>24)+(w<<24>>24)&-2|0)==2?($=a[g+(Z*176|0)+99>>0]|0,aa=a[g+(Z*176|0)+100>>0]|0,(Mh(g+(Z*176|0)|0,$,aa)|0)!=0):0){c[X>>2]=0;c[Yb>>2]=0;b:do if(($|t|aa)<<24>>24==0?(uo(a[g+(Z*176|0)+6>>0]|0)|0)==3:0)switch(a[Q>>0]|0){case 2:{L=(a[g+(Z*176|0)+93>>0]|0)==3&1;break b}case 3:{L=(a[g+(Z*176|0)+93>>0]|0)==5?2:0;break b}default:{L=0;break b}}else L=0;while(0);I=(L|0)==2;J=(L|0)==0;K=0;w=0;u=0;t=0;H=0;while(1){y=a[Q>>0]|0;x=y<<24>>24;if((K|0)>=(x|0))break;G=e[g+(Z*176|0)+8+(K<<1)>>1]|0;switch(Uh(d[g+(Z*176|0)+72+K>>0]|0)|0){case 4:{u=u+1|0;if(Y&(G|0)<(Z|0))Db=28;else{x=0;Db=60}break}case 2:{w=w+1|0;x=Vh(g+(G*176|0)|0)|0;if((x|0)>-1){Db=Yb+(x<<2)|0;c[Db>>2]=(c[Db>>2]|0)+1}if((G|0)<(Z|0))Db=28;else{x=0;Db=60}break}case 1:case 8:{x=0;Db=60;break}default:{x=H+1|0;if((H|0)>0){t=0;break a}if(x){if(y<<24>>24<3){t=0;break a}}else x=0}}c:do if((Db|0)==28){Db=0;E=g+(G*176|0)+92|0;F=g+(G*176|0)+94|0;x=a[F>>0]|0;if(((x<<24>>24)+(a[E>>0]|0)&-2|0)==2?(ba=a[g+(G*176|0)+99>>0]|0,ca=a[g+(G*176|0)+100>>0]|0,(Mh(g+(G*176|0)|0,ba,ca)|0)!=0):0){c[V>>2]=0;c[bc>>2]=0;d:do if((ba|x|ca)<<24>>24==0?(uo(a[g+(G*176|0)+6>>0]|0)|0)==3:0)switch(a[E>>0]|0){case 2:{D=(a[g+(G*176|0)+93>>0]|0)==3&1;break d}case 3:{D=(a[g+(G*176|0)+93>>0]|0)==5?2:0;break d}default:{D=0;break d}}else D=0;while(0);A=(H|0)>1;C=(H|0)==0;B=0;x=0;z=0;e:while(1){if((B|0)>=(a[E>>0]|0)){A=x;break}f:do switch(Uh(d[g+(G*176|0)+72+B>>0]|0)|0){case 4:{z=z+1|0;break}case 2:{x=x+1|0;y=Vh(g+((e[g+(G*176|0)+8+(B<<1)>>1]|0)*176|0)|0)|0;if((y|0)<=-1)break f;Db=bc+(y<<2)|0;c[Db>>2]=(c[Db>>2]|0)+1;break}case 1:case 8:break;default:{if(A){A=x;break e}if(C)break f;if((a[Q>>0]|0)<3){A=x;break e}}}while(0);B=B+1|0}do if((D|L|0)==3){if(I?(Wh(g,Z)|0)==0:0){x=0;Db=60;break c}if((D|0)!=2)break;if(!(Wh(g,G)|0)){x=0;Db=60;break c}}while(0);x=a[E>>0]|0;y=x<<24>>24;if((B|0)<(y|0)){x=0;Db=60}else{if((A|0)>2|(((z|0)>0&1)+((A|0)>0&1)|0)!=1){x=0;Db=60;break}if((A|0)!=2|x<<24>>24==2){x=1;Db=60;break}do if((c[V>>2]|c[bc>>2]|0)==1){x=a[F>>0]|0;if((x+y|0)!=3)break;if(((a[g+(G*176|0)+93>>0]|0)+x|0)!=5)break;if((uo(a[g+(G*176|0)+6>>0]|0)|0)!=3)break;if(J){x=1;Db=60;break c}if(Wh(g,G)|0){x=1;Db=60;break c}}while(0);x=0;Db=60}}else x=H}while(0);if((Db|0)==60){Db=0;t=x+t|0;x=H}K=K+1|0;H=x}if((t|0)!=0&(((u|0)>0&1)+((w|0)>0&1)|0)==1){if((w|0)>1){if((w|0)!=2){t=0;break}if((c[X>>2]|c[Yb>>2]|0)!=1){t=0;break}u=a[v>>0]|0;if((u+x|0)!=3){t=0;break}if(((a[g+(Z*176|0)+93>>0]|0)+u|0)!=5){t=0;break}if((uo(a[g+(Z*176|0)+6>>0]|0)|0)!=3){t=0;break}}}else t=0}else t=0;while(0);s=t+s|0}Z=Z+1|0}if(Eb)c[m>>2]=r;if(Fb){c[n>>2]=s;Cb=r;Bb=s}else{Cb=r;Bb=s}}else{Cb=0;Bb=0}s=o>>>16&15;if(s>>>0>2){u=_g(k+1|0,2)|0;t=Dq(2,k)|0;r=Dq(1,k)|0;if((t|0)!=0&((u|0)!=0&(r|0)!=0)){Ab=r;zb=s&65535}else{r=-30002;break}}else{Ab=0;zb=2;t=0;u=0}wb=g+(k*176|0)|0;xb=0-q|0;yb=Yb+4|0;Ka=(o&256|0)==0;La=bc+4|0;Ma=ec+1|0;Na=fc+1|0;Oa=ec+2|0;Pa=fc+2|0;Qa=_b+8|0;Ra=_b+16|0;Sa=_b+24|0;Ta=_b+32|0;Ua=_b+40|0;Va=_b+48|0;Wa=(l|0)>0;Xa=Xb+16|0;Ya=Xb+8|0;Za=(k*176|0)/176|0;_a=p&1;$a=0-_a|0;ab=(q|0)==0;bb=Wb+72|0;cb=Wb+80|0;db=Wb+88|0;fb=p&8;eb=(fb|0)==0;fb=(fb|0)!=0;gb=Wb+8|0;hb=Wb+16|0;ib=Wb+24|0;jb=Wb+48|0;kb=Wb+56|0;lb=Wb+32|0;mb=_b+56|0;nb=Wb+64|0;ob=Wb+40|0;pb=_b+64|0;qb=Tb+8|0;rb=Tb+16|0;sb=Yb+8|0;tb=Yb+16|0;ub=Yb+24|0;vb=0;v=0;r=0;while(1){if((vb|0)>=(k|0)){s=v;break}y=(a[g+(vb*176|0)+102>>0]&1)!=0;K=j+(vb*144|0)+127|0;L=j+(vb*144|0)+126|0;Ia=j+(vb*144|0)+125|0;Ja=j+(vb*144|0)+124|0;c[Ja>>2]=0;c[dc>>2]=0;c[dc+4>>2]=0;c[dc+8>>2]=0;c[dc+12>>2]=0;H=Kh(g,vb,p)|0;g:do if((H|0)!=0?(Nb=g+(vb*176|0)+94|0,Ob=a[Nb>>0]|0,Ob<<24>>24<=3):0){x=0;s=0;while(1){if((x|0)>=3)break;w=a[g+(vb*176|0)+95+x>>0]|0;if(w<<24>>24>1){s=0;break g}x=x+1|0;s=(w<<24>>24)+s|0}G=y?0:s;if(((Ob<<24>>24)-G|0)<=1){h:do if(Wa){w=0;s=0;while(1){if((w|0)==(l|0))break h;if((e[wb+(w*176|0)+8>>1]|0)==(vb|0)){Ha=a[wb+(w*176|0)+98>>0]|0;Ha=dc+((y|(Ha&255)>3?0:Ha<<24>>24)<<2)|0;c[Ha>>2]=(c[Ha>>2]|0)+1;c[$b+(s<<2)>>2]=w;s=s+1|0}w=w+1|0}}else s=0;while(0);C=g+(vb*176|0)+112|0;D=g+(vb*176|0)+120|0;F=g+(vb*176|0)+92|0;c[Xb>>2]=0;c[Xb+4>>2]=0;c[Xb+8>>2]=0;c[Xb+12>>2]=0;c[Xb+16>>2]=0;c[Xb+20>>2]=0;w=0;y=0;E=0;x=0;i:while(1){if((E|0)>=2){J=x;Db=111;break}j:do switch(E|0){case 0:{A=0;B=y;while(1){if((A|0)>=(s|0)){y=B;break j}z=c[$b+(A<<2)>>2]|0;P=-+Xh(g,z+Za|0,0,bc,$a);y=c[bc>>2]|0;k:do if((y|0)>=3)if((y|0)<9999)switch(y|0){case 3:{y=3;Db=97;break k}default:break k}else switch(y|0){case 9999:{s=0;w=q;Db=267;break i}default:break k}else{switch(y|0){case -1:case 1:break;default:break k}y=0-y|0;c[bc>>2]=y;w=w+1|0;Db=97}while(0);if((Db|0)==97){Db=0;x=x+1|0}b[ac+(B<<1)>>1]=b[wb+(z*176|0)+48>>1]|0;xa=+h[wb+(z*176|0)+112>>3]-+h[C>>3];h[Wb+(B*24|0)>>3]=xa;R=+h[wb+(z*176|0)+120>>3]-+h[D>>3];h[Wb+(B*24|0)+8>>3]=R;R=+O(+(xa*xa+R*R));switch(y|0){case 3:break;case 1:{P=R;break}default:P=(y|0)==-1?-R:0.0}h[Wb+(B*24|0)+16>>3]=P;A=A+1|0;B=B+1|0}}case 1:{B=0;while(1){if((B|0)>=(a[F>>0]|0))break j;z=e[g+(vb*176|0)+8+(B<<1)>>1]|0;P=+Xh(g,vb,B,bc,_a);A=c[bc>>2]|0;l:do if((A|0)>=3)if((A|0)<9999)switch(A|0){case 3:{Db=105;break l}default:break l}else switch(A|0){case 9999:{s=0;w=q;Db=267;break i}default:break l}else{switch(A|0){case -1:case 1:break;default:break l}w=w+1|0;Db=105}while(0);if((Db|0)==105){Db=0;x=x+1|0}b[ac+(y<<1)>>1]=b[g+(z*176|0)+48>>1]|0;xa=+h[g+(z*176|0)+112>>3]-+h[C>>3];h[Wb+(y*24|0)>>3]=xa;R=+h[g+(z*176|0)+120>>3]-+h[D>>3];h[Wb+(y*24|0)+8>>3]=R;R=+O(+(xa*xa+R*R));switch(A|0){case 3:break;case 1:{P=R;break}default:P=(A|0)==-1?-R:0.0}h[Wb+(y*24|0)+16>>3]=P;B=B+1|0;y=y+1|0}}default:{}}while(0);E=E+1|0}m:do if((Db|0)==111){Db=0;z=(J|0)!=0&(w|0)==(J|0);w=a[F>>0]|0;if((s+-3+w|0)>>>0>=2){Ha=a[Nb>>0]|0;if(!(Ha<<24>>24>1?(H|0)==((Ha<<24>>24)+w|0):0)){s=0;break g}if(ab){s=0;w=xb;Db=267;break}else{s=0;w=-4;break}}else{x=0;R=0.0;P=0.0}while(1){if((x|0)>=(y|0))break;w=Wb+(x*24|0)|0;S=+Yh(w);if(S<1.0e-06){Db=116;break}xa=1.0/S;h[w>>3]=xa*+h[w>>3];Ha=Wb+(x*24|0)+8|0;h[Ha>>3]=xa*+h[Ha>>3];Ha=Wb+(x*24|0)+16|0;h[Ha>>3]=xa*+h[Ha>>3];Ha=(x|0)!=0;x=x+1|0;R=Ha&R>S?R:S;P=Ha&P=(y|0))break;va=S+ +h[Wb+(w*24|0)>>3];xa=U+ +h[Wb+(w*24|0)+8>>3];wa=T+ +h[Wb+(w*24|0)+16>>3];w=w+1|0;S=va;T=wa;U=xa}I=(y|0)==3;n:do if(!I)if((y|0)==4){if(!J)s=0;else{y=0;P=0.0;while(1){if((y|0)==4)break;w=Wb+(y*24|0)|0;x=0;s=0;while(1){if((x|0)==4)break;if((x|0)!=(y|0)){ai(Wb+(x*24|0)|0,w,_b+(s*24|0)|0)|0;s=s+1|0}x=x+1|0}Zh(_b,Sb);xa=+h[Sb>>3];xa=(y|0)==0|xa0&1}if(ab){s=0;break g}w=Sh(f,g,vb,4,ac,1)|0;if(!w){w=4;break m}s=(w+-1|0)>>>0<2?0:s;break m}else Db=138;else{switch(H|0){case 3:{s=2;break}case 4:{Ha=a[Nb>>0]|0;if((Ha-s|0)==1&(Ha-G|0)==1)s=1;else{Db=138;break n}break}default:{Db=138;break n}}if(ab){s=0;break g}do if(!J)s=0;else{Zh(Wb,Sb);if(+h[Sb>>3]<=.03){s=(J|0)>0&1;break}h[bb>>3]=-S;h[cb>>3]=-U;h[db>>3]=-T;S=+O(+(T*T+(U*U+S*S)));do if(!eb)if(S>1.0){R=R*S;break}else{P=P*S;break}else{R=R>S?R:S;P=P>2]=0;c[ec>>2]=0;F=4-(E&1)|0;w=0;while(1){if((w|0)==(F|0))break;h[Ub>>3]=+W(+(+h[Wb+(w*24|0)+8>>3]),+(+h[Wb+(w*24|0)>>3]));if(+h[Ub>>3]<0.0)h[Ub>>3]=+h[Ub>>3]+6.283185307179586;h[Yb+(w<<3)>>3]=+h[Ub>>3];xa=+h[Wb+(w*24|0)+16>>3];Ha=xa>0.0;s=Ha?1:(xa<0.0)<<31>>31;c[Sb+(w<<2)>>2]=s;do if(Ha)c[ec>>2]=(c[ec>>2]|0)+1;else{if((s|0)>=0)break;c[fc>>2]=(c[fc>>2]|0)+1}while(0);c[Tb+(w<<2)>>2]=w;w=w+1|0}s=c[ec>>2]|0;if((s|0)<(c[fc>>2]|0)){s=0;while(1){if((s|0)==(F|0))break;Ha=Sb+(s<<2)|0;c[Ha>>2]=0-(c[Ha>>2]|0);s=s+1|0}hh(fc,ec,4);s=c[ec>>2]|0}o:do if(!s)w=4;else{ih(Yb,Tb,F,4,21)|0;p:do if((c[ec>>2]|0)==(F|0)){B=F;C=0;y=F}else{x=0;A=0;B=0;C=0;D=0;y=0;while(1){w=(x|0)!=0;if(!(w|(D|0)<(F|0)))break p;s=(D|0)%(F|0)|0;do if((c[Sb+(c[Tb+(s<<2)>>2]<<2)>>2]|0)>0){x=w?x:1;z=w?A:s;w=w?B+1|0:1;s=C}else{if(!w){x=0;z=A;w=B;s=C;break}Ha=(B|0)>(y|0);x=0;z=A;w=B;s=Ha?A:C;y=Ha?B:y}while(0);A=z;B=w;C=s;D=D+1|0}}while(0);q:do if(fb){w=F-y|0;r:do if((w|0)>1){x=C+y|0;A=1;while(1){if((A|0)>=(w|0))break r;s=Tb+(((A+x|0)%(F|0)|0)<<2)|0;z=c[s>>2]|0;if((c[Sb+(z<<2)>>2]|0)>0?(Pb=Tb+(((x|0)%(F|0)|0)<<2)|0,h[Ub>>3]=+h[Yb+(c[Pb>>2]<<3)>>3]-+h[Yb+(z<<3)>>3],+N(+(+h[Ub>>3]))<1.0e-06):0){w=Pb;break}A=A+1|0}hh(w,s,4);y=y+1|0}while(0);w=F-y|0;if((w|0)<=1){z=C;break}x=F+-1+C|0;A=1;while(1){if((A|0)>=(w|0)){z=C;break q}s=Tb+(((x-A|0)%(F|0)|0)<<2)|0;z=c[s>>2]|0;if((c[Sb+(z<<2)>>2]|0)>0?(Qb=(x|0)%(F|0)|0,Rb=Tb+(Qb<<2)|0,h[Ub>>3]=+h[Yb+(c[Rb>>2]<<3)>>3]-+h[Yb+(z<<3)>>3],+N(+(+h[Ub>>3]))<1.0e-06):0){w=Qb;x=Rb;break}A=A+1|0}hh(x,s,4);z=w;y=y+1|0}else z=C;while(0);s=Tb+(z<<2)|0;h[Vb>>3]=+h[Yb+(c[s>>2]<<3)>>3];x=0;while(1){if((x|0)==(F|0))break;w=Yb+(x<<3)|0;if((x|0)==(c[s>>2]|0))P=0.0;else{h[Ub>>3]=+h[w>>3]-+h[Vb>>3];if(+h[Ub>>3]<0.0)h[Ub>>3]=+h[Ub>>3]+6.283185307179586;P=+h[Ub>>3]}h[w>>3]=P;x=x+1|0}s:do if((F|0)==3)switch(c[ec>>2]|0){case 0:{w=4;break o}case 3:{s=1;break s}case 1:{if(c[fc>>2]|0){s=6;break s}h[Ub>>3]=+h[Yb+(c[Tb+(((z+2|0)%3|0)<<2)>>2]<<3)>>3]-+h[Yb+(c[Tb+(((z+1|0)%3|0)<<2)>>2]<<3)>>3];if(+h[Ub>>3]<0.0)h[Ub>>3]=+h[Ub>>3]+6.283185307179586;if(+h[Ub>>3]+-3.141592653589793<-.1){s=1;break s}if(+h[Ub>>3]+-3.141592653589793>.1){s=1;break s}s=6;break s}case 2:{if(!(c[fc>>2]|0)){s=1;break s}s=Tb+(((z+1|0)%3|0)<<2)|0;w=Tb+(((z|0)%3|0)<<2)|0;h[Vb>>3]=+h[Yb+(c[s>>2]<<3)>>3]-+h[Yb+(c[w>>2]<<3)>>3];if(+h[Vb>>3]<0.0)h[Vb>>3]=+h[Vb>>3]+6.283185307179586;if(+h[Vb>>3]>3.041592653589793){s=1;break s}if(+h[Vb>>3]<1.9943951023931952){s=6;break s}h[cc>>3]=+h[Yb+(c[w>>2]<<3)>>3];h[cc>>3]=+h[Yb+(c[s>>2]<<3)>>3]+ +h[cc>>3];h[cc>>3]=+h[cc>>3]*.5;h[cc>>3]=+h[cc>>3]+-3.141592653589793;if(+h[cc>>3]<0.0)h[cc>>3]=+h[cc>>3]+6.283185307179586;if(+h[Vb>>3]<2.1943951023931954)h[Zb>>3]=.15000000000000002;else h[Zb>>3]=+h[Vb>>3]*3.0*.5+-3.141592653589793;h[Ub>>3]=+h[Yb+(c[Tb+(((z+2|0)%3|0)<<2)>>2]<<3)>>3];if(+h[cc>>3]-+h[Ub>>3]<-+h[Zb>>3]){s=6;break s}if(+h[cc>>3]-+h[Ub>>3]>+h[Zb>>3]){s=6;break s}s=1;break s}default:{w=-1;break o}}else{if(E){w=-1;break o}t:do switch(c[ec>>2]|0){case 0:{w=4;break o}case 4:{s=6;break s}case 1:{if(!(c[fc>>2]|0)){h[Ub>>3]=+h[Yb+(c[Tb+(((z+3|0)%(F|0)|0)<<2)>>2]<<3)>>3]-+h[Yb+(c[Tb+(((z+1|0)%(F|0)|0)<<2)>>2]<<3)>>3];if(+h[Ub>>3]<0.0)h[Ub>>3]=+h[Ub>>3]+6.283185307179586;if(+h[Ub>>3]<3.041592653589793){s=3;break s}else break t}if((c[Sb+(c[Tb+(((z+2|0)%(F|0)|0)<<2)>>2]<<2)>>2]|0)>=0)break t;h[Ub>>3]=+h[Yb+(c[Tb+(((z+3|0)%(F|0)|0)<<2)>>2]<<3)>>3]-+h[Yb+(c[Tb+(((z+1|0)%(F|0)|0)<<2)>>2]<<3)>>3];if(+h[Ub>>3]<0.0)h[Ub>>3]=+h[Ub>>3]+6.283185307179586;if(+N(+(+h[Ub>>3]+-3.141592653589793))<.8227342478134155){s=6;break s}break}case 2:{if(!fb)if((B|0)==1)break t;else{s=6;break s}if((y|0)==1)break t;h[Ub>>3]=+h[Yb+(c[Tb+(((z+3|0)%(F|0)|0)<<2)>>2]<<3)>>3]-+h[Yb+(c[Tb+(((z|0)%(F|0)|0)<<2)>>2]<<3)>>3];h[Ub>>3]=+N(+(6.283185307179586-+h[Ub>>3]));h[Vb>>3]=+h[Yb+(c[Tb+(((z+2|0)%(F|0)|0)<<2)>>2]<<3)>>3]-+h[Yb+(c[Tb+(((z+1|0)%(F|0)|0)<<2)>>2]<<3)>>3];h[Vb>>3]=+N(+(+h[Vb>>3]));if(+h[Ub>>3]<2.0e-06?+h[Vb>>3]>.1:0){s=3;break s}if(+h[Vb>>3]<2.0e-06?+h[Ub>>3]>.1:0){s=3;break s}s=6;break s}case 3:{h[Ub>>3]=+h[Yb+(c[Tb+(((z+2|0)%(F|0)|0)<<2)>>2]<<3)>>3]-+h[Yb+(c[Tb+(((z|0)%(F|0)|0)<<2)>>2]<<3)>>3];if(+h[Ub>>3]<0.0)h[Ub>>3]=+h[Ub>>3]+6.283185307179586;if(+h[Ub>>3]<3.041592653589793){s=3;break s}break}default:{w=-1;break o}}while(0);s=F+-1|0;w=0;while(1){if((w|0)>=(F|0)){s=1;break s}h[Ub>>3]=+h[Yb+(c[Tb+(((s+w|0)%(F|0)|0)<<2)>>2]<<3)>>3]-+h[Yb+(c[Tb+(((w|0)%(F|0)|0)<<2)>>2]<<3)>>3];if(+h[Ub>>3]<0.0)h[Ub>>3]=+h[Ub>>3]+6.283185307179586;if(+h[Ub>>3]<3.041592653589793){s=3;break}else w=w+1|0}}while(0);w=s}while(0);if((w|0)<=0)if((w|0)<0){s=32;w=4;break m}else{s=0;w=0;break}s=w>>>1&1;if(!(w&4))break;if(ab){s=0;break g}else{w=4;break m}}else{s=0;w=0}while(0);x=1;while(1){if((x|0)==4)break;Ha=Wb+(x*24|0)|0;h[Ha>>3]=+h[Ha>>3]-+h[Wb>>3];Ha=Wb+(x*24|0)+8|0;h[Ha>>3]=+h[Ha>>3]-+h[gb>>3];Ha=Wb+(x*24|0)+16|0;h[Ha>>3]=+h[Ha>>3]-+h[hb>>3];x=x+1|0}h[Xb>>3]=+h[Xb>>3]-+h[Wb>>3];h[Ya>>3]=+h[Ya>>3]-+h[gb>>3];h[Xa>>3]=+h[Xa>>3]-+h[hb>>3];xa=+_h(ib,jb,bb,Sb);P=+N(+(+h[Sb>>3]));h[Sb>>3]=P;R=+h[jb>>3];ta=+h[ib>>3];wa=R-ta;h[Va>>3]=wa;S=+h[kb>>3];T=+h[lb>>3];va=S-T;h[mb>>3]=va;U=+h[nb>>3];da=+h[ob>>3];sa=U-da;h[pb>>3]=sa;ea=+h[bb>>3];fa=ta-ea;h[Sa>>3]=fa;ga=+h[cb>>3];ha=T-ga;h[Ta>>3]=ha;ia=+h[db>>3];ja=da-ia;h[Ua>>3]=ja;ka=ea-R;h[_b>>3]=ka;la=ga-S;h[Qa>>3]=la;ma=ia-U;h[Ra>>3]=ma;na=+O(+(ta*ta+T*T+da*da));oa=+O(+(R*R+S*S+U*U));pa=+O(+(ea*ea+ga*ga+ia*ia));qa=+O(+(fa*fa+ha*ha+ja*ja));ra=+O(+(ka*ka+la*la+ma*ma));sa=+O(+(wa*wa+va*va+sa*sa));va=na>oa?oa:na;va=va>sa?sa:va;wa=va>pa?pa:va;wa=wa>qa?qa:wa;wa=wa>ra?ra:wa;hc=na.03){ic=S*ia-U*ga;P=R*ia-U*ea;hc=R*ga-S*ea;P=wa/+O(+(hc*hc+(ic*ic+P*P)));ic=ia*T-da*ga;hc=ia*ta-da*ea;ga=ga*ta-ea*T;ga=wa/+O(+(ga*ga+(ic*ic+hc*hc)));hc=U*T-da*S;ia=U*ta-da*R;R=ta*S-T*R;ia=wa/+O(+(R*R+(hc*hc+ia*ia)));R=la*ja-ha*ma;hc=ka*ja-fa*ma;ma=ka*ha-fa*la;h[Tb>>3]=R;h[qb>>3]=-hc;h[rb>>3]=ma;hc=wa/+O(+(ma*ma+(R*R+hc*hc)));R=P/sa;R=R<9999.0?R:9999.0;ma=P/qa;R=ma>3]=R;if(!(R>=.03))P=R;else{h[Tb>>3]=+h[Xb>>3]-ta;h[qb>>3]=+h[Ya>>3]-+h[lb>>3];h[rb>>3]=+h[Xa>>3]-+h[ob>>3];h[Yb>>3]=+_h(ib,jb,Xb,0);h[sb>>3]=+_h(jb,bb,Xb,0);h[tb>>3]=+_h(bb,ib,Xb,0);h[ub>>3]=+_h(Va,Sa,Tb,0);x=0;while(1){if((x|0)>=4)break;if(+h[Yb+(x<<3)>>3]/xa<-.06){s=1;break}else x=x+1|0}P=+h[Sb>>3]}Ha=P<.125;x=ua>=1.9&(z&(y^1))&Ha;s=(s|0)==0&x?1:s;if(P1.0e-12){if(!(P>.03)?(w&1|0)==0|!(+N(+P)>1.0e-12):0)break;w=xa>0.0?2:1;w=I?w^3:w;Db=267;break m}while(0);s=s|(J|0)>0;w=4}while(0);if((Db|0)==267){Db=0;if(!w){s=0;break}}Ha=j+(vb*144|0)+130|0;a[Ha>>0]=d[Ha>>0]|s;Ha=g+(vb*176|0)+101|0;a[Ha>>0]=d[Ha>>0]|s;if((w|0)<1|(a[Nb>>0]|0)>1)s=w;else{a[Ja>>0]=w;s=w}}else s=0}else s=0;while(0);s=(s|0)==-4|(s|0)==(xb|0)?0-s|0:s;s=(s|0)<0?0:s;a[Ia>>0]=s;Ha=d[Ja>>0]&7;a[L>>0]=(Ha+-1|0)>>>0<2?6:Ha&255;Ha=s&7;a[K>>0]=(Ha+-1|0)>>>0<2?6:Ha&255;s=s<<24>>24;if(!s){$=g+(vb*176|0)+92|0;s=a[$>>0]|0;ba=g+(vb*176|0)+94|0;w=a[ba>>0]|0;u:do if((((w<<24>>24)+(s<<24>>24)&-2|0)==2?(Gb=g+(vb*176|0)|0,Hb=g+(vb*176|0)+99|0,Ib=a[Hb>>0]|0,Jb=g+(vb*176|0)+100|0,Kb=a[Jb>>0]|0,(Mh(Gb,Ib,Kb)|0)!=0):0)?(b[g+(vb*176|0)+110>>1]|0)==0:0){if((s<<24>>24==2&w<<24>>24==0?(Uh(d[g+(vb*176|0)+72>>0]|0)|0)==2:0)?(Uh(d[g+(vb*176|0)+73>>0]|0)|0)==2:0){s=0;break}c[yb>>2]=0;c[Yb>>2]=0;v:do if((Ib|w|Kb)<<24>>24==0?(uo(a[g+(vb*176|0)+6>>0]|0)|0)==3:0)switch(a[$>>0]|0){case 2:{Z=(a[g+(vb*176|0)+93>>0]|0)==3&1;break v}case 3:{Z=(a[g+(vb*176|0)+93>>0]|0)==5?2:0;break v}default:{Z=0;break v}}else Z=0;while(0);Ha=g+(vb*176|0)+164|0;aa=(Z|0)==2;X=(Z|0)==0;H=0;Y=0;I=0;D=0;y=0;x=0;w=0;Fa=0;s=0;while(1){z=a[$>>0]|0;A=z<<24>>24;if((Y|0)>=(A|0)){Ga=H;break}C=(a[g+(vb*176|0)+52+Y>>0]|0)==3&1;z=Uh(d[g+(vb*176|0)+72+Y>>0]|0)|0;switch(z|0){case 2:case 4:{B=e[g+(vb*176|0)+8+(Y<<1)>>1]|0;D=vb;break}default:B=-1}w:do switch(z|0){case 4:{x=x+1|0;if(Ka&(b[Ha>>1]|0)==(b[g+(B*176|0)+164>>1]|0)?(Lb=a[g+(B*176|0)+99>>0]|0,Mb=a[g+(B*176|0)+100>>0]|0,(Mh(g+(B*176|0)|0,Lb,Mb)|0)!=0):0){z=Mb;A=Lb;V=B;G=H;Db=304}else{G=H;A=I;z=Fa}break}case 2:{y=y+1|0;do if(Oh(Gb,a[Hb>>0]|0,a[Jb>>0]|0)|0){A=0;while(1){z=g+(B*176|0)|0;if(a[g+(B*176|0)+94>>0]|0){E=0;F=B;G=A;break}if((a[g+(B*176|0)+92>>0]|0)!=2){E=0;F=B;G=A;break}if((Uh(d[g+(B*176|0)+72>>0]|0)|0)!=2){E=0;F=B;G=A;break}if((Uh(d[g+(B*176|0)+73>>0]|0)|0)!=2){E=0;F=B;G=A;break}if(!(Nh(z,a[g+(B*176|0)+99>>0]|0,a[g+(B*176|0)+100>>0]|0)|0)){E=1;F=B;G=A;break}Da=(e[g+(B*176|0)+8>>1]|0)==(D|0)&1;Ea=((a[g+(B*176|0)+52+Da>>0]|0)==3&1)+C|0;Ga=B;B=e[g+(B*176|0)+8+(Da<<1)>>1]|0;A=A+1|0;C=Ea;D=Ga}if(!G){B=F;break}w=w+1|0;if(E){G=H;A=I;z=Fa;break w}A=a[g+(F*176|0)+99>>0]|0;B=a[g+(F*176|0)+100>>0]|0;if(!(Oh(z,A,B)|0)){G=H;A=I;z=Fa;break w}else{z=B;V=F;Db=304;break w}}while(0);z=Vh(g+(B*176|0)|0)|0;if((z|0)>-1){Ga=Yb+(z<<2)|0;c[Ga>>2]=(c[Ga>>2]|0)+1}A=a[g+(B*176|0)+99>>0]|0;z=a[g+(B*176|0)+100>>0]|0;if(!(Mh(g+(B*176|0)|0,A,z)|0)){G=H;A=I;z=Fa}else{V=B;G=H;Db=304}break}case 8:case 1:{G=H;A=I;z=Fa;break}default:{G=H;A=I;z=Fa;s=s+1|0}}while(0);x:do if((Db|0)==304){Db=0;Ga=(V|0)>-1&(V|0)<(vb|0);L=Ga&1;y:do if(Ga){Q=g+(V*176|0)+92|0;K=g+(V*176|0)+94|0;B=a[K>>0]|0;if(((B<<24>>24)+(a[Q>>0]|0)&-2|0)!=2){A=I;z=Fa;break x}c[La>>2]=0;c[bc>>2]=0;z:do if(!((A|z|B)<<24>>24)){if((uo(a[g+(V*176|0)+6>>0]|0)|0)!=3){J=0;break}switch(a[Q>>0]|0){case 2:{J=(a[g+(V*176|0)+93>>0]|0)==3&1;break z}case 3:{J=(a[g+(V*176|0)+93>>0]|0)==5?2:0;break z}default:{J=0;break z}}}else J=0;while(0);A=-1;H=0;F=0;I=0;z=0;while(1){B=a[Q>>0]|0;if((H|0)>=(B<<24>>24|0)){E=I;break}E=Uh(d[g+(V*176|0)+72+H>>0]|0)|0;A:do switch(E|0){case 0:{E=I;z=z+1|0;break}case 2:{F=F+1|0;B=g+(V*176|0)+8+(H<<1)|0;E=Vh(g+((e[B>>1]|0)*176|0)|0)|0;if((E|0)<=-1){E=I;Db=318;break A}E=bc+(E<<2)|0;c[E>>2]=(c[E>>2]|0)+1;E=I;Db=318;break}default:{B=g+(V*176|0)+8+(H<<1)|0;E=((E|0)==4&1)+I|0;Db=318}}while(0);if((Db|0)==318){Db=0;A=(e[B>>1]|0)==(D|0)?H:A}H=H+1|0;I=E}B:do if((z|0)<=1){if((z|0)!=0&B<<24>>24<3){z=0;break}if((A|0)<0|(((E|0)>0&1)+((F|0)>0&1)|0)!=1){z=0;break}if((F|0)>2?1:(b[g+(V*176|0)+110>>1]|0)!=0){z=0;break}do if((J|Z|0)==3){if(aa?(Wh(g,vb)|0)==0:0){z=0;break B}if((J|0)!=2)break;if(!(Wh(g,V)|0)){z=0;break B}}while(0);if((F|0)!=2){z=L;break}if(G|0){z=0;break}if((c[La>>2]|c[bc>>2]|0)!=1){G=0;z=Fa;break x}z=a[K>>0]|0;if((z+(a[Q>>0]|0)|0)!=3){G=0;z=Fa;break x}if(((a[g+(V*176|0)+93>>0]|0)+z|0)!=5){G=0;z=Fa;break x}if((uo(a[g+(V*176|0)+6>>0]|0)|0)!=3){G=0;z=Fa;break x}if(X){z=L;break y}if(!(Wh(g,V)|0)){G=0;z=Fa;break x}else{z=L;break y}}else z=0;while(0);if((G|0)!=0&(E|0)!=0){s=0;break u}}else{z=L;A=I}while(0);if(!z)z=Fa;else{c[Tb+(Fa<<2)>>2]=Y;c[Ub+(Fa<<2)>>2]=A;c[Sb+(Fa<<2)>>2]=V;a[Vb+Fa>>0]=C;z=Fa+1|0}}while(0);H=G;Y=Y+1|0;I=A;Fa=z}if(!((s|0)>1|(w|0)>1)?!((s|0)!=0&z<<24>>24<3):0){if(Ga|0?(Fa|0)!=1|(x|0)!=0|(Ga|0)>2:0){s=0;break}if((Fa|0)!=0&(((x|0)>0&1)+((y|0)>0&1)|0)==1){if((y|0)>1){if(!(aa&(y|0)==2)){s=0;break}if((c[yb>>2]|c[Yb>>2]|0)!=1){s=0;break}s=a[ba>>0]|0;if((s+A|0)!=3){s=0;break}if(((a[g+(vb*176|0)+93>>0]|0)+s|0)!=5){s=0;break}if((uo(a[g+(vb*176|0)+6>>0]|0)|0)!=3){s=0;break}}L=Ga<<3;Q=g+(vb*176|0)+136|0;V=(Ga&1|0)==0;X=g+(vb*176|0)+112|0;Y=g+(vb*176|0)+120|0;Z=g+(vb*176|0)+128|0;$=j+(vb*144|0)+94|0;aa=j+(vb*144|0)+106|0;ba=j+(vb*144|0)+112|0;ca=j+(vb*144|0)+118|0;o=j+(vb*144|0)+140|0;ya=g+(vb*176|0)+101|0;za=j+(vb*144|0)+130|0;Aa=j+(vb*144|0)+100|0;Ba=j+(vb*144|0)+109|0;Ca=j+(vb*144|0)+115|0;Da=j+(vb*144|0)+121|0;Ea=0;w=0;s=0;C:while(1){if((Ea|0)>=(Fa|0)){Db=414;break}K=c[Sb+(Ea<<2)>>2]|0;H=c[Tb+(Ea<<2)>>2]|0;do if((b[Ha>>1]|0)==(b[g+(K*176|0)+164>>1]|0)){x=eh(g,vb,H,u,t,Ab,zb)|0;if((x|0)>0)break;if((x|0)<0){s=-30012;Db=412;break C}else Db=357}else Db=357;while(0);do if((Db|0)==357){Db=0;F=c[Ub+(Ea<<2)>>2]|0;D=a[Vb+Ea>>0]|0;a[ec>>0]=0;a[ec+1>>0]=0;a[ec+2>>0]=0;a[fc>>0]=0;a[fc+1>>0]=0;a[fc+2>>0]=0;x=ci(g,vb,wb,l,ec,p,q)|0;c[Zb>>2]=x;J=ci(g,K,wb,l,fc,p,q)|0;c[cc>>2]=J;if((x+30019|0)>>>0<20|(J+30019|0)>>>0<20){s=-30015;Db=412;break C}if(a[Q>>0]&2){Qh(g,Ga,vb,H,ec,K,F,fc,Zb,cc)|0;x=c[Zb>>2]|0}if(!x)break;G=(x|0)>-1?x:0-x|0;if((G|0)==5)break;C=c[cc>>2]|0;if(!C)break;J=(C|0)>-1?C:0-C|0;if((J|0)==5)break;B=di(x,D,0,q)|0;z=di(C,D,0,q)|0;z=(B|0)<(z|0)?B:z;s=(z|0)==-1?1:s;B=G+-1|0;E=B>>>0<2;A=J+-1|0;I=A>>>0<2;do if((A|B)>>>0<2){do if(V){y=_(a[fc>>0]|0,a[ec>>0]|0)|0;y=(_(a[Na>>0]|0,a[Ma>>0]|0)|0)+y|0;y=y+(_(a[Pa>>0]|0,a[Oa>>0]|0)|0)|0;if((y|0)>10099){y=100;break}y=(y|0)<-10099?-100:(y|0)/100|0}else{y=e[g+(vb*176|0)+8+(H<<1)>>1]|0;va=+h[g+(y*176|0)+112>>3]-+h[X>>3];h[_b>>3]=va;wa=+h[g+(y*176|0)+120>>3]-+h[Y>>3];h[Qa>>3]=wa;hc=+h[g+(y*176|0)+128>>3]-+h[Z>>3];h[Ra>>3]=hc;y=e[g+(K*176|0)+8+(F<<1)>>1]|0;xa=+h[g+(K*176|0)+120>>3]-+h[g+(y*176|0)+120>>3];ic=+h[g+(K*176|0)+128>>3]-+h[g+(y*176|0)+128>>3];h[Sa>>3]=va+(+h[g+(K*176|0)+112>>3]-+h[g+(y*176|0)+112>>3]);h[Ta>>3]=wa+xa;h[Ua>>3]=hc+ic;y=0;while(1){if((y|0)==3)break;h[_b+(y<<3)>>3]=+(a[ec+y>>0]|0);h[_b+48+(y<<3)>>3]=+(a[fc+y>>0]|0);y=y+1|0}y=g+(K*176|0)+136|0;B=0;while(1){if((B|0)>=3){Db=377;break}A=_b+(B*24|0)|0;P=+Yh(A);if(P<1.0e-06){if((B|0)!=1){y=0;break}if((a[Q>>0]|0)==0?(a[y>>0]|0)==0:0){y=0;break}h[A>>3]=0.0;h[Ta>>3]=1.0;h[Ua>>3]=0.0;P=1.0}ic=1.0/P;h[A>>3]=+h[A>>3]*ic;A=_b+(B*24|0)+8|0;h[A>>3]=ic*+h[A>>3];A=_b+(B*24|0)+16|0;h[A>>3]=ic*+h[A>>3];B=B+1|0}do if((Db|0)==377){Db=0;P=+_h(_b,Sa,Va,0)*100.0;if(!(P>=0.0)){y=0-~~+M(+(.5-P))|0;break}else{y=~~+M(+(P+.5));break}}while(0)}while(0);if((((y|0)>-1?y:0-y|0)|0)>=50)break;z=(z|0)<4?z:4}else y=0;while(0);do if((z+1|0)>>>0>1){if(!((x|0)>0&(C|0)>0))break;if(!(ei(y,z|L,vb,H,$,aa,ba,ca,K,F,j+(K*144|0)+94|0,j+(K*144|0)+106|0,j+(K*144|0)+112|0,j+(K*144|0)+118|0)|0))break;z=a[Ja>>0]|0;do if(z<<24>>24){if(!E)break;B=z<<24>>24;if(((z<<24>>24>-1?B:0-B|0)+-1|0)>>>0>=2)Db=391}else Db=391;while(0);if((Db|0)==391){Db=0;a[Ja>>0]=x;a[o>>0]=a[ec>>0]|0;a[o+1>>0]=a[ec+1>>0]|0;a[o+2>>0]=a[ec+2>>0]|0}z=j+(K*144|0)+124|0;A=a[z>>0]|0;do if(A<<24>>24){if(!I)break;B=A<<24>>24;if(((A<<24>>24>-1?B:0-B|0)+-1|0)>>>0>=2)Db=395}else Db=395;while(0);if((Db|0)==395){Db=0;a[z>>0]=C;B=j+(K*144|0)+140|0;a[B>>0]=a[fc>>0]|0;a[B+1>>0]=a[fc+1>>0]|0;a[B+2>>0]=a[fc+2>>0]|0}a[za>>0]=a[za>>0]|a[ya>>0];B=j+(K*144|0)+130|0;a[B>>0]=a[B>>0]|a[g+(K*176|0)+101>>0]}while(0);B=di(x,D,1,q)|0;x=di(C,D,1,q)|0;x=(B|0)<(x|0)?B:x;c[Zb>>2]=G;c[cc>>2]=J;if((x+1|0)>>>0<=1){s=(x|0)==-1?1:s;break}if(!((G|0)>0&(J|0)>0))break;if(!(ei(y,x|L,vb,H,Aa,Ba,Ca,Da,K,F,j+(K*144|0)+100|0,j+(K*144|0)+109|0,j+(K*144|0)+115|0,j+(K*144|0)+121|0)|0))break;x=a[Ia>>0]|0;do if(x<<24>>24){if(!E)break;H=x<<24>>24;if(((x<<24>>24>-1?H:0-H|0)+-1|0)>>>0>=2)Db=403}else Db=403;while(0);do if((Db|0)==403){Db=0;a[Ia>>0]=G;if(a[Ja>>0]|0)break;a[o>>0]=a[ec>>0]|0;a[o+1>>0]=a[ec+1>>0]|0;a[o+2>>0]=a[ec+2>>0]|0}while(0);x=j+(K*144|0)+125|0;y=a[x>>0]|0;do if(y<<24>>24){if(!I)break;I=y<<24>>24;if(((y<<24>>24>-1?I:0-I|0)+-1|0)>>>0>=2)Db=408}else Db=408;while(0);do if((Db|0)==408){Db=0;a[x>>0]=J;if(a[j+(K*144|0)+124>>0]|0)break;J=j+(K*144|0)+140|0;a[J>>0]=a[fc>>0]|0;a[J+1>>0]=a[fc+1>>0]|0;a[J+2>>0]=a[fc+2>>0]|0}while(0);a[za>>0]=a[za>>0]|a[ya>>0];J=j+(K*144|0)+130|0;a[J>>0]=a[J>>0]|a[g+(K*176|0)+101>>0];w=w+1|0}while(0);Ea=Ea+1|0}if((Db|0)==412){Db=0;break}else if((Db|0)==414){Db=0;s=(s|0)==0?w:-30015;break}}else s=0}else s=0}else s=0;while(0);if((s+30019|0)>>>0<20)break;r=((s|0)!=0&1)+r|0}else v=((s+-1|0)>>>0<2&1)+v|0;vb=vb+1|0}if(Eb&(Cb|0)<(s|0))c[m>>2]=s;if(Fb&(Bb|0)<(r|0))c[n>>2]=r;if(u|0)bh(u)|0;if(t|0)Cq(t);Cq(Ab);i=gc;return s|0}else r=-1;while(0);i=gc;return r|0}function Uh(a){a=a|0;a=a&-241;if((a|0)!=4){if((a+-1|0)>>>0>=2)a=(a|0)==8?8:0}else a=4;return a|0}function Vh(b){b=b|0;var c=0,e=0,f=0;a:do if((((a[b+99>>0]|0)==0?(d[b+100>>0]|0)<2:0)?(c=uo(a[b+6>>0]|0)|0,(c|0)>0):0)?(e=a[b+94>>0]|0,(c|0)==((a[b+93>>0]|0)+(e<<24>>24)|0)):0)switch(c|0){case 2:{if(e<<24>>24){f=10;break a}if((a[b+92>>0]|0)==1){c=0;break a}else{f=10;break a}}case 3:{c=a[b+92>>0]|0;if(e<<24>>24==1&c<<24>>24==1){c=1;break a}if(e<<24>>24==0&c<<24>>24==2){c=1;break a}else{f=10;break a}}default:{f=10;break a}}else f=10;while(0);if((f|0)==10)c=-1;return c|0}function Wh(b,c){b=b|0;c=c|0;var f=0,g=0,h=0,i=0,j=0;g=b+(c*176|0)+92|0;i=0;while(1){if((i|0)>=(a[g>>0]|0)){f=0;break}j=b+(c*176|0)+72+i|0;f=d[j>>0]&15;a[j>>0]=f;if((f|0)==2){f=e[b+(c*176|0)+8+(i<<1)>>1]|0;if(((((a[b+(f*176|0)+92>>0]|0)==1?(a[b+(f*176|0)+99>>0]|0)==0:0)?(a[b+(f*176|0)+94>>0]|0)==0:0)?(a[b+(f*176|0)+100>>0]|0)==0:0)?(uo(a[b+(f*176|0)+6>>0]|0)|0)==2:0){f=1;break}}else if(((f|1|0)==9?(h=e[b+(c*176|0)+8+(i<<1)>>1]|0,(a[b+(h*176|0)+92>>0]|0)==1):0)?(uo(a[b+(h*176|0)+6>>0]|0)|0)==2:0){f=1;break}i=i+1|0}return f|0}function Xh(b,d,f,g,i){b=b|0;d=d|0;f=f|0;g=g|0;i=i|0;var j=0,k=0.0,l=0.0,m=0,n=0,o=0,p=0;o=a[b+(d*176|0)+52+f>>0]|0;m=o<<24>>24;n=o<<24>>24>-1?m:0-m|0;k=+h[b+(d*176|0)+128>>3];l=+h[b+((e[b+(d*176|0)+8+(f<<1)>>1]|0)*176|0)+128>>3]-k;a:do if(+N(+l)<1.0e-06){f=a[b+(d*176|0)+92>>0]|0;j=0;while(1){if((j|0)>=(f|0))break;if(+N(+(k-+h[b+((e[b+(d*176|0)+8+(j<<1)>>1]|0)*176|0)+128>>3]))>1.0e-06){p=16;break a}else j=j+1|0}if(!((i|0)==0|(_(m,i)|0)>-1)){c[g>>2]=0;break}switch(n|0){case 0:{c[g>>2]=0;f=0;break}case 1:{c[g>>2]=1;f=1;break}case 4:{c[g>>2]=9999;f=9999;break}case 6:{c[g>>2]=-1;f=-1;break}default:{c[g>>2]=0;f=0}}if(o<<24>>24<0){switch(f|0){case 1:case -1:break;default:break a}c[g>>2]=0-f}}else p=16;while(0);do if((p|0)==16){if((n|0)==4?(i|0)==0|(_(m,i)|0)>-1:0){c[g>>2]=9999;break}c[g>>2]=3}while(0);return +l}function Yh(a){a=a|0;var b=0.0,c=0.0,d=0.0;d=+h[a>>3];c=+h[a+8>>3];b=+h[a+16>>3];return +(+O(+(d*d+c*c+b*b)))}function Zh(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,j=0.0;f=i;i=i+16|0;e=f;c=a+24|0;d=a+48|0;if(!b)+_h(a,c,d,0);else{+_h(a,c,d,e);g=+N(+(+h[e>>3]));h[e>>3]=g;g=g>9999.0?9999.0:g;+_h(c,d,a,e);j=+N(+(+h[e>>3]));h[e>>3]=j;j=g>3]));h[e>>3]=g;h[b>>3]=j>3];j=+h[m+8>>3];f=+h[m+16>>3];k=e*+h[c>>3]+j*+h[c+8>>3]+f*+h[c+16>>3];do if(d|0){g=+Yh(c);e=+O(+(e*e+j*j+f*f));if(g>1.0e-07&e>1.0e-07){h[d>>3]=k/(g*e);break}else{h[d>>3]=0.0;break}}while(0);i=l;return +k}function $h(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0,i=0.0,j=0.0;e=+h[a+8>>3];j=+h[b+16>>3];i=+h[a+16>>3];g=+h[b+8>>3];f=+h[a>>3];d=+h[b>>3];h[c>>3]=e*j-i*g;h[c+8>>3]=-(j*f-i*d);h[c+16>>3]=g*f-e*d;return c|0}function ai(a,b,c){a=a|0;b=b|0;c=c|0;h[c>>3]=+h[a>>3]-+h[b>>3];h[c+8>>3]=+h[a+8>>3]-+h[b+8>>3];h[c+16>>3]=+h[a+16>>3]-+h[b+16>>3];return c|0}function bi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;e=+h[d+(c[a>>2]<<3)>>3]-+h[d+(c[b>>2]<<3)>>3];return (e>0.0?1:(e<0.0)<<31>>31)|0}function ci(f,g,j,k,l,m,n){f=f|0;g=g|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;var o=0.0,p=0,q=0,r=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,P=0,Q=0,R=0.0,S=0.0,T=0.0,U=0.0;Q=i;i=i+256|0;K=Q+120|0;J=Q+96|0;I=Q+72|0;L=Q;F=Q+232|0;B=Q+216|0;E=Q+192|0;H=Q+236|0;w=(a[f+(g*176|0)+102>>0]&1)!=0;if(((l|0?(a[l>>0]|0)==0:0)?(a[l+1>>0]|0)==0:0)?(p=l+2|0,(a[p>>0]|0)==0):0)a[p>>0]=100;P=a[f+(g*176|0)+94>>0]|0;v=P<<24>>24;a:do if((P<<24>>24<=3?(D=f+(g*176|0)+92|0,x=a[D>>0]|0,(x+v&-2|0)==2):0)?(y=f+(g*176|0)|0,z=a[f+(g*176|0)+99>>0]|0,A=a[f+(g*176|0)+100>>0]|0,(Mh(y,z,A)|0)!=0):0){if(!w){t=0;p=v;while(1){if((t|0)>=3)break;q=a[f+(g*176|0)+95+t>>0]|0;if(q<<24>>24>1){n=5;break a}t=t+1|0;p=p-(q<<24>>24)|0}if((p|0)>1){n=5;break}if((p|0)<0){n=-30009;break}else u=p}else u=0;c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;c[B+12>>2]=0;if((j|0)!=0&(k|0)>0){t=0;p=0;while(1){if((t|0)>=(k|0))break;if((e[j+(t*176|0)+8>>1]|0)==(g|0)){if(!w){q=a[j+(t*176|0)+98>>0]|0;if((q&255)<4)q=q<<24>>24;else{n=-30009;break a}}else q=0;q=B+(q<<2)|0;C=c[q>>2]|0;c[q>>2]=C+1;if((C|0)>0){n=-30009;break a}c[E+(p<<2)>>2]=t;p=p+1|0}t=t+1|0}if((v-p|0)>1)n=-4;else{C=p;G=24}}else{C=0;G=24}b:do if((G|0)==24){p=x+C|0;if((p|0)<2){n=P<<24>>24==1?4:-4;break a}if((!((p|0)!=2|(Lh(y,z,A)|0)!=0)?!((u|0)==1&(c[B>>2]|0)==0):0)?P<<24>>24!=1|(C|0)!=0:0){n=4;break}z=f+(g*176|0)+112|0;A=f+(g*176|0)+120|0;B=(j-f|0)/176|0;k=m&1;x=0-k|0;y=0;q=0;p=0;c:while(1){d:do switch(y|0){case 2:{B=q;break c}case 0:{w=0;while(1){if((w|0)>=(C|0))break d;v=c[E+(w<<2)>>2]|0;t=K+(q*24|0)|0;h[t>>3]=+h[j+(v*176|0)+112>>3]-+h[z>>3];u=K+(q*24|0)+8|0;h[u>>3]=+h[j+(v*176|0)+120>>3]-+h[A>>3];b[H+(q<<1)>>1]=b[j+(v*176|0)+48>>1]|0;o=-+Xh(f,v+B|0,0,F,x);v=c[F>>2]|0;e:do if((v|0)<1)switch(v|0){case -1:{G=34;break}default:{}}else{if((v|0)<9999)switch(v|0){case 1:{G=34;break e}default:break e}switch(v|0){case 9999:break;default:break e}p=p+1|0}while(0);if((G|0)==34){G=0;m=0-v|0;c[F>>2]=m;s=+h[t>>3];o=+h[u>>3];o=+O(+(s*s+o*o));o=(m|0)==-1?-o:o}h[K+(q*24|0)+16>>3]=o;w=w+1|0;q=q+1|0}}case 1:{w=0;while(1){if((w|0)>=(a[D>>0]|0))break d;v=e[f+(g*176|0)+8+(w<<1)>>1]|0;t=K+(q*24|0)|0;h[t>>3]=+h[f+(v*176|0)+112>>3]-+h[z>>3];u=K+(q*24|0)+8|0;h[u>>3]=+h[f+(v*176|0)+120>>3]-+h[A>>3];b[H+(q<<1)>>1]=b[f+(v*176|0)+48>>1]|0;o=+Xh(f,g,w,F,k);v=c[F>>2]|0;f:do if((v|0)<1)switch(v|0){case -1:{G=39;break}default:{}}else{if((v|0)<9999)switch(v|0){case 1:{G=39;break f}default:break f}switch(v|0){case 9999:break;default:break f}p=p+1|0}while(0);if((G|0)==39){G=0;s=+h[t>>3];o=+h[u>>3];o=+O(+(s*s+o*o));o=(v|0)==-1?-o:o}h[K+(q*24|0)+16>>3]=o;w=w+1|0;q=q+1|0}}default:{}}while(0);y=y+1|0}if(!p){A=(B|0)==2;if(A){n=0;while(1){if((n|0)==3)break;h[K+48+(n<<3)>>3]=-(+h[K+(n<<3)>>3]+ +h[K+24+(n<<3)>>3]);n=n+1|0}b[H+4>>1]=0;n=0}else n=0;while(1){if((n|0)==3)break;h[J+(n<<3)>>3]=+Yh(K+(n*24|0)|0);n=n+1|0}r=+h[J>>3];R=+h[J+8>>3];s=+h[J+16>>3];o=Rs?R:s;if(o<1.0e-06?1:o<(r>s?r:s)*.03){if(!(a[f+(g*176|0)+152>>0]|0)){n=4;break}n=Ph(f,g,H,B,4,2)|0;break}else n=0;while(1){if((n|0)==3){q=0;break}H=K+(n*24|0)|0;R=1.0/+h[J+(n<<3)>>3];h[H>>3]=+h[H>>3]*R;H=K+(n*24|0)+8|0;h[H>>3]=R*+h[H>>3];H=K+(n*24|0)+16|0;h[H>>3]=R*+h[H>>3];n=n+1|0}while(1){if((q|0)>=3)break;n=q+1|0;p=L+(q*24|0)|0;o=+Yh(ai(K+(q*24|0)|0,K+(((n|0)%3|0)*24|0)|0,p)|0);h[J+(q<<3)>>3]=o;if(o<.03){n=4;break b}R=1.0/o;h[p>>3]=R*+h[p>>3];H=L+(q*24|0)+8|0;h[H>>3]=R*+h[H>>3];H=L+(q*24|0)+16|0;h[H>>3]=R*+h[H>>3];q=n}r=+h[L+8>>3];U=+h[L+40>>3];o=+h[L+16>>3];T=+h[L+32>>3];R=r*U-o*T;S=+h[L>>3];s=+h[L+24>>3];o=U*S-o*s;s=T*S-r*s;h[I>>3]=R;w=I+8|0;h[w>>3]=-o;k=I+16|0;h[k>>3]=s;n=1;p=0;o=+O(+(s*s+(R*R+o*o)));while(1){if((n|0)==3)break;F=n+1|0;U=+Yh($h(L+(n*24|0)|0,L+(((F|0)%3|0)*24|0)|0,I)|0);H=U>o;G=H?n:p;n=F;p=G;o=H?U:o}H=(p+1|0)%3|0;y=(p+2|0)%3|0;n=L+(p*24|0)|0;q=L+(H*24|0)|0;t=L+(y*24|0)|0;o=+Yh($h(n,q,t)|0);h[J+(y<<3)>>3]=o;u=J+(p<<3)|0;if(!(o<+h[u>>3]*.03*+h[J+(H<<3)>>3])){H=L+(y*24|0)+16|0;U=+h[H>>3];r=(U>0.0?1.0:-1.0)/o;R=+h[t>>3]*r;h[t>>3]=R;G=L+(y*24|0)+8|0;S=+h[G>>3]*r;h[G>>3]=S;U=r*U;h[H>>3]=U;r=+h[K>>3];x=K+8|0;s=+h[x>>3];z=K+16|0;T=+h[z>>3];U=r*R+s*S+U*T;R=R*U;h[n>>3]=R;S=+h[G>>3]*U;G=L+(p*24|0)+8|0;h[G>>3]=S;U=U*+h[H>>3];H=L+(p*24|0)+16|0;R=r-R;h[n>>3]=R;S=s-S;h[G>>3]=S;U=T-U;h[H>>3]=U;T=+Yh(n);h[u>>3]=T;T=1.0/T;h[n>>3]=T*R;h[G>>3]=T*S;h[H>>3]=T*U;$h(t,n,q)|0;u=0;while(1){if((u|0)==3)break;n=K+(u*24|0)|0;o=+h[n>>3];h[I>>3]=o;q=K+(u*24|0)+8|0;r=+h[q>>3];h[w>>3]=r;t=K+(u*24|0)+16|0;s=+h[t>>3];h[k>>3]=s;v=0;while(1){if((v|0)==3)break;H=(v+p|0)%3|0;h[K+(u*24|0)+(v<<3)>>3]=o*+h[L+(H*24|0)>>3]+r*+h[L+(H*24|0)+8>>3]+s*+h[L+(H*24|0)+16>>3];v=v+1|0}S=+h[n>>3];T=+h[q>>3];U=+O(+(S*S+T*T));h[J+(u<<3)>>3]=U;U=1.0/U;h[n>>3]=U*S;h[q>>3]=U*T;h[t>>3]=U*+h[t>>3];u=u+1|0}p=K+24|0;R=+h[p>>3];q=K+56|0;S=+h[q>>3];t=K+32|0;T=+h[t>>3];u=K+48|0;U=+h[u>>3];if(!(S*T+R*U>.5?+N(+(R*S-T*U))<.03:0)){r=+h[K>>3];o=+h[x>>3];n=0;while(1){if((n|0)==3)break;I=K+(n*24|0)|0;U=+h[I>>3];J=K+(n*24|0)+8|0;T=+h[J>>3];h[I>>3]=r*U+o*T;h[J>>3]=r*T-o*U;n=n+1|0}r=+W(+(+h[t>>3]),+(+h[p>>3]));s=+W(+(+h[q>>3]),+(+h[u>>3]));r=r<0.0?r+6.283185307179586:r;s=s<0.0?s+6.283185307179586:s;q=r>3];o=U*100.0;if(!(U>=0.0))o=-+M(+(.5-o));else o=+M(+(o+.5));a[l+p>>0]=~~o;p=p+1|0}n=2-n|0;if((B|0)>2){U=q?r:s;T=r>s?r:s;if(U>3.1115926535897933|T<3.171592653589793|T-U>3.1115926535897933){g=f+(g*176|0)+101|0;a[g>>0]=d[g>>0]|1;break}if(!(+N(+(+h[z>>3]))>.7071067811865476))break;g=f+(g*176|0)+101|0;a[g>>0]=d[g>>0]|1;break}else{if(!A)break;o=+N(+(r+-3.141592653589793));if(o<.03){n=4;break}if(!(o<.087156))break;g=f+(g*176|0)+101|0;a[g>>0]=d[g>>0]|1;break}}else n=4}else n=4}}while(0);n=P<<24>>24>1&(n|0)>0&(n&8|0)==0?0-n|0:n}else n=0;while(0);i=Q;return n|0}function di(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a:do if(a){a=(a|0)==(d|0)?33:a;a=(a|0)==(0-d|0)?49:a;if((a|0)<0)a=(a|0)==-2?17:0-a|16;else a=(a|0)==2?1:a;a=(b|0)==0?a:a|32;if(!c)switch(a|0){case 1:{d=6;break a}case 36:case 33:break a;case 4:{d=4;break a}case 52:case 20:case 37:case 5:case 17:case 49:{d=0;break a}default:{d=-1;break a}}else switch(a|0){case 17:case 1:{d=6;break a}case 52:case 49:case 36:case 33:break a;case 37:case 5:{d=0;break a}case 20:case 4:{d=4;break a}default:{d=-1;break a}}}else d=0;while(0);return d|0}function ei(c,d,e,f,g,h,i,j,k,l,m,n,o,p){c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;var q=0,r=0;q=0;while(1){if((q|0)>=3)break;if(!(b[g+(q<<1)>>1]|0))break;q=q+1|0}r=0;while(1){if((r|0)>=3)break;if(!(b[m+(r<<1)>>1]|0))break;r=r+1|0}if((q|0)==3|(r|0)==3)q=0;else{d=d&255;a[p+r>>0]=d;a[j+q>>0]=d;b[g+(q<<1)>>1]=k+1;a[h+q>>0]=f;b[m+(r<<1)>>1]=e+1;a[n+r>>0]=l;c=c&255;a[o+r>>0]=c;a[i+q>>0]=c;q=1}return q|0}function fi(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,i=0;i=Dq(c,1)|0;if(!i)f=-1;else{g=(e|0)==0;h=0;a:while(1){if((h|0)>=(c|0)){f=0;break}do if(a[b+(h*176|0)+152>>0]|0?(a[i+h>>0]|0)==0:0){if(!g?ho(d[b+(h*176|0)+6>>0]|0)|0:0)break;f=gi(b,h,-1,i,e)|0;if(f|0)break a}while(0);h=h+1|0}Cq(i)}return f|0}function gi(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=i;i=i+16|0;D=H+8|0;E=H+4|0;C=H;a:do if((a[b+(e*176|0)+92>>0]|0)<=3)if(a[b+(e*176|0)+152>>0]|0){G=g+e|0;z=a[G>>0]|0;k=z<<24>>24;if(z<<24>>24>9)j=2;else{a[G>>0]=k+10;z=(h|0)==0;k=(k|0)%10|0;y=0;b:while(1){if((y|0)>=3){j=0;break}v=b+(e*176|0)+152+y|0;if(!(a[v>>0]|0)){j=0;break}t=a[b+(e*176|0)+146+y>>0]|0;u=t<<24>>24;if(!(hi(b,e,u,E,C,D)|0)){j=4;break a}x=c[E>>2]|0;do if(((x|0)!=(f|0)?(A=g+x|0,B=a[A>>0]|0,B<<24>>24<=19):0)?(a[b+(x*176|0)+92>>0]|0)<=3:0){w=a[v>>0]|0;if(!z){o=w<<24>>24;l=(o&56|0)==0;n=l?3:24;o=l?w&7:o>>3;l=c[D>>2]|0;m=a[b+(x*176|0)+152+l>>0]|0;p=m<<24>>24;if(!(p&56))F=15;else{s=l;r=24;l=p>>3}}else{m=c[D>>2]|0;l=m;m=a[b+(x*176|0)+152+m>>0]|0;n=3;o=w&7;F=15}if((F|0)==15){F=0;s=l;r=3;l=m&7}if((l+-1|o+-1)>>>0>=2)if((o|0)==(l|0))break;else{j=3;break a}m=a[b+(e*176|0)+149+y>>0]|0;q=a[b+(x*176|0)+149+s>>0]|0;p=c[C>>2]|0;p=(p+4+q+((q|0)>(p|0)&1)|0)%2|0;q=(B<<24>>24|0)%10|0;m=2-((((u+4+(m<<24>>24)+(m<<24>>24>t<<24>>24&1)|0)%2|0)+o|0)%2|0)|0;if(k){if((k|0)!=(m|0)){a[v>>0]=w&255^n;w=b+(x*176|0)+152+s|0;a[w>>0]=d[w>>0]^r;l=l^3}}else{a[G>>0]=(d[G>>0]|0)+m;k=m}l=2-((l+p|0)%2|0)|0;if(!q){l=(d[A>>0]|0)+l&255;a[A>>0]=l}else{if((q|0)!=(l|0)){j=5;break a}l=a[A>>0]|0}if(l<<24>>24<10?(j=gi(b,x,e,g,h)|0,(j|0)!=0):0)break b}while(0);y=y+1|0}a[G>>0]=(d[G>>0]|0)+10}}else j=1;else j=0;while(0);i=H;return j|0}function hi(b,d,f,g,h,i){b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0;l=d;j=0;a:while(1){d=j+1|0;if((j|0)>=20){d=0;break}j=e[b+(l*176|0)+8+(f<<1)>>1]|0;f=0;while(1){if((f|0)>=3){d=0;break a}if(!(a[b+(j*176|0)+152+f>>0]|0))break;k=b+(j*176|0)+146+f|0;if((l|0)==(e[b+(j*176|0)+8+(a[k>>0]<<1)>>1]|0)){m=7;break a}f=f+1|0}if(f|0){d=0;break}if((a[b+(j*176|0)+92>>0]|0)!=2){d=0;break}if((a[b+(j*176|0)+93>>0]|0)!=4){d=0;break}f=(e[b+(j*176|0)+8>>1]|0)==(l|0)&1;l=j;j=d}if((m|0)==7){c[g>>2]=j;c[h>>2]=a[k>>0];c[i>>2]=f}return d|0}function ii(b){b=b|0;var d=0,e=0;d=c[22856]|0;if(!d){a[92221]=$n(86667)|0;a[92222]=$n(86669)|0;a[92223]=$n(86690)|0;a[92224]=$n(86692)|0;a[92225]=$n(86799)|0;a[92226]=$n(86740)|0;a[92227]=$n(86793)|0;a[92228]=$n(86743)|0;a[92229]=$n(86796)|0;a[92230]=$n(86694)|0;a[92231]=$n(86746)|0;c[22856]=11;d=11}e=0;while(1){if((e|0)>=(d|0)){d=0;break}if((a[92221+e>>0]|0)==b<<24>>24){d=1;break}else e=e+1|0}return d|0}function ji(b){b=b|0;var d=0,e=0,f=0;d=c[22857]|0;if(!((a[92233]|0)!=0|(d|0)!=0)){f=($n(86667)|0)&255;e=c[22857]|0;d=e+1|0;c[22857]=d;a[92233+e>>0]=f}e=0;while(1){if((e|0)>=(d|0)){d=0;break}if((a[92233+e>>0]|0)==b<<24>>24){d=1;break}else e=e+1|0}return d|0}function ki(b){b=b|0;var d=0,e=0;d=c[22858]|0;if(!d){a[92234]=$n(86667)|0;a[92235]=$n(86669)|0;a[92236]=$n(86690)|0;a[92237]=$n(86740)|0;a[92238]=$n(86793)|0;c[22858]=5;d=5}e=0;while(1){if((e|0)>=(d|0)){d=0;break}if((a[92234+e>>0]|0)==b<<24>>24){d=1;break}else e=e+1|0}return d|0}function li(c,d,f,g){c=c|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;i=(a[d+(f*176|0)+99>>0]|0)==-1&1;a:do switch(g|0){case 1:{g=c+2|0;b[g>>1]=(e[g>>1]|0)-i;g=(a[d+(f*176|0)+94>>0]|0)+i|0;b[c>>1]=(e[c>>1]|0)-g;h=0;while(1){if((h|0)==3)break a;j=c+(h+2<<1)|0;b[j>>1]=(e[j>>1]|0)-(a[2-h+(d+(f*176|0)+95)>>0]|0);h=h+1|0}}case 2:{b[c>>1]=0;b[c+2>>1]=0;b[c+4>>1]=0;b[c+6>>1]=0;b[c+8>>1]=0;g=c+2|0;h=0;j=0;k=7;break}default:{h=c+2|0;g=h;h=b[h>>1]|0;j=b[c>>1]|0;k=7}}while(0);b:do if((k|0)==7){b[g>>1]=(h&65535)+i;g=(a[d+(f*176|0)+94>>0]|0)+i|0;b[c>>1]=(j&65535)+g;h=0;while(1){if((h|0)==3)break b;k=c+(h+2<<1)|0;b[k>>1]=(e[k>>1]|0)+(a[2-h+(d+(f*176|0)+95)>>0]|0);h=h+1|0}}while(0);return g|0}function mi(c,d,f,g){c=c|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;h=d+(f*176|0)+99|0;i=a[h>>0]|0;a:do if(i<<24>>24>=-1){if(i<<24>>24==1){if(!(b[d+(f*176|0)+110>>1]|0))break}else if(i<<24>>24>1)break;k=(g|0)==1?-1:1;j=(b[d+(f*176|0)+104>>1]&1)==0?0:k;if((g|0)==2){b[c>>1]=0;b[c+2>>1]=0;b[c+4>>1]=0;b[c+6>>1]=0;b[c+8>>1]=0;b[c+10>>1]=0;i=a[h>>0]|0}h=a[d+(f*176|0)+92>>0]|0;g=a[d+(f*176|0)+93>>0]|0;do if(i<<24>>24<1){if(h<<24>>24==g<<24>>24){if(i<<24>>24>=0){l=12;break}l=c+2|0;b[l>>1]=(e[l>>1]|0)+k;l=c+8|0;b[l>>1]=(e[l>>1]|0)+j;break a}if(((h<<24>>24)+1|0)!=(g<<24>>24|0))break a;if(i<<24>>24<0){l=c+6|0;b[l>>1]=(e[l>>1]|0)+k;break a}}else if(((h<<24>>24)+1|0)!=(g<<24>>24|0)){if(((h<<24>>24)+2|0)!=(g<<24>>24|0))break a}else l=12;while(0);if((l|0)==12){if(!(a[d+(f*176|0)+94>>0]|0))break;b[c>>1]=(e[c>>1]|0)+k;l=c+8|0;b[l>>1]=(e[l>>1]|0)+j;break}if(!(a[d+(f*176|0)+94>>0]|0)){l=c+10|0;b[l>>1]=(e[l>>1]|0)+j;break}else{l=c+4|0;b[l>>1]=(e[l>>1]|0)+k;break}}while(0);return}function ni(a,c,d){a=a|0;c=c|0;d=d|0;var e=0;b[a+26>>1]=d;b[a+24>>1]=0;e=b[c+(d*176|0)+108>>1]|0;b[a+22>>1]=e;if(!(e<<16>>16)){li(a,c,d,2)|0;mi(a+10|0,c,d,2)}else{b[a>>1]=0;b[a+2>>1]=0;b[a+4>>1]=0;b[a+6>>1]=0;b[a+8>>1]=0}return 0}function oi(c,e,f){c=c|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+16|0;k=n;a:do if(((d[c+(e*176|0)+100>>0]|0)<2?(g=uo(a[c+(e*176|0)+6>>0]|0)|0,(g|0)!=0):0)?(m=a[c+(e*176|0)+92>>0]|0,(g|0)>(m|0)):0){h=c+(e*176|0)+99|0;l=a[h>>0]|0;switch(l<<24>>24){case 0:case -1:{j=a[c+(e*176|0)+93>>0]|0;if((g|0)<(j|0)){g=0;break a}h=(l<<24>>24==-1&1)+(a[c+(e*176|0)+94>>0]|0)|0;if((h+j|0)!=(g|0)){g=0;break a}switch(j-m|0){case 0:{a[f+3>>0]=1;a[f+4>>0]=0;break}case 1:{a[f+3>>0]=0;a[f+4>>0]=1;break}default:{g=0;break a}}a[f+2>>0]=h;a[f+1>>0]=g-h;a[f>>0]=0;a[f+5>>0]=0;break a}default:{}}if(((b[c+(e*176|0)+110>>1]|0)!=0?(pi(c,e,k)|0)>-1:0)?(j=a[k>>0]|0,(j&12|0)!=0):0){if(!(j&4)){if(!(j&8)){g=0;break}a[f+3>>0]=1;a[f+4>>0]=0}else{a[f+3>>0]=0;a[f+4>>0]=1}m=a[c+(e*176|0)+94>>0]|0;a[f+2>>0]=m;a[f+1>>0]=g-(m&255);a[f>>0]=a[h>>0]|0;a[f+5>>0]=0}else g=0}else g=0;while(0);i=n;return g|0}function pi(c,d,f){c=c|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=c+(d*176|0)|0;a[f>>0]=0;g=a[c+(d*176|0)+99>>0]|0;i=g<<24>>24;a:do if(((g<<24>>24>-1?i:0-i|0)|0)!=1)if(!(g<<24>>24)){j=c+(d*176|0)+92|0;k=9}else g=-1;else{j=c+(d*176|0)+92|0;g=a[j>>0]|0;h=0;while(1){if((h|0)>=(g|0)){k=9;break a}m=e[c+(d*176|0)+8+(h<<1)>>1]|0;n=a[c+(m*176|0)+99>>0]|0;o=i+n|0;n=n-i|0;if((((o|0)>-1?o:0-o|0)|0)<(((n|0)>-1?n:0-n|0)|0)?(b[c+(m*176|0)+108>>1]|0)==0:0){g=-1;break a}h=h+1|0}}while(0);b:do if((k|0)==9){i=c+(d*176|0)+166|0;h=c+(d*176|0)+6|0;g=0;c:while(1){if((g|0)>=6){g=-1;break b}do if(!(kp(l,13036+(g*9|0)|0)|0)){if(g>>>0>1){if((a[13036+(g*9|0)+8>>0]|0)!=(a[j>>0]|0))break;if((e[i>>1]|0)<=4)break}o=(uo(a[h>>0]|0)|0)&255;if(qi(l,a[13036+(g*9|0)+3>>0]|0,a[13036+(g*9|0)+6>>0]|0,a[13036+(g*9|0)+5>>0]|0,a[13036+(g*9|0)+4>>0]|0,o,f)|0)break c}while(0);g=g+1|0}g=a[13036+(g*9|0)+7>>0]|0}while(0);return g|0}function qi(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;n=a[b+99>>0]|0;o=n<<24>>24;p=n<<24>>24==-1&1;do if(n<<24>>24==d<<24>>24){m=c[b+92>>2]|0;d=(m&65535)>>>8&255;j=m>>>16;if(!((j&255)<<24>>24==0?1:(m&255)<<24>>24!=d<<24>>24)){if(h<<24>>24==0?1:((j<<24>>24)+(d<<24>>24)|0)!=((_(o,e<<24>>24)|0)+(f<<24>>24)|0)){d=0;break}a[i>>0]=1;d=0;break}d=c[b+92>>2]|0;l=d&255;k=(d&65535)>>>8&255;j=d>>>16;m=j&255;if(l<<24>>24>24){b=j<<24>>24;j=b+(d<<24>>24)|0;if((b+(k<<24>>24)|0)==((_(o,e<<24>>24)|0)+(f<<24>>24)|0)){d=g<<24>>24;if((j|0)==(d|0)){a[i>>0]=(h<<24>>24?l<<24>>24!=g<<24>>24:0)?9:0;d=1;break}if((j|0)==(d+-1|0)){a[i>>0]=h<<24>>24==0?0:m<<24>>24?5:4;d=1}else d=0}else d=0}else q=11}else q=11;while(0);a:do if((q|0)==11){switch(n<<24>>24){case 0:case -1:break;default:{d=0;break a}}j=a[b+94>>0]|0;q=j<<24>>24;k=a[b+92>>0]|0;l=q+p+(k<<24>>24)|0;if(((a[b+93>>0]|0)+p+q|0)==(f<<24>>24|0)){d=g<<24>>24;if((l|0)!=(d|0)){if((l|0)!=(d+-1|0)){d=0;break}a[i>>0]=h<<24>>24==0?16:22;d=1;break}if(h<<24>>24?k<<24>>24!=g<<24>>24:0){if(k<<24>>24>=g<<24>>24){d=0;break}d=j<<24>>24?24:20}else d=16;a[i>>0]=d;d=1}else d=0}while(0);return d|0}function ri(c,e,f){c=c|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+16|0;l=p;a:do if(((((d[c+(e*176|0)+100>>0]|0)<2?(g=zo(a[c+(e*176|0)+6>>0]|0)|0,(g|0)!=0):0)?(h=a[c+(e*176|0)+92>>0]|0,o=h<<24>>24,(g|0)>(o|0)):0)?(m=(g|0)==4,!(m&h<<24>>24<2)):0)?(n=(g|0)==2,!(n&h<<24>>24>1)):0){h=c+(e*176|0)+99|0;k=a[h>>0]|0;switch(k<<24>>24){case 0:case -1:{j=a[c+(e*176|0)+93>>0]|0;if((g|0)<(j|0)){g=0;break a}h=(k<<24>>24==-1&1)+(a[c+(e*176|0)+94>>0]|0)|0;if((h+j|0)!=(g|0)){g=0;break a}switch(j-o|0){case 0:{a[f+3>>0]=1;a[f+4>>0]=0;break}case 1:{a[f+3>>0]=0;a[f+4>>0]=1;break}default:{g=0;break a}}a[f+2>>0]=h;a[f+1>>0]=g-h;a[f>>0]=0;a[f+5>>0]=n?1:m?2:0;break a}default:{}}if(((b[c+(e*176|0)+110>>1]|0)!=0?(pi(c,e,l)|0)>-1:0)?(j=a[l>>0]|0,(j&12|0)!=0):0){if(!(j&4)){if(!(j&8)){g=0;break}a[f+3>>0]=1;a[f+4>>0]=0}else{a[f+3>>0]=0;a[f+4>>0]=1}o=a[c+(e*176|0)+94>>0]|0;a[f+2>>0]=o;a[f+1>>0]=g-(o&255);a[f>>0]=a[h>>0]|0;a[f+5>>0]=n?1:m?2:0}else g=0}else g=0;while(0);i=p;return g|0}function si(a,d,f,g,h,j,k,l){a=a|0;d=d|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;K=i;i=i+848|0;B=K+584|0;D=K+328|0;E=K+72|0;I=K;G=c[d>>2]|0;J=d+16|0;C=c[d+20>>2]|0;a:do if((g|0)>=1){z=c[J>>2]|0;n=0;m=0;while(1){if((n|0)>=(z|0))break;y=b[G+(n*36|0)+28>>1]|0;n=n+1|0;m=(m&65535)<(y&65535)?y:m}x=m+1<<16>>16;s=b[f+22>>1]|0;n=b[f+24>>1]|0;o=0;p=0;q=0;r=x;m=0;while(1){if((o|0)==(g|0)){n=q;q=r;break}w=b[f+(o*28|0)+22>>1]|0;y=b[f+(o*28|0)+24>>1]|0;o=o+1|0;p=(s<<16>>16==w<<16>>16&1)+p|0;q=(n<<16>>16==y<<16>>16&1)+q|0;r=w<<16>>16!=0&(w&65535)<(r&65535)?w:r;m=(y<<16>>16==0&1)+m|0}if(!(s<<16>>16!=0&(p|0)==(g|0)&(n|0)==(g|0))){b:do if(!m){r=x&65535;s=g<<1;t=0;n=E;m=0;while(1){if((t|0)>=(g|0)){w=m;A=28;break b}q=f+(t*28|0)+24|0;p=b[q>>1]|0;if((p&65535)>=(x&65535)){o=0;while(1){if((o|0)>=(m|0))break;if(p<<16>>16==(b[n+(o<<1)>>1]|0))break;o=o+1|0}if((o|0)==(m|0)){if((n|0)==(E|0)&(m|0)==127){n=Bq(s)|0;if(!n){m=-1;break b}ir(n|0,E|0,254)|0}b[n+(m<<1)>>1]=p;m=m+1|0}b[q>>1]=o+r}t=t+1|0}}else{if((m|0)!=(g|0)){m=-1;break a}o=q<<16>>16==x<<16>>16;m=0;while(1){if((m|0)==(g|0))break;b[f+(m*28|0)+24>>1]=q;m=m+1|0}n=E;w=o&1;A=28}while(0);c:do if((A|0)==28){d:do if(!w)m=x&65535;else{if((w+z|0)>(C|0)){m=-1;break c}er(G+(z*36|0)|0,0,w*36|0)|0;m=x&65535;o=0;while(1){if((o|0)>=(w|0))break d;b[G+((o+z|0)*36|0)+28>>1]=o+m;o=o+1|0}}while(0);t=z-m|0;u=g<<1;m=0;v=0;p=0;o=D;y=0;e:while(1){if((v|0)>=(g|0)){A=66;break}q=b[f+(v*28|0)+22>>1]|0;s=f+(v*28|0)+24|0;r=b[s>>1]|0;if(q<<16>>16)if(q<<16>>16!=r<<16>>16){p=0;while(1){if((p|0)>=(y|0))break;if(q<<16>>16==(b[o+(p<<1)>>1]|0)){A=40;break}p=p+1|0}if((A|0)==40){A=0;if(r<<16>>16!=(b[n+(p<<1)>>1]|0)){m=-1;break}}if((p|0)==(y|0)){if((y|0)==127){if((n|0)==(E|0)){n=Bq(u)|0;if(!n){m=-1;break}ir(n|0,E|0,254)|0}if((o|0)==(D|0)){o=Bq(u)|0;if(!o){m=-1;break}ir(o|0,D|0,254)|0}}b[o+(y<<1)>>1]=q;b[n+(y<<1)>>1]=b[s>>1]|0;p=y;q=y+1|0}else q=y}else q=y;else{do if((r&65535)<(x&65535)){if((p|0)<(z|0)?r<<16>>16==(b[G+(p*36|0)+28>>1]|0):0)break;else p=0;while(1){if((p|0)>=(z|0))break;if(r<<16>>16==(b[G+(p*36|0)+28>>1]|0))break;p=p+1|0}if((p|0)==(z|0)){m=-1;break e}}else p=t+(r&65535)|0;while(0);q=G+(p*36|0)+30|0;b[q>>1]=(b[q>>1]|0)+1<<16>>16;q=0;while(1){if((q|0)==5){q=0;break}s=G+(p*36|0)+(q<<1)|0;b[s>>1]=(e[s>>1]|0)+(e[f+(v*28|0)+(q<<1)>>1]|0);q=q+1|0}while(1){if((q|0)==6)break;s=G+(p*36|0)+10+(q<<1)|0;b[s>>1]=(e[s>>1]|0)+(e[f+(v*28|0)+10+(q<<1)>>1]|0);q=q+1|0}b[h+((e[f+(v*28|0)+26>>1]|0)*176|0)+108>>1]=r;m=m+1|0;q=y}v=v+1|0;y=q}f:do if((A|0)==66){m=m+y|0;r=w+z|0;if(!m)m=0;else{f=(y|0)!=0;g:do if(f){p=0;q=0;while(1){if((p|0)>=(r|0)){x=q;break g}z=b[G+(p*36|0)+28>>1]|0;p=p+1|0;q=(q&65535)<(z&65535)?z:q}}while(0);w=0;p=r;while(1){if((w|0)>=(y|0)){t=p;break}s=b[o+(w<<1)>>1]|0;t=b[n+(w<<1)>>1]|0;v=-1;r=-1;u=0;while(1){q=(r|v|0)<0;if(!((u|0)<(p|0)&q))break;if((v|0)<0)q=s<<16>>16==(b[G+(u*36|0)+28>>1]|0)?u:v;else q=v;if((r|0)<0)r=t<<16>>16==(b[G+(u*36|0)+28>>1]|0)?u:r;v=q;u=u+1|0}if(q){m=-1;break f}else q=0;while(1){if((q|0)==5){q=0;break}z=G+(r*36|0)+(q<<1)|0;b[z>>1]=(e[z>>1]|0)+(e[G+(v*36|0)+(q<<1)>>1]|0);q=q+1|0}while(1){if((q|0)==6)break;z=G+(r*36|0)+10+(q<<1)|0;b[z>>1]=(e[z>>1]|0)+(e[G+(v*36|0)+10+(q<<1)>>1]|0);q=q+1|0}q=G+(v*36|0)|0;z=G+(r*36|0)+30|0;b[z>>1]=(e[z>>1]|0)+(e[G+(v*36|0)+30>>1]|0);p=p+-1|0;if((p|0)>(v|0))jr(q|0,q+36|0,(p-v|0)*36|0)|0;w=w+1|0}h:do if(f){q=((x&65535)<<1)+2|0;if((x&65535)>126){p=Bq(q)|0;if(!p)m=p;else{s=p;A=90}}else{s=B;A=90}i:do if((A|0)==90){er(s|0,0,q|0)|0;p=0;while(1){if((p|0)>=(t|0)){r=0;break}A=p+1|0;b[s+(e[G+(p*36|0)+28>>1]<<1)>>1]=A;p=A}while(1){if((r|0)>=(y|0)){p=0;break}p=s+(e[o+(r<<1)>>1]<<1)|0;if(b[p>>1]|0){m=s;break i}q=b[s+(e[n+(r<<1)>>1]<<1)>>1]|0;if(!(q<<16>>16)){m=s;break i}b[p>>1]=q;r=r+1|0}while(1){if((p|0)>=(t|0)){r=0;break}A=G+(p*36|0)+28|0;b[A>>1]=b[s+(e[A>>1]<<1)>>1]|0;p=p+1|0}while(1){if((r|0)>=(j|0))break;p=h+(r*176|0)+108|0;q=b[p>>1]|0;if(q<<16>>16?(A=b[s+((q&65535)<<1)>>1]|0,b[p>>1]=A,!(A<<16>>16!=0&(x&65535)>(A&65535))):0){m=s;break i}r=r+1|0}if((s|0)==(B|0)|(s|0)==0){p=o;break h}Cq(s);p=o;break h}while(0);if(!((m|0)!=(B|0)&(m|0)!=0)){m=-1;break f}Cq(m);m=-1;break f}else p=o;while(0);if(!((p|0)==(D|0)|(o|0)==0))Cq(p);if(!((n|0)==(E|0)|(n|0)==0))Cq(n);p=d+8|0;o=c[p>>2]|0;if(!o){n=C<<2;o=Bq(n)|0;c[p>>2]=o;if(!o){m=-1;break a}}else n=C<<2;er(o|0,0,n|0)|0;n=0;while(1){if((n|0)>=(t|0))break;if(b[G+(n*36|0)+30>>1]|0?(F=b[G+(n*36|0)+28>>1]|0,F<<16>>16):0)b[(c[p>>2]|0)+((F&65535)<<1)>>1]=n+1;n=n+1|0}j:do if(l|0){n=I;o=n+68|0;do{c[n>>2]=0;n=n+4|0}while((n|0)<(o|0));c[I+16>>2]=t;c[I>>2]=G;c[I+60>>2]=c[d+60>>2]&524288;n=rk(l,h,j,0)|0;do if((n+9999|0)>>>0>=20){if(c[c[l+164>>2]>>2]&8|0?(H=ok(a,l,h,j,k)|0,(H+9999|0)>>>0<20):0){m=H;break}n=sk(a,l,h,j,I)|0;if((n+9999|0)>>>0>19)break j;else{m=n;break a}}else m=n;while(0);break a}while(0);c[J>>2]=t;break a}}while(0);if((o|0)!=(D|0)&(o|0)!=0)Cq(o)}while(0);if((n|0)!=(E|0)&(n|0)!=0)Cq(n)}else m=0}else m=0;while(0);i=K;return m|0}function ti(c,f,g){c=c|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=0;h=0;while(1){if((o|0)>=(f|0))break;j=e[g+(o<<2)+2>>1]|0;n=b[g+(o<<2)>>1]|0;k=n&65535;l=c+(k*176|0)+72+j|0;i=d[l>>0]|0;if((i&15|0)!=8){m=(i&240|8)&255;a[l>>0]=m;k=e[c+(k*176|0)+8+(j<<1)>>1]|0;j=a[c+(k*176|0)+92>>0]|0;i=0;while(1){if((i|0)>=(j|0))break;if((b[c+(k*176|0)+8+(i<<1)>>1]|0)==n<<16>>16){p=7;break}i=i+1|0}if((p|0)==7){p=0;a[c+(k*176|0)+72+i>>0]=m}h=h+1|0}o=o+1|0}return h|0}function ui(d,f,g,h,i,j,k){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;m=b[d>>1]|0;l=b[f>>1]|0;u=m&65535;v=b[g+(u*176|0)+110>>1]|0;do if(v<<16>>16?(s=l&65535,(b[g+(s*176|0)+110>>1]|0)==v<<16>>16):0){if((a[g+(u*176|0)+99>>0]|0)==1){if(!k)break}else if(!(k|0?(a[g+(s*176|0)+99>>0]|0)==1:0))break;if((c[k+4>>2]|0)>0){r=c[k>>2]|0;a:do if((b[r+6>>1]|0)==v<<16>>16?((e[r+4>>1]|0)-(e[r>>1]|0)|0)<2:0){r=b[g+(s*176|0)+108>>1]|0;b:do if(r<<16>>16){p=0;o=l;while(1){if((p|0)>=(j|0)){k=o;break}k=b[i+(p*28|0)+26>>1]|0;if(k<<16>>16!=l<<16>>16?(q=k&65535,(b[g+(q*176|0)+108>>1]|0)==r<<16>>16):0){n=b[g+(q*176|0)+110>>1]|0;if(!(n<<16>>16))break;if(n<<16>>16!=v<<16>>16)k=v<<16>>16==(b[g+((o&65535)*176|0)+110>>1]|0)?k:o;else k=o}else k=o;p=p+1|0;o=k}if(k<<16>>16==l<<16>>16){n=0;while(1){if((n|0)>=(h|0)){s=l;break b}if(!((n|0)==(s|0)?1:(b[g+(n*176|0)+108>>1]|0)!=r<<16>>16)){k=b[g+(n*176|0)+110>>1]|0;if(!(k<<16>>16)){l=n;break}if(k<<16>>16!=v<<16>>16)l=v<<16>>16==(b[g+((l&65535)*176|0)+110>>1]|0)?n&65535:l}n=n+1|0}s=l&65535}else s=k}else s=l;while(0);q=b[g+(u*176|0)+108>>1]|0;if(q<<16>>16){p=s&65535;r=g+(p*176|0)+110|0;o=0;n=m;while(1){if((o|0)>=(j|0)){l=n;break}l=b[i+(o*28|0)+26>>1]|0;if(l<<16>>16!=m<<16>>16?(t=l&65535,(b[g+(t*176|0)+108>>1]|0)==q<<16>>16):0){k=b[g+(t*176|0)+110>>1]|0;if(!(k<<16>>16))break;if(k<<16>>16!=v<<16>>16?v<<16>>16==(b[g+((n&65535)*176|0)+110>>1]|0):0)l=k<<16>>16==(b[r>>1]|0)?n:l;else l=n}else l=n;o=o+1|0;n=l}if(l<<16>>16==m<<16>>16)if(!(b[g+(p*176|0)+108>>1]|0))l=s;else{l=0;while(1){if((l|0)>=(h|0)){l=s;break a}if(!((l|0)==(u|0)?1:(b[g+(l*176|0)+108>>1]|0)!=q<<16>>16)){k=b[g+(l*176|0)+110>>1]|0;if(!(k<<16>>16))break;if(k<<16>>16!=v<<16>>16?v<<16>>16==(b[g+((m&65535)*176|0)+110>>1]|0):0)m=k<<16>>16==(b[r>>1]|0)?m:l&65535}l=l+1|0}m=l&65535;l=s}else{m=l;l=s}}else l=s}while(0);b[f>>1]=l;b[d>>1]=m}}while(0);return 0}function vi(a,d,f,g,h,j,k,l,m,n,o){a=a|0;d=d|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;J=i;i=i+128|0;G=J+88|0;F=J+48|0;E=J+8|0;H=J+2|0;I=J;s=c[f>>2]|0;a:do if((s|0)==(c[h>>2]|0)){t=0;p=0;while(1){if((t|0)>=(s|0)){z=p;break}r=b[d+(t*28|0)+22>>1]|0;b[d+(t*28|0)+24>>1]=r;if(r<<16>>16){q=0;while(1){if((q|0)>=(p|0))break;if((b[F+(q<<1)>>1]|0)==r<<16>>16)break;q=q+1|0}if((q|0)==(p|0)){b[G+(p<<1)>>1]=b[d+(t*28|0)+26>>1]|0;b[F+(p<<1)>>1]=r;b[E+(p<<1)>>1]=t;p=p+1|0}}t=t+1|0}q=0;p=0;b:while(1){if((q|0)>=(z|0))break;x=q+1|0;y=G+(q<<1)|0;v=F+(q<<1)|0;w=x;r=p;while(1){if((w|0)>=(z|0)){q=x;p=r;continue b}b[H>>1]=b[y>>1]|0;b[I>>1]=b[G+(w<<1)>>1]|0;ui(H,I,l,m,d,c[f>>2]|0,n)|0;p=xk(a,j,k,l,m,e[H>>1]|0,e[I>>1]|0,o)|0;if((p+9999|0)>>>0<20)break a;c:do if(!p)p=r;else{s=b[v>>1]|0;u=b[F+(w<<1)>>1]|0;t=(s&65535)<(u&65535)?s:u;u=(s&65535)>(u&65535)?s:u;s=0;p=r;while(1){if((s|0)==(z|0))break;q=F+(s<<1)|0;if((b[q>>1]|0)==u<<16>>16){b[q>>1]=t;p=p+1|0}s=s+1|0}q=c[f>>2]|0;s=0;while(1){if((s|0)>=(q|0))break c;r=d+(s*28|0)+24|0;if((b[r>>1]|0)==u<<16>>16)b[r>>1]=t;s=s+1|0}}while(0);w=w+1|0;r=p}}d:do if(!p)D=z;else{q=1;while(1){if((q|0)>=(z|0)){r=0;p=0;break}p=F+(q<<1)|0;r=0;while(1){if((r|0)>=(q|0))break;if((b[F+(r<<1)>>1]|0)==(b[p>>1]|0)){A=32;break}else r=r+1|0}if((A|0)==32){A=0;b[p>>1]=0}q=q+1|0}while(1){if((r|0)>=(z|0)){D=p;break d}q=b[F+(r<<1)>>1]|0;if(q<<16>>16){if((r|0)!=(p|0)){b[F+(p<<1)>>1]=q;b[G+(p<<1)>>1]=b[G+(r<<1)>>1]|0;b[E+(p<<1)>>1]=b[E+(r<<1)>>1]|0}p=p+1|0}r=r+1|0}}while(0);q=c[f>>2]|0;r=0;p=D;while(1){if((r|0)>=(q|0))break;if(!(b[d+(r*28|0)+24>>1]|0)){b[F+(p<<1)>>1]=0;b[G+(p<<1)>>1]=b[d+(r*28|0)+26>>1]|0;b[E+(p<<1)>>1]=r;p=p+1|0}r=r+1|0}C=p&65535;y=p&65535;p=0;q=m+1&65535;e:while(1){if((p|0)>=(C|0)){v=0;p=0;break}z=p+1|0;A=F+(p<<1)|0;B=G+(p<<1)|0;x=E+(p<<1)|0;v=(p|0)<(D|0);w=z;while(1){if((w|0)>=(C|0)){p=z;continue e}s=b[A>>1]|0;r=F+(w<<1)|0;t=b[r>>1]|0;f:do if((s|t)<<16>>16==0|(s<<16>>16==t<<16>>16|v&(w|0)<(D|0))^1){b[H>>1]=b[B>>1]|0;b[I>>1]=b[G+(w<<1)>>1]|0;ui(H,I,l,m,d,c[f>>2]|0,n)|0;p=xk(a,j,k,l,m,e[H>>1]|0,e[I>>1]|0,o)|0;if((p+9999|0)>>>0<20)break a;if((p|0)>=1){p=t<<16>>16==0;if(!(s<<16>>16))if(p){b[r>>1]=q;b[A>>1]=q;b[d+((e[E+(w<<1)>>1]|0)*28|0)+24>>1]=q;b[d+((e[x>>1]|0)*28|0)+24>>1]=q;p=q+1<<16>>16;break}else{b[A>>1]=t;b[d+((e[x>>1]|0)*28|0)+24>>1]=b[r>>1]|0;p=q;break}if(p){b[r>>1]=s;b[d+((e[E+(w<<1)>>1]|0)*28|0)+24>>1]=b[A>>1]|0;p=q;break}u=(s&65535)<(t&65535)?s:t;t=(s&65535)>(t&65535)?s:t;r=0;while(1){if((r|0)==(y|0))break;p=F+(r<<1)|0;if((b[p>>1]|0)==t<<16>>16)b[p>>1]=u;r=r+1|0}p=c[f>>2]|0;s=0;while(1){if((s|0)>=(p|0)){p=q;break f}r=d+(s*28|0)+24|0;if((b[r>>1]|0)==t<<16>>16)b[r>>1]=u;s=s+1|0}}else p=q}else p=q;while(0);w=w+1|0;q=p}}while(1){r=c[f>>2]|0;if((v|0)>=(r|0))break;u=d+(v*28|0)|0;s=b[d+(v*28|0)+24>>1]|0;if(s<<16>>16){t=0;q=0;while(1){if((t|0)>=(r|0))break;o=(s<<16>>16==(b[d+(t*28|0)+24>>1]|0)&1)+q|0;t=t+1|0;q=o}if((q|0)>=2){if((v|0)!=(p|0)){s=d+(p*28|0)|0;q=u;r=s+28|0;do{b[s>>1]=b[q>>1]|0;s=s+2|0;q=q+2|0}while((s|0)<(r|0));o=g+(p<<2)|0;I=g+(v<<2)|0;I=e[I>>1]|e[I+2>>1]<<16;b[o>>1]=I;b[o+2>>1]=I>>>16}p=p+1|0}}v=v+1|0}c[h>>2]=p;c[f>>2]=p}else p=0;while(0);i=J;return p|0}function wi(a,c){a=a|0;c=c|0;var d=0,f=0,g=0,h=0;h=b[a+2>>1]|0;f=h&255;d=b[c+2>>1]|0;g=d&255;h=(h&65535)>>>8&255;d=(d&65535)>>>8&255;do if(f<<24>>24==g<<24>>24)if(h<<24>>24==d<<24>>24){d=(e[a>>1]|0)-(e[c>>1]|0)|0;break}else{d=(h<<24>>24)-(d<<24>>24)|0;break}else d=(f<<24>>24)-(g<<24>>24)|0;while(0);return d|0}function xi(d,f,g,h,i,j,k,l,m){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0;q=c[f>>2]|0;o=l+(i*176|0)+110|0;h=b[o>>1]|0;p=l+(j*176|0)+110|0;n=b[p>>1]|0;a:do if(h<<16>>16==n<<16>>16)if(!(h<<16>>16)){h=d+(q*10|0)|0;b[h>>1]=0;b[h+2>>1]=0;b[h+4>>1]=0;b[h+6>>1]=0;b[h+8>>1]=0;if((q|0)<(g|0)){b[h>>1]=((a[l+(j*176|0)+99>>0]|0)==1&1)+((a[l+(i*176|0)+99>>0]|0)==1&1);n=d+(q*10|0)+4|0;b[n>>1]=(e[n>>1]|0)+2;a[d+(q*10|0)+8>>0]=k;n=0;h=0;while(1){if((n|0)>=(q|0))break;m=b[d+(n*10|0)+6>>1]|0;n=n+1|0;h=(h&65535)<(m&65535)?m:h}m=h+1<<16>>16;b[p>>1]=m;b[o>>1]=m;b[d+(q*10|0)+6>>1]=m;c[f>>2]=q+1;if(a[l+(i*176|0)+94>>0]|0){h=d+(q*10|0)+2|0;b[h>>1]=(b[h>>1]|0)+1<<16>>16;h=1;break}if(!(a[l+(j*176|0)+94>>0]|0))h=1;else{h=d+(q*10|0)+2|0;b[h>>1]=(b[h>>1]|0)+1<<16>>16;h=1}}else h=-9991}else h=0;else{o=(h&65535)>(n&65535);k=o?j:i;n=l+(k*176|0)+110|0;p=b[n>>1]|0;i=b[l+((o?i:j)*176|0)+110>>1]|0;if(!(p<<16>>16)){h=0;while(1){if((h|0)>=(q|0)){h=-9991;break a}if(i<<16>>16==(b[d+(h*10|0)+6>>1]|0))break;h=h+1|0}b[n>>1]=i;m=d+(h*10|0)+4|0;b[m>>1]=(b[m>>1]|0)+1<<16>>16;h=d+(h*10|0)|0;b[h>>1]=(e[h>>1]|0)+((a[l+(k*176|0)+99>>0]|0)==1&1);h=1;break}else{n=0;k=-1;o=-1}while(1){h=(o|k|0)<0;if(!((n|0)<(q|0)&h))break;j=b[d+(n*10|0)+6>>1]|0;h=p<<16>>16==j<<16>>16;g=h?n:k;j=h?o:i<<16>>16==j<<16>>16?n:o;n=n+1|0;k=g;o=j}if(h)h=-9991;else{h=d+(o*10|0)|0;g=d+(k*10|0)|0;b[g>>1]=(e[g>>1]|0)+(e[h>>1]|0);g=d+(k*10|0)+4|0;b[g>>1]=(e[g>>1]|0)+(e[d+(o*10|0)+4>>1]|0);g=q+-1|0;if((g|0)>(o|0))jr(h|0,h+10|0,(g-o|0)*10|0)|0;c[f>>2]=g;k=0;while(1){if((k|0)>=(g|0)){k=0;break}n=d+(k*10|0)+6|0;h=b[n>>1]|0;if((h&65535)>(i&65535))b[n>>1]=h+-1<<16>>16;k=k+1|0}while(1){if((k|0)>=(m|0)){h=1;break a}h=l+(k*176|0)+110|0;n=b[h>>1]|0;if((n&65535)<=(i&65535)){if(n<<16>>16==i<<16>>16)b[h>>1]=p}else b[h>>1]=n+-1<<16>>16;k=k+1|0}}}while(0);return h|0}function yi(d,f,g,h,j,k,l){d=d|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;C=i;i=i+16|0;o=C;a:do if(((h|0)!=0?(A=c[h+12>>2]|0,(A|0)!=0):0)?(p=c[h+16>>2]|0,(p|0)>0):0){B=h+20|0;j=c[B>>2]|0;j=(j|0)==-1?0:j;b:do if(!j){n=0;j=0;while(1){if((n|0)>=(g|0))break;z=pi(f,n,o)|0;m=z&255;if(!(z&128)){if((j|0)>=(p|0)){j=-9993;break b}b[A+(j<<2)>>1]=n;a[A+(j<<2)+2>>0]=m;a[A+(j<<2)+3>>0]=a[o>>0]|0;j=j+1|0}n=n+1|0}if((j|0)<2){c[B>>2]=-1;j=0}else{z=j;q=12}}else{z=j;q=12}while(0);c:do if((q|0)==12){Np(A,z,4,3);x=h+4|0;y=h+8|0;n=0;j=0;m=0;d:while(1){while(1){if((n|0)>=(z|0))break d;while(1){if((n|0)>=(z|0)){p=n;break}if(!(a[A+(n<<2)+3>>0]&16)){p=n;break}n=n+1|0}if((p|0)==(z|0))break d;r=A+(p<<2)+2|0;n=p;while(1){o=n+1|0;if((o|0)>=(z|0)){q=0;s=n;break}if((a[A+(o<<2)+2>>0]|0)!=(a[r>>0]|0)){q=1;s=n;break}if(!(a[A+(o<<2)+3>>0]&16))n=o;else{q=1;s=n;break}}if((o|0)==(z|0))break d;else n=o;while(1){if((n|0)>=(z|0))break;if((a[A+(n<<2)+2>>0]|0)!=(a[r>>0]|0))break;n=n+1|0}if((n|0)!=(o|0))break;if(q)n=o;else break d}while(1){if((p|0)>(s|0))continue d;u=e[A+(p<<2)>>1]|0;v=f+(u*176|0)+110|0;w=o;t=j;while(1){if((w|0)>=(n|0)){j=t;break}m=m+1|0;q=e[A+(w<<2)>>1]|0;j=b[v>>1]|0;if(j<<16>>16!=0?j<<16>>16==(b[f+(q*176|0)+110>>1]|0):0)j=t;else{j=Uj(d,k,l,0,f,g,u,q,2)|0;if((j+9999|0)>>>0<20)break c;if(j&1){t=(j&2)+t|0;q=xi(c[h>>2]|0,x,c[y>>2]|0,0,u,q,a[r>>0]|0,f,g)|0;if((q+9999|0)>>>0<20){j=q;break c}if(j>>>0>3){j=t;break d}else j=t}else j=t}w=w+1|0;t=j}p=p+1|0}}if(!(c[B>>2]|0))c[B>>2]=m|0?z:-1;break a}while(0)}else j=0;while(0);i=C;return j|0}function zi(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;if(!(c[22859]|0)){c[22860]=$n(86667)|0;c[22859]=$n(86671)|0;c[22861]=$n(86692)|0;c[22862]=$n(86743)|0;c[22863]=$n(86796)|0}c[i>>2]=0;a:do if(((a[f+(g*176|0)+92>>0]|0)==1?(d[f+(g*176|0)+100>>0]|0)<2:0)?(o=f+(g*176|0)+99|0,k=a[o>>0]|0,k<<24>>24>=-1):0){if(k<<24>>24>0?(b[f+(g*176|0)+110>>1]|0)==0:0){j=-1;break}l=d[f+(g*176|0)+6>>0]|0;s=(l|0)==(c[22859]|0)|(l|0)==(c[22861]|0)|(l|0)==(c[22862]|0)|(l|0)==(c[22863]|0);j=(s^1)<<31>>31;if((((((s?(p=f+(g*176|0)+93|0,q=f+(g*176|0)+94|0,s=(a[q>>0]|0)+(a[p>>0]|0)|0,(s|0)==(ao(l,k<<24>>24,0)|0)):0)?(m=e[f+(g*176|0)+8>>1]|0,(d[f+(m*176|0)+6>>0]|0)==(c[22860]|0)):0)?(n=a[f+(m*176|0)+93>>0]|0,((a[f+(m*176|0)+94>>0]|0)+(n<<24>>24)|0)==4):0)?(a[f+(m*176|0)+99>>0]|0)==0:0)?(d[f+(m*176|0)+100>>0]|0)<2:0)?(a[f+(m*176|0)+92>>0]|0)!=n<<24>>24:0){m=b[f+(g*176|0)+108>>1]|0;if((h|0)!=0&m<<16>>16!=0?(r=c[h>>2]|0,r|0):0){l=c[h+16>>2]|0;k=0;while(1){if((k|0)>=(l|0)){j=-1;break a}if(m<<16>>16==(b[r+(k*36|0)+28>>1]|0))break;k=k+1|0}l=b[r+(k*36|0)+2>>1]|0;if((e[r+(k*36|0)>>1]|0)>(l&65535))c[i>>2]=c[i>>2]|1;k=c[i>>2]|0;if(l<<16>>16){k=k|2;c[i>>2]=k}c[i>>2]=k|4;break}k=a[o>>0]|0;if(k<<24>>24!=-1){if(k<<24>>24>=1){if(k<<24>>24!=1)break;if(!(b[f+(g*176|0)+110>>1]|0))break;if((a[p>>0]|0)!=2)break;if(!(a[q>>0]|0))break;c[i>>2]=c[i>>2]|1;break}}else c[i>>2]=c[i>>2]|2;if(a[q>>0]|0)c[i>>2]=c[i>>2]|1;if(k<<24>>24==0?(a[p>>0]|0)==2:0)c[i>>2]=c[i>>2]|4}else j=-1}else j=-1;while(0);return j|0}function Ai(a,b){a=a|0;b=b|0;var e=0;e=c[22864]|0;if(!e){e=$n(86669)|0;c[22864]=e}return (d[a+(b*176|0)+6>>0]|0|0)==(e|0)|0}function Bi(f,g,h,j,k){f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+16|0;l=t;if(!(c[22865]|k)){c[22865]=$n(86671)|0;c[22866]=$n(86692)|0;c[22867]=$n(86743)|0;c[22868]=$n(86796)|0}c[j>>2]=0;if((k|0)==0?(r=d[f+(g*176|0)+6>>0]|0,(r|0)==(c[22865]|0)|(r|0)==(c[22866]|0)|(r|0)==(c[22867]|0)|(r|0)==(c[22868]|0)):0)k=-1;else q=5;a:do if((q|0)==5)if(oi(f,g,l)|0){o=f+(g*176|0)+92|0;r=(a[l+4>>0]|0)==0;p=(a[l+3>>0]|0)==0;n=0;b:while(1){if((n|0)>=(a[o>>0]|0)){k=-1;break a}k=d[f+(g*176|0)+72+n>>0]&15;m=e[f+(g*176|0)+8+(n<<1)>>1]|0;if(!r?(k|1|0)==9|((k|0)==2|(k|0)==4):0)q=13;else q=10;if((q|0)==10?(q=0,!p):0)if((k|8|0)==9)q=13;else switch(k|0){case 4:case 8:{q=13;break}default:{}}do if((q|0)==13){k=a[f+(m*176|0)+93>>0]|0;l=a[f+(m*176|0)+92>>0]|0;if(k<<24>>24<=l<<24>>24){if(k<<24>>24!=l<<24>>24)break;if((b[f+(m*176|0)+108>>1]|0)==0?(b[f+(m*176|0)+110>>1]|0)==0:0)break}if(ii(a[f+(m*176|0)+6>>0]|0)|0)break b}while(0);n=n+1|0}m=b[f+(g*176|0)+108>>1]|0;if((h|0)!=0&m<<16>>16!=0?(s=c[h>>2]|0,s|0):0){l=c[h+16>>2]|0;k=0;while(1){if((k|0)>=(l|0)){k=-1;break a}if(m<<16>>16==(b[s+(k*36|0)+28>>1]|0))break;k=k+1|0}l=b[s+(k*36|0)+2>>1]|0;if((e[s+(k*36|0)>>1]|0)>(l&65535))c[j>>2]=c[j>>2]|1;k=c[j>>2]|0;if(l<<16>>16){k=k|2;c[j>>2]=k}c[j>>2]=k|4;k=1;break}if(!r)c[j>>2]=c[j>>2]|4;if(!p){if((a[f+(g*176|0)+99>>0]|0)==-1)c[j>>2]=c[j>>2]|2;if(a[f+(g*176|0)+94>>0]|0){c[j>>2]=c[j>>2]|1;k=1}else k=1}else k=1}else k=-1;while(0);i=t;return k|0}function Ci(f,g,h){f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=i;i=i+16|0;o=p;do if(((a[f+(g*176|0)+92>>0]|0)==1?(a[f+(g*176|0)+93>>0]|0)==1:0)?(n=f+(g*176|0)+94|0,l=f+(g*176|0)+99|0,(((a[l>>0]|0)==-1&1)+((a[n>>0]|0)==1&1)|0)==1):0){j=c[22869]|0;if(!j){c[22871]=$n(86667)|0;c[22869]=$n(86692)|0;c[22872]=$n(86743)|0;k=$n(86796)|0;c[22870]=k;j=c[22869]|0}else k=c[22870]|0;c[h>>2]=0;q=d[f+(g*176|0)+6>>0]|0;if((q|0)==(j|0)|(q|0)==(c[22872]|0)|(q|0)==(k|0)?(oi(f,g,o)|0)!=0:0){if(a[o>>0]|0?(b[f+(g*176|0)+110>>1]|0)==0:0){j=-1;break}if((((((a[o+3>>0]|0)!=0?(a[o+4>>0]|0)==0:0)?(m=e[f+(g*176|0)+8>>1]|0,(d[f+(m*176|0)+6>>0]|0)==(c[22871]|0)):0)?(a[f+(m*176|0)+99>>0]|0)==0:0)?(d[f+(m*176|0)+100>>0]|0)<2:0)?(a[f+(m*176|0)+92>>0]|0)==(a[f+(m*176|0)+93>>0]|0):0){if((a[n>>0]|0)==1)j=c[h>>2]|8;else{if((a[l>>0]|0)!=-1){j=-1;break}j=c[h>>2]|16}c[h>>2]=j;j=2}else j=-1}else j=-1}else j=-1;while(0);i=p;return j|0}function Di(c,d){c=c|0;d=d|0;var f=0,g=0,h=0;f=a[d+2>>0]|0;if((a[c+2>>0]|0)>-1)if(f<<24>>24<0)f=-1;else g=4;else if(f<<24>>24>-1)f=1;else g=4;do if((g|0)==4){h=b[c+4>>1]|0;f=b[d+4>>1]|0;g=f<<16>>16==0;if(!(h<<16>>16)){if(!g){f=1;break}}else{if(g){f=-1;break}if(h<<16>>16!=f<<16>>16){f=(h&65535)-(f&65535)|0;break}}f=(e[c>>1]|0)-(e[d>>1]|0)|0}while(0);return f|0}function Ei(f,g,h,j,k,l,m,n){f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;J=i;i=i+16|0;u=J;a:do if(((j|0)!=0?(I=c[j>>2]|0,(I|0)!=0):0)?(t=c[j+4>>2]|0,(t|0)>0):0){w=j+8|0;b:do if(((k|0)!=0?(v=k+56|0,s=(c[v>>2]&50|0)==0,(c[w>>2]|0)>-2):0)?(c[k>>2]|0)!=0:0){r=0;q=0;o=0;j=0;while(1){if((r|0)>=(h|0)){H=q;break}if(zi(g,r,k,u)|0)if((Bi(g,r,k,u,1)|0)!=1)if((Ci(g,r,u)|0)!=2){if(!s?(Jj(g,r,u)|0)==4:0){p=4;F=13}}else{p=2;F=13}else{p=1;F=13}else{p=0;F=13}if((F|0)==13){F=0;if((q|0)>=(t|0)){j=-9993;break b}b[I+(q*6|0)>>1]=r;a[I+(q*6|0)+2>>0]=p;H=c[u>>2]|0;a[I+(q*6|0)+3>>0]=H;b[I+(q*6|0)+4>>1]=b[g+(r*176|0)+108>>1]|0;q=q+1|0;o=((p|0)==1&1)+o|0;j=H|j}r=r+1|0}do if(!((H|0)<2|(j&4|0)==0)){if(((c[k+60>>2]&32|0)==0?(c[k+64>>2]&8192|0)==0:0)?(c[v>>2]&50|0)==0:0){j=j&2;if((o|0)==(H|0)|(j|0)==0)break}else{if(!(j&3))break;j=j&2}if(!j){G=k+64|0;c[G>>2]=c[G>>2]|64}q=I+(H*6|0)+2|0;r=0;j=0;while(1){if((r|0)>=(H|0))break;c:do if((a[q>>0]|0)!=2){o=b[I+(r*6|0)+4>>1]|0;if(o<<16>>16){p=r;do{if((p|0)<=0)break c;p=p+-1|0}while(o<<16>>16!=(b[I+(p*6|0)+4>>1]|0));G=I+(r*6|0)+2|0;a[G>>0]=(d[G>>0]|0)+246;j=j+1|0}}else{G=I+(r*6|0)+2|0;a[G>>0]=(d[G>>0]|0)+246;j=j+1|0}while(0);r=r+1|0}G=H-j|0;c[w>>2]=0;Np(I,H,6,4);p=Dq(_(G,G)|0,1)|0;d:do if(!p){q=0;p=0;o=0;j=-9998}else{A=0;B=0;C=0;e:while(1){if((A|0)>=(G|0)){F=76;break}u=I+(A*6|0)+4|0;v=I+(A*6|0)+3|0;w=(B|0)==0;x=(C|0)==0;y=I+(A*6|0)|0;z=0;o=0;t=0;while(1){if((z|0)>(A|0)){j=t;break}if((A|0)==(z|0)?(b[u>>1]|0)==0:0)j=t;else F=41;f:do if((F|0)==41){F=0;do if(a[v>>0]&4){if(!(a[I+(z*6|0)+3>>0]&4))break;j=Uj(f,m,n,0,g,h,e[y>>1]|0,e[I+(z*6|0)>>1]|0,8)|0;if(!j)break;if((j+9999|0)>>>0<20){q=0;o=0;break d}if(!(j&1))break;if(j>>>0>3){q=0;o=0;j=-9988;break d}E=p+((_(z,G)|0)+A)|0;a[E>>0]=d[E>>0]|1}while(0);do if(a[v>>0]&3){if(!(a[I+(z*6|0)+3>>0]&3))break;j=Uj(f,m,n,0,g,h,e[y>>1]|0,e[I+(z*6|0)>>1]|0,7)|0;if(!j)break;if((j+9999|0)>>>0<20){q=0;o=0;break d}if(!(j&1))break;if(j>>>0>3){q=0;o=0;j=-9988;break d}E=p+((_(z,G)|0)+A)|0;a[E>>0]=d[E>>0]|2}while(0);s=a[p+((_(z,G)|0)+A)>>0]|0;g:do if(s&1){o=o+1|0;if(x)break;else q=0;while(1){if((q|0)>=(A|0))break g;j=(q|0)==(z|0);r=0;while(1){if((r|0)>(q|0))break;if(!(j|(r|0)==(z|0))?a[p+((_(r,G)|0)+q)>>0]&2:0)break e;r=r+1|0}q=q+1|0}}while(0);if(!(s&2)){j=t;break}j=t+1|0;if(w)break;else r=0;while(1){if((r|0)>=(A|0))break f;q=(r|0)==(z|0);s=0;while(1){if((s|0)>(r|0))break;if(!(q|(s|0)==(z|0))?a[p+((_(s,G)|0)+r)>>0]&1:0)break e;s=s+1|0}r=r+1|0}}while(0);z=z+1|0;t=j}A=A+1|0;B=o+B|0;C=j+C|0}if((F|0)==76){Cq(p);q=0;p=0;o=0;j=0;break}E=0;j=0;o=0;while(1){if((E|0)>=(G|0)){u=j;break}v=(E|0)<(A|0);w=I+(E*6|0)+3|0;x=I+(E*6|0)|0;y=I+(E*6|0)+4|0;B=I+(E*6|0)+2|0;C=(E|0)==(A|0);D=0;t=j;while(1){if((D|0)>(E|0)){j=t;break}if(v|C&(D|0)<=(z|0)){j=p+((_(D,G)|0)+E)|0;if(!(a[j>>0]&1)){q=j;j=t;F=98}else{u=1;F=82}}else{u=0;F=82}h:do if((F|0)==82){do if(a[w>>0]&4){r=I+(D*6|0)+3|0;if(!(a[r>>0]&4)){j=t;break}j=Uj(f,m,n,0,g,h,e[x>>1]|0,e[I+(D*6|0)>>1]|0,6)|0;if(!j){j=t;break}if((j+9999|0)>>>0<20){q=0;break d}if(!(j&1)){j=t;break}if(j>>>0>3){q=0;j=-9988;break d}s=p+((_(D,G)|0)+E)|0;a[s>>0]=d[s>>0]|1;j=a[w>>0]|0;do if(!(j&32)){a[w>>0]=j|32;j=t+1|0;if(b[y>>1]|0)break;o=o+((a[B>>0]|0)!=0&1)|0}else j=t;while(0);q=a[r>>0]|0;if(q&32|0)break;a[r>>0]=q|32;j=j+1|0;do if(!(b[I+(D*6|0)+4>>1]|0)){if(!(a[I+(D*6|0)+2>>0]|0))break;o=o+1|0;if(u){q=s;F=98;break h}else{q=j;F=99;break h}}while(0);if(u){q=s;F=98;break h}else{q=j;F=99;break h}}else j=t;while(0);if(!u){q=j;F=99;break}q=p+((_(D,G)|0)+E)|0;F=98}while(0);if((F|0)==98){F=0;if(a[q>>0]&2){q=j;F=99}}do if((F|0)==99){if(!(a[w>>0]&3)){j=q;break}r=I+(D*6|0)+3|0;if(!(a[r>>0]&3)){j=q;break}j=Uj(f,m,n,0,g,h,e[x>>1]|0,e[I+(D*6|0)>>1]|0,5)|0;if(!j){j=q;break}if((j+9999|0)>>>0<20){q=0;break d}if(!(j&1)){j=q;break}if(j>>>0>3){q=0;j=-9988;break d}j=p+((_(D,G)|0)+E)|0;a[j>>0]=d[j>>0]|2;j=a[w>>0]|0;do if(!(j&32)){a[w>>0]=j|32;j=q+1|0;if(b[y>>1]|0)break;o=o+((a[B>>0]|0)!=0&1)|0}else j=q;while(0);q=a[r>>0]|0;if(q&32|0)break;a[r>>0]=q|32;j=j+1|0;if(b[I+(D*6|0)+4>>1]|0)break;o=o+((a[I+(D*6|0)+2>>0]|0)!=0&1)|0}while(0);D=D+1|0;t=j}E=E+1|0}Cq(p);i:do if(!u){r=1;j=0}else{q=Dq(u,28)|0;if(!q){p=0;j=-9998;break d}else{t=0;p=A;j=0}while(1){if((t|0)>=(G|0))break;r=I+(t*6|0)+3|0;s=a[r>>0]|0;if(s&32){a[r>>0]=s^32;if((j|0)<(u|0)){p=e[I+(t*6|0)>>1]|0;ni(q+(j*28|0)|0,g,p)|0}j=j+1|0}t=t+1|0}if((j|0)!=(u|0)){p=0;j=-9997;break d}j=si(f,k,q,u,g,h,l,m)|0;j=(j|0)==-1?-9997:j;if((j|0)<0){p=0;break d}r=(j|0)>0;Cq(q);s=g+(p*176|0)+108|0;p=G;while(1){if((p|0)>=(H|0)){q=o;break}f=I+(p*6|0)+2|0;j=(d[f>>0]|0)+10|0;a[f>>0]=j;if((b[g+((e[I+(p*6|0)>>1]|0)*176|0)+108>>1]|0)==(b[s>>1]|0))o=o+(((j&255|0)==0?1:(b[I+(p*6|0)+4>>1]|0)!=0)&1^1)|0;p=p+1|0}p=r&1;j=c[k+16>>2]|0;o=0;while(1){if((o|0)>=(j|0)){r=0;o=q;j=p;break i}g=c[k>>2]|0;if((b[g+(o*36|0)+28>>1]|0)==(b[s>>1]|0)?(b[g+(o*36|0)>>1]|0)==(b[g+(o*36|0)+2>>1]|0):0){r=1;o=q;j=p;break i}o=o+1|0}}while(0);q=0;p=0;j=(j|0)!=0&r?2:j}while(0);F=136;break a}while(0);c[w>>2]=0;j=0}else j=0;while(0)}else{q=0;p=0;o=0;j=0;F=136}while(0);if((F|0)==136){j=(j|0)==1&(o|0)!=0?5:j;Cq(p);if(q)Cq(q)}i=J;return j|0}function Fi(d,f,g,h,j,k,l,m){d=d|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=i;i=i+64|0;s=E;B=E+8|0;do if(((h|0)!=0?(A=c[h>>2]|0,(A|0)!=0):0)?(r=c[h+4>>2]|0,(r|0)>0):0){D=h+8|0;if((j|0)!=0&(c[D>>2]|0)>-1?c[j>>2]|0:0){q=0;o=0;h=0;p=0;while(1){if((q|0)>=(g|0)){z=o;C=13;break}if(zi(f,q,j,s)|0)if((Bi(f,q,j,s,1)|0)!=1){if((Ci(f,q,s)|0)==2){n=2;C=10}}else{n=1;C=10}else{n=0;C=10}if((C|0)==10){C=0;if((o|0)>=(r|0)){h=-9993;break}b[A+(o*6|0)>>1]=q;a[A+(o*6|0)+2>>0]=n;z=c[s>>2]|0;a[A+(o*6|0)+3>>0]=z;b[A+(o*6|0)+4>>1]=b[f+(q*176|0)+108>>1]|0;o=o+1|0;h=((n|0)==1&1)+h|0;p=z|p}q=q+1|0}a:do if((C|0)==13){n=j+64|0;o=c[n>>2]|0;if(!(o&8192|c[j+60>>2]&32|c[j+56>>2]&50))h=(h|0)==(z|0)|(p&2|0)==0;else h=(p&3|0)==0;if((z|0)<2|(p&4|0)==0|h){c[D>>2]=-1;h=0;break}if(!(p&2))c[n>>2]=o|64;n=0;o=0;while(1){y=0;h=0;b:while(1){if((y|0)>=(z|0)){p=o;break}u=e[A+(y*6|0)>>1]|0;v=y+1|0;w=f+(u*176|0)+108|0;x=v;t=h;while(1){if((x|0)>=(z|0)){y=v;h=t;continue b}r=e[A+(x*6|0)>>1]|0;s=b[w>>1]|0;if(s<<16>>16!=0?s<<16>>16==(b[f+(r*176|0)+108>>1]|0):0)h=t;else{s=0;C=27}c:do if((C|0)==27){d:while(1){C=0;if((s|0)>=2){h=t;break c}h=(s|0)==0;p=h?u:r;q=h?r:u;do if(a[A+((h?y:x)*6|0)+3>>0]&3){if(!(a[A+((h?x:y)*6|0)+3>>0]&4))break;h=Uj(d,l,m,0,f,g,q,p,3)|0;o=o+1|0;if((h+9999|0)>>>0<20)break a;if(h&1){s=p;r=h;break d}}while(0);s=s+1|0;C=27}p=r&2;h=0;while(1){if((h|0)==2)break;ni(B+(h*28|0)|0,f,h|0?q:s)|0;h=h+1|0}h=si(d,j,B,2,f,g,k,l)|0;h=(h|0)==-1?-9997:h;if((h|0)<0)break a;if(r>>>0>3){h=-9988;break a}h=p+t+((h|0)>0&1)|0}while(0);x=x+1|0;t=h}}n=h+n|0;o=(p|0)!=0;if(o&(h|0)!=0)o=p;else break}h=n+h|0;if(!(c[D>>2]|0))c[D>>2]=o?z:-1}while(0);break}h=0}else h=0;while(0);i=E;return h|0}function Gi(d,f,g,h,j,k,l){d=d|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=i;i=i+3568|0;x=y+4|0;v=y;a:do if(((h|0)!=0?(s=c[h>>2]|0,(j|0)!=0&(s|0)!=0):0)?(k|0)!=0&(c[j>>2]|0)!=0:0){t=c[h+4>>2]|0;u=0;m=0;n=0;b:while(1){if((u|0)>=(g|0)){r=m;w=20;break}c[v>>2]=0;do if(zi(f,u,j,v)|0)if((Bi(f,u,j,v,1)|0)!=1)if((Ci(f,u,v)|0)!=2){if(Pj(f,u)|0){c[v>>2]=8;p=3;w=13;break}if(Sj(f,u)|0){c[v>>2]=16;p=3;w=13}}else{p=2;w=13}else{p=1;w=13}else{p=0;w=13}while(0);do if((w|0)==13){w=0;if((m|0)>=(t|0)){m=-9993;break b}o=f+(u*176|0)+108|0;if((b[o>>1]|0)==0?Ai(f,u)|0:0)break;q=c[v>>2]|0;if((q&27|0)!=0?(r=b[o>>1]|0,!((q&4|0)!=0&r<<16>>16==0)):0){b[s+(m*6|0)>>1]=u;a[s+(m*6|0)+2>>0]=p;a[s+(m*6|0)+3>>0]=q;b[s+(m*6|0)+4>>1]=r;m=m+1|0;n=q|n}}while(0);u=u+1|0}c:do if((w|0)==20){if(((c[j+60>>2]&32|0)==0?(c[j+64>>2]&8192|0)==0:0)?(c[j+56>>2]&50|0)==0:0){m=n&18;if((n&9|0)==0|((m|0)==0|(r|0)<2)){c[h+8>>2]=-1;m=0;break}}else w=23;do if((w|0)==23){if((r|0)>=2){m=n&18;if(!((m|0)==0|(n&9|0)==0))break;if(c[j+16>>2]|0)break}c[h+8>>2]=-1;m=0;break c}while(0);if(!m){w=j+64|0;c[w>>2]=c[w>>2]|64}t=h+8|0;c[t>>2]=r;o=0;p=32766;m=0;while(1){if((o|0)>=(r|0))break;w=c[h>>2]|0;n=b[f+((e[w+(o*6|0)>>1]|0)*176|0)+108>>1]|0;if(n<<16>>16==0?(a[w+(o*6|0)+3>>0]&4)!=0:0)q=p;else{q=n;m=((n<<16>>16==0?1:n<<16>>16!=p<<16>>16)&1)+m|0}o=o+1|0;p=q}if((m|0)<2){m=0;break a}if((m|0)>127){m=Dq(m,28)|0;if(!m){m=-9998;break a}else s=m}else s=x;o=r;r=0;m=0;q=32766;while(1){if((r|0)>=(o|0))break;v=c[h>>2]|0;n=e[v+(r*6|0)>>1]|0;p=f+(n*176|0)+108|0;w=b[p>>1]|0;if(!(w<<16>>16==0?(a[v+(r*6|0)+3>>0]|0)==4:0)?(w<<16>>16==0?1:w<<16>>16!=q<<16>>16):0){ni(s+(m*28|0)|0,f,n)|0;o=c[t>>2]|0;m=m+1|0;n=b[p>>1]|0}else n=q;r=r+1|0;q=n}m=si(d,j,s,m,f,g,k,l)|0;m=(m|0)==-1?-9997:m;if(!((s|0)!=(x|0)&(s|0)!=0))break a;Cq(s);break a}while(0)}else m=0;while(0);i=y;return m|0}function Hi(f,g,h,j){f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=i;i=i+16|0;t=w;do if(((h|0)!=0?(j|0)!=0&(c[h>>2]|0)!=0:0)?(c[j>>2]|0)!=0:0){s=c[h+4>>2]|0;v=j+36|0;c[v>>2]=0;b[v+4>>1]=0;v=c[h>>2]|0;q=j+8|0;r=0;h=0;k=0;a:while(1){if((r|0)>=(g|0))break;c[t>>2]=0;p=f+(r*176|0)+108|0;n=b[p>>1]|0;o=n<<16>>16==0;if(o)l=a[f+(r*176|0)+94>>0]|0;else{l=b[(c[q>>2]|0)+((n&65535)<<1)>>1]|0;if(!(l<<16>>16)){h=-9997;u=35;break}l=(l&65535)+-1|0;m=c[j>>2]|0;if(n<<16>>16!=(b[m+(l*36|0)+28>>1]|0)){h=-9997;u=35;break}l=(e[m+(l*36|0)>>1]|0)-(e[m+(l*36|0)+2>>1]|0)|0}b:do if(l){do if(o?(zi(f,r,j,t)|0)!=0:0)if((Bi(f,r,j,t,1)|0)!=1)if((Ci(f,r,t)|0)==2)l=2;else{if(Pj(f,r)|0){c[t>>2]=8;l=3;break}if(Sj(f,r)|0){c[t>>2]=16;l=3;break}if(!(Qj(f,r)|0))break b;c[t>>2]=1;l=3}else l=1;else l=0;while(0);if((h|0)>=(s|0)){h=-9993;u=35;break a}b[v+(h*6|0)>>1]=r;a[v+(h*6|0)+2>>0]=l;a[v+(h*6|0)+3>>0]=c[t>>2];p=b[p>>1]|0;b[v+(h*6|0)+4>>1]=p;h=h+1|0;k=(p<<16>>16==0&1)+k|0}while(0);r=r+1|0}if((u|0)==35)break;if((h|0)>0){o=k+1|0;n=Dq(o,2)|0;p=j+28|0;c[p>>2]=n;b[n>>1]=k;n=0;l=1;while(1){if((n|0)==(h|0))break;k=b[v+(n*6|0)>>1]|0;m=k&65535;if(!(b[f+(m*176|0)+108>>1]|0)){b[(c[p>>2]|0)+(l<<1)>>1]=k;l=l+1|0}k=0;while(1){if((k|0)==3)break;u=j+36+(k<<1)|0;b[u>>1]=(e[u>>1]|0)+(a[f+(m*176|0)+95+k>>0]|0);k=k+1|0}u=f+(m*176|0)+102|0;a[u>>0]=d[u>>0]|1;n=n+1|0}c[j+32>>2]=o}}else h=0;while(0);i=w;return h|0}function Ii(f,g,h,j,k,l,m){f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;ca=i;i=i+704|0;Y=ca+120|0;X=ca+40|0;aa=ca+36|0;$=ca+32|0;Z=ca+686|0;_=ca+680|0;ba=ca;a:do if((j|0)!=0?(O=j+60|0,w=c[O>>2]|0,(w&1|0)!=0):0){x=j+20|0;n=c[x>>2]|0;do if(!(c[j>>2]|0)){if(n|0){n=0;break a}n=j+64|0;o=c[n>>2]|0;p=j+44|0;c[ba>>2]=c[p>>2];c[ba+4>>2]=c[p+4>>2];c[ba+8>>2]=c[p+8>>2];c[ba+12>>2]=c[p+12>>2];q=j+8|0;r=c[q>>2]|0;s=j+24|0;t=c[s>>2]|0;u=j;v=u+64|0;do{c[u>>2]=0;u=u+4|0}while((u|0)<(v|0));c[s>>2]=t;c[O>>2]=w;c[n>>2]=o;c[p>>2]=c[ba>>2];c[p+4>>2]=c[ba+4>>2];c[p+8>>2]=c[ba+8>>2];c[p+12>>2]=c[ba+12>>2];c[q>>2]=r;n=((h|0)/2|0)+1|0;c[x>>2]=n;V=Dq(n,36)|0;c[j>>2]=V;if(!V){c[x>>2]=-1;n=-1;break a}else break}while(0);if(n){if((n|0)>=0){L=(l|0)!=0;T=l+80|0;U=l+76|0;M=h&65535;N=Z+3|0;V=Z+1|0;F=0;n=0;b:while(1){if((F|0)>=(h|0)){P=51;break}c:do if(oi(g,F,Z)|0){D=g+(F*176|0)+92|0;E=0;C=n;while(1){if((E|0)>=(a[D>>0]|0)){n=C;break c}S=d[g+(F*176|0)+72+E>>0]&15;y=b[g+(F*176|0)+8+(E<<1)>>1]|0;z=y&65535;do if((S|1|0)==9|((S|0)==2|(S|0)==4)?(ii(a[g+(z*176|0)+6>>0]|0)|0)!=0:0){if(((L?(G=c[T>>2]|0,G|0):0)?(H=c[U>>2]|0,H|0):0)?a[G+((c[(c[H+(F<<5)+28>>2]|0)+(E<<2)>>2]|0)*28|0)+25>>0]|0:0){n=C;break}c[aa>>2]=0;c[$>>2]=0;A=g+(z*176|0)+92|0;r=-1;B=0;q=M;p=0;o=0;n=0;while(1){if((B|0)>=(a[A>>0]|0))break;v=b[g+(z*176|0)+8+(B<<1)>>1]|0;w=v&65535;u=d[g+(z*176|0)+72+B>>0]&15;do if(L){s=c[T>>2]|0;if(!s){P=27;break}t=c[U>>2]|0;if(!t){P=27;break}if(!(a[s+((c[(c[t+(z<<5)+28>>2]|0)+(B<<2)>>2]|0)*28|0)+25>>0]|0))P=27}else P=27;while(0);do if((P|0)==27){P=0;if(!((u|0)==4|(u|1|0)==9))if((u+-1|0)>>>0<2)s=1;else break;else s=0;if(!(oi(g,w,Z)|0))break;x=li(Y+((c[aa>>2]|0)*28|0)|0,g,w,2)|0;mi(Y+((c[aa>>2]|0)*28|0)+10|0,g,w,2);if(!s){S=(b[g+(w*176|0)+108>>1]|0)==0;t=((a[N>>0]|0)!=0|S^1)&1;if(S)s=(a[V>>0]|0)>(a[g+(w*176|0)+92>>0]|0);else s=1;S=s&1;u=t;s=S;t=S+t|0}else{do if((u|0)==1){if(x|0){s=1;break}s=(b[g+(w*176|0)+108>>1]|0)!=0}else s=0;while(0);S=s&1;t=(u|0)==2&1;u=S;s=t;t=S+t|0}p=s+p|0;o=u+o|0;if(!t)break;S=b[g+(w*176|0)+108>>1]|0;R=c[aa>>2]|0;b[Y+(R*28|0)+22>>1]=S;b[Y+(R*28|0)+24>>1]=0;b[Y+(R*28|0)+26>>1]=v;Q=c[$>>2]|0;b[X+(Q<<2)>>1]=y;b[X+(Q<<2)+2>>1]=B;c[$>>2]=Q+1;c[aa>>2]=R+1;r=(q<<16>>16!=S<<16>>16&1)+r|0;q=S;n=(((x|0)>0|S<<16>>16!=0)&1)+n|0}while(0);B=B+1|0}if((p|0)!=0&((o|0)!=0&((n|0)!=0&(c[aa>>2]|0)>1))){n=vi(f,Y,aa,X,$,l,m,g,h,k,1)|0;if((n+9999|0)>>>0<20)break a;n=c[aa>>2]|0;if((n|0)>0){if((r|0)>0|q<<16>>16==0){n=si(f,j,Y,n,g,h,k,l)|0;o=(n|0)<0?n:(n|0)==-1?-30005:0;if(o|0){n=C;break b}n=((n|0)>0&1)+C|0}else n=C;o=c[$>>2]|0;if((o|0)<=0)break;n=((ti(g,o,X)|0)>0&1)+n|0}else n=C}else n=C}else n=C;while(0);E=E+1|0;C=n}}while(0);F=F+1|0}d:do if((P|0)==51){e:do if(c[O>>2]&524288){K=0;while(1){if((K|0)>=(h|0))break e;f:do if(ri(g,K,Z)|0){G=g+(K*176|0)+92|0;H=(a[N>>0]|0)!=0;I=a[V>>0]|0;J=0;F=n;while(1){if((J|0)>=(a[G>>0]|0)){n=F;break f}S=d[g+(K*176|0)+72+J>>0]&15;D=b[g+(K*176|0)+8+(J<<1)>>1]|0;E=D&65535;g:do if((((S|1|0)==9|((S|0)==2|(S|0)==4)?(ji(a[g+(E*176|0)+6>>0]|0)|0)!=0:0)?(a[g+(E*176|0)+99>>0]|0)==0:0)?(a[g+(E*176|0)+100>>0]|0)==0:0){if(((a[g+(E*176|0)+94>>0]|0)+(a[g+(E*176|0)+93>>0]|0)|0)!=4){n=F;break}do if(L){n=c[T>>2]|0;if(!n)break;o=c[U>>2]|0;if(!o)break;if(a[n+((c[(c[o+(K<<5)+28>>2]|0)+(J<<2)>>2]|0)*28|0)+25>>0]|0){n=F;break g}}while(0);c[aa>>2]=0;c[$>>2]=0;B=g+(E*176|0)+92|0;t=-1;C=0;s=M;r=0;q=0;p=0;o=0;n=0;while(1){if((C|0)>=(a[B>>0]|0))break;x=b[g+(E*176|0)+8+(C<<1)>>1]|0;y=x&65535;w=d[g+(E*176|0)+72+C>>0]&15;do if(L){u=c[T>>2]|0;if(!u){P=71;break}v=c[U>>2]|0;if(!v){P=71;break}if(!(a[u+((c[(c[v+(E<<5)+28>>2]|0)+(C<<2)>>2]|0)*28|0)+25>>0]|0))P=71}else P=71;while(0);do if((P|0)==71){P=0;if(!((w|0)==4|(w|1|0)==9))if((w+-1|0)>>>0<2)u=1;else break;else u=0;A=ri(g,y,_)|0;if(!A)break;z=li(Y+((c[aa>>2]|0)*28|0)|0,g,y,2)|0;mi(Y+((c[aa>>2]|0)*28|0)+10|0,g,y,2);if(!u){S=(b[g+(y*176|0)+108>>1]|0)==0;v=(H|S^1)&1;if(S)u=I<<24>>24>(a[g+(y*176|0)+92>>0]|0);else u=1;S=u&1;w=v;u=S;v=S+v|0}else{do if((w|0)==1){if(z|0){u=1;break}u=(b[g+(y*176|0)+108>>1]|0)!=0}else u=0;while(0);S=u&1;v=(w|0)==2&1;w=S;u=v;v=S+v|0}r=u+r|0;q=w+q|0;if(!v)break;S=b[g+(y*176|0)+108>>1]|0;R=c[aa>>2]|0;b[Y+(R*28|0)+22>>1]=S;b[Y+(R*28|0)+24>>1]=0;b[Y+(R*28|0)+26>>1]=x;Q=c[$>>2]|0;b[X+(Q<<2)>>1]=D;b[X+(Q<<2)+2>>1]=C;c[$>>2]=Q+1;c[aa>>2]=R+1;t=(s<<16>>16!=S<<16>>16&1)+t|0;s=S;p=(((z|0)>0|S<<16>>16!=0)&1)+p|0;o=((A|0)==4&1)+o|0;n=((A|0)==2&1)+n|0}while(0);C=C+1|0}if(!((o|0)!=0&((n|0)==1&((r|0)!=0&((q|0)!=0&((p|0)!=0&(c[aa>>2]|0)>1)))))){n=F;break}n=vi(f,Y,aa,X,$,l,m,g,h,k,10)|0;if((n+9999|0)>>>0<20)break a;n=c[aa>>2]|0;if((n|0)<=0){n=F;break}if((t|0)>0|s<<16>>16==0){n=si(f,j,Y,n,g,h,k,l)|0;o=(n|0)<0?n:(n|0)==-1?-30005:0;if(o|0){n=F;break d}n=((n|0)>0&1)+F|0}else n=F;o=c[$>>2]|0;if((o|0)<=0)break;n=((ti(g,o,X)|0)>0&1)+n|0}else n=F;while(0);J=J+1|0;F=n}}while(0);K=K+1|0}}while(0);if(!n){S=Dq(h,2)|0;h:do if(!S){o=0;n=-30002}else{i:do if(!(c[O>>2]&1048576)){q=0;n=0}else{q=0;n=0;while(1){if((q|0)>=(h|0)){q=0;break i}do if(oi(g,q,Z)|0){c[aa>>2]=0;c[$>>2]=0;o=Wg(f,g,q,S,ba,8,Y,20,X,20,aa,$,l,m,h)|0;if((o|0)<=0)if((o+9999|0)>>>0<20)break h;else break;o=c[aa>>2]|0;if(o){p=si(f,j,Y,o,g,h,k,l)|0;o=(p|0)<0?p:(p|0)==-1?-30005:0;if(o|0)break h;n=((p|0)>0&1)+n|0}o=c[$>>2]|0;if(o)n=((ti(g,o,X)|0)>0&1)+n|0}while(0);q=q+1|0}}while(0);while(1){if((q|0)>=(h|0)){v=0;break}do if(((oi(g,q,Z)|0)==3?(a[g+(q*176|0)+92>>0]|0)==2:0)?(e[g+(q*176|0)+166>>1]|0)>5:0){c[aa>>2]=0;c[$>>2]=0;o=Ug(f,g,q,S,ba,8,Y,20,X,20,aa,$,l,m,h)|0;if((o|0)<=0)if((o+9999|0)>>>0<20)break h;else break;o=c[aa>>2]|0;if(o){p=si(f,j,Y,o,g,h,k,l)|0;o=(p|0)<0?p:(p|0)==-1?-30005:0;if(o|0)break h;n=((p|0)>0&1)+n|0}o=c[$>>2]|0;if(!o)break;n=((ti(g,o,X)|0)>0&1)+n|0}while(0);q=q+1|0}while(1){if((v|0)>=(h|0))break;q=g+(v*176|0)+92|0;j:do if(((a[q>>0]|0)==2?(e[g+(v*176|0)+166>>1]|0)>4:0)?(oi(g,v,Z)|0)==3:0){r=g+(v*176|0)+164|0;s=g+(v*176|0)+108|0;t=((a[g+(v*176|0)+99>>0]|0)==-1&1)+(a[g+(v*176|0)+94>>0]|0)|0;u=0;while(1){if((u|0)>=(a[q>>0]|0))break j;o=e[g+(v*176|0)+8+(u<<1)>>1]|0;k:do if((o|0)<(v|0)){if((b[g+(o*176|0)+164>>1]|0)!=(b[r>>1]|0))break;p=d[g+(v*176|0)+72+u>>0]|0;if((p&14|0)!=8)switch(p&15|0){case 1:case 4:break;default:break k}if((a[g+(o*176|0)+92>>0]|0)!=2)break;if((oi(g,o,_)|0)!=3)break;if((b[s>>1]|0)==0?!(b[g+(o*176|0)+108>>1]|0?1:(t+(a[g+(o*176|0)+94>>0]|0)+((a[g+(o*176|0)+99>>0]|0)==-1&1)|0)==1):0)break;o=Sg(f,g,v,u,S,ba,8,Y,20,X,20,aa,$,l,m,h)|0;if((o|0)<=0)if((o+9999|0)>>>0<20)break h;else break;o=c[aa>>2]|0;if(o){p=si(f,j,Y,o,g,h,k,l)|0;o=(p|0)<0?p:(p|0)==-1?-30005:0;if(o|0)break h;n=((p|0)>0&1)+n|0}o=c[$>>2]|0;if(!o)break;n=((ti(g,o,X)|0)>0&1)+n|0}while(0);u=u+1|0}}while(0);v=v+1|0}P=(l|0)==0;Q=_+1|0;R=0;while(1){if((R|0)>=(h|0)){o=0;break h}M=g+(R*176|0)+166|0;l:do if(((((e[M>>1]|0)>4?(Kg(g,R)|0)!=0:0)?(a[g+(R*176|0)+162>>0]|0)!=0:0)?(W=g+(R*176|0)+92|0,(a[W>>0]|0)==3):0)?(b[g+(R*176|0)+108>>1]|0)==0:0){N=g+(R*176|0)+164|0;o=3;O=0;while(1){if((O|0)>=(o<<24>>24|0))break l;I=b[g+(R*176|0)+8+(O<<1)>>1]|0;J=I&65535;K=g+(J*176|0)+164|0;m:do if((b[K>>1]|0)==(b[N>>1]|0)){if(!(Kg(g,J)|0))break;if(!(a[g+(J*176|0)+162>>0]|0))break;L=g+(J*176|0)+92|0;if((a[L>>0]|0)!=3)break;if(b[g+(J*176|0)+108>>1]|0)break;o=d[g+(R*176|0)+72+O>>0]|0;if((o&14|0)==8)H=0;else switch(o&15|0){case 1:case 4:{H=0;break}default:break m}while(1){if((H|0)>=(a[W>>0]|0))break m;G=b[g+(R*176|0)+8+(H<<1)>>1]|0;q=G&65535;n:do if(G<<16>>16!=I<<16>>16){o=oi(g,q,Z)|0;if(!o)break;if((b[g+(q*176|0)+164>>1]|0)==(b[N>>1]|0))break;p=((a[g+(q*176|0)+99>>0]|0)==-1&1)+(a[g+(q*176|0)+94>>0]|0)|0;if((p+(a[g+(q*176|0)+93>>0]|0)|0)!=(o|0))break;G=d[g+(R*176|0)+72+H>>0]|0;D=G&15;E=(D|0)!=1;F=(D|0)!=2;o=D+-1|0;if((G&14|0)!=8)switch(D|0){case 1:case 2:case 4:break;default:break n}G=g+(q*176|0)+108|0;B=(p|0)!=0;C=a[V>>0]|0;A=g+(q*176|0)+92|0;y=o>>>0<2;z=0;while(1){if((z|0)>=(a[L>>0]|0))break n;r=e[g+(J*176|0)+8+(z<<1)>>1]|0;o:do if((r|0)!=(R|0)){if(!(oi(g,r,_)|0))break;if((b[g+(r*176|0)+164>>1]|0)==(b[K>>1]|0))break;u=a[g+(r*176|0)+94>>0]|0;v=(a[g+(r*176|0)+99>>0]|0)==-1;t=d[g+(J*176|0)+72+z>>0]|0;x=t&15;s=(x|0)!=1;w=(x|0)!=2;if((t&14|0)!=8)switch(x|0){case 1:case 2:case 4:break;default:break o}do if(!P){o=c[T>>2]|0;if(!o)break;p=c[U>>2]|0;if(!p)break;if(a[o+((c[(c[p+(R<<5)+28>>2]|0)+(H<<2)>>2]|0)*28|0)+25>>0]|0)break o;if(a[o+((c[(c[p+(J<<5)+28>>2]|0)+(z<<2)>>2]|0)*28|0)+25>>0]|0)break o}while(0);t=b[G>>1]|0;q=b[g+(r*176|0)+108>>1]|0;do if(F&(B|t<<16>>16!=0)){if(q<<16>>16==0?(a[Q>>0]|0)<=(a[g+(r*176|0)+92>>0]|0):0){o=0;q=0;break}o=s}else o=0;while(0);p=o&1;do if(w&((u|0)!=(v<<31>>31|0)|q<<16>>16!=0)){if(t<<16>>16==0?C<<24>>24<=(a[A>>0]|0):0){o=0;break}o=E}else o=0;while(0);if((p|0)==(o<<31>>31|0)|y&(D|0)==(x|0))break;o=b[M>>1]|0;if((o&65535)>6){o=Lg(f,g,R,O,H,z,S,ba,8,Y,20,X,20,aa,$,l,m,h)|0;do if((o|0)<=0){if((o+9999|0)>>>0<20)break h}else{o=c[aa>>2]|0;if(o){p=si(f,j,Y,o,g,h,k,l)|0;o=(p|0)<0?p:(p|0)==-1?-30005:0;if(o|0)break h;n=((p|0)>0&1)+n|0}o=c[$>>2]|0;if(!o)break;n=((ti(g,o,X)|0)>0&1)+n|0}while(0);o=b[M>>1]|0}if((o&65535)<=4)break;o=Rg(f,g,R,O,H,z,S,ba,8,Y,20,X,20,aa,$,l,m,h)|0;if((o|0)<=0)if((o+9999|0)>>>0<20)break h;else break;o=c[aa>>2]|0;if(o){p=si(f,j,Y,o,g,h,k,l)|0;o=(p|0)<0?p:(p|0)==-1?-30005:0;if(o|0)break h;n=((p|0)>0&1)+n|0}o=c[$>>2]|0;if(!o)break;n=((ti(g,o,X)|0)>0&1)+n|0}while(0);z=z+1|0}}while(0);H=H+1|0}}while(0);o=a[W>>0]|0;O=O+1|0}}while(0);R=R+1|0}}while(0);Cq(S)}else o=0}while(0);n=(o|0)<0?o:n}}else n=0}else n=0;while(0);i=ca;return n|0}function Ji(a){a=a|0;var b=0;if(a|0){b=c[a>>2]|0;if(b|0)Cq(b);b=c[a+4>>2]|0;if(b|0)Cq(b);b=c[a+8>>2]|0;if(b|0)Cq(b);b=c[a+28>>2]|0;if(b|0)Cq(b);b=a;a=b+68|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(a|0))}return 0}function Ki(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;Ji(a)|0;if((a|0)!=0&(b|0)!=0){j=c[b+20>>2]|0;if((j|0)>0){d=j*36|0;e=Bq(d)|0;c[a>>2]=e;if(!e)d=1;else{ir(e|0,c[b>>2]|0,d|0)|0;d=0}}else d=0;i=c[b+12>>2]|0;do if((i|0)>0){e=i<<1;f=Bq(e)|0;c[a+4>>2]=f;if(!f){d=d+1|0;break}else{ir(f|0,c[b+4>>2]|0,e|0)|0;break}}while(0);h=c[b+16>>2]|0;do if((h|0)>0){e=h<<3;f=Bq(e)|0;c[a+8>>2]=f;if(!f){d=d+1|0;break}else{ir(f|0,c[b+8>>2]|0,e|0)|0;break}}while(0);e=c[b+32>>2]|0;do if((e|0)>0){f=e<<1;g=Bq(f)|0;c[a+28>>2]=g;if(!g){d=d+1|0;break}else{ir(g|0,c[b+28>>2]|0,f|0)|0;k=17;break}}else k=17;while(0);if((k|0)==17)if(!d){c[a+12>>2]=i;c[a+16>>2]=h;c[a+20>>2]=j;c[a+24>>2]=c[b+24>>2];c[a+32>>2]=e;d=a+44|0;k=b+44|0;c[d>>2]=c[k>>2];c[d+4>>2]=c[k+4>>2];c[d+8>>2]=c[k+8>>2];c[d+12>>2]=c[k+12>>2];d=0}c[a+60>>2]=c[b+60>>2];c[a+64>>2]=c[b+64>>2]}else d=0;return d|0}function Li(a){a=a|0;var b=0,d=0,f=0,g=0,h=0,i=0,j=0;a:do if((((a|0)!=0?(i=c[a>>2]|0,(i|0)!=0):0)?(j=c[a+16>>2]|0,(j|0)>=1):0)?(c[a+32>>2]|0)==0:0){h=0;a=0;while(1){if((h|0)==(j|0))break a;d=i+(h*36|0)+24|0;c[d>>2]=0;b=0;f=1;g=2;while(1){b=(_(e[i+(h*36|0)+(g+2<<1)>>1]|0,f)|0)+b|0;c[d>>2]=b;if((g|0)<=0)break;if(!f)break;else{f=f<<10;g=g+-1|0}}h=h+1|0;a=((b|0)!=0&1)+a|0}}else a=0;while(0);return a|0} -function np(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=i;i=i+1056|0;u=w+1024|0;v=w;k=a[e>>0]|0;do if(k<<24>>24){t=op(b,k<<24>>24)|0;if(t){j=a[e+1>>0]|0;if(j<<24>>24){f=t+1|0;m=a[f>>0]|0;if(m<<24>>24){h=a[e+2>>0]|0;if(!(h<<24>>24)){j=j&255|(k&255)<<8;b=m;g=d[t>>0]<<8|m&255;while(1){g=g&65535;if((g|0)==(j|0))break;f=f+1|0;h=a[f>>0]|0;if(!(h<<24>>24)){b=0;break}else{b=h;g=h&255|g<<8}}b=b<<24>>24?f+-1|0:0;break}f=t+2|0;b=a[f>>0]|0;if(b<<24>>24){g=a[e+3>>0]|0;if(!(g<<24>>24)){h=(j&255)<<16|(k&255)<<24|(h&255)<<8;g=(b&255)<<8|(m&255)<<16|d[t>>0]<<24;if((g|0)!=(h|0))do{f=f+1|0;b=a[f>>0]|0;g=(b&255|g)<<8}while(!(b<<24>>24==0|(g|0)==(h|0)));b=b<<24>>24?f+-2|0:0;break}f=t+3|0;l=a[f>>0]|0;if(l<<24>>24){if(!(a[e+4>>0]|0)){h=(j&255)<<16|(k&255)<<24|(h&255)<<8|g&255;b=(b&255)<<8|(m&255)<<16|l&255|d[t>>0]<<24;if((b|0)==(h|0))b=l;else{g=b;do{f=f+1|0;b=a[f>>0]|0;g=b&255|g<<8}while(!(b<<24>>24==0|(g|0)==(h|0)))}b=b<<24>>24?f+-3|0:0;break};c[u>>2]=0;c[u+4>>2]=0;c[u+8>>2]=0;c[u+12>>2]=0;c[u+16>>2]=0;c[u+20>>2]=0;c[u+24>>2]=0;c[u+28>>2]=0;b=k;g=0;while(1){if(!(a[t+g>>0]|0)){b=0;break}f=u+(((b&255)>>>5&255)<<2)|0;c[f>>2]=c[f>>2]|1<<(b&31);f=g+1|0;c[v+((b&255)<<2)>>2]=f;b=a[e+f>>0]|0;if(!(b<<24>>24)){n=23;break}else g=f}a:do if((n|0)==23){b:do if(f>>>0>1){h=1;n=-1;b=0;c:while(1){m=1;while(1){d:while(1){j=1;while(1){k=a[e+(j+n)>>0]|0;l=a[e+h>>0]|0;if(k<<24>>24!=l<<24>>24){m=h;j=k;h=l;break d}if((j|0)==(m|0))break;j=j+1|0;h=j+b|0;if(h>>>0>=f>>>0){b=n;p=m;break c}}b=b+m|0;h=b+1|0;if(h>>>0>=f>>>0){b=n;p=m;break c}}k=m-n|0;if((j&255)<=(h&255))break;b=m+1|0;if(b>>>0>>0){h=b;b=m;m=k}else{b=n;p=k;break c}}h=b+2|0;if(h>>>0>=f>>>0){p=1;break}else{n=b;b=b+1|0}}j=1;k=-1;h=0;while(1){l=h;h=1;while(1){o=l;e:while(1){l=1;while(1){n=a[e+(l+k)>>0]|0;m=a[e+j>>0]|0;if(n<<24>>24!=m<<24>>24){l=j;j=o;break e}if((l|0)==(h|0))break;l=l+1|0;j=l+o|0;if(j>>>0>=f>>>0){j=p;break b}}o=o+h|0;j=o+1|0;if(j>>>0>=f>>>0){j=p;break b}}h=l-k|0;if((n&255)>=(m&255)){h=j;break}j=l+1|0;if(j>>>0>=f>>>0){j=p;break b}}j=h+2|0;if(j>>>0>=f>>>0){k=h;j=p;h=1;break}else{k=h;h=h+1|0}}}else{b=-1;k=-1;j=1;h=1}while(0);r=(k+1|0)>>>0>(b+1|0)>>>0;h=r?h:j;r=r?k:b;q=r+1|0;if(!(hp(e,e+h|0,q)|0))s=f-h|0;else{h=f-r+-1|0;s=0;h=(r>>>0>h>>>0?r:h)+1|0}n=f|63;o=(s|0)!=0;p=f-h|0;b=t;m=0;l=t;f:while(1){j=b;do if((l-j|0)>>>0>>0){k=lp(l,0,n)|0;if(k)if((k-j|0)>>>0>>0){b=0;break a}else break;else{k=l+n|0;break}}else k=l;while(0);j=a[b+g>>0]|0;if(!(1<<(j&31)&c[u+(((j&255)>>>5&255)<<2)>>2])){b=b+f|0;m=0;l=k;continue}t=c[v+((j&255)<<2)>>2]|0;j=f-t|0;if((f|0)!=(t|0)){b=b+(o&(m|0)!=0&j>>>0>>0?p:j)|0;m=0;l=k;continue}j=q>>>0>m>>>0?q:m;l=a[e+j>>0]|0;g:do if(!(l<<24>>24))j=q;else{while(1){if(l<<24>>24!=(a[b+j>>0]|0))break;j=j+1|0;l=a[e+j>>0]|0;if(!(l<<24>>24)){j=q;break g}}b=b+(j-r)|0;m=0;l=k;continue f}while(0);do{if(j>>>0<=m>>>0)break a;j=j+-1|0}while((a[e+j>>0]|0)==(a[b+j>>0]|0));b=b+h|0;m=s;l=k}}while(0)}else b=0}else b=0}else b=0}else b=t}else b=0}while(0);i=w;return b|0}function op(b,c){b=b|0;c=c|0;b=gp(b,c)|0;return ((a[b>>0]|0)==(c&255)<<24>>24?b:0)|0}function pp(a,b){a=a|0;b=b|0;return qp(a,b,(cp(a)|0)+1|0)|0}function qp(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;e=c&255;do{if(!d){c=0;break}d=d+-1|0;c=b+d|0}while((a[c>>0]|0)!=e<<24>>24);return c|0}function rp(a){a=a|0;var b=0;b=(sp(a)|0)==0;return (b?a:a|32)|0}function sp(a){a=a|0;return (a+-65|0)>>>0<26|0}function tp(a){a=a|0;var b=0,c=0;c=(cp(a)|0)+1|0;b=Bq(c)|0;if(!b)b=0;else ir(b|0,a|0,c|0)|0;return b|0}function up(a,b){a=a|0;b=b|0;vp(a+(cp(a)|0)|0,b)|0;return a|0}function vp(a,b){a=a|0;b=b|0;jp(a,b)|0;return a|0}function wp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=d;do if(!((g^b)&3)){f=(e|0)!=0;a:do if(f&(g&3|0)!=0)while(1){g=a[d>>0]|0;a[b>>0]=g;if(!(g<<24>>24))break a;e=e+-1|0;d=d+1|0;b=b+1|0;f=(e|0)!=0;if(!(f&(d&3|0)!=0)){h=5;break}}else h=5;while(0);if((h|0)==5)if(!f){e=0;break}if(a[d>>0]|0){b:do if(e>>>0>3)do{f=c[d>>2]|0;if((f&-2139062144^-2139062144)&f+-16843009|0)break b;c[b>>2]=f;e=e+-4|0;d=d+4|0;b=b+4|0}while(e>>>0>3);while(0);h=11}}else h=11;while(0);c:do if((h|0)==11)if(!e)e=0;else while(1){h=a[d>>0]|0;a[b>>0]=h;if(!(h<<24>>24))break c;e=e+-1|0;b=b+1|0;if(!e){e=0;break}else d=d+1|0}while(0);er(b|0,0,e|0)|0;return b|0}function xp(a,b,c){a=a|0;b=b|0;c=c|0;wp(a,b,c)|0;return a|0}function yp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=i;i=i+16|0;g=f;c[g>>2]=e;e=zp(a,b,d,g)|0;i=f;return e|0}function zp(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+128|0;g=n+112|0;m=n;h=m;j=10252;k=h+112|0;do{c[h>>2]=c[j>>2];h=h+4|0;j=j+4|0}while((h|0)<(k|0));if((d+-1|0)>>>0>2147483646)if(!d){d=1;l=4}else{c[(Wo()|0)>>2]=75;d=-1}else{g=b;l=4}if((l|0)==4){l=-2-g|0;l=d>>>0>l>>>0?l:d;c[m+48>>2]=l;b=m+20|0;c[b>>2]=g;c[m+44>>2]=g;d=g+l|0;g=m+16|0;c[g>>2]=d;c[m+28>>2]=d;d=Bp(m,e,f)|0;if(l){e=c[b>>2]|0;a[e+(((e|0)==(c[g>>2]|0))<<31>>31)>>0]=0}}i=n;return d|0}function Ap(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+16>>2]|0)-f|0;a=a>>>0>d>>>0?d:a;ir(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0}function Bp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+224|0;o=s+120|0;r=s+80|0;q=s;p=s+136|0;f=r;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[o>>2]=c[e>>2];if((Cp(0,d,o,q,r)|0)<0)e=-1;else{if((c[b+76>>2]|0)>-1)m=Mp(b)|0;else m=0;e=c[b>>2]|0;n=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;e=b+48|0;if(!(c[e>>2]|0)){g=b+44|0;h=c[g>>2]|0;c[g>>2]=p;j=b+28|0;c[j>>2]=p;k=b+20|0;c[k>>2]=p;c[e>>2]=80;l=b+16|0;c[l>>2]=p+80;f=Cp(b,d,o,q,r)|0;if(h){mb[c[b+36>>2]&31](b,0,0)|0;f=(c[k>>2]|0)==0?-1:f;c[g>>2]=h;c[e>>2]=0;c[l>>2]=0;c[j>>2]=0;c[k>>2]=0}}else f=Cp(b,d,o,q,r)|0;e=c[b>>2]|0;c[b>>2]=e|n;if(m|0)Zo(b);e=(e&32|0)==0?f:-1}i=s;return e|0}function Cp(e,f,g,j,l){e=e|0;f=f|0;g=g|0;j=j|0;l=l|0;var m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0;ia=i;i=i+624|0;da=ia+24|0;fa=ia+16|0;ea=ia+588|0;aa=ia+576|0;ca=ia;W=ia+536|0;ha=ia+8|0;ga=ia+528|0;M=(e|0)!=0;N=W+40|0;V=N;W=W+39|0;X=ha+4|0;Y=ea;Z=0-Y|0;$=aa+12|0;aa=aa+11|0;ba=$;O=ba-Y|0;P=-2-Y|0;Q=ba+2|0;R=da+288|0;S=ea+9|0;T=S;U=ea+8|0;m=0;o=0;n=0;y=f;a:while(1){do if((m|0)>-1)if((o|0)>(2147483647-m|0)){c[(Wo()|0)>>2]=75;m=-1;break}else{m=o+m|0;break}while(0);f=a[y>>0]|0;if(!(f<<24>>24)){L=244;break}else o=y;b:while(1){switch(f<<24>>24){case 37:{f=o;L=9;break b}case 0:{f=o;break b}default:{}}K=o+1|0;f=a[K>>0]|0;o=K}c:do if((L|0)==9)while(1){L=0;if((a[f+1>>0]|0)!=37)break c;o=o+1|0;f=f+2|0;if((a[f>>0]|0)==37)L=9;else break}while(0);w=o-y|0;if(M?(c[e>>2]&32|0)==0:0)Dp(y,w,e)|0;if((o|0)!=(y|0)){o=w;y=f;continue}r=f+1|0;o=a[r>>0]|0;p=(o<<24>>24)+-48|0;if(p>>>0<10){K=(a[f+2>>0]|0)==36;r=K?f+3|0:r;o=a[r>>0]|0;u=K?p:-1;n=K?1:n}else u=-1;f=o<<24>>24;d:do if((f&-32|0)==32){p=0;while(1){if(!(1<>24)+-32|p;r=r+1|0;o=a[r>>0]|0;f=o<<24>>24;if((f&-32|0)!=32){s=p;break}}}else s=0;while(0);do if(o<<24>>24==42){o=r+1|0;f=(a[o>>0]|0)+-48|0;if(f>>>0<10?(a[r+2>>0]|0)==36:0){c[l+(f<<2)>>2]=10;n=1;r=r+3|0;f=c[j+((a[o>>0]|0)+-48<<3)>>2]|0}else{if(n|0){m=-1;break a}if(!M){v=s;n=0;r=o;K=0;break}n=(c[g>>2]|0)+(4-1)&~(4-1);f=c[n>>2]|0;c[g>>2]=n+4;n=0;r=o}if((f|0)<0){v=s|8192;K=0-f|0}else{v=s;K=f}}else{p=(o<<24>>24)+-48|0;if(p>>>0<10){f=r;o=0;do{o=(o*10|0)+p|0;f=f+1|0;p=(a[f>>0]|0)+-48|0}while(p>>>0<10);if((o|0)<0){m=-1;break a}else{v=s;r=f;K=o}}else{v=s;K=0}}while(0);e:do if((a[r>>0]|0)==46){f=r+1|0;o=a[f>>0]|0;if(o<<24>>24!=42){p=(o<<24>>24)+-48|0;if(p>>>0<10)o=0;else{s=0;break}while(1){o=(o*10|0)+p|0;f=f+1|0;p=(a[f>>0]|0)+-48|0;if(p>>>0>=10){s=o;break e}}}f=r+2|0;o=(a[f>>0]|0)+-48|0;if(o>>>0<10?(a[r+3>>0]|0)==36:0){c[l+(o<<2)>>2]=10;s=c[j+((a[f>>0]|0)+-48<<3)>>2]|0;f=r+4|0;break}if(n|0){m=-1;break a}if(M){J=(c[g>>2]|0)+(4-1)&~(4-1);s=c[J>>2]|0;c[g>>2]=J+4}else s=0}else{s=-1;f=r}while(0);t=0;while(1){o=(a[f>>0]|0)+-65|0;if(o>>>0>57){m=-1;break a}p=f+1|0;o=a[90393+(t*58|0)+o>>0]|0;r=o&255;if((r+-1|0)>>>0<8){f=p;t=r}else{J=p;break}}if(!(o<<24>>24)){m=-1;break}p=(u|0)>-1;do if(o<<24>>24==19)if(p){m=-1;break a}else L=52;else{if(p){c[l+(u<<2)>>2]=r;H=j+(u<<3)|0;I=c[H+4>>2]|0;L=ca;c[L>>2]=c[H>>2];c[L+4>>2]=I;L=52;break}if(!M){m=0;break a}Fp(ca,r,g)}while(0);if((L|0)==52?(L=0,!M):0){o=w;y=J;continue}u=a[f>>0]|0;u=(t|0)!=0&(u&15|0)==3?u&-33:u;p=v&-65537;I=(v&8192|0)==0?v:p;f:do switch(u|0){case 110:switch(t|0){case 0:{c[c[ca>>2]>>2]=m;o=w;y=J;continue a}case 1:{c[c[ca>>2]>>2]=m;o=w;y=J;continue a}case 2:{o=c[ca>>2]|0;c[o>>2]=m;c[o+4>>2]=((m|0)<0)<<31>>31;o=w;y=J;continue a}case 3:{b[c[ca>>2]>>1]=m;o=w;y=J;continue a}case 4:{a[c[ca>>2]>>0]=m;o=w;y=J;continue a}case 6:{c[c[ca>>2]>>2]=m;o=w;y=J;continue a}case 7:{o=c[ca>>2]|0;c[o>>2]=m;c[o+4>>2]=((m|0)<0)<<31>>31;o=w;y=J;continue a}default:{o=w;y=J;continue a}}case 112:{t=I|8;s=s>>>0>8?s:8;u=120;L=64;break}case 88:case 120:{t=I;L=64;break}case 111:{p=ca;o=c[p>>2]|0;p=c[p+4>>2]|0;if((o|0)==0&(p|0)==0)f=N;else{f=N;do{f=f+-1|0;a[f>>0]=o&7|48;o=hr(o|0,p|0,3)|0;p=C}while(!((o|0)==0&(p|0)==0))}if(!(I&8)){o=I;t=0;r=90873;L=77}else{t=V-f|0;o=I;s=(s|0)>(t|0)?s:t+1|0;t=0;r=90873;L=77}break}case 105:case 100:{o=ca;f=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)<0){f=dr(0,0,f|0,o|0)|0;o=C;p=ca;c[p>>2]=f;c[p+4>>2]=o;p=1;r=90873;L=76;break f}if(!(I&2048)){r=I&1;p=r;r=(r|0)==0?90873:90875;L=76}else{p=1;r=90874;L=76}break}case 117:{o=ca;f=c[o>>2]|0;o=c[o+4>>2]|0;p=0;r=90873;L=76;break}case 99:{a[W>>0]=c[ca>>2];f=W;u=1;w=0;v=90873;o=N;break}case 109:{o=mp(c[(Wo()|0)>>2]|0)|0;L=82;break}case 115:{o=c[ca>>2]|0;o=o|0?o:90883;L=82;break}case 67:{c[ha>>2]=c[ca>>2];c[X>>2]=0;c[ca>>2]=ha;f=ha;s=-1;L=86;break}case 83:{f=c[ca>>2]|0;if(!s){Hp(e,32,K,0,I);f=0;L=97}else L=86;break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{q=+h[ca>>3];c[fa>>2]=0;h[k>>3]=q;if((c[k+4>>2]|0)>=0)if(!(I&2048)){H=I&1;G=H;H=(H|0)==0?90891:90896}else{G=1;H=90893}else{q=-q;G=1;H=90890}h[k>>3]=q;F=c[k+4>>2]&2146435072;do if(F>>>0<2146435072|(F|0)==2146435072&0<0){x=+Kp(q,fa)*2.0;o=x!=0.0;if(o)c[fa>>2]=(c[fa>>2]|0)+-1;D=u|32;if((D|0)==97){v=u&32;y=(v|0)==0?H:H+9|0;w=G|2;f=12-s|0;do if(!(s>>>0>11|(f|0)==0)){q=8.0;do{f=f+-1|0;q=q*16.0}while((f|0)!=0);if((a[y>>0]|0)==45){q=-(q+(-x-q));break}else{q=x+q-q;break}}else q=x;while(0);o=c[fa>>2]|0;f=(o|0)<0?0-o|0:o;f=Gp(f,((f|0)<0)<<31>>31,$)|0;if((f|0)==($|0)){a[aa>>0]=48;f=aa}a[f+-1>>0]=(o>>31&2)+43;t=f+-2|0;a[t>>0]=u+15;r=(s|0)<1;p=(I&8|0)==0;o=ea;while(1){H=~~q;f=o+1|0;a[o>>0]=d[90857+H>>0]|v;q=(q-+(H|0))*16.0;do if((f-Y|0)==1){if(p&(r&q==0.0))break;a[f>>0]=46;f=o+2|0}while(0);if(!(q!=0.0))break;else o=f}p=t;s=(s|0)!=0&(P+f|0)<(s|0)?Q+s-p|0:O-p+f|0;r=s+w|0;Hp(e,32,K,r,I);if(!(c[e>>2]&32))Dp(y,w,e)|0;Hp(e,48,K,r,I^65536);o=f-Y|0;if(!(c[e>>2]&32))Dp(ea,o,e)|0;f=ba-p|0;Hp(e,48,s-(o+f)|0,0,0);if(!(c[e>>2]&32))Dp(t,f,e)|0;Hp(e,32,K,r,I^8192);f=(r|0)<(K|0)?K:r;break}f=(s|0)<0?6:s;if(o){o=(c[fa>>2]|0)+-28|0;c[fa>>2]=o;q=x*268435456.0}else{q=x;o=c[fa>>2]|0}F=(o|0)<0?da:R;E=F;o=F;do{B=~~q>>>0;c[o>>2]=B;o=o+4|0;q=(q-+(B>>>0))*1.0e9}while(q!=0.0);p=o;o=c[fa>>2]|0;if((o|0)>0){s=F;while(1){t=(o|0)>29?29:o;r=p+-4|0;do if(r>>>0>>0)r=s;else{o=0;do{B=fr(c[r>>2]|0,0,t|0)|0;B=gr(B|0,C|0,o|0,0)|0;o=C;A=rr(B|0,o|0,1e9,0)|0;c[r>>2]=A;o=qr(B|0,o|0,1e9,0)|0;r=r+-4|0}while(r>>>0>=s>>>0);if(!o){r=s;break}r=s+-4|0;c[r>>2]=o}while(0);while(1){if(p>>>0<=r>>>0)break;o=p+-4|0;if(!(c[o>>2]|0))p=o;else break}o=(c[fa>>2]|0)-t|0;c[fa>>2]=o;if((o|0)>0)s=r;else break}}else r=F;if((o|0)<0){y=((f+25|0)/9|0)+1|0;z=(D|0)==102;v=r;while(1){w=0-o|0;w=(w|0)>9?9:w;do if(v>>>0

>>0){o=(1<>>w;r=0;t=v;do{B=c[t>>2]|0;c[t>>2]=(B>>>w)+r;r=_(B&o,s)|0;t=t+4|0}while(t>>>0

>>0);o=(c[v>>2]|0)==0?v+4|0:v;if(!r){r=o;break}c[p>>2]=r;r=o;p=p+4|0}else r=(c[v>>2]|0)==0?v+4|0:v;while(0);o=z?F:r;p=(p-o>>2|0)>(y|0)?o+(y<<2)|0:p;o=(c[fa>>2]|0)+w|0;c[fa>>2]=o;if((o|0)>=0){z=r;break}else v=r}}else z=r;do if(z>>>0

>>0){o=(E-z>>2)*9|0;s=c[z>>2]|0;if(s>>>0<10)break;else r=10;do{r=r*10|0;o=o+1|0}while(s>>>0>=r>>>0)}else o=0;while(0);A=(D|0)==103;B=(f|0)!=0;r=f-((D|0)!=102?o:0)+((B&A)<<31>>31)|0;if((r|0)<(((p-E>>2)*9|0)+-9|0)){t=r+9216|0;r=F+4+(((t|0)/9|0)+-1024<<2)|0;t=((t|0)%9|0)+1|0;if((t|0)<9){s=10;do{s=s*10|0;t=t+1|0}while((t|0)!=9)}else s=10;w=c[r>>2]|0;y=(w>>>0)%(s>>>0)|0;t=(r+4|0)==(p|0);do if(t&(y|0)==0)s=z;else{x=(((w>>>0)/(s>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;v=(s|0)/2|0;if(y>>>0>>0)q=.5;else q=t&(y|0)==(v|0)?1.0:1.5;do if(G){if((a[H>>0]|0)!=45)break;x=-x;q=-q}while(0);t=w-y|0;c[r>>2]=t;if(!(x+q!=x)){s=z;break}D=t+s|0;c[r>>2]=D;if(D>>>0>999999999){o=z;while(1){s=r+-4|0;c[r>>2]=0;if(s>>>0>>0){o=o+-4|0;c[o>>2]=0}D=(c[s>>2]|0)+1|0;c[s>>2]=D;if(D>>>0>999999999)r=s;else{v=o;r=s;break}}}else v=z;o=(E-v>>2)*9|0;t=c[v>>2]|0;if(t>>>0<10){s=v;break}else s=10;do{s=s*10|0;o=o+1|0}while(t>>>0>=s>>>0);s=v}while(0);D=r+4|0;z=s;p=p>>>0>D>>>0?D:p}w=0-o|0;while(1){if(p>>>0<=z>>>0){y=0;D=p;break}r=p+-4|0;if(!(c[r>>2]|0))p=r;else{y=1;D=p;break}}do if(A){f=(B&1^1)+f|0;if((f|0)>(o|0)&(o|0)>-5){u=u+-1|0;f=f+-1-o|0}else{u=u+-2|0;f=f+-1|0}p=I&8;if(p|0)break;do if(y){p=c[D+-4>>2]|0;if(!p){r=9;break}if(!((p>>>0)%10|0)){s=10;r=0}else{r=0;break}do{s=s*10|0;r=r+1|0}while(!((p>>>0)%(s>>>0)|0|0))}else r=9;while(0);p=((D-E>>2)*9|0)+-9|0;if((u|32|0)==102){p=p-r|0;p=(p|0)<0?0:p;f=(f|0)<(p|0)?f:p;p=0;break}else{p=p+o-r|0;p=(p|0)<0?0:p;f=(f|0)<(p|0)?f:p;p=0;break}}else p=I&8;while(0);v=f|p;s=(v|0)!=0&1;t=(u|32|0)==102;if(t){o=(o|0)>0?o:0;u=0}else{r=(o|0)<0?w:o;r=Gp(r,((r|0)<0)<<31>>31,$)|0;if((ba-r|0)<2)do{r=r+-1|0;a[r>>0]=48}while((ba-r|0)<2);a[r+-1>>0]=(o>>31&2)+43;E=r+-2|0;a[E>>0]=u;o=ba-E|0;u=E}w=G+1+f+s+o|0;Hp(e,32,K,w,I);if(!(c[e>>2]&32))Dp(H,G,e)|0;Hp(e,48,K,w,I^65536);do if(t){r=z>>>0>F>>>0?F:z;o=r;do{p=Gp(c[o>>2]|0,0,S)|0;do if((o|0)==(r|0)){if((p|0)!=(S|0))break;a[U>>0]=48;p=U}else{if(p>>>0<=ea>>>0)break;er(ea|0,48,p-Y|0)|0;do p=p+-1|0;while(p>>>0>ea>>>0)}while(0);if(!(c[e>>2]&32))Dp(p,T-p|0,e)|0;o=o+4|0}while(o>>>0<=F>>>0);do if(v|0){if(c[e>>2]&32|0)break;Dp(90921,1,e)|0}while(0);if((f|0)>0&o>>>0>>0){p=o;while(1){o=Gp(c[p>>2]|0,0,S)|0;if(o>>>0>ea>>>0){er(ea|0,48,o-Y|0)|0;do o=o+-1|0;while(o>>>0>ea>>>0)}if(!(c[e>>2]&32))Dp(o,(f|0)>9?9:f,e)|0;p=p+4|0;o=f+-9|0;if(!((f|0)>9&p>>>0>>0)){f=o;break}else f=o}}Hp(e,48,f+9|0,9,0)}else{t=y?D:z+4|0;if((f|0)>-1){s=(p|0)==0;r=z;do{o=Gp(c[r>>2]|0,0,S)|0;if((o|0)==(S|0)){a[U>>0]=48;o=U}do if((r|0)==(z|0)){p=o+1|0;if(!(c[e>>2]&32))Dp(o,1,e)|0;if(s&(f|0)<1){o=p;break}if(c[e>>2]&32|0){o=p;break}Dp(90921,1,e)|0;o=p}else{if(o>>>0<=ea>>>0)break;er(ea|0,48,o+Z|0)|0;do o=o+-1|0;while(o>>>0>ea>>>0)}while(0);p=T-o|0;if(!(c[e>>2]&32))Dp(o,(f|0)>(p|0)?p:f,e)|0;f=f-p|0;r=r+4|0}while(r>>>0>>0&(f|0)>-1)}Hp(e,48,f+18|0,18,0);if(c[e>>2]&32|0)break;Dp(u,ba-u|0,e)|0}while(0);Hp(e,32,K,w,I^8192);f=(w|0)<(K|0)?K:w}else{t=(u&32|0)!=0;s=q!=q|0.0!=0.0;o=s?0:G;r=o+3|0;Hp(e,32,K,r,p);f=c[e>>2]|0;if(!(f&32)){Dp(H,o,e)|0;f=c[e>>2]|0}if(!(f&32))Dp(s?(t?91198:90917):t?90909:90913,3,e)|0;Hp(e,32,K,r,I^8192);f=(r|0)<(K|0)?K:r}while(0);o=f;y=J;continue a}default:{f=y;p=I;u=s;w=0;v=90873;o=N}}while(0);g:do if((L|0)==64){p=ca;o=c[p>>2]|0;p=c[p+4>>2]|0;r=u&32;if(!((o|0)==0&(p|0)==0)){f=N;do{f=f+-1|0;a[f>>0]=d[90857+(o&15)>>0]|r;o=hr(o|0,p|0,4)|0;p=C}while(!((o|0)==0&(p|0)==0));L=ca;if((t&8|0)==0|(c[L>>2]|0)==0&(c[L+4>>2]|0)==0){o=t;t=0;r=90873;L=77}else{o=t;t=2;r=90873+(u>>4)|0;L=77}}else{f=N;o=t;t=0;r=90873;L=77}}else if((L|0)==76){f=Gp(f,o,N)|0;o=I;t=p;L=77}else if((L|0)==82){L=0;I=lp(o,0,s)|0;H=(I|0)==0;f=o;u=H?s:I-o|0;w=0;v=90873;o=H?o+s|0:I}else if((L|0)==86){L=0;p=0;o=0;t=f;while(1){r=c[t>>2]|0;if(!r)break;o=Ip(ga,r)|0;if((o|0)<0|o>>>0>(s-p|0)>>>0)break;p=o+p|0;if(s>>>0>p>>>0)t=t+4|0;else break}if((o|0)<0){m=-1;break a}Hp(e,32,K,p,I);if(!p){f=0;L=97}else{r=0;while(1){o=c[f>>2]|0;if(!o){f=p;L=97;break g}o=Ip(ga,o)|0;r=o+r|0;if((r|0)>(p|0)){f=p;L=97;break g}if(!(c[e>>2]&32))Dp(ga,o,e)|0;if(r>>>0>=p>>>0){f=p;L=97;break}else f=f+4|0}}}while(0);if((L|0)==97){L=0;Hp(e,32,K,f,I^8192);o=(K|0)>(f|0)?K:f;y=J;continue}if((L|0)==77){L=0;p=(s|0)>-1?o&-65537:o;o=ca;o=(c[o>>2]|0)!=0|(c[o+4>>2]|0)!=0;if((s|0)!=0|o){u=(o&1^1)+(V-f)|0;u=(s|0)>(u|0)?s:u;w=t;v=r;o=N}else{f=N;u=0;w=t;v=r;o=N}}t=o-f|0;r=(u|0)<(t|0)?t:u;s=w+r|0;o=(K|0)<(s|0)?s:K;Hp(e,32,o,s,p);if(!(c[e>>2]&32))Dp(v,w,e)|0;Hp(e,48,o,s,p^65536);Hp(e,48,r,t,0);if(!(c[e>>2]&32))Dp(f,t,e)|0;Hp(e,32,o,s,p^8192);y=J}h:do if((L|0)==244)if(!e)if(n){m=1;while(1){n=c[l+(m<<2)>>2]|0;if(!n)break;Fp(j+(m<<3)|0,n,g);m=m+1|0;if((m|0)>=10){m=1;break h}}if((m|0)<10)while(1){if(c[l+(m<<2)>>2]|0){m=-1;break h}m=m+1|0;if((m|0)>=10){m=1;break}}else m=1}else m=0;while(0);i=ia;return m|0}function Dp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=e+16|0;g=c[f>>2]|0;if(!g)if(!(Ep(e)|0)){g=c[f>>2]|0;h=5}else f=0;else h=5;a:do if((h|0)==5){i=e+20|0;f=c[i>>2]|0;h=f;if((g-f|0)>>>0>>0){f=mb[c[e+36>>2]&31](e,b,d)|0;break}b:do if((a[e+75>>0]|0)>-1){f=d;while(1){if(!f){g=h;f=0;break b}g=f+-1|0;if((a[b+g>>0]|0)==10)break;else f=g}if((mb[c[e+36>>2]&31](e,b,f)|0)>>>0>>0)break a;d=d-f|0;b=b+f|0;g=c[i>>2]|0}else{g=h;f=0}while(0);ir(g|0,b|0,d|0)|0;c[i>>2]=(c[i>>2]|0)+d;f=f+d|0}while(0);return f|0}function Ep(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=c[b>>2]|0;if(!(d&8)){c[b+8>>2]=0;c[b+4>>2]=0;d=c[b+44>>2]|0;c[b+28>>2]=d;c[b+20>>2]=d;c[b+16>>2]=d+(c[b+48>>2]|0);d=0}else{c[b>>2]=d|32;d=-1}return d|0}function Fp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=b;break a}case 10:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=0;break a}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);b=e;f=c[b>>2]|0;b=c[b+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=f;c[e+4>>2]=b;break a}case 13:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&65535)<<16>>16;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 14:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&65535;c[f+4>>2]=0;break a}case 15:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&255)<<24>>24;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 16:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&255;c[f+4>>2]=0;break a}case 17:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}case 18:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}default:break a}while(0);while(0);return}function Gp(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295)while(1){e=rr(b|0,c|0,10,0)|0;d=d+-1|0;a[d>>0]=e|48;e=qr(b|0,c|0,10,0)|0;if(c>>>0>9|(c|0)==9&b>>>0>4294967295){b=e;c=C}else{b=e;break}}if(b)while(1){d=d+-1|0;a[d>>0]=(b>>>0)%10|0|48;if(b>>>0<10)break;else b=(b>>>0)/10|0}return d|0}function Hp(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0;j=i;i=i+256|0;h=j;do if((d|0)>(e|0)&(f&73728|0)==0){f=d-e|0;er(h|0,b|0,(f>>>0>256?256:f)|0)|0;b=c[a>>2]|0;g=(b&32|0)==0;if(f>>>0>255){e=d-e|0;do{if(g){Dp(h,256,a)|0;b=c[a>>2]|0}f=f+-256|0;g=(b&32|0)==0}while(f>>>0>255);if(g)f=e&255;else break}else if(!g)break;Dp(h,f,a)|0}while(0);i=j;return}function Ip(a,b){a=a|0;b=b|0;if(!a)a=0;else a=Jp(a,b,0)|0;return a|0}function Jp(b,d,e){b=b|0;d=d|0;e=e|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;b=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break}else{c[(Wo()|0)>>2]=84;b=-1;break}}else b=1;while(0);return b|0}function Kp(a,b){a=+a;b=b|0;return +(+Lp(a,b))}function Lp(a,b){a=+a;b=b|0;var d=0,e=0,f=0;h[k>>3]=a;d=c[k>>2]|0;e=c[k+4>>2]|0;f=hr(d|0,e|0,52)|0;f=f&2047;switch(f|0){case 0:{if(a!=0.0){a=+Lp(a*18446744073709551616.0,b);d=(c[b>>2]|0)+-64|0}else d=0;c[b>>2]=d;break}case 2047:break;default:{c[b>>2]=f+-1022;c[k>>2]=d;c[k+4>>2]=e&-2146435073|1071644672;a=+h[k>>3]}}return +a}function Mp(a){a=a|0;return 0}function Np(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+208|0;o=r+8|0;p=r;f=_(d,b)|0;n=p;c[n>>2]=1;c[n+4>>2]=0;if(f|0){n=0-d|0;c[o+4>>2]=d;c[o>>2]=d;g=d;b=d;h=2;while(1){b=b+d+g|0;c[o+(h<<2)>>2]=b;if(b>>>0>>0){m=g;g=b;h=h+1|0;b=m}else break}h=a+f+n|0;m=p+4|0;if(h>>>0>a>>>0){j=h;g=1;f=1;while(1){do if((g&3|0)==3){Op(a,d,e,f,o);l=c[m>>2]|0;b=l<<30|(c[p>>2]|0)>>>2;c[p>>2]=b;c[m>>2]=l>>>2;f=f+2|0}else{b=f+-1|0;if((c[o+(b<<2)>>2]|0)>>>0<(j-a|0)>>>0)Op(a,d,e,f,o);else Qp(a,d,e,p,f,0,o);if((f|0)==1){b=c[p>>2]|0;c[m>>2]=b>>>31|c[m>>2]<<1;b=b<<1;c[p>>2]=b;f=0;break}if(b>>>0>31){g=c[p>>2]|0;c[m>>2]=g;c[p>>2]=0;b=f+-33|0;f=g;g=0}else{f=c[m>>2]|0;g=c[p>>2]|0}c[m>>2]=g>>>(32-b|0)|f<>2]=b;f=1}while(0);g=b|1;c[p>>2]=g;b=a+d|0;if(b>>>0>=h>>>0){a=f;break}else a=b}}else{b=a;a=1}Qp(b,d,e,p,a,0,o);l=p+4|0;g=c[p>>2]|0;h=c[l>>2]|0;f=(h|0)==0;if(!((a|0)==1&(g|0)==1&f)){k=h;while(1){if((a|0)<2){h=g+-1|0;do if(h){if(!(h&1)){f=0;do{f=f+1|0;h=h>>>1}while(!(h&1|0))}else{if(f)f=32;else{if(!(k&1)){h=k;f=0}else{j=0;h=k;f=0;break}do{f=f+1|0;h=h>>>1}while(!(h&1|0))}f=f+32|0}if(f>>>0>31)q=28;else{j=f;h=k}}else{f=32;q=28}while(0);if((q|0)==28){q=0;c[p>>2]=k;c[m>>2]=0;j=f+-32|0;g=k;h=0}c[p>>2]=h<<32-j|g>>>j;c[m>>2]=h>>>j;b=b+n|0;h=f+a|0}else{j=g>>>30;h=a+-2|0;c[p>>2]=(g<<1&2147483646|j<<31)^3;c[m>>2]=(j|k<<2)>>>1;Qp(b+(0-(c[o+(h<<2)>>2]|0))+n|0,d,e,p,a+-1|0,1,o);k=c[p>>2]|0;c[m>>2]=k>>>31|c[m>>2]<<1;c[p>>2]=k<<1|1;b=b+n|0;Qp(b,d,e,p,h,1,o)}g=c[p>>2]|0;k=c[l>>2]|0;f=(k|0)==0;if((h|0)==1&(g|0)==1&f)break;else a=h}}}i=r;return}function Op(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+240|0;o=p;c[o>>2]=a;a:do if((e|0)>1){n=0-b|0;g=e;h=a;k=a;l=1;while(1){a=h+n|0;m=g+-2|0;j=a+(0-(c[f+(m<<2)>>2]|0))|0;if((ub[d&15](k,j)|0)>-1?(ub[d&15](k,a)|0)>-1:0){e=l;break a}e=l+1|0;h=o+(l<<2)|0;if((ub[d&15](j,a)|0)>-1){c[h>>2]=j;a=j;g=g+-1|0}else{c[h>>2]=a;g=m}if((g|0)<=1)break a;h=a;k=c[o>>2]|0;l=e}}else e=1;while(0);Pp(b,o,e);i=p;return}function Pp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;h=i;i=i+256|0;e=h;a:do if((d|0)>=2?(g=b+(d<<2)|0,c[g>>2]=e,a|0):0)while(1){f=a>>>0>256?256:a;ir(e|0,c[b>>2]|0,f|0)|0;e=0;do{j=b+(e<<2)|0;e=e+1|0;ir(c[j>>2]|0,c[b+(e<<2)>>2]|0,f|0)|0;c[j>>2]=(c[j>>2]|0)+f}while((e|0)!=(d|0));if((a|0)==(f|0))break a;a=a-f|0;e=c[g>>2]|0}while(0);i=h;return}function Qp(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+240|0;p=r;l=c[e>>2]|0;k=c[e+4>>2]|0;c[p>>2]=a;o=0-b|0;a:do if((k|0)!=0|(l|0)!=1?(j=a+(0-(c[h+(f<<2)>>2]|0))|0,(ub[d&15](j,a)|0)>=1):0){g=(g|0)==0;m=1;n=l;while(1){if(g&(f|0)>1){e=a+o|0;g=c[h+(f+-2<<2)>>2]|0;if((ub[d&15](e,j)|0)>-1){g=f;e=m;q=19;break a}if((ub[d&15](e+(0-g)|0,j)|0)>-1){g=f;e=m;q=19;break a}}e=m+1|0;c[p+(m<<2)>>2]=j;g=n+-1|0;do if(g){if(!(g&1)){a=0;do{a=a+1|0;g=g>>>1}while(!(g&1|0))}else{if(!k)g=32;else{if(!(k&1)){a=k;g=0}else{l=0;g=n;a=0;break}do{g=g+1|0;a=a>>>1}while(!(a&1|0))}a=g+32|0}if(a>>>0>31)q=15;else{l=a;g=n}}else{a=32;q=15}while(0);if((q|0)==15){q=0;l=a+-32|0;g=k;k=0}n=k<<32-l|g>>>l;k=k>>>l;g=a+f|0;if(!((k|0)!=0|(n|0)!=1)){a=j;q=19;break a}a=j+(0-(c[h+(g<<2)>>2]|0))|0;if((ub[d&15](a,c[p>>2]|0)|0)<1){a=j;f=g;g=0;q=18;break}else{l=j;f=g;g=1;j=a;m=e;a=l}}}else{e=1;q=18}while(0);if((q|0)==18?(g|0)==0:0){g=f;q=19}if((q|0)==19){Pp(b,p,e);Op(a,b,d,g,h)}i=r;return}function Rp(a,b,c){a=a|0;b=b|0;c=c|0;a=Sp(a,b,c,-2147483648,0)|0;return a|0}function Sp(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0;k=i;i=i+112|0;j=k;c[j>>2]=0;g=j+4|0;c[g>>2]=a;c[j+44>>2]=a;h=j+8|0;c[h>>2]=(a|0)<0?-1:a+2147483647|0;c[j+76>>2]=-1;Tp(j,0);e=Up(j,d,1,e,f)|0;if(b|0)c[b>>2]=a+((c[g>>2]|0)+(c[j+108>>2]|0)-(c[h>>2]|0));i=k;return e|0}function Tp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;c[a+104>>2]=b;d=c[a+8>>2]|0;e=c[a+4>>2]|0;f=d-e|0;c[a+108>>2]=f;if((b|0)!=0&(f|0)>(b|0))c[a+100>>2]=e+b;else c[a+100>>2]=d;return}function Up(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;a:do if(e>>>0>36){c[(Wo()|0)>>2]=22;h=0;g=0}else{r=b+4|0;q=b+100|0;do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=Vp(b)|0}while((Yp(i)|0)!=0);b:do switch(i|0){case 43:case 45:{j=((i|0)==45)<<31>>31;i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0;p=j;break b}else{i=Vp(b)|0;p=j;break b}}default:p=0}while(0);j=(e|0)==0;do if((e|16|0)==16&(i|0)==48){i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=Vp(b)|0;if((i|32|0)!=120)if(j){e=8;n=46;break}else{n=32;break}e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;i=d[e>>0]|0}else i=Vp(b)|0;if((d[90924+i>>0]|0)>15){g=(c[q>>2]|0)==0;if(!g)c[r>>2]=(c[r>>2]|0)+-1;if(!f){Tp(b,0);h=0;g=0;break a}if(g){h=0;g=0;break a}c[r>>2]=(c[r>>2]|0)+-1;h=0;g=0;break a}else{e=16;n=46}}else{e=j?10:e;if((d[90924+i>>0]|0)>>>0>>0)n=32;else{if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;Tp(b,0);c[(Wo()|0)>>2]=22;h=0;g=0;break a}}while(0);if((n|0)==32)if((e|0)==10){e=i+-48|0;if(e>>>0<10){i=0;while(1){j=(i*10|0)+e|0;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;i=d[e>>0]|0}else i=Vp(b)|0;e=i+-48|0;if(!(e>>>0<10&j>>>0<429496729)){e=j;break}else i=j}j=0}else{e=0;j=0}f=i+-48|0;if(f>>>0<10){while(1){k=pr(e|0,j|0,10,0)|0;l=C;m=((f|0)<0)<<31>>31;o=~m;if(l>>>0>o>>>0|(l|0)==(o|0)&k>>>0>~f>>>0){k=e;break}e=gr(k|0,l|0,f|0,m|0)|0;j=C;i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=Vp(b)|0;f=i+-48|0;if(!(f>>>0<10&(j>>>0<429496729|(j|0)==429496729&e>>>0<2576980378))){k=e;break}}if(f>>>0>9){i=k;e=p}else{e=10;n=72}}else{i=e;e=p}}else n=46;c:do if((n|0)==46){if(!(e+-1&e)){n=a[91180+((e*23|0)>>>5&7)>>0]|0;j=a[90924+i>>0]|0;f=j&255;if(f>>>0>>0){i=0;while(1){k=f|i<>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=Vp(b)|0;j=a[90924+i>>0]|0;f=j&255;if(!(k>>>0<134217728&f>>>0>>0))break;else i=k}f=0}else{f=0;k=0}l=hr(-1,-1,n|0)|0;m=C;if((j&255)>>>0>=e>>>0|(f>>>0>m>>>0|(f|0)==(m|0)&k>>>0>l>>>0)){j=f;n=72;break}else i=f;while(1){k=fr(k|0,i|0,n|0)|0;f=C;k=j&255|k;i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=Vp(b)|0;j=a[90924+i>>0]|0;if((j&255)>>>0>=e>>>0|(f>>>0>m>>>0|(f|0)==(m|0)&k>>>0>l>>>0)){j=f;n=72;break c}else i=f}}j=a[90924+i>>0]|0;f=j&255;if(f>>>0>>0){i=0;while(1){k=f+(_(i,e)|0)|0;i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=Vp(b)|0;j=a[90924+i>>0]|0;f=j&255;if(!(k>>>0<119304647&f>>>0>>0))break;else i=k}f=0}else{k=0;f=0}if((j&255)>>>0>>0){n=qr(-1,-1,e|0,0)|0;o=C;m=f;while(1){if(m>>>0>o>>>0|(m|0)==(o|0)&k>>>0>n>>>0){j=m;n=72;break c}f=pr(k|0,m|0,e|0,0)|0;l=C;j=j&255;if(l>>>0>4294967295|(l|0)==-1&f>>>0>~j>>>0){j=m;n=72;break c}k=gr(j|0,0,f|0,l|0)|0;f=C;i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=Vp(b)|0;j=a[90924+i>>0]|0;if((j&255)>>>0>=e>>>0){j=f;n=72;break}else m=f}}else{j=f;n=72}}while(0);if((n|0)==72)if((d[90924+i>>0]|0)>>>0>>0){do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=Vp(b)|0}while((d[90924+i>>0]|0)>>>0>>0);c[(Wo()|0)>>2]=34;j=h;i=g;e=(g&1|0)==0&0==0?p:0}else{i=k;e=p}if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;if(!(j>>>0>>0|(j|0)==(h|0)&i>>>0>>0)){if(!((g&1|0)!=0|0!=0|(e|0)!=0)){c[(Wo()|0)>>2]=34;g=gr(g|0,h|0,-1,-1)|0;h=C;break}if(j>>>0>h>>>0|(j|0)==(h|0)&i>>>0>g>>>0){c[(Wo()|0)>>2]=34;break}}g=((e|0)<0)<<31>>31;g=dr(i^e|0,j^g|0,e|0,g|0)|0;h=C}while(0);C=h;return g|0}function Vp(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=b+104|0;i=c[f>>2]|0;if((i|0)!=0?(c[b+108>>2]|0)>=(i|0):0)j=4;else{e=Wp(b)|0;if((e|0)>=0){f=c[f>>2]|0;i=c[b+8>>2]|0;if(f){h=c[b+4>>2]|0;f=f-(c[b+108>>2]|0)|0;g=i;if((i-h|0)<(f|0))j=9;else c[b+100>>2]=h+(f+-1)}else{g=i;j=9}if((j|0)==9)c[b+100>>2]=i;f=b+4|0;if(!g)f=c[f>>2]|0;else{f=c[f>>2]|0;b=b+108|0;c[b>>2]=g+1-f+(c[b>>2]|0)}f=f+-1|0;if((d[f>>0]|0|0)!=(e|0))a[f>>0]=e}else j=4}if((j|0)==4){c[b+100>>2]=0;e=-1}return e|0}function Wp(a){a=a|0;var b=0,e=0;e=i;i=i+16|0;b=e;if((c[a+8>>2]|0)==0?(Xp(a)|0)!=0:0)b=-1;else if((mb[c[a+32>>2]&31](a,b,1)|0)==1)b=d[b>>0]|0;else b=-1;i=e;return b|0}function Xp(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=b+20|0;e=b+44|0;if((c[d>>2]|0)>>>0>(c[e>>2]|0)>>>0)mb[c[b+36>>2]&31](b,0,0)|0;c[b+16>>2]=0;c[b+28>>2]=0;c[d>>2]=0;d=c[b>>2]|0;if(d&20)if(!(d&4))d=-1;else{c[b>>2]=d|32;d=-1}else{d=c[e>>2]|0;c[b+8>>2]=d;c[b+4>>2]=d;d=0}return d|0}function Yp(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function Zp(a){a=a|0;var b=0;b=(_p(a)|0)==0;return (b?a:a&95)|0}function _p(a){a=a|0;return (a+-97|0)>>>0<26|0}function $p(a){a=a|0;return ((a+-48|0)>>>0<10|(aq(a)|0)!=0)&1|0}function aq(a){a=a|0;return ((a|32)+-97|0)>>>0<26|0}function bq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=_(d,b)|0;if((c[e+76>>2]|0)>-1){g=(Mp(e)|0)==0;a=Dp(a,f,e)|0;if(!g)Zo(e)}else a=Dp(a,f,e)|0;if((a|0)!=(f|0))d=(a>>>0)/(b>>>0)|0;return d|0}function cq(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,h=0,j=0.0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0;L=i;i=i+512|0;H=L;switch(e|0){case 0:{K=24;J=-149;A=4;break}case 1:{K=53;J=-1074;A=4;break}case 2:{K=53;J=-1074;A=4;break}default:g=0.0}a:do if((A|0)==4){E=b+4|0;D=b+100|0;do{e=c[E>>2]|0;if(e>>>0<(c[D>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0}else e=Vp(b)|0}while((Yp(e)|0)!=0);b:do switch(e|0){case 43:case 45:{h=1-(((e|0)==45&1)<<1)|0;e=c[E>>2]|0;if(e>>>0<(c[D>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0;I=h;break b}else{e=Vp(b)|0;I=h;break b}}default:I=1}while(0);h=e;e=0;do{if((h|32|0)!=(a[91189+e>>0]|0))break;do if(e>>>0<7){h=c[E>>2]|0;if(h>>>0<(c[D>>2]|0)>>>0){c[E>>2]=h+1;h=d[h>>0]|0;break}else{h=Vp(b)|0;break}}while(0);e=e+1|0}while(e>>>0<8);c:do switch(e|0){case 8:break;case 3:{A=23;break}default:{k=(f|0)!=0;if(k&e>>>0>3)if((e|0)==8)break c;else{A=23;break c}d:do if(!e){e=0;do{if((h|32|0)!=(a[91198+e>>0]|0))break d;do if(e>>>0<2){h=c[E>>2]|0;if(h>>>0<(c[D>>2]|0)>>>0){c[E>>2]=h+1;h=d[h>>0]|0;break}else{h=Vp(b)|0;break}}while(0);e=e+1|0}while(e>>>0<3)}while(0);switch(e|0){case 3:{e=c[E>>2]|0;if(e>>>0<(c[D>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0}else e=Vp(b)|0;if((e|0)==40)e=1;else{if(!(c[D>>2]|0)){g=r;break a}c[E>>2]=(c[E>>2]|0)+-1;g=r;break a}while(1){h=c[E>>2]|0;if(h>>>0<(c[D>>2]|0)>>>0){c[E>>2]=h+1;h=d[h>>0]|0}else h=Vp(b)|0;if(!((h+-48|0)>>>0<10|(h+-65|0)>>>0<26)?!((h|0)==95|(h+-97|0)>>>0<26):0)break;e=e+1|0}if((h|0)==41){g=r;break a}h=(c[D>>2]|0)==0;if(!h)c[E>>2]=(c[E>>2]|0)+-1;if(!k){c[(Wo()|0)>>2]=22;Tp(b,0);g=0.0;break a}if(!e){g=r;break a}while(1){e=e+-1|0;if(!h)c[E>>2]=(c[E>>2]|0)+-1;if(!e){g=r;break a}}}case 0:{do if((h|0)==48){e=c[E>>2]|0;if(e>>>0<(c[D>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0}else e=Vp(b)|0;if((e|32|0)!=120){if(!(c[D>>2]|0)){e=48;break}c[E>>2]=(c[E>>2]|0)+-1;e=48;break}e=c[E>>2]|0;if(e>>>0<(c[D>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0;k=0}else{e=Vp(b)|0;k=0}e:while(1){switch(e|0){case 46:{A=74;break e}case 48:break;default:{y=0;l=0;x=0;h=0;n=k;o=0;w=0;m=1.0;k=0;g=0.0;break e}}e=c[E>>2]|0;if(e>>>0<(c[D>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0;k=1;continue}else{e=Vp(b)|0;k=1;continue}}if((A|0)==74){e=c[E>>2]|0;if(e>>>0<(c[D>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0}else e=Vp(b)|0;if((e|0)==48){k=0;h=0;do{e=c[E>>2]|0;if(e>>>0<(c[D>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0}else e=Vp(b)|0;k=gr(k|0,h|0,-1,-1)|0;h=C}while((e|0)==48);y=0;l=0;x=k;n=1;o=1;w=0;m=1.0;k=0;g=0.0}else{y=0;l=0;x=0;h=0;n=k;o=1;w=0;m=1.0;k=0;g=0.0}}while(1){u=e+-48|0;p=e|32;if(u>>>0>=10){v=(e|0)==46;if(!(v|(p+-97|0)>>>0<6)){p=x;u=y;break}if(v)if(!o){v=l;h=y;u=y;o=1;p=w;j=m}else{p=x;u=y;e=46;break}else A=86}else A=86;if((A|0)==86){A=0;e=(e|0)>57?p+-87|0:u;do if(!((y|0)<0|(y|0)==0&l>>>0<8)){if((y|0)<0|(y|0)==0&l>>>0<14){t=m*.0625;p=w;j=t;g=g+t*+(e|0);break}if((w|0)!=0|(e|0)==0){p=w;j=m}else{p=1;j=m;g=g+m*.5}}else{p=w;j=m;k=e+(k<<4)|0}while(0);l=gr(l|0,y|0,1,0)|0;v=x;u=C;n=1}e=c[E>>2]|0;if(e>>>0<(c[D>>2]|0)>>>0){c[E>>2]=e+1;y=u;x=v;e=d[e>>0]|0;w=p;m=j;continue}else{y=u;x=v;e=Vp(b)|0;w=p;m=j;continue}}if(!n){e=(c[D>>2]|0)==0;if(!e)c[E>>2]=(c[E>>2]|0)+-1;if(f){if(!e?(z=c[E>>2]|0,c[E>>2]=z+-1,o|0):0)c[E>>2]=z+-2}else Tp(b,0);g=+(I|0)*0.0;break a}n=(o|0)==0;o=n?l:p;n=n?u:h;if((u|0)<0|(u|0)==0&l>>>0<8){h=u;do{k=k<<4;l=gr(l|0,h|0,1,0)|0;h=C}while((h|0)<0|(h|0)==0&l>>>0<8)}if((e|32|0)==112){h=dq(b,f)|0;e=C;if((h|0)==0&(e|0)==-2147483648){if(!f){Tp(b,0);g=0.0;break a}if(!(c[D>>2]|0)){h=0;e=0}else{c[E>>2]=(c[E>>2]|0)+-1;h=0;e=0}}}else if(!(c[D>>2]|0)){h=0;e=0}else{c[E>>2]=(c[E>>2]|0)+-1;h=0;e=0}H=fr(o|0,n|0,2)|0;H=gr(H|0,C|0,-32,-1)|0;e=gr(H|0,C|0,h|0,e|0)|0;h=C;if(!k){g=+(I|0)*0.0;break a}if((h|0)>0|(h|0)==0&e>>>0>(0-J|0)>>>0){c[(Wo()|0)>>2]=34;g=+(I|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break a}H=J+-106|0;G=((H|0)<0)<<31>>31;if((h|0)<(G|0)|(h|0)==(G|0)&e>>>0>>0){c[(Wo()|0)>>2]=34;g=+(I|0)*2.2250738585072014e-308*2.2250738585072014e-308;break a}if((k|0)>-1){do{G=!(g>=.5);H=G&1|k<<1;k=H^1;g=g+(G?g:g+-1.0);e=gr(e|0,h|0,-1,-1)|0;h=C}while((H|0)>-1);l=e;m=g}else{l=e;m=g}e=dr(32,0,J|0,((J|0)<0)<<31>>31|0)|0;e=gr(l|0,h|0,e|0,C|0)|0;J=C;if(0>(J|0)|0==(J|0)&K>>>0>e>>>0)if((e|0)<0){e=0;A=127}else A=125;else{e=K;A=125}if((A|0)==125)if((e|0)<53)A=127;else{h=e;j=+(I|0);g=0.0}if((A|0)==127){g=+(I|0);h=e;j=g;g=+fq(+eq(1.0,84-e|0),g)}K=(k&1|0)==0&(m!=0.0&(h|0)<32);g=j*(K?0.0:m)+(g+j*+(((K&1)+k|0)>>>0))-g;if(!(g!=0.0))c[(Wo()|0)>>2]=34;g=+hq(g,l);break a}else e=h;while(0);F=J+K|0;G=0-F|0;k=0;f:while(1){switch(e|0){case 46:{A=138;break f}case 48:break;default:{h=0;p=0;o=0;break f}}e=c[E>>2]|0;if(e>>>0<(c[D>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0;k=1;continue}else{e=Vp(b)|0;k=1;continue}}if((A|0)==138){e=c[E>>2]|0;if(e>>>0<(c[D>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0}else e=Vp(b)|0;if((e|0)==48){h=0;e=0;while(1){h=gr(h|0,e|0,-1,-1)|0;k=C;e=c[E>>2]|0;if(e>>>0<(c[D>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0}else e=Vp(b)|0;if((e|0)==48)e=k;else{p=k;k=1;o=1;break}}}else{h=0;p=0;o=1}}c[H>>2]=0;n=e+-48|0;l=(e|0)==46;g:do if(l|n>>>0<10){B=H+496|0;y=0;v=0;w=l;A=p;u=k;z=o;k=0;l=0;o=0;h:while(1){do if(w)if(!z){h=y;p=v;z=1}else{p=A;e=y;n=v;break h}else{w=gr(y|0,v|0,1,0)|0;v=C;x=(e|0)!=48;if((l|0)>=125){if(!x){p=A;y=w;break}c[B>>2]=c[B>>2]|1;p=A;y=w;break}p=H+(l<<2)|0;if(k)n=e+-48+((c[p>>2]|0)*10|0)|0;c[p>>2]=n;k=k+1|0;n=(k|0)==9;p=A;y=w;u=1;k=n?0:k;l=(n&1)+l|0;o=x?w:o}while(0);e=c[E>>2]|0;if(e>>>0<(c[D>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0}else e=Vp(b)|0;n=e+-48|0;w=(e|0)==46;if(!(w|n>>>0<10)){n=z;A=161;break g}else A=p}u=(u|0)!=0;A=169}else{y=0;v=0;u=k;n=o;k=0;l=0;o=0;A=161}while(0);do if((A|0)==161){B=(n|0)==0;h=B?y:h;p=B?v:p;u=(u|0)!=0;if(!((e|32|0)==101&u))if((e|0)>-1){e=y;n=v;A=169;break}else{e=y;n=v;A=171;break}n=dq(b,f)|0;e=C;if((n|0)==0&(e|0)==-2147483648){if(!f){Tp(b,0);g=0.0;break}if(!(c[D>>2]|0)){n=0;e=0}else{c[E>>2]=(c[E>>2]|0)+-1;n=0;e=0}}h=gr(n|0,e|0,h|0,p|0)|0;u=y;p=C;n=v;A=173}while(0);if((A|0)==169)if(c[D>>2]|0){c[E>>2]=(c[E>>2]|0)+-1;if(u){u=e;A=173}else A=172}else A=171;if((A|0)==171)if(u){u=e;A=173}else A=172;do if((A|0)==172){c[(Wo()|0)>>2]=22;Tp(b,0);g=0.0}else if((A|0)==173){e=c[H>>2]|0;if(!e){g=+(I|0)*0.0;break}if(((n|0)<0|(n|0)==0&u>>>0<10)&((h|0)==(u|0)&(p|0)==(n|0))?K>>>0>30|(e>>>K|0)==0:0){g=+(I|0)*+(e>>>0);break}b=(J|0)/-2|0;E=((b|0)<0)<<31>>31;if((p|0)>(E|0)|(p|0)==(E|0)&h>>>0>b>>>0){c[(Wo()|0)>>2]=34;g=+(I|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}b=J+-106|0;E=((b|0)<0)<<31>>31;if((p|0)<(E|0)|(p|0)==(E|0)&h>>>0>>0){c[(Wo()|0)>>2]=34;g=+(I|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(k){if((k|0)<9){n=H+(l<<2)|0;e=c[n>>2]|0;do{e=e*10|0;k=k+1|0}while((k|0)!=9);c[n>>2]=e}l=l+1|0}if((o|0)<9?(o|0)<=(h|0)&(h|0)<18:0){if((h|0)==9){g=+(I|0)*+((c[H>>2]|0)>>>0);break}if((h|0)<9){g=+(I|0)*+((c[H>>2]|0)>>>0)/+(c[10364+(8-h<<2)>>2]|0);break}b=K+27+(_(h,-3)|0)|0;e=c[H>>2]|0;if((b|0)>30|(e>>>b|0)==0){g=+(I|0)*+(e>>>0)*+(c[10364+(h+-10<<2)>>2]|0);break}}e=(h|0)%9|0;if(!e){k=0;e=0}else{u=(h|0)>-1?e:e+9|0;n=c[10364+(8-u<<2)>>2]|0;if(l){o=1e9/(n|0)|0;k=0;e=0;p=0;do{D=H+(p<<2)|0;E=c[D>>2]|0;b=((E>>>0)/(n>>>0)|0)+e|0;c[D>>2]=b;e=_((E>>>0)%(n>>>0)|0,o)|0;b=(p|0)==(k|0)&(b|0)==0;p=p+1|0;h=b?h+-9|0:h;k=b?p&127:k}while((p|0)!=(l|0));if(e){c[H+(l<<2)>>2]=e;l=l+1|0}}else{k=0;l=0}e=0;h=9-u+h|0}i:while(1){v=(h|0)<18;w=(h|0)==18;x=H+(k<<2)|0;do{if(!v){if(!w){y=l;break i}if((c[x>>2]|0)>>>0>=9007199){h=18;y=l;break i}}n=0;o=l+127|0;while(1){u=o&127;p=H+(u<<2)|0;o=fr(c[p>>2]|0,0,29)|0;o=gr(o|0,C|0,n|0,0)|0;n=C;if(n>>>0>0|(n|0)==0&o>>>0>1e9){b=qr(o|0,n|0,1e9,0)|0;o=rr(o|0,n|0,1e9,0)|0;n=b}else n=0;c[p>>2]=o;b=(u|0)==(k|0);l=(u|0)!=(l+127&127|0)|b?l:(o|0)==0?u:l;if(b)break;else o=u+-1|0}e=e+-29|0}while((n|0)==0);k=k+127&127;if((k|0)==(l|0)){b=l+127&127;l=H+((l+126&127)<<2)|0;c[l>>2]=c[l>>2]|c[H+(b<<2)>>2];l=b}c[H+(k<<2)>>2]=n;h=h+9|0}j:while(1){l=y+1&127;x=H+((y+127&127)<<2)|0;while(1){v=(h|0)==18;w=(h|0)>27?9:1;u=v^1;while(1){o=k&127;p=(o|0)==(y|0);do if(!p){n=c[H+(o<<2)>>2]|0;if(n>>>0<9007199){A=219;break}if(n>>>0>9007199)break;n=k+1&127;if((n|0)==(y|0)){A=219;break}n=c[H+(n<<2)>>2]|0;if(n>>>0<254740991){A=219;break}if(!(n>>>0>254740991|u)){h=o;l=y;break j}}else A=219;while(0);if((A|0)==219?(A=0,v):0){A=220;break j}e=e+w|0;if((k|0)==(y|0))k=y;else break}u=(1<>>w;o=k;n=0;p=k;while(1){E=H+(p<<2)|0;b=c[E>>2]|0;k=(b>>>w)+n|0;c[E>>2]=k;n=_(b&u,v)|0;k=(p|0)==(o|0)&(k|0)==0;p=p+1&127;h=k?h+-9|0:h;k=k?p:o;if((p|0)==(y|0))break;else o=k}if(!n)continue;if((l|0)!=(k|0))break;c[x>>2]=c[x>>2]|1}c[H+(y<<2)>>2]=n;y=l}if((A|0)==220)if(p){c[H+(l+-1<<2)>>2]=0;h=y}else{h=o;l=y}g=+((c[H+(h<<2)>>2]|0)>>>0);h=k+1&127;if((h|0)==(l|0)){l=k+2&127;c[H+(l+-1<<2)>>2]=0}t=+(I|0);j=t*(g*1.0e9+ +((c[H+(h<<2)>>2]|0)>>>0));v=e+53|0;p=v-J|0;u=(p|0)<(K|0);h=u&1;o=u?((p|0)<0?0:p):K;if((o|0)<53){M=+fq(+eq(1.0,105-o|0),j);m=+iq(j,+eq(1.0,53-o|0));q=M;g=m;m=M+(j-m)}else{q=0.0;g=0.0;m=j}n=k+2&127;do if((n|0)==(l|0))j=g;else{n=c[H+(n<<2)>>2]|0;do if(n>>>0>=5e8){if(n>>>0>5e8){g=t*.75+g;break}if((k+3&127|0)==(l|0)){g=t*.5+g;break}else{g=t*.75+g;break}}else{if((n|0)==0?(k+3&127|0)==(l|0):0)break;g=t*.25+g}while(0);if((53-o|0)<=1){j=g;break}if(+iq(g,1.0)!=0.0){j=g;break}j=g+1.0}while(0);g=m+j-q;do if((v&2147483647|0)>(-2-F|0)){if(+N(+g)>=9007199254740992.0){h=u&(o|0)==(p|0)?0:h;e=e+1|0;g=g*.5}if((e+50|0)<=(G|0)?!(j!=0.0&(h|0)!=0):0)break;c[(Wo()|0)>>2]=34}while(0);g=+hq(g,e)}while(0);break a}default:{if(c[D>>2]|0)c[E>>2]=(c[E>>2]|0)+-1;c[(Wo()|0)>>2]=22;Tp(b,0);g=0.0;break a}}}}while(0);if((A|0)==23){h=(c[D>>2]|0)==0;if(!h)c[E>>2]=(c[E>>2]|0)+-1;if((f|0)!=0&e>>>0>3)do{if(!h)c[E>>2]=(c[E>>2]|0)+-1;e=e+-1|0}while(e>>>0>3)}g=+(I|0)*s}while(0);i=L;return +g}function dq(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=a+4|0;e=c[i>>2]|0;j=a+100|0;if(e>>>0<(c[j>>2]|0)>>>0){c[i>>2]=e+1;e=d[e>>0]|0}else e=Vp(a)|0;switch(e|0){case 43:case 45:{f=(e|0)==45&1;e=c[i>>2]|0;if(e>>>0<(c[j>>2]|0)>>>0){c[i>>2]=e+1;e=d[e>>0]|0}else e=Vp(a)|0;if((b|0)!=0&(e+-48|0)>>>0>9?(c[j>>2]|0)!=0:0){c[i>>2]=(c[i>>2]|0)+-1;h=f}else h=f;break}default:h=0}if((e+-48|0)>>>0>9)if(!(c[j>>2]|0)){f=-2147483648;e=0}else{c[i>>2]=(c[i>>2]|0)+-1;f=-2147483648;e=0}else{f=0;do{f=e+-48+(f*10|0)|0;e=c[i>>2]|0;if(e>>>0<(c[j>>2]|0)>>>0){c[i>>2]=e+1;e=d[e>>0]|0}else e=Vp(a)|0}while((e+-48|0)>>>0<10&(f|0)<214748364);b=((f|0)<0)<<31>>31;if((e+-48|0)>>>0<10){do{b=pr(f|0,b|0,10,0)|0;f=C;e=gr(e|0,((e|0)<0)<<31>>31|0,-48,-1)|0;f=gr(e|0,C|0,b|0,f|0)|0;b=C;e=c[i>>2]|0;if(e>>>0<(c[j>>2]|0)>>>0){c[i>>2]=e+1;e=d[e>>0]|0}else e=Vp(a)|0}while((e+-48|0)>>>0<10&((b|0)<21474836|(b|0)==21474836&f>>>0<2061584302));g=f}else g=f;if((e+-48|0)>>>0<10)do{e=c[i>>2]|0;if(e>>>0<(c[j>>2]|0)>>>0){c[i>>2]=e+1;e=d[e>>0]|0}else e=Vp(a)|0}while((e+-48|0)>>>0<10);if(c[j>>2]|0)c[i>>2]=(c[i>>2]|0)+-1;a=(h|0)!=0;e=dr(0,0,g|0,b|0)|0;f=a?C:b;e=a?e:g}C=f;return e|0}function eq(a,b){a=+a;b=b|0;var d=0;if((b|0)>1023){a=a*8988465674311579538646525.0e283;d=b+-1023|0;if((d|0)>1023){d=b+-2046|0;d=(d|0)>1023?1023:d;a=a*8988465674311579538646525.0e283}}else if((b|0)<-1022){a=a*2.2250738585072014e-308;d=b+1022|0;if((d|0)<-1022){d=b+2044|0;d=(d|0)<-1022?-1022:d;a=a*2.2250738585072014e-308}}else d=b;d=fr(d+1023|0,0,52)|0;b=C;c[k>>2]=d;c[k+4>>2]=b;return +(a*+h[k>>3])}function fq(a,b){a=+a;b=+b;return +(+gq(a,b))}function gq(a,b){a=+a;b=+b;var d=0;h[k>>3]=b;d=c[k+4>>2]|0;b=+N(+a);h[k>>3]=b;d=d&-2147483648|c[k+4>>2];c[k>>2]=c[k>>2];c[k+4>>2]=d;return +(+h[k>>3])}function hq(a,b){a=+a;b=b|0;return +(+eq(a,b))}function iq(a,b){a=+a;b=+b;return +(+jq(a,b))}function jq(a,b){a=+a;b=+b;var d=0,e=0,f=0,g=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0.0;h[k>>3]=a;d=c[k>>2]|0;m=c[k+4>>2]|0;h[k>>3]=b;n=c[k>>2]|0;o=c[k+4>>2]|0;e=hr(d|0,m|0,52)|0;e=e&2047;j=hr(n|0,o|0,52)|0;j=j&2047;p=m&-2147483648;i=fr(n|0,o|0,1)|0;l=C;a:do if(!((i|0)==0&(l|0)==0)?(r=+N(+b),h[k>>3]=r,g=c[k+4>>2]|0,!(g>>>0>2146435072|(g|0)==2146435072&(c[k>>2]|0)>>>0>0|(e|0)==2047)):0){f=fr(d|0,m|0,1)|0;g=C;if(!(g>>>0>l>>>0|(g|0)==(l|0)&f>>>0>i>>>0))return +((f|0)==(i|0)&(g|0)==(l|0)?a*0.0:a);if(!e){e=fr(d|0,m|0,12)|0;f=C;if((f|0)>-1|(f|0)==-1&e>>>0>4294967295){g=e;e=0;do{e=e+-1|0;g=fr(g|0,f|0,1)|0;f=C}while((f|0)>-1|(f|0)==-1&g>>>0>4294967295)}else e=0;d=fr(d|0,m|0,1-e|0)|0;f=C}else f=m&1048575|1048576;if(!j){g=fr(n|0,o|0,12)|0;i=C;if((i|0)>-1|(i|0)==-1&g>>>0>4294967295){j=0;do{j=j+-1|0;g=fr(g|0,i|0,1)|0;i=C}while((i|0)>-1|(i|0)==-1&g>>>0>4294967295)}else j=0;n=fr(n|0,o|0,1-j|0)|0;m=C}else m=o&1048575|1048576;l=dr(d|0,f|0,n|0,m|0)|0;i=C;g=(i|0)>-1|(i|0)==-1&l>>>0>4294967295;b:do if((e|0)>(j|0)){while(1){if(g)if((d|0)==(n|0)&(f|0)==(m|0))break;else{d=l;f=i}d=fr(d|0,f|0,1)|0;f=C;e=e+-1|0;l=dr(d|0,f|0,n|0,m|0)|0;i=C;g=(i|0)>-1|(i|0)==-1&l>>>0>4294967295;if((e|0)<=(j|0))break b}b=a*0.0;break a}while(0);if(g)if((d|0)==(n|0)&(f|0)==(m|0)){b=a*0.0;break}else{f=i;d=l}if(f>>>0<1048576|(f|0)==1048576&d>>>0<0)do{d=fr(d|0,f|0,1)|0;f=C;e=e+-1|0}while(f>>>0<1048576|(f|0)==1048576&d>>>0<0);if((e|0)>0){o=gr(d|0,f|0,0,-1048576)|0;d=C;e=fr(e|0,0,52)|0;d=d|C;e=o|e}else{e=hr(d|0,f|0,1-e|0)|0;d=C}c[k>>2]=e;c[k+4>>2]=d|p;b=+h[k>>3]}else q=3;while(0);if((q|0)==3){b=a*b;b=b/b}return +b}function kq(a,b){a=a|0;b=b|0;return (bq(a,cp(a)|0,1,b)|0)+-1|0}function lq(a){a=a|0;var b=0,e=0,f=0;if((c[a+76>>2]|0)>=0?(Mp(a)|0)!=0:0){b=a+4|0;e=c[b>>2]|0;if(e>>>0<(c[a+8>>2]|0)>>>0){c[b>>2]=e+1;b=d[e>>0]|0}else b=Wp(a)|0}else f=3;do if((f|0)==3){b=a+4|0;e=c[b>>2]|0;if(e>>>0<(c[a+8>>2]|0)>>>0){c[b>>2]=e+1;b=d[e>>0]|0;break}else{b=Wp(a)|0;break}}while(0);return b|0}function mq(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=nq(a)|0;break}d=(Mp(a)|0)==0;b=nq(a)|0;if(!d)Zo(a)}else{if(!(c[2533]|0))b=0;else b=mq(c[2533]|0)|0;cb(91632);a=c[22907]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=Mp(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=nq(a)|0|b;if(d|0)Zo(a);a=c[a+56>>2]|0}while((a|0)!=0);Za(91632)}while(0);return b|0}function nq(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;g=a+28|0;if((c[b>>2]|0)>>>0>(c[g>>2]|0)>>>0?(mb[c[a+36>>2]&31](a,0,0)|0,(c[b>>2]|0)==0):0)b=-1;else{h=a+4|0;d=c[h>>2]|0;e=a+8|0;f=c[e>>2]|0;if(d>>>0>>0)mb[c[a+40>>2]&31](a,d-f|0,1)|0;c[a+16>>2]=0;c[g>>2]=0;c[b>>2]=0;c[e>>2]=0;c[h>>2]=0;b=0}return b|0}function oq(a){a=a|0;var b=0,d=0,e=0;e=(c[a>>2]&1|0)!=0;if(!e){cb(91632);d=c[a+52>>2]|0;b=a+56|0;if(d|0)c[d+56>>2]=c[b>>2];b=c[b>>2]|0;if(b|0)c[b+52>>2]=d;if((c[22907]|0)==(a|0))c[22907]=b;Za(91632)}b=mq(a)|0;b=qb[c[a+12>>2]&1](a)|0|b;d=c[a+92>>2]|0;if(d|0)Cq(d);if(!e)Cq(a);return b|0}function pq(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if((c[f+76>>2]|0)>-1)m=Mp(f)|0;else m=0;g=e+-1|0;if((e|0)<2){n=f+74|0;l=a[n>>0]|0;a[n>>0]=l+255|l;if(m|0)Zo(f);if(!g)a[b>>0]=0;else b=0}else{a:do if(g){k=f+4|0;l=f+8|0;e=b;while(1){h=c[k>>2]|0;j=h;p=(c[l>>2]|0)-j|0;i=lp(h,10,p)|0;o=(i|0)==0;i=o?p:1-j+i|0;j=i>>>0>>0;i=j?i:g;ir(e|0,h|0,i|0)|0;h=(c[k>>2]|0)+i|0;c[k>>2]=h;e=e+i|0;i=g-i|0;if(!(o&j)){n=17;break a}if(h>>>0>=(c[l>>2]|0)>>>0){g=Wp(f)|0;if((g|0)<0)break;else j=g}else{c[k>>2]=h+1;j=d[h>>0]|0}g=i+-1|0;h=e+1|0;a[e>>0]=j;if(!((g|0)!=0&(j&255|0)!=10)){e=h;n=17;break a}else e=h}if((e|0)!=(b|0)?(c[f>>2]&16|0)!=0:0)n=17;else b=0}else{e=b;n=17}while(0);if((n|0)==17)if(!b)b=0;else a[e>>0]=0;if(m)Zo(f)}return b|0}function qq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;i=i+16|0;f=e;c[f>>2]=d;d=rq(a,b,f)|0;i=e;return d|0}function rq(a,b,c){a=a|0;b=b|0;c=c|0;return zp(a,2147483647,b,c)|0}function sq(a){a=a|0;var b=0;if(!(c[a>>2]&128))b=1;else b=(c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0?2:1;b=mb[c[a+40>>2]&31](a,0,b)|0;if((b|0)>=0)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)+(c[a+20>>2]|0)-(c[a+28>>2]|0)|0;return b|0}function tq(a){a=a|0;var b=0,d=0;if((c[a+76>>2]|0)>-1){d=(Mp(a)|0)==0;b=sq(a)|0;if(!d)Zo(a)}else b=sq(a)|0;return b|0}function uq(a){a=a|0;return tq(a)|0}function vq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((d|0)==1)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)|0;e=a+20|0;f=a+28|0;if((c[e>>2]|0)>>>0>(c[f>>2]|0)>>>0?(mb[c[a+36>>2]&31](a,0,0)|0,(c[e>>2]|0)==0):0)b=-1;else{c[a+16>>2]=0;c[f>>2]=0;c[e>>2]=0;if((mb[c[a+40>>2]&31](a,b,d)|0)<0)b=-1;else{c[a+8>>2]=0;c[a+4>>2]=0;c[a>>2]=c[a>>2]&-17;b=0}}return b|0}function wq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((c[a+76>>2]|0)>-1){e=(Mp(a)|0)==0;b=vq(a,b,d)|0;if(!e)Zo(a)}else b=vq(a,b,d)|0;return b|0}function xq(a,b,c){a=a|0;b=b|0;c=c|0;return wq(a,b,c)|0}function yq(b){b=b|0;var c=0,d=0,e=0,f=0;while(1){c=b+1|0;if(!(Yp(a[b>>0]|0)|0))break;else b=c}d=a[b>>0]|0;switch(d<<24>>24|0){case 45:{e=1;f=5;break}case 43:{e=0;f=5;break}default:e=0}if((f|0)==5){b=c;d=a[c>>0]|0}c=(d<<24>>24)+-48|0;if(c>>>0<10){d=b;b=0;do{d=d+1|0;b=(b*10|0)-c|0;c=(a[d>>0]|0)+-48|0}while(c>>>0<10)}else b=0;return (e|0?b:0-b|0)|0}function zq(a,b){a=a|0;b=b|0;return +(+Aq(a,b,1))}function Aq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,h=0,j=0;j=i;i=i+112|0;h=j;f=h;g=f+112|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));f=h+4|0;c[f>>2]=a;g=h+8|0;c[g>>2]=-1;c[h+44>>2]=a;c[h+76>>2]=-1;Tp(h,0);e=+cq(h,d,1);d=(c[f>>2]|0)-(c[g>>2]|0)+(c[h+108>>2]|0)|0;if(b|0)c[b>>2]=d|0?a+d|0:a;i=j;return +e}function Bq(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;do if(a>>>0<245){o=a>>>0<11?16:a+11&-8;a=o>>>3;j=c[22913]|0;b=j>>>a;if(b&3|0){b=(b&1^1)+a|0;d=91692+(b<<1<<2)|0;e=d+8|0;f=c[e>>2]|0;g=f+8|0;h=c[g>>2]|0;do if((d|0)!=(h|0)){if(h>>>0<(c[22917]|0)>>>0)va();a=h+12|0;if((c[a>>2]|0)==(f|0)){c[a>>2]=d;c[e>>2]=h;break}else va()}else c[22913]=j&~(1<>2]=L|3;L=f+L+4|0;c[L>>2]=c[L>>2]|1;L=g;return L|0}h=c[22915]|0;if(o>>>0>h>>>0){if(b|0){d=2<>>12&16;d=d>>>i;f=d>>>5&8;d=d>>>f;g=d>>>2&4;d=d>>>g;e=d>>>1&2;d=d>>>e;b=d>>>1&1;b=(f|i|g|e|b)+(d>>>b)|0;d=91692+(b<<1<<2)|0;e=d+8|0;g=c[e>>2]|0;i=g+8|0;f=c[i>>2]|0;do if((d|0)!=(f|0)){if(f>>>0<(c[22917]|0)>>>0)va();a=f+12|0;if((c[a>>2]|0)==(g|0)){c[a>>2]=d;c[e>>2]=f;k=c[22915]|0;break}else va()}else{c[22913]=j&~(1<>2]=o|3;e=g+o|0;c[e+4>>2]=h|1;c[e+h>>2]=h;if(k|0){f=c[22918]|0;b=k>>>3;d=91692+(b<<1<<2)|0;a=c[22913]|0;b=1<>2]|0;if(b>>>0<(c[22917]|0)>>>0)va();else{l=a;m=b}}else{c[22913]=a|b;l=d+8|0;m=d}c[l>>2]=f;c[m+12>>2]=f;c[f+8>>2]=m;c[f+12>>2]=d}c[22915]=h;c[22918]=e;L=i;return L|0}a=c[22914]|0;if(a){d=(a&0-a)+-1|0;K=d>>>12&16;d=d>>>K;J=d>>>5&8;d=d>>>J;L=d>>>2&4;d=d>>>L;b=d>>>1&2;d=d>>>b;e=d>>>1&1;e=c[91956+((J|K|L|b|e)+(d>>>e)<<2)>>2]|0;d=(c[e+4>>2]&-8)-o|0;b=e;while(1){a=c[b+16>>2]|0;if(!a){a=c[b+20>>2]|0;if(!a){j=e;break}}b=(c[a+4>>2]&-8)-o|0;L=b>>>0>>0;d=L?b:d;b=a;e=L?a:e}g=c[22917]|0;if(j>>>0>>0)va();i=j+o|0;if(j>>>0>=i>>>0)va();h=c[j+24>>2]|0;e=c[j+12>>2]|0;do if((e|0)==(j|0)){b=j+20|0;a=c[b>>2]|0;if(!a){b=j+16|0;a=c[b>>2]|0;if(!a){n=0;break}}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;b=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;b=e}}if(b>>>0>>0)va();else{c[b>>2]=0;n=a;break}}else{f=c[j+8>>2]|0;if(f>>>0>>0)va();a=f+12|0;if((c[a>>2]|0)!=(j|0))va();b=e+8|0;if((c[b>>2]|0)==(j|0)){c[a>>2]=e;c[b>>2]=f;n=e;break}else va()}while(0);do if(h|0){a=c[j+28>>2]|0;b=91956+(a<<2)|0;if((j|0)==(c[b>>2]|0)){c[b>>2]=n;if(!n){c[22914]=c[22914]&~(1<>>0<(c[22917]|0)>>>0)va();a=h+16|0;if((c[a>>2]|0)==(j|0))c[a>>2]=n;else c[h+20>>2]=n;if(!n)break}b=c[22917]|0;if(n>>>0>>0)va();c[n+24>>2]=h;a=c[j+16>>2]|0;do if(a|0)if(a>>>0>>0)va();else{c[n+16>>2]=a;c[a+24>>2]=n;break}while(0);a=c[j+20>>2]|0;if(a|0)if(a>>>0<(c[22917]|0)>>>0)va();else{c[n+20>>2]=a;c[a+24>>2]=n;break}}while(0);if(d>>>0<16){L=d+o|0;c[j+4>>2]=L|3;L=j+L+4|0;c[L>>2]=c[L>>2]|1}else{c[j+4>>2]=o|3;c[i+4>>2]=d|1;c[i+d>>2]=d;a=c[22915]|0;if(a|0){f=c[22918]|0;b=a>>>3;e=91692+(b<<1<<2)|0;a=c[22913]|0;b=1<>2]|0;if(b>>>0<(c[22917]|0)>>>0)va();else{p=a;q=b}}else{c[22913]=a|b;p=e+8|0;q=e}c[p>>2]=f;c[q+12>>2]=f;c[f+8>>2]=q;c[f+12>>2]=e}c[22915]=d;c[22918]=i}L=j+8|0;return L|0}}}else if(a>>>0<=4294967231){a=a+11|0;o=a&-8;j=c[22914]|0;if(j){d=0-o|0;a=a>>>8;if(a)if(o>>>0>16777215)i=31;else{q=(a+1048320|0)>>>16&8;E=a<>>16&4;E=E<>>16&2;i=14-(p|q|i)+(E<>>15)|0;i=o>>>(i+7|0)&1|i<<1}else i=0;b=c[91956+(i<<2)>>2]|0;a:do if(!b){a=0;b=0;E=86}else{f=d;a=0;g=o<<((i|0)==31?0:25-(i>>>1)|0);h=b;b=0;while(1){e=c[h+4>>2]&-8;d=e-o|0;if(d>>>0>>0)if((e|0)==(o|0)){a=h;b=h;E=90;break a}else b=h;else d=f;e=c[h+20>>2]|0;h=c[h+16+(g>>>31<<2)>>2]|0;a=(e|0)==0|(e|0)==(h|0)?a:e;e=(h|0)==0;if(e){E=86;break}else{f=d;g=g<<(e&1^1)}}}while(0);if((E|0)==86){if((a|0)==0&(b|0)==0){a=2<>>12&16;q=q>>>m;l=q>>>5&8;q=q>>>l;n=q>>>2&4;q=q>>>n;p=q>>>1&2;q=q>>>p;a=q>>>1&1;a=c[91956+((l|m|n|p|a)+(q>>>a)<<2)>>2]|0}if(!a){i=d;j=b}else E=90}if((E|0)==90)while(1){E=0;q=(c[a+4>>2]&-8)-o|0;e=q>>>0>>0;d=e?q:d;b=e?a:b;e=c[a+16>>2]|0;if(e|0){a=e;E=90;continue}a=c[a+20>>2]|0;if(!a){i=d;j=b;break}else E=90}if((j|0)!=0?i>>>0<((c[22915]|0)-o|0)>>>0:0){f=c[22917]|0;if(j>>>0>>0)va();h=j+o|0;if(j>>>0>=h>>>0)va();g=c[j+24>>2]|0;d=c[j+12>>2]|0;do if((d|0)==(j|0)){b=j+20|0;a=c[b>>2]|0;if(!a){b=j+16|0;a=c[b>>2]|0;if(!a){s=0;break}}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}if(b>>>0>>0)va();else{c[b>>2]=0;s=a;break}}else{e=c[j+8>>2]|0;if(e>>>0>>0)va();a=e+12|0;if((c[a>>2]|0)!=(j|0))va();b=d+8|0;if((c[b>>2]|0)==(j|0)){c[a>>2]=d;c[b>>2]=e;s=d;break}else va()}while(0);do if(g|0){a=c[j+28>>2]|0;b=91956+(a<<2)|0;if((j|0)==(c[b>>2]|0)){c[b>>2]=s;if(!s){c[22914]=c[22914]&~(1<>>0<(c[22917]|0)>>>0)va();a=g+16|0;if((c[a>>2]|0)==(j|0))c[a>>2]=s;else c[g+20>>2]=s;if(!s)break}b=c[22917]|0;if(s>>>0>>0)va();c[s+24>>2]=g;a=c[j+16>>2]|0;do if(a|0)if(a>>>0>>0)va();else{c[s+16>>2]=a;c[a+24>>2]=s;break}while(0);a=c[j+20>>2]|0;if(a|0)if(a>>>0<(c[22917]|0)>>>0)va();else{c[s+20>>2]=a;c[a+24>>2]=s;break}}while(0);do if(i>>>0>=16){c[j+4>>2]=o|3;c[h+4>>2]=i|1;c[h+i>>2]=i;a=i>>>3;if(i>>>0<256){d=91692+(a<<1<<2)|0;b=c[22913]|0;a=1<>2]|0;if(b>>>0<(c[22917]|0)>>>0)va();else{u=a;v=b}}else{c[22913]=b|a;u=d+8|0;v=d}c[u>>2]=h;c[v+12>>2]=h;c[h+8>>2]=v;c[h+12>>2]=d;break}a=i>>>8;if(a)if(i>>>0>16777215)d=31;else{K=(a+1048320|0)>>>16&8;L=a<>>16&4;L=L<>>16&2;d=14-(J|K|d)+(L<>>15)|0;d=i>>>(d+7|0)&1|d<<1}else d=0;e=91956+(d<<2)|0;c[h+28>>2]=d;a=h+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[22914]|0;b=1<>2]=h;c[h+24>>2]=e;c[h+12>>2]=h;c[h+8>>2]=h;break}f=i<<((d|0)==31?0:25-(d>>>1)|0);a=c[e>>2]|0;while(1){if((c[a+4>>2]&-8|0)==(i|0)){d=a;E=148;break}b=a+16+(f>>>31<<2)|0;d=c[b>>2]|0;if(!d){E=145;break}else{f=f<<1;a=d}}if((E|0)==145)if(b>>>0<(c[22917]|0)>>>0)va();else{c[b>>2]=h;c[h+24>>2]=a;c[h+12>>2]=h;c[h+8>>2]=h;break}else if((E|0)==148){a=d+8|0;b=c[a>>2]|0;L=c[22917]|0;if(b>>>0>=L>>>0&d>>>0>=L>>>0){c[b+12>>2]=h;c[a>>2]=h;c[h+8>>2]=b;c[h+12>>2]=d;c[h+24>>2]=0;break}else va()}}else{L=i+o|0;c[j+4>>2]=L|3;L=j+L+4|0;c[L>>2]=c[L>>2]|1}while(0);L=j+8|0;return L|0}}}else o=-1;while(0);d=c[22915]|0;if(d>>>0>=o>>>0){a=d-o|0;b=c[22918]|0;if(a>>>0>15){L=b+o|0;c[22918]=L;c[22915]=a;c[L+4>>2]=a|1;c[L+a>>2]=a;c[b+4>>2]=o|3}else{c[22915]=0;c[22918]=0;c[b+4>>2]=d|3;L=b+d+4|0;c[L>>2]=c[L>>2]|1}L=b+8|0;return L|0}a=c[22916]|0;if(a>>>0>o>>>0){J=a-o|0;c[22916]=J;L=c[22919]|0;K=L+o|0;c[22919]=K;c[K+4>>2]=J|1;c[L+4>>2]=o|3;L=L+8|0;return L|0}do if(!(c[23031]|0)){a=Ma(30)|0;if(!(a+-1&a)){c[23033]=a;c[23032]=a;c[23034]=-1;c[23035]=-1;c[23036]=0;c[23024]=0;c[23031]=(gb(0)|0)&-16^1431655768;break}else va()}while(0);h=o+48|0;g=c[23033]|0;i=o+47|0;f=g+i|0;g=0-g|0;j=f&g;if(j>>>0<=o>>>0){L=0;return L|0}a=c[23023]|0;if(a|0?(u=c[23021]|0,v=u+j|0,v>>>0<=u>>>0|v>>>0>a>>>0):0){L=0;return L|0}b:do if(!(c[23024]&4)){a=c[22919]|0;c:do if(a){d=92100;while(1){b=c[d>>2]|0;if(b>>>0<=a>>>0?(r=d+4|0,(b+(c[r>>2]|0)|0)>>>0>a>>>0):0){e=d;d=r;break}d=c[d+8>>2]|0;if(!d){E=173;break c}}a=f-(c[22916]|0)&g;if(a>>>0<2147483647){b=Ga(a|0)|0;if((b|0)==((c[e>>2]|0)+(c[d>>2]|0)|0)){if((b|0)!=(-1|0)){h=b;f=a;E=193;break b}}else E=183}}else E=173;while(0);do if((E|0)==173?(t=Ga(0)|0,(t|0)!=(-1|0)):0){a=t;b=c[23032]|0;d=b+-1|0;if(!(d&a))a=j;else a=j-a+(d+a&0-b)|0;b=c[23021]|0;d=b+a|0;if(a>>>0>o>>>0&a>>>0<2147483647){v=c[23023]|0;if(v|0?d>>>0<=b>>>0|d>>>0>v>>>0:0)break;b=Ga(a|0)|0;if((b|0)==(t|0)){h=t;f=a;E=193;break b}else E=183}}while(0);d:do if((E|0)==183){d=0-a|0;do if(h>>>0>a>>>0&(a>>>0<2147483647&(b|0)!=(-1|0))?(w=c[23033]|0,w=i-a+w&0-w,w>>>0<2147483647):0)if((Ga(w|0)|0)==(-1|0)){Ga(d|0)|0;break d}else{a=w+a|0;break}while(0);if((b|0)!=(-1|0)){h=b;f=a;E=193;break b}}while(0);c[23024]=c[23024]|4;E=190}else E=190;while(0);if((((E|0)==190?j>>>0<2147483647:0)?(x=Ga(j|0)|0,y=Ga(0)|0,x>>>0>>0&((x|0)!=(-1|0)&(y|0)!=(-1|0))):0)?(z=y-x|0,z>>>0>(o+40|0)>>>0):0){h=x;f=z;E=193}if((E|0)==193){a=(c[23021]|0)+f|0;c[23021]=a;if(a>>>0>(c[23022]|0)>>>0)c[23022]=a;i=c[22919]|0;do if(i){e=92100;do{a=c[e>>2]|0;b=e+4|0;d=c[b>>2]|0;if((h|0)==(a+d|0)){A=a;B=b;C=d;D=e;E=203;break}e=c[e+8>>2]|0}while((e|0)!=0);if(((E|0)==203?(c[D+12>>2]&8|0)==0:0)?i>>>0>>0&i>>>0>=A>>>0:0){c[B>>2]=C+f;L=i+8|0;L=(L&7|0)==0?0:0-L&7;K=i+L|0;L=f-L+(c[22916]|0)|0;c[22919]=K;c[22916]=L;c[K+4>>2]=L|1;c[K+L+4>>2]=40;c[22920]=c[23035];break}a=c[22917]|0;if(h>>>0>>0){c[22917]=h;j=h}else j=a;d=h+f|0;a=92100;while(1){if((c[a>>2]|0)==(d|0)){b=a;E=211;break}a=c[a+8>>2]|0;if(!a){b=92100;break}}if((E|0)==211)if(!(c[a+12>>2]&8)){c[b>>2]=h;l=a+4|0;c[l>>2]=(c[l>>2]|0)+f;l=h+8|0;l=h+((l&7|0)==0?0:0-l&7)|0;a=d+8|0;a=d+((a&7|0)==0?0:0-a&7)|0;k=l+o|0;g=a-l-o|0;c[l+4>>2]=o|3;do if((a|0)!=(i|0)){if((a|0)==(c[22918]|0)){L=(c[22915]|0)+g|0;c[22915]=L;c[22918]=k;c[k+4>>2]=L|1;c[k+L>>2]=L;break}b=c[a+4>>2]|0;if((b&3|0)==1){i=b&-8;f=b>>>3;e:do if(b>>>0>=256){h=c[a+24>>2]|0;e=c[a+12>>2]|0;do if((e|0)==(a|0)){d=a+16|0;e=d+4|0;b=c[e>>2]|0;if(!b){b=c[d>>2]|0;if(!b){J=0;break}}else d=e;while(1){e=b+20|0;f=c[e>>2]|0;if(f|0){b=f;d=e;continue}e=b+16|0;f=c[e>>2]|0;if(!f)break;else{b=f;d=e}}if(d>>>0>>0)va();else{c[d>>2]=0;J=b;break}}else{f=c[a+8>>2]|0;if(f>>>0>>0)va();b=f+12|0;if((c[b>>2]|0)!=(a|0))va();d=e+8|0;if((c[d>>2]|0)==(a|0)){c[b>>2]=e;c[d>>2]=f;J=e;break}else va()}while(0);if(!h)break;b=c[a+28>>2]|0;d=91956+(b<<2)|0;do if((a|0)!=(c[d>>2]|0)){if(h>>>0<(c[22917]|0)>>>0)va();b=h+16|0;if((c[b>>2]|0)==(a|0))c[b>>2]=J;else c[h+20>>2]=J;if(!J)break e}else{c[d>>2]=J;if(J|0)break;c[22914]=c[22914]&~(1<>>0>>0)va();c[J+24>>2]=h;b=a+16|0;d=c[b>>2]|0;do if(d|0)if(d>>>0>>0)va();else{c[J+16>>2]=d;c[d+24>>2]=J;break}while(0);b=c[b+4>>2]|0;if(!b)break;if(b>>>0<(c[22917]|0)>>>0)va();else{c[J+20>>2]=b;c[b+24>>2]=J;break}}else{d=c[a+8>>2]|0;e=c[a+12>>2]|0;b=91692+(f<<1<<2)|0;do if((d|0)!=(b|0)){if(d>>>0>>0)va();if((c[d+12>>2]|0)==(a|0))break;va()}while(0);if((e|0)==(d|0)){c[22913]=c[22913]&~(1<>>0>>0)va();b=e+8|0;if((c[b>>2]|0)==(a|0)){G=b;break}va()}while(0);c[d+12>>2]=e;c[G>>2]=d}while(0);a=a+i|0;g=i+g|0}a=a+4|0;c[a>>2]=c[a>>2]&-2;c[k+4>>2]=g|1;c[k+g>>2]=g;a=g>>>3;if(g>>>0<256){d=91692+(a<<1<<2)|0;b=c[22913]|0;a=1<>2]|0;if(b>>>0>=(c[22917]|0)>>>0){K=a;L=b;break}va()}while(0);c[K>>2]=k;c[L+12>>2]=k;c[k+8>>2]=L;c[k+12>>2]=d;break}a=g>>>8;do if(!a)d=0;else{if(g>>>0>16777215){d=31;break}K=(a+1048320|0)>>>16&8;L=a<>>16&4;L=L<>>16&2;d=14-(J|K|d)+(L<>>15)|0;d=g>>>(d+7|0)&1|d<<1}while(0);e=91956+(d<<2)|0;c[k+28>>2]=d;a=k+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[22914]|0;b=1<>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}f=g<<((d|0)==31?0:25-(d>>>1)|0);a=c[e>>2]|0;while(1){if((c[a+4>>2]&-8|0)==(g|0)){d=a;E=281;break}b=a+16+(f>>>31<<2)|0;d=c[b>>2]|0;if(!d){E=278;break}else{f=f<<1;a=d}}if((E|0)==278)if(b>>>0<(c[22917]|0)>>>0)va();else{c[b>>2]=k;c[k+24>>2]=a;c[k+12>>2]=k;c[k+8>>2]=k;break}else if((E|0)==281){a=d+8|0;b=c[a>>2]|0;L=c[22917]|0;if(b>>>0>=L>>>0&d>>>0>=L>>>0){c[b+12>>2]=k;c[a>>2]=k;c[k+8>>2]=b;c[k+12>>2]=d;c[k+24>>2]=0;break}else va()}}else{L=(c[22916]|0)+g|0;c[22916]=L;c[22919]=k;c[k+4>>2]=L|1}while(0);L=l+8|0;return L|0}else b=92100;while(1){a=c[b>>2]|0;if(a>>>0<=i>>>0?(F=a+(c[b+4>>2]|0)|0,F>>>0>i>>>0):0){b=F;break}b=c[b+8>>2]|0}g=b+-47|0;d=g+8|0;d=g+((d&7|0)==0?0:0-d&7)|0;g=i+16|0;d=d>>>0>>0?i:d;a=d+8|0;e=h+8|0;e=(e&7|0)==0?0:0-e&7;L=h+e|0;e=f+-40-e|0;c[22919]=L;c[22916]=e;c[L+4>>2]=e|1;c[L+e+4>>2]=40;c[22920]=c[23035];e=d+4|0;c[e>>2]=27;c[a>>2]=c[23025];c[a+4>>2]=c[23026];c[a+8>>2]=c[23027];c[a+12>>2]=c[23028];c[23025]=h;c[23026]=f;c[23028]=0;c[23027]=a;a=d+24|0;do{a=a+4|0;c[a>>2]=7}while((a+4|0)>>>0>>0);if((d|0)!=(i|0)){h=d-i|0;c[e>>2]=c[e>>2]&-2;c[i+4>>2]=h|1;c[d>>2]=h;a=h>>>3;if(h>>>0<256){d=91692+(a<<1<<2)|0;b=c[22913]|0;a=1<>2]|0;if(b>>>0<(c[22917]|0)>>>0)va();else{H=a;I=b}}else{c[22913]=b|a;H=d+8|0;I=d}c[H>>2]=i;c[I+12>>2]=i;c[i+8>>2]=I;c[i+12>>2]=d;break}a=h>>>8;if(a)if(h>>>0>16777215)d=31;else{K=(a+1048320|0)>>>16&8;L=a<>>16&4;L=L<>>16&2;d=14-(J|K|d)+(L<>>15)|0;d=h>>>(d+7|0)&1|d<<1}else d=0;f=91956+(d<<2)|0;c[i+28>>2]=d;c[i+20>>2]=0;c[g>>2]=0;a=c[22914]|0;b=1<>2]=i;c[i+24>>2]=f;c[i+12>>2]=i;c[i+8>>2]=i;break}e=h<<((d|0)==31?0:25-(d>>>1)|0);a=c[f>>2]|0;while(1){if((c[a+4>>2]&-8|0)==(h|0)){d=a;E=307;break}b=a+16+(e>>>31<<2)|0;d=c[b>>2]|0;if(!d){E=304;break}else{e=e<<1;a=d}}if((E|0)==304)if(b>>>0<(c[22917]|0)>>>0)va();else{c[b>>2]=i;c[i+24>>2]=a;c[i+12>>2]=i;c[i+8>>2]=i;break}else if((E|0)==307){a=d+8|0;b=c[a>>2]|0;L=c[22917]|0;if(b>>>0>=L>>>0&d>>>0>=L>>>0){c[b+12>>2]=i;c[a>>2]=i;c[i+8>>2]=b;c[i+12>>2]=d;c[i+24>>2]=0;break}else va()}}}else{L=c[22917]|0;if((L|0)==0|h>>>0>>0)c[22917]=h;c[23025]=h;c[23026]=f;c[23028]=0;c[22922]=c[23031];c[22921]=-1;a=0;do{L=91692+(a<<1<<2)|0;c[L+12>>2]=L;c[L+8>>2]=L;a=a+1|0}while((a|0)!=32);L=h+8|0;L=(L&7|0)==0?0:0-L&7;K=h+L|0;L=f+-40-L|0;c[22919]=K;c[22916]=L;c[K+4>>2]=L|1;c[K+L+4>>2]=40;c[22920]=c[23035]}while(0);a=c[22916]|0;if(a>>>0>o>>>0){J=a-o|0;c[22916]=J;L=c[22919]|0;K=L+o|0;c[22919]=K;c[K+4>>2]=J|1;c[L+4>>2]=o|3;L=L+8|0;return L|0}}c[(Wo()|0)>>2]=12;L=0;return L|0}function Cq(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if(!a)return;d=a+-8|0;h=c[22917]|0;if(d>>>0>>0)va();a=c[a+-4>>2]|0;b=a&3;if((b|0)==1)va();e=a&-8;m=d+e|0;do if(!(a&1)){a=c[d>>2]|0;if(!b)return;k=d+(0-a)|0;j=a+e|0;if(k>>>0>>0)va();if((k|0)==(c[22918]|0)){a=m+4|0;b=c[a>>2]|0;if((b&3|0)!=3){q=k;g=j;break}c[22915]=j;c[a>>2]=b&-2;c[k+4>>2]=j|1;c[k+j>>2]=j;return}e=a>>>3;if(a>>>0<256){b=c[k+8>>2]|0;d=c[k+12>>2]|0;a=91692+(e<<1<<2)|0;if((b|0)!=(a|0)){if(b>>>0>>0)va();if((c[b+12>>2]|0)!=(k|0))va()}if((d|0)==(b|0)){c[22913]=c[22913]&~(1<>>0>>0)va();a=d+8|0;if((c[a>>2]|0)==(k|0))f=a;else va()}else f=d+8|0;c[b+12>>2]=d;c[f>>2]=b;q=k;g=j;break}f=c[k+24>>2]|0;d=c[k+12>>2]|0;do if((d|0)==(k|0)){b=k+16|0;d=b+4|0;a=c[d>>2]|0;if(!a){a=c[b>>2]|0;if(!a){i=0;break}}else b=d;while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}if(b>>>0>>0)va();else{c[b>>2]=0;i=a;break}}else{e=c[k+8>>2]|0;if(e>>>0>>0)va();a=e+12|0;if((c[a>>2]|0)!=(k|0))va();b=d+8|0;if((c[b>>2]|0)==(k|0)){c[a>>2]=d;c[b>>2]=e;i=d;break}else va()}while(0);if(f){a=c[k+28>>2]|0;b=91956+(a<<2)|0;if((k|0)==(c[b>>2]|0)){c[b>>2]=i;if(!i){c[22914]=c[22914]&~(1<>>0<(c[22917]|0)>>>0)va();a=f+16|0;if((c[a>>2]|0)==(k|0))c[a>>2]=i;else c[f+20>>2]=i;if(!i){q=k;g=j;break}}d=c[22917]|0;if(i>>>0>>0)va();c[i+24>>2]=f;a=k+16|0;b=c[a>>2]|0;do if(b|0)if(b>>>0>>0)va();else{c[i+16>>2]=b;c[b+24>>2]=i;break}while(0);a=c[a+4>>2]|0;if(a)if(a>>>0<(c[22917]|0)>>>0)va();else{c[i+20>>2]=a;c[a+24>>2]=i;q=k;g=j;break}else{q=k;g=j}}else{q=k;g=j}}else{q=d;g=e}while(0);if(q>>>0>=m>>>0)va();a=m+4|0;b=c[a>>2]|0;if(!(b&1))va();if(!(b&2)){if((m|0)==(c[22919]|0)){p=(c[22916]|0)+g|0;c[22916]=p;c[22919]=q;c[q+4>>2]=p|1;if((q|0)!=(c[22918]|0))return;c[22918]=0;c[22915]=0;return}if((m|0)==(c[22918]|0)){p=(c[22915]|0)+g|0;c[22915]=p;c[22918]=q;c[q+4>>2]=p|1;c[q+p>>2]=p;return}g=(b&-8)+g|0;e=b>>>3;do if(b>>>0>=256){f=c[m+24>>2]|0;a=c[m+12>>2]|0;do if((a|0)==(m|0)){b=m+16|0;d=b+4|0;a=c[d>>2]|0;if(!a){a=c[b>>2]|0;if(!a){n=0;break}}else b=d;while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}if(b>>>0<(c[22917]|0)>>>0)va();else{c[b>>2]=0;n=a;break}}else{b=c[m+8>>2]|0;if(b>>>0<(c[22917]|0)>>>0)va();d=b+12|0;if((c[d>>2]|0)!=(m|0))va();e=a+8|0;if((c[e>>2]|0)==(m|0)){c[d>>2]=a;c[e>>2]=b;n=a;break}else va()}while(0);if(f|0){a=c[m+28>>2]|0;b=91956+(a<<2)|0;if((m|0)==(c[b>>2]|0)){c[b>>2]=n;if(!n){c[22914]=c[22914]&~(1<>>0<(c[22917]|0)>>>0)va();a=f+16|0;if((c[a>>2]|0)==(m|0))c[a>>2]=n;else c[f+20>>2]=n;if(!n)break}d=c[22917]|0;if(n>>>0>>0)va();c[n+24>>2]=f;a=m+16|0;b=c[a>>2]|0;do if(b|0)if(b>>>0>>0)va();else{c[n+16>>2]=b;c[b+24>>2]=n;break}while(0);a=c[a+4>>2]|0;if(a|0)if(a>>>0<(c[22917]|0)>>>0)va();else{c[n+20>>2]=a;c[a+24>>2]=n;break}}}else{b=c[m+8>>2]|0;d=c[m+12>>2]|0;a=91692+(e<<1<<2)|0;if((b|0)!=(a|0)){if(b>>>0<(c[22917]|0)>>>0)va();if((c[b+12>>2]|0)!=(m|0))va()}if((d|0)==(b|0)){c[22913]=c[22913]&~(1<>>0<(c[22917]|0)>>>0)va();a=d+8|0;if((c[a>>2]|0)==(m|0))l=a;else va()}else l=d+8|0;c[b+12>>2]=d;c[l>>2]=b}while(0);c[q+4>>2]=g|1;c[q+g>>2]=g;if((q|0)==(c[22918]|0)){c[22915]=g;return}}else{c[a>>2]=b&-2;c[q+4>>2]=g|1;c[q+g>>2]=g}a=g>>>3;if(g>>>0<256){d=91692+(a<<1<<2)|0;b=c[22913]|0;a=1<>2]|0;if(b>>>0<(c[22917]|0)>>>0)va();else{o=a;p=b}}else{c[22913]=b|a;o=d+8|0;p=d}c[o>>2]=q;c[p+12>>2]=q;c[q+8>>2]=p;c[q+12>>2]=d;return}a=g>>>8;if(a)if(g>>>0>16777215)d=31;else{o=(a+1048320|0)>>>16&8;p=a<>>16&4;p=p<>>16&2;d=14-(n|o|d)+(p<>>15)|0;d=g>>>(d+7|0)&1|d<<1}else d=0;e=91956+(d<<2)|0;c[q+28>>2]=d;c[q+20>>2]=0;c[q+16>>2]=0;a=c[22914]|0;b=1<>>1)|0);a=c[e>>2]|0;while(1){if((c[a+4>>2]&-8|0)==(g|0)){d=a;e=130;break}b=a+16+(f>>>31<<2)|0;d=c[b>>2]|0;if(!d){e=127;break}else{f=f<<1;a=d}}if((e|0)==127)if(b>>>0<(c[22917]|0)>>>0)va();else{c[b>>2]=q;c[q+24>>2]=a;c[q+12>>2]=q;c[q+8>>2]=q;break}else if((e|0)==130){a=d+8|0;b=c[a>>2]|0;p=c[22917]|0;if(b>>>0>=p>>>0&d>>>0>=p>>>0){c[b+12>>2]=q;c[a>>2]=q;c[q+8>>2]=b;c[q+12>>2]=d;c[q+24>>2]=0;break}else va()}}else{c[22914]=a|b;c[e>>2]=q;c[q+24>>2]=e;c[q+12>>2]=q;c[q+8>>2]=q}while(0);q=(c[22921]|0)+-1|0;c[22921]=q;if(!q)a=92108;else return;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[22921]=-1;return}function Dq(a,b){a=a|0;b=b|0;var d=0;if(a){d=_(b,a)|0;if((b|a)>>>0>65535)d=((d>>>0)/(a>>>0)|0|0)==(b|0)?d:-1}else d=0;b=Bq(d)|0;if(!b)return b|0;if(!(c[b+-4>>2]&3))return b|0;er(b|0,0,d|0)|0;return b|0}function Eq(a){a=a|0;return}function Fq(a){a=a|0;return}function Gq(a){a=a|0;Hq(a);return}function Hq(a){a=a|0;Cq(a);return}function Iq(a){a=a|0;return}function Jq(a){a=a|0;return}function Kq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+64|0;g=h;if((a|0)!=(b|0))if((b|0)!=0?(f=Lq(b,8032,8e3,0)|0,(f|0)!=0):0){b=g;e=b+56|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));c[g>>2]=f;c[g+8>>2]=a;c[g+12>>2]=-1;c[g+48>>2]=1;vb[c[(c[f>>2]|0)+28>>2]&3](f,g,c[d>>2]|0,1);if((c[g+24>>2]|0)==1){c[d>>2]=c[g+16>>2];b=1}else b=0}else b=0;else b=1;i=h;return b|0}function Lq(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+64|0;q=r;p=c[d>>2]|0;o=d+(c[p+-8>>2]|0)|0;p=c[p+-4>>2]|0;c[q>>2]=f;c[q+4>>2]=d;c[q+8>>2]=e;c[q+12>>2]=g;l=q+16|0;g=q+20|0;d=q+24|0;e=q+28|0;h=q+32|0;j=q+40|0;k=(p|0)==(f|0);m=l;n=m+36|0;do{c[m>>2]=0;m=m+4|0}while((m|0)<(n|0));b[l+36>>1]=0;a[l+38>>0]=0;a:do if(k){c[q+48>>2]=1;tb[c[(c[f>>2]|0)+20>>2]&3](f,q,o,o,1,0);g=(c[d>>2]|0)==1?o:0}else{nb[c[(c[p>>2]|0)+24>>2]&3](p,q,o,1,0);switch(c[q+36>>2]|0){case 0:{g=(c[j>>2]|0)==1&(c[e>>2]|0)==1&(c[h>>2]|0)==1?c[g>>2]|0:0;break a}case 1:break;default:{g=0;break a}}if((c[d>>2]|0)!=1?!((c[j>>2]|0)==0&(c[e>>2]|0)==1&(c[h>>2]|0)==1):0){g=0;break}g=c[l>>2]|0}while(0);i=r;return g|0}function Mq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if((a|0)==(c[b+8>>2]|0))Nq(0,b,d,e,f);else{a=c[a+8>>2]|0;tb[c[(c[a>>2]|0)+20>>2]&3](a,b,d,e,f,g)}return}function Nq(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;a[d+53>>0]=1;do if((c[d+4>>2]|0)==(f|0)){a[d+52>>0]=1;f=d+16|0;b=c[f>>2]|0;if(!b){c[f>>2]=e;c[d+24>>2]=g;c[d+36>>2]=1;if(!((g|0)==1?(c[d+48>>2]|0)==1:0))break;a[d+54>>0]=1;break}if((b|0)!=(e|0)){g=d+36|0;c[g>>2]=(c[g>>2]|0)+1;a[d+54>>0]=1;break}b=d+24|0;f=c[b>>2]|0;if((f|0)==2){c[b>>2]=g;f=g}if((f|0)==1?(c[d+48>>2]|0)==1:0)a[d+54>>0]=1}while(0);return}function Oq(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;do if((b|0)==(c[d+8>>2]|0)){if((c[d+4>>2]|0)==(e|0)?(h=d+28|0,(c[h>>2]|0)!=1):0)c[h>>2]=f}else{if((b|0)!=(c[d>>2]|0)){j=c[b+8>>2]|0;nb[c[(c[j>>2]|0)+24>>2]&3](j,d,e,f,g);break}if((c[d+16>>2]|0)!=(e|0)?(j=d+20|0,(c[j>>2]|0)!=(e|0)):0){c[d+32>>2]=f;i=d+44|0;if((c[i>>2]|0)==4)break;h=d+52|0;a[h>>0]=0;f=d+53|0;a[f>>0]=0;b=c[b+8>>2]|0;tb[c[(c[b>>2]|0)+20>>2]&3](b,d,e,e,1,g);if(a[f>>0]|0)if(!(a[h>>0]|0)){h=1;f=13}else f=17;else{h=0;f=13}do if((f|0)==13){c[j>>2]=e;e=d+40|0;c[e>>2]=(c[e>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0){a[d+54>>0]=1;if(h){f=17;break}else{h=4;break}}if(h)f=17;else h=4}while(0);if((f|0)==17)h=3;c[i>>2]=h;break}if((f|0)==1)c[d+32>>2]=1}while(0);return}function Pq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if((a|0)==(c[b+8>>2]|0))Qq(0,b,d,e);else{a=c[a+8>>2]|0;vb[c[(c[a>>2]|0)+28>>2]&3](a,b,d,e)}return}function Qq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;b=d+16|0;g=c[b>>2]|0;do if(g){if((g|0)!=(e|0)){f=d+36|0;c[f>>2]=(c[f>>2]|0)+1;c[d+24>>2]=2;a[d+54>>0]=1;break}b=d+24|0;if((c[b>>2]|0)==2)c[b>>2]=f}else{c[b>>2]=e;c[d+24>>2]=f;c[d+36>>2]=1}while(0);return}function Rq(a){a=a|0;Hq(a);return}function Sq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if((a|0)==(c[b+8>>2]|0))Nq(0,b,d,e,f);return}function Tq(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;do if((b|0)==(c[d+8>>2]|0)){if((c[d+4>>2]|0)==(e|0)?(i=d+28|0,(c[i>>2]|0)!=1):0)c[i>>2]=f}else if((b|0)==(c[d>>2]|0)){if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;c[h>>2]=e;g=d+40|0;c[g>>2]=(c[g>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1;c[d+44>>2]=4;break}if((f|0)==1)c[d+32>>2]=1}while(0);return}function Uq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if((a|0)==(c[b+8>>2]|0))Qq(0,b,d,e);return}function Vq(a){a=a|0;Hq(a);return}function Wq(a,b,c){a=a|0;b=b|0;c=c|0;return (a|0)==(b|0)|0}function Xq(a){a=a|0;Hq(a);return}function Yq(d,e,f,g,h,i){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;if((d|0)==(c[e+8>>2]|0))Nq(0,e,f,g,h);else{o=e+52|0;r=b[o>>1]|0;p=r&255;q=e+53|0;r=(r&65535)>>>8&255;n=c[d+12>>2]|0;k=d+16+(n<<3)|0;a[o>>0]=0;a[q>>0]=0;Zq(d+16|0,e,f,g,h,i);a:do if((n|0)>1){l=e+24|0;m=d+8|0;n=e+54|0;j=d+24|0;do{if(a[n>>0]|0)break a;d=b[o>>1]|0;if(!((d&255)<<24>>24)){if((d&65535)>=256?(c[m>>2]&1|0)==0:0)break a}else{if((c[l>>2]|0)==1)break a;if(!(c[m>>2]&2))break a}a[o>>0]=0;a[q>>0]=0;Zq(j,e,f,g,h,i);j=j+8|0}while(j>>>0>>0)}while(0);a[o>>0]=p;a[q>>0]=r}return}function Zq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=c[a+4>>2]|0;h=i>>8;if(i&1)h=c[(c[e>>2]|0)+h>>2]|0;a=c[a>>2]|0;tb[c[(c[a>>2]|0)+20>>2]&3](a,b,d,e+h|0,i&2|0?f:2,g);return}function _q(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;a:do if((b|0)==(c[d+8>>2]|0)){if((c[d+4>>2]|0)==(e|0)?(h=d+28|0,(c[h>>2]|0)!=1):0)c[h>>2]=f}else{if((b|0)!=(c[d>>2]|0)){p=c[b+12>>2]|0;j=b+16+(p<<3)|0;$q(b+16|0,d,e,f,g);h=b+24|0;if((p|0)<=1)break;i=c[b+8>>2]|0;if((i&2|0)==0?(k=d+36|0,(c[k>>2]|0)!=1):0){if(!(i&1)){i=d+54|0;while(1){if(a[i>>0]|0)break a;if((c[k>>2]|0)==1)break a;$q(h,d,e,f,g);h=h+8|0;if(h>>>0>=j>>>0)break a}}i=d+24|0;b=d+54|0;while(1){if(a[b>>0]|0)break a;if((c[k>>2]|0)==1?(c[i>>2]|0)==1:0)break a;$q(h,d,e,f,g);h=h+8|0;if(h>>>0>=j>>>0)break a}}i=d+54|0;while(1){if(a[i>>0]|0)break a;$q(h,d,e,f,g);h=h+8|0;if(h>>>0>=j>>>0)break a}}if((c[d+16>>2]|0)!=(e|0)?(p=d+20|0,(c[p>>2]|0)!=(e|0)):0){c[d+32>>2]=f;o=d+44|0;if((c[o>>2]|0)==4)break;j=b+16+(c[b+12>>2]<<3)|0;k=d+52|0;f=d+53|0;m=d+54|0;l=b+8|0;n=d+24|0;i=0;h=0;b=b+16|0;b:while(1){if(b>>>0>=j>>>0){b=20;break}a[k>>0]=0;a[f>>0]=0;Zq(b,d,e,e,1,g);if(a[m>>0]|0){b=20;break}do if(a[f>>0]|0){if(!(a[k>>0]|0))if(!(c[l>>2]&1)){h=1;b=20;break b}else{h=1;break}if((c[n>>2]|0)==1){b=25;break b}if(!(c[l>>2]&2)){b=25;break b}else{i=1;h=1}}while(0);b=b+8|0}do if((b|0)==20){if((!i?(c[p>>2]=e,e=d+40|0,c[e>>2]=(c[e>>2]|0)+1,(c[d+36>>2]|0)==1):0)?(c[n>>2]|0)==2:0){a[m>>0]=1;if(h){b=25;break}else{h=4;break}}if(h)b=25;else h=4}while(0);if((b|0)==25)h=3;c[o>>2]=h;break}if((f|0)==1)c[d+32>>2]=1}while(0);return}function $q(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=c[a+4>>2]|0;g=h>>8;if(h&1)g=c[(c[d>>2]|0)+g>>2]|0;a=c[a>>2]|0;nb[c[(c[a>>2]|0)+24>>2]&3](a,b,d+g|0,h&2|0?e:2,f);return}function ar(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do if((b|0)!=(c[d+8>>2]|0)){h=c[b+12>>2]|0;g=b+16+(h<<3)|0;br(b+16|0,d,e,f);if((h|0)>1){h=d+54|0;b=b+24|0;do{br(b,d,e,f);if(a[h>>0]|0)break a;b=b+8|0}while(b>>>0>>0)}}else Qq(0,d,e,f);while(0);return}function br(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=c[a+4>>2]|0;f=g>>8;if(g&1)f=c[(c[d>>2]|0)+f>>2]|0;a=c[a>>2]|0;vb[c[(c[a>>2]|0)+28>>2]&3](a,b,d+f|0,g&2|0?e:2);return}function cr(){}function dr(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=b-d-(c>>>0>a>>>0|0)>>>0;return (C=d,a-c>>>0|0)|0}function er(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=b+e|0;if((e|0)>=20){d=d&255;h=b&3;i=d|d<<8|d<<16|d<<24;g=f&~3;if(h){h=b+4-h|0;while((b|0)<(h|0)){a[b>>0]=d;b=b+1|0}}while((b|0)<(g|0)){c[b>>2]=i;b=b+4|0}}while((b|0)<(f|0)){a[b>>0]=d;b=b+1|0}return b-e|0}function fr(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){C=b<>>32-c;return a<>>0;return (C=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function hr(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){C=b>>>c;return a>>>c|(b&(1<>>c-32|0}function ir(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;if((e|0)>=4096)return Ia(b|0,d|0,e|0)|0;f=b|0;if((b&3)==(d&3)){while(b&3){if(!e)return f|0;a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}while((e|0)>=4){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0;e=e-4|0}}while((e|0)>0){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}return f|0}function jr(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if((c|0)<(b|0)&(b|0)<(c+d|0)){e=b;c=c+d|0;b=b+d|0;while((d|0)>0){b=b-1|0;c=c-1|0;d=d-1|0;a[b>>0]=a[c>>0]|0}b=e}else ir(b,c,d)|0;return b|0}function kr(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){C=b>>c;return a>>>c|(b&(1<>c-32|0}function lr(b){b=b|0;var c=0;c=a[m+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[m+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[m+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[m+(b>>>24)>>0]|0)+24|0}function mr(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=_(e,f)|0;d=a>>>16;a=(c>>>16)+(_(e,d)|0)|0;e=b>>>16;b=_(e,f)|0;return (C=(a>>>16)+(_(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function nr(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=b>>31|((b|0)<0?-1:0)<<1;i=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;f=d>>31|((d|0)<0?-1:0)<<1;e=((d|0)<0?-1:0)>>31|((d|0)<0?-1:0)<<1;h=dr(j^a|0,i^b|0,j|0,i|0)|0;g=C;a=f^j;b=e^i;return dr((sr(h,g,dr(f^c|0,e^d|0,f|0,e|0)|0,C,0)|0)^a|0,C^b|0,a|0,b|0)|0}function or(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;f=i;i=i+16|0;j=f|0;h=b>>31|((b|0)<0?-1:0)<<1;g=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;l=e>>31|((e|0)<0?-1:0)<<1;k=((e|0)<0?-1:0)>>31|((e|0)<0?-1:0)<<1;a=dr(h^a|0,g^b|0,h|0,g|0)|0;b=C;sr(a,b,dr(l^d|0,k^e|0,l|0,k|0)|0,C,j)|0;e=dr(c[j>>2]^h|0,c[j+4>>2]^g|0,h|0,g|0)|0;d=C;i=f;return (C=d,e)|0}function pr(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;f=c;c=mr(e,f)|0;a=C;return (C=(_(b,f)|0)+(_(d,e)|0)+a|a&0,c|0|0)|0}function qr(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return sr(a,b,c,d,0)|0}function rr(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=i;i=i+16|0;f=g|0;sr(a,b,d,e,f)|0;i=g;return (C=c[f+4>>2]|0,c[f>>2]|0)|0}function sr(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=a;j=b;k=j;h=d;n=e;i=n;if(!k){g=(f|0)!=0;if(!i){if(g){c[f>>2]=(l>>>0)%(h>>>0);c[f+4>>2]=0}n=0;f=(l>>>0)/(h>>>0)>>>0;return (C=n,f)|0}else{if(!g){n=0;f=0;return (C=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (C=n,f)|0}}g=(i|0)==0;do if(h){if(!g){g=(aa(i|0)|0)-(aa(k|0)|0)|0;if(g>>>0<=31){m=g+1|0;i=31-g|0;b=g-31>>31;h=m;a=l>>>(m>>>0)&b|k<>>(m>>>0)&b;g=0;i=l<>2]=a|0;c[f+4>>2]=j|b&0;n=0;f=0;return (C=n,f)|0}g=h-1|0;if(g&h|0){i=(aa(h|0)|0)+33-(aa(k|0)|0)|0;p=64-i|0;m=32-i|0;j=m>>31;o=i-32|0;b=o>>31;h=i;a=m-1>>31&k>>>(o>>>0)|(k<>>(i>>>0))&b;b=b&k>>>(i>>>0);g=l<>>(o>>>0))&j|l<>31;break}if(f|0){c[f>>2]=g&l;c[f+4>>2]=0}if((h|0)==1){o=j|b&0;p=a|0|0;return (C=o,p)|0}else{p=lr(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (C=o,p)|0}}else{if(g){if(f|0){c[f>>2]=(k>>>0)%(h>>>0);c[f+4>>2]=0}o=0;p=(k>>>0)/(h>>>0)>>>0;return (C=o,p)|0}if(!l){if(f|0){c[f>>2]=0;c[f+4>>2]=(k>>>0)%(i>>>0)}o=0;p=(k>>>0)/(i>>>0)>>>0;return (C=o,p)|0}g=i-1|0;if(!(g&i)){if(f|0){c[f>>2]=a|0;c[f+4>>2]=g&k|b&0}o=0;p=k>>>((lr(i|0)|0)>>>0);return (C=o,p)|0}g=(aa(i|0)|0)-(aa(k|0)|0)|0;if(g>>>0<=30){b=g+1|0;i=31-g|0;h=b;a=k<>>(b>>>0);b=k>>>(b>>>0);g=0;i=l<>2]=a|0;c[f+4>>2]=j|b&0;o=0;p=0;return (C=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=gr(m|0,l|0,-1,-1)|0;d=C;j=i;i=0;do{e=j;j=g>>>31|j<<1;g=i|g<<1;e=a<<1|e>>>31|0;n=a>>>31|b<<1|0;dr(k|0,d|0,e|0,n|0)|0;p=C;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=dr(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=C;h=h-1|0}while((h|0)!=0);k=j;j=0}h=0;if(f|0){c[f>>2]=a;c[f+4>>2]=b}o=(g|0)>>>31|(k|h)<<1|(h<<1|g>>>31)&0|j;p=(g<<1|0>>>31)&-2|i;return (C=o,p)|0}function tr(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return lb[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function ur(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return mb[a&31](b|0,c|0,d|0)|0}function vr(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;nb[a&3](b|0,c|0,d|0,e|0,f|0)}function wr(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;return ob[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0,n|0,o|0,p|0,q|0)|0}function xr(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;return pb[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0,n|0,o|0,p|0,q|0,r|0)|0}function yr(a,b){a=a|0;b=b|0;return qb[a&1](b|0)|0}function zr(a,b){a=a|0;b=b|0;rb[a&15](b|0)}function Ar(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return sb[a&3](b|0,c|0,d|0,e|0)|0}function Br(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;tb[a&3](b|0,c|0,d|0,e|0,f|0,g|0)}function Cr(a,b,c){a=a|0;b=b|0;c=c|0;return ub[a&15](b|0,c|0)|0}function Dr(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;vb[a&3](b|0,c|0,d|0,e|0)}function Er(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;ba(0);return 0}function Fr(a,b,c){a=a|0;b=b|0;c=c|0;ba(1);return 0}function Gr(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;ba(2)}function Hr(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;ba(3);return 0}function Ir(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;ba(4);return 0}function Jr(a){a=a|0;ba(5);return 0}function Kr(a){a=a|0;ba(6)}function Lr(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ba(7);return 0}function Mr(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;ba(8)}function Nr(a,b){a=a|0;b=b|0;ba(9);return 0}function Or(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ba(10)} -function tg(a,b,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;D=(j|0)!=0;y=D?b:0;z=d+8|0;A=c[z>>2]|0;B=(f|0)==0;C=(f|2|0)==3;x=D&(k|0)!=0;v=(i|0)!=0;w=v?12844:81769;s=(l|0)==0;p=0;i=1;t=0;l=0;m=0;q=0;o=0;n=0;r=0;while(1){if((t|0)>(h|0))break;do if((t|0)<(h|0)){j=a+(t*24|0)|0;a:do if(B){u=c[a+(t*24|0)+4>>2]|0;if((u|0?c[u+12>>2]|0:0)?(c[u+32>>2]|0)==0:0){j=1;u=34;break}j=c[j>>2]|0;if((j|0)!=0?(c[j+12>>2]|0)!=0:0)j=(c[j+32>>2]|0)==0;else j=0;j=(j^1)<<31>>31;u=33}else{if(C){u=c[a+(t*24|0)+4>>2]|0;if(u|0?c[u+12>>2]|0:0){j=1;u=34;break}j=c[j>>2]|0;if(!j)j=0;else j=(c[j+12>>2]|0)!=0;j=(j^1)<<31>>31;u=33;break}switch(f|0){case 4:{k=c[j>>2]|0;if((k|0?c[k+12>>2]|0:0)?(c[k+32>>2]|0)==0:0){j=0;u=34;break a}j=c[a+(t*24|0)+4>>2]|0;if(!j){b=0;break a}if(!(c[j+12>>2]|0)){b=0;break a}if(!(c[j+32>>2]|0)){j=1;u=34;break a}else{b=0;break a}}case 2:break;default:{b=0;break a}}u=c[a+(t*24|0)+4>>2]|0;if(((((u|0)!=0?(c[u+12>>2]|0)!=0:0)?(c[u+32>>2]|0)>0:0)?(E=c[j>>2]|0,(E|0)!=0):0)?(c[E+12>>2]|0)!=0:0)j=(c[E+32>>2]|0)==0;else j=0;j=(j^1)<<31>>31;u=33}while(0);if((u|0)==33){u=0;if((j|0)>-1)u=34;else b=0}if((u|0)==34){u=0;b=c[a+(t*24|0)+(j<<2)>>2]|0}if(D){j=c[y+(t*24|0)+4>>2]|0;if(j|0?c[j+12>>2]|0:0){k=b;o=j;break}j=c[y+(t*24|0)>>2]|0;if((j|0)!=0?(F=(c[j+12>>2]|0)!=0,F):0){k=b;o=c[y+(t*24|0)+((F^1)<<31>>31<<2)>>2]|0}else{k=b;o=0}}else k=b}else{k=0;o=D?0:o}while(0);do if(x?(Of(k,o)|0)!=0:0){do if((q|0)!=0?(c[q+12>>2]|0)!=0:0){j=p+1|0;if(p|0)Xf(11716,d,e)|0;b=q+48|0;if((c[b>>2]|0)<=0?(c[q+56>>2]|0)<=0:0)break;Uf(l+1|0,82004,d,0,e)|0;b=c[b>>2]|0;if((b|0)>0?(c[e>>2]|0)==0:0)eg(c[q+52>>2]|0,b,d,g,e)|0;b=q+56|0;if(((c[b>>2]|0)>0?(c[e>>2]|0)==0:0)?(Xf(w,d,e)|0,fg(c[q+60>>2]|0,c[b>>2]|0,d,g,e)|0,!v):0)Xf(12846,d,e)|0}else u=56;while(0);if((u|0)==56){u=0;if((n|0)!=0?(c[n+12>>2]|0)!=0:0){j=p+1|0;if(p)Xf(11716,d,e)|0}else j=p}b=Af(36)|0;if((r|0)!=0&(m|0)!=0){if(b|0?(kp(b,r)|0)==0:0){i=1;l=0;m=m+1|0;k=0;n=0;b=r;break}if(j|0)Xf(11716,d,e)|0;Yf(r,m,d,e)|0;j=j+1|0;i=1;l=0;m=1;k=0;n=0}else{i=1;l=0;m=1;k=0;n=0}}else u=67;while(0);do if((u|0)==67){u=0;if(i|0){if(!((r|0)!=0&(m|0)!=0)){j=p;i=0;l=0;n=o;b=r;break}if(p|0)Xf(11716,d,e)|0;Yf(r,m,d,e)|0;j=p+1|0;i=0;l=0;m=0;n=o;b=0;break}if(!s?Of(k,q)|0:0){j=p;i=0;l=l+1|0;k=q;b=r;break}j=p+1|0;if(p|0)Xf(11716,d,e)|0;if((q|0)!=0?(c[q+12>>2]|0)!=0:0){b=q+48|0;if((c[b>>2]|0)<=0?(c[q+56>>2]|0)<=0:0){i=0;l=0;n=o;b=r;break}Uf(l+1|0,82004,d,0,e)|0;b=c[b>>2]|0;if((b|0)>0?(c[e>>2]|0)==0:0)eg(c[q+52>>2]|0,b,d,g,e)|0;b=q+56|0;if(((c[b>>2]|0)>0?(c[e>>2]|0)==0:0)?(Xf(w,d,e)|0,fg(c[q+60>>2]|0,c[b>>2]|0,d,g,e)|0,!v):0){Xf(12846,d,e)|0;i=0;l=0;n=o;b=r}else{i=0;l=0;n=o;b=r}}else{i=0;l=0;n=o;b=r}}while(0);p=j;t=t+1|0;q=k;r=b}return (c[z>>2]|0)-A|0}function ug(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;C=(i|0)!=0;x=C?b:0;y=d+8|0;z=c[y>>2]|0;A=(f|0)==0;B=(f|2|0)==3;u=(j|0)!=0;w=C&u;v=(k|0)!=0;u=(i|0)==0&u^1;r=0;i=1;t=0;l=0;m=0;q=0;o=0;n=0;s=0;while(1){if((t|0)>(h|0))break;do if((t|0)<(h|0)){b=a+(t*24|0)|0;a:do if(A){p=c[a+(t*24|0)+4>>2]|0;if((p|0?c[p+12>>2]|0:0)?(c[p+32>>2]|0)==0:0){b=1;p=34;break}b=c[b>>2]|0;if((b|0)!=0?(c[b+12>>2]|0)!=0:0)b=(c[b+32>>2]|0)==0;else b=0;b=(b^1)<<31>>31;p=33}else{if(B){p=c[a+(t*24|0)+4>>2]|0;if(p|0?c[p+12>>2]|0:0){b=1;p=34;break}b=c[b>>2]|0;if(!b)b=0;else b=(c[b+12>>2]|0)!=0;b=(b^1)<<31>>31;p=33;break}switch(f|0){case 4:{k=c[b>>2]|0;if((k|0?c[k+12>>2]|0:0)?(c[k+32>>2]|0)==0:0){b=0;p=34;break a}b=c[a+(t*24|0)+4>>2]|0;if(!b){j=0;break a}if(!(c[b+12>>2]|0)){j=0;break a}if(!(c[b+32>>2]|0)){b=1;p=34;break a}else{j=0;break a}}case 2:break;default:{j=0;break a}}p=c[a+(t*24|0)+4>>2]|0;if(((((p|0)!=0?(c[p+12>>2]|0)!=0:0)?(c[p+32>>2]|0)>0:0)?(N=c[b>>2]|0,(N|0)!=0):0)?(c[N+12>>2]|0)!=0:0)b=(c[N+32>>2]|0)==0;else b=0;b=(b^1)<<31>>31;p=33}while(0);if((p|0)==33){p=0;if((b|0)>-1)p=34;else j=0}if((p|0)==34)j=c[a+(t*24|0)+(b<<2)>>2]|0;if(C){b=c[x+(t*24|0)+4>>2]|0;if(b|0?c[b+12>>2]|0:0){k=j;o=b;break}b=c[x+(t*24|0)>>2]|0;if((b|0)!=0?(O=(c[b+12>>2]|0)!=0,O):0){k=j;o=c[x+(t*24|0)+((O^1)<<31>>31<<2)>>2]|0}else{k=j;o=0}}else k=j}else{k=0;o=C?0:o}while(0);b=(k|0)==0;do if(w)if(!b){b=k+68|0;j=c[b>>2]|0;if((j|0?(D=c[k+64>>2]|0,D|0):0)?Nf(j,8,D,8,0)|0:0){k=113;p=57;break}if(o){b=c[b>>2]|0;if((b|0?(E=c[o+64>>2]|0,E|0):0)?Nf(b,8,E,8,0)|0:0){k=49;p=57;break}b=c[k+68>>2]|0;if(((b|0)!=0?(F=c[o+68>>2]|0,(F|0)!=0):0)?(Nf(b,8,F,8,0)|0)!=0:0){k=177;p=57}else p=75}else p=75}else p=75;else if(((!(b|u)?(G=c[k+68>>2]|0,(G|0)!=0):0)?(H=c[k+64>>2]|0,(H|0)!=0):0)?(Nf(G,8,H,8,0)|0)!=0:0){k=17;p=57}else p=75;while(0);do if((p|0)==57){p=0;if((q|0)!=0?(c[q+12>>2]|0)!=0:0){b=r+1|0;if(r|0)Xf(11716,d,e)|0;j=c[q+68>>2]|0;if((j|0)!=0?(I=j+28|0,(c[I>>2]|0)>0):0){Uf(l+1|0,82004,d,0,e)|0;hg(c[j+32>>2]|0,c[j+36>>2]|0,c[j+40>>2]|0,0,c[I>>2]|0,d,g,e)|0}}else if((n|0)!=0?(c[n+12>>2]|0)!=0:0){b=r+1|0;if(r)Xf(11716,d,e)|0}else b=r;j=Af(k)|0;if((s|0)!=0&(m|0)!=0){if(j|0?(kp(j,s)|0)==0:0){i=1;l=0;m=m+1|0;k=0;n=0;j=s;break}if(b|0)Xf(11716,d,e)|0;Yf(s,m,d,e)|0;b=b+1|0;i=1;l=0;m=1;k=0;n=0}else{i=1;l=0;m=1;k=0;n=0}}else if((p|0)==75){p=0;if(i|0){if(!((s|0)!=0&(m|0)!=0)){b=r;i=0;l=0;n=o;j=s;break}if(r|0)Xf(11716,d,e)|0;Yf(s,m,d,e)|0;b=r+1|0;i=0;l=0;m=0;n=o;j=0;break}j=(q|0)!=0;if(((j&(v&(k|0)!=0)?(J=c[k+68>>2]|0,J|0):0)?(K=c[q+68>>2]|0,K|0):0)?Nf(J,8,K,8,0)|0:0){b=r;i=0;l=l+1|0;k=q;j=s;break}b=r+1|0;if(r|0)Xf(11716,d,e)|0;if(((j?(c[q+12>>2]|0)!=0:0)?(L=c[q+68>>2]|0,(L|0)!=0):0)?(M=L+28|0,(c[M>>2]|0)>0):0){Uf(l+1|0,82004,d,0,e)|0;hg(c[L+32>>2]|0,c[L+36>>2]|0,c[L+40>>2]|0,0,c[M>>2]|0,d,g,e)|0;i=0;l=0;n=o;j=s}else{i=0;l=0;n=o;j=s}}while(0);r=b;t=t+1|0;q=k;s=j}return (c[y>>2]|0)-z|0}function vg(a,b,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;C=(j|0)!=0;x=C?b:0;y=d+8|0;z=c[y>>2]|0;A=(f|0)==0;B=(f|2|0)==3;u=(k|0)!=0;w=C&u;v=(l|0)!=0;u=(j|0)==0&u^1;r=0;l=1;t=0;j=0;m=0;q=0;o=0;n=0;s=0;while(1){if((t|0)>(h|0))break;do if((t|0)<(h|0)){i=a+(t*24|0)|0;a:do if(A){p=c[a+(t*24|0)+4>>2]|0;if((p|0?c[p+12>>2]|0:0)?(c[p+32>>2]|0)==0:0){i=1;p=34;break}i=c[i>>2]|0;if((i|0)!=0?(c[i+12>>2]|0)!=0:0)i=(c[i+32>>2]|0)==0;else i=0;i=(i^1)<<31>>31;p=33}else{if(B){p=c[a+(t*24|0)+4>>2]|0;if(p|0?c[p+12>>2]|0:0){i=1;p=34;break}i=c[i>>2]|0;if(!i)i=0;else i=(c[i+12>>2]|0)!=0;i=(i^1)<<31>>31;p=33;break}switch(f|0){case 4:{k=c[i>>2]|0;if((k|0?c[k+12>>2]|0:0)?(c[k+32>>2]|0)==0:0){i=0;p=34;break a}i=c[a+(t*24|0)+4>>2]|0;if(!i){b=0;break a}if(!(c[i+12>>2]|0)){b=0;break a}if(!(c[i+32>>2]|0)){i=1;p=34;break a}else{b=0;break a}}case 2:break;default:{b=0;break a}}p=c[a+(t*24|0)+4>>2]|0;if(((((p|0)!=0?(c[p+12>>2]|0)!=0:0)?(c[p+32>>2]|0)>0:0)?(L=c[i>>2]|0,(L|0)!=0):0)?(c[L+12>>2]|0)!=0:0)i=(c[L+32>>2]|0)==0;else i=0;i=(i^1)<<31>>31;p=33}while(0);if((p|0)==33){p=0;if((i|0)>-1)p=34;else b=0}if((p|0)==34)b=c[a+(t*24|0)+(i<<2)>>2]|0;if(C){i=c[x+(t*24|0)+4>>2]|0;if(i|0?c[i+12>>2]|0:0){k=b;o=i;break}i=c[x+(t*24|0)>>2]|0;if((i|0)!=0?(M=(c[i+12>>2]|0)!=0,M):0){k=b;o=c[x+(t*24|0)+((M^1)<<31>>31<<2)>>2]|0}else{k=b;o=0}}else k=b}else{k=0;o=C?0:o}while(0);i=(k|0)==0;do if(w)if(!i){i=k+68|0;b=c[i>>2]|0;if((b|0?(D=c[k+64>>2]|0,D|0):0)?Nf(b,2,D,2,0)|0:0){k=113;p=57;break}if(o){i=c[i>>2]|0;if((i|0?(E=c[o+64>>2]|0,E|0):0)?Nf(i,2,E,2,0)|0:0){k=49;p=57;break}i=c[k+68>>2]|0;if(((i|0)!=0?(F=c[o+68>>2]|0,(F|0)!=0):0)?(Nf(i,2,F,2,0)|0)!=0:0){k=177;p=57}else p=75}else p=75}else p=75;else if(((!(i|u)?(G=c[k+68>>2]|0,(G|0)!=0):0)?(H=c[k+64>>2]|0,(H|0)!=0):0)?(Nf(G,2,H,2,0)|0)!=0:0){k=17;p=57}else p=75;while(0);do if((p|0)==57){p=0;if((q|0)!=0?(c[q+12>>2]|0)!=0:0){i=r+1|0;if(r|0)Xf(11716,d,e)|0;b=c[q+68>>2]|0;if((b|0)!=0?(c[b>>2]|0)>0:0){Uf(j+1|0,82004,d,0,e)|0;hg(c[b+4>>2]|0,0,c[b+8>>2]|0,0,c[b>>2]|0,d,g,e)|0}}else if((n|0)!=0?(c[n+12>>2]|0)!=0:0){i=r+1|0;if(r)Xf(11716,d,e)|0}else i=r;b=Af(k)|0;if((s|0)!=0&(m|0)!=0){if(b|0?(kp(b,s)|0)==0:0){l=1;j=0;m=m+1|0;k=0;n=0;b=s;break}if(i|0)Xf(11716,d,e)|0;Yf(s,m,d,e)|0;i=i+1|0;l=1;j=0;m=1;k=0;n=0}else{l=1;j=0;m=1;k=0;n=0}}else if((p|0)==75){p=0;if(l|0){if(!((s|0)!=0&(m|0)!=0)){i=r;l=0;j=0;n=o;b=s;break}if(r|0)Xf(11716,d,e)|0;Yf(s,m,d,e)|0;i=r+1|0;l=0;j=0;m=0;n=o;b=0;break}b=(q|0)!=0;if(((b&(v&(k|0)!=0)?(I=c[k+68>>2]|0,I|0):0)?(J=c[q+68>>2]|0,J|0):0)?Nf(I,2,J,2,0)|0:0){i=r;l=0;j=j+1|0;k=q;b=s;break}i=r+1|0;if(r|0)Xf(11716,d,e)|0;if(((b?(c[q+12>>2]|0)!=0:0)?(K=c[q+68>>2]|0,(K|0)!=0):0)?(c[K>>2]|0)>0:0){Uf(j+1|0,82004,d,0,e)|0;hg(c[K+4>>2]|0,0,c[K+8>>2]|0,0,c[K>>2]|0,d,g,e)|0;l=0;j=0;n=o;b=s}else{l=0;j=0;n=o;b=s}}while(0);r=i;t=t+1|0;q=k;s=b}return (c[y>>2]|0)-z|0}function wg(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;i=b+8|0;j=c[i>>2]|0;k=(e|0)==0;l=(e|2|0)==3;p=0;while(1){if(!((p|0)<(f|0)&(c[d>>2]|0)==0))break;g=a+(p*24|0)|0;a:do if(k){h=c[a+(p*24|0)+4>>2]|0;if((h|0?c[h+12>>2]|0:0)?(c[h+32>>2]|0)==0:0){g=1;h=32;break}g=c[g>>2]|0;if((g|0)!=0?(c[g+12>>2]|0)!=0:0)g=(c[g+32>>2]|0)==0;else g=0;g=(g^1)<<31>>31;h=31}else{if(l){h=c[a+(p*24|0)+4>>2]|0;if(h|0?c[h+12>>2]|0:0){g=1;h=32;break}g=c[g>>2]|0;if(!g)g=0;else g=(c[g+12>>2]|0)!=0;g=(g^1)<<31>>31;h=31;break}switch(e|0){case 4:{h=c[g>>2]|0;if((h|0?c[h+12>>2]|0:0)?(c[h+32>>2]|0)==0:0){g=0;h=32;break a}g=c[a+(p*24|0)+4>>2]|0;if(!g){h=36;break a}if(!(c[g+12>>2]|0)){h=36;break a}if(!(c[g+32>>2]|0)){g=1;h=32;break a}else{h=36;break a}}case 2:break;default:{h=36;break a}}h=c[a+(p*24|0)+4>>2]|0;if(((((h|0)!=0?(c[h+12>>2]|0)!=0:0)?(c[h+32>>2]|0)>0:0)?(m=c[g>>2]|0,(m|0)!=0):0)?(c[m+12>>2]|0)!=0:0)g=(c[m+32>>2]|0)==0;else g=0;g=(g^1)<<31>>31;h=31}while(0);if((h|0)==31)if((g|0)>-1)h=32;else h=36;if((h|0)==32){h=0;g=c[a+(p*24|0)+(g<<2)>>2]|0;if(((g|0)!=0?(n=c[g+68>>2]|0,(n|0)!=0):0)?(o=c[n+20>>2]|0,(o|0)!=0):0)Xf((o|0)<0?12840:12842,b,d)|0;else h=36}if((h|0)==36)Xf(90921,b,d)|0;p=p+1|0}return (c[i>>2]|0)-j|0}function xg(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;B=(i|0)!=0;w=B?b:0;x=d+8|0;y=c[x>>2]|0;z=(f|0)==0;A=(f|2|0)==3;v=B&(j|0)!=0;t=(k|0)==0;p=0;k=1;u=0;l=0;m=0;q=0;o=0;n=0;r=0;while(1){if((u|0)>(h|0))break;do if((u|0)<(h|0)){i=a+(u*24|0)|0;a:do if(z){s=c[a+(u*24|0)+4>>2]|0;if((s|0?c[s+12>>2]|0:0)?(c[s+32>>2]|0)==0:0){i=1;s=34;break}i=c[i>>2]|0;if((i|0)!=0?(c[i+12>>2]|0)!=0:0)i=(c[i+32>>2]|0)==0;else i=0;i=(i^1)<<31>>31;s=33}else{if(A){s=c[a+(u*24|0)+4>>2]|0;if(s|0?c[s+12>>2]|0:0){i=1;s=34;break}i=c[i>>2]|0;if(!i)i=0;else i=(c[i+12>>2]|0)!=0;i=(i^1)<<31>>31;s=33;break}switch(f|0){case 4:{j=c[i>>2]|0;if((j|0?c[j+12>>2]|0:0)?(c[j+32>>2]|0)==0:0){i=0;s=34;break a}i=c[a+(u*24|0)+4>>2]|0;if(!i){b=0;break a}if(!(c[i+12>>2]|0)){b=0;break a}if(!(c[i+32>>2]|0)){i=1;s=34;break a}else{b=0;break a}}case 2:break;default:{b=0;break a}}s=c[a+(u*24|0)+4>>2]|0;if(((((s|0)!=0?(c[s+12>>2]|0)!=0:0)?(c[s+32>>2]|0)>0:0)?(H=c[i>>2]|0,(H|0)!=0):0)?(c[H+12>>2]|0)!=0:0)i=(c[H+32>>2]|0)==0;else i=0;i=(i^1)<<31>>31;s=33}while(0);if((s|0)==33){s=0;if((i|0)>-1)s=34;else b=0}if((s|0)==34){s=0;b=c[a+(u*24|0)+8+(i<<2)>>2]|0}if(B){o=c[w+(u*24|0)+4>>2]|0;if((o|0)!=0?(c[o+12>>2]|0)!=0:0)i=1;else{i=c[w+(u*24|0)>>2]|0;if(!i){j=b;o=0;break}i=(c[i+12>>2]|0)!=0;if(i)i=(i^1)<<31>>31;else{j=b;o=0;break}}j=b;o=c[w+(u*24|0)+8+(i<<2)>>2]|0}else j=b}else{j=0;o=B?0:o}while(0);do if(v?(b=(Pf(j,0,o,0)|0)!=0,C=b?40:0,b):0){if((q|0)!=0?(D=q+4|0,E=c[D>>2]|0,(E|0)!=0):0){i=p+1|0;if(!p)j=E;else{Xf(11716,d,e)|0;j=c[D>>2]|0}b=q+36|0;if(Qf(c[b>>2]|0,j)|0){Uf(l+1|0,82004,d,0,e)|0;dg(c[b>>2]|0,c[D>>2]|0,0,d,g,e)|0}}else if((n|0)!=0?(c[n+4>>2]|0)!=0:0){i=p+1|0;if(p)Xf(11716,d,e)|0}else i=p;b=Af(C)|0;if((r|0)!=0&(m|0)!=0){if(b|0?(kp(b,r)|0)==0:0){k=1;l=0;m=m+1|0;j=0;n=0;b=r;break}if(i|0)Xf(11716,d,e)|0;Yf(r,m,d,e)|0;i=i+1|0;k=1;l=0;m=1;j=0;n=0}else{k=1;l=0;m=1;j=0;n=0}}else s=60;while(0);do if((s|0)==60){s=0;if(k|0){if(!((r|0)!=0&(m|0)!=0)){i=p;k=0;l=0;n=o;b=r;break}if(p|0)Xf(11716,d,e)|0;Yf(r,m,d,e)|0;i=p+1|0;k=0;l=0;m=0;n=o;b=0;break}if(!t?Pf(j,0,q,0)|0:0){i=p;k=0;l=l+1|0;j=q;b=r;break}i=p+1|0;if(p|0)Xf(11716,d,e)|0;if(q|0?(F=q+4|0,G=c[F>>2]|0,G|0):0){b=q+36|0;if(!(Qf(c[b>>2]|0,G)|0)){k=0;l=0;n=o;b=r;break}Uf(l+1|0,82004,d,0,e)|0;dg(c[b>>2]|0,c[F>>2]|0,0,d,g,e)|0;k=0;l=0;n=o;b=r;break}if(B&(n|0)!=0?(c[n+4>>2]|0)==0:0){k=0;l=0;n=o;b=r}else{k=0;l=0;n=o;b=r}}while(0);p=i;u=u+1|0;q=j;r=b}return (c[x>>2]|0)-y|0}function yg(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;D=(i|0)!=0;y=D?b:0;z=d+8|0;A=c[z>>2]|0;B=(f|0)==0;C=(f|2|0)==3;v=(j|0)!=0;x=D&v;w=(k|0)!=0;v=(i|0)==0&v^1;s=0;i=1;u=0;l=0;m=0;r=0;k=0;n=0;t=0;while(1){if((u|0)>(h|0))break;do if((u|0)<(h|0)){b=a+(u*24|0)|0;a:do if(B){q=c[a+(u*24|0)+4>>2]|0;if((q|0?c[q+12>>2]|0:0)?(c[q+32>>2]|0)==0:0){b=1;q=34;break}b=c[b>>2]|0;if((b|0)!=0?(c[b+12>>2]|0)!=0:0)b=(c[b+32>>2]|0)==0;else b=0;b=(b^1)<<31>>31;q=33}else{if(C){q=c[a+(u*24|0)+4>>2]|0;if(q|0?c[q+12>>2]|0:0){b=1;q=34;break}b=c[b>>2]|0;if(!b)b=0;else b=(c[b+12>>2]|0)!=0;b=(b^1)<<31>>31;q=33;break}switch(f|0){case 4:{p=c[b>>2]|0;if((p|0?c[p+12>>2]|0:0)?(c[p+32>>2]|0)==0:0){b=0;q=34;break a}b=c[a+(u*24|0)+4>>2]|0;if(!b){j=0;break a}if(!(c[b+12>>2]|0)){j=0;break a}if(!(c[b+32>>2]|0)){b=1;q=34;break a}else{j=0;break a}}case 2:break;default:{j=0;break a}}q=c[a+(u*24|0)+4>>2]|0;if(((((q|0)!=0?(c[q+12>>2]|0)!=0:0)?(c[q+32>>2]|0)>0:0)?(I=c[b>>2]|0,(I|0)!=0):0)?(c[I+12>>2]|0)!=0:0)b=(c[I+32>>2]|0)==0;else b=0;b=(b^1)<<31>>31;q=33}while(0);if((q|0)==33){q=0;if((b|0)>-1)q=34;else j=0}if((q|0)==34)j=c[a+(u*24|0)+(b<<2)>>2]|0;if(D){b=c[y+(u*24|0)+4>>2]|0;if(b|0?c[b+12>>2]|0:0){o=j;p=b;break}b=c[y+(u*24|0)>>2]|0;if((b|0)!=0?(J=(c[b+12>>2]|0)!=0,J):0){o=j;p=c[y+(u*24|0)+((J^1)<<31>>31<<2)>>2]|0}else{o=j;p=0}}else{o=j;p=k}}else{o=0;p=D?0:k}while(0);b:do if(x){do if((o|0)!=0&(p|0)!=0){b=o+64|0;j=c[b>>2]|0;if(j){k=c[p+64>>2]|0;if(k){if(Nf(j,4,k,4,0)|0){k=34;q=56;break b}j=c[b>>2]|0;if(!j)break}k=c[p+64>>2]|0;if((k|0)!=0?(Nf(j,4,k,2,0)|0)!=0:0){k=290;q=56;break b}}}else{if(!o){q=74;break b}b=o+64|0}while(0);b=c[b>>2]|0;if((b|0)!=0?(Nf(b,4,b,2,0)|0)!=0:0){k=354;q=56}else q=74}else if((!((o|0)==0|v)?(E=c[o+64>>2]|0,(E|0)!=0):0)?(Nf(E,4,E,2,0)|0)!=0:0){k=258;q=56}else q=74;while(0);do if((q|0)==56){q=0;if((r|0)!=0?(c[r+12>>2]|0)!=0:0){b=s+1|0;if(s|0)Xf(11716,d,e)|0;j=c[r+64>>2]|0;if((j|0)!=0?(c[j>>2]|0)>0:0){Uf(l+1|0,82004,d,0,e)|0;hg(c[j+4>>2]|0,0,c[j+16>>2]|0,0,c[j>>2]|0,d,g,e)|0}}else if((n|0)!=0?(c[n+12>>2]|0)!=0:0){b=s+1|0;if(s)Xf(11716,d,e)|0}else b=s;j=Af(k)|0;if((t|0)!=0&(m|0)!=0){if(j|0?(kp(j,t)|0)==0:0){i=1;l=0;m=m+1|0;k=0;n=0;j=t;break}if(b|0)Xf(11716,d,e)|0;Yf(t,m,d,e)|0;b=b+1|0;i=1;l=0;m=1;k=0;n=0}else{i=1;l=0;m=1;k=0;n=0}}else if((q|0)==74){q=0;if(i|0){if(!((t|0)!=0&(m|0)!=0)){b=s;i=0;l=0;k=o;n=p;j=t;break}if(s|0)Xf(11716,d,e)|0;Yf(t,m,d,e)|0;b=s+1|0;i=0;l=0;m=0;k=o;n=p;j=0;break}j=(r|0)!=0;if(((j&(w&(o|0)!=0)?(F=c[o+64>>2]|0,F|0):0)?(G=c[r+64>>2]|0,G|0):0)?Nf(F,4,G,4,0)|0:0){b=s;i=0;l=l+1|0;k=r;j=t;break}b=s+1|0;if(s|0)Xf(11716,d,e)|0;if((((j?(c[r+12>>2]|0)!=0:0)?(H=c[r+64>>2]|0,(H|0)!=0):0)?(c[H>>2]|0)>0:0)?(c[H+20>>2]|0)!=0:0){Uf(l+1|0,82004,d,0,e)|0;hg(c[H+12>>2]|0,0,c[H+16>>2]|0,0,c[H>>2]|0,d,g,e)|0;i=0;l=0;k=o;j=t}else{i=0;l=0;k=o;j=t}}while(0);s=b;u=u+1|0;r=k;k=p;t=j}return (c[z>>2]|0)-A|0}function zg(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;H=e+8|0;I=c[H>>2]|0;x=(g|0)==0;y=(j|0)!=0;v=(k|0)!=0;w=y&v;s=(j|0)==0;t=(g|2|0)==3;j=0;u=0;k=0;d=0;while(1){if((u|0)>=(i|0))break;o=b+(u*24|0)|0;a:do if(x){r=c[b+(u*24|0)+4>>2]|0;if((r|0?c[r+12>>2]|0:0)?(c[r+32>>2]|0)==0:0){l=1;r=32;break}l=c[o>>2]|0;if((l|0)!=0?(c[l+12>>2]|0)!=0:0)l=(c[l+32>>2]|0)==0;else l=0;l=(l^1)<<31>>31;r=31}else{if(t){r=c[b+(u*24|0)+4>>2]|0;if(r|0?c[r+12>>2]|0:0){l=1;r=32;break}l=c[o>>2]|0;if(!l)l=0;else l=(c[l+12>>2]|0)!=0;l=(l^1)<<31>>31;r=31;break}switch(g|0){case 4:{q=c[o>>2]|0;if((q|0?c[q+12>>2]|0:0)?(c[q+32>>2]|0)==0:0){l=0;r=32;break a}l=c[b+(u*24|0)+4>>2]|0;if(!l){q=0;m=0;p=0;break a}if(!(c[l+12>>2]|0)){q=0;m=0;p=0;break a}if(!(c[l+32>>2]|0)){l=1;r=32;break a}else{q=0;m=0;p=0;break a}}case 2:break;default:{q=0;m=0;p=0;break a}}r=c[b+(u*24|0)+4>>2]|0;if(((((r|0)!=0?(c[r+12>>2]|0)!=0:0)?(c[r+32>>2]|0)>0:0)?(F=c[o>>2]|0,(F|0)!=0):0)?(c[F+12>>2]|0)!=0:0)l=(c[F+32>>2]|0)==0;else l=0;l=(l^1)<<31>>31;r=31}while(0);if((r|0)==31){r=0;if((l|0)>-1)r=32;else{q=0;m=0;p=0}}if((r|0)==32){r=0;m=c[b+(u*24|0)+(l<<2)>>2]|0;if(!m){q=0;m=0;p=0}else{q=1;p=c[b+(u*24|0)+8+(l<<2)>>2]|0}}do if(y){n=c[b+(u*24|0)+4>>2]|0;if((n|0)!=0?(c[n+12>>2]|0)!=0:0){l=1;r=40}else{l=c[o>>2]|0;if(((l|0)!=0?(o=(c[l+12>>2]|0)!=0,G=(o^1)<<31>>31,o):0)?(z=c[b+(u*24|0)+(G<<2)>>2]|0,(z|0)!=0):0){l=G;n=z;r=40}else{o=0;n=0}}if((r|0)==40)o=c[b+(u*24|0)+8+(l<<2)>>2]|0;if(w&q){r=c[m+64>>2]|0;if((r|0)!=0?(c[r+20>>2]|0)!=0:0){l=(n|0)==0;if(!l?Rf(p,1,o,0)|0:0){l=38;r=55;break}if(!(Rf(p,1,p,0)|0))if(((!l?(A=c[n+64>>2]|0,(A|0)!=0):0)?(c[A+20>>2]|0)!=0:0)?(Rf(p,1,o,1)|0)!=0:0){l=294;r=55}else r=62;else{l=102;r=55}}else{l=1;r=51}}else{l=v;r=51}}else{l=v;r=51}while(0);if((r|0)==51)if(((q&(s&l)?(B=c[m+64>>2]|0,(B|0)!=0):0)?(c[B+20>>2]|0)!=0:0)?(Rf(p,1,p,0)|0)!=0:0){l=6;r=55}else r=62;do if((r|0)==55){r=0;l=Af(l)|0;if((d|0)!=0&(k|0)!=0){if(l|0?(kp(l,d)|0)==0:0){k=k+1|0;break}if(j|0)Xf(11716,e,f)|0;Yf(d,k,e,f)|0;j=j+1|0;k=1;d=l}else{k=1;d=l}}else if((r|0)==62){r=0;if((d|0)!=0&(k|0)!=0){if(j|0)Xf(11716,e,f)|0;Yf(d,k,e,f)|0;j=j+1|0;k=0;d=0}l=j+1|0;if(j|0)Xf(11716,e,f)|0;if(((((q&(p|0)!=0?(C=c[p+4>>2]|0,(C|0)!=0):0)?(D=c[m+64>>2]|0,(D|0)!=0):0)?(c[D>>2]|0)!=0:0)?(c[D+20>>2]|0)!=0:0)?(E=c[p+28>>2]|0,(E|0)!=0):0){ag(a,E,C,0,0,0,e,h,f)|0;j=l}else j=l}while(0);u=u+1|0}if((d|0)!=0&(k|0)!=0){if(j|0)Xf(11716,e,f)|0;Yf(d,k,e,f)|0}return (c[H>>2]|0)-I|0}function Ag(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;A=e+8|0;B=c[A>>2]|0;u=(g|0)==0;v=(j|0)!=0;s=(k|0)!=0;t=v&s;p=(j|0)==0;q=(g|2|0)==3;j=0;r=0;k=0;d=0;while(1){if((r|0)>=(i|0))break;m=b+(r*24|0)|0;a:do if(u){o=c[b+(r*24|0)+4>>2]|0;if((o|0?c[o+12>>2]|0:0)?(c[o+32>>2]|0)==0:0){l=1;o=32;break}l=c[m>>2]|0;if((l|0)!=0?(c[l+12>>2]|0)!=0:0)l=(c[l+32>>2]|0)==0;else l=0;l=(l^1)<<31>>31;o=31}else{if(q){o=c[b+(r*24|0)+4>>2]|0;if(o|0?c[o+12>>2]|0:0){l=1;o=32;break}l=c[m>>2]|0;if(!l)l=0;else l=(c[l+12>>2]|0)!=0;l=(l^1)<<31>>31;o=31;break}switch(g|0){case 4:{n=c[m>>2]|0;if((n|0?c[n+12>>2]|0:0)?(c[n+32>>2]|0)==0:0){l=0;o=32;break a}l=c[b+(r*24|0)+4>>2]|0;if(!l){n=0;break a}if(!(c[l+12>>2]|0)){n=0;break a}if(!(c[l+32>>2]|0)){l=1;o=32;break a}else{n=0;break a}}case 2:break;default:{n=0;break a}}o=c[b+(r*24|0)+4>>2]|0;if(((((o|0)!=0?(c[o+12>>2]|0)!=0:0)?(c[o+32>>2]|0)>0:0)?(y=c[m>>2]|0,(y|0)!=0):0)?(c[y+12>>2]|0)!=0:0)l=(c[y+32>>2]|0)==0;else l=0;l=(l^1)<<31>>31;o=31}while(0);if((o|0)==31){o=0;if((l|0)>-1)o=32;else n=0}if((o|0)==32){o=0;n=c[b+(r*24|0)+8+(l<<2)>>2]|0}if(v){l=c[b+(r*24|0)+4>>2]|0;if((l|0)!=0?(c[l+12>>2]|0)!=0:0){l=1;o=39}else{l=c[m>>2]|0;if((l|0)!=0?(z=(c[l+12>>2]|0)!=0,z):0){l=(z^1)<<31>>31;o=39}else m=0}if((o|0)==39)m=c[b+(r*24|0)+8+(l<<2)>>2]|0;l=(n|0)!=0;if(t&l)if(c[n+12>>2]|0)if(!(Rf(n,2,m,0)|0))if(!(Rf(n,2,n,0)|0))if(!(Rf(n,2,m,2)|0)){l=1;o=55}else{l=180;o=48}else{l=116;o=48}else{l=52;o=48}else{m=1;l=1;o=45}else{m=s;o=45}}else{m=s;l=(n|0)!=0;o=45}if((o|0)==45)if(l&(p&m))if((c[n+12>>2]|0)!=0?(Rf(n,2,n,0)|0)!=0:0){l=20;o=48}else{l=1;o=55}else o=55;do if((o|0)==48){o=0;l=Af(l)|0;if((d|0)!=0&(k|0)!=0){if(l|0?(kp(l,d)|0)==0:0){k=k+1|0;break}if(j|0)Xf(11716,e,f)|0;Yf(d,k,e,f)|0;j=j+1|0;k=1;d=l}else{k=1;d=l}}else if((o|0)==55){o=0;if((d|0)!=0&(k|0)!=0){if(j|0)Xf(11716,e,f)|0;Yf(d,k,e,f)|0;j=j+1|0;k=0;d=0}m=j+1|0;if(j|0)Xf(11716,e,f)|0;if(((l?(w=c[n+4>>2]|0,(w|0)!=0):0)?(c[n+12>>2]|0)!=0:0)?(x=c[n+24>>2]|0,(x|0)!=0):0){ag(a,x,w,0,0,0,e,h,f)|0;j=m}else j=m}while(0);r=r+1|0}if((d|0)!=0&(k|0)!=0){if(j|0)Xf(11716,e,f)|0;Yf(d,k,e,f)|0}return (c[A>>2]|0)-B|0}function Bg(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;D=(i|0)!=0;z=D?b:0;A=d+8|0;B=c[A>>2]|0;C=(f|0)==0;x=(j|0)!=0;y=D&x;x=(i|0)==0&x;w=(f|2|0)==3;u=(k|0)==0;q=0;n=1;v=0;o=0;p=0;r=0;l=0;i=0;s=0;while(1){if((v|0)>(h|0))break;do if((v|0)<(h|0)){b=a+(v*24|0)|0;a:do if(C){t=c[a+(v*24|0)+4>>2]|0;if((t|0?c[t+12>>2]|0:0)?(c[t+32>>2]|0)==0:0){b=1;t=34;break}b=c[b>>2]|0;if((b|0)!=0?(c[b+12>>2]|0)!=0:0)b=(c[b+32>>2]|0)==0;else b=0;b=(b^1)<<31>>31;t=33}else{if(w){t=c[a+(v*24|0)+4>>2]|0;if(t|0?c[t+12>>2]|0:0){b=1;t=34;break}b=c[b>>2]|0;if(!b)b=0;else b=(c[b+12>>2]|0)!=0;b=(b^1)<<31>>31;t=33;break}switch(f|0){case 4:{m=c[b>>2]|0;if((m|0?c[m+12>>2]|0:0)?(c[m+32>>2]|0)==0:0){b=0;t=34;break a}b=c[a+(v*24|0)+4>>2]|0;if(!b){j=0;break a}if(!(c[b+12>>2]|0)){j=0;break a}if(!(c[b+32>>2]|0)){b=1;t=34;break a}else{j=0;break a}}case 2:break;default:{j=0;break a}}t=c[a+(v*24|0)+4>>2]|0;if(((((t|0)!=0?(c[t+12>>2]|0)!=0:0)?(c[t+32>>2]|0)>0:0)?(I=c[b>>2]|0,(I|0)!=0):0)?(c[I+12>>2]|0)!=0:0)b=(c[I+32>>2]|0)==0;else b=0;b=(b^1)<<31>>31;t=33}while(0);if((t|0)==33){t=0;if((b|0)>-1)t=34;else j=0}if((t|0)==34){t=0;j=c[a+(v*24|0)+8+(b<<2)>>2]|0}do if(D){m=c[z+(v*24|0)+4>>2]|0;if((m|0)!=0?(c[m+12>>2]|0)!=0:0)b=1;else{b=c[z+(v*24|0)>>2]|0;if(!b){l=0;break}b=(c[b+12>>2]|0)!=0;if(b)b=(b^1)<<31>>31;else{l=0;break}}l=c[z+(v*24|0)+8+(b<<2)>>2]|0}while(0);b=(j|0)!=0;if(y&b?(c[j+12>>2]|0)!=0:0)if(!(Pf(j,2,l,0)|0))if(!(Pf(j,2,j,0)|0))if(!(Pf(j,2,l,2)|0)){k=j;t=66;break}else k=184;else k=120;else k=56;else{if(!(x&b)){k=j;t=66;break}if(!(c[j+12>>2]|0)){k=j;t=66;break}if(!(Pf(j,2,j,0)|0)){k=j;t=66;break}else k=24}if((r|0)!=0?(E=r+4|0,F=c[E>>2]|0,(F|0)!=0):0){b=q+1|0;if(!q)i=F;else{Xf(11716,d,e)|0;i=c[E>>2]|0}j=r+44|0;if(Qf(c[j>>2]|0,i)|0){Uf(o+1|0,82004,d,0,e)|0;dg(c[j>>2]|0,c[E>>2]|0,0,d,g,e)|0}}else if((i|0)!=0?(c[i+4>>2]|0)!=0:0){b=q+1|0;if(q)Xf(11716,d,e)|0}else b=q;j=Af(k)|0;if((s|0)!=0&(p|0)!=0){if(j|0?(kp(j,s)|0)==0:0){n=1;o=0;p=p+1|0;k=0;m=l;i=0;j=s;break}if(b|0)Xf(11716,d,e)|0;Yf(s,p,d,e)|0;b=b+1|0;n=1;o=0;p=1;k=0;m=l;i=0}else{n=1;o=0;p=1;k=0;m=l;i=0}}else{k=0;l=D?0:l;t=66}while(0);do if((t|0)==66){t=0;if(n|0){if(!((s|0)!=0&(p|0)!=0)){b=q;n=0;o=0;m=l;i=l;j=s;break}if(q|0)Xf(11716,d,e)|0;Yf(s,p,d,e)|0;b=q+1|0;n=0;o=0;p=0;m=l;i=l;j=0;break}if(!u?Pf(k,2,r,2)|0:0){b=q;n=0;o=o+1|0;k=r;m=l;j=s;break}b=q+1|0;if(q|0)Xf(11716,d,e)|0;if(r|0?(G=r+4|0,H=c[G>>2]|0,H|0):0){j=r+44|0;if(!(Qf(c[j>>2]|0,H)|0)){n=0;o=0;m=l;i=l;j=s;break}Uf(o+1|0,82004,d,0,e)|0;dg(c[j>>2]|0,c[G>>2]|0,0,d,g,e)|0;n=0;o=0;m=l;i=l;j=s;break}if(D&(i|0)!=0?(c[i+4>>2]|0)==0:0){n=0;o=0;m=l;i=l;j=s}else{n=0;o=0;m=l;i=l;j=s}}while(0);q=b;v=v+1|0;r=k;l=m;s=j}return (c[A>>2]|0)-B|0}function Cg(a,b,d,f,g,h,i,j,k,l){a=a|0;b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;E=(j|0)!=0;A=E?b:0;B=d+8|0;C=c[B>>2]|0;D=(g|0)==0;y=(k|0)!=0;z=E&y;y=(j|0)==0&y;x=(g|2|0)==3;v=(l|0)!=0;s=0;n=1;w=0;o=0;p=0;l=0;m=0;r=0;t=0;while(1){if((w|0)>(i|0))break;a:do if((w|0)<(i|0)){b=a+(w*24|0)|0;b:do if(D){u=c[a+(w*24|0)+4>>2]|0;if((u|0?c[u+12>>2]|0:0)?(c[u+32>>2]|0)==0:0){b=1;u=34;break}b=c[b>>2]|0;if((b|0)!=0?(c[b+12>>2]|0)!=0:0)b=(c[b+32>>2]|0)==0;else b=0;b=(b^1)<<31>>31;u=33}else{if(x){u=c[a+(w*24|0)+4>>2]|0;if(u|0?c[u+12>>2]|0:0){b=1;u=34;break}b=c[b>>2]|0;if(!b)b=0;else b=(c[b+12>>2]|0)!=0;b=(b^1)<<31>>31;u=33;break}switch(g|0){case 4:{q=c[b>>2]|0;if((q|0?c[q+12>>2]|0:0)?(c[q+32>>2]|0)==0:0){b=0;u=34;break b}b=c[a+(w*24|0)+4>>2]|0;if(!b){q=0;break b}if(!(c[b+12>>2]|0)){q=0;break b}if(!(c[b+32>>2]|0)){b=1;u=34;break b}else{q=0;break b}}case 2:break;default:{q=0;break b}}u=c[a+(w*24|0)+4>>2]|0;if(((((u|0)!=0?(c[u+12>>2]|0)!=0:0)?(c[u+32>>2]|0)>0:0)?(L=c[b>>2]|0,(L|0)!=0):0)?(c[L+12>>2]|0)!=0:0)b=(c[L+32>>2]|0)==0;else b=0;b=(b^1)<<31>>31;u=33}while(0);if((u|0)==33){u=0;if((b|0)>-1)u=34;else q=0}if((u|0)==34){u=0;q=c[a+(w*24|0)+(b<<2)>>2]|0}do if(E){b=c[A+(w*24|0)+4>>2]|0;if(b|0?c[b+12>>2]|0:0){m=b;break}b=c[A+(w*24|0)>>2]|0;if((b|0)!=0?(M=(c[b+12>>2]|0)!=0,M):0)m=c[A+(w*24|0)+((M^1)<<31>>31<<2)>>2]|0;else m=0}while(0);b=(q|0)!=0;do if(z&b?((c[q+56>>2]|0)+(c[q+48>>2]|0)|0)>0:0){b=(m|0)!=0;j=q+68|0;if(((b?(F=c[j>>2]|0,F|0):0)?(G=c[m+64>>2]|0,G|0):0)?Nf(F,4,G,4,0)|0:0){j=50;break}k=c[j>>2]|0;if((k|0?(H=c[q+64>>2]|0,H|0):0)?Nf(k,4,H,4,0)|0:0){j=114;break}if(b){b=c[j>>2]|0;if(!b){b=1;k=q;j=m;u=96;break a}k=c[m+68>>2]|0;if(k|0?Nf(b,4,k,4,0)|0:0){j=178;break}b=c[j>>2]|0;if(!b){b=1;k=q;j=m;u=96;break a}k=c[m+64>>2]|0;if(k){if(Nf(b,4,k,4,0)|0){j=306;break}b=c[j>>2]|0;if(!b){b=1;k=q;j=m;u=96;break a}}k=c[m+68>>2]|0;if(k|0?Nf(b,4,k,2,0)|0:0){j=434;break}}b=c[j>>2]|0;if(!b){b=1;k=q;j=m;u=96;break a}k=c[q+64>>2]|0;if(k){if(Nf(b,4,k,2,0)|0){j=370;break}b=c[j>>2]|0;if(!b){b=1;k=q;j=m;u=96;break a}}if(!(Nf(b,4,b,2,0)|0)){b=1;k=q;j=m;u=96;break a}else j=498}else u=65;while(0);do if((u|0)==65){u=0;if(!(y&b)){k=q;j=m;u=96;break a}if((c[q+48>>2]|0)<=0?(c[q+56>>2]|0)<=0:0){b=c[q+72>>2]|0;if(!b){b=1;k=q;j=m;u=96;break a}if((e[b>>1]|0)<2){b=1;k=q;j=m;u=96;break a}}j=q+68|0;b=c[j>>2]|0;if(!b){b=1;k=q;j=m;u=96;break a}k=c[q+64>>2]|0;if(k){if(Nf(b,4,k,4,0)|0){j=18;break}b=c[j>>2]|0;if(!b){b=1;k=q;j=m;u=96;break a}}k=c[q+64>>2]|0;if(k){if(Nf(b,4,k,2,0)|0){j=274;break}b=c[j>>2]|0;if(!b){b=1;k=q;j=m;u=96;break a}}if(!(Nf(b,4,b,2,0)|0)){b=1;k=q;j=m;u=96;break a}else j=402}while(0);if((l|0)!=0?(c[l+12>>2]|0)!=0:0){b=s+1|0;if(s|0)Xf(11716,d,f)|0;k=c[l+68>>2]|0;if((k|0)!=0?(c[k>>2]|0)>0:0){Uf(o+1|0,82004,d,0,f)|0;hg(c[k+4>>2]|0,0,c[k+16>>2]|0,0,c[k>>2]|0,d,h,f)|0}}else if((r|0)!=0?(c[r+12>>2]|0)!=0:0){b=s+1|0;if(s)Xf(11716,d,f)|0}else b=s;k=Af(j)|0;if((t|0)!=0&(p|0)!=0){if(k|0?(kp(k,t)|0)==0:0){n=1;o=0;p=p+1|0;l=0;j=0;k=t;break}if(b|0)Xf(11716,d,f)|0;Yf(t,p,d,f)|0;b=b+1|0;n=1;o=0;p=1;l=0;j=0}else{n=1;o=0;p=1;l=0;j=0}}else{b=0;k=0;j=E?0:m;u=96}while(0);do if((u|0)==96){u=0;if(n|0){if(!((t|0)!=0&(p|0)!=0)){b=s;n=0;o=0;l=k;m=j;k=t;break}if(s|0)Xf(11716,d,f)|0;Yf(t,p,d,f)|0;b=s+1|0;n=0;o=0;p=0;l=k;m=j;k=0;break}if(((((v&b?(l|0?((c[k+56>>2]|0)+(c[k+48>>2]|0)|0)>0:0):0)?((c[l+56>>2]|0)+(c[l+48>>2]|0)|0)>0:0)?(I=c[k+68>>2]|0,I|0):0)?(J=c[l+68>>2]|0,J|0):0)?Nf(I,4,J,4,0)|0:0){b=s;n=0;o=o+1|0;m=j;j=r;k=t;break}b=s+1|0;if(s|0)Xf(11716,d,f)|0;if((((((l|0)!=0?(c[l+12>>2]|0)!=0:0)?((c[l+56>>2]|0)+(c[l+48>>2]|0)|0)>0:0)?(K=c[l+68>>2]|0,(K|0)!=0):0)?(c[K>>2]|0)>0:0)?(c[K+20>>2]|0)!=0:0){Uf(o+1|0,82004,d,0,f)|0;hg(c[K+12>>2]|0,0,c[K+16>>2]|0,0,c[K>>2]|0,d,h,f)|0;n=0;o=0;l=k;m=j;j=r;k=t}else{n=0;o=0;l=k;m=j;j=r;k=t}}while(0);s=b;w=w+1|0;r=j;t=k}return (c[B>>2]|0)-C|0}function Dg(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;L=e+8|0;M=c[L>>2]|0;x=(g|0)==0;y=(j|0)!=0;v=(k|0)!=0;w=y&v;s=(j|0)==0;t=(g|2|0)==3;j=0;u=0;k=0;d=0;while(1){if((u|0)>=(i|0))break;o=b+(u*24|0)|0;a:do if(x){r=c[b+(u*24|0)+4>>2]|0;if((r|0?c[r+12>>2]|0:0)?(c[r+32>>2]|0)==0:0){l=1;r=32;break}l=c[o>>2]|0;if((l|0)!=0?(c[l+12>>2]|0)!=0:0)l=(c[l+32>>2]|0)==0;else l=0;l=(l^1)<<31>>31;r=31}else{if(t){r=c[b+(u*24|0)+4>>2]|0;if(r|0?c[r+12>>2]|0:0){l=1;r=32;break}l=c[o>>2]|0;if(!l)l=0;else l=(c[l+12>>2]|0)!=0;l=(l^1)<<31>>31;r=31;break}switch(g|0){case 4:{q=c[o>>2]|0;if((q|0?c[q+12>>2]|0:0)?(c[q+32>>2]|0)==0:0){l=0;r=32;break a}l=c[b+(u*24|0)+4>>2]|0;if(!l){q=0;m=0;p=0;break a}if(!(c[l+12>>2]|0)){q=0;m=0;p=0;break a}if(!(c[l+32>>2]|0)){l=1;r=32;break a}else{q=0;m=0;p=0;break a}}case 2:break;default:{q=0;m=0;p=0;break a}}r=c[b+(u*24|0)+4>>2]|0;if(((((r|0)!=0?(c[r+12>>2]|0)!=0:0)?(c[r+32>>2]|0)>0:0)?(J=c[o>>2]|0,(J|0)!=0):0)?(c[J+12>>2]|0)!=0:0)l=(c[J+32>>2]|0)==0;else l=0;l=(l^1)<<31>>31;r=31}while(0);if((r|0)==31){r=0;if((l|0)>-1)r=32;else{q=0;m=0;p=0}}if((r|0)==32){r=0;m=c[b+(u*24|0)+(l<<2)>>2]|0;if(!m){q=0;m=0;p=0}else{q=1;p=c[b+(u*24|0)+8+(l<<2)>>2]|0}}do if(y){n=c[b+(u*24|0)+4>>2]|0;if((n|0)!=0?(c[n+12>>2]|0)!=0:0){l=1;r=41}else{l=c[o>>2]|0;if(((l|0)!=0?(o=(c[l+12>>2]|0)!=0,K=(o^1)<<31>>31,o):0)?(z=c[b+(u*24|0)+(K<<2)>>2]|0,(z|0)!=0):0){l=K;n=z;r=41}else{o=0;n=0}}if((r|0)==41)o=c[b+(u*24|0)+8+(l<<2)>>2]|0;l=(p|0)!=0;if(w&q&l)if(((((c[p+12>>2]|0)!=0?(A=m+68|0,B=c[A>>2]|0,(B|0)!=0):0)?(c[B+20>>2]|0)!=0:0)?(c[p+4>>2]|0)>0:0)?(c[p+32>>2]|0)!=0:0){l=(n|0)==0;if(!l?Rf(p,3,o,0)|0:0){l=54;r=76;break}if(!(Rf(p,3,p,0)|0)){if(!l?Rf(p,3,o,2)|0:0){l=182;r=76;break}if(!(Rf(p,3,p,2)|0)){if((((n|0)!=0&(o|0)!=0?(C=c[n+64>>2]|0,C|0):0)?c[C+20>>2]|0:0)?Rf(p,3,o,1)|0:0){l=310;r=76;break}r=c[A>>2]|0;if((r|0?c[r+20>>2]|0:0)?Rf(p,3,p,1)|0:0){l=374;r=76;break}if(!l?(D=c[n+68>>2]|0,(D|0)!=0):0){if(!(c[D+20>>2]|0)){l=1;r=83;break}if(Rf(p,3,o,3)|0){l=438;r=76}else{l=1;r=83}}else{l=1;r=83}}else{l=246;r=76}}else{l=118;r=76}}else{n=1;l=1;r=65}else{n=v;r=65}}else{n=v;l=(p|0)!=0;r=65}while(0);if((r|0)==65)if(l&(q&(s&n)))if(((((c[p+12>>2]|0)!=0?(E=c[m+68>>2]|0,(E|0)!=0):0)?(F=E+20|0,(c[F>>2]|0)!=0):0)?(c[p+4>>2]|0)>0:0)?(c[p+32>>2]|0)!=0:0)if(!(Rf(p,3,p,0)|0))if(!(Rf(p,3,p,2)|0))if(((c[m+64>>2]|0)!=0?(c[F>>2]|0)!=0:0)?(Rf(p,3,p,1)|0)!=0:0){l=278;r=76}else{l=1;r=83}else{l=150;r=76}else{l=22;r=76}else{l=1;r=83}else r=83;do if((r|0)==76){r=0;l=Af(l)|0;if((d|0)!=0&(k|0)!=0){if(l|0?(kp(l,d)|0)==0:0){k=k+1|0;break}if(j|0)Xf(11716,e,f)|0;Yf(d,k,e,f)|0;j=j+1|0;k=1;d=l}else{k=1;d=l}}else if((r|0)==83){r=0;if((d|0)!=0&(k|0)!=0){if(j|0)Xf(11716,e,f)|0;Yf(d,k,e,f)|0;j=j+1|0;k=0;d=0}n=j+1|0;if(j|0)Xf(11716,e,f)|0;if((((((q&l?(c[p+12>>2]|0)!=0:0)?(G=c[p+4>>2]|0,(G|0)!=0):0)?(H=c[m+68>>2]|0,(H|0)!=0):0)?(c[H>>2]|0)!=0:0)?(c[H+20>>2]|0)!=0:0)?(I=c[p+32>>2]|0,(I|0)!=0):0){ag(a,I,G,0,0,0,e,h,f)|0;j=n}else j=n}while(0);u=u+1|0}if((d|0)!=0&(k|0)!=0){if(j|0)Xf(11716,e,f)|0;Yf(d,k,e,f)|0}return (c[L>>2]|0)-M|0}function Eg(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=e+8|0;d=c[B>>2]|0;if(b){w=(g|0)==0;v=(j|0)!=0;u=v&(k|0)!=0;s=(g|2|0)==3;l=0;t=0;k=0;j=0;while(1){if((t|0)>=(i|0))break;o=b+(t*24|0)|0;a:do if(w){r=c[b+(t*24|0)+4>>2]|0;if((r|0?c[r+12>>2]|0:0)?(c[r+32>>2]|0)==0:0){m=1;r=33;break}m=c[o>>2]|0;if((m|0)!=0?(c[m+12>>2]|0)!=0:0)m=(c[m+32>>2]|0)==0;else m=0;m=(m^1)<<31>>31;r=32}else{if(s){r=c[b+(t*24|0)+4>>2]|0;if(r|0?c[r+12>>2]|0:0){m=1;r=33;break}m=c[o>>2]|0;if(!m)m=0;else m=(c[m+12>>2]|0)!=0;m=(m^1)<<31>>31;r=32;break}switch(g|0){case 4:{q=c[o>>2]|0;if((q|0?c[q+12>>2]|0:0)?(c[q+32>>2]|0)==0:0){m=0;r=33;break a}m=c[b+(t*24|0)+4>>2]|0;if(!m){q=0;p=0;break a}if(!(c[m+12>>2]|0)){q=0;p=0;break a}if(!(c[m+32>>2]|0)){m=1;r=33;break a}else{q=0;p=0;break a}}case 2:break;default:{q=0;p=0;break a}}r=c[b+(t*24|0)+4>>2]|0;if(((((r|0)!=0?(c[r+12>>2]|0)!=0:0)?(c[r+32>>2]|0)>0:0)?(z=c[o>>2]|0,(z|0)!=0):0)?(c[z+12>>2]|0)!=0:0)m=(c[z+32>>2]|0)==0;else m=0;m=(m^1)<<31>>31;r=32}while(0);if((r|0)==32){r=0;if((m|0)>-1)r=33;else{q=0;p=0}}if((r|0)==33){r=0;if(!(c[b+(t*24|0)+(m<<2)>>2]|0)){q=0;p=0}else{q=1;p=c[b+(t*24|0)+8+(m<<2)>>2]|0}}do if(v){n=c[b+(t*24|0)+4>>2]|0;if((n|0)!=0?(c[n+12>>2]|0)!=0:0){m=1;r=42}else{m=c[o>>2]|0;if(((m|0)!=0?(o=(c[m+12>>2]|0)!=0,A=(o^1)<<31>>31,o):0)?(x=c[b+(t*24|0)+(A<<2)>>2]|0,(x|0)!=0):0){m=A;n=x;r=42}else{o=0;n=0}}if((r|0)==42){r=0;o=c[b+(t*24|0)+8+(m<<2)>>2]|0}m=(p|0)!=0;if(u&q&m)if((!((n|0)==0?1:(c[p+4>>2]|0)<1)?(c[n+76>>2]|0)==0:0)?(Rf(p,0,o,0)|0)!=0:0){m=Af(36)|0;if((j|0)!=0&(k|0)!=0){if(m|0?(kp(m,j)|0)==0:0){k=k+1|0;break}if(l|0)Xf(11716,e,f)|0;Yf(j,k,e,f)|0;l=l+1|0;k=1;j=m}else{k=1;j=m}}else{n=1;r=54}else{n=m;r=54}}else{n=(p|0)!=0;r=54}while(0);if((r|0)==54){r=0;if((j|0)!=0&(k|0)!=0){if(l|0)Xf(11716,e,f)|0;Yf(j,k,e,f)|0;l=l+1|0;k=0;j=0}m=l+1|0;if(l|0)Xf(11716,e,f)|0;if(q&n?(y=c[p+4>>2]|0,(y|0)!=0):0){ag(a,c[p+20>>2]|0,y,0,0,0,e,h,f)|0;l=m}else l=m}t=t+1|0}if((j|0)!=0&(k|0)!=0){if(l|0)Xf(11716,e,f)|0;Yf(j,k,e,f)|0}d=(c[B>>2]|0)-d|0}return d|0}function Fg(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;q=b+8|0;r=c[q>>2]|0;w=(e|0)==0;a:do if(w){p=c[a+4>>2]|0;if((p|0?c[p+12>>2]|0:0)?(c[p+32>>2]|0)==0:0){i=1;o=30;break}i=c[a>>2]|0;if((i|0)!=0?(c[i+12>>2]|0)!=0:0)i=(c[i+32>>2]|0)!=0;else i=1;i=i<<31>>31;o=29}else{if((e|2|0)==3){p=c[a+4>>2]|0;if(p|0?c[p+12>>2]|0:0){i=1;o=30;break}i=c[a>>2]|0;if(!i)i=1;else i=(c[i+12>>2]|0)==0;i=i<<31>>31;o=29;break}switch(e|0){case 4:{p=c[a>>2]|0;if((p|0?c[p+12>>2]|0:0)?(c[p+32>>2]|0)==0:0){i=0;o=30;break a}i=c[a+4>>2]|0;if(!i){i=0;break a}if(!(c[i+12>>2]|0)){i=0;break a}if(!(c[i+32>>2]|0)){i=1;o=30;break a}else{i=0;break a}}case 2:break;default:{i=0;break a}}p=c[a+4>>2]|0;if(((((p|0)!=0?(c[p+12>>2]|0)!=0:0)?(c[p+32>>2]|0)>0:0)?(i=c[a>>2]|0,(i|0)!=0):0)?(c[i+12>>2]|0)!=0:0)i=(c[i+32>>2]|0)!=0;else i=1;i=i<<31>>31;o=29}while(0);if((o|0)==29)if((i|0)>-1)o=30;else i=0;if((o|0)==30)i=c[a+8+(i<<2)>>2]|0;p=(e|2|0)==3;m=(h|0)==0;l=0;n=1;j=0;k=i;while(1){if((n|0)>(g|0))break;b:do if((n|0)<(g|0)){i=a+(n*24|0)|0;c:do if(w){h=c[a+(n*24|0)+4>>2]|0;if((h|0?c[h+12>>2]|0:0)?(c[h+32>>2]|0)==0:0){i=1;break}i=c[i>>2]|0;if((i|0)!=0?(c[i+12>>2]|0)!=0:0)i=(c[i+32>>2]|0)==0;else i=0;i=(i^1)<<31>>31;o=62}else{if(p){h=c[a+(n*24|0)+4>>2]|0;if(h|0?c[h+12>>2]|0:0){i=1;break}i=c[i>>2]|0;if(!i)i=0;else i=(c[i+12>>2]|0)!=0;i=(i^1)<<31>>31;o=62;break}switch(e|0){case 4:{h=c[i>>2]|0;if((h|0?c[h+12>>2]|0:0)?(c[h+32>>2]|0)==0:0){i=0;break c}i=c[a+(n*24|0)+4>>2]|0;if(!i){h=0;break b}if(!(c[i+12>>2]|0)){h=0;break b}if(!(c[i+32>>2]|0)){i=1;break c}else{h=0;break b}}case 2:break;default:{h=0;break b}}o=c[a+(n*24|0)+4>>2]|0;if(((((o|0)!=0?(c[o+12>>2]|0)!=0:0)?(c[o+32>>2]|0)>0:0)?(s=c[i>>2]|0,(s|0)!=0):0)?(c[s+12>>2]|0)!=0:0)i=(c[s+32>>2]|0)==0;else i=0;i=(i^1)<<31>>31;o=62}while(0);if((o|0)==62){o=0;if((i|0)<=-1){h=0;break}}h=c[a+(n*24|0)+8+(i<<2)>>2]|0}else h=0;while(0);if(!m?(Pf(h,1,k,1)|0)!=0:0){i=l;j=j+1|0;h=k}else{i=l+1|0;if(l|0)Xf(11716,b,d)|0;if(((k|0)!=0?(t=k+8|0,u=c[t>>2]|0,(u|0)!=0):0)?(v=k+40|0,(Qf(c[v>>2]|0,u)|0)!=0):0){Uf(j+1|0,82004,b,0,d)|0;dg(c[v>>2]|0,c[t>>2]|0,0,b,f,d)|0;j=0}else j=0}l=i;n=n+1|0;k=h}return (c[q>>2]|0)-r|0}function Gg(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;p=b+8|0;q=c[p>>2]|0;r=(e|0)==0;s=(e|2|0)==3;n=(h|0)==0;l=0;o=0;j=0;m=0;while(1){if((o|0)>(g|0))break;a:do if((o|0)<(g|0)){h=a+(o*24|0)|0;b:do if(r){i=c[a+(o*24|0)+4>>2]|0;if((i|0?c[i+12>>2]|0:0)?(c[i+32>>2]|0)==0:0){h=1;break}h=c[h>>2]|0;if((h|0)!=0?(c[h+12>>2]|0)!=0:0)h=(c[h+32>>2]|0)==0;else h=0;h=(h^1)<<31>>31;k=32}else{if(s){i=c[a+(o*24|0)+4>>2]|0;if(i|0?c[i+12>>2]|0:0){h=1;break}h=c[h>>2]|0;if(!h)h=0;else h=(c[h+12>>2]|0)!=0;h=(h^1)<<31>>31;k=32;break}switch(e|0){case 4:{i=c[h>>2]|0;if((i|0?c[i+12>>2]|0:0)?(c[i+32>>2]|0)==0:0){h=0;break b}h=c[a+(o*24|0)+4>>2]|0;if(!h){i=0;break a}if(!(c[h+12>>2]|0)){i=0;break a}if(!(c[h+32>>2]|0)){h=1;break b}else{i=0;break a}}case 2:break;default:{i=0;break a}}k=c[a+(o*24|0)+4>>2]|0;if(((((k|0)!=0?(c[k+12>>2]|0)!=0:0)?(c[k+32>>2]|0)>0:0)?(t=c[h>>2]|0,(t|0)!=0):0)?(c[t+12>>2]|0)!=0:0)h=(c[t+32>>2]|0)==0;else h=0;h=(h^1)<<31>>31;k=32}while(0);if((k|0)==32){k=0;if((h|0)<=-1){i=0;break}}i=c[a+(o*24|0)+8+(h<<2)>>2]|0}else i=0;while(0);if(!n?(Tf(i,m)|0)!=0:0){h=l;j=j+1|0;i=m}else if(o){h=l+1|0;if(l|0)Xf(11716,b,d)|0;if(((m|0)!=0?(u=m+4|0,v=c[u>>2]|0,(v|0)!=0):0)?(w=m+56|0,(Sf(c[w>>2]|0,v)|0)!=0):0){Uf(j+1|0,82004,b,0,d)|0;cg(c[w>>2]|0,c[u>>2]|0,0,b,f,d)|0;j=0}else j=0}else{h=l;j=0}l=h;o=o+1|0;m=i}return (c[p>>2]|0)-q|0}function Hg(a,d,e,f,g,h){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;s=(g|0)==0;m=h+1|0;x=(g|2|0)==3;q=0;l=0;j=0;while(1){if((q|0)>=(h|0)){m=j;break}i=a+(q*24|0)|0;a:do if(s){r=c[a+(q*24|0)+4>>2]|0;if((r|0?c[r+12>>2]|0:0)?(c[r+32>>2]|0)==0:0){i=1;r=32;break}i=c[i>>2]|0;if((i|0)!=0?(c[i+12>>2]|0)!=0:0)i=(c[i+32>>2]|0)==0;else i=0;i=(i^1)<<31>>31;r=31}else{if(x){r=c[a+(q*24|0)+4>>2]|0;if(r|0?c[r+12>>2]|0:0){i=1;r=32;break}i=c[i>>2]|0;if(!i)i=0;else i=(c[i+12>>2]|0)!=0;i=(i^1)<<31>>31;r=31;break}switch(g|0){case 4:{k=c[i>>2]|0;if((k|0?c[k+12>>2]|0:0)?(c[k+32>>2]|0)==0:0){i=0;r=32;break a}i=c[a+(q*24|0)+4>>2]|0;if(!i){k=0;break a}if(!(c[i+12>>2]|0)){k=0;break a}if(!(c[i+32>>2]|0)){i=1;r=32;break a}else{k=0;break a}}case 2:break;default:{k=0;break a}}r=c[a+(q*24|0)+4>>2]|0;if(((((r|0)!=0?(c[r+12>>2]|0)!=0:0)?(c[r+32>>2]|0)>0:0)?(o=c[i>>2]|0,(o|0)!=0):0)?(c[o+12>>2]|0)!=0:0)i=(c[o+32>>2]|0)==0;else i=0;i=(i^1)<<31>>31;r=31}while(0);if((r|0)==31){r=0;if((i|0)>-1)r=32;else k=0}if((r|0)==32){r=0;k=c[a+(q*24|0)+(i<<2)>>2]|0}i=c[d+(q*24|0)+4>>2]|0;if(!((i|0)!=0?(c[i+12>>2]|0)!=0:0)){i=c[d+(q*24|0)>>2]|0;if((i|0)!=0?(p=(c[i+12>>2]|0)!=0,p):0)i=c[d+(q*24|0)+((p^1)<<31>>31<<2)>>2]|0;else i=0}do if((((k|0)!=0?(i|0)!=0&(c[k+12>>2]|0)>0:0)?(c[i+12>>2]|0)>0:0)?(n=b[a+(q*24|0)+16>>1]|0,n<<16>>16!=(b[d+(q*24|0)+16>>1]|0)):0){if(!((l|0)!=0&(j|0)!=0)){i=Dq(m,2)|0;if(!i)break;j=Dq(m,2)|0;if(!j)break}else i=l;b[i+(n<<16>>16<<1)>>1]=q+1}else i=l;while(0);q=q+1|0;l=i}i=(l|0)!=0;j=(m|0)!=0;if(!(i&j)){if(i){Cq(l);i=-1}else i=0;if(j){Cq(m);i=-1}}else{k=0;while(1){if((k|0)>=(h|0))break;i=a+(k*24|0)|0;b:do if(s){r=c[a+(k*24|0)+4>>2]|0;if((r|0?c[r+12>>2]|0:0)?(c[r+32>>2]|0)==0:0){i=1;r=78;break}i=c[i>>2]|0;if((i|0)!=0?(c[i+12>>2]|0)!=0:0)i=(c[i+32>>2]|0)==0;else i=0;i=(i^1)<<31>>31;r=77}else{if(x){r=c[a+(k*24|0)+4>>2]|0;if(r|0?c[r+12>>2]|0:0){i=1;r=78;break}i=c[i>>2]|0;if(!i)i=0;else i=(c[i+12>>2]|0)!=0;i=(i^1)<<31>>31;r=77;break}switch(g|0){case 4:{q=c[i>>2]|0;if((q|0?c[q+12>>2]|0:0)?(c[q+32>>2]|0)==0:0){i=0;r=78;break b}i=c[a+(k*24|0)+4>>2]|0;if(!i){j=0;break b}if(!(c[i+12>>2]|0)){j=0;break b}if(!(c[i+32>>2]|0)){i=1;r=78;break b}else{j=0;break b}}case 2:break;default:{j=0;break b}}r=c[a+(k*24|0)+4>>2]|0;if(((((r|0)!=0?(c[r+12>>2]|0)!=0:0)?(c[r+32>>2]|0)>0:0)?(t=c[i>>2]|0,(t|0)!=0):0)?(c[t+12>>2]|0)!=0:0)i=(c[t+32>>2]|0)==0;else i=0;i=(i^1)<<31>>31;r=77}while(0);if((r|0)==77){r=0;if((i|0)>-1)r=78;else j=0}if((r|0)==78){r=0;j=c[a+(k*24|0)+(i<<2)>>2]|0}i=c[d+(k*24|0)+4>>2]|0;if(!((i|0)!=0?(c[i+12>>2]|0)!=0:0)){i=c[d+(k*24|0)>>2]|0;if((i|0)!=0?(u=(c[i+12>>2]|0)!=0,u):0)i=c[d+(k*24|0)+((u^1)<<31>>31<<2)>>2]|0;else i=0}if((((j|0?(i|0)!=0&(c[j+12>>2]|0)>0:0)?(c[i+12>>2]|0)>0:0)?(v=b[d+(k*24|0)+16>>1]|0,(b[a+(k*24|0)+16>>1]|0)!=v<<16>>16):0)?(w=b[l+(v<<16>>16<<1)>>1]|0,w<<16>>16):0)b[m+(k+1<<1)>>1]=w;k=k+1|0}c[e>>2]=l;c[f>>2]=m;i=1}return i|0}function Ig(a,d,e,f,g,h,i){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;m=f+8|0;n=c[m>>2]|0;o=(d|0)!=0;p=(e|0)!=0;a:do if(o&p){q=1;while(1){if((q|0)>(i|0))break a;j=b[e+(q<<1)>>1]|0;if(j<<16>>16){k=q;l=0;while(1){if(!(j<<16>>16)){j=l;break}r=j&65535;b[d+(l<<1)>>1]=k;b[e+(k<<1)>>1]=0;j=b[e+(r<<1)>>1]|0;k=r;l=l+1|0}Xf(81769,f,g)|0;ag(a,d,j,0,0,0,f,h,g)|0;Xf(12846,f,g)|0}q=q+1|0}}while(0);if(o)Cq(d);if(p)Cq(e);return (c[m>>2]|0)-n|0}function Jg(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;v=b+8|0;w=c[v>>2]|0;z=(e|0)==0;t=(h|0)!=0;u=(e|2|0)==3;r=(i|0)==0;n=0;k=1;s=0;l=0;m=0;o=0;q=0;while(1){if((s|0)>(g|0))break;a:do if((s|0)<(g|0)){h=a+(s*24|0)|0;b:do if(z){j=c[a+(s*24|0)+4>>2]|0;if((j|0?c[j+12>>2]|0:0)?(c[j+32>>2]|0)==0:0){h=1;break}h=c[h>>2]|0;if((h|0)!=0?(c[h+12>>2]|0)!=0:0)h=(c[h+32>>2]|0)==0;else h=0;h=(h^1)<<31>>31;p=32}else{if(u){j=c[a+(s*24|0)+4>>2]|0;if(j|0?c[j+12>>2]|0:0){h=1;break}h=c[h>>2]|0;if(!h)h=0;else h=(c[h+12>>2]|0)!=0;h=(h^1)<<31>>31;p=32;break}switch(e|0){case 4:{j=c[h>>2]|0;if((j|0?c[j+12>>2]|0:0)?(c[j+32>>2]|0)==0:0){h=0;break b}h=c[a+(s*24|0)+4>>2]|0;if(!h){i=0;p=49;break a}if(!(c[h+12>>2]|0)){i=0;p=49;break a}if(!(c[h+32>>2]|0)){h=1;break b}else{i=0;p=49;break a}}case 2:break;default:{i=0;p=49;break a}}p=c[a+(s*24|0)+4>>2]|0;if(((((p|0)!=0?(c[p+12>>2]|0)!=0:0)?(c[p+32>>2]|0)>0:0)?(A=c[h>>2]|0,(A|0)!=0):0)?(c[A+12>>2]|0)!=0:0)h=(c[A+32>>2]|0)==0;else h=0;h=(h^1)<<31>>31;p=32}while(0);if((p|0)==32){p=0;if((h|0)<=-1){i=0;p=49;break}}h=c[a+(s*24|0)+8+(h<<2)>>2]|0;if((t&(h|0)!=0?(c[h+12>>2]|0)!=0:0)?(Pf(h,3,h,1)|0)!=0:0){if((o|0)!=0?(c[o+4>>2]|0)!=0:0){h=n+1|0;if(n|0)Xf(11716,b,d)|0;j=o+48|0;i=o+8|0;if(Qf(c[j>>2]|0,c[i>>2]|0)|0){Uf(l+1|0,82004,b,0,d)|0;dg(c[j>>2]|0,c[i>>2]|0,0,b,f,d)|0}}else h=n;i=Af(24)|0;if((q|0)!=0&(m|0)!=0){if(i|0?(kp(i,q)|0)==0:0){k=1;l=0;m=m+1|0;j=0;i=q;break}if(h|0)Xf(11716,b,d)|0;Yf(q,m,b,d)|0;h=h+1|0;k=1;l=0;m=1;j=0}else{k=1;l=0;m=1;j=0}}else{i=h;p=49}}else{i=0;p=49}while(0);do if((p|0)==49){p=0;if(k|0){if(!((q|0)!=0&(m|0)!=0)){h=n;k=0;l=0;j=i;i=q;break}if(n|0)Xf(11716,b,d)|0;Yf(q,m,b,d)|0;h=n+1|0;k=0;l=0;m=0;j=i;i=0;break}if(!r?Pf(i,3,o,3)|0:0){h=n;k=0;l=l+1|0;j=o;i=q;break}h=n+1|0;if(n|0)Xf(11716,b,d)|0;if(((o|0)!=0?(c[o+4>>2]|0)!=0:0)?(x=o+48|0,y=o+8|0,(Qf(c[x>>2]|0,c[y>>2]|0)|0)!=0):0){Uf(l+1|0,82004,b,0,d)|0;dg(c[x>>2]|0,c[y>>2]|0,0,b,f,d)|0;k=0;l=0;j=i;i=q}else{k=0;l=0;j=i;i=q}}while(0);n=h;s=s+1|0;o=j;q=i}return (c[v>>2]|0)-w|0}function Kg(c,d){c=c|0;d=d|0;var e=0,f=0,g=0;g=c+(d*176|0)+92|0;e=a[g>>0]|0;f=a[c+(d*176|0)+93>>0]|0;do if(e<<24>>24==f<<24>>24){e=uo(a[c+(d*176|0)+6>>0]|0)|0;if(e|0){if((e|0)>(a[g>>0]|0)){if(a[c+(d*176|0)+94>>0]|0){e=1;break}e=a[c+(d*176|0)+99>>0]|0;if(e<<24>>24==-1){e=1;break}}else e=a[c+(d*176|0)+99>>0]|0;if(e<<24>>24==0?b[c+(d*176|0)+110>>1]|0:0){e=1;break}}e=0}else{if(((e<<24>>24)+1|0)==(f<<24>>24|0)?ki(a[c+(d*176|0)+6>>0]|0)|0:0){e=1;break}e=0}while(0);return e|0}function Lg(a,b,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;c[o>>2]=0;c[p>>2]=0;if((j|0)<8)m=-1;else m=Qg(a,b,d,e,f,g,7,h,i,1,2,k,l,m,n,o,p,q,r,s)|0;return m|0}function Mg(f,g,h,j,k,l,m,n,o,p,q,r,s,t,u,v){f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;t=t|0;u=u|0;v=v|0;var w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;M=i;i=i+144|0;G=M+132|0;I=M+64|0;D=M;E=M+126|0;F=M+120|0;a:do if((j+2|0)<=8){switch(j|0){case 4:case 6:break;default:{w=-1;break a}}C=c[s>>2]|0;H=c[r>>2]|0;A=h+4|0;K=e[g+((e[A>>1]|0)*176|0)+8+(m<<1)>>1]|0;J=e[g+((e[h>>1]|0)*176|0)+8+(l<<1)>>1]|0;if((oi(g,K,E)|0)!=0?(oi(g,J,F)|0)!=0:0){B=0;while(1){if((B|0)==2)break;z=B|0?J:K;x=g+(z*176|0)+108|0;k=b[x>>1]|0;if(!(k<<16>>16)){li(I+(B*28|0)|0,g,z,2)|0;mi(I+(B*28|0)+10|0,g,z,2);k=b[x>>1]|0}else{x=I+(B*28|0)|0;y=x+28|0;do{b[x>>1]=0;x=x+2|0}while((x|0)<(y|0))}b[I+(B*28|0)+26>>1]=z;b[I+(B*28|0)+22>>1]=k;b[I+(B*28|0)+24>>1]=0;B=B+1|0}k=b[A>>1]|0;B=d[g+((k&65535)*176|0)+72+m>>0]&15;a[G>>0]=B;switch(B|0){case 9:case 4:case 2:case 1:{b[D>>1]=k;b[D+2>>1]=m;x=1;k=2;break}default:{x=1;k=0}}while(1){if((x|0)>(j|0)){z=x;break}m=a[h+(x<<2)+2>>0]|0;a[G+x>>0]=m;switch(m<<24>>24){case 9:case 4:case 2:case 1:{b[D+(k<<2)>>1]=b[h+(x<<2)>>1]|0;b[D+(k<<2)+2>>1]=a[h+(x<<2)+3>>0]|0;k=k+2|0;break}default:{}}x=x+1|0}x=b[h>>1]|0;h=d[g+((x&65535)*176|0)+72+l>>0]&15;y=z+1|0;a[G+z>>0]=h;switch(h|0){case 9:case 4:case 2:case 1:{b[D+(k<<2)>>1]=x;b[D+(k<<2)+2>>1]=l;k=k+2|0;break}default:{}}switch(Ng(G,y)|0){case 0:{w=0;break a}case 2:{if((b[g+(J*176|0)+108>>1]|0)==0?(a[F+4>>0]|0)==0:0){w=0;break a}if((b[g+(K*176|0)+108>>1]|0)==0?(a[E+3>>0]|0)==0:0){w=0;break a}break}case 1:{if((b[g+(J*176|0)+108>>1]|0)==0?(a[F+3>>0]|0)==0:0){w=0;break a}if((b[g+(K*176|0)+108>>1]|0)==0?(a[E+4>>0]|0)==0:0){w=0;break a}break}default:{}}y=Og(g,D,k,p,q,C)|0;x=Pg(I,2,n,o,H)|0;if((x|y|0)>-1){if((y|0)<=(c[s>>2]|0)){o=(x|0)>(c[r>>2]|0);k=o&1;if(o)L=30}else{k=1;L=30}if((L|0)==30){c[s>>2]=y;c[r>>2]=x}if(k){L=b[g+(K*176|0)+108>>1]|0;if((L<<16>>16==0?1:L<<16>>16!=(b[g+(J*176|0)+108>>1]|0))?(w=xk(f,t,u,g,v,K,J,1)|0,(w|0)<1):0)break;else w=k}else w=0}else w=0}else w=0}else w=-1;while(0);i=M;return w|0}function Ng(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;a:do if((c|0)<2)d=0;else{d=a[b>>0]|0;switch(d<<24>>24){case 6:case 3:{d=0;break a}case 8:{e=8;h=1;d=0;break}case 1:{d=2;i=4;break}default:{d=d<<24>>24==2&1;i=4}}if((i|0)==4){e=4;h=1}while(1){if((h|0)>=(c|0))break;f=a[b+h>>0]|0;switch(f<<24>>24){case 8:{f=8;g=1;e=8;break}case 9:case 4:{g=1;i=8;break}default:{g=0;i=8}}if((i|0)==8)i=0;b:do if(!(d<<24>>24))switch(f<<24>>24){case 1:{d=2;break b}case 2:{d=1;break b}default:if(!g){d=0;break a}else{d=0;break b}}else{if(!(g|0?1:f<<24>>24==d<<24>>24)){d=0;break a}d=d<<24>>24==1?2:1}while(0);h=h+1|0}d=d<<24>>24==0?e:d<<24>>24==1?2:1}while(0);return d|0}function Og(c,d,f,g,h,i){c=c|0;d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=0;while(1){if((o|0)>=(f|0)){o=0;break}l=b[d+(o<<2)>>1]|0;n=b[c+((l&65535)*176|0)+8+(e[d+(o<<2)+2>>1]<<1)>>1]|0;m=n&65535;k=a[c+(m*176|0)+92>>0]|0;j=0;while(1){if((j|0)>=(k|0))break;if(l<<16>>16==(b[c+(m*176|0)+8+(j<<1)>>1]|0)){p=6;break}j=j+1|0}if((p|0)==6){p=0;m=o|1;b[d+(m<<2)>>1]=n;b[d+(m<<2)+2>>1]=j}o=o+2|0}while(1){if((o|0)>=(f|0))break;k=d+(o<<2)|0;l=d+(o<<2)+2|0;n=o|1;m=d+(n<<2)|0;n=d+(n<<2)+2|0;j=0;while(1){if((j|0)>=(i|0))break;c=b[g+(j<<2)>>1]|0;if(c<<16>>16==(b[k>>1]|0)?(b[g+(j<<2)+2>>1]|0)==(b[l>>1]|0):0)break;if(c<<16>>16==(b[m>>1]|0)?(b[g+(j<<2)+2>>1]|0)==(b[n>>1]|0):0)break;j=j+1|0}if((j|0)==(i|0)){if((i|0)>(h|0)){i=-1;break}p=g+(i<<2)|0;c=d+(o<<2)|0;c=e[c>>1]|e[c+2>>1]<<16;b[p>>1]=c;b[p+2>>1]=c>>>16;i=i+1|0}o=o+2|0}return i|0}function Pg(a,c,d,e,f){a=a|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;j=0;while(1){if((j|0)>=(c|0))break;h=a+(j*28|0)+26|0;g=0;while(1){if((g|0)>=(f|0))break;if((b[d+(g*28|0)+26>>1]|0)==(b[h>>1]|0))break;g=g+1|0}if((g|0)==(f|0)){if((f|0)>(e|0)){f=-1;break}i=f+1|0;f=d+(f*28|0)|0;g=a+(j*28|0)|0;h=f+28|0;do{b[f>>1]=b[g>>1]|0;f=f+2|0;g=g+2|0}while((f|0)<(h|0));f=i}j=j+1|0}return f|0}function Qg(c,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x){c=c|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;t=t|0;u=u|0;v=v|0;w=w|0;x=x|0;var y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;k=k+-1|0;b[m>>1]=g;z=m+2|0;a[z>>0]=0;A=m+3|0;a[A>>0]=-1;b[l+(g<<1)>>1]=1;if((i|0)>-1)K=e[f+(g*176|0)+8+(i<<1)>>1]|0;else K=-1;if((h|0)>-1){J=b[f+(g*176|0)+8+(h<<1)>>1]|0;y=J&65535;a[z>>0]=d[f+(g*176|0)+72+h>>0]&15;a[A>>0]=h;b[m+4>>1]=J;a[m+6>>0]=0;a[m+7>>0]=-1;b[l+(y<<1)>>1]=2;if((j|0)>-1){H=e[f+(y*176|0)+8+(j<<1)>>1]|0;I=1}else{H=-1;I=1}}else{H=-1;I=0}J=I;y=0;a:while(1){g=(J|0)<(I|0);B=m+(J<<2)+3|0;C=m+(J<<2)|0;D=m+(J<<2)+2|0;E=(J|0)<(k|0);F=(J|0)==(k|0);G=y;b:while(1){c:while(1){if(g){k=J;y=G;break a}A=(a[B>>0]|0)+1<<24>>24;a[B>>0]=A;y=A<<24>>24;z=e[C>>1]|0;if(A<<24>>24>=(a[f+(z*176|0)+92>>0]|0)){y=G;g=19;break b}a[D>>0]=d[f+(z*176|0)+72+y>>0]&15;A=b[f+(z*176|0)+8+(y<<1)>>1]|0;y=A&65535;if((y|0)==(K|0)|(y|0)==(H|0))continue;z=l+(y<<1)|0;switch(b[z>>1]|0){case 0:if(E&(ub[o&15](f,y)|0)!=0){y=G;g=18;break b}else continue c;case 1:if(F)break c;else continue c;default:continue c}}y=ob[n&3](c,f,m,k,h,i,j,p,q,r,s,t,u,v,w,x)|0;if((y|0)<0)break a;G=y+G|0}if((g|0)==18){G=J+1|0;b[m+(G<<2)>>1]=A;a[m+(G<<2)+2>>0]=0;a[m+(G<<2)+3>>0]=-1;b[z>>1]=J+2;J=G;continue}else if((g|0)==19){b[l+(z<<1)>>1]=0;J=J+-1|0;continue}}while(1){if((k|0)<=-1)break;b[l+(e[m+(k<<2)>>1]<<1)>>1]=0;k=k+-1|0}return y|0}function Rg(a,b,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;c[o>>2]=0;c[p>>2]=0;if((j|0)<6)m=-1;else m=Qg(a,b,d,e,f,g,5,h,i,1,2,k,l,m,n,o,p,q,r,s)|0;return m|0}function Sg(a,b,d,e,f,g,h,i,j,k,l,m,n,o,p,q){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;c[m>>2]=0;c[n>>2]=0;if((h|0)<6)k=-1;else k=Qg(a,b,d,e,-1,-1,5,f,g,2,2,i,j,k,l,m,n,o,p,q)|0;return k|0}function Tg(d,f,g,h,j,k,l,m,n,o,p,q,r,s,t,u){d=d|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;t=t|0;u=u|0;var v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;J=i;i=i+112|0;D=J+100|0;H=J+32|0;A=J;B=J+94|0;C=J+88|0;y=e[g>>1]|0;z=e[g+4>>1]|0;a:do if(((!((h|0)!=4|(l&k|0)>-1)?(G=c[r>>2]|0,I=c[q>>2]|0,(oi(f,y,B)|0)!=0):0)?(oi(f,z,C)|0)!=0:0)?(E=f+(y*176|0)+108|0,w=b[E>>1]|0,F=f+(z*176|0)+108|0,x=b[F>>1]|0,!((w<<16>>16!=0|0)==((x<<16>>16!=0)<<31>>31|0)?(((a[f+(y*176|0)+99>>0]|0)==-1&1)+(a[f+(y*176|0)+94>>0]|0)+(a[f+(z*176|0)+94>>0]|0)+((a[f+(z*176|0)+99>>0]|0)==-1&1)|0)!=1:0)):0){if((w<<16>>16==0?1:w<<16>>16!=x<<16>>16)?(v=xk(d,s,t,f,u,y,z,1)|0,(v|0)<=0):0)break;else h=0;while(1){if((h|0)==2){j=1;v=0;break}x=h|0?y:z;j=f+(x*176|0)+108|0;v=b[j>>1]|0;if(!(v<<16>>16)){li(H+(h*28|0)|0,f,x,2)|0;mi(H+(h*28|0)+10|0,f,x,2);v=b[j>>1]|0}else{j=H+(h*28|0)|0;w=j+28|0;do{b[j>>1]=0;j=j+2|0}while((j|0)<(w|0))}b[H+(h*28|0)+26>>1]=x;b[H+(h*28|0)+22>>1]=v;b[H+(h*28|0)+24>>1]=0;h=h+1|0}while(1){if((j|0)>4)break;z=a[g+(j<<2)+2>>0]|0;a[D+(j+-1)>>0]=z;switch(z<<24>>24){case 9:case 4:case 2:case 1:{b[A+(v<<2)>>1]=b[g+(j<<2)>>1]|0;b[A+(v<<2)+2>>1]=a[g+(j<<2)+3>>0]|0;v=v+2|0;break}default:{}}j=j+1|0}switch(Ng(D,4)|0){case 0:{v=0;break a}case 1:{if((b[E>>1]|0)==0?(a[B+3>>0]|0)==0:0){v=0;break a}if((b[F>>1]|0)==0?(a[C+4>>0]|0)==0:0){v=0;break a}break}case 2:{if((b[E>>1]|0)==0?(a[B+4>>0]|0)==0:0){v=0;break a}if((b[F>>1]|0)==0?(a[C+3>>0]|0)==0:0){v=0;break a}break}default:{}}w=Og(f,A,v,o,p,G)|0;j=Pg(H,2,m,n,I)|0;if((j|w|0)>-1){if((w|0)<=(c[r>>2]|0)){n=(j|0)>(c[q>>2]|0);v=n&1;if(!n)break}else v=1;c[r>>2]=w;c[q>>2]=j}else v=0}else v=0;while(0);i=J;return v|0}function Ug(a,b,d,e,f,g,h,i,j,k,l,m,n,o,p){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;c[l>>2]=0;c[m>>2]=0;if((g|0)<8)j=-1;else j=Qg(a,b,d,-1,-1,-1,6,e,f,3,2,h,i,j,k,l,m,n,o,p)|0;return j|0}function Vg(f,g,h,j,k,l,m,n,o,p,q,r,s,t,u,v){f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;t=t|0;u=u|0;v=v|0;var w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0;R=i;i=i+144|0;K=R+132|0;Q=R+64|0;P=R;L=R+126|0;J=R+120|0;a:do if((j|0)==5&(l&k&m|0)<0){N=c[s>>2]|0;O=c[r>>2]|0;M=e[h>>1]|0;z=b[h+12>>1]|0;x=z&65535;if((a[g+(x*176|0)+92>>0]|0)==3?(a[g+(x*176|0)+162>>0]|0)!=0:0){l=h+16|0;m=h+8|0;j=0;k=0;while(1){if((j|0)>=3){A=9;break}I=b[g+(x*176|0)+8+(j<<1)>>1]|0;k=I&65535;if(I<<16>>16!=(b[m>>1]|0)?I<<16>>16!=(b[l>>1]|0):0){I=k;break}j=j+1|0}if((A|0)==9)if((j|0)==3){w=0;break}else I=k;x=d[g+(x*176|0)+72+j>>0]&15;y=x&255;l=(x|0)!=1;if(l)switch(x|0){case 2:case 4:case 8:case 9:break;default:{w=0;break a}}E=oi(g,I,L)|0;if(E){F=((a[g+(I*176|0)+99>>0]|0)==-1&1)+(a[g+(I*176|0)+94>>0]|0)|0;if(((x|0)==1?(a[L+3>>0]|0)==0:0)?(b[g+(I*176|0)+108>>1]|0)==0:0){w=0;break}G=oi(g,M,J)|0;if(G){H=((a[g+(M*176|0)+99>>0]|0)==-1&1)+(a[g+(M*176|0)+94>>0]|0)|0;C=b[g+(I*176|0)+108>>1]|0;D=C<<16>>16==0;if(D)if((x|0)==2|(a[L+3>>0]|0)==0)k=0;else A=20;else if((x|0)==2)k=0;else A=20;if((A|0)==20)if(!(b[g+(M*176|0)+108>>1]|0))k=(a[J+1>>0]|0)>(a[g+(M*176|0)+92>>0]|0);else k=1;m=k&1;B=b[g+(M*176|0)+108>>1]|0;if(B<<16>>16==0?(a[J+3>>0]|0)==0:0)k=0;else A=24;do if((A|0)==24){if(D?(a[L+1>>0]|0)<=(a[g+(I*176|0)+92>>0]|0):0){k=0;break}k=l}while(0);if((m|0)!=(k<<31>>31|0)){A=K+5|0;a[A>>0]=y;a[K>>0]=y;switch(x|0){case 1:case 2:case 4:case 9:{b[P>>1]=z;b[P+2>>1]=j;j=0;k=2;break}default:{j=0;k=0}}b:while(1){if((j|0)>=3){z=k;break}x=j+3|0;y=2-j|0;j=j+1|0;m=0;while(1){if((m|0)==2)continue b;l=(m|0)==0?y:x;z=a[h+(l<<2)+2>>0]|0;a[K+(m*5|0)+j>>0]=z;switch(z<<24>>24){case 9:case 4:case 2:case 1:{b[P+(k<<2)>>1]=b[h+(l<<2)>>1]|0;b[P+(k<<2)+2>>1]=a[h+(l<<2)+3>>0]|0;k=k+2|0;break}default:{}}m=m+1|0}}if((Ng(K,4)|0)!=0?(Ng(A,4)|0)!=0:0){if(D|C<<16>>16!=B<<16>>16?(w=xk(f,t,u,g,v,M,I,1)|0,(w|0)<=0):0)break;y=J+1|0;m=L+1|0;w=0;while(1){if((w|0)>=2)break;k=(w|0)!=0;x=k?M:I;l=g+(x*176|0)+108|0;j=b[l>>1]|0;if(!(j<<16>>16)){if((((k?a[y>>0]|0:a[m>>0]|0)<<24>>24)+(k?H:F)|0)!=((k?G:E)|0)){w=0;break a}li(Q+(w*28|0)|0,g,x,2)|0;mi(Q+(w*28|0)+10|0,g,x,2);j=b[l>>1]|0}else{k=Q+(w*28|0)|0;l=k+28|0;do{b[k>>1]=0;k=k+2|0}while((k|0)<(l|0))}b[Q+(w*28|0)+26>>1]=x;b[Q+(w*28|0)+22>>1]=j;b[Q+(w*28|0)+24>>1]=0;w=w+1|0}k=Og(g,P,z,p,q,N)|0;j=Pg(Q,w,n,o,O)|0;if((j|k|0)>-1){if((k|0)<=(c[s>>2]|0)){o=(j|0)>(c[r>>2]|0);w=o&1;if(!o)break}else w=1;c[s>>2]=k;c[r>>2]=j}else w=0}else w=0}else w=0}else w=0}else w=0}else w=0}else w=-1;while(0);i=R;return w|0}function Wg(a,b,d,e,f,g,h,i,j,k,l,m,n,o,p){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;c[l>>2]=0;c[m>>2]=0;if((g|0)<8)j=-1;else j=Zg(a,b,d,-1,-1,-1,4,e,f,1,1,h,i,j,k,l,m,n,o,p)|0;return j|0}function Xg(f,g,h,j,k,l,m,n,o,p,q,r,s,t,u,v,w){f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;t=t|0;u=u|0;v=v|0;w=w|0;var x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;N=i;i=i+144|0;y=N;M=N+72|0;L=N+8|0;E=N+134|0;D=N+128|0;a:do if((j|0)==3&(m&l&n|0)<0){H=c[t>>2]|0;I=c[s>>2]|0;F=e[h+12>>1]|0;G=b[g+(F*176|0)+8+(k<<1)>>1]|0;a[h+14>>0]=d[g+(F*176|0)+72+k>>0]&15;a[h+15>>0]=k;b[h+16>>1]=G;a[h+18>>0]=0;a[h+19>>0]=-1;F=e[h>>1]|0;G=G&65535;n=g+(F*176|0)+108|0;C=b[n>>1]|0;if(C<<16>>16?C<<16>>16==(b[g+(G*176|0)+108>>1]|0):0){x=0;break}m=y+4|0;c[m>>2]=0;c[y>>2]=0;l=0;while(1){if((l|0)>3)break;j=a[h+(l<<2)+2>>0]|0;switch(j<<24>>24){case 2:case 1:{j=j&255;break}case 9:case 8:case 4:{j=4;break}default:j=64}C=y+(((l|0)%2|0)<<2)|0;c[C>>2]=c[C>>2]|j;l=l+1|0}l=c[y>>2]|0;k=c[m>>2]|0;if(((k|l)&64|l&3&k|0)==0?(J=oi(g,F,E)|0,K=oi(g,G,D)|0,(J|0)!=0&(K|0)!=0):0){C=((a[g+(F*176|0)+99>>0]|0)==-1&1)+(a[g+(F*176|0)+94>>0]|0)|0;y=b[n>>1]|0;z=y<<16>>16==0;if(z){if(l&1|0?(a[E+3>>0]|0)==0:0){x=0;break}if(l&2|0?(a[E+4>>0]|0)==0:0){x=0;break}}B=((a[g+(G*176|0)+99>>0]|0)==-1&1)+(a[g+(G*176|0)+94>>0]|0)|0;A=b[g+(G*176|0)+108>>1]|0;j=A<<16>>16==0;if(j){if(k&1|0?(a[D+3>>0]|0)==0:0){x=0;break}if(k&2|0?(a[D+4>>0]|0)==0:0){x=0;break}}if(z)if((a[E+3>>0]|0)!=0&(l&2|0)==0)n=25;else n=27;else if(!(l&2))n=25;else n=27;if((n|0)==25)if(j){j=(a[D+1>>0]|0)>(a[g+(G*176|0)+92>>0]|0)&1;n=28}else{m=1;n=29}else if((n|0)==27)if(j){j=0;n=28}else{m=0;n=29}if((n|0)==28)if(!(a[D+3>>0]|0))l=0;else{m=j;n=29}if((n|0)==29){j=(k&2|0)!=0;if(j|z^1){l=j^1;j=m}else{l=(a[E+1>>0]|0)>(a[g+(F*176|0)+92>>0]|0);j=m}}if((j|0)!=(l<<31>>31|0)){if(z|y<<16>>16!=A<<16>>16?(x=xk(f,u,v,g,w,F,G,1)|0,(x|0)<1):0)break;else{j=0;x=0}while(1){if((j|0)>3){z=x;break}switch(a[h+(j<<2)+2>>0]|0){case 9:case 4:case 2:case 1:{b[L+(x<<2)>>1]=b[h+(j<<2)>>1]|0;b[L+(x<<2)+2>>1]=a[h+(j<<2)+3>>0]|0;x=x+2|0;break}default:{}}j=j+1|0}y=D+1|0;n=E+1|0;x=0;while(1){if((x|0)>=2)break;l=(x|0)!=0;k=l?G:F;m=g+(k*176|0)+108|0;j=b[m>>1]|0;if(!(j<<16>>16)){if((((l?a[y>>0]|0:a[n>>0]|0)<<24>>24)+(l?B:C)|0)!=((l?K:J)|0)){x=0;break a}li(M+(x*28|0)|0,g,k,2)|0;mi(M+(x*28|0)+10|0,g,k,2);j=b[m>>1]|0}else{l=M+(x*28|0)|0;m=l+28|0;do{b[l>>1]=0;l=l+2|0}while((l|0)<(m|0))}b[M+(x*28|0)+26>>1]=k;b[M+(x*28|0)+22>>1]=j;b[M+(x*28|0)+24>>1]=0;x=x+1|0}l=Og(g,L,z,q,r,H)|0;j=Pg(M,x,o,p,I)|0;if((j|l|0)>-1){if((l|0)<=(c[t>>2]|0)){p=(j|0)>(c[s>>2]|0);x=p&1;if(!p)break}else x=1;c[t>>2]=l;c[s>>2]=j}else x=0}else x=0}else x=0}else x=-1;while(0);i=N;return x|0}function Yg(a,c,d,f,g,h,i){a=a|0;c=c|0;d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;c=e[a+((e[c+(d<<2)>>1]|0)*176|0)+8+(f<<1)>>1]|0;if(!(b[a+(c*176|0)+108>>1]|0))c=(Kg(a,c)|0)!=0;else c=1;return c&1|0}function Zg(c,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x){c=c|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;t=t|0;u=u|0;v=v|0;w=w|0;x=x|0;var y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;k=k+-1|0;b[m>>1]=g;z=m+2|0;a[z>>0]=0;A=m+3|0;a[A>>0]=-1;b[l+(g<<1)>>1]=1;if((i|0)>-1)P=e[f+(g*176|0)+8+(i<<1)>>1]|0;else P=-1;if((h|0)>-1){O=b[f+(g*176|0)+8+(h<<1)>>1]|0;y=O&65535;a[z>>0]=d[f+(g*176|0)+72+h>>0]&15;a[A>>0]=h;b[m+4>>1]=O;a[m+6>>0]=0;a[m+7>>0]=-1;b[l+(y<<1)>>1]=2;if((j|0)>-1){N=e[f+(y*176|0)+8+(j<<1)>>1]|0;O=1}else{N=-1;O=1}}else{N=-1;O=0}M=f+(g*176|0)+166|0;L=O;z=0;a:while(1){C=(L|0)<(O|0);D=m+(L<<2)+3|0;E=m+(L<<2)|0;F=m+(L<<2)+2|0;G=(L|0)==0;H=(L|0)==(k|0);I=(L|0)<(k|0);K=L+-1|0;J=m+(K<<2)|0;b:while(1){c:while(1){if(C){k=L;y=z;break a}B=(a[D>>0]|0)+1<<24>>24;a[D>>0]=B;g=B<<24>>24;y=e[E>>1]|0;if(B<<24>>24>=(a[f+(y*176|0)+92>>0]|0)){g=24;break b}a[F>>0]=d[f+(y*176|0)+72+g>>0]&15;A=b[f+(y*176|0)+8+(g<<1)>>1]|0;y=A&65535;if((y|0)==(P|0)|(y|0)==(N|0))continue;B=l+(y<<1)|0;if(b[B>>1]|0)continue;if(!G?A<<16>>16==(b[J>>1]|0):0)continue;do if(H){if((b[f+(y*176|0)+166>>1]|0)!=1?(b[M>>1]|0)!=1:0)break;y=pb[n&1](c,f,m,k,g,h,i,j,p,q,r,s,t,u,v,w,x)|0;if(y|0)break c}while(0);if(I&(lb[o&1](f,m,L,g,v,w,x)|0)!=0){y=B;g=23;break b}}if((y|0)<0)break a;z=y+z|0}if((g|0)==23){K=L+1|0;b[m+(K<<2)>>1]=A;a[m+(K<<2)+2>>0]=0;a[m+(K<<2)+3>>0]=-1;b[y>>1]=L+2;L=K;continue}else if((g|0)==24){b[l+(y<<1)>>1]=0;L=K;continue}}while(1){if((k|0)<=-1)break;b[l+(e[m+(k<<2)>>1]<<1)>>1]=0;k=k+-1|0}return y|0}function _g(a,b){a=a|0;b=b|0;var d=0;do if((a|0)<1|(b|0)!=2)b=0;else{b=Dq(1,16)|0;if(b|0?(d=Dq(a,2)|0,d|0):0){c[b>>2]=d;c[b+4>>2]=a;break}Cq(b);return 0}while(0);return b|0}function $g(a,d){a=a|0;d=d|0;var e=0,f=0,g=0;if((a|0)!=0&(d|0)!=0?(e=a+12|0,f=c[e>>2]|0,g=c[a+4>>2]|0,(f|0)<(g|0)):0){b[(c[a>>2]|0)+((((c[a+8>>2]|0)+f|0)%(g|0)|0)<<1)>>1]=b[d>>1]|0;a=f+1|0;c[e>>2]=a;e=a}else e=-1;return e|0}function ah(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0;if((a|0)!=0&(d|0)!=0?(e=a+12|0,f=c[e>>2]|0,(f|0)>0):0){g=a+8|0;h=c[g>>2]|0;b[d>>1]=b[(c[a>>2]|0)+(h<<1)>>1]|0;c[g>>2]=(h|0)==((c[a+4>>2]|0)+-1|0)?0:h+1|0;a=f+-1|0;c[e>>2]=a;e=a}else e=-1;return e|0}function bh(a){a=a|0;var b=0;if(a|0){b=c[a>>2]|0;if(b|0)Cq(b);Cq(a)}return 0}function ch(a){a=a|0;var b=0;if(!a)a=0;else{b=(c[a+12>>2]|0)+(c[a+8>>2]|0)|0;a=c[a+4>>2]|0;a=(b|0)>(a|0)?a:b}return a|0}function dh(d,f,g,h,j){d=d|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=i;i=i+16|0;A=E+2|0;C=E;v=(f|0)==0;w=f+12|0;x=(j&65535)+4|0;k=32767;a:while(1){if(v){D=20;break}y=c[w>>2]|0;if(!y){D=20;break}else B=0;while(1){if((B|0)>=(y|0))continue a;if((ah(f,A)|0)<=-1){k=-1;break a}q=e[A>>1]|0;l=e[g+(q<<1)>>1]|0;s=l+1|0;r=s&65535;s=s&65535;if(s<<1>>>0>x>>>0){D=8;break a}t=d+(q*176|0)+92|0;u=h+q|0;o=l+65535|0;p=0;while(1){if((p|0)>=(a[t>>0]|0))break;n=b[d+(q*176|0)+8+(p<<1)>>1]|0;b[C>>1]=n;n=n&65535;l=g+(n<<1)|0;m=b[l>>1]|0;if(m<<16>>16){l=m&65535;if((l+1|0)>>>0>=s>>>0?(z=a[h+n>>0]|0,z<<24>>24!=(a[u>>0]|0)):0){if(z<<24>>24==-1){k=-1;break a}n=o+l|0;k=(n&65535)>>>0<(k&65535)>>>0?n&65535:k}}else{if(($g(f,C)|0)<=-1){k=-1;break a}b[l>>1]=r;a[h+n>>0]=a[u>>0]|0}p=p+1|0}B=B+1|0}}if((D|0)==8)if((k&65535)<32767)k=(k&65535)>=(j&65535)?0:k&65535;else k=0;else if((D|0)==20)if((k&65535)<32767)k=(k&65535)>=(j&65535)?0:k&65535;else k=0;i=E;return k|0}function eh(d,e,f,g,h,j,k){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=i;i=i+16|0;p=q;if((k&65535)<3)l=0;else{if(g|0){c[g+8>>2]=0;c[g+12>>2]=0}n=h+(e<<1)|0;b[n>>1]=1;o=j+e|0;a[o>>0]=-1;l=d+(e*176|0)+92|0;m=0;while(1){if((m|0)>=(a[l>>0]|0))break;r=b[d+(e*176|0)+8+(m<<1)>>1]|0;b[p>>1]=r;r=r&65535;b[h+(r<<1)>>1]=2;a[j+r>>0]=(m|0)==(f|0)?2:1;$g(g,p)|0;m=m+1|0}l=dh(d,g,h,j,k)|0;e=ch(g)|0;d=g+4|0;m=0;while(1){if((m|0)>=(e|0))break;if((c[d>>2]|0)>(m|0)){r=b[(c[g>>2]|0)+(m<<1)>>1]|0;b[p>>1]=r;r=r&65535;b[h+(r<<1)>>1]=0;a[j+r>>0]=0}m=m+1|0}b[n>>1]=0;a[o>>0]=0}i=q;return l|0}function fh(c,d){c=c|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;a:do if((e[c+(d*176|0)+166>>1]|0)<3)f=0;else{i=a[c+(d*176|0)+92>>0]|0;j=c+(d*176|0)+164|0;k=0;while(1){if((k|0)>=(i|0)){f=0;break a}f=e[c+(d*176|0)+8+(k<<1)>>1]|0;b:do if((b[j>>1]|0)==(b[c+(f*176|0)+164>>1]|0)){g=a[c+(f*176|0)+92>>0]|0;l=0;while(1){if((l|0)>=(g|0))break b;h=b[c+(f*176|0)+8+(l<<1)>>1]|0;c:do if((h&65535|0)!=(d|0)){m=0;while(1){if((m|0)>=(i|0))break c;if((b[c+(d*176|0)+8+(m<<1)>>1]|0)==h<<16>>16){f=1;break a}else m=m+1|0}}while(0);l=l+1|0}}while(0);k=k+1|0}}while(0);return f|0}function gh(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+240|0;r=t+120|0;q=t;a:do if(d>>>0>=2){p=0-e|0;o=b+(_(d+-1|0,e)|0)|0;d=0;while(1){n=o;while(1){m=b;g=b+(_(((((n-m|0)>>>0)/(e>>>0)|0)+1|0)>>>1,e)|0)|0;if((mb[f&31](b,g,a)|0)>0)hh(b,g,e);if((mb[f&31](b,o,a)|0)>0)hh(b,o,e);if((mb[f&31](g,o,a)|0)>0){hh(g,o,e);k=o;j=b;l=g}else{k=o;j=b;l=g}while(1){b:do if(l>>>0>j>>>0){g=j;do{g=g+e|0;if(g>>>0>=l>>>0)break b}while((mb[f&31](g,l,a)|0)<1)}else g=j;while(0);c:do if(l>>>0<=g>>>0)do{g=g+e|0;if(g>>>0>o>>>0)break c}while((mb[f&31](g,l,a)|0)<1);while(0);h=k;do{h=h+p|0;if(h>>>0<=l>>>0)break}while((mb[f&31](h,l,a)|0)>0);if(h>>>0>>0){j=l;break}hh(g,h,e);k=h;j=g;l=(l|0)==(h|0)?g:l}h=h+e|0;d:do if(j>>>0>>0)do{h=h+p|0;if(h>>>0<=j>>>0)break d}while((mb[f&31](h,j,a)|0)==0);while(0);e:do if(j>>>0>=h>>>0)do{h=h+p|0;if(h>>>0<=b>>>0)break e}while((mb[f&31](h,j,a)|0)==0);while(0);if((h-m|0)<(n-g|0)){s=31;break}if(b>>>0>>0){c[r+(d<<2)>>2]=b;c[q+(d<<2)>>2]=h;d=d+1|0}if(g>>>0>>0)b=g;else break}if((s|0)==31){s=0;if(g>>>0>>0){c[r+(d<<2)>>2]=g;c[q+(d<<2)>>2]=o;d=d+1|0}if(b>>>0>>0){o=h;continue}}g=d+-1|0;if((d|0)<=0)break a;o=c[q+(g<<2)>>2]|0;b=c[r+(g<<2)>>2]|0;d=g}}while(0);i=t;return}function hh(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;a:do if((b|0)!=(c|0))while(1){if(!d)break a;e=a[b>>0]|0;a[b>>0]=a[c>>0]|0;a[c>>0]=e;b=b+1|0;d=d+-1|0;c=c+1|0}while(0);return}function ih(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;j=0-d|0;k=1;f=0;g=b;while(1){if(k>>>0>=c>>>0)break;g=g+d|0;i=g;while(1){if(i>>>0<=b>>>0)break;h=i+j|0;if((mb[e&31](h,i,a)|0)<=0)break;hh(h,i,d);i=h;f=f+1|0}k=k+1|0}return f|0}function jh(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;m=i;i=i+16|0;l=m;k=1;f=0;g=c;while(1){if((k|0)>=(d|0))break;j=g+2|0;b[l>>1]=b[j>>1]|0;h=j;while(1){if(h>>>0<=c>>>0){g=h;break}if((mb[e&31](g,l,a)|0)<=0){g=h;break}b[h>>1]=b[g>>1]|0;n=g;g=g+-2|0;f=f+1|0;h=n}b[g>>1]=b[l>>1]|0;k=k+1|0;g=j}i=m;return f|0}function kh(a,c){a=a|0;c=c|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0;k=a+2|0;g=e[a>>1]|0;j=1;a=k;while(1){if((j|0)>=(g|0))break;h=a+2|0;i=b[c+((e[h>>1]|0)<<1)>>1]|0;f=h;while(1){if(f>>>0<=k>>>0)break;d=b[a>>1]|0;if((e[c+((d&65535)<<1)>>1]|0)<=(i&65535))break;b[a>>1]=b[f>>1]|0;b[f>>1]=d;d=a;a=a+-2|0;f=d}j=j+1|0;a=h}return}function lh(a,c){a=a|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=1;d=0;e=a;while(1){if((j|0)>=(c|0))break;h=e+2|0;i=b[h>>1]|0;g=h;while(1){if(g>>>0<=a>>>0){e=g;break}f=b[e>>1]|0;if((f&65535)<=(i&65535)){e=g;break}b[g>>1]=f;f=e;e=e+-2|0;d=d+1|0;g=f}b[e>>1]=i;j=j+1|0;e=h}return d|0}function mh(a,c){a=a|0;c=c|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=a+2|0;i=e[a>>1]|0;l=1;a=0;d=m;while(1){if((l|0)>=(i|0))break;j=d+2|0;k=b[j>>1]|0;h=b[c+((k&65535)<<1)>>1]|0;g=d;d=j;while(1){if(d>>>0<=m>>>0)break;f=b[g>>1]|0;if((e[c+((f&65535)<<1)>>1]|0)<=(h&65535))break;b[d>>1]=f;f=g;g=g+-2|0;a=a+1|0;d=f}b[d>>1]=k;l=l+1|0;d=j}return a|0}function nh(a,c,d){a=a|0;c=c|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=a+2|0;m=e[a>>1]|0;o=1;a=p;while(1){if((o|0)>=(m|0))break;n=a+2|0;l=n;while(1){if(l>>>0<=p>>>0)break;i=b[a>>1]|0;j=i&65535;k=b[c+(j<<1)>>1]|0;f=b[l>>1]|0;g=f&65535;h=b[c+(g<<1)>>1]|0;if((k&65535)>=(h&65535)){if(k<<16>>16!=h<<16>>16)break;if((e[d+(j<<1)>>1]|0)>=(e[d+(g<<1)>>1]|0))break}b[a>>1]=f;b[l>>1]=i;k=a;a=a+-2|0;l=k}o=o+1|0;a=n}return}function oh(a,b,d){a=a|0;b=b|0;d=d|0;var f=0;f=c[d+8>>2]|0;d=c[d+12>>2]|0;return (e[d+((e[f+((e[a>>1]|0)<<1)>>1]|0)<<1)>>1]|0)-(e[d+((e[f+((e[b>>1]|0)<<1)>>1]|0)<<1)>>1]|0)|0}function ph(a,b,c){a=a|0;b=b|0;c=c|0;return (e[a>>1]|0)-(e[b>>1]|0)|0}function qh(a,b,d){a=a|0;b=b|0;d=d|0;d=c[d+12>>2]|0;return (e[d+((e[a>>1]|0)<<1)>>1]|0)-(e[d+((e[b>>1]|0)<<1)>>1]|0)|0}function rh(a,d,f){a=a|0;d=d|0;f=f|0;var g=0;g=e[a>>1]|0;f=c[f+12>>2]|0;a=b[f+(g<<1)>>1]|0;d=e[d>>1]|0;f=b[f+(d<<1)>>1]|0;return (a<<16>>16==f<<16>>16?g-d|0:(a&65535)-(f&65535)|0)|0}function sh(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0;j=c[g+4>>2]|0;h=e[d>>1]|0;i=e[f>>1]|0;f=0;while(1){if((f|0)>=7){g=f;f=6;break}d=b[j+(h*28|0)+(f<<1)>>1]|0;g=b[j+(i*28|0)+(f<<1)>>1]|0;if(d<<16>>16!=g<<16>>16){f=4;break}f=f+1|0}a:do if((f|0)==4)g=(d&65535)-(g&65535)|0;else if((f|0)==6){d=c[j+(h*28|0)+20>>2]|0;f=c[j+(i*28|0)+20>>2]|0;if((d|0)!=(f|0)){g=(d|0)>(f|0)?1:-1;break}while(1){if((g|0)>=10)break;if((b[j+(h*28|0)+(g<<1)>>1]|0)==(b[j+(i*28|0)+(g<<1)>>1]|0)){g=0;break a}else g=g+1|0}d=a[j+(h*28|0)+24>>0]|0;g=a[j+(i*28|0)+24>>0]|0;if(d<<24>>24==g<<24>>24)g=0;else g=d<<24>>24>g<<24>>24?1:-1}while(0);return g|0}function th(a,b,c){a=a|0;b=b|0;c=c|0;c=sh(a,b,c)|0;if(!c)c=(e[a>>1]|0)-(e[b>>1]|0)|0;return c|0}function uh(a,b){a=a|0;b=b|0;return hp(a,b,2)|0}function vh(a,c,d){a=a|0;c=c|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0;h=e[a>>1]|0;i=e[c>>1]|0;f=0;g=h>>>0>>0?h:i;while(1){a=a+2|0;c=c+2|0;if((g|0)<=0)break;k=b[d+((e[a>>1]|0)<<1)>>1]|0;j=b[d+((e[c>>1]|0)<<1)>>1]|0;f=(k&65535)-(j&65535)|0;if(k<<16>>16!=j<<16>>16)break;else g=g+-1|0}return ((f|0)==0?h-i|0:f)|0}function wh(a,c,d,f){a=a|0;c=c|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;i=a+2|0;h=c+2|0;g=e[c>>1]|0;a=e[a>>1]|0;while(1){if((a|0)<=0)break;c=a+-1|0;if((e[d+((e[i+(c<<1)>>1]|0)<<1)>>1]|0)>(f&65535))a=c;else break}while(1){if((g|0)<=0)break;c=g+-1|0;if((e[d+((e[h+(c<<1)>>1]|0)<<1)>>1]|0)>(f&65535))g=c;else break}c=0;f=(a|0)<(g|0)?a:g;while(1){if((f|0)<=0)break;k=b[d+((e[i>>1]|0)<<1)>>1]|0;j=b[d+((e[h>>1]|0)<<1)>>1]|0;c=(k&65535)-(j&65535)|0;if(k<<16>>16==j<<16>>16){i=i+2|0;h=h+2|0;f=f+-1|0}else break}return ((c|0)==0?a-g|0:c)|0}function xh(a,b,d){a=a|0;b=b|0;d=d|0;return vh(c[a>>2]|0,c[b>>2]|0,c[d+12>>2]|0)|0}function yh(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0;g=e[a>>1]|0;a=c[f+12>>2]|0;h=b[a+(g<<1)>>1]|0;d=e[d>>1]|0;a=b[a+(d<<1)>>1]|0;if(h<<16>>16==a<<16>>16){a=c[f>>2]|0;a=xh(a+(g<<2)|0,a+(d<<2)|0,f)|0}else a=(h&65535)-(a&65535)|0;return a|0}function zh(a,b,d){a=a|0;b=b|0;d=d|0;var f=0;f=c[d>>2]|0;return xh(f+((e[a>>1]|0)<<2)|0,f+((e[b>>1]|0)<<2)|0,d)|0}function Ah(a,d,f){a=a|0;d=d|0;f=f|0;var g=0;g=c[f>>2]|0;return wh(c[g+((e[a>>1]|0)<<2)>>2]|0,c[g+((e[d>>1]|0)<<2)>>2]|0,c[f+12>>2]|0,b[f+16>>1]|0)|0}function Bh(a,b,c){a=a|0;b=b|0;c=c|0;c=yh(a,b,c)|0;if(!c)c=(e[a>>1]|0)-(e[b>>1]|0)|0;return c|0}function Ch(a,b,c){a=a|0;b=b|0;c=c|0;return (e[b>>1]|0)-(e[a>>1]|0)|0}function Dh(a,d,f){a=a|0;d=d|0;f=f|0;var g=0;g=c[f+12>>2]|0;a=b[g+((e[a>>1]|0)<<1)>>1]|0;d=b[g+((e[d>>1]|0)<<1)>>1]|0;f=f+20|0;c[f>>2]=(a<<16>>16==d<<16>>16&1)+(c[f>>2]|0);return (a&65535)-(d&65535)|0}function Eh(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h=b[d>>1]|0;p=h&65535;a:do if((p|0)<=(g|0)?(n=g+1|0,i=Dq(n,1)|0,(i|0)!=0):0){m=1;j=0;while(1){if((m|0)>=(f|0))break;k=b[d+(m<<1)>>1]|0;l=k&65535;if((k&65535)>=(h&65535))if((l|0)>(g|0)){h=0;q=20;break a}else h=k;else{o=i+l|0;a[o>>0]=(a[o>>0]|0)+1<<24>>24;o=i+(h&65535)|0;a[o>>0]=(a[o>>0]|0)+1<<24>>24;j=j+2|0}m=m+1|0}if((h&65535|0)==(g|0)){h=Dq(n,4)|0;if(!h)q=20;else{o=Bq((j+g<<1)+2|0)|0;b:do if(o|0){j=1;k=0;while(1){if((j|0)==(n|0))break;m=k+1+(a[i+j>>0]|0)|0;l=o+(k<<1)|0;c[h+(j+-1<<2)>>2]=l;b[l>>1]=0;j=j+1|0;k=m}n=1;m=p+65535&65535;while(1){if((n|0)>=(f|0))break;k=(e[d+(n<<1)>>1]|0)+65535|0;j=k&65535;k=k&65535;l=m&65535;if(k>>>0>=l>>>0){if((k|0)>=(g|0))break b}else{l=c[h+(l<<2)>>2]|0;p=(b[l>>1]|0)+1<<16>>16;b[l>>1]=p;b[l+((p&65535)<<1)>>1]=j;p=c[h+(k<<2)>>2]|0;j=(b[p>>1]|0)+1<<16>>16;b[p>>1]=j;b[p+((j&65535)<<1)>>1]=m;j=m}n=n+1|0;m=j}Cq(i);break a}while(0);Cq(i);Cq(o);q=22}}else{h=0;q=20}}else{h=0;i=0;q=20}while(0);if((q|0)==20){Cq(i);q=22}if((q|0)==22)if(!h)h=0;else{Cq(h);h=0}return h|0}function Fh(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;j=Dq(f+1|0,4)|0;a:do if(j){if((f|0)>(d|0)){t=c[i+4>>2]|0;u=c[i+16>>2]|0;s=c[i>>2]|0}else{t=0;u=0;s=0}l=(h|0)!=0;r=(u|0)==0;b:do if(l){k=0;f=0;while(1){if((k|0)>=(d|0))break;i=a[g+(k*144|0)+73>>0]|0;h=0;while(1){if((h|0)>=(i|0))break;p=((a[g+(k*144|0)+52+h>>0]|0)==2?2:1)+f|0;h=h+1|0;f=p}if(r)i=0;else i=(b[g+(k*144|0)+92>>1]|0)!=0;k=k+1|0;f=(i&1)+f|0}i=0;f=f+d|0;while(1){if((i|0)>=(u|0))break b;p=(e[s+(i*36|0)+30>>1]|0)+f|0;i=i+1|0;f=p}}else{h=0;f=0;while(1){if((h|0)>=(d|0))break;if(r)i=0;else i=(b[g+(h*144|0)+92>>1]|0)!=0;p=(a[g+(h*144|0)+73>>0]|0)+f+(i&1)|0;h=h+1|0;f=p}i=0;f=f+d|0;while(1){if((i|0)>=(u|0))break b;p=(e[s+(i*36|0)+30>>1]|0)+f|0;i=i+1|0;f=p}}while(0);p=Bq((f+u<<1)+2|0)|0;if(!p){Cq(j);j=0;break}o=d+65535|0;c:do if(l){n=0;m=0;while(1){if((n|0)>=(d|0)){n=0;break c}k=a[g+(n*144|0)+73>>0]|0;l=0;f=m+1|0;while(1){if((l|0)>=(k|0))break;i=b[g+(n*144|0)+6+(l<<1)>>1]|0;h=f+1|0;b[p+(f<<1)>>1]=i;if((a[g+(n*144|0)+52+l>>0]|0)==2){b[p+(h<<1)>>1]=i;f=f+2|0}else f=h;l=l+1|0}if(!r?(q=b[g+(n*144|0)+92>>1]|0,q<<16>>16!=0):0){b[p+(f<<1)>>1]=o+(q&65535);f=f+1|0}l=p+(m<<1)|0;b[l>>1]=65535-m+f;c[j+(n<<2)>>2]=l;n=n+1|0;m=f}}else{l=0;m=0;while(1){if((l|0)>=(d|0)){n=0;break c}h=a[g+(l*144|0)+73>>0]|0;k=0;i=m;while(1){f=i+1|0;if((k|0)>=(h|0))break;b[p+(f<<1)>>1]=b[g+(l*144|0)+6+(k<<1)>>1]|0;k=k+1|0;i=f}if(!r?(n=b[g+(l*144|0)+92>>1]|0,n<<16>>16!=0):0){b[p+(f<<1)>>1]=o+(n&65535);f=i+2|0}q=p+(m<<1)|0;b[q>>1]=65535-m+f;c[j+(l<<2)>>2]=q;l=l+1|0;m=f}}while(0);while(1){if((n|0)>=(u|0))break a;i=b[s+(n*36|0)+30>>1]|0;h=e[s+(n*36|0)+32>>1]|0;k=i&65535;l=0;f=m;while(1){f=f+1|0;if((l|0)==(k|0))break;b[p+(f<<1)>>1]=b[t+(l+h<<1)>>1]|0;l=l+1|0}g=p+(m<<1)|0;b[g>>1]=i;c[j+(n+d<<2)>>2]=g;n=n+1|0;m=m+1+k|0}}while(0);return j|0}function Gh(a){a=a|0;var b=0;if(a|0){b=c[a>>2]|0;if(b|0)Cq(b);Cq(a)}return}function Hh(a,d,f,g,h,i,j){a=a|0;d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0;m=c[g>>2]|0;k=g+8|0;n=c[g+4>>2]|0;l=c[k>>2]|0;if(!l){l=Bq(f<<1)|0;c[k>>2]=l}k=g+12|0;g=c[k>>2]|0;if(!g){g=Bq(f<<1)|0;c[k>>2]=g}a:do if((l|0)==0|(g|0)==0)k=-30002;else{o=d<<1;ir(g|0,n|0,o|0)|0;ir(l|0,m|0,o|0)|0;n=j+4|0;o=1;m=1;k=0;while(1){if((o|0)>=(d|0))break a;f=l+(e[g+(o+-1<<1)>>1]<<1)|0;if((b[f>>1]|0)==(b[l+(e[g+(o<<1)>>1]<<1)>>1]|0)){b[f>>1]=o;f=af(a,d,h,m,l,i,g,n,1)|0;c[j>>2]=(c[j>>2]|0)+1;k=k+1|0}else f=m;o=o+1|0;m=f}}while(0);return k|0}function Ih(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=1;while(1){if((h|0)>=(b|0))break;g=c[a+(h<<2)>>2]|0;d=h;while(1){f=d+-1|0;if((d|0)<=0)break;e=c[a+(f<<2)>>2]|0;if((e|0)<=(g|0))break;c[a+(d<<2)>>2]=e;d=f}c[a+(d<<2)>>2]=g;h=h+1|0}return a|0}function Jh(a,b,c){a=a|0;b=b|0;c=c|0;return (e[a>>1]|0)-(e[b>>1]|0)|0}function Kh(c,f,g){c=c|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;p=c+(f*176|0)|0;q=c+(f*176|0)+99|0;s=c+(f*176|0)+100|0;w=c+(f*176|0)+92|0;y=c+(f*176|0)+94|0;z=c+(f*176|0)+93|0;B=c+(f*176|0)+108|0;i=0;a:while(1){if((i|0)>=21){h=0;break}b:do if(((((kp(p,12848+(i*3|0)|0)|0)==0?(a[q>>0]|0)==(a[12911+i>>0]|0):0)?(d[s>>0]|0)<2:0)?(r=a[y>>0]|0,h=r+(a[w>>0]|0)|0,t=a[12932+i>>0]|0,(h|0)==(t<<24>>24|0)):0)?(u=(a[z>>0]|0)+r|0,v=a[12953+i>>0]|0,(u|0)==(v<<24>>24|0)):0){if((i|0)==16?(fh(c,f)|0)==0:0)break;j=a[12974+i>>0]|0;x=u-h|0;if(!(b[B>>1]|0)){if(j&1|0?a[y>>0]|0:0)break;c:do if(!(j&2))j=a[w>>0]|0;else{o=0;while(1){j=a[w>>0]|0;if((o|0)>=(j<<24>>24|0))break c;j=e[c+(f*176|0)+8+(o<<1)>>1]|0;d:do if((a[c+(j*176|0)+92>>0]|0)==1?(A=c+(j*176|0)+6|0,uo(a[A>>0]|0)|0):0){n=c+(j*176|0)+94|0;j=c+(j*176|0)|0;m=o;while(1){m=m+1|0;if((m|0)>=(a[w>>0]|0))break d;k=e[c+(f*176|0)+8+(m<<1)>>1]|0;if((a[c+(k*176|0)+92>>0]|0)!=1)continue;l=a[A>>0]|0;if(l<<24>>24!=(a[c+(k*176|0)+6>>0]|0))continue;if(!(uo(l)|0))continue;if((a[n>>0]|0)==(a[c+(k*176|0)+94>>0]|0))continue;if(kp(j,86667)|0)break b}}while(0);o=o+1|0}}while(0);n=j<<24>>24;m=0;l=0;k=0;j=0;while(1){if((m|0)>=(n|0))break;switch(d[c+(f*176|0)+72+m>>0]&15|0){case 1:{l=l+1|0;break}case 9:case 8:case 4:case 2:{k=k+1|0;break}default:j=j+1|0}m=m+1|0}if((j|0)==0?(o=v<<24>>24!=t<<24>>24,(o|(n|0)==(l|0))^o&(k|0)<(x|0)):0)break a}}while(0);i=i+1|0}return ((g&4|0)==0&(i|0)==20|(g&2|0)==0&(i|0)==19?0:h)|0}function Lh(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;b=b<<24>>24==0;d=0;while(1){if((d|0)>=1){b=0;break}if(b&(kp(a,12995+(d*3|0)|0)|0)==0){e=4;break}else d=d+1|0}if((e|0)==4)b=(c|1)<<24>>24==1&1;return b|0}function Mh(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;e=0;while(1){if((e|0)>=5){c=0;break}if((kp(b,12998+(e*3|0)|0)|0)==0?(a[13013+e>>0]|0)==c<<24>>24:0){f=5;break}e=e+1|0}if((f|0)==5)c=(d|1)<<24>>24==1&1;return c|0}function Nh(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;e=0;while(1){if((e|0)>=3){c=0;break}if((kp(b,13018+(e*3|0)|0)|0)==0?(a[92218+e>>0]|0)==c<<24>>24:0){f=5;break}e=e+1|0}if((f|0)==5)c=(d|1)<<24>>24==1&1;return c|0}function Oh(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;e=0;while(1){if((e|0)>=3){c=0;break}if((kp(b,13027+(e*3|0)|0)|0)==0?(a[92218+e>>0]|0)==c<<24>>24:0){f=5;break}e=e+1|0}if((f|0)==5)c=(d|1)<<24>>24==1&1;return c|0}function Ph(c,f,g,h,i,j){c=c|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;q=c+(f*176|0)+92|0;k=0;t=0;a:while(1){if((t|0)>=3){u=21;break}p=a[c+(f*176|0)+152+t>>0]|0;if(!(p<<24>>24)){u=21;break}o=a[c+(f*176|0)+146+t>>0]|0;l=o<<24>>24;do if(((o<<24>>24>-1?o<<24>>24<(a[q>>0]|0):0)?(r=e[c+(f*176|0)+8+(l<<1)>>1]|0,(a[c+(r*176|0)+92>>0]|0)<4):0)?(s=b[c+(r*176|0)+48>>1]|0,s<<16>>16!=0):0){m=c+(f*176|0)+156+(t<<1)|0;n=0;o=-1;l=-1;while(1){if((n|0)>=(h|0))break;v=b[g+(n<<1)>>1]|0;w=(b[m>>1]|0)==v<<16>>16;v=w?l:s<<16>>16==v<<16>>16?n:l;w=w?n:o;n=n+1|0;o=w;l=v}if((o|l|0)>-1){m=p<<24>>24;if((p+-1&255)<2)m=2-((m+((l+-1+o+((l|0)>(o|0)&1)|0)%2|0)|0)%2|0)|0}else m=0;if(k){if((k|0)!=(m|0)&(m|0)!=0){l=(m+-1|0)>>>0<2;if((k+-1|0)>>>0<2)if(l)break a;else break;if(l)k=m;else k=(m|0)<(k|0)?m:k}}else k=m}while(0);t=t+1|0}if((u|0)==21)if(k){i=c+(f*176|0)+136|0;a[i>>0]=d[i>>0]|j;i=k}return i|0}function Qh(b,d,e,f,g,j,k,l,m,n){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;var o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0.0,H=0.0,I=0.0;D=i;i=i+32|0;C=D;B=D+24|0;z=c[m>>2]|0;A=c[n>>2]|0;y=(z|A)>>31|1;z=(z|0)>-1?z:0-z|0;A=(A|0)>-1?A:0-A|0;t=-1;u=0;v=0;while(1){if((u|0)>=3)break;p=a[b+(e*176|0)+152+u>>0]|0;if(!(p<<24>>24))break;w=(a[b+(e*176|0)+146+u>>0]|0)==(f|0);t=w?u:t;u=u+1|0;v=w?p<<24>>24:v}p=-1;u=0;w=0;while(1){if((u|0)>=3)break;f=a[b+(j*176|0)+152+u>>0]|0;if(!(f<<24>>24))break;E=(a[b+(j*176|0)+146+u>>0]|0)==(k|0);p=E?u:p;u=u+1|0;w=E?f<<24>>24:w}a:do switch((p>>>31<<1|t>>>31)^3|0){case 0:{x=y<<2;c[n>>2]=x;c[m>>2]=x;x=0;break}case 2:case 1:{c[n>>2]=0;c[m>>2]=0;x=-1;break}case 3:{E=z+-1|0;p=E>>>0<2;x=v+-1|0;f=x>>>0<2;k=A+-1|0;t=k>>>0<2;F=w+-1|0;u=F>>>0<2;switch((((F|k)>>>0<2&1)<<1|(x|E)>>>0<2)^3|0){case 3:{F=p|f?(f?z:v):(z|0)<(v|0)?z:v;x=t|u?(u?A:w):(A|0)<(w|0)?A:w;x=_((F|0)<(x|0)?F:x,y)|0;c[n>>2]=x;c[m>>2]=x;x=-1;break a}case 1:{c[m>>2]=_(p|f?(f?z:v):(z|0)<(v|0)?z:v,y)|0;c[n>>2]=_(A,y)|0;x=-1;break a}case 2:{c[m>>2]=_(z,y)|0;c[n>>2]=_(t|u?(u?A:w):(A|0)<(w|0)?A:w,y)|0;x=-1;break a}default:{c[m>>2]=_(z,y)|0;c[n>>2]=_(A,y)|0;if(!(d&1)){x=0;break a}p=a[b+(e*176|0)+136>>0]|0;F=p&2;t=F<<24>>24!=0;f=a[b+(j*176|0)+136>>0]|0;do if(!((F&f)<<24>>24)){if(!((f|p)&2)){x=0;break a}r=+h[b+(j*176|0)+112>>3]-+h[b+(e*176|0)+112>>3];s=+h[b+(j*176|0)+120>>3]-+h[b+(e*176|0)+120>>3];o=+h[b+(j*176|0)+128>>3]-+h[b+(e*176|0)+128>>3];q=+O(+(r*r+s*s+o*o));if(q<1.0e-06)break;p=t?l:g;G=+(a[p>>0]|0);H=+(a[p+1>>0]|0);I=+(a[p+2>>0]|0);q=(t?1.0:-1.0)/q;r=r*q;s=s*q;q=o*q;o=s*I-q*H;q=r*I-q*G;s=r*H-s*G;r=100.0/+O(+(s*s+(o*o+q*q)));h[C>>3]=o*r;h[C+8>>3]=-(q*r);h[C+16>>3]=r*s;p=0;while(1){if((p|0)==3)break;o=+h[C+(p<<3)>>3];if(!(o>=0.0))o=-+M(+(.5-o));else o=+M(+(o+.5));a[B+p>>0]=~~o;p=p+1|0}if(t){a[g>>0]=a[B>>0]|0;a[g+1>>0]=a[B+1>>0]|0;a[g+2>>0]=a[B+2>>0]|0}else{a[l>>0]=a[B>>0]|0;a[l+1>>0]=a[B+1>>0]|0;a[l+2>>0]=a[B+2>>0]|0}x=0;break a}while(0);a[g>>0]=100;a[g+2>>0]=0;a[g+1>>0]=0;a[l+1>>0]=0;a[l>>0]=0;a[l+2>>0]=100;x=0;break a}}}default:{}}while(0);i=D;return x|0}function Rh(b,c){b=b|0;c=c|0;var d=0,e=0,f=0;f=0;d=0;while(1){if((f|0)<(c|0))e=0;else break;a:while(1){if((e|0)>=3)break;switch(a[b+(f*176|0)+152+e>>0]|0){case 0:break a;case 3:{a[(a[b+(f*176|0)+146+e>>0]|0)+(b+(f*176|0)+52)>>0]=3;d=d+1|0;break}default:{}}e=e+1|0}f=f+1|0}return d|0}function Sh(c,e,f,g,h,j){c=c|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+16|0;o=p;n=e+(f*176|0)+137|0;if((g+-3|0)>>>0<2&(a[n>>0]|0)!=0){k=e+(f*176|0)+48|0;l=0;while(1){if((l|0)==4)break;m=b[e+(f*176|0)+138+(l<<1)>>1]|0;b[o+(l<<1)>>1]=m<<16>>16==(b[k>>1]|0)?0:m;l=l+1|0}m=ih(c,o,4,2,20)|0;l=ih(c,h,g,2,20)|0;if(!(hp(o+8+(0-g<<1)|0,h,g<<1)|0)){h=a[n>>0]|0;k=h<<24>>24;if((h+-1&255)<2)k=2-((l+m+k|0)%2|0)|0;f=e+(f*176|0)+136|0;a[f>>0]=d[f>>0]|j}else k=0}else k=0;i=p;return k|0} -function rf(e,f,g,h,j,k,l,m,n,o,p,q,r,s,t,u,v,w){e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;t=t|0;u=u|0;v=v|0;w=w|0;var x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;J=i;i=i+16|0;I=J;c[I>>2]=0;C=j&65535;D=g&65535;b[l+(D<<1)>>1]=C+1;b[m+(C<<1)>>1]=D+1;x=(b[u>>1]|0)+1<<16>>16;b[u>>1]=x;b[n+(D<<1)>>1]=x;b[o+(C<<1)>>1]=b[u>>1]|0;x=a[e+(D*144|0)+126>>0]|0;y=x<<24>>24;do if(((y&7)+-1|0)>>>0<2?(z=a[e+(C*144|0)+126>>0]|0,((z&7)+-1|0)>>>0<2):0){A=c[v>>2]|0;x=(z+y|0)%2|0;if((A|0)>=0)if((A|0)==(x|0)){B=8;break}else{x=0;break}else{c[v>>2]=x;B=8;break}}else B=6;while(0);if((B|0)==6)if(((x&7)+-1|0)>>>0<4?(H=a[e+(C*144|0)+126>>0]|0,!(((H&7)+-1|0)>>>0>3?1:x<<24>>24==H<<24>>24)):0)x=0;else B=8;a:do if((B|0)==8){if(((g<<16>>16!=j<<16>>16?(b[e+(D*144|0)+94>>1]|0)==0:0)?(b[e+(C*144|0)+94>>1]|0)==0:0)?((d[e+(D*144|0)+124>>0]&7)+-1|0)>>>0<4^((d[e+(C*144|0)+124>>0]&7)+-1|0)>>>0<4:0){x=0;break}G=e+(D*144|0)+73|0;y=a[G>>0]|0;x=y<<24>>24;if(y<<24>>24==(a[e+(C*144|0)+73>>0]|0))if(y<<24>>24!=1){H=p+(D<<2)|0;E=b[c[H>>2]>>1]|0;F=q+(C<<2)|0;if((E&65535|0)==(x|0)?E<<16>>16==(b[c[F>>2]>>1]|0):0){E=e+(D*144|0)+134|0;D=1;A=1;C=1;while(1){if((D|0)>=(y<<24>>24|0)){x=1;break a}x=c[H>>2]|0;z=b[x+(A<<1)>>1]|0;if(z<<16>>16==f<<16>>16){z=A+1|0;A=z;z=b[x+(z<<1)>>1]|0}x=c[F>>2]|0;B=b[x+(C<<1)>>1]|0;if(B<<16>>16==h<<16>>16){B=C+1|0;C=B;B=b[x+(B<<1)>>1]|0}x=qf(e,g,j,z,B,k,l,m,n,o,r,s)|0;if((x|0)<1)break a;x=z&65535;if(!(b[l+(x<<1)>>1]|0)){x=rf(e,g,z,j,B,k,l,m,n,o,p,q,r,s,t,u,(b[E>>1]|0)==(b[e+(x*144|0)+134>>1]|0)?v:I,w)|0;if((x|0)<1)break a;x=a[G>>0]|0}else x=y;y=x;D=D+1|0;A=A+1|0;C=C+1|0}}else x=-30014}else x=1;else x=-30014}while(0);i=J;return x|0}function sf(d,f,g,h,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x){d=d|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;t=t|0;u=u|0;v=v|0;w=w|0;x=x|0;var y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0;$=i;i=i+16|0;E=$;Y=p&65535;Z=(Y|0)<(g|0);do if(!((t|0)!=1&(u|0)!=0)?!((u|0)==0?1:(((u|0)>-1?u:0-u|0)|0)!=1):0){z=0;A=0;y=0;while(1){if((z|0)>=(g|0))break;W=((b[n+(z<<1)>>1]|0)==0&1)+A|0;X=((b[o+(z<<1)>>1]|0)==0&1)+y|0;b[l+(z<<1)>>1]=32767;b[m+(z<<1)>>1]=32767;z=z+1|0;A=W;y=X}if(!(A|y)){y=v|2;if((y|0)==3|(u|0)<1){_=12;break}else{u=0;break}}if((u|0)==1)u=0;else{u=0;y=v|2;_=12}}else{u=0;_=8}while(0);if((_|0)==8){while(1){if((u|0)>=(g|0))break;b[l+(u<<1)>>1]=32767;b[m+(u<<1)>>1]=32767;u=u+1|0;_=8}u=0;y=v|2;_=12}a:do if((_|0)==12){C=(u|0)!=0;if((y|0)==2|C){A=0;while(1){if((A|0)>=(g|0))break;y=n+(A<<1)|0;z=b[y>>1]|0;if(z<<16>>16){X=b[j+((z&65535)+-1<<1)>>1]|0;b[y>>1]=X;b[l+((X&65535)+-1<<1)>>1]=A}y=o+(A<<1)|0;z=b[y>>1]|0;if(z<<16>>16){X=b[j+((z&65535)+-1<<1)>>1]|0;b[y>>1]=X;b[m+((X&65535)+-1<<1)>>1]=A}A=A+1|0}b:do if(!Z){D=q&65535;B=a[f+(D*144|0)+73>>0]|0;A=B<<24>>24;v=0;y=0;while(1){if(!((y|0)<3&(v|0)<(A|0))){v=y;break}z=b[f+(D*144|0)+6+(v<<1)>>1]|0;if(!(z<<16>>16==r<<16>>16?1:z<<16>>16==s<<16>>16)){b[E+(y<<1)>>1]=z;y=y+1|0}v=v+1|0}A=f+(D*144|0)|0;if(((a[f+(D*144|0)+75>>0]|0)+v|0)>2){u=-30010;break a}if(C&B<<24>>24==4){y=Ld(d,A,32767,j)|0;z=Ld(d,A,32767,n)|0;if((z|0)!=(Ld(d,A,32767,o)|0)){u=0;break a}y=(z|0)==(y|0);if((u|0)==1&y){u=0;break a}u=(u|0)==-1?y&1^1:u}if(!u){y=0;while(1){if((y|0)>=(v|0)){u=0;z=D;y=1;break b}u=e[E+(y<<1)>>1]|0;X=b[n+(u<<1)>>1]|0;if(X<<16>>16?X<<16>>16!=(b[j+(u<<1)>>1]|0):0){u=0;break a}X=b[o+(u<<1)>>1]|0;if(X<<16>>16?X<<16>>16!=(b[j+(u<<1)>>1]|0):0){u=0;break a}y=y+1|0}}else{z=D;y=1}}else{y=b[n+(Y<<1)>>1]|0;z=b[o+(Y<<1)>>1]|0;if(!((y|z)<<16>>16)){z=q&65535;y=0;break}if(y<<16>>16!=z<<16>>16){u=0;break a}if((b[j+(Y<<1)>>1]|0)!=y<<16>>16){u=0;break a}v=a[f+(Y*144|0)+73>>0]|0;B=a[f+(Y*144|0)+75>>0]|0;if((B+v|0)>3){u=0;break a}C=q&65535;A=0;y=0;while(1){if((A|0)>=3)break;z=b[f+(Y*144|0)+94+(A<<1)>>1]|0;if(!(z<<16>>16))break;X=((z&65535)+-1|0)==(C|0);y=X&1;if(X)break;A=A+1|0}if(!y){u=-1;break a}y=a[f+(Y*144|0)+106+A>>0]|0;z=0;A=0;while(1){if(!((A|0)<3&(z|0)<(v|0)))break;if((z|0)!=(y|0)){b[E+(A<<1)>>1]=b[f+(Y*144|0)+6+(z<<1)>>1]|0;A=A+1|0}z=z+1|0}if((B+A|0)>2){u=-30010;break a}else z=0;while(1){if((z|0)>=(A|0)){z=C;y=0;break b}y=e[E+(z<<1)>>1]|0;X=b[n+(y<<1)>>1]|0;if(X<<16>>16?X<<16>>16!=(b[j+(y<<1)>>1]|0):0){u=0;break a}X=b[o+(y<<1)>>1]|0;if(X<<16>>16?X<<16>>16!=(b[j+(y<<1)>>1]|0):0){u=0;break a}z=z+1|0}}while(0);S=w+116|0;T=w+64|0;R=(u|0)==0;X=(t|0)==1;Q=X^1;P=X&y;W=h+(z<<1)|0;U=(t|0)==2;N=f+(z*144|0)+134|0;O=0;A=0;y=0;z=0;u=0;while(1){if((O|0)>=(c[S>>2]|0))break;C=c[T>>2]|0;H=(e[C+(O<<2)>>1]|0)+-1|0;D=b[k+(H<<1)>>1]|0;L=D&65535;G=b[l+(H<<1)>>1]|0;E=G&65535;H=b[m+(H<<1)>>1]|0;F=H&65535;K=(E|0)<(g|0);v=K&1;t=(F|0)<(g|0);B=t&1;if(!R?(V=b[N>>1]|0,V<<16>>16==(b[f+(E*144|0)+134>>1]|0)):0)M=V<<16>>16==(b[f+(F*144|0)+134>>1]|0);else M=0;c:do if(K|t){if(!Z){switch((H<<16>>16==q<<16>>16&1)+(G<<16>>16==q<<16>>16&1)|0){case 1:{u=-1;break a}case 2:break c;default:{}}if(D<<16>>16==q<<16>>16){u=-1;break a}}if(X){if(!(G<<16>>16==H<<16>>16|M)){u=-1;break a}if(!(a[f+(E*144|0)+124>>0]|0)){u=0;break a}if(!(a[f+(F*144|0)+124>>0]|0)){u=0;break a}else B=0}else if(U){if((B+v|0)!=1){u=-1;break a}if(K?(a[f+(E*144|0)+124>>0]|0)==0:0){u=0;break a}if(t?(a[f+(F*144|0)+124>>0]|0)==0:0){u=0;break a}else B=1}else B=0;I=a[C+(O<<2)+2>>0]|0;J=I&255;v=G<<16>>16==D<<16>>16;if(v|Q){if(!B)_=103}else if(!(H<<16>>16!=D<<16>>16|B))_=103;if((_|0)==103){_=0;if(!(v&H<<16>>16==D<<16>>16&(K&t))){u=-1;break a}M=f+(L*144|0)|0;L=Ld(d,M,32767,j)|0;K=Ld(d,M,32767,n)|0;if((L|0)==(K|0)&(L|0)==(Ld(d,M,32767,o)|0))break;else{u=0;break a}}if(K)r=Md(d,f,E,n)|0;else r=999;if(t)s=Md(d,f,F,o)|0;else s=999;C=r+-1|0;D=s+-1|0;if(!(C>>>0<4|D>>>0<4)){u=-1;break a}d:do if(K&t){if(!M)if((r|0)==(s|0)?G<<16>>16==H<<16>>16:0)break;else{u=-1;break a}B=Md(d,f,E,j)|0;v=Md(d,f,F,j)|0;do if(G<<16>>16!=H<<16>>16){if((r|0)==(B|0)|(s|0)==(v|0)){if(C>>>0<2)break}else if(C>>>0<2&(r|0)!=(s|0))break;if((r|0)==(s|0)|(D|C)>>>0<2)break d}while(0);A=A+1|0}while(0);v=K?r:s;B=(I+-1&255)<2;if(B&(J|0)==(v|0)){if(!P)break;y=((b[W>>1]|0)==(b[h+(L<<1)>>1]|0)&1)+y|0;break}if(B&(v+-1|0)>>>0<2){z=(M&1^1)+z|0;break}v=((v|0)==(x|0)?2:(v|0)==4?4:0)|((J|0)==(x|0)?2:I<<24>>24==4?4:0);if(!v){u=-1;break a}u=v|u}while(0);O=O+1|0}if(!(z|A)){R=w+100|0;P=w+60|0;Q=Z&X;N=h+(Y<<1)|0;O=0;while(1){if((O|0)>=(c[R>>2]|0))break;J=c[P>>2]|0;I=(e[J+(O*6|0)>>1]|0)+-1|0;C=b[k+(I<<1)>>1]|0;L=C&65535;J=(e[J+(O*6|0)+2>>1]|0)+-1|0;D=b[k+(J<<1)>>1]|0;M=D&65535;G=b[l+(I<<1)>>1]|0;r=G&65535;H=b[l+(J<<1)>>1]|0;s=H&65535;I=b[m+(I<<1)>>1]|0;E=I&65535;J=b[m+(J<<1)>>1]|0;t=J&65535;F=(r|0)<(g|0)&(s|0)<(g|0);z=F&1;K=(E|0)<(g|0)&(t|0)<(g|0);A=K&1;e:do if(F|K){if(Z){if(G<<16>>16==q<<16>>16?H<<16>>16==p<<16>>16:0)v=1;else v=G<<16>>16==p<<16>>16?H<<16>>16==q<<16>>16:0;if(I<<16>>16==q<<16>>16?J<<16>>16==p<<16>>16:0)B=1;else B=I<<16>>16==p<<16>>16?J<<16>>16==q<<16>>16:0;switch((B&1)+(v&1)|0){case 1:{u=-1;break a}case 2:break e;default:{}}if(C<<16>>16==q<<16>>16?D<<16>>16==p<<16>>16:0){u=-1;break a}if(C<<16>>16==p<<16>>16?D<<16>>16==q<<16>>16:0){u=-1;break a}}if(X){if(!(G<<16>>16==I<<16>>16?H<<16>>16==J<<16>>16:0)?!(H<<16>>16==I<<16>>16?G<<16>>16==J<<16>>16:0):0){u=-1;break a}if((Jd(f,r,s)|0)<0){u=0;break a}z=a[(c[P>>2]|0)+(O*6|0)+4>>0]|0;if(!(G<<16>>16==C<<16>>16?H<<16>>16==D<<16>>16:0)?(G<<16>>16!=D<<16>>16?1:H<<16>>16!=C<<16>>16):0){B=z;v=z&255}else _=151}else if(U){if((A+z|0)!=1){u=-1;break a}if(F?(Jd(f,r,s)|0)<0:0){u=0;break a}if(K?(Jd(f,E,t)|0)<0:0){u=0;break a}v=a[(c[P>>2]|0)+(O*6|0)+4>>0]|0;B=v;v=v&255}else _=151;if((_|0)==151){_=0;if(!(F&K)){u=-1;break a}A=M+1|0;z=0;while(1){if((z|0)>=3){B=32767;break}v=b[f+(L*144|0)+94+(z<<1)>>1]|0;if(!(v<<16>>16)){B=32767;break}if((v&65535|0)==(A|0)){_=156;break}z=z+1|0}if((_|0)==156){_=0;B=b[f+(L*144|0)+6+(a[f+(L*144|0)+106+z>>0]<<1)>>1]|0}A=L+1|0;z=0;while(1){if((z|0)>=3){u=-30014;break a}v=b[f+(M*144|0)+94+(z<<1)>>1]|0;if(!(v<<16>>16)){u=-30014;break a}if((v&65535|0)==(A|0))break;z=z+1|0}z=b[f+(M*144|0)+6+(a[f+(M*144|0)+106+z>>0]<<1)>>1]|0;if((B&65535)>32766|(z&65535)>32766){u=-30014;break a}v=f+(L*144|0)|0;A=Ld(d,v,B,j)|0;w=f+(M*144|0)|0;A=(Ld(d,w,z,j)|0)+A|0;Y=Ld(d,v,B,n)|0;Y=(Ld(d,w,z,n)|0)+Y|0;v=Ld(d,v,B,o)|0;z=Ld(d,w,z,o)|0;A=(A|0)%2|0;if((A|0)!=((Y|0)%2|0|0)){u=0;break a}if((A|0)==((z+v|0)%2|0|0))break;else{u=0;break a}}if(F)A=Kd(f,r,s,n)|0;else A=999;if(K)z=Kd(f,E,t,o)|0;else z=999;if(!((A+-1|0)>>>0<4|(z+-1|0)>>>0<4)){u=-1;break a}do if(F&K)if(G<<16>>16==I<<16>>16?H<<16>>16==J<<16>>16:0)if((A|0)==(z|0))break;else{u=-1;break a}else if((H<<16>>16==I<<16>>16?G<<16>>16==J<<16>>16:0)&(A|0)==(z|0))break;else{u=-1;break a}while(0);z=F?A:z;A=(B+-1&255)<2;if(!(A&(v|0)==(z|0))){if(A&(z+-1|0)>>>0<2){u=0;break a}z=((z|0)==(x|0)?2:(z|0)==4?4:0)|((v|0)==(x|0)?2:B<<24>>24==4?4:0);if(!z){u=-1;break a}u=z|u;break}if(Q){v=b[W>>1]|0;A=b[h+(L<<1)>>1]|0;if(v<<16>>16==A<<16>>16){z=b[h+(M<<1)>>1]|0;if((b[N>>1]|0)!=z<<16>>16)_=145}else{z=b[h+(M<<1)>>1]|0;_=145}if((_|0)==145){_=0;if(v<<16>>16!=z<<16>>16)break;if((b[N>>1]|0)!=A<<16>>16)break}y=y+1|0}}while(0);O=O+1|0}u=(y|0)>0?0:u|1}else u=0}else u=0}while(0);i=$;return u|0}function tf(e,f,g,h,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y){e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;t=t|0;u=u|0;v=v|0;w=w|0;x=x|0;y=y|0;var z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0;ka=i;i=i+32|0;ja=ka+12|0;ga=ka+8|0;ha=ka+4|0;fa=ka;_=ja+2|0;$=g<<1;aa=ga+2|0;ba=x+100|0;ca=x+60|0;da=x+4|0;ia=2;B=0;A=0;z=0;a:while(1){Y=(ia|0)==1;Z=0;C=B;while(1){B=z+30019|0;if(!((Z|0)<(g|0)&B>>>0>19))break;W=f+(Z*144|0)+73|0;b:do if((a[W>>0]|0)==3?(b[f+(Z*144|0)+94>>1]|0)!=0:0){N=s+(Z<<2)|0;O=Z+1&65535;P=v+(Z<<1)|0;Q=w+(Z<<1)|0;R=q+(Z<<1)|0;S=r+(Z<<1)|0;T=Z&65535;U=f+(Z*144|0)+134|0;V=n+(Z<<1)|0;M=0;while(1){if((M|0)>2|(z+30019|0)>>>0<20)break b;L=b[f+(Z*144|0)+94+(M<<1)>>1]|0;B=L&65535;if(!(L<<16>>16))break b;L=f+(Z*144|0)+118+M|0;D=d[L>>0]&7;switch(D|0){case 0:case 6:{X=11;break}default:if(D>>>0<3)D=M;else X=11}c:do if((X|0)==11){X=0;K=B+65535|0;E=b[f+(Z*144|0)+6+(a[f+(Z*144|0)+106+M>>0]<<1)>>1]|0;F=a[W>>0]|0;G=1;B=0;while(1){if((G|0)>(F|0))break;D=b[(c[N>>2]|0)+(G<<1)>>1]|0;if(D<<16>>16!=E<<16>>16){b[ja+(B<<1)>>1]=D;B=B+1|0}G=G+1|0}J=K&65535;if((B|0)!=2){A=-30012;X=59;break a}H=b[ja>>1]|0;B=H&65535;I=b[_>>1]|0;D=I&65535;if((b[o+(B<<1)>>1]|0)==(b[o+(D<<1)>>1]|0)){B=(b[f+(B*144|0)+134>>1]|0)==(b[f+(D*144|0)+134>>1]|0);d:do switch(ia|0){case 2:{if(B){D=M;C=C+1|0;break c}else{D=o;E=o;F=s;G=s}break}case 1:{if(!B){D=M;break c}B=pf(e,f,g,h,K&65535,Z,ja,0,1,0,j,k,l,m,o,n,t,u,da)|0;if((B|0)<1){D=M;z=(z|0)>(B|0)?B:z;break c}else{D=c[j>>2]|0;E=c[k>>2]|0;F=t;G=u;break d}}default:{z=-30010;break a}}while(0);er(v|0,0,$|0)|0;er(w|0,0,$|0)|0;er(q|0,0,$|0)|0;er(r|0,0,$|0)|0;b[ha>>1]=1;b[P>>1]=O;b[Q>>1]=O;b[R>>1]=1;b[S>>1]=1;b[ga>>1]=T;b[aa>>1]=J;if((Y?(a[L>>0]&15)==14:0)?(ea=K&65535,(b[U>>1]|0)==(b[f+(ea*144|0)+134>>1]|0)):0)B=(a[f+(ea*144|0)+73>>0]|0)==3;else B=0;c[fa>>2]=B<<31>>31;E=rf(f,T,H,T,I,ga,v,w,q,r,F,G,D,E,n,ha,fa,0)|0;if((E|0)>0){B=sf(e,f,g,o,n,p,q,r,v,w,J,T,H,I,ia,c[fa>>2]|0,0,x,y)|0;if((B|0)>0){if(B&6|0){H=B&2|0?y:4;J=a[L>>0]|0;L=J&7;if(!((J&7)==6|(L|0)>(H|0)&(L+-3|0)>>>0<2)){D=M;break}pd(f,Z,M,H)|0;G=b[V>>1]|0;F=b[n+((K&65535)<<1)>>1]|0;E=(G&65535)>(F&65535)?G:F;F=(G&65535)<(F&65535)?G:F;G=c[ba>>2]|0;B=0;while(1){if((B|0)>=(G|0)){X=39;break}D=c[ca>>2]|0;if((b[D+(B*6|0)>>1]|0)==E<<16>>16?(b[D+(B*6|0)+2>>1]|0)==F<<16>>16:0){X=37;break}B=B+1|0}if((X|0)==37){X=0;a[D+(B*6|0)+4>>0]=H;D=M;A=A+1|0;break}else if((X|0)==39){X=0;if((G|0)>0){A=-30010;X=59;break a}else{D=M;A=A+1|0;break}}}if(!(qd(f,Z,M)|0)){A=-30012;X=59;break a}I=M+-1|0;B=b[V>>1]|0;F=b[n+((K&65535)<<1)>>1]|0;E=(B&65535)>(F&65535)?B:F;F=(B&65535)<(F&65535)?B:F;B=c[ba>>2]|0;H=B+-1|0;D=0;while(1){if((B|0)<=(D|0)){X=49;break}X=c[ca>>2]|0;G=X+(D*6|0)|0;if((b[G>>1]|0)==E<<16>>16?(b[X+(D*6|0)+2>>1]|0)==F<<16>>16:0){E=G;X=45;break}D=D+1|0}if((X|0)==45){X=0;if((H|0)>(D|0)){jr(E|0,E+6|0,(H-D|0)*6|0)|0;B=c[ba>>2]|0}c[ba>>2]=B+-1}else if((X|0)==49?(X=0,(B|0)>0):0){A=-30010;X=59;break a}D=I;A=A+1|0;break}}else B=0;if(!z)z=(E|0)<0?E:(B|0)<0?B:0;if((z+30019|0)>>>0>=20)if((E+30019|0)>>>0<20){D=M;z=E}else{D=M;z=(B+30019|0)>>>0<20?B:z}else D=M}else D=M}while(0);M=D+1|0}}while(0);Z=Z+1|0}if(B>>>0<20|((ia|0)!=2|(C|0)==0)){X=59;break}else{ia=1;B=C}}if((X|0)==59)if((z+30019|0)>>>0>=20)z=(z|0)==0?A:~z;i=ka;return z|0}function uf(e,f,g,h,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y){e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;t=t|0;u=u|0;v=v|0;w=w|0;x=x|0;y=y|0;var z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0;ja=i;i=i+32|0;ia=ja+16|0;fa=ja+8|0;ga=ja+4|0;ea=ja;Z=g<<1;_=fa+2|0;ba=x+116|0;ca=x+64|0;da=x+4|0;ha=2;B=0;A=0;z=0;a:while(1){X=0;C=B;while(1){B=z+30019|0;if(!((X|0)<(g|0)&B>>>0>19))break;W=f+(X*144|0)+124|0;b:do if(((a[W>>0]|0)!=0?(b[f+(X*144|0)+94>>1]|0)==0:0)?($=f+(X*144|0)+73|0,aa=a[$>>0]|0,aa<<24>>24<=4):0){V=f+(X*144|0)+126|0;switch(d[V>>0]&7|0){case 3:case 4:case 6:break;default:break b}B=aa<<24>>24;D=s+(X<<2)|0;E=0;while(1){if((E|0)>=(B|0))break;U=E+1|0;b[ia+(E<<1)>>1]=b[(c[D>>2]|0)+(U<<1)>>1]|0;E=U}N=X+1&65535;O=v+(X<<1)|0;P=w+(X<<1)|0;Q=q+(X<<1)|0;R=r+(X<<1)|0;S=X&65535;T=n+(X<<1)|0;B=aa;U=0;c:while(1){if((U|0)>=(B<<24>>24|0))break b;if(!((z+30019|0)>>>0>19&(a[W>>0]|0)!=0))break b;M=U+1|0;K=ia+(U<<1)|0;L=M;while(1){B=a[$>>0]|0;if((L|0)>=(B<<24>>24|0)){U=M;continue c}if(!((z+30019|0)>>>0>19&(a[W>>0]|0)!=0)){U=M;continue c}I=ia+(L<<1)|0;J=0;while(1){if((J|0)>=1)break;if(!((z+30019|0)>>>0>19&(a[W>>0]|0)!=0))break;G=b[K>>1]|0;B=G&65535;H=b[I>>1]|0;D=H&65535;d:do if((b[o+(B<<1)>>1]|0)==(b[o+(D<<1)>>1]|0)){B=(b[f+(B*144|0)+134>>1]|0)==(b[f+(D*144|0)+134>>1]|0);e:do switch(ha|0){case 2:{if(B){C=C+1|0;break d}else{B=o;D=o;E=s;F=s}break}case 1:{if(!B)break d;B=pf(e,f,g,h,32767,X,ia,U,L,J,j,k,l,m,o,n,t,u,da)|0;if((B|0)<1){z=(z|0)>(B|0)?B:z;break d}else{B=c[j>>2]|0;D=c[k>>2]|0;E=t;F=u;break e}}default:{z=-30010;break a}}while(0);er(v|0,0,Z|0)|0;er(w|0,0,Z|0)|0;er(q|0,0,Z|0)|0;er(r|0,0,Z|0)|0;b[ga>>1]=1;b[O>>1]=N;b[P>>1]=N;b[Q>>1]=1;b[R>>1]=1;b[fa>>1]=S;b[_>>1]=32767;c[ea>>2]=((J|2|0)==3)<<31>>31;D=rf(f,S,G,S,H,fa,v,w,q,r,E,F,B,D,n,ga,ea,J)|0;do if((D|0)>0){B=sf(e,f,g,o,n,p,q,r,v,w,32766,S,G,H,ha,c[ea>>2]|0,J,x,y)|0;if((B|0)<=0)break;if(B&6|0){B=B&2|0?y:4;G=a[V>>0]|0;D=G&255;H=D&7;if(!((G&7)==6|(H|0)>(B|0)&(H+-3|0)>>>0<2))break d;G=B&7;a[V>>0]=D&248|G;G=G&255;a[W>>0]=G;E=b[T>>1]|0;F=c[ba>>2]|0;B=0;while(1){if((B|0)>=(F|0)){Y=37;break}D=c[ca>>2]|0;if((b[D+(B<<2)>>1]|0)==E<<16>>16){Y=35;break}B=B+1|0}if((Y|0)==35){Y=0;a[D+(B<<2)+2>>0]=G;A=A+1|0;break d}else if((Y|0)==37){Y=0;if((F|0)>0){A=-30010;Y=57;break a}else{A=A+1|0;break d}}}rd(f,X)|0;D=b[T>>1]|0;B=c[ba>>2]|0;G=B+-1|0;F=0;while(1){if((B|0)<=(F|0)){Y=45;break}E=(c[ca>>2]|0)+(F<<2)|0;if((b[E>>1]|0)==D<<16>>16){D=F;Y=41;break}F=F+1|0}if((Y|0)==41){Y=0;if((G|0)>(D|0)){jr(E|0,E+4|0,G-D<<2|0)|0;B=c[ba>>2]|0}c[ba>>2]=B+-1}else if((Y|0)==45?(Y=0,(B|0)>0):0){A=-30010;Y=57;break a}A=A+1|0;break d}else B=0;while(0);do if(!z){if((D|0)<0){z=D;break}z=(B|0)<0?B:0}while(0);if((z+30019|0)>>>0<20)break;if((D+30019|0)>>>0<20){z=D;break}z=(B+30019|0)>>>0<20?B:z}while(0);J=J+1|0}L=L+1|0}}}while(0);X=X+1|0}if(B>>>0<20|((ha|0)!=2|(C|0)==0)){Y=57;break}else{ha=1;B=C}}if((Y|0)==57)z=(z+30019|0)>>>0<20?z:((z|0)!=0)<<31>>31^A;i=ja;return z|0}function vf(a,b,d,e,f,g,h,j,k,l,m,n,o){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;K=i;i=i+32|0;G=K+24|0;H=K+20|0;I=K+16|0;E=K+12|0;F=K+8|0;C=K+4|0;D=K;c[G>>2]=0;c[H>>2]=0;c[I>>2]=0;c[E>>2]=0;c[F>>2]=0;c[C>>2]=0;c[D>>2]=0;if(!(nf(b,d,k,l,C,D,G,H,I,E,F)|0))p=-30002;else{v=c[C>>2]|0;w=c[D>>2]|0;x=c[G>>2]|0;y=c[H>>2]|0;z=c[I>>2]|0;A=c[E>>2]|0;B=c[F>>2]|0;s=0;r=0;q=0;while(1){p=tf(a,b,d,e,f,g,h,j,l,k,m,v,w,x,y,z,A,B,n,o)|0;if((p+30019|0)>>>0<20)break;if((p|0)<0){t=~p;r=(p|0)<(r|0)?p:r}else t=p;p=uf(a,b,d,e,f,g,h,j,l,k,m,v,w,x,y,z,A,B,n,o)|0;if((p+30019|0)>>>0<20)break;if((p|0)<0){u=~p;q=(p|0)<(q|0)?p:q}else u=p;t=u+t|0;s=t+s|0;if(!t){p=u;J=10;break}}if((J|0)==10)if(!((r+30019|0)>>>0<20|(q+30019|0)>>>0<20))p=((r|0)<(q|0)?r:q)>>31^s;mf(C,D,G,H,I,E,F)}i=K;return p|0}function wf(f,g,h,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A){f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;t=t|0;u=u|0;v=v|0;w=w|0;x=x|0;y=y|0;z=z|0;A=A|0;var B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0;lb=i;i=i+176|0;kb=lb+166|0;_a=lb+164|0;ab=lb+162|0;Za=lb+144|0;db=lb+120|0;cb=lb+96|0;Ya=lb+88|0;Ua=lb+160|0;Wa=lb+158|0;fb=lb+84|0;gb=lb+80|0;eb=lb+152|0;Va=lb+40|0;$a=lb;Xa=lb+150|0;bb=lb+148|0;b[kb>>1]=0;b[kb+2>>1]=0;b[kb+4>>1]=0;hb=Qe(y)|0;Aa=(z|0)!=0;ib=x+100|0;jb=x+60|0;Oa=x+32|0;Pa=x+40|0;Qa=x+200|0;Ra=x+204|0;Sa=(v|0)!=0;Ta=x+36|0;Ba=z+-1|0;Ca=s+4|0;Da=r+8|0;Ea=z+1|0;Fa=x+16|0;Ga=$a+12|0;Ha=$a+20|0;Ia=Va+12|0;Ja=Va+20|0;Ka=db+4|0;La=cb+4|0;Ma=cb+8|0;Na=db+8|0;B=0;C=m;F=0;E=0;m=0;a:while(1){while(1){b:do if((!Aa?(er(c[Qa>>2]|0,0,j|0)|0,Fe(c[Ra>>2]|0,h,j),Sa&(c[Oa>>2]|0)!=0):0)?(c[Ta>>2]|0)==0:0){D=0;while(1){if((D|0)>=(k|0))break b;b[v+(D<<1)>>1]=D;D=D+1|0}}while(0);if((c[ib>>2]|0)>(z|0))break;if(!Aa)c[Pa>>2]=0;D=xf(f,g,h,j,k,l,n,o,p,q,r,s,t,u,v,w,x,y,0,A)|0;if((D|0)!=4){B=D;za=246;break a}if(Aa){B=4;break a}c[Oa>>2]=1}c[gb>>2]=0;D=c[jb>>2]|0;ya=D+(z*6|0)|0;b[kb>>1]=b[ya>>1]|0;b[kb+2>>1]=b[ya+2>>1]|0;b[kb+4>>1]=b[ya+4>>1]|0;c[Za>>2]=1;b[ab>>1]=0;b[_a>>1]=0;if(Aa){b[Ua>>1]=b[D+(Ba*6|0)>>1]|0;D=b[D+(Ba*6|0)+2>>1]|0}else{b[Ua>>1]=0;D=0}b[Wa>>1]=D;T=F;c:while(1){Re(y,hb)|0;if(!(Ce(Ua,Wa,_a,ab,Za,c[Ra>>2]|0,r,s,n,o,h,j,C)|0)){if(!((C|0)==0&(c[Za>>2]|0)!=0)){D=T;za=29;break}b[Va>>1]=0;b[$a>>1]=0;b[Xa>>1]=0;b[bb>>1]=0;D=(Ce(Va,Xa,$a,bb,Za,c[Ra>>2]|0,r,s,n,o,h,j,1)|0)==0;if(D)C=0;else{b[Ua>>1]=b[Va>>1]|0;b[Wa>>1]=b[Xa>>1]|0;b[_a>>1]=b[$a>>1]|0;b[ab>>1]=b[bb>>1]|0;C=1}if(D){D=T;za=29;break}}I=c[Pa>>2]|0;D=b[Ua>>1]|0;if(!I){F=c[jb>>2]|0;G=b[F+(z*6|0)>>1]|0;if((D&65535)>(G&65535)){D=T;za=29;break}if(D<<16>>16==G<<16>>16?(e[Wa>>1]|0)>(e[F+(z*6|0)+2>>1]|0):0){D=T;za=29;break}}va=e[o+((D&65535)+-1<<1)>>1]|0;R=c[r>>2]|0;wa=b[R+(va<<1)>>1]|0;xa=wa&65535;ya=e[o+((e[Wa>>1]|0)+-1<<1)>>1]|0;R=b[R+(ya<<1)>>1]|0;ua=xa+-1|0;P=c[Ca>>2]|0;Q=c[s>>2]|0;if(wa<<16>>16!=(b[Q+(e[P+(ua<<1)>>1]<<1)>>1]|0)){B=-30010;F=1;D=T;break}if(R<<16>>16==(b[Q+(e[P+((R&65535)+-1<<1)>>1]<<1)>>1]|0)){S=0;J=0;K=0;D=0;F=0;G=0;H=0}else{B=-30010;F=1;D=T;break}while(1){if((xa|0)<=(S|0))break;N=e[P+(ua-S<<1)>>1]|0;if(wa<<16>>16!=(b[Q+(N<<1)>>1]|0))break;d:do if(b[h+(N*144|0)+94>>1]|0){O=0;M=J;while(1){if((O|0)>=3){J=M;break d}J=b[h+(N*144|0)+94+(O<<1)>>1]|0;if(!(J<<16>>16)){J=M;break d}if(R<<16>>16==(b[Q+((J&65535)+-1<<1)>>1]|0)){ta=d[h+(N*144|0)+118+O>>0]&7;c[gb>>2]=ta;switch(ta|0){case 4:{L=1;J=M;F=F+1|0;break}case 3:{L=1;J=M;G=G+1|0;break}case 1:{L=1;J=M+1|0;break}case 2:{L=1;J=M;H=H+1|0;break}case 6:{L=1;J=M;K=K+1|0;break}case 0:{L=0;J=M;break}default:{L=1;J=M}}D=L+D|0}else J=M;O=O+1|0;M=J}}while(0);S=S+1|0}if((D|0)!=(F+G+J+H+K|0)){B=-30010;F=1;D=T;break}if(!D)D=T;else{c[fb>>2]=(K|0)>0&1;D=T;O=F;N=G;M=H;ta=0;G=0;e:while(1){if(!Aa)c[Pa>>2]=0;sa=ta;ta=ta+1|0;do if(!sa){if(c[fb>>2]|0){c[gb>>2]=1;F=1;break}if(!J)if(!M)if(!N)F=O|0?4:0;else F=3;else F=2;else F=1;c[gb>>2]=F;za=64}else{G=c[gb>>2]|0;F=De(gb,fb,J,M,N,O,K,A)|0;switch(F|0){case 1:break e;case 0:break;default:{B=F;F=1;break c}}F=c[gb>>2]|0;za=64}while(0);if((za|0)==64){za=0;if(!F){B=-30010;F=1;break c}}if(!(c[Pa>>2]|0)){H=(m|0)!=0;if(H)I=(c[jb>>2]|0)+(z*6|0)|0;else I=kb;if((Ee(I,b[Ua>>1]|0,b[Wa>>1]|0,F&255)|0)<0){za=70;break c}F=c[gb>>2]|0}F=(G|0)==(F|0);if(!(Aa|F))c[Pa>>2]=0;if(F){L=-1;sa=0;I=O;H=N;F=M}else{Re(y,hb)|0;L=-1;sa=0;I=O;H=N;F=M}f:while(1){if((xa|0)<=(sa|0))break;ra=e[(c[Ca>>2]|0)+(ua-sa<<1)>>1]|0;if(wa<<16>>16!=(b[(c[s>>2]|0)+(ra<<1)>>1]|0))break;g:do if(b[h+(ra*144|0)+94>>1]|0){do if((hb|0)<(Qe(y)|0)){if((Ke(y,b[Ua>>1]|0)|0)!=1){Q=0;M=0;pa=0;R=0;oa=I;O=H;qa=F;break}if((Se(y,ra,v)|0)==1)break g;else{Q=0;M=0;pa=0;R=0;oa=I;O=H;qa=F}}else{Q=0;M=0;pa=0;R=0;oa=I;O=H;qa=F}while(0);h:while(1){if((pa|0)>=3){F=Q;H=R;I=oa;M=O;N=qa;break}F=b[h+(ra*144|0)+94+(pa<<1)>>1]|0;if(!(F<<16>>16)){F=Q;H=R;I=oa;M=O;N=qa;break}na=(F&65535)+-1|0;i:do if((b[(c[r>>2]|0)+(ya<<1)>>1]|0)==(b[(c[s>>2]|0)+(na<<1)>>1]|0)){F=a[h+(ra*144|0)+118+pa>>0]|0;H=F&7;if((H+-1|0)>>>0<4){ma=c[gb>>2]|0;if(!((ma|0)==(H|0)?(ma|0)!=(c[fb>>2]|0):0)){P=L;F=Q;H=R;N=oa;I=qa;za=221;break}}else{if((F&7)!=6){B=-30010;F=1;za=222;break c}if((c[gb>>2]|0)!=(c[fb>>2]|0)){P=L;F=Q;H=R;N=oa;I=qa;za=221;break}}c[db>>2]=0;c[cb>>2]=u;c[Ya>>2]=0;F=F<<24>>24;if(!(F&64))H=0;else H=((F&7)+-1|0)>>>0<4;F=H&1;do if(!((K|0)!=0|H)){if((((oa|0)==0&1)+((O|0)==0&1)+((J|0)==0&1)+((qa|0)==0&1)|0)!=3)break;F=Be(b[Ua>>1]|0,b[Wa>>1]|0,r,s,o,h)|0;if((F|0)<0){B=-30010;F=1;za=222;break c}}while(0);Q=(F|0)!=0;j:do if(Q){jf(Da)|0;H=0;ma=L;P=0}else{do if((L|0)==(ra|0))H=c[Ka>>2]|0;else{H=kf(g,k,l,va,ra,t,c[cb>>2]|0,La,x,w,r,s,Ya)|0;if((H+30019|0)>>>0<20){B=H;F=1;za=222;break c}H=c[Ya>>2]|0;c[Ka>>2]=H;if(!H){H=0;break}if(!((hb|0)!=(Qe(y)|0)?(Ke(y,b[Ua>>1]|0)|0)!=0:0))Je(y,b[Ua>>1]|0)|0;Ne(y,ra)|0}while(0);I=r+(H<<2)|0;L=s+(H<<2)|0;if((b[(c[I>>2]|0)+(ya<<1)>>1]|0)!=(b[(c[L>>2]|0)+(na<<1)>>1]|0)){I=c[fb>>2]|0;L=c[gb>>2]|0;if((I|0)==(L|0)){P=ra;F=0;H=R;K=K+(((I|0)==1)<<31>>31)|0;N=oa;I=qa;za=221;break i}else{P=ra;F=0;H=R;J=J-((L|0)==1&1)|0;N=oa-((L|0)==4&1)|0;O=O-((L|0)==3&1)|0;I=qa-((L|0)==2&1)|0;za=221;break i}}do if((H|0)>0){M=Be(b[Ua>>1]|0,b[Wa>>1]|0,I,L,o,h)|0;if((M|0)<0){B=-30012;F=1;za=222;break c}if(!M)break;jf(I+8|0)|0;ma=ra;P=1;break j}while(0);do if((hb|0)<(Qe(y)|0)){if((Ke(y,b[Wa>>1]|0)|0)!=1)break;if((Se(y,na,v)|0)==1){P=ra;F=0;M=0;H=R;N=oa;I=qa;za=221;break i}}while(0);I=kf(g,k,l,ya,na,t,c[La>>2]|0,Ma,x,w,I,L,Ya)|0;if((I+30019|0)>>>0<20){B=I;F=1;za=222;break c}ma=c[Ya>>2]|0;H=ma+H|0;c[Na>>2]=H;if(!ma){ma=ra;M=0;P=2;break}if(!((hb|0)!=(Qe(y)|0)?(Ke(y,b[Wa>>1]|0)|0)!=0:0))Je(y,b[Wa>>1]|0)|0;Ne(y,na)|0;ma=ra;M=0;P=2}while(0);I=c[gb>>2]|0;if((I|0)!=(c[fb>>2]|0)){L=I&255;I=Ee((c[jb>>2]|0)+(z*6|0)|0,b[Ua>>1]|0,b[Wa>>1]|0,L)|0;do if((I|0)<0){if(c[Pa>>2]|0){N=0;break}c[Fa>>2]=(c[Fa>>2]|0)+1;if((hb|0)>=(Qe(y)|0)){P=ma;H=R;N=oa;I=qa;za=221;break i}if((Ke(y,b[Wa>>1]|0)|0)!=1){P=ma;H=R;N=oa;I=qa;za=221;break i}Pe(y,na)|0;Le(y)|0;P=ma;H=R;N=oa;I=qa;za=221;break i}else{if((I|0)<=0){N=0;break}if(c[Pa>>2]|0){N=0;break}c[Pa>>2]=1;N=(c[jb>>2]|0)+(z*6|0)|0;b[eb>>1]=b[N>>1]|0;b[eb+2>>1]=b[N+2>>1]|0;b[eb+4>>1]=b[N+4>>1]|0;N=1}while(0);la=c[jb>>2]|0;b[la+(z*6|0)>>1]=b[Ua>>1]|0;b[la+(z*6|0)+2>>1]=b[Wa>>1]|0;a[la+(z*6|0)+4>>0]=L;la=(c[Qa>>2]|0)+va|0;a[la>>0]=(a[la>>0]|0)+1<<24>>24;la=(c[Qa>>2]|0)+ya|0;a[la>>0]=(a[la>>0]|0)+1<<24>>24;if(!Q){la=(c[Ra>>2]|0)+ra|0;a[la>>0]=(a[la>>0]|0)+-1<<24>>24;la=(c[Ra>>2]|0)+na|0;a[la>>0]=(a[la>>0]|0)+-1<<24>>24}I=wf(f,g,h,j,k,l,C,n,o,p,q,r+(H<<2)|0,s+(H<<2)|0,t,c[cb+(P<<2)>>2]|0,v,w,x,y,Ea,A)|0;if(!Q){la=(c[Ra>>2]|0)+ra|0;a[la>>0]=(a[la>>0]|0)+1<<24>>24;la=(c[Ra>>2]|0)+na|0;a[la>>0]=(a[la>>0]|0)+1<<24>>24}la=(c[Qa>>2]|0)+va|0;a[la>>0]=(a[la>>0]|0)+-1<<24>>24;la=(c[Qa>>2]|0)+ya|0;a[la>>0]=(a[la>>0]|0)+-1<<24>>24;if((I|0)==4){za=136;break c}if((I+30019|0)>>>0<20){B=I;F=1;za=222;break c}do if((I|0)>0){H=R+1|0;if((N|0)==0?(I&2|0)==0:0){m=m|1;break}Oe(y,hb,1);m=m|3}else{if(N|0){c[Pa>>2]=0;la=(c[jb>>2]|0)+(z*6|0)|0;b[la>>1]=b[eb>>1]|0;b[la+2>>1]=b[eb+2>>1]|0;b[la+4>>1]=b[eb+4>>1]|0}if((hb|0)>=(Qe(y)|0)){H=R;break}if((Ke(y,b[Wa>>1]|0)|0)!=1){H=R;break}Pe(y,na)|0;Le(y)|0;H=R}while(0);if(!(M|F)){L=ma;N=oa;I=qa;break}else{L=ma;I=oa;M=O;N=qa;break h}}la=db+(P<<2)|0;L=gf(va,ra,ya,na,h,Va,n,c[r+(H<<2)>>2]|0,c[s+(H<<2)>>2]|0)|0;if(!L){B=-30010;F=1;za=222;break c}ea=(L|0)>0;fa=ea?1:2;ga=cb+(P<<2)|0;ka=P+1|0;ha=cb+(ka<<2)|0;ia=db+(ka<<2)|0;ja=h+(ra*144|0)+112+pa|0;ka=ka>>>0>5;da=P+2|0;ca=cb+(da<<2)|0;da=db+(da<<2)|0;I=0;ba=0;H=R;P=L;while(1){if((ba|0)>=(fa|0))break;k:do if(!ea){L=e[Ia>>1]|0;I=b[n+(L<<1)>>1]|0;D=e[Va+4+(ba<<1)>>1]|0;do if((hb|0)<(Qe(y)|0)){if((Ke(y,I)|0)!=1)break;if((Se(y,D,v)|0)==1){L=P;break k}}while(0);N=c[la>>2]|0;L=kf(g,k,l,L,D,t,c[ga>>2]|0,ha,x,w,r+(N<<2)|0,s+(N<<2)|0,Ya)|0;if((L+30019|0)>>>0<20){B=L;F=1;za=222;break c}L=c[Ya>>2]|0;N=L+N|0;c[ia>>2]=N;if(ka){B=-3e4;F=1;za=222;break c}if(L|0){if(!((hb|0)!=(Qe(y)|0)?(Ke(y,I)|0)!=0:0))Je(y,I)|0;Ne(y,D)|0}L=gf(va,ra,ya,na,h,Ja,n,c[r+(N<<2)>>2]|0,c[s+(N<<2)>>2]|0)|0;if((L|0)<1){B=-30010;F=1;za=222;break c}else za=164}else{c[ha>>2]=c[ga>>2];N=c[la>>2]|0;c[ia>>2]=N;L=P;za=164}while(0);do if((za|0)==164){za=0;X=r+(N<<2)|0;Y=s+(N<<2)|0;Q=gf(ya,na,va,ra,h,$a,n,c[X>>2]|0,c[Y>>2]|0)|0;if(!Q){B=-30010;F=1;za=222;break c}Z=(Q|0)>0;_=Z?1:2;$=(L|0)<1;aa=L+-1|0;P=0;S=0;W=0;R=Q;while(1){if((W|0)>=(_|0)){N=S;break}l:do if(!Z){Q=e[Ga>>1]|0;S=b[n+(Q<<1)>>1]|0;E=e[$a+4+(W<<1)>>1]|0;do if((hb|0)<(Qe(y)|0)){if((Ke(y,S)|0)!=1)break;if((Se(y,E,v)|0)==1){Q=R;break l}}while(0);Q=kf(g,k,l,Q,E,t,c[ha>>2]|0,ca,x,w,X,Y,Ya)|0;if((Q+30019|0)>>>0<20){B=Q;F=1;za=223;break c}za=c[Ya>>2]|0;Q=za+N|0;c[da>>2]=Q;if(za|0){if(!((hb|0)!=(Qe(y)|0)?(Ke(y,S)|0)!=0:0))Je(y,S)|0;Ne(y,E)|0}R=gf(ya,na,va,ra,h,Ha,n,c[r+(Q<<2)>>2]|0,c[s+(Q<<2)>>2]|0)|0;if((R|0)<1){B=-30010;F=1;za=223;break c}else{U=S;V=R;za=179}}else{c[ca>>2]=c[ha>>2];c[da>>2]=N;Q=N;U=S;V=R;za=179}while(0);m:do if((za|0)==179){za=0;if($|(V|0)<1){B=-30010;F=1;za=223;break c}if((V+-1|aa)>>>0<2)R=2-((V+L|0)%2|0)|0;else R=(L|0)>(V|0)?L:V;do if((R+-1|0)>>>0<2){if((a[ja>>0]|0)>=0)break;R=2-((R+1|0)%2|0)|0}while(0);T=R&255;S=Ee((c[jb>>2]|0)+(z*6|0)|0,b[Ua>>1]|0,b[Wa>>1]|0,T)|0;n:do if((c[fb>>2]|0)==(R|0)){do if((S|0)<0)if(!(c[Pa>>2]|0))break n;else R=0;else{if((S|0)<=0){R=0;break}if(c[Pa>>2]|0){R=0;break}c[Pa>>2]=1;R=(c[jb>>2]|0)+(z*6|0)|0;b[eb>>1]=b[R>>1]|0;b[eb+2>>1]=b[R+2>>1]|0;b[eb+4>>1]=b[R+4>>1]|0;R=1}while(0);S=c[jb>>2]|0;b[S+(z*6|0)>>1]=b[Ua>>1]|0;b[S+(z*6|0)+2>>1]=b[Wa>>1]|0;a[S+(z*6|0)+4>>0]=T;T=(c[Qa>>2]|0)+va|0;a[T>>0]=(a[T>>0]|0)+1<<24>>24;T=(c[Qa>>2]|0)+ya|0;a[T>>0]=(a[T>>0]|0)+1<<24>>24;T=(c[Ra>>2]|0)+ra|0;a[T>>0]=(a[T>>0]|0)+-1<<24>>24;T=(c[Ra>>2]|0)+na|0;a[T>>0]=(a[T>>0]|0)+-1<<24>>24;Q=wf(f,g,h,j,k,l,C,n,o,p,q,r+(Q<<2)|0,s+(Q<<2)|0,t,c[ca>>2]|0,v,w,x,y,Ea,A)|0;T=(c[Qa>>2]|0)+va|0;a[T>>0]=(a[T>>0]|0)+-1<<24>>24;T=(c[Qa>>2]|0)+ya|0;a[T>>0]=(a[T>>0]|0)+-1<<24>>24;T=(c[Ra>>2]|0)+ra|0;a[T>>0]=(a[T>>0]|0)+1<<24>>24;T=(c[Ra>>2]|0)+na|0;a[T>>0]=(a[T>>0]|0)+1<<24>>24;if((Q|0)==4){za=196;break c}if((Q+30019|0)>>>0<20){B=Q;F=1;za=223;break c}if((Q|0)>0){H=H+1|0;if((R|0)==0?(Q&2|0)==0:0)m=m|1;else{Oe(y,hb,1);m=m|3}P=P+1|0;S=U;Q=V;break m}if(R|0){c[Pa>>2]=0;T=(c[jb>>2]|0)+(z*6|0)|0;b[T>>1]=b[eb>>1]|0;b[T+2>>1]=b[eb+2>>1]|0;b[T+4>>1]=b[eb+4>>1]|0}if((hb|0)>=(Qe(y)|0)){S=U;Q=V;break m}if((Ke(y,U)|0)!=1){S=U;Q=V;break m}Pe(y,E)|0;Le(y)|0;S=U;Q=V;break m}while(0);c[Fa>>2]=(c[Fa>>2]|0)+1;if((hb|0)>=(Qe(y)|0)){S=U;Q=V;break}if((Ke(y,U)|0)!=1){S=U;Q=V;break}Pe(y,E)|0;Le(y)|0;S=U;Q=V}while(0);W=W+1|0;R=Q}do if((hb|0)<(Qe(y)|0)){if((Ke(y,N)|0)!=1)break;Me(y)|0}while(0);if(P|0)break;if((hb|0)>=(Qe(y)|0))break;if((Ke(y,I)|0)!=1)break;Pe(y,D)|0}while(0);ba=ba+1|0;P=L}if((hb|0)>=(Qe(y)|0)){P=ma;N=oa;I=qa;za=221;break}if((Ke(y,I)|0)!=1){P=ma;N=oa;I=qa;za=221;break}Me(y)|0;P=ma;N=oa;I=qa;za=221}else{P=L;F=Q;H=R;N=oa;I=qa;za=221}while(0);if((za|0)==221){za=0;L=P}Q=F;pa=pa+1|0;R=H;oa=N;qa=I}do if((hb|0)<(Qe(y)|0)){if((Ke(y,b[Wa>>1]|0)|0)!=1)break;Me(y)|0}while(0);do if(!H){if((hb|0)>=(Qe(y)|0))break;if((Ke(y,b[Ua>>1]|0)|0)!=1)break;Pe(y,ra)|0;Le(y)|0}while(0);if(!F){H=M;F=N}else{H=M;F=N;break f}}while(0);sa=sa+1|0}if((hb|0)<(Qe(y)|0)?(Ke(y,b[Ua>>1]|0)|0)==1:0)Me(y)|0;else za=238;if((za|0)==238?(za=0,(hb|0)!=(Qe(y)|0)):0){B=-30010;F=1;break c}if(!m){O=I;N=H;M=F;m=0;continue}if((c[gb>>2]|0)!=(c[fb>>2]|0)){F=0;break c}else{O=I;N=H;M=F}}I=c[Pa>>2]|0}F=b[Ua>>1]|0;H=c[jb>>2]|0;G=b[H+(z*6|0)>>1]|0;if((I|0)==0&(F&65535)>(G&65535)){B=H;za=17;break}if(F<<16>>16!=G<<16>>16){T=D;continue}if((e[Wa>>1]|0)<(e[H+(z*6|0)+2>>1]|0))T=D;else{B=H;za=17;break}}if((za|0)==17){za=0;if(!m){ya=B+(z*6|0)|0;b[ya>>1]=b[kb>>1]|0;b[ya+2>>1]=b[kb+2>>1]|0;b[ya+4>>1]=b[kb+4>>1]|0}Re(y,hb)|0;B=m;F=1}else if((za|0)==29){za=0;if(!m){B=(c[jb>>2]|0)+(z*6|0)|0;b[B>>1]=b[kb>>1]|0;b[B+2>>1]=b[kb+2>>1]|0;b[B+4>>1]=b[kb+4>>1]|0;B=0;F=1;m=0}else{B=m;F=1}}else if((za|0)==70){za=0;if(!H){ya=(c[jb>>2]|0)+(z*6|0)|0;b[ya>>1]=b[kb>>1]|0;b[ya+2>>1]=b[kb+2>>1]|0;b[ya+4>>1]=b[kb+4>>1]|0}Re(y,hb)|0;B=m;F=1}else if((za|0)==136)if(Aa){B=4;F=1;za=222}else{c[Oa>>2]=1;F=2;za=222}else if((za|0)==196)if(Aa){B=4;F=1;za=223}else{c[Oa>>2]=1;F=2;za=223}if((za|0)==222)za=0;else if((za|0)==223)za=0;switch(F|0){case 2:{F=D;break}case 0:{B=m;za=251;break a}default:break a}}if((za|0)==246)if((B+30019|0)>>>0>=20)if((B|0)>0)if(!(B&2))B=m|1;else{Oe(y,hb,1);B=m|3}else{B=m;za=251}if((za|0)==251)if(!B){ib=c[ib>>2]|0;if((ib|0)!=0&(ib|0)>(z|0)){B=(c[jb>>2]|0)+(z*6|0)|0;b[B>>1]=b[kb>>1]|0;b[B+2>>1]=b[kb+2>>1]|0;b[B+4>>1]=b[kb+4>>1]|0;B=0}else B=0}i=lb;return B|0}function xf(f,g,h,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z){f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;t=t|0;u=u|0;v=v|0;w=w|0;x=x|0;y=y|0;z=z|0;var A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0;Ca=i;i=i+208|0;Aa=Ca+176|0;ya=Ca+172|0;za=Ca+168|0;la=Ca+68|0;sa=Ca+48|0;ra=Ca+28|0;qa=Ca+8|0;ma=Ca+202|0;pa=Ca+192|0;na=Ca+182|0;oa=Ca+180|0;ua=Ca+4|0;ta=Ca;c[Aa>>2]=0;va=Qe(x)|0;wa=w+116|0;a:do if((c[wa>>2]|0)>(y|0)){c[za>>2]=1;b[oa>>1]=0;c[ua>>2]=0;xa=w+64|0;A=c[xa>>2]|0;ka=A+(y<<2)|0;c[Aa>>2]=e[ka>>1]|e[ka+2>>1]<<16;if(!y)A=0;else A=b[A+(y+-1<<2)>>1]|0;b[ma>>1]=A;ba=w+204|0;ca=w+40|0;da=r+4|0;ea=q+8|0;fa=w+16|0;ga=w+200|0;ha=y+1|0;ia=(u|0)==0;ja=ra+4|0;ka=sa+4|0;B=0;C=0;b:while(1){Re(x,va)|0;if(!(te(ma,oa,za,c[ba>>2]|0,q,r,n,j)|0)){Ba=14;break}D=c[ca>>2]|0;A=b[ma>>1]|0;if((D|0)==0?(A&65535)>(e[(c[xa>>2]|0)+(y<<2)>>1]|0):0){Ba=14;break}Z=e[n+((A&65535)+-1<<1)>>1]|0;_=b[(c[q>>2]|0)+(Z<<1)>>1]|0;$=_&65535;aa=$+-1|0;K=c[da>>2]|0;L=c[r>>2]|0;if(_<<16>>16==(b[L+(e[K+(aa<<1)>>1]<<1)>>1]|0)){M=0;F=0;G=0;A=0;H=0;I=0;J=0}else{C=0;A=-30010;break}while(1){if(($|0)<=(M|0))break;E=e[K+(aa-M<<1)>>1]|0;if(_<<16>>16!=(b[L+(E<<1)>>1]|0))break;if((b[h+(E*144|0)+94>>1]|0)==0?(a[(c[ba>>2]|0)+E>>0]|0)==8:0){Y=d[h+(E*144|0)+126>>0]&7;c[ua>>2]=Y;switch(Y|0){case 4:{H=H+1|0;E=1;break}case 3:{I=I+1|0;E=1;break}case 1:{F=F+1|0;E=1;break}case 2:{J=J+1|0;E=1;break}case 6:{G=G+1|0;E=1;break}case 0:{E=0;break}default:E=1}A=E+A|0;E=J}else E=J;M=M+1|0;J=E}if((A|0)!=(H+I+J+F+G|0)){C=0;A=-30010;break}if(A){c[ta>>2]=(G|0)>0&1;W=(I|0)==0;X=(G|0)!=0;Y=F|J|0?(F|0?1:2):W?(H|0?4:0):3;W=(((H|0)==0&1)+(W&1)+((J|0)==0&1)+((F|0)==0&1)|0)!=3;V=0;c:while(1){U=V;V=V+1|0;do if(!U)if(!(c[ta>>2]|0)){c[ua>>2]=Y;A=Y;Ba=39;break}else{c[ua>>2]=1;A=1;break}else{A=De(ua,ta,F,J,I,H,G,z)|0;switch(A|0){case 1:{A=C;break c}case 0:break;default:{C=0;break b}}A=c[ua>>2]|0;Ba=39}while(0);if((Ba|0)==39){Ba=0;if(!A){C=0;A=-30010;break b}}if(!(c[ca>>2]|0)){D=(B|0)!=0;if(D)E=(c[xa>>2]|0)+(y<<2)|0;else E=Aa;if((xe(E,b[ma>>1]|0,A&255)|0)<0){Ba=44;break b}}Re(x,va)|0;U=0;d:while(1){if(($|0)<=(U|0))break;T=e[(c[da>>2]|0)+(aa-U<<1)>>1]|0;if(_<<16>>16!=(b[(c[r>>2]|0)+(T<<1)>>1]|0))break;A=a[h+(T*144|0)+126>>0]|0;e:do if((A<<24>>24!=0?(b[h+(T*144|0)+94>>1]|0)==0:0)?(a[(c[ba>>2]|0)+T>>0]|0)==8:0){D=A&7;if((D+-1|0)>>>0<4){S=c[ua>>2]|0;if(!((S|0)==(D|0)?(S|0)!=(c[ta>>2]|0):0))break}else{if((A&7)!=6){C=0;A=-30010;break b}if((c[ua>>2]|0)!=(c[ta>>2]|0))break}A=A<<24>>24;if(!(A&64))A=0;else A=((A&7)+-1|0)>>>0<4;if(!(X|A|W)){A=se(b[ma>>1]|0,q,r,n,h)|0;if((A|0)<0){C=0;A=-30010;break b}}else A=A&1;do if((va|0)<(Qe(x)|0)){if((Ke(x,b[ma>>1]|0)|0)!=1)break;if((Se(x,T,u)|0)==1)break e}while(0);c[sa>>2]=0;c[ra>>2]=t;c[ya>>2]=0;N=(A|0)!=0;if(N){jf(ea)|0;L=0;M=0}else{A=kf(g,k,l,Z,T,s,t,ja,w,v,q,r,ya)|0;if((A+30019|0)>>>0<20){C=0;break b}L=c[ya>>2]|0;c[ka>>2]=L;M=1}D=c[ua>>2]|0;A=c[ta>>2]|0;if((D|0)==(A|0)){A=la+(M*20|0)|0;D=hf(g,Z,T,h,A,m,c[q+(L<<2)>>2]|0,c[r+(L<<2)>>2]|0)|0;if(!D){C=0;A=-30010;break b}E=c[A>>2]|0;A=c[ta>>2]|0;if(!((E|0)!=0|(D|0)==(A|0)))break;K=c[ua>>2]|0}else{c[la+(M*20|0)>>2]=0;K=D;E=0}if((K|0)!=(A|0)|(E|0)==0){D=D&255;A=xe((c[xa>>2]|0)+(y<<2)|0,b[ma>>1]|0,D)|0;do if((A|0)<0){if(c[ca>>2]|0)break;c[fa>>2]=(c[fa>>2]|0)+1;break e}while(0);if(c[ya>>2]|0){if(!((va|0)!=(Qe(x)|0)?(Ke(x,b[ma>>1]|0)|0)!=0:0))Je(x,b[ma>>1]|0)|0;Ne(x,T)|0}do if((A|0)>0){if(c[ca>>2]|0){E=0;break}c[ca>>2]=1;C=(c[xa>>2]|0)+(y<<2)|0;E=1;C=e[C>>1]|e[C+2>>1]<<16}else E=0;while(0);S=c[xa>>2]|0;a[S+(y<<2)+2>>0]=D;b[S+(y<<2)>>1]=b[ma>>1]|0;a[(c[ga>>2]|0)+Z>>0]=3;if(!N){S=(c[ba>>2]|0)+T|0;a[S>>0]=(d[S>>0]|0)+248}A=xf(f,g,h,j,k,l,m,n,o,p,q+(L<<2)|0,r+(L<<2)|0,s,c[ra+(M<<2)>>2]|0,u,v,w,x,ha,z)|0;a[(c[ga>>2]|0)+Z>>0]=0;if(!N){S=(c[ba>>2]|0)+T|0;a[S>>0]=(d[S>>0]|0)+8}if((A|0)==4|(A+30019|0)>>>0<20){C=0;break b}D=(E|0)==0;do if((A|0)>0){if(D?(A&2|0)==0:0){B=B|1;break}Oe(x,va,1);B=B|3}else{if(!D){c[ca>>2]=0;S=(c[xa>>2]|0)+(y<<2)|0;b[S>>1]=C;b[S+2>>1]=C>>>16}if((va|0)>=(Qe(x)|0))break;if((Ke(x,b[ma>>1]|0)|0)!=1)break;Pe(x,T)|0;Le(x)|0}while(0);if(N)break d;else break}if(!D){C=0;A=-30010;break b}if(c[ya>>2]|0){if(!((va|0)!=(Qe(x)|0)?(Ke(x,b[ma>>1]|0)|0)!=0:0))Je(x,b[ma>>1]|0)|0;Ne(x,T)|0}R=sa+(M<<2)|0;S=ra+(M<<2)|0;Q=la+(M*20|0)|0;D=0;A=0;f:while(1){if(!(c[Q+(D*20|0)>>2]|0)){Ba=147;break}c[qa+(D<<2)>>2]=0;N=0;E=D;P=A;while(1){A=Q+(E*20|0)+12|0;L=b[m+(e[A>>1]<<1)>>1]|0;b[pa+(E<<1)>>1]=L;K=Q+(E*20|0)+4+(N<<1)|0;M=b[K>>1]|0;b[na+(E<<1)>>1]=M;do if(!N)Ba=113;else{if((va|0)>=(Qe(x)|0)){Ba=113;break}if((Ke(x,L)|0)!=1){Ba=113;break}if((Se(x,M&65535,u)|0)!=1){Ba=113;break}K=0;D=E+1|0;A=P}while(0);g:do if((Ba|0)==113){Ba=0;D=E+1|0;O=S+(D<<2)|0;N=c[R+(E<<2)>>2]|0;A=kf(g,k,l,e[A>>1]|0,e[K>>1]|0,s,c[S+(E<<2)>>2]|0,O,w,v,q+(N<<2)|0,r+(N<<2)|0,ya)|0;if((A+30019|0)>>>0<20){C=0;break b}if(!(c[ya>>2]|0))A=0;else{if(!((va|0)!=(Qe(x)|0)?(Ke(x,L)|0)!=0:0))Je(x,L)|0;Ne(x,M&65535)|0;A=c[ya>>2]|0}N=A+N|0;c[R+(D<<2)>>2]=N;K=q+(N<<2)|0;N=r+(N<<2)|0;A=hf(g,Z,T,h,Q+(D*20|0)|0,m,c[K>>2]|0,c[N>>2]|0)|0;if(!A){C=0;A=-30010;break b}if((A|0)<0){A=P;continue f}L=A&255;E=xe((c[xa>>2]|0)+(y<<2)|0,b[ma>>1]|0,L)|0;h:do if((c[ta>>2]|0)==(A|0)){do if((E|0)<0)if(!(c[ca>>2]|0))break h;else M=0;else{if((E|0)<=0){M=0;break}if(c[ca>>2]|0){M=0;break}c[ca>>2]=1;C=(c[xa>>2]|0)+(y<<2)|0;M=1;C=e[C>>1]|e[C+2>>1]<<16}while(0);A=c[xa>>2]|0;a[A+(y<<2)+2>>0]=L;b[A+(y<<2)>>1]=b[ma>>1]|0;a[(c[ga>>2]|0)+Z>>0]=3;A=(c[ba>>2]|0)+T|0;a[A>>0]=(d[A>>0]|0)+248;A=xf(f,g,h,j,k,l,m,n,o,p,K,N,s,c[O>>2]|0,u,v,w,x,ha,z)|0;a[(c[ga>>2]|0)+Z>>0]=0;O=(c[ba>>2]|0)+T|0;a[O>>0]=(d[O>>0]|0)+8;if((A|0)==4|(A+30019|0)>>>0<20){C=0;break b}do if((A|0)>0){E=P+1|0;if((M|0)==0?(A&2|0)==0:0){K=0;A=E;B=B|1;break}Oe(x,va,1);K=0;A=E;B=B|3}else{if(!M){K=1;A=P;break}c[ca>>2]=0;K=(c[xa>>2]|0)+(y<<2)|0;b[K>>1]=C;b[K+2>>1]=C>>>16;K=1;A=P}while(0);if(!ia)break g;if(!(lf(h,j,T,c[N>>2]|0,c[r+(c[R>>2]<<2)>>2]|0)|0))break f;else break g}while(0);c[fa>>2]=(c[fa>>2]|0)+1;K=1;A=P}while(0);while(1){E=D+-1|0;if((D|0)<=0)break f;P=qa+(E<<2)|0;D=(c[P>>2]|0)+1|0;c[P>>2]=D;if((D|0)<(c[Q+(E*20|0)>>2]|0))break;if((va|0)>=(Qe(x)|0)){D=E;continue}if((Ke(x,b[pa+(E<<1)>>1]|0)|0)!=1){D=E;continue}Me(x)|0;D=E}if(!K){N=D;P=A;continue}if((va|0)>=(Qe(x)|0)){N=D;P=A;continue}if((Ke(x,b[pa+(E<<1)>>1]|0)|0)!=1){N=D;P=A;continue}Pe(x,e[na+(E<<1)>>1]|0)|0;Le(x)|0;N=D;P=A}}if((Ba|0)==147){Ba=0;b[pa+(D<<1)>>1]=0}if(A|0)break;if((va|0)>=(Qe(x)|0))break;if((Ke(x,b[ma>>1]|0)|0)!=1)break;Pe(x,T)|0;Le(x)|0}while(0);U=U+1|0}if((va|0)<(Qe(x)|0)?(Ke(x,b[ma>>1]|0)|0)==1:0)Me(x)|0;else Ba=157;if((Ba|0)==157?(Ba=0,(va|0)!=(Qe(x)|0)):0){C=0;A=-30010;break b}if(!B){B=0;continue}if((c[ua>>2]|0)!=(c[ta>>2]|0)){C=1;A=0;break b}}D=c[ca>>2]|0;C=A}if(D|0)continue;A=(c[xa>>2]|0)+(y<<2)|0;if((e[ma>>1]|0)>=(e[A>>1]|0)){Ba=8;break}}if((Ba|0)==8){if(!B){w=c[Aa>>2]|0;b[A>>1]=w;b[A+2>>1]=w>>>16}Re(x,va)|0;C=0;A=B}else if((Ba|0)==14)if(!B){C=(c[xa>>2]|0)+(y<<2)|0;A=c[Aa>>2]|0;b[C>>1]=A;b[C+2>>1]=A>>>16;C=0;A=0;B=0}else{C=0;A=B}else if((Ba|0)==44){if(!D){w=(c[xa>>2]|0)+(y<<2)|0;f=c[Aa>>2]|0;b[w>>1]=f;b[w+2>>1]=f>>>16}Re(x,va)|0;C=0;A=B}if(C)if(!B)if((c[wa>>2]|0)>(y|0)){A=(c[xa>>2]|0)+(y<<2)|0;w=c[Aa>>2]|0;b[A>>1]=w;b[A+2>>1]=w>>>16;Re(x,va)|0;A=0}else A=0;else A=B}else{I=w+40|0;if((c[I>>2]|0)==0?(c[w+32>>2]|0)==0:0){if(u|0){B=k&65535;C=w+208|0;A=0;D=1;while(1){if((D&65535)>>>0>B>>>0)break;if(ye(q,D,ya)|0){if(!(ye(r,D,za)|0)){Ba=189;break}A=(Ae(u,b[(c[C>>2]|0)+(((e[m+(e[ya>>1]<<1)>>1]|0)+65535&65535)<<1)>>1]|0,b[za>>1]|0)|0)+A|0}D=D+1<<16>>16}if((Ba|0)==189){A=-30007;break}i:do if(A|0){A=k+65535&65535;while(1){if(!(A<<16>>16))break i;ze(u,A)|0;A=A+-1<<16>>16}}while(0)}u=w+20|0;c[u>>2]=(c[u>>2]|0)+1;u=w+8|0;c[u>>2]=(c[u>>2]|0)+1}else{A=Hh(g,k,l,q,v,s,w)|0;if((A+30019|0)>>>0<20)break;A=Hh(g,k,l,r,v,s,w)|0;if((A+30019|0)>>>0<20)break;F=q+8|0;G=r+8|0;H=w+208|0;er(c[H>>2]|0,0,k<<1|0)|0;E=q+12|0;A=r+12|0;D=0;while(1){if((D|0)>=(k|0))break;B=e[(c[E>>2]|0)+(D<<1)>>1]|0;Ba=b[m+(B<<1)>>1]|0;r=b[(c[A>>2]|0)+(D<<1)>>1]|0;C=r&65535;b[o+(C<<1)>>1]=Ba;b[(c[H>>2]|0)+((Ba&65535)+-1<<1)>>1]=r;b[u+(D<<1)>>1]=D;if((b[(c[F>>2]|0)+(B<<1)>>1]|0)!=(b[(c[G>>2]|0)+(C<<1)>>1]|0)){A=-30017;break a}if((b[p+(B<<1)>>1]|0)==(b[p+(C<<1)>>1]|0))D=D+1|0;else{A=-30017;break a}}u=w+8|0;c[u>>2]=(c[u>>2]|0)+1;c[w+20>>2]=1;u=w+12|0;c[u>>2]=(c[u>>2]|0)+1;c[I>>2]=0;c[w+32>>2]=0;if(!(c[w+316>>2]&128)){A=vf(g,h,j,k,F,G,s,v,p,o,c[H>>2]|0,w,z)|0;if((A+30019|0)>>>0<20)break;if((A>>31^A|0)>0){A=4;break}}}A=(Ic(f,c[w+24>>2]|0)|0)==0;A=A?1:-30008}while(0);i=Ca;return A|0}function yf(c,f,g){c=c|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;z=f<<1;F=Bq(z)|0;G=Bq(z)|0;H=Bq(z)|0;I=Bq(z)|0;J=Bq(f)|0;a:do if((F|0)!=0&(G|0)!=0&(H|0)!=0&(I|0)!=0&(J|0)!=0){er(H|0,0,z|0)|0;er(J|0,0,f|0)|0;A=H+(g<<1)|0;b[A>>1]=1;B=I+(g<<1)|0;b[B>>1]=1;C=g&65535;b[F>>1]=C;b[G>>1]=C;D=1;h=0;E=0;i=0;j=0;b:while(1){x=(E|0)>1;c:while(1){w=b[F+(j<<1)>>1]|0;l=w&65535;p=J+l|0;q=a[c+(l*176|0)+92>>0]|0;r=(j|0)==0;s=H+(l<<1)|0;v=I+(l<<1)|0;y=j;j=j+-1|0;t=F+(j<<1)|0;k=a[p>>0]|0;while(1){if(q<<24>>24<=k<<24>>24)break;u=k+1<<24>>24;a[p>>0]=u;n=b[c+(l*176|0)+8+(k<<24>>24<<1)>>1]|0;m=n&65535;k=H+(m<<1)|0;o=b[k>>1]|0;if(!(o<<16>>16)){j=y;break c}if(!r?n<<16>>16==(b[t>>1]|0):0){k=u;continue}if((o&65535)>=(e[s>>1]|0)){k=u;continue}if((e[v>>1]|0)<=(o&65535)){k=u;continue}b[v>>1]=o;k=u}a[p>>0]=0;do if((l|0)!=(g|0)){k=e[t>>1]|0;l=b[v>>1]|0;if((l&65535)<(e[H+(k<<1)>>1]|0)){k=I+(k<<1)|0;if((e[k>>1]|0)<=(l&65535))break;b[k>>1]=l;break}h=h+1|0;l=h&65535;b[c+(k*176|0)+168>>1]=l;if(x|(k|0)!=(g|0)){v=c+(k*176|0)+162|0;a[v>>0]=(d[v>>0]|0)+1}if((i|0)>-1)while(1){k=i+-1|0;v=b[G+(i<<1)>>1]|0;b[c+((v&65535)*176|0)+168>>1]=l;if((i|0)>0?w<<16>>16!=v<<16>>16:0)i=k;else{i=k;break}}}while(0);if((y|0)<=0)break b}j=j+1|0;b[F+(j<<1)>>1]=n;i=i+1|0;b[G+(i<<1)>>1]=n;y=D+1<<16>>16;b[k>>1]=y;b[I+(m<<1)>>1]=y;D=y;E=((l|0)==(g|0)&1)+E|0}er(H|0,0,z|0)|0;er(J|0,0,f|0)|0;b[A>>1]=1;b[B>>1]=1;b[F>>1]=C;b[G>>1]=C;y=1;h=0;j=0;i=0;while(1){d:while(1){e:while(1){o=b[F+(i<<1)>>1]|0;n=i;while(1){q=o&65535;r=J+q|0;s=a[c+(q*176|0)+92>>0]|0;t=(n|0)==0;w=H+(q<<1)|0;u=I+(q<<1)|0;i=n+-1|0;x=F+(i<<1)|0;k=a[r>>0]|0;while(1){if(s<<24>>24<=k<<24>>24)break;v=k+1<<24>>24;a[r>>0]=v;m=b[c+(q*176|0)+8+(k<<24>>24<<1)>>1]|0;l=m&65535;k=H+(l<<1)|0;p=b[k>>1]|0;if(!(p<<16>>16)){i=n;break d}if(!t?m<<16>>16==(b[x>>1]|0):0){k=v;continue}if((p&65535)>=(e[w>>1]|0)){k=v;continue}if((e[u>>1]|0)<=(p&65535)){k=v;continue}b[u>>1]=p;k=v}a[r>>0]=0;l=b[u>>1]|0;if((b[w>>1]|0)==l<<16>>16)break e;if((n|0)<=0)break a;o=b[x>>1]|0;k=I+((o&65535)<<1)|0;if((e[k>>1]|0)>(l&65535))break;else n=i}b[k>>1]=l}h=h+1|0;l=j;k=0;while(1){if((l|0)<=-1)break;k=k+1<<16>>16;if(o<<16>>16==(b[G+(l<<1)>>1]|0))break;else l=l+-1|0}if((j|0)>-1){m=h&65535;while(1){l=j+-1|0;g=b[G+(j<<1)>>1]|0;f=g&65535;b[c+(f*176|0)+164>>1]=m;b[c+(f*176|0)+166>>1]=k;if((j|0)>0?o<<16>>16!=g<<16>>16:0)j=l;else{j=l;break}}}if((n|0)<=0)break a}i=i+1|0;b[F+(i<<1)>>1]=m;j=j+1|0;b[G+(j<<1)>>1]=m;g=y+1<<16>>16;b[k>>1]=g;b[I+(l<<1)>>1]=g;y=g}}else h=-30002;while(0);Cq(F);Cq(G);Cq(H);Cq(I);Cq(J);return h|0}function zf(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0;ha=i;i=i+96|0;ga=ha+32|0;Y=ha+24|0;X=ha+16|0;W=ha+8|0;V=ha;T=ha+60|0;U=ha+56|0;ca=ha+64|0;ba=ha+36|0;c[ba>>2]=11072;c[ba+4>>2]=11077;c[ba+8>>2]=11082;c[ba+12>>2]=11087;c[ba+16>>2]=92409;er(e|0,0,300)|0;c[e+284>>2]=1;k=ca;l=k+32|0;do{a[k>>0]=0;k=k+1|0}while((k|0)<(l|0));c[g>>2]=0;P=e+208|0;c[P>>2]=0;Z=(h|0)!=0;if(Z){c[e+188>>2]=0;c[e+200>>2]=0;_=23}else _=0;a[ca>>0]=0;ea=e+168|0;fa=e+180|0;I=e+68|0;J=e+72|0;K=e+172|0;L=e+176|0;M=e+268|0;N=e+296|0;H=0;A=0;F=0;h=0;o=0;E=0;l=8;D=0;B=0;C=0;g=1;z=0;w=0;k=0;x=1;y=0;v=0;u=1;r=6166;q=1;O=1;p=0;while(1){if((O|0)>=(b|0)){G=o;break}if(((q&1|0)!=0?(R=c[d+(O<<2)>>2]|0,(a[R>>0]|0)==45):0)?(S=R+1|0,(a[S>>0]|0)!=0):0){G=q+2|0;a:do if(Jo(S,11092)|0){if(!(Jo(S,11098)|0)){if(c[fa>>2]|0){m=H;n=F;q=E;t=2;break}c[fa>>2]=4;m=H;n=F;q=E;t=2;break}if(!(Io(S,11105,4)|0)){c[T>>2]=0;Do(e,R+5|0,65)|0;Go(e,T)|0;if(!(c[T>>2]|0)){c[I>>2]=0;c[J>>2]=0;if(c[fa>>2]|0){m=H;n=F;q=E;t=2;break}c[fa>>2]=1;m=H;n=F;q=E;t=2;break}else{c[I>>2]=e;c[J>>2]=f;if(c[fa>>2]|0){m=H;n=F;q=E;t=2;break}c[fa>>2]=2;m=H;n=F;q=E;t=2;break}}if(!(Io(S,11110,6)|0)){c[K>>2]=Rp(R+7|0,0,10)|0;m=H;n=F;q=E;t=2;break}if(!(Io(S,11117,4)|0)){c[L>>2]=Rp(R+5|0,0,10)|0;m=H;n=F;q=E;t=2;break}if(!(Io(S,11122,7)|0)){m=Rp(R+8|0,0,10)|0;c[K>>2]=m;c[L>>2]=m;m=H;n=F;q=E;t=2;break}if(Jo(S,11130)|0){if(!(Jo(S,11139)|0)){m=H;n=F;q=E;l=l|32768;t=2;break}if(!(Jo(S,11147)|0)){m=H;n=F;q=E;l=l&-4|1;t=2;break}if(!(Jo(S,11155)|0)){m=H;n=F;q=E;D=D|1;t=2;break}if(!(Jo(S,11167)|0)){m=H;n=F;q=E;D=D|2;t=2;break}if(Jo(S,11183)|0){if(!(Jo(S,11193)|0)){m=H;n=F;q=E;w=1;t=2;break}if(!(Jo(S,86652)|0)){m=H;n=F;q=E;t=2;break}if((Io(S,86673,1)|0)==0?(t=R+2|0,Rp(t,U,10)|0,(c[U>>2]|0)>>>0>t>>>0):0){m=H;n=F;q=E;t=2;break}if(!(Jo(S,11204)|0)){m=H;n=F;q=E;t=2;break}if(!(Jo(S,11208)|0)){m=H;n=F;q=E;t=2;r=r&-17;p=p&-9729;break}if(!(Jo(S,11213)|0)){m=H;n=F;q=E;x=0;t=2;break}if(!(Jo(S,11222)|0)){m=H;A=1;n=F;q=E;t=2;break}if(!(Jo(S,11232)|0)){m=H;n=F;q=E;t=2;u=0;r=r|16;p=p&-9729|512;break}if(!(Jo(S,11237)|0)){m=H;n=F;q=E;t=2;u=0;r=r|16;p=p&-9729|1024;break}if(!(Jo(S,11242)|0)){m=H;n=F;q=E;t=2;u=0;r=r|16;p=p&-9729|8192;break}if(!(Jo(S,11247)|0)){m=H;n=F&-13|4;q=E;t=2;break}if(!(Jo(S,11260)|0)){m=H;n=F&-13|8;q=E;t=2;break}if(!(Jo(S,11274)|0)){m=H;n=F;q=E;t=2;u=0;r=r&-6145;break}if(!(Jo(S,11278)|0)){m=H;n=F;q=E;t=2;u=0;r=r|16384;break}if(!(Jo(S,11284)|0)){m=H;n=F;q=E;t=2;u=0;r=r|1;break}if(!(Jo(S,11291)|0)){m=H;n=F;q=E;t=2;v=1;u=0;break}if(!(Jo(S,11298)|0)){m=H;n=F;q=E;B=1;t=2;u=0;break}if(!(Jo(S,11302)|0)){m=1;n=F;q=E;t=2;u=0;break}do if(!(Io(S,86861,1)|0)){t=R+2|0;s=+zq(t,U);if((c[U>>2]|0)>>>0<=t>>>0)break;do if(s<0.0|(c[(Wo()|0)>>2]|0)==34)m=0;else{s=s*1.0e3;if(s>4294967295.0){m=0;break}m=~~s>>>0}while(0);c[P>>2]=m;m=H;n=F;q=E;t=2;break a}while(0);if(!(Jo(S,11306)|0)){c[M>>2]=1;m=H;n=F;q=E;t=2;break}if(!(Jo(S,11327)|0)){m=H;n=F;q=E;C=1;t=2;break}if(!(Jo(S,11342)|0)){m=H;n=F;q=E;y=1;t=2;break}if(!(Jo(S,11351)|0)){m=H;n=F;h=1;q=E;t=2;break}if(!(Jo(S,11355)|0)){m=H;n=F;o=1;q=E;t=2;break}if(!(Jo(S,11362)|0)){m=H;n=F;q=1;t=2;break}if(!(Jo(S,11369)|0)){c[fa>>2]=6;c[N>>2]=c[N>>2]&-10|1;m=H;n=F;q=E;t=2;break}if(!(Jo(S,11381)|0)){c[N>>2]=c[N>>2]&-10|8;c[fa>>2]=6;m=H;n=F;q=E;t=2;break}else{c[V>>2]=S;ad(j,11394,V)|0;m=H;n=F;q=E;t=0;break}}else{m=H;n=F;q=E;k=1;t=2}}else{m=H;n=F;q=E;z=1;t=2}}else{m=H;n=F;q=E;g=0;t=2}while(0);E=q;q=t|G}else{m=c[ea>>2]|0;if(((m|0)<4?(Q=c[d+(O<<2)>>2]|0,(Q|0)!=0):0)?(a[Q>>0]|0)!=0:0){n=Bq((cp(Q)|0)+1|0)|0;if(n){vp(n,Q)|0;m=c[ea>>2]|0}c[ea>>2]=m+1;c[e+152+(m<<2)>>2]=n;m=H;n=F}else{m=H;n=F}}H=m;F=n;O=O+1|0}t=(h|0)!=0;do if(t){if((c[e+188>>2]|0)==1?(c[e+200>>2]|0)==1:0){ad(j,11422,W)|0;g=-1;break}if((c[fa>>2]|0)==6){ad(j,11499,X)|0;g=-1;break}if((k|0)==1){ad(j,11578,Y)|0;g=-1}else da=96}else da=96;while(0);if((da|0)==96){b:do if(g|0){h=0;while(1){if((h|0)>=4){g=0;break}g=c[e+152+(h<<2)>>2]|0;if(g|0?a[g>>0]|0:0)break;h=h+1|0}h=(g|0)!=0;o=0;while(1){if(!(h&(o|0)<4))break b;m=e+152+(o<<2)|0;n=c[m>>2]|0;if((n|0)!=0?(a[n>>0]|0)!=0:0){if(!(Jo(n,11656)|0)){Cq(c[m>>2]|0);c[m>>2]=0}}else da=105;if((da|0)==105?(da=0,Y=cp(g)|0,aa=cp(ca)|0,$=c[ba+(o<<2)>>2]|0,aa=Bq(Y+1+aa+(cp($)|0)|0)|0,aa|0):0){vp(aa,g)|0;up(aa,ca)|0;up(aa,$)|0;c[ea>>2]=(c[ea>>2]|0)+1;Cq(c[m>>2]|0);c[m>>2]=aa}o=o+1|0}}while(0);m=c[fa>>2]|0;if((m|0)==6){c[e+224>>2]=0;l=((l&208|0)==0?65:1)|l&-8;k=0}g=p|((q|0)==0?(Z?_:0):r);c[e+204>>2]=0;c[e+228>>2]=0;c[e+256>>2]=A;if((g|16|0)==16)o=g|31;else{o=(g&3|0)==0?g|3:g;o=(o&28|0)==16?o|12:o}n=o|o<<1&8|524288;if(!m)if((c[ea>>2]|0)>0){c[fa>>2]=1;m=1}else m=0;h=e+184|0;c[h>>2]=n;c[e+248>>2]=0;ea=(k|0)!=0;g=(ea?16:0)|l;l=e+192|0;if(ea){k=0;g=g|(w|0?2048:0)}else k=64;g=k|g;c[l>>2]=g;c[e+260>>2]=z;if(F|0)c[e+264>>2]=F;c[e+292>>2]=0;c[e+288>>2]=(v|0?6658527:6658271)|(x|0?8192:0)|(B|0?524288:0)|(H|0?1048576:0);c[l>>2]=g|8192;if(!m)c[fa>>2]=1;if(!(o&16))c[h>>2]=n&-22529;if(u|0)c[l>>2]=g|24576;g=e+280|0;c[g>>2]=t&1;k=(E|0)!=0;do if(t){if(!G){if(!k)break;c[g>>2]=3;break}if(k){c[g>>2]=4;break}else{c[g>>2]=2;break}}else if(E|G|0)ad(j,11660,ga)|0;while(0);c[e+272>>2]=C;c[e+276>>2]=y;c[e+196>>2]=D;g=0}i=ha;return g|0}function Af(a){a=a|0;var b=0,c=0,d=0;c=a&48;b=a&448;a:do switch(a&15|0){case 1:switch(c|0){case 16:{d=(b|0)==0?12344:86997;break a}case 32:{d=(b|0)==0?12344:86997;break a}case 48:switch(b|0){case 0:{d=12344;break a}case 128:{d=12348;break a}case 64:{d=12346;break a}default:{d=86997;break a}}default:{d=86997;break a}}case 2:{if(!(a&256))switch(c|0){case 16:{d=(b|0)==0?12344:86997;break a}case 32:{d=(b|0)==0?12344:86997;break a}case 48:switch(b|0){case 0:{d=12344;break a}case 128:{d=12348;break a}case 64:{d=12346;break a}default:{d=86997;break a}}default:{d=86997;break a}}b=a&192;switch(c|0){case 0:{switch(b|0){case 0:{d=12353;break a}case 128:{d=12356;break a}case 64:{d=12350;break a}case 192:{d=12359;break a}default:{}}break}case 16:{switch(b|0){case 0:{d=12353;break a}case 128:{d=12356;break a}case 64:{d=12350;break a}case 192:{d=12359;break a}default:{}}break}case 32:{switch(b|0){case 0:{d=12353;break a}case 128:{d=12356;break a}case 64:{d=12350;break a}case 192:{d=12359;break a}default:{}}break}case 48:{switch(b|0){case 0:{d=12353;break a}case 128:{d=12356;break a}case 64:{d=12350;break a}case 192:{d=12359;break a}default:{}}break}default:{}}break}case 6:{switch(c|0){case 0:{d=(b|0)==0?12344:86997;break a}case 16:switch(b|0){case 0:{d=12344;break a}case 256:{d=12353;break a}case 128:{d=12348;break a}default:{d=86997;break a}}case 32:switch(b|0){case 0:{d=12344;break a}case 64:{d=12346;break a}case 256:{d=12353;break a}default:{d=86997;break a}}case 48:switch(b|0){case 0:{d=12344;break a}case 128:{d=12348;break a}case 384:{d=12356;break a}case 64:{d=12346;break a}case 192:{d=86669;break a}case 256:{d=12353;break a}case 320:{d=12350;break a}default:{d=86997;break a}}default:{}}break}case 4:{switch(c|0){case 0:{d=86997;break a}case 16:{d=(b|0)==0?12344:86997;break a}case 32:{d=(b|0)==0?12344:86997;break a}case 48:switch(b|0){case 0:{d=12344;break a}case 128:{d=12348;break a}case 64:{d=12346;break a}default:{d=86997;break a}}default:{}}break}case 8:{switch(c|0){case 0:{d=86997;break a}case 16:{d=(b|0)==0?12344:86997;break a}case 32:{d=(b|0)==0?12344:86997;break a}case 48:switch(b|0){case 0:{d=12344;break a}case 128:{d=12348;break a}case 64:{d=12346;break a}default:{d=86997;break a}}default:{}}break}default:d=86997}while(0);return d|0}function Bf(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;t=t|0;u=u|0;v=v|0;var w=0,x=0,y=0,z=0,A=0;y=h&-193;z=0;w=0;a:while(1){switch(z|0){case 3:break a;case 1:{x=64;A=4;break}case 2:{x=128;A=4;break}default:{}}if((A|0)==4){A=0;if(x&h){x=x|y;w=Cf(a,b,c,d,e,f,g,(z|0)==1?x:x&-1025,i,j,k,l,m,n,o,p,q,r,s,t,u,v)|0|w}}z=z+1|0}return w|0} - -// EMSCRIPTEN_END_FUNCS -var lb=[Er,Yg];var mb=[Fr,Xo,_o,$o,ap,Ap,Kq,Wq,th,qh,oh,rh,ph,oe,zh,Ah,Bh,yh,Dh,Ch,Jh,bi,Ni,pk,tk,Fr,Fr,Fr,Fr,Fr,Fr,Fr];var nb=[Gr,Tq,Oq,_q];var ob=[Hr,Mg,Tg,Vg];var pb=[Ir,Xg];var qb=[Jr,Uo];var rb=[Kr,Eq,Rq,Iq,Jq,Gq,Vq,Xq,Yo,bp,Kr,Kr,Kr,Kr,Kr,Kr];var sb=[Lr,Wf,Vf,Lr];var tb=[Mr,Sq,Mq,Yq];var ub=[Nr,uh,Kg,wi,Di,Xj,ke,le,fn,Fn,Nr,Nr,Nr,Nr,Nr,Nr];var vb=[Or,Uq,Pq,ar];return{_i64Subtract:dr,_free:Cq,_compute_inchi:Ko,_memmove:jr,_memset:er,_malloc:Bq,_i64Add:gr,_memcpy:ir,___getTypeName:To,_bitshift64Lshr:hr,_bitshift64Shl:fr,__GLOBAL__sub_I_bind_cpp:Lo,runPostSets:cr,stackAlloc:wb,stackSave:xb,stackRestore:yb,establishStackSpace:zb,setThrew:Ab,setTempRet0:Db,getTempRet0:Eb,dynCall_iiiiiiii:tr,dynCall_iiii:ur,dynCall_viiiii:vr,dynCall_iiiiiiiiiiiiiiiii:wr,dynCall_iiiiiiiiiiiiiiiiii:xr,dynCall_ii:yr,dynCall_vi:zr,dynCall_iiiii:Ar,dynCall_viiiiii:Br,dynCall_iii:Cr,dynCall_viiii:Dr}}) - - -// EMSCRIPTEN_END_ASM -(d.C,d.D,buffer),Xa=d._i64Subtract=Y._i64Subtract,Va=d.__GLOBAL__sub_I_bind_cpp=Y.__GLOBAL__sub_I_bind_cpp,M=d._free=Y._free;d.runPostSets=Y.runPostSets;d._compute_inchi=Y._compute_inchi;var Db=d._memmove=Y._memmove,jb=d._memset=Y._memset,I=d._malloc=Y._malloc,ob=d._i64Add=Y._i64Add,Cb=d._memcpy=Y._memcpy; -d.___getTypeName=Y.___getTypeName;var zb=d._bitshift64Lshr=Y._bitshift64Lshr,lb=d._bitshift64Shl=Y._bitshift64Shl;d.dynCall_iiiiiiii=Y.dynCall_iiiiiiii;d.dynCall_iiii=Y.dynCall_iiii;d.dynCall_viiiii=Y.dynCall_viiiii;d.dynCall_iiiiiiiiiiiiiiiii=Y.dynCall_iiiiiiiiiiiiiiiii;d.dynCall_iiiiiiiiiiiiiiiiii=Y.dynCall_iiiiiiiiiiiiiiiiii;d.dynCall_ii=Y.dynCall_ii;d.dynCall_vi=Y.dynCall_vi;d.dynCall_iiiii=Y.dynCall_iiiii;d.dynCall_viiiiii=Y.dynCall_viiiiii;d.dynCall_iii=Y.dynCall_iii;d.dynCall_viiii=Y.dynCall_viiii; -x.i=Y.stackAlloc;x.r=Y.stackSave;x.j=Y.stackRestore;x.S=Y.establishStackSpace;x.L=Y.setTempRet0;x.H=Y.getTempRet0;function t(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}t.prototype=Error();t.prototype.constructor=t;var Jb=null,Ua=function Kb(){d.calledRun||Lb();d.calledRun||(Ua=Kb)}; -d.callMain=d.P=function(a){function b(){for(var a=0;3>a;a++)e.push(0)}a=a||[];xa||(xa=!0,P(Na));var c=a.length+1,e=[H(Sa(d.thisProgram),"i8",0)];b();for(var f=0;f\',Ea=\'">\',Ga="#",Ka="$",La="$$$$",Na="$MOL\\n",Qa="$RXN",Ra="$RXN\\n\\n\\nJME Molecular Editor\\n",Sa="%",Ta="&",Xa="&",$a=">",bb="<",cb="\'",db="(",jb=")",lb="*",mb="+",nb=",",qb=", ",tb=",modifiers=",ub="-",vb="-C#C-Me",yb="-C#CH",zb="-C#N",Bb="-C(=O)N",Cb="-C(=O)OH",Jb="-C(=O)OMe",\nLb="-CCl3",Mb="-CF3",Nb="-CMe3",Pb="-NC=O",Rb="-NH-SO2-Me",Sb="-NMe2",Tb="-NO2",Ub="-OC(=O)Me",Vb="-SO2-NH2",Wb="-SO3H",Xb="-disabled",Zb="-selected",bc=".",mc="...",nc="/",sc="//",wc="/>",xc="0",Dc="0.0px",Ec="0px",Fc="1",Gc="100%",Ic="1px",Pc="2",Qc="3",Rc="4",Tc="5",Uc="6",Vc="7",Yc="8",Zc="9",gd=":",hd=": ",id=";",od="<",pd="<\/g>",qd="<\/svg>",rd="<\/text>",ud=\'b?{}:new nl[b],_.cM=c);for(var e=3;e=a.u+a.n;if(a.q&&!d)return d=(b-a.u)/a.n,a.td((1+Math.cos(3.141592653589793+3.141592653589793*d))/2),a.p&&a.s==c;if(!a.q&&b>=a.u&&(a.q=!0,a.sd(),!(a.p&&a.s==c)))return!1;return d?(a.p=!1,a.q=!1,a.rd(),!1):!0}w(58,1,{});_.qd=function(){this.v&&this.rd()};\n_.rd=function(){this.td((1+Math.cos(6.283185307179586))/2)};_.sd=function(){this.td((1+Math.cos(3.141592653589793))/2)};_.n=-1;_.o=null;_.p=!1;_.q=!1;_.r=null;_.s=-1;_.t=null;_.u=-1;_.v=!1;function Fm(a,b){Gm(a.a,b)?a.a.r=a.a.t.vd(a.a.k,a.a.o):a.a.r=null}function Hm(a){this.a=a}w(59,1,{},Hm);_.ud=function(a){Fm(this,a)};_.a=null;w(60,1,{});w(61,1,dm);function Im(){Im=x;var a;(a=new Jm)&&(a.xd()||(a=new Km));Lm=a}w(62,60,{});var Lm=null;\nfunction Mm(a,b){var c=C(function(){if(!b.a){var c=Em();a.ud(c)}});$wnd.mozRequestAnimationFrame(c)}function Jm(){}w(63,62,{},Jm);_.xd=function(){return!!$wnd.mozRequestAnimationFrame};_.vd=function(a){var b;b=new Nm;Mm(a,b);return b};function Nm(){}w(64,61,dm,Nm);_.wd=function(){this.a=!0};_.a=!1;function Km(){this.a=new Om;this.b=new Pm(this)}w(65,62,{},Km);_.xd=function(){return!0};_.vd=function(a){a=new Qm(this,a);Rm(this.a,a);1==this.a.c&&Sm(this.b,16);return a};\nfunction Tm(){Tm=x;Um=new Om;var a=new Vm;Wm();Xm(Ym?Ym:Ym=new Zm,a)}function $m(a){a.b?$wnd.clearInterval(a.c):$wnd.clearTimeout(a.c);an(Um,a)}function Sm(a,b){if(0>b)throw new bn("must be non-negative");a.b?$wnd.clearInterval(a.c):$wnd.clearTimeout(a.c);an(Um,a);a.b=!1;a.c=cn(a,b);Rm(Um,a)}function cn(a,b){return $wnd.setTimeout(C(function(){a.yd()}),b)}w(67,1,{});_.yd=function(){this.b||an(Um,this);this.zd()};_.b=!1;_.c=0;var Um;function Pm(a){Tm();this.a=a}w(66,67,{},Pm);\n_.zd=function(){var a=this.a,b,c,d,e,f;b=D(dn,q,14,a.a.c,0);b=en(a.a,b);c=new fn;for(e=0,f=b.length;eEm()-d.a;){e=!1;for(f=0;f=a.a.d)break a;b=d[e];c=new FileReader;wu(c,a.a.b);1==a.a.c&&c.readAsText(b)}0==d.length&&(b=(this.a.dataTransfer||null).getData(mk),a.a.b._f(b))};_.Kd=function(){return uu};var uu;function xu(){xu=x;yu=new Rt(Oh,new zu)}function zu(){}w(285,266,{},zu);\n_.Hd=function(a){var b,c;b=this.a.rotation;c=this.a.scale;a.a.e&&(0!=b&&a.a.b.b!=b&&(a.a.b.b=b,a.a.b.a=null,Au(a.a.e,a.a.b)&&this.a.preventDefault()),a.a.d=!0);a.a.f&&(1!=c&&a.a.b.c!=c&&(a.a.b.a=null,a.a.b.c=c,Bu(a.a.f,a.a.b)&&this.a.preventDefault()),a.a.d=!0)};_.Kd=function(){return yu};var yu;function Cu(){Cu=x;Du=new Rt(Ph,new Eu)}function Eu(){}w(286,266,{},Eu);_.Hd=function(a){a.a.a&&(a.a.b.a=null,Fu(a.a.a,a.a.b))};_.Kd=function(){return Du};var Du;function Gu(){Gu=x;Hu=new Rt(Qh,new Iu)}\nfunction Iu(){}w(287,266,{},Iu);_.Hd=function(){this.a.preventDefault()};_.Kd=function(){return Hu};var Hu;w(289,266,{});w(288,289,{});function Ju(){Ju=x;Ku=new Rt(mi,new Lu)}function Lu(){}w(290,288,{},Lu);\n_.Hd=function(a){var b,c;c=this.a.keyCode||0;0<=c&&c<(Mu(),Nu).length&&-999!=(Mu(),Nu)[c]&&(c=(Mu(),Nu)[c]);b=new Ou(null,c,null);if(this.a.ctrlKey||this.a.shiftKey||this.a.metaKey||this.a.altKey)this.a.ctrlKey&&(b.e|=2),this.a.altKey&&(b.e|=8),this.a.metaKey&&(b.e|=4),this.a.shiftKey&&(b.e|=1);a:{var a=a.a.c,d=c,e;a.Gb=!1;if(!a.J||a.K){Pu(a,m);c=0;e=8==b.e;b=0!=(b.e&2);switch(d){case 99:case 67:b?Qu(su(a,!0,!1)):c=301;break;case 118:case 86:b&&a.Tb&&(b=a.r,null==b.i&&(b.i="PASTE"),Ru(a.E,(!a.Ub&&\n(a.Ub=new Su(a)),a.Ub)));break;case 110:case 78:c=401;break;case 111:case 79:c=501;break;case 115:case 83:c=601;break;case 112:case 80:c=1101;break;case 102:case 70:c=701;break;case 108:case 76:c=801;break;case 98:case 66:c=901;break;case 105:case 73:c=1001;break;case 120:case 88:a.Bc&&(Pu(a,hr((Tu(),Uu).Tc.a.pb,Gk)),c=1201,a.n=32);break;case 104:case 72:Pu(a,Ue);c=1300;break;case 114:case 82:Pu(a,"-R");c=1301;break;case 116:case 84:701==a.k?(c=236,Pu(a,Mb)):801==a.k?(c=237,Pu(a,Lb)):(c=233,Pu(a,\n"-tBu"));break;case 121:case 89:b?c=111:(c=234,Pu(a,Tb));break;case 122:case 90:b?c=110:(c=239,Pu(a,Wb));break;case 97:case 65:c=235;Pu(a,"-COOH");break;case 101:case 69:c=238;Pu(a,yb);break;case 117:case 85:c=110;break;case 113:case 81:c=242;Pu(a,zb);break;case 103:a=!0;break a;case 27:c=202;break;case 45:701==a.k?(c=254,Pu(a,"-F")):801==a.k?(c=255,Pu(a,"-Cl")):901==a.k?(c=256,Pu(a,"-Br")):1001==a.k?(c=257,Pu(a,"-I")):501==a.k?(c=259,Pu(a,"-OH")):401==a.k?(c=258,Pu(a,"-NH2")):c=202;break;case 43:c=\n108;break;case 35:c=204;break;case 48:105==a.k?Vu(a,0):e?(c=223,Pu(a,"-3-Furyl")):(c=221,Pu(a,"-Furyl"));break;case 49:105==a.k?Vu(a,1):c=209;break;case 50:case 61:50==d&&105==a.k?Vu(a,2):501==a.k?(c=250,Pu(a,"=O")):c=203;break;case 51:105==a.k?Vu(a,3):c=206;break;case 52:105==a.k?Vu(a,4):c=207;break;case 53:105==a.k?Vu(a,5):c=208;break;case 54:105==a.k?Vu(a,6):c=210;break;case 55:105==a.k?Vu(a,7):c=211;break;case 56:105==a.k?Vu(a,8):c=212;break;case 57:105==a.k?Vu(a,9):(Pu(a,"9 ring"),c=229);break;\ncase 100:case 68:case 8:case 127:c=104;break;case 32:c=205;break;case 109:case 77:case 1002:c=151;break;case 119:case 87:case 1003:c=152;break;case 1E3:c=153;break;case 1001:c=154}d=d+1-49;0<=d&&9>=d&&0=b&&(c=1301+d));Wu(a,c)}a=!0}a&&this.a.preventDefault()};_.Kd=function(){return Ku};var Ku;function Xu(){Xu=x;Yu=new Rt(Mi,new Zu)}function Zu(){}w(291,271,Tl,Zu);_.Hd=function(a){a.ld(this)};_.Kd=function(){return Yu};var Yu;\nfunction $u(){$u=x;av=new Rt(Ni,new bv)}function bv(){}w(292,271,Tl,bv);_.Hd=function(a){a.md(this)};_.Kd=function(){return av};var av;function cv(){cv=x;dv=new Rt(Oi,new ev)}function ev(){}w(293,271,Tl,ev);_.Hd=function(a){a.nd(this)};_.Kd=function(){return dv};var dv;function fv(){fv=x;gv=new Rt(Pi,new hv)}function hv(){}w(294,271,Tl,hv);_.Hd=function(a){var b;b=this.a;Sq((Pq(),Qq),new iv(a,a.b,b))};_.Kd=function(){return gv};var gv;function jv(){jv=x;kv=new Rt(Qi,new lv)}function lv(){}\nw(295,271,Tl,lv);_.Hd=function(a){a.od(this)};_.Kd=function(){return kv};var kv;function mv(){mv=x;nv=new Rt(Ri,new ov);new Rt(He,new ov)}function ov(){}w(296,271,Tl,ov);_.Hd=function(a){var b,c,d,e,f;b=this.a.detail||0;b=new pv(a.a.i,Vt(this),Wt(this),b);f=0;for(c=qv(a.a.i.Pc,D(rv,q,77,0,0)),d=0,e=c.length;da.qI&&(c.tM==x||c.cM&&c.cM[1])&&(!c.cM||!c.cM[-a.qI]))throw new Ew;}return a[b]=c}w(326,1,{},xw);_.qI=0;function Bw(){Bw=x;Cw=[];Dw=[];var a=new xw,b=Cw,c=Dw,d=0,e,f;for(f in a)if(e=a[f])b[d]=f,c[d]=e,++d}var Cw,Dw;function G(a,b){return null!=a&&a.cM&&!!a.cM[b]}function Sp(a){return null!=a&&a.tM!=x&&!(a.cM&&a.cM[1])}function Vp(a){return a.tM==x||a.cM&&!!a.cM[1]}\nfunction Fw(a){return null==a?null:a}function Gw(a){return~~Math.max(Math.min(a,2147483647),-2147483648)}var Hw=-1;\nfunction Iw(){var a;$stats&&Jw("com.google.gwt.useragent.client.UserAgentAsserter");a=navigator.userAgent.toLowerCase();if(-1!=a.indexOf(hj))a=hj;else if(-1!=a.indexOf("webkit"))a="safari";else if(-1!=a.indexOf(Ti)&&9<=$doc.documentMode)a="ie9";else if(-1!=a.indexOf(Ti)&&8<=$doc.documentMode)a="ie8";else{var b;var c=/msie ([0-9]+)\\.([0-9]+)/.exec(a);c&&3==c.length&&(b=6E3<=1E3*parseInt(c[1])+parseInt(c[2]));a=b?"ie6":-1!=a.indexOf("gecko")?Nh:"unknown"}H(Nh,a)||$wnd.alert("ERROR: Possible problem with your *.gwt.xml module file.\\nThe compile time user.agent value (gecko1_8) does not match the runtime user.agent value ("+\na+"). Expect more errors.\\n");$stats&&Jw("com.google.gwt.user.client.DocumentModeAsserter");b=$doc.compatMode;a=z(Kw,q,1,[qe]);for(c=0;c>22&4194303,0>a?1048575:0)}\nfunction Sw(a){return Rw(a.l,a.m,a.h)}function Rw(a,b,c){return _=new Tw,_.l=a,_.m=b,_.h=c,_}\nfunction Uw(a,b){var c,d,e,f,g;if(0==b.l&&0==b.m&&0==b.h)throw new Vw;if(0==a.l&&0==a.m&&0==a.h)return Ww=Rw(0,0,0),Rw(0,0,0);if(524288==b.h&&0==b.m&&0==b.l)return c=a,524288==c.h&&0==c.m&&0==c.l?(Ww=Rw(0,0,0),c=Sw((Xw(),Yw))):(Ww=Rw(c.l,c.m,c.h),c=Rw(0,0,0)),c;g=!1;0!=b.h>>19&&(b=Zw(b),g=!0);e=b.l;0!=(e&e-1)?f=-1:(d=b.m,0!=(d&d-1)?f=-1:(c=b.h,f=0!=(c&c-1)||0==c&&0==d&&0==e?-1:0==c&&0==d&&0!=e?$w(e):0==c&&0!=d&&0==e?$w(d)+22:0!=c&&0==d&&0==e?$w(c)+44:-1));c=d=e=!1;if(524288==a.h&&0==a.m&&0==a.l)if(e=\nd=!0,-1==f)a=Sw((Xw(),ax)),c=!0,g=!g;else return c=bx(a,f),g&&cx(c),Ww=Rw(0,0,0),c;else 0!=a.h>>19&&(e=!0,a=Zw(a),c=!0,g=!g);if(-1!=f){c=a;d=f;f=g;g=e;e=bx(c,d);f&&cx(e);var h;22>=d?(f=c.l&(1<=d?(f=c.l,h=c.m&(1<r?j=\n!1:(n=j.l-f.l,o=j.m-f.m+(n>>22),r+=o>>22,0>r?j=!1:(j.l=n&4194303,j.m=o&4194303,j.h=r&1048575,j=!0));if(j&&(22>l?h.l|=1<l?h.m|=1<>>1;f.m=j>>>1|(n&1)<<21;f.l=o>>>1|(j&1)<<21;--l}g&&cx(h);e?(Ww=Zw(c),d&&(Ww=gx(Ww,(Xw(),Yw)))):Ww=Rw(c.l,c.m,c.h);return h}function cx(a){var b,c,d;b=~a.l+1&4194303;c=~a.m+(0==b?1:0)&4194303;d=~a.h+(0==b&&0==c?1:0)&1048575;a.l=b;a.m=c;a.h=d}\nfunction ex(a){var b;b=hx(a.h);return 32==b?(b=hx(a.m),32==b?hx(a.l)+32:b+20-10):b-12}var Ww=null;function ix(a,b){return a.l==b.l&&a.m==b.m&&a.h==b.h}function J(a){var b,c,d;if(isNaN(a))return Xw(),jx;if(-9223372036854775E3>a)return Xw(),kx;if(9223372036854775E3<=a)return Xw(),ax;d=!1;0>a&&(d=!0,a=-a);c=0;17592186044416<=a&&(c=Gw(a/17592186044416),a-=17592186044416*c);b=0;4194304<=a&&(b=Gw(a/4194304),a-=4194304*b);a=Gw(a);b=Rw(a,b,c);d&&cx(b);return b}\nfunction lx(a){var b,c;return-129a?(b=a+128,null==mx&&(mx=D(nx,q,32,256,0)),c=mx[b],!c&&(c=mx[b]=Qw(a)),c):Qw(a)}function ox(a){var b=Rk,c,d;c=a.h>>19;d=b.h>>19;return 0==c?0!=d||a.h>b.h||a.h==b.h&&a.m>b.m||a.h==b.h&&a.m==b.m&&a.l>b.l:!(0==d||a.h>19;d=b.h>>19;return 0==c?0!=d||a.h>b.h||a.h==b.h&&a.m>b.m||a.h==b.h&&a.m==b.m&&a.l>=b.l:!(0==d||a.h>13|(a.m&15)<<9;e=a.m>>4&8191;f=a.m>>17|(a.h&255)<<5;g=(a.h&1048320)>>8;h=b.l&8191;j=b.l>>13|(b.m&15)<<9;l=b.m>>4&8191;n=b.m>>17|(b.h&255)<<5;o=(b.h&1048320)>>8;r=c*h;y=d*h;t=e*h;v=f*h;g*=h;0!=j&&(y+=c*j,t+=d*j,v+=e*j,g+=f*j);0!=l&&(t+=c*l,v+=d*l,g+=e*l);0!=n&&(v+=c*n,g+=d*n);0!=o&&(g+=c*o);c=(r&4194303)+((y&511)<<13);r=(r>>22)+(y>>9)+((t&262143)<<4)+((v&31)<<17)+(c>>22);t=(t>>18)+(v>>5)+((g&4095)<<8)+(r>>22);return Rw(c&4194303,r&\n4194303,t&1048575)}function Zw(a){var b,c;b=~a.l+1&4194303;c=~a.m+(0==b?1:0)&4194303;return Rw(b,c,~a.h+(0==b&&0==c?1:0)&1048575)}function fx(a,b){var c,d,e,b=b&63;22>b?(c=a.l<>22-b,e=a.h<>22-b):44>b?(c=0,d=a.l<>44-b):(d=c=0,e=a.l<b?(e=c>>b,d=a.m>>b|c<<22-b,c=a.l>>b|a.m<<22-b):44>b?(e=d?1048575:0,d=c>>b-22,c=a.m>>b-22|c<<44-b):(e=d?1048575:0,d=d?4194303:0,c>>=b-44);return Rw(c&4194303,d&4194303,e&1048575)}function gx(a,b){var c,d;c=a.l-b.l;d=a.m-b.m+(c>>22);return Rw(c&4194303,d&4194303,a.h-b.h+(d>>22)&1048575)}function P(a){return a.l|a.m<<22}\nfunction qx(a){var b,c,d;if(0==a.l&&0==a.m&&0==a.h)return xc;if(524288==a.h&&0==a.m&&0==a.l)return"-9223372036854775808";if(0!=a.h>>19)return ub+qx(Zw(a));for(c=m;!(0==a.l&&0==a.m&&0==a.h);){b=lx(1E9);a=Uw(a,b);b=m+P(Ww);if(!(0==a.l&&0==a.m&&0==a.h))for(d=9-b.length;0=c))vh==vh&&(a.ondragexit=By);else switch(b){case "drag":a.ondrag=Ay;break;case th:a.ondragend=Ay;break;case uh:a.ondragenter=By;break;case wh:a.ondragleave=Ay;break;case xh:a.ondragover=By;break;case yh:a.ondragstart=Ay;break;case zh:a.ondrop=Ay;break;case "canplaythrough":case "ended":case "progress":a.removeEventListener(b,Ay,!1);a.addEventListener(b,Ay,!1);break;default:throw"Trying to sink unknown event type "+b;}}\nvar Ey=null,yy=null,Dy=null,By=null,Ay=null,Cy=null;function vy(){$wnd.addEventListener(Oi,C(function(a){var b=Ey;if(b&&!a.relatedTarget&&ei==a.target.tagName.toLowerCase()){var c=$doc.createEvent("MouseEvents");c.initMouseEvent(Qi,!0,!0,$wnd,0,a.screenX,a.screenY,a.clientX,a.clientY,a.ctrlKey,a.altKey,a.shiftKey,a.metaKey,a.button,null);b.dispatchEvent(c)}}),!0);$wnd.addEventListener(He,Dy,!0)}\nfunction Hy(a,b){Wx();var c=(a.__eventBits||0)^b;a.__eventBits=b;c&&(c&1&&(a.onclick=b&1?Ay:null),c&2&&(a.ondblclick=b&2?Ay:null),c&4&&(a.onmousedown=b&4?Ay:null),c&8&&(a.onmouseup=b&8?Ay:null),c&16&&(a.onmouseover=b&16?Ay:null),c&32&&(a.onmouseout=b&32?Ay:null),c&64&&(a.onmousemove=b&64?Ay:null),c&128&&(a.onkeydown=b&128?Ay:null),c&256&&(a.onkeypress=b&256?Ay:null),c&512&&(a.onkeyup=b&512?Ay:null),c&1024&&(a.onchange=b&1024?Ay:null),c&2048&&(a.onfocus=b&2048?Ay:null),c&4096&&(a.onblur=b&4096?Ay:\nnull),c&8192&&(a.onlosecapture=b&8192?Ay:null),c&16384&&(a.onscroll=b&16384?Ay:null),c&32768&&(a.onload=b&32768?Cy:null),c&65536&&(a.onerror=b&65536?Ay:null),c&131072&&(a.onmousewheel=b&131072?Ay:null),c&262144&&(a.oncontextmenu=b&262144?Ay:null),c&524288&&(a.onpaste=b&524288?Ay:null),c&1048576&&(a.ontouchstart=b&1048576?Ay:null),c&2097152&&(a.ontouchmove=b&2097152?Ay:null),c&4194304&&(a.ontouchend=b&4194304?Ay:null),c&8388608&&(a.ontouchcancel=b&8388608?Ay:null),c&16777216&&(a.ongesturestart=b&16777216?\nAy:null),c&33554432&&(a.ongesturechange=b&33554432?Ay:null),c&67108864&&(a.ongestureend=b&67108864?Ay:null));b&131072&&a.addEventListener(He,Ay,!1)}w(381,1,vl);_.ge=function(a){return decodeURI(a.replace("%23",Ga))};_.$d=function(a){bw(this.a,a)};_.he=function(a){a=null==a?m:a;if(!H(a,null==Iy?m:Iy))Iy=a,Pv&&(a=new Ov,bw(this.a,a))};var Iy=m;\nfunction ey(){function a(){$wnd.setTimeout(a,250);e()}var b=cy,c=m,d=$wnd.location.hash;0d||d>a.p.c)throw new rz;b.ob==a&&(f=a.Ae(b),fd||d>=c.c)throw new rz;for(--c.c;d<\/div>"),Sq((Pq(),Qq),new Vz(d)));c.appendChild(d);this.Le(0,0);(Pz?lr(this.pb):mr(lr(this.pb)))[Xg]="gwt-PopupPanel";(Pz?lr(lr(this.pb)):lr(this.pb))[Xg]=qj;this.W=this.V=a;this.db=!1;c=z(Kw,q,1,[b+"Top",b+"Middle",b+"Bottom"]);this.T=new Wz(c);c=m;this.T.me()[Xg]=c;c=Pz?lr(this.pb):mr(lr(this.pb));if(!c)throw new Op(zf);d=Sy("gwt-DecoratedPopupPanel");\nif(0==d.length)throw new bn(Pf);var e=c.className.split(/\\s+/);if(e){var f=e[0],g=f.length;e[0]=d;for(var h=1,j=e.length;hg&&l.charAt(g)==ub&&0==l.indexOf(f)&&(e[h]=d+l.substring(g))}c.className=e.join(ha)}Fz(this,this.T);Mz(this);Ky(Pz?lr(lr(this.pb)):lr(this.pb),qj,!1);Ky(this.T.b,b+"Content",!0)}w(391,392,Sl);_.se=function(){az(this.T)};_.te=function(){dz(this.T)};_.He=function(){return this.T.jb};_.Ce=function(){return new Hz(this.T)};_.ze=function(a){return this.T.ze(a)};\n_.Ie=function(a){Fz(this.T,a);Mz(this)};_.T=null;w(390,391,Sl);_.we=jz;function Xz(){Xz=x;Yz=new Zz(0,(Sz(),Tz));$z=new Zz(1,aA);bA=new Zz(2,cA);dA=z(eA,q,39,[Yz,$z,bA])}function Zz(a,b){this.b=a;this.a=b}w(394,195,{39:1,90:1,95:1,97:1},Zz);_.a=null;var dA,Yz,$z,bA;function fA(){fA=x;gA=z(Kw,q,1,[tk,Ki,Jg])}\nfunction Wz(a){var b;fA();var c,d;c=this.pb=$doc.createElement(fk);this.c=$doc.createElement(kk);Ox(c,this.c);c[Rg]=0;for(c=c[Ng]=0;c";h=new yx(c.a.a);g=(ir(g,h.a),lr(g));a.kb&&(a.pb.__listener=\nnull);if(a.pb&&(h=a.pb,b=h.parentNode))b.insertBefore(g,h),b.removeChild(h);a.pb=g;a.kb&&(a.pb.__listener=a);-1==a.lb?Hy(a.pb,133333119|(a.pb.__eventBits||0)):a.lb|=133333119}w(423,424,{},NA);_.a=0;_.b=0;_.c=0;_.d=null;_.e=0;function OA(a,b){this.a=a;this.b=b}w(425,1,{},OA);_.pd=function(){var a,b;this.b.a!=this.a||this!=this.a.f||(this.a.f=null,this.b.kb?(a=(b=$doc.createEvent("HTMLEvents"),b.initEvent(vi,!1,!1),b),this.b.pb.dispatchEvent(a)):this.b.pb.__gwtLastUnhandledEvent=vi)};_.a=null;_.b=null;\nw(427,355,Ql);function UA(a){this.a=a}w(429,427,Ql,UA);_.Wd=function(a){this.a.Oe(a.f,a.a)};function VA(a,b,c){var d;if(a.o){var e=d=$doc.createElement(zk);Fy(a.e,(Px(),Qx(e)),b);a=(Px(),Qx(c));d.appendChild(a)}else d=wy(a.e,0),Fy(d,(Px(),Qx(c)),b)}\nfunction WA(a,b,c){var d;b.b&&(XA(a,b),c&&b.a?(XA(a,null),a=b.a,b=(Pq(),Qq),b.c=Tq(b.c,[new YA(a),!1])):null!=b.d&&(a.j=new ZA(a,b),c=(Sz(),aA),a.j.U=c,a.j.ab=a.f,c=$h,a.j.me()[Xg]=c,d=Py(a.pb),H(Zh,d)||Jy(a.j,d+"Popup"),$y(a.j,new UA(a),Ym?Ym:Ym=new Zm),a.n=b.d,d=a.j,a=new $A(a,b),d.pb.style[Ik]=di,Oz(d),uw(),a.a.o?Nz(a.a.j,br(a.a.pb)+gr(a.a.pb,fj)-1,er(a.b.pb)):Nz(a.a.j,br(a.b.pb),er(a.a.pb)+gr(a.a.pb,ej)-1),d.pb.style[Ik]=Jk))}\nfunction aB(a,b){!b&&a.k&&a.n==a.k.d||b&&!b.b||(XA(a,b),a.pb.focus(),b&&a.d&&WA(a,b,!1))}\nfunction bB(a,b){var c;a:{c=b.target;var d,e;for(e=new gw(a.i);e.bc&&(c=a.i.c-1),c==b){d=fy(a.i,b);break}else if(d=fy(a.i,c),d.b)break;XA(a,d)}}w(430,388,Ul);_.ee=function(a){bB(this,a)};_.we=function(){this.j&&Kz(this.j,!1);dz(this)};_.Oe=function(a,b){fB(this,a,b)};_.d=!1;_.e=null;_.f=!1;_.j=null;_.k=null;_.n=null;_.o=!1;function YA(a){this.a=a}\nw(431,1,{},YA);_.pd=function(){iB(this.a)};_.a=null;function jB(a){this.a=a}w(432,1,{},jB);_.Ld=function(){XA(this.a,null)};_.a=null;function ZA(a,b){Iz();this.a=a;this.b=b;Qz.call(this,!0,Fi);Fz(this.T,this.b.d);Mz(this);this.fb=!0;this.b.d.ii()}w(433,391,Sl,ZA);_.ae=function(a){var b,c;if(!a.a)switch(Ux(a.d.type)){case 4:c=a.d.target;b=this.b.c.pb;if(tr(b,c)){a.a=!0;break}a.a&&XA(this.a,null)}};_.a=null;_.b=null;function $A(a,b){this.a=a;this.b=b}w(434,1,{},$A);_.a=null;var kB=_.b=null;\nfunction lB(){lB=x;kB=new sx((Jx(),new Ix((uw(),"data:image/gif;base64,R0lGODlhBQAJAIAAAAAAAAAAACH5BAEAAAEALAAAAAAFAAkAAAIMRB5gp9v2YlJsJRQKADs="))),5,9)}function mB(a,b){if(b){var c=Py(a.pb)+Xb;Ky(a.me(),c,!1)}else c=Py(a.pb)+Xb,Ky(a.me(),c,!0);a.b=b}function nB(a,b){this.pb=$doc.createElement(lk);var c=Py(this.pb)+Zb;Ky(this.me(),c,!1);this.pb.textContent=a||m;this.pb[Xg]="gwt-MenuItem";c=ur();this.pb.setAttribute(gi,c);eo();this.pb.setAttribute(Gj,Lo.a);this.a=b}w(437,389,{43:1,47:1,50:1},nB);\n_.a=null;_.b=!0;_.c=null;_.d=null;function oB(){var a;this.pb=$doc.createElement(lk);this.pb[Xg]="gwt-MenuItemSeparator";a=$doc.createElement(qh);Ox(this.pb,a);a[Xg]="menuSeparatorInner"}w(438,389,Jl,oB);function pB(){var a,b,c,d,e;b=null.ii();e=wr();d=vr();b[ph]=(ls(),Zi);b[Lk]=0+(Ss(),uj);b[ci]=Ec;c=$doc;c=(H(c.compatMode,qe)?c.documentElement:c.body).scrollWidth||0;a=$doc;a=(H(a.compatMode,qe)?a.documentElement:a.body).scrollHeight||0;b[Lk]=(c>e?c:e)+uj;b[ci]=(a>d?a:d)+uj;b[ph]="block"}\nfunction Rz(){}w(439,1,{},Rz);_.Yd=function(){pB()};function qB(a){this.a=a}w(440,1,{},qB);\n_.ae=function(a){var b=this.a,c,d;if(a.a||!b.fb&&a.b)b.db&&(a.a=!0);else if(b.ae(a),!a.a){d=a.d;c=d.target;var e;try{e=!!c&&!!c.nodeType}catch(f){e=!1}(c=e&&c&&1==c.nodeType?tr(b.pb,c):!1)&&(a.b=!0);b.db&&(a.a=!0);switch(Ux(d.type)){case 4:case 1048576:if(Tx){a.b=!0;break}if(!c&&b.V){b.Ke(!0);break}break;case 8:case 64:case 1:case 2:case 4194304:if(Tx){a.b=!0;break}break;case 2048:d=d.target,b.db&&!c&&d&&(d.blur&&d!=$doc.body&&d.blur(),a.a=!0)}}};_.a=null;function rB(a){this.a=a}w(441,1,{},rB);\n_.a=null;function Sz(){Sz=x;Tz=new sB(0);aA=new sB(1);cA=new sB(2);tB=z(uB,q,48,[Tz,aA,cA])}function sB(a){this.b=a}w(442,195,{48:1,90:1,95:1,97:1},sB);var tB,Tz,aA,cA;function vB(a){a.j?a.a.bb&&($doc.body.appendChild(a.a.Z),Iz(),a.f=iy(a.a.$),pB(),a.b=!0):a.b&&($doc.body.removeChild(a.a.Z),Iz(),wB(a.f.a),a.f=null,a.b=!1)}function xB(a){a.j||(vB(a),a.c||(fz(),xz(yB(null),a.a)),Iz());zB((Iz(),a.a.pb),"rect(auto, auto, auto, auto)");a.a.pb.style[lj]=Jk}\nfunction AB(a,b){var c,d,e,f,g,h;a.j||(b=1-b);c=f=e=g=0;d=Gw(b*a.d);h=Gw(b*a.e);switch(a.a.U.b){case 2:f=a.e;c=d;break;case 0:g=a.d-d>>1;e=a.e-h>>1;f=e+h;c=g+d;break;case 1:uw(),f=h,c=d}zB((Iz(),a.a.pb),"rect("+g+wj+f+wj+c+wj+e+"px)")}\nfunction Lz(a,b,c){a.c=c;Cm(a);a.i&&($m(a.i),a.i=null,xB(a));a.a.hb=b;var d=a.a;d.eb&&(wB(d.eb.a),d.eb=null);d._&&(wB(d._.a),d._=null);if(d.hb){d.eb=Vx(new qB(d));var e;e=new rB(d);by();e=cy?Qv(cy.a,(!Pv&&(Pv=new Zm),Pv),e):null;d._=e}c=!c&&a.a.ab;a.a.U!=(Sz(),Tz)&&!b&&(c=!1);a.j=b;c?b?(vB(a),a.a.pb.style[rj]=ig,-1!=a.a.ib&&a.a.Le(a.a.cb,a.a.ib),zB((Iz(),a.a.pb),Bj),fz(),b=yB(null),oz(b,a.a,b.pb),a.i=new BB(a),Sm(a.i,1)):Dm(a,200):(vB(a),a.j?(a.a.pb.style[rj]=ig,-1!=a.a.ib&&a.a.Le(a.a.cb,a.a.ib),\nfz(),b=yB(null),oz(b,a.a,b.pb)):a.c||(fz(),xz(yB(null),a.a)),Iz(),a.a.pb.style[lj]=Jk)}function Uz(a){var b=(Im(),Lm);this.k=new Hm(this);this.t=b;this.a=a}w(443,58,{},Uz);_.rd=function(){xB(this)};_.sd=function(){this.d=gr(this.a.pb,ej);this.e=gr(this.a.pb,fj);this.a.pb.style[lj]=di;AB(this,(1+Math.cos(3.141592653589793))/2)};_.td=function(a){AB(this,a)};_.a=null;_.b=!1;_.c=!1;_.d=0;_.e=-1;_.f=null;_.i=null;_.j=!1;function BB(a){Tm();this.a=a}w(444,67,{},BB);\n_.zd=function(){this.a.i=null;Dm(this.a,200)};_.a=null;function Px(){Px=x;CB()}function Qx(a){return a.__gwt_resolve?a.__gwt_resolve():a}function CB(){function a(){}a.prototype={className:m,clientHeight:0,clientWidth:0,dir:m,getAttribute:function(a){return this[a]},href:m,id:m,lang:m,nodeType:1,removeAttribute:function(a){this[a]=void 0},setAttribute:function(a,c){this[a]=c},src:m,style:{},title:m};$wnd.GwtPotentialElementShim=a}function fz(){fz=x;DB=new EB;FB=new Hp;gz=new dw}\nfunction GB(a){this.p=new Cz(this);this.pb=a;az(this)}function yB(a){fz();var b,c;c=mw(FB,a);b=null;if(null!=a&&!(b=$doc.getElementById(a)))return null;if(c&&(!b||c.pb==b))return c;if(0==FB.d){var d=new HB;Wm();Xm(Ym?Ym:Ym=new Zm,d);uw()}!b?c=new IB:c=new GB(b);E(FB,a,c);ew(gz,c);return c}w(446,385,Sl,GB);var DB,FB,gz;function EB(){}w(447,1,{},EB);_.Ne=function(a){a.ue()&&a.we()};function HB(){}w(448,1,{},HB);_.Wd=function(){fz();try{kz(gz,DB)}finally{JB(gz.a),JB(FB)}};\nfunction IB(){GB.call(this,$doc.body)}w(449,446,Sl,IB);_.Fe=function(a,b,c){b-=or();c-=pr();Az(a,b,c)};function Hz(a){this.c=a;this.a=!!this.c.jb}w(450,1,{},Hz);_.be=zx;_.ce=function(){if(!this.a||!this.c.jb)throw new uz;this.a=!1;return this.b=this.c.jb};_.de=function(){this.b&&this.c.ze(this.b)};_.b=null;_.c=null;function KB(a,b){a.pb[Gk]=null!=b?b:m}w(453,403,Ul);_.ee=function(a){0!=(Ux(a.type)&896)?cz(this,a):cz(this,a)};_.xe=iz;function LB(){LB=x;MB()}w(452,453,Ul);\nfunction NB(){LB();var a=kr(mk);!Nx&&(Nx=new Mx);!Lx&&(Lx=new Kx);this.pb=a;uw();this.pb[Xg]="gwt-TextBox"}w(454,452,Ul,NB);function MB(){MB=x;OB=new PB;QB=new RB;SB=new TB;UB=new VB;WB=z(XB,q,51,[OB,QB,SB,UB])}w(455,195,Vl);var WB,OB,QB,SB,UB;function PB(){this.b=0}w(456,455,Vl,PB);function RB(){this.b=1}w(457,455,Vl,RB);function TB(){this.b=2}w(458,455,Vl,TB);function VB(){this.b=3}w(459,455,Vl,VB);function tz(a,b){var c;for(c=0;cc||c>a.c)throw new rz;if(a.c==a.a.length){e=D(YB,q,52,2*a.a.length,0);for(d=0;dc;--d)xq(a.a,d,a.a[d-1]);xq(a.a,c,b)}function Cz(a){this.b=a;this.a=D(YB,q,52,4,0)}w(461,1,{},Cz);_.Ce=function(){return new vz(this)};_.a=null;_.b=null;_.c=0;function ZB(a){if(a.a>=a.b.c)throw new uz;return a.b.a[++a.a]}function $B(a){if(0>a.a||a.a>=a.b.c)throw new aC;a.b.b.ze(a.b.a[a.a--])}function vz(a){this.b=a}w(462,1,{},vz);\n_.be=function(){return this.a=1E3*parseInt(a[1])+parseInt(a[2])){Pz=!0;break a}Pz=!1}}\nfunction zB(a,b){a.style.clip=b;a.style[ph]=(ls(),Zi);a.style[ph]=m}var Pz;function Vz(a){this.a=a}w(470,1,{},Vz);_.pd=function(){this.a.style[lj]=(ws(),zg)};_.a=null;function wB(a){var b=a.a,c=a.d,d=a.c,a=a.b;0a)throw new bn("Missing message: awt.133");this.e=a;this.a=2;this.c=0;this.d=10;this.b=0}w(489,1,{57:1},lD);\n_.eQ=function(a){return a===this?!0:G(a,57)?a.e==this.e&&a.a==this.a&&a.c==this.c&&a.d==this.d&&a.b==this.b:!1};_.hC=function(){var a;a=new mD;a.a=31*a.a+Gw((new nD(this.e)).a);a.a=31*a.a+this.a;a.a=31*a.a+this.c;a.a=31*a.a+Gw((new nD(this.d)).a);return a.a};_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;\nfunction oD(){oD=x;pD=qD=new rm(255,255,255);rD=new rm(192,192,192);sD=new rm(128,128,128);tD=new rm(64,64,64);uD=vD=new rm(0,0,0);wD=xD=new rm(255,0,0);new rm(255,175,175);yD=new rm(255,200,0);zD=new rm(255,255,0);new rm(0,255,0);AD=new rm(255,0,255);BD=new rm(0,255,255);CD=DD=new rm(0,0,255)}\nfunction ED(a){var b,c;c=a.d>>16&255;b=a.d&255;a=a.d>>8&255;if(0==c&&0==b&&0==a)return new rm(3,3,3);3>c&&0!=c?c=3:(c=Gw(c/0.7),c=255b&&0!=b?b=3:(b=Gw(b/0.7),b=255a&&0!=a?a=3:(a=Gw(a/0.7),a=255>16&255)),Gw(0.7*(a.d>>8&255)),Gw(0.7*(a.d&255)))}function GD(a,b){return G(b,60)?b.d==a.d:!1}function rm(a,b,c){oD();if((a&255)!=a||(b&255)!=b||(c&255)!=c)throw new bn(De);this.d=c|b<<8|a<<16|-16777216}\nw(495,1,{60:1,69:1,72:1},rm);_.eQ=function(a){return GD(this,a)};_.hC=HD;_.tS=function(){return ID.d+"[r="+(this.d>>16&255)+",g="+(this.d>>8&255)+",b="+(this.d&255)+eg};_.a=0;_.b=null;_.c=null;_.d=0;var uD,CD,wD,pD,vD,DD,BD,tD,sD,rD,AD,yD,xD,qD,zD;function CC(){CC=x;DC=new JD(!0);KD=new dw;ew(KD,"ar");ew(KD,"fa");ew(KD,"iw");ew(KD,"ur")}function JD(a){this.a=a}w(496,1,Pl,JD);_.a=!1;var DC,KD;w(500,1,{78:1,94:1});function LD(){tC.call(this,0,0)}function tC(a,b){this.b=a;this.a=b}\nfunction vC(a){tC.call(this,a.b,a.a)}w(499,500,{63:1,78:1,90:1,94:1},LD,tC,vC);_.eQ=function(a){return a===this?!0:G(a,63)?a.b==this.b&&a.a==this.a:!1};_.hC=function(){var a;a=new mD;a.a=31*a.a+this.b;a.a=31*a.a+this.a;return a.a};_.tS=function(){return MD.d+"[width="+this.b+",height="+this.a+eg};_.a=0;_.b=0;function Ou(a,b,c){this.f=a;this.c=b;this.e=this.d=this.j=this.i=0;this.b=c}w(501,1,Pl,Ou,function(a,b,c,d){this.f=a;this.c=b;this.j=this.i=0;this.d=c;this.e=d;this.b=null});\n_.xf=function(){return 0!=(this.e&4)};_.yf=function(){return 0!=(this.e&1)};_.tS=function(){var a;return this.cZ.d+"[id="+this.c+",x="+this.i+",y="+this.j+(0!=this.d?",key="+this.d+(a=m,this.yf()&&(a+=",shift"),0!=(this.e&2)&&(a+=",control"),this.xf()&&(a+=",meta"),a):m)+",target="+this.f+(null!=this.b?",arg="+this.b:m)+eg};_.b=null;_.c=0;_.d=0;_.e=0;_.f=null;_.i=0;_.j=0;function ND(a){var b,c;for(c=b=0;cb.b&&(OD(this,l,b.b-(n-this.c),g.b,o,j,h),l.ug(),n=f,o+=j+this.d,j=0),e=!1,xq(l.b,l.c++,c),n+=a.b+this.c,j=gn(j,a.a);OD(this,l,b.b-(n-this.c),g.b,o,\nj,h)}};_.uf=function(a){this.b=TD(a.Fc);return 0==ND(this)?KC(a,new tC(10,10)):KC(a,QD(this,!1))};_.vf=function(a){this.b=TD(a.Fc);return 0==ND(this)?KC(a,new tC(10,10)):KC(a,QD(this,!0))};_.wf=HC;_.tS=function(){var a;switch(this.a){case 0:a=pi;break;case 2:a=Fj;break;case 1:a=Tg;break;case 4:a="trailing";break;default:a="leading"}return WD.d+"[hgap="+this.c+",vgap="+this.d+",align="+a+eg};_.a=0;_.b=null;_.c=0;_.d=0;function XD(){XD=x;YD=new ZD(Ne,0,12)}\nfunction ZD(a,b,c){XD();this.a=null!=a?a:"Default";this.b=0<=c?c:0;this.c=0==(b&-4)?b:0}w(503,1,{64:1,90:1},ZD);_.a=null;_.b=0;_.c=0;var YD;w(504,1,Cl);_.tS=function(){return $D.d+"[font="+this.b+"ascent="+aE(this.b).a+", descent="+aE(this.b).b+", height="+aE(this.b).c+eg};_.b=null;w(506,1,{});_.tS=function(){return"Graphics"};w(507,506,{});function aC(){}function bz(a){this.f=a}w(510,138,ql,aC,bz);function pC(){this.f="Missing message: awt.151"}w(509,510,ql,pC);w(511,1,{});\nfunction FC(a,b,c,d){this.d=a;this.b=b;this.a=c;this.c=d}w(512,1,{66:1,90:1,94:1},FC);_.eQ=function(a){return a===this?!0:G(a,66)?a.b==this.b&&a.a==this.a&&a.c==this.c&&a.d==this.d:!1};_.hC=function(){var a;a=31+this.d;a=31*a+this.b;a=31*a+this.a;return a=31*a+this.c};_.tS=function(){return bE.d+"[left="+this.b+",top="+this.d+",right="+this.c+",bottom="+this.a+eg};_.a=0;_.b=0;_.c=0;_.d=0;w(516,1,Pl);_.gf=function(){return this.j};_.tS=JC;_.j=null;_.k=null;\nfunction cE(a){var b;b=a.j+",label="+a.f;a.e||(b+=",disabled");null!=a.c&&(b+=",command="+a.c);return b}function dE(a,b){a.e=b;mB(a.i.a,b)}function eE(a){this.n=(zC(),zC(),AC);var b;var c;b=this.cZ.d;-1!=Qy(b,Ry(36))?b=null:(c=this.n.b.d++,b=Ty(b,jC(b,Ry(46))+1)+m+c);this.j=b;this.d=new jD;this.f=a;this.e=!0;this.i=new fE(this)}w(515,516,Pl,eE);_.gf=function(){return cE(this)};_.c=null;_.e=!1;_.f=null;_.i=null;w(514,515,Ml);_.gf=function(){return cE(this)+(this.b?",tearOff":m)};_.b=!1;w(518,1,{79:1});\n_.eQ=function(a){return a===this?!0:G(a,79)?this.zf()==a.zf()&&this.Af()==a.Af():!1};_.hC=function(){var a;a=new mD;gE(a,this.zf());gE(a,this.Af());return a.a};function oC(){this.b=this.a=0}function hE(a,b){this.a=a;this.b=b}w(517,518,{70:1,79:1,90:1},oC,hE);_.eQ=function(a){return a===this?!0:G(a,70)?this.a==a.a&&this.b==a.b:!1};_.zf=zx;_.Af=iA;_.tS=function(){return iE.d+"[x="+this.a+",y="+this.b+eg};_.a=0;_.b=0;\nfunction jE(a,b){if(!b)throw new Rv("Missing message: awt.70");var c=a.a;if(H(b.f,ub)){var c=c.a.a,d=new oB,e=c.c.c;if(0>e||e>c.c.c)throw new rz;c.o&&(d.pb[ah]=2);VA(c,e,d.pb);kE(c.c,e,d)}else{var d=c.a.a,c=b.i.a,e=d.c.c,f,g;if(0>e||e>d.c.c)throw new rz;kE(d.c,e,c);for(f=g=0;fb?0:b;var c=this.Tc;KB(c.a,a);c.e.a=-1;c.e.b=-1}w(528,527,$l,wE,xE);_.Re=function(){return"textfield"+this.Vc.b.f++};_.Te=function(){return uE(this,hr(this.Tc.a.pb,Gk).length)};_.Ue=function(){return!kC(this)?null:uE(this,hr(this.Tc.a.pb,Gk).length)};_.We=yE;_.Ye=BE;_.af=function(){this.Tc=(zC(),new CE)};_.ef=yE;_.hf=BE;_.a=0;function zC(){zC=x;AC=new DE}\nfunction EE(){var a=(zC(),zC(),AC);!a.c&&(a.c=new FE);return a.c}w(529,1,{});_.a=null;_.c=null;var AC;function GE(){}w(530,1,{},GE);_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;_.f=0;w(531,1,{});function HE(){HE=x;IE=new JE;KE=new JE}function LE(a,b){return b==a?!0:!b?!1:!0}function JE(){}w(532,1,{74:1},JE);_.eQ=function(a){return null==a||!G(a,74)?!1:LE(this,a)};_.hC=function(){var a;a=null.ii()+";class="+null.ii();a=!null.ii().ii()?a:a+";charset=";return ME(a)};\n_.tS=function(){return NE.d+"[MimeType=(null);humanPresentableName="+this.a+eg};_.a=null;var IE,KE;function OE(){OE=x;z(PE,q,74,[(HE(),KE),IE])}function QE(a){var b=(HE(),KE);if(LE(b,(HE(),KE)))return a.a;if(LE(b,IE))return new RE(a.a);throw new SE(b);}function TE(a){OE();this.a=a}w(533,1,{},TE);_.a=null;function SE(a){this.f="flavor = "+a}w(534,139,{75:1,90:1,98:1,107:1},SE);function UE(a,b,c){cD();VE.call(this,a,b,c,Rk)}\nfunction VE(a,b,c,d){cD();aD.call(this,a);this.k=b;this.a=c;this.c=d;this.b=0}w(535,482,Pl,UE,VE);_.gf=function(){var a,b;a=1001==this.k?"ACTION_PERFORMED":Fk;b=m;0<(this.b&1)&&(b+="Shift");0<(this.b&2)&&(b+=0==b.length?"Ctrl":"+Ctrl");0<(this.b&4)&&(b+=0==b.length?"Meta":"+Meta");0<(this.b&8)&&(b+=0==b.length?"Alt":"+Alt");return a+",cmd="+this.a+",when="+qx(this.c)+tb+b};_.a=null;_.b=0;_.c=Rk;function xC(a,b){cD();aD.call(this,a);this.k=b}w(536,482,Pl,xC);\n_.gf=function(){var a,b;a=this.n;switch(this.k){case 100:b="COMPONENT_MOVED";break;case 101:b="COMPONENT_RESIZED";break;case 102:return"COMPONENT_SHOWN";case 103:return"COMPONENT_HIDDEN";default:return Fk}return b+" ("+a.$e()+nb+a._e()+ha+a.Ze()+Mk+a.Ve()+jb};w(539,536,Pl);_.j=0;\nfunction WE(a){var b;switch(a.k){case 503:b="MOUSE_MOVED";break;case 500:b="MOUSE_CLICKED";break;case 501:b="MOUSE_PRESSED";break;case 502:b="MOUSE_RELEASED";break;case 506:b="MOUSE_DRAGGED";break;case 504:b="MOUSE_ENTERED";break;case 505:b="MOUSE_EXITED";break;case 507:b="MOUSE_WHEEL";break;default:b=Fk}b=b+",("+a.f+nb+a.i+"),button="+a.d;if(0<(a.j&16320)){var c=tb,d;d=a.j;var e;e=new vx;0!=(d&4)&&Kp(Kp(e,(zC(),null)),mb);0!=(d&1)&&Kp(Kp(e,(zC(),null)),mb);0!=(d&2)&&Kp(Kp(e,(zC(),null)),mb);0!=(d&\n8)&&(0!=(d&2048)?0!=(d&512)&&Kp(Kp(e,(zC(),null)),mb):Kp(Kp(e,(zC(),null)),mb));0!=(d&32)&&Kp(Kp(e,(zC(),null)),mb);0!=(d&16)&&Kp(Kp(e,(zC(),null)),mb);0!=(d&8)&&Kp(Kp(e,(zC(),null)),mb);0!=(d&4)&&Kp(Kp(e,(zC(),null)),mb);d=0==e.a.a.length?e.a.a:XE(e.a.a,0,e.a.a.length-1);c=c+d+",extModifiers=";d=a.j;var f;e=(f=m,0!=(d&256)&&(f+=(zC(),null)),0!=(d&128)&&(f+=(0=this.k?0!=(this.j&16)?(this.d=1,501==this.k&&(this.j|=1024)):0!=(this.j&8)?(this.d=2,501==this.k&&(this.j|=2048)):0!=(this.j&4)&&(this.d=3,501==this.k&&(this.j|=4096)):(0!=(this.j&16)&&(this.j|=1024),0!=(this.j&8)&&(this.j|=\n2048),0!=(this.j&4)&&(this.j|=4096));else if(0!=(this.j&16320))if(this.j&=-64,0!=(this.j&64)&&(this.j|=1),0!=(this.j&128)&&(this.j|=2),0!=(this.j&256)&&(this.j|=4),0!=(this.j&512)&&(this.j|=8),0!=(this.j&8192)&&(this.j|=32),500<=this.k&&502>=this.k)switch(this.d){case 1:this.j|=16;break;case 2:this.j|=8;break;case 3:this.j|=4}else 0!=(this.j&1024)&&(this.j|=16),0!=(this.j&2048)&&(this.j|=8),0!=(this.j&4096)&&(this.j|=4);this.b=0;this.a=1;this.c=d}w(542,541,Pl,pv);\n_.gf=function(){var a,b;a=WE(this);switch(this.b){case 0:b="WHEEL_UNIT_SCROLL";break;case 1:b="WHEEL_BLOCK_SCROLL";break;default:b=Fk}return a+=",scrollType="+b+",scrollAmount="+this.a+",wheelRotation="+this.c};_.a=0;_.b=0;_.c=0;w(551,1,{});function RE(a){if(null==a)throw new YE;}w(552,551,{},RE);\nfunction ZE(){ZE=x;$E={};$E["java.vendor"]=Rh;$E["package.restrict.access.sun"]=Dk;$E["sun.java.launcher"]=wf;$E["sun.management.compiler"]=Rh;$E["os.name"]=wf;$E[" sun.boot.class.path"]=wf;$E["path.separator.applet"]=wf;$E["java.vm.specification.vendor"]=Rh;$E["java.runtime.version"]=wf;$E["http.proxyPort"]=wf;$E["user.name"]=wf;$E["user.language"]=wf;$E["os.name.applet"]=wf;$E["browser.version"]=wf;$E["java.version"]=wf;$E["user.timezone"]=wf;$E["java.endorsed.dirs"]=wf;$E["java.specification.name"]=\n"GWT";$E["java.specification.version"]="2.5.0";$E[ki]=cf;!sv&&(sv=new Av);sv.a?$E[ii]="yes":$E[ii]=null}var $E;w(556,139,yl);function aF(){}function bF(a){this.f=a}w(555,556,{84:1,90:1,98:1,107:1},aF,bF);function cF(){cF=x;dF=new eF}function fF(a){var b;if(a.k){var c;b=new vx;Kp(b,a.f);b.a.a+=gd;c=a.a;null!=c&&0=b||65<=b&&90>=b;for(c=1;b&&c=b||65<=b&&90>=b||48<=b&&57>=b||43==b||45==b||46==b;if(b){c=this.f;hF();var f,g,h;h=c.length;b=new iF;for(g=0;g=f?jF(b,f+32&65535):Lp(b.a,String.fromCharCode(f));\nthis.f=b.a.a}else this.f=null,d=-1}if(null==this.f)throw new bF($e+a);if(!this.k&&(this.k=mw(dF,this.f),this.k||(this.k=(zC(),new kF))&&E(dF,this.f,this.k),!this.k))throw new bF($e+a);try{c=a;var j=++d,l=a.length,n,o,r,t,y,v,s,A,F,M,N,$,S,V,ea,na,ta,Yb,K,ra,yc;if(ll){if(-2147483647>=l&&(j>=c.length||0>j)||!(0>j||j>=c.length)&&c.indexOf(sc,j)==j&&-1==lF(c,Ry(47),j+2))throw new mF(l);}else{N=c.substr(j,l-j);l-=j;v=0;s=this.c;$=this.e;Yb=this.j;t=this.d;ea=this.i;n=this.a;yc=this.n;K=lF(N,Ry(35),\n0);if(0==N.indexOf(sc)&&0!=N.indexOf("////")){F=2;$=-1;v=lF(N,Ry(47),2);ta=lF(N,Ry(63),2);-1!=ta&&(-1==v||v>ta)&&(v=ta);-1==v&&(v=l,t=m);A=v;-1!=K&&Kr+1?(o=N.charCodeAt(r+1),58==o?S=r+1:S=-1):S=-1}catch(wb){if(wb=Hq(wb),!G(wb,98))throw wb;}-1==S||S>v?s=N.substr(F,A-F):(s=N.substr(F,S-F),V=N.substr(S+1,A-(S+1)),0==V.length?$=-1:$=nF(V,\n10))}-1v&&(null==t?t=m:H(t,m)?t=nc:t.indexOf(nc),M=jC(t,Ry(47))+1,0==M?t=N.substr(v,y-v):t=t.substr(0,M-0)+N.substr(v,y-v)));null==t&&(t=m);null==s&&(s=m);d=s;var Ha;Ha=t;null!=ea&&!H(ea,m)&&(null!=t?Ha=t+Gd+ea:Ha=Gd+ea);null==this.f&&(this.f=\nthis.f);this.c=d;this.b=Ha;this.e=$;this.j=Yb;var xb;null!=this.c&&0this.e)throw new bF("incorrect port: "+\nthis.e);}w(557,1,Pl,gF);_.tS=function(){return fF(this)};_.a=null;_.b=null;_.c=null;_.d=null;_.e=-1;_.f=null;_.i=null;_.j=null;_.k=null;_.n=null;var dF;w(558,1,{});function oF(a,b,c){var d,e;for(d=a.Sf().Ce();d.be();)if(a=d.ce(),e=a.Bh(),null==b?null==e:Up(b,e))return c&&(a=new pF(a.Bh(),a.Ch()),d.de()),a;return null}w(562,1,Ll);_.Rf=function(a){return!!oF(this,a,!1)};\n_.eQ=function(a){var b,c;if(a===this)return!0;if(!G(a,110)||this.Xf()!=a.Xf())return!1;for(a=a.Sf().Ce();a.be();)if(b=a.ce(),c=b.Bh(),b=b.Ch(),!this.Rf(c)||!qF(b,this.Tf(c)))return!1;return!0};_.Tf=function(a){a=oF(this,a,!1);return!a?null:a.Ch()};_.hC=function(){var a,b,c;c=0;for(b=this.Sf().Ce();b.be();)a=b.ce(),c+=a.hC(),c=~~c;return c};_.Uf=rF;_.Vf=function(){throw new sF("Put not supported on this map");};_.Wf=function(a){a=oF(this,a,!0);return!a?null:a.Ch()};_.Xf=function(){return this.Sf().Xf()};\n_.tS=function(){var a,b,c,d;d=Ok;a=!1;for(c=this.Sf().Ce();c.be();)b=c.ce(),a?d+=qb:a=!0,d+=m+b.Bh(),d+=Ed,d+=m+b.Ch();return d+"}"};function JB(a){a.a=[];a.e={};a.c=!1;a.b=null;a.d=0}function zy(a,b){var c;if(null==b)c=a.c;else if(G(b,1))c=gd+b in a.e;else a:{c=a.$f(b);if(c=a.a[c])for(var d=0,e=c.length;d=a.i)break;c=BF(a,c);++b}return b}\nfunction CF(a,b){var c;for(c=0;c=a.i)throw new yF;b=a.a;a.a=BF(a,a.a);return XE(a.n,b,a.a)}\nfunction BF(a,b){var c,d;for(d=b;da.f||!CF(a,c))break;d+=65536<=c?2:1}else{c=a.n.charCodeAt(d);if(c>a.f||0>Qy(a.c,Ry(c)))break;++d}return d}function FF(a){GF.call(this,a,ia,!1)}function HF(a){GF.call(this,a,nb,!1)}\nfunction GF(a,b,c){this.a=0;this.j=-1;this.d=!1;this.n=a;this.i=a.length;this.c=b;this.k=c;var d;if(null==this.c)this.f=0;else{for(c=b=d=0;c=a&&(a=EF(this.c,c,this.c.length),this.e=!0),d=a;++a)0=a;++a)b=Df,33=j||b>a.Sb||c>a.Sb))){l=D(bH,Zl,-1,99,1);h=o=n=0;for(g=b;g<=c;++g)f=cH(a.zb[g]),n+=f.c,o+=f.d,f.d>h&&(h=f.d),l[g]=f.c,2==d&&(l[g]=f.d);a.J&&(n+=25*(j+1),o+=25*(j+1),h+=25);j=g=1;a.J?r=dH(a):r=eH(a);f=Gw(r.b);r=Gw(r.a);1==d||3==d?f=~~((f-48)/2):2==d&&(r=~~(r/2));n>=f&&(g=f/n);h>=r&&(j=r/h);h=0;a.J&&(a.xb=gd)switch(qH(b,(oD(),vD)),f){case 101:qH(b,zD);uH(b,j+3,g+3,a.mb-6,a.mb-6);qH(b,vD);e=g+3;h=a.mb-6;c=\na.mb-6;d=b.a;f=P(J(Q((j+3)*R)));e=P(J(Q(e*R)));h=P(J(Q(h*R)));c=P(J(Q(c*R)));d.n&&(vH(d,!1),wH(d,xH(d,f,e,h,c)));yH(b,j+6,g+6,a.mb-12,a.mb-12);zH(b.a,P(J(Q((j+9)*(AH(),R)))),P(J(Q((g+9)*R))),P(J(Q(2*R))),P(J(Q(4*R))));rH(b,j+a.mb-10,g+9,2,4);0.04>Math.random()&&(qH(b,xD),zH(b.a,P(J(Q((j+10)*R))),P(J(Q((g+18)*R))),P(J(Q(4*R))),P(J(Q(4*R)))));0.96=e;++e)if(bn&&(qH(g,(pG(),xG)[n]),uH(g,f.b[A].q-12,f.b[A].r-\n12,24,24));for(A=1;A<=f.q;++A)l=f.c[A].i,o=f.c[A].j,0!=f.b[l].c&&f.b[l].c==f.b[o].c&&(qH(g,(pG(),xG)[f.b[l].c]),v=f.b[o].q-f.b[l].q,h=f.b[o].r-f.b[l].r,y=Math.sqrt(v*v+h*h),1>y&&(y=1),h/=y,y=v/y,v=9*h,t=9*y,n=TH(4),r=TH(4),n[0]=f.b[l].q+v,r[0]=f.b[l].r-t,n[1]=f.b[o].q+v,r[1]=f.b[o].r-t,n[2]=f.b[o].q-v,r[2]=f.b[o].r+t,n[3]=f.b[l].q-v,r[3]=f.b[l].r+t,FH(g,n,r,4))}for(A=1;A<=f.q;++A){qH(g,(oD(),uD));t=f.c[A];l=t.i;o=t.j;1==f.i&&0!=f.b[l].c&&f.b[l].c==f.b[o].c&&qH(g,(pG(),xG)[f.b[l].c]);if(3==t.f||4==\nt.f)n=l,l=o,o=n;n=f.b[l].q;r=f.b[l].r;N=f.b[o].q;M=f.b[o].r;if(1!=t.c||0!=t.f)v=N-n,h=M-r,y=Math.sqrt(v*v+h*h),1>y&&(y=1),h/=y,y=v/y;switch(t.c){case 2:10<=t.f&&qH(g,AD);v=2*h;t=2*y;CH(g.a,P(J(Q((n+v)*(AH(),R)))),P(J(Q((r-t)*R))),P(J(Q((N+v)*R))),P(J(Q((M-t)*R))));CH(g.a,P(J(Q((n-v)*R))),P(J(Q((r+t)*R))),P(J(Q((N-v)*R))),P(J(Q((M+t)*R))));qH(g,vD);break;case 3:CH(g.a,P(J(Q(n*(AH(),R)))),P(J(Q(r*R))),P(J(Q(N*R))),P(J(Q(M*R))));l=3*h;o=3*y;CH(g.a,P(J(Q((n+l)*R))),P(J(Q((r-o)*R))),P(J(Q((N+l)*R))),P(J(Q((M-\no)*R))));CH(g.a,P(J(Q((n-l)*R))),P(J(Q((r+o)*R))),P(J(Q((N-l)*R))),P(J(Q((M+o)*R))));break;case 9:case 0:for(o=0;10>o;++o)l=n-(n-N)/10*o,s=r-(r-M)/10*o,CH(g.a,P(J(Q(l*(AH(),R)))),P(J(Q(s*R))),P(J(Q(l*R))),P(J(Q(s*R))));UH(g,f.k.v);o=VH(f.k.w);t=t.d;l=Gd;null!=t&&(l=t);t=vE(f.k.w,l);t=(n+N)/2-t/2;M=(r+M)/2+~~(o/2)-1;qH(g,AD);WH(g.a,l,P(J(Q(t*(AH(),R)))),P(J(Q(M*R))));qH(g,vD);break;default:if(1==t.f||3==t.f)v=3*h,t=3*y,s=TH(3),j=TH(3),s[0]=N+v,j[0]=M-t,s[1]=n,j[1]=r,s[2]=N-v,j[2]=M+t,FH(g,s,j,3);else if(2==\nt.f||4==t.f){v=3*h;t=3*y;for(o=0;10>o;++o)l=n-(n-N)/10*o,s=r-(r-M)/10*o,j=o/10,CH(g.a,P(J(Q((l+v*j)*(AH(),R)))),P(J(Q((s-t*j)*R))),P(J(Q((l-v*j)*R))),P(J(Q((s+t*j)*R))))}else CH(g.a,P(J(Q(n*(AH(),R)))),P(J(Q(r*R))),P(J(Q(N*R))),P(J(Q(M*R))))}}y=TH(f.p+1);h=TH(f.p+1);for(A=1;A<=f.q;++A)l=f.c[A].i,o=f.c[A].j,n=f.b[l].q,r=f.b[o].q,++h[l],++h[o],y[l]=y[l]/h[l]+r/h[l],y[o]=y[o]/h[o]+n/h[o];UH(g,f.k.v);o=VH(f.k.w);N=TH(f.p+1);r=TH(f.p+1);n=D(XH,q,122,f.p+1,0);for(A=1;A<=f.p;++A)l=YH(f,A),(null==l||1>l.length)&&\n(l=lb),j=f.b[A],3==f.b[A].a&&0$H(y[A]-f.b[A].q)&&(v=!1),2$H(y[A]-f.b[A].q)&&(M=!0),t=l,s=m,f.k.oc&&(F=f.b[A].i,0y&&(y=1),h/=y,y=v/y,v=4*h,t=4*y,s=TH(5),j=TH(5),s[0]=f.b[l].q+v,s[1]=f.b[o].q+v,j[0]=f.b[l].r-t,j[1]=f.b[o].r-t,s[3]=f.b[l].q-v,s[2]=f.b[o].q-v,j[3]=f.b[l].r+t,j[2]=f.b[o].r+t,s[4]=s[0],j[4]=j[0],106!=f.k.k&&cI(g,s,j,5),106==f.k.k&&dI(f,f.c[f.w].i,f.c[f.w].j))){h=0;for(A=1;A<=f.p;++A)0~~(f.p/2))for(A=1;A<=f.p;++A)0e;++e)if(d=a.zb[e])0b&&(b=c);return b}\nfunction nI(a,b,c,d){var e=yG?350:170,f,g,h,j;oI(d);b=pI(a,b);c=pI(a,c);h=e;for(g=1;g<=a.Sb;++g){j=new qI(e);f=a.zb[g];for(var l=b,n=c,o=j,r=void 0,t=void 0,y=void 0,v=void 0,s=r=r=r=v=r=void 0,A=void 0,F=void 0,M=t=y=r=r=void 0,N=void 0,$=void 0,s=0,F=o.a,A=1;A<=f.q;++A)r=rI(l,n,f.c[A].a,f.c[A].b),ry+F||(r=N*r+$*v,0>r||(y=Math.sqrt(y),t=Math.sqrt(t),r/=y*t,1<=r||(r=1.5707963267948966-Math.acos(r),r=t*Math.cos(r),r*=r,r=a.yb||0>=a.ub)&&(!a.M&&(a.M=YC(a)),sI(a,a.M));b=new tI;b.b=a.yb;b.a=a.ub;return b}function eH(a){var b;b=dH(a);b.b/=a.xb;b.a/=a.xb;return b}\nfunction PH(a,b){var c=a.b.a;wH(c,"=e;++e)b=SI(h,d);e=yI(nF(Sy(b.substr(0,3)),10)).a;g=yI(nF(Sy(b.substr(3,3)),10)).a;SI(h,d);for(b=1;b<=e+g;++b){for(f=m;!(j=SI(h,d),null==j||H(j,"$MOL"));)f+=j+d;a.zb[++a.Sb]=new TI(a,f)}a.xb=1;aH(a,1,e,1,!1);aH(a,e+1,e+g,3,!1);d="readRXNFile"}else{(a.J||a.Vb)&&(a.dc=!1);a.ob=new TI(a,b);if(!a.ob||0==a.ob.p)return!a.ob&&(Pu(a,"ERROR - problems in reading/processing MOL input"),\na.ff(a.Ec.d)),!!a.ob;d=(a.dc||a.Fb)&&a.p||a.Mb;null!=a.t&&a.ob&&UI(a.ob,a.t,!0);null!=a.u&&a.ob&&UI(a.ob,a.u,!1);d||(a.Sb=0,a.xb=1);h=VI(a.ob);if(1>=h||a.J)a.zb[++a.Sb]=a.ob;else{a.Fb=!0;for(b=1;b<=h;++b)a.zb[++a.Sb]=new WI(a,a.ob,b)}d?a.o=a.Sb:a.o=1;a.ob=a.zb[a.o];a.J?aH(a,1,1,0,!0):aH(a,1,h,0,!d);d=Aj}XI(a);null!=d&&(ZF(a.r,Od),a.r&&kH(gq(a.r,d),0,0,0),a.hc=!0);a.Ib=!0;c&&a.ff(a.Ec.d);return!0}function Pu(a,b){null==b&&(b=m);a.Gb=!0;a.X=b;a.mg("info: "+b)}\nfunction SH(a,b){var c;c=Math.round(b);100>c&&(!zG[c]&&(zG[c]=new ZD(Xe,0,c)),!BG[c]&&xq(BG,c,lC(zG[c])),a.v=zG[c],a.w=BG[c])}function vI(a){var b;if(!a)return!1;b=a.xf();a=0!=(a.e&2);return b||a}function eI(a,b){return(a.mb+(a.Lb?1:0))*b}function JH(a,b){var c,d;d=-1;for(c=0;c=b)switch(a.Kb=!0,a.Hb=!0,Pu(a,m),b){case 102:iH(a,!0);BI(a,102);AI(a,102);d=!0;break;case 110:a.Ib=!0;a.k=c;a.pb.a!=a.pb.b&&a.pb.a.b!=a.pb.b?a.q&&(++a.Sb,a.o=a.Sb,a.q=!1):Pu(a,"No more undo");if(!(a.pb.a!=a.pb.b&&a.pb.a.b!=a.pb.b))break;YI(a,ZI(a.pb));a.r&&kH(gq(a.r,Ek),0,0,0);a.hc=!0;a.hc=!1;a.Ib=!0;break;case 111:a.k=c;if(a.pb.a.c)a.q&&(++a.Sb,a.o=a.Sb,a.q=!1);else{Pu(a,"No more redo");break}if(!a.pb.a.c)break;e=a.pb;\nif(!e.a.c)throw new bz("Cannot redo. Index is out of range.");if(!e.a.c)throw new bz(af);e.a=e.a.c;YI(a,e.a.a);a.r&&kH(gq(a.r,Cj),0,0,0);a.hc=!0;a.hc=!1;a.Ib=!0;break;case 214:uI(a,null,a.R.a,a.R.b);a.k=c;break;case 151:case 152:case 154:case 153:e=null;a.k=c;switch(b){case 152:e=$I(a.jc);break;case 151:e=aJ(a.jc);break;case 154:e=a.jc;e.a=e.c;e=$I(e);break;case 153:e=a.jc,e.a=-1,e=aJ(e)}null==e?Pu(a,"No more molecules in SDF buffer"):(lH(a),a.Vb=!0,bJ(a,e,!1),a.Vb=!1,H(a.X,m)&&(Pu(a,"MOL n. "+(a.jc.a+\n1)+" of "+a.jc.c),d=!0,a.r&&kH(gq(a.r,"SDFstack"),0,0,0),a.hc=!0,a.hc=!1));break;case 101:Bq(4,new cJ(a));a.k=c;break;case 107:Bq(2,new dJ(a));break;case 114:Bq(3,new eJ(a));a.k=c;break;case 103:a.Mb=!0;a.k=c;break;case 105:a.A&&a.Bb&&(a.Bb=!1,fJ(a.ob),a.Ib=!0,a.r&&kH(gq(a.r,Ag),0,0,0),d=a.hc=!0,a.k=c);a.I=1;break;case 109:a.k=c;e=gJ(a.ob);if(2==e){Pu(a,"Copying the agent not possible !");break}d=cH(a.ob);a.Ib=!0;a.ob=new GG(a.ob);d=Gw((a.M.b-a.mb)/2-d.a);for(e=1;e<=a.ob.p;++e)gH(a.ob.b[e],2*d/a.xb,\n0/a.xb);a.zb[++a.Sb]=a.ob;a.o=a.Sb;a.r&&kH(gq(a.r,"reactionCopy"),0,0,0);d=a.hc=!0;BI(a,109);AI(a,109);break;case 104:d=HG(a);break;case 213:a.k=c;if(!a.S){var f,g,h,j,l;l=new lE;for(f=a.U,g=0,h=f.length;g=b&&(a.n=33+(b-1301)),0=a.k)a.cb=2,lJ(a.ob),d=!0,WG(a,mg,a.o,0,a.ob.w);else if(202==a.k||203==a.k||204==a.k)if(0=g;++g){f=0;for(c=1;c<=a.Sb;++c)gJ(a.zb[c])==g&&(h[g][++f]=c);h[g][0]=f}e+=Ra;e+=oJ(h[1][0],3)+oJ(h[3][0],3)+fa;for(c=1;c<=h[1][0];++c)e+=Na+pJ(a.zb[h[1][c]],d,b);for(c=1;c<=h[3][0];++c)e+=Na+pJ(a.zb[h[3][c]],d,b)}else{1f&&(f=e.b[b].r),e.b[b].qb;++b)xq(g.b,g.c++,null),xq(f.b,f.c++,null);for(b=1;b<=e.p;++b)j=e.b[b].b,null==j||0==j.length||(H(j,hg)?Rm(c,new eD(b)):0==j.indexOf("mix")?(j=nF(Ty(j,3),10),l=null,f.c>j&&(l=(PD(j,f.c),f.b[j])),null==l?h=new Om:h=l,Rm(h,new eD(b)),VD(f,j,h)):0==j.indexOf(jj)&&(j=nF(Ty(j,2),10),l=null,g.c>j&&(l=\n(PD(j,g.c),g.b[j])),null==l?h=new Om:h=l,Rm(h,new eD(b)),VD(g,j,h)));d+=uJ(qf,c);if(0a.M.a-P(J(Q(a.mb*a.nb))))return!1;var b=a.Cc,f=a.Dc,g,h,j,l;l=0;if(0>b||0>f||f>a.ub||b>a.yb)b=0;else if(1==a.Sb)b=a.o;else{b=pI(a,b);f=pI(a,f);j=1.7976931348623157E308;for(h=1;h<=a.Sb;++h){g=a.zb[h];for(var n=void 0,o=void 0,r=void 0,o=1.7976931348623157E308,n=1;n<=g.p;++n)r=rI(b,f,g.b[n].q,g.b[n].r),r=a.k)a.cb=2,lJ(a.ob),JG(a,lg,a.ob.v);else if(230==a.k)a.cb=3,JG(a,ng,a.ob.v);\nelse if(233<=a.k&&262>a.k)yJ(a.ob,!1),JG(a,kg,a.ob.v),a.cb=3;else if(107==a.k){if(a.bc.b)return!0;kJ(a.ob,a.ob.v,hr(a.bc.e.Tc.a.pb,Gk));a.ob.j=!0;JG(a,"addAtomQuery",a.ob.v)}else if(105==a.k)(c=zJ(a.ob))?JG(a,"markAtom",a.ob.v):JG(a,"unMarkAtom",a.ob.v);else if(113!=a.k)if(300c.length&&(c=Wf),kJ(a.ob,a.ob.v,c)),JG(a,Uj+a.n,a.ob.v)}else e=!1}else if(0<\na.ob.w)if(a.eb.c=a.o,104==a.k)HG(a);else if(106==a.k){c=a.ob;d=a.ob.w;if(0d&&(d=b);if(0==d)break;IG(c,d);c.a[d]=0}LG(a.ob);WG(a,"delBondGroup",a.o,0,a.ob.w);a.ob.w=0}else if(201==a.k)AJ(a.ob,a.ob.w),WG(a,"setBondStereo",a.o,0,a.ob.w);else if(202==a.k||205==a.k)1==a.ob.c[a.ob.w].c&&0==a.ob.c[a.ob.w].f?(a.ob.c[a.ob.w].c=2,WG(a,Vj,a.o,0,a.ob.w)):(a.ob.c[a.ob.w].c=1,a.ob.c[a.ob.w].f=\n0,WG(a,Wj,a.o,0,a.ob.w)),a.ob.c[a.ob.w].f=0;else if(203==a.k)a.ob.c[a.ob.w].c=2,a.ob.c[a.ob.w].f=0,LG(a.ob),WG(a,Vj,a.o,0,a.ob.w);else if(204==a.k)a.ob.c[a.ob.w].c=3,a.ob.c[a.ob.w].f=0,LG(a.ob),WG(a,Xj,a.o,0,a.ob.w);else if(206<=a.k&&229>=a.k)a.cb=2,lJ(a.ob),WG(a,mg,a.o,0,a.ob.w),LG(a.ob);else if(107==a.k){if(!a.bc.b)return!0;c=hr(a.bc.e.Tc.a.pb,Gk);a.ob.c[a.ob.w].c=9;a.ob.c[a.ob.w].d=c;WG(a,"setQueryBond",a.o,0,a.ob.w)}else 105==a.k?(c=a.ob,b=a.ob.w,c.k.gb=!0,c.k.sc?(c.i=-1,d=c.c[b].i,b=c.c[b].j,\nf=c.b[d].c,h=c.b[b].c,j=4,f==h&&0=a.k)return!1;++a.Sb;a.o=a.Sb;a.zb[a.Sb]=new jH(a);a.ob=a.zb[a.Sb];a.eb.c=a.o;202<=a.k&&204>=a.k||205==a.k?(BJ(a.ob,null),a.ob.q=0,CJ(a.ob,1,c/a.xb,d/a.xb),a.ob.v=1,a.ob.x=1,a.cb=1,b=a.ob,mJ(b,b.v,0),205==a.k?(CJ(a.ob,2,(c+21.65)/a.xb,(d-12.5)/a.xb),a.ob.e[0]=1,a.ob.e[1]=2,a.ob.r=1,WG(a,"addChain",a.o,0,a.ob.w)):WG(a,\njg,a.o,0,a.ob.w)):206<=a.k&&229>=a.k?(a.ob.z=pI(a,c),a.ob.A=pI(a,d),a.cb=2,lJ(a.ob),a.r&&kH(gq(a.r,lg),0,0,0),a.hc=!0):300c.length&&(c=Wf),kJ(a.ob,1,c)),JG(a,"addAtom",a.ob.v)):230==a.k?(MI(a,null,!0),a.r&&kH(gq(a.r,ng),0,0,0),a.hc=!0):233<=a.k&&262>a.k?(BJ(a.ob,null),a.ob.q=0,CJ(a.ob,1,c/a.xb,d/a.xb),a.ob.v=1,yJ(a.ob,!0),a.r&&kH(gq(a.r,kg),0,0,0),a.hc=!0):ZE()}else e=!1;e&&DJ(a)}return a.Ab=\ne}\nfunction EJ(a,b,c,d){var e,f,g,h;ZE();if(!a.Db||FJ(b))return!0;a.Gb=!1;c-=P(J(Q(eI(a,a.nb))));d-=P(J(Q(fI(a,a.nb))));f=pI(a,c-a.Cc);g=pI(a,d-a.Dc);e=pI(a,c);h=pI(a,d);if(2==a.cb||3==a.cb||9==a.cb)return!0;if(1==a.cb){f=!1;a.zb[a.eb.c].v=0;--a.ob.p;g=c;var b=d,j=a.Nb;0>g||0>b||b>a.ub||g>a.yb?oI(j):nI(a,g,b,j);++a.ob.p;if(0g&&(g=1);b/=g;j/=g;n=g/2/Math.tan(0.5235987755982988);o=e-f.b[l].q;r=h-f.b[l].r;l=-g/2+o*j+r*b;b=r*j-o*b;if(0>l)if(1f.b[2].r-f.b[1].r&&0h-f.b[1].r&&(f.b[2].r=f.b[1].r-g/2),0>f.b[2].q-f.b[1].q&&0e-f.b[1].q&&(f.b[2].q=f.b[1].q-0.866*g);else{if(2==f.b[f.e[0]].j&&(n=f.b[f.e[0]].p[1],n==f.e[1]&&(n=f.b[f.e[0]].p[2]),j=f.b[f.e[0]].q-f.b[n].q,b=f.b[f.e[0]].r-f.b[n].r,g=Math.sqrt(j*j+b*b),1>g&&(g=1),b/=g,j/=g,o=e-f.b[n].q,r=h-f.b[n].r,e=r*j-o*b,o=f.b[f.e[1]].q-f.b[n].q,r=f.b[f.e[1]].r-f.b[n].r,h=r*j-o*b,0h||0>e&&0=b?0-b:b)>e){++f.r;if(100g&&(g=1),CJ(f,f.p,f.b[f.x].q+25*(j/g),f.b[f.x].r+25*(b/g))}a.B=!0}else if(113==a.k&&0c||0>d||d>a.ub||c>a.yb)&&5!=a.cb))e=eH(a),h=a.ob,j=cH(h),b=j.a,j=j.b,0>f&&be.b||0>g&&je.a||JJ(h,f,g),a.cb=5;OG(a,!1);a.Ib=!0;aG(a);a.Cc=c;a.Dc=d;return!0}\nfunction zI(a,b,c,d){var e,f;if(!a.J||a.dg().a||a.eg().a||a.K)if(f=!1,e=KH(a,c,d),e!=a.Cb&&(f|=BI(a,a.Cb),f|=AI(a,e),a.Cb=e),!vI(b)){c-=P(J(Q(eI(a,a.nb))));d-=P(J(Q(fI(a,a.nb))));b=c;c=a.Nb;0>b||0>d||d>a.ub||b>a.yb?oI(c):nI(a,b,d,c);113==e&&0d.b[e].j&&(PJ(d,null),b=d.e[d.r-1],d.c[d.q].i=e,d.c[d.q].j=b,QJ(d.b[e],b),QJ(d.b[e],b)),IG(d,d.p)),d.u=!1,a.hc=!0;else if(0!=a.eb.c&&a.o!=a.eb.c){IG(a.ob,a.ob.p);b=a.ob.x;c=a.eb.a+a.ob.p;e=a.zb[a.eb.c];d=new qJ(a,z(RJ,q,121,[null,a.ob,e]),2);d.b[0]=new SJ;TJ(d,b,c,1);b=D(RJ,\nq,121,a.zb.length,0);for(f=0,c=0;fd.c[b].c?(++d.c[b].c,d.c[b].f=0):Pu(d.k,"Maximum allowed bond order is 3 !")):6==d.b[e].j?(--d.q,VJ(d,d.x),Pu(d.k,"Not possible connection !")):(d.c[d.q].j=e,VJ(d,d.x),b=d.x,QJ(d.b[e],b),QJ(d.b[b],e),WJ(d.c[d.q],d.b)));hH(a.ob);a.B&&(d=a.pb,d.a!=d.b&&d.a.b!=d.b&&(e=d.a.c,ZI(d),d.a.c=e),\nWG(a,jg,a.o,0,a.ob.w),a.B=!1);d=!0}else 5==a.cb&&(hH(a.ob),d=a.hc=!0);0=b&&0==c||b==c&&a.o==a.Zb)return-1;0>=b&&0ob))for(;zc=ac[uc]*ac[uc];)0==zc%ac[uc]?dc=!1:++uc;if(dc){oc[++$b]=lx(zc);if($b>=ob)break;Isd&&(sd=0),0>W&&(W=0),de=28*sd+W));eb=0;0!=aa.b[U].n&&(-2>aa.b[U].n?eb=1:-2==aa.b[U].n?eb=2:-1==aa.b[U].n?eb=3:1==aa.b[U].n?eb=4:2==aa.b[U].n?eb=5:2Ia&&(Ia=10-Ia));Wc=126;kb=wd;kb+=126*aa.b[U].i;Wc*=7;kb+=eb*Wc;Wc*=7;0!=Ia&&(kb+=Ia*Wc);Wc*=7;kb+=de*Wc;Wc*=783;kb+=aa.b[U].j*Wc;O[U]=lx(kb)}for(da=0;!eK(aa,Ya,O);){Oa=!1;for(U=1;U<=aa.p;++U)Ya[U]!=Ab[U]&&(Ab[U]=Ya[U],Oa=!0);if(Oa){for(U=1;U<=aa.p;++U){O[U]=Sk;for(ga=1;ga<=aa.b[U].j;++ga)O[U]=\npx(O[U],oc[Ya[aa.b[U].p[ga]]])}da=0}else if(0aa.c[U].j&&(ce=aa.c[U].i,aa.c[U].i=aa.c[U].j,aa.c[U].j=ce,1==aa.c[U].f?aa.c[U].f=3:2==aa.c[U].f?aa.c[U].f=4:3==aa.c[U].f?aa.c[U].f=1:4==aa.c[U].f&&(aa.c[U].f=2));for(U=1;Uo.a[v])&&M!=Ba[v]){Hc=!0;for(yc=1;yc<=xb;++yc)if(ea[yc]==v&&na[yc]==M||ea[yc]==M&&na[yc]==v){Hc=!1;break}Hc&&(++xb,ea[xb]=v,na[xb]=M)}}else V[++Ha]=M;if(0==Ha){if(ba==o.p)break;v=S[L--]}else if(1==Ha)Ba[V[1]]=v,v=V[1],o.a[v]=++ba;else{S[++L]=v;A=0;for(ta=1;ta<=Ha;++ta)if($=UJ(o,V[ta],\nv),!K[$]){A=V[ta];break}if(0==A)for(ta=1;ta<=Ha;++ta)if($=UJ(o,V[ta],v),2==o.d[$]||3==o.d[$]){A=V[ta];break}0==A&&(A=V[1]);Ba[A]=v;v=A;o.a[A]=++ba}}Ba=TH(o.p+1);y=TH(o.p+1);jd=[];kd=[];F=ba=L=0;for(ta=1;ta<=o.p;++ta)if(1==o.a[ta]){v=ta;break}b:for(;;){0ca.b[Hb].j||4Ua.b[Wa].j||3Mc[ab]&&(ue=Jd,Jd=ab,ab=ue);Ja=Jd;0==Jd&&(Ja=ab,ve=!0);for(hc=1;hc<=Ua.b[Wa].j;++hc)fe=Ua.b[Wa].p[hc],fe!=pc[ic-1]&&(0==jc?jc=fe:td=fe);0Mc[td]&&(ue=jc,jc=td,td=ue);Kd=jc;0==jc&&(Kd=td,zd=!0);lf=0lf+ne?-(lf+ne):lf+ne)||0!=we||0!=Ud?Pu(Ua.k,"Bad stereoinfo on allene !"):(T=Ua.b[pc[ic-1]].q-Ua.b[Wa].q,ge=Ua.b[pc[ic-1]].r-Ua.b[Wa].r,Fb=Math.sqrt(T*T+ge*ge),0.001>Fb&&(Fb=0.001),0<(Ua.b[Kd].r-Ua.b[pc[ic-1]].r)*(T/Fb)-(Ua.b[Kd].q-Ua.b[pc[ic-1]].q)*(ge/Fb)?dd[pb]=1:dd[pb]=-1,ve&&(dd[pb]*=-1),zd&&(dd[pb]*=-1),Ja==Jd&&0>lf&&(dd[pb]*=-1),Ja==ab&&0>ne&&(dd[pb]*=-1),Mc[Ja]>Mc[Kd]&&(dd[pb]*=-1))}}else c:{var sb=ca,ed=Hb,xe=Gb,Vd=void 0,Ac=void 0,Nc=void 0,rc=void 0,hb=void 0,kc=void 0,Ad=void 0,ye=\nvoid 0,Bd=void 0,Bc=void 0,Pa=void 0,Za=void 0,Cd=void 0,Wd=void 0,Cc=void 0,Va=void 0,Ve=void 0,Za=TH(4),Wd=TH(4),We=sb,nd=ed,qg=fc,mf=Td,Lh=yd,Ke=fb,rg=rb,Eb=Za,Xc=void 0,Dd=void 0,nf=void 0,sg=void 0,Mg=void 0,Ef=void 0,Ef=-1;0hb;++hb)0>=Za[hb]||(Vd=UJ(sb,ed,Za[hb]),Wd[hb]=iK(sb,Vd,ed),0Wd[hb]?(++Ad,rc=Za[hb],kc=Za[hb]):ye=Za[hb]);Bd=Bc+Ad;Va=TH(4);Cc=0;if(3==sb.b[ed].j){if(1==Bc&&1==Ad||3==Bd&&0hb;++hb)Vd=UJ(sb,ed,Pa[hb]),Ac[hb]=iK(sb,Vd,ed);if(4==Bd){if(0==Bc||0==Ad){Pu(sb.k,"Error in C4 stereospecification !");break c}if(1==Bc||1==Ad)Va[0]=Pa[0],Va[1]=Pa[3],Va[2]=Pa[2],Va[3]=Pa[1],Cc=Ac[0];else{for(hb=0;4>hb;++hb)-1==Ac[hb]&&(Ac[hb]=0);Bd=2}}else if(3==\nBd)if(3==Bc||3==Ad)Va[0]=Pa[0],Va[1]=Pa[3],Va[2]=Pa[2],Va[3]=Pa[1],0hb;++hb)Ac[hb]==Nc&&(Ac[hb]=0);Bd=2}if(2==Bd)if(1==Bc&&1==Ad)Pa[1]==rc?(Pa[1]=Pa[2],Pa[2]=Pa[3]):Pa[2]==rc&&(Pa[2]=Pa[3]),Va[0]=Ve,Va[1]=rc,Va[2]=Pa[2],Va[3]=Pa[1],Cc=1;else{if(Ac[0]==Ac[1]||Ac[1]==Ac[2]){Pu(sb.k,"Error in C4 stereospecification ! 2/0r");break c}0!=Ac[0]?(Va[0]=Pa[0],Va[1]=Pa[2],Va[2]=Pa[1],Va[3]=Pa[3]):(Va[0]=Pa[1],Va[1]=Pa[3],Va[2]=Pa[2],Va[3]=Pa[0]);1=Gf&&(Ld=!0,Da=(pG(),wG)[Gf]);Ld&&(0!=Xd?Da=Yf+Xd+Da:Da=Yf+Da,1==Mh[of]?Da+=Md:-1==Mh[of]&&\n(Da+="@@"),1==Uf?Da+=Ue:1fd?-fd:fd)&&(Da+=0>fd?-fd:fd)),oe&&(Da+=gd+ib),Da+=eg);Lp(Ib.a,Da);for(ra=1;ra<=xb;++ra)if(ea[ra]==v||na[ra]==v)s=na[ra],s==v&&(s=ea[ra]),N[v]",!0);j=-1c;++c)(d=b.d[c])?a.zb[c]=new GG(d):a.zb[c]=null;0b||b>a.Sb?(Pu(a,"ERROR - invalid mol index: "+b),a.ff(a.Ec.d),null):a.zb[b]}function XI(a){var b,c,d;b=XG(a);for(d=1;d<=a.Sb;++d)c=a.zb[d],c.o=b}function rK(a,b){b!=a.nb&&(a.nb=b,a.ng(),a.ff(a.Ec.d))}function sK(a,b){var c,d,e;if(b!=a.xb){c=eH(a);a.xb=b;d=eH(a);e=P(J(Q((d.b-d.c)/2-(c.b-c.c)/2)));d=P(J(Q((d.a-d.d)/2-(c.a-c.d)/2)));for(c=1;c<=a.Sb;++c)JJ(a.zb[c],e,d),hH(a.zb[c]);a.Ib=!0;a.ff(a.Ec.d)}}\nfunction $G(a,b){var c;c=-1;H(b,"Select substituent")?(c=202,b=m):H(b,Cb)?c=235:H(b,Jb)?c=240:H(b,Bb)?c=260:H(b,Pb)?c=261:H(b,Ub)?c=241:H(b,Nb)?c=233:H(b,Mb)?c=236:H(b,Lb)?c=237:H(b,Tb)?c=234:H(b,Sb)?c=243:H(b,Vb)?c=252:H(b,Rb)?c=244:H(b,Wb)?c=239:H(b,"-PO3H2")?c=251:H(b,zb)?c=242:H(b,vb)?c=245:H(b,yb)&&(c=238);0=a.mb-1)for(g=f.b.b;j>=a.mb-1&&1=a.k&&(a.k=213);for(c=1;14>=c;++c)pH(a,b,c,1),pH(a,b,c,2);a.k=d;gI(a.Ec,a.wc.a,0,0)}var f;if(a.Hb){b=PH(a.fb,a.nb);d=a.mb+(a.Lb?1:0);c=(a.M.a-P(J(Q(fI(a,a.nb)))))/a.nb;f=c-a.mb;qH(b,rG);zH(b.a,P(J(Q(0*(AH(),R)))),P(J(Q(0*R))),P(J(Q(d*R))),P(J(Q(c*R))));a.Lb?(qH(b,(oD(),tD)),e=LH*\n(a.mb+(a.Lb?1:0))+3,f>e&&(BH(b,0,e,a.mb-1,e),CH(b.a,P(J(Q(0*R))),P(J(Q(e*R))),P(J(Q(0*R))),P(J(Q((c-1)*R)))),BH(b,a.mb-1,e,a.mb-1,f),BH(b,a.mb-1,f,d,f))):(qH(b,sG),CH(b.a,P(J(Q(0*R))),P(J(Q(0*R))),P(J(Q(0*R))),P(J(Q((c-1)*R)))),BH(b,0,LH*a.mb,c-1,LH*a.mb),qH(b,FD(rG)),CH(b.a,P(J(Q((d-1)*R))),P(J(Q(0*R))),P(J(Q((d-1)*R))),P(J(Q((f+1)*R)))));CH(b.a,P(J(Q(0*R))),P(J(Q((c-1)*R))),P(J(Q(d*R))),P(J(Q((c-1)*R))));for(c=3;c<=LH+2;++c)pH(a,b,1,c);b=P(J(Q(fI(a,a.nb))));gI(a.Ec,a.fb.a,0,b)}a.Jb&&(d=PH(a.fc,\na.nb),c=a.Lb?1:3,b=(a.M.a-P(J(Q(fI(a,a.nb))))-P(J(Q(a.mb*a.nb))))/a.nb,a.Lb?(qH(d,(oD(),tD)),zH(d.a,P(J(Q(0*(AH(),R)))),P(J(Q(0*R))),P(J(Q(c*R))),P(J(Q(b*R))))):(qH(d,FD(rG)),CH(d.a,P(J(Q((c-1)*(AH(),R)))),P(J(Q(0*R))),P(J(Q((c-1)*R))),P(J(Q(b*R)))),qH(d,rG),CH(d.a,P(J(Q((c-2)*R))),P(J(Q(0*R))),P(J(Q((c-2)*R))),P(J(Q(b*R)))),qH(d,sG),CH(d.a,P(J(Q((c-3)*R))),P(J(Q(0*R))),P(J(Q((c-3)*R))),P(J(Q(b*R))))),b=a.M.b-P(J(Q((a.Lb?1:3)*a.nb))),c=P(J(Q(fI(a,a.nb)))),gI(a.Ec,a.fc.a,b,c))}}\nfunction Vu(a,b){a.A?0==b&&(a.I=-1,Pu(a,Zg),aG(a)):(a.gb?a.I=b:-1a.I?a.I=10*a.I+b:a.I=b,a.gb=!1,0==a.I?(a.I=-1,Pu(a,Zg)):Pu(a,a.I+ha),aG(a))}function sI(a,b){var c,d;d=b.b;c=b.a;a.J||(d-=P(J(Q(eI(a,a.nb))))+P(J(Q((a.Lb?1:3)*a.nb))),c-=P(J(Q(fI(a,a.nb))))+P(J(Q(a.mb*a.nb))));1>d&&(d=1);1>c&&(c=1);a.yb=Gw(d);a.ub=Gw(c)}function DG(a){pG();return 14<=a&&20>=a?1:21<=a&&28>=a?2:29<=a&&31>=a?3:0}w(586,478,Hl);_.Df=function(a){NG(this,a)};_.cg=vK;_.dg=function(){return TG(),null!=this.Pb?UG:VG};\n_.eg=function(){return TG(),TG(),VG};_.fg=HC;_.gg=function(a,b,c){return UC(this,b,c)};_.hg=HC;_.ig=function(){ZE()};_.jg=SD;_.kg=wK;_.lg=SD;_.mg=function(){ZE()};_.Ef=function(a){var b,c;if(this.s)if(c=a.c,b=a.f,a=a.i,c=(100+2*c)/100,this.J||!(bthis.M.a-P(J(Q(this.mb*this.nb)))||b>this.M.b-P(J(Q((this.Lb?1:3)*this.nb))))){if(b=this.xb*c,b>this.xb&&10>=b||b=b&&rK(this,b)};\n_.ff=function(){uK(this)};_.ng=function(){pK(this)};_.og=iz;_.j=null;_.k=0;_.n=0;_.o=0;_.p=!1;_.q=!1;_.s=!0;_.t=null;_.u=null;_.v=null;_.w=null;_.x=13;_.y=null;_.z=!0;_.A=!1;_.B=!1;_.C=!0;_.F=null;_.G=null;_.I=1;_.J=!1;_.K=!1;_.L=!1;_.M=null;_.N=!0;_.O=!1;_.P=!0;_.Q=!0;_.R=null;_.S=null;_.T=null;_.V="http://peter-ertl.com/jsme/2013_03/help.html";_.W=null;_.X=null;_.Y=null;_._=null;_.ab=!1;_.bb=!0;_.cb=0;_.db=Rk;_.fb=null;_.gb=!0;_.hb=null;_.ib=null;_.jb=null;_.kb=null;_.lb=null;_.mb=24;_.nb=1;\n_.ob=null;_.pb=null;_.rb=null;_.sb=null;_.tb=!0;_.ub=0;_.vb=null;_.wb=1;_.xb=1;_.yb=0;_.Ab=!1;_.Bb=!1;_.Cb=0;_.Db=!1;_.Eb=!1;_.Fb=!0;_.Gb=!0;_.Hb=!0;_.Ib=!0;_.Jb=!0;_.Kb=!0;_.Lb=!1;_.Mb=!1;_.Ob=!1;_.Pb=null;_.Qb=null;_.Rb=!1;_.Sb=0;_.Tb=!0;_.Ub=null;_.Vb=!1;_.Wb=null;_.Xb=!1;_.Yb=null;_.Zb=0;_.$b=0;_._b=0;_.ac=!1;_.bc=null;_.cc=!1;_.dc=!1;_.ec=!1;_.fc=null;_.gc=!1;_.hc=!1;_.kc=!0;_.lc=!1;_.mc=!1;_.nc=!0;_.oc=!0;_.pc=null;_.qc=null;_.rc=!1;_.sc=!1;_.tc=!0;_.uc=null;_.vc=!1;_.wc=null;_.xc=null;\n_.yc=null;_.zc=!1;_.Ac=!0;_.Bc=!0;_.Cc=0;_.Dc=0;var LH=10,tG,zG,BG,rG,sG,uG,qG,yG,xK=null,xG,wG;function xJ(a,b,c,d,e){a.b[e]&&(jI(a.r),ZF(a.r,Se),a.r.a=e,a.r.d=c,a.r.e=d,a.r.f=b,yK(a.c,a.r,e),jI(a.r))}function zK(a,b,c){return a.b[c]?(jI(a.r),a.r.a=c,a.r.b=b,yK(a.c,a.r,c),jI(a.r),!0):!1}function aG(a){uK(a);a.f&&(AK(a.Ec),a.f=!1)}function BK(a,b,c){b in a.b?a.b[b]=c:$wnd.alert("Invalid callback name: "+b)}\nfunction CK(){pG();SC.call(this);this.Ec=(zC(),zC(),AC).a;this.eb=new DK;this.Nb=new DK;this.H=new ZD(null,0,8);this.Z=(this.mb-6)/1.5;this.r=new EK;this.D=(oD(),qD);this.zb=D(RJ,q,121,99,0);this.qb=new QC;this.jc=new FK;this.$=H((ZE(),$E[ki]),cf);this.E=new GK;this.U=z(Kw,q,1,[Cb,Jb,Ub,Bb,Pb,Nb,Mb,Lb,Tb,Vb,Rb,Sb,zb,yb,vb]);this.ic=new HK;this.ob=new jH(this);xG[0]=sD;xG[1]=new rm(255,153,153);xG[2]=new rm(255,204,102);xG[3]=new rm(255,255,153);xG[4]=new rm(102,255,255);xG[5]=new rm(51,204,255);xG[6]=\nnew rm(255,153,255);this.eb.c=1;this.Nb.c=1;this.zb[1]=this.ob;this.Y=new IK(this);this.a=z(Kw,q,1,[je,Pd,$d,le,Zd,ke,Ze]);var a,b,c,d;this.b={};for(b=this.a,c=0,d=b.length;cS&&(S=0),na=new $K(f,V,S,g),aL(na),Rm(f.k,na),N.c=V,N.b=ea,N.d=24,N.a=S,N);ea=$.c;V=$.b;SF(new XF(h),f);S=0>=KK();N=new bG(h);S?(S=new bL,Oy(S,g.pb.alt),0<=ea&&(S.pb.style[Lk]=ea+uj),0<=V&&(S.pb.style[ci]=\nV+uj),V=new cG(f,S,ea,$),wz(V.d.f,V.b,ZC(V.d)-V.c-V.a.a,$C(V.d)-(V.a.d-V.a.a)),Rm(f.k,V),S.pb.draggable=Dk,S.pb.style[gh]=(zr(),Si),Yy(S,N,(pu(),pu(),qu)),S.pb.style[Vf]=Zi):(g.pb.draggable=Dk,g.pb.style[gh]=(zr(),Si),Yy(g,N,(pu(),pu(),qu)),g.pb.style[Vf]=Zi)}else OF("JSME initialization error: HTML id "+a+" not found.")}function cL(){return Nw(null)}function dL(a){return Nw(a)}w(590,1,Gl,RK,TK,UK,SK);_.pg=function(a){Zy(this.d,new eL(this,a),(Xt(),Xt(),Yt))};\n_.qg=function(a){Zy(this.d,new fL(this,a),(Xu(),Xu(),Yu))};_.rg=function(a){Zy(this.d,new gL(this,a),(cv(),cv(),dv))};_.sg=function(a){Zy(this.d,new hL(this,a),(fv(),fv(),gv))};_.tg=function(a){Bq(2,new iL(this.b,a))};_.ug=function(){iH(this.b,!0)};_.vg=function(){Sq((Pq(),Qq),new jL(this))};_.wg=function(){var a,b,c;c=[];for(b=new gw(this.d.a);b.ba&&(b.x=a,SH(b,a),kI(b))};_.dh=function(a,b){var c=this.b,d;d=qK(c,a);1>b||b>d.p?(Pu(c,"ERROR - invalid atom index: "+b),aG(c)):(d.v=b,DJ(c))};\n_.eh=function(a){BK(this.b,je,a)};_.fh=function(a,b){BK(this.b,a,b)};_.pe=function(a){Ly(this.d,a);QK(this)};_.gh=function(a){this.b.V=a};_.hh=function(a){rK(this.b,a)};_.ih=function(a){var b=this.b;b.tb=a;kI(b)};_.jh=function(a){var b=this.b;b.wb=a;kI(b)};_.kh=function(a){sK(this.b,a)};_.lh=function(a){this.b.Pb=a};_.mh=function(a){this.b.Qb=a};_.nh=function(a){var b=this.b;b.Wb=a;b.F=mH(b,!1)};_.oh=function(a){this.b.Yb=a};_.ph=function(a,b){My(this.d,a,b);QK(this)};\n_.qh=function(a,b,c){c&&My(this.c,a,b);My(this.d,a,b);QK(this)};_.rh=function(a,b){Ny(this.d,a,b);QK(this)};_.sh=function(a,b,c){c&&Ny(this.c,a,b);Ny(this.d,a,b);QK(this)};_.th=function(a){$G(this.b,a)};_.uh=function(a,b){var c=this.b,d;c.q=!1;d=c.sc;c.sc=!1;c.uc=new nK(c,a);c.sc=d;c.k=253;Pu(c,b);aG(c)};_.qe=function(a){Uy(this.c.pb,a)};_.vh=function(a){this.b.i=a};_.re=function(a){this.d.pb.style[Lk]=a;QK(this)};_.wh=function(a){IJ(this.b,a)};_.xh=function(){return EG(this.b)};_.a=-1;_.b=null;\n_.c=null;_.d=null;var VK=0;function jL(a){this.a=a}w(591,1,{},jL);_.pd=function(){var a,b;for(b=new gw(this.a.d.a);b.b=a.c.length)return!1;c=a.c[a.b];g=c.getAttribute(Lk)||m;b=c.getAttribute(ci)||m;f=c.getAttribute(Wi)||m;e=c.getAttribute(gi)||m;var h,j,l;l={};for(d=0;d=d&&b=a;return c?65536+((d&1023)<<10)+(e&1023):d}function LL(a,b){return 2>b||36b?b:10)?a-48:97<=a&&aa?-a:a):a}\nfunction OL(a,b){var c;c=new ML;c.d=Ce+(PL(0!=a?-a:0)?NL(0!=a?-a:0):m+Yp(c));QL(0!=a?-a:0)&&RL(0!=a?-a:0,c);c.b=4;c.a=b;return c}function X(a){var b;b=new ML;b.d=Ce+(PL(a)?NL(a):m+Yp(b));QL(a)&&RL(a,b);return b}function SL(a,b){var c;c=new ML;c.d=Ce+(PL(a)?NL(a):m+Yp(c));QL(a)&&RL(a,c);c.b=b?8:0;return c}function TL(){var a;a=new ML;a.d=Ce+(PL(0)?NL(0):m+Yp(a));QL(0)&&RL(0,a);a.b=2;return a}function UL(a){var b;b=new ML;b.d=Ce+(PL(a)?NL(a):m+Yp(b));QL(a)&&RL(a,b);b.b=1;return b}\nfunction QL(a){return typeof a==cj&&0b||36c||2147483647a)return 0;if(0==a)return 32;b=-(a>>16)>>16&16;c=16-b;a>>=b;b=a-256>>16&8;c+=b;a<<=b;b=a-4096>>16&4;c+=b;a<<=b;b=a-16384>>16&2;c+=b;a=a<>14;return c+2-(a&~(a>>1))}function $w(a){var b,c;if(0==a)return 32;c=0;for(b=1;0==(b&a);b<<=1)++c;return c}function nm(a){var b,c,d;b=D(aM,gm,-1,8,1);c=(bM(),cM);d=7;if(0<=a)for(;15>=4;else for(;0>=4;b[d]=c[a&15];return dM(b,d,8)}\nfunction yI(a){var b,c;return-129a?(b=a+128,c=(eM(),fM)[b],!c&&(c=fM[b]=new eD(a)),c):new eD(a)}w(627,624,{90:1,95:1,101:1,103:1},eD);_.eQ=function(a){return G(a,101)&&a.a==this.a};_.hC=zx;_.tS=$L;_.a=0;function eM(){eM=x;fM=D(LJ,q,101,256,0)}var fM;function $H(a){return 0>=a?0-a:a}function aI(a){return 0>a?-a:a}function gn(a,b){return a>b?a:b}function Q(a){return Math.round(a)}function gM(a){return Math.sqrt(a)}function YE(){}function Rv(a){this.f=a}\nw(631,138,{90:1,98:1,102:1,106:1,107:1},YE,Rv);function bM(){bM=x;cM=z(aM,gm,-1,[48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122])}var cM;function XL(a){this.f=a}w(633,626,{90:1,98:1,100:1,104:1,106:1,107:1},XL);function KL(a,b){return a.charCodeAt(b)}function hM(a,b){return-1!=a.lastIndexOf(b)&&a.lastIndexOf(b)==a.length-b.length}function H(a,b){return!G(b,1)?!1:""+a==b}function Qy(a,b){return a.indexOf(b)}\nfunction lF(a,b,c){return a.indexOf(b,c)}function jC(a,b){return a.lastIndexOf(b)}function NK(a,b,c){var d;for(d=0;0<=(d=c.indexOf($f,d));)36==c.charCodeAt(d+1)?c=c.substr(0,d-0)+Ka+Ty(c,++d):c=c.substr(0,d-0)+Ty(c,++d);return a.replace(RegExp(b,Kh),c)}\nfunction iM(a,b){for(var c=RegExp(b,Kh),d=[],e=0,f=a,g=null;;){var h=c.exec(f);if(null==h||f==m){d[e]=f;break}else d[e]=f.substring(0,h.index),f=f.substring(h.index+h[0].length,f.length),c.lastIndex=0,g==f&&(d[e]=f.substring(0,1),f=f.substring(1)),g=f,e++}if(0ha&&a[a.length-1]>ha?a:a.replace(/^(\\s*)/,m).replace(/\\s*$/,m)}function dM(a,b,c){a=a.slice(b,c);return String.fromCharCode.apply(null,a)}\nfunction jM(a,b,c){if(128>c)return a[b]=(c&127)<<24>>24,1;if(2048>c)return a[b++]=(c>>6&31|192)<<24>>24,a[b]=(c&63|128)<<24>>24,2;if(65536>c)return a[b++]=(c>>12&15|224)<<24>>24,a[b++]=(c>>6&63|128)<<24>>24,a[b]=(c&63|128)<<24>>24,3;if(2097152>c)return a[b++]=(c>>18&7|240)<<24>>24,a[b++]=(c>>12&63|128)<<24>>24,a[b++]=(c>>6&63|128)<<24>>24,a[b]=(c&63|128)<<24>>24,4;if(67108864>c)return a[b++]=(c>>24&3|248)<<24>>24,a[b++]=(c>>18&63|128)<<24>>24,a[b++]=(c>>12&63|128)<<24>>24,a[b++]=(c>>6&63|128)<<24>>\n24,a[b]=(c&63|128)<<24>>24,5;throw new bn("Character out of range: "+c);}function Ry(a){var b;return 65536<=a?(b=56320+(a-65536&1023)&65535,String.fromCharCode(55296+(a-65536>>10&1023)&65535)+String.fromCharCode(b)):String.fromCharCode(a&65535)}function kM(a){var b,c,d,e,f;e=a.length;for(d=b=0;dc?++b:2048>c?b+=2:65536>c?b+=3:2097152>c?b+=4:67108864>c&&(b+=5);b=D(lM,cm,-1,b,1);for(d=f=0;da||a>=b)&&EM(a,b)}function EM(a,b){throw new IL("Index: "+a+", Size: "+b);}w(649,642,jm);\n_.Eh=function(){throw new sF("Add not supported on this list");};_.yh=function(a){this.Eh(this.Xf(),a);return!0};_.eQ=function(a){return DM(this,a)};_.hC=function(){var a,b,c;b=1;for(a=this.Ce();a.be();)c=a.ce(),b=31*b+(null==c?0:Xp(c)),b=~~b;return b};_.Ce=function(){return new gw(this)};_.Gh=function(){return this.Hh(0)};_.Hh=function(a){return new FM(this,a)};_.Ih=function(){throw new sF("Remove not supported on this list");};function CM(a){return a.b=a.d.Xf())throw new uz;return a.d.Fh(a.c=a.b++)}function zM(a){if(0>a.c)throw new aC;a.d.Ih(a.c);a.b=a.c;a.c=-1}function gw(a){this.d=a}w(650,1,{},gw);_.be=function(){return CM(this)};_.ce=function(){return hw(this)};_.de=function(){zM(this)};_.b=0;_.c=-1;_.d=null;function FM(a,b){var c;this.d=this.a=a;c=a.Xf();(0>b||b>c)&&EM(b,c);this.b=b}w(651,650,{},FM);_.Jh=function(){return 0=this.b)throw new uz;return this.a.Fh(this.c=--this.b)};_.a=null;\nfunction GM(a){a=new wM(a.b.a);return new HM(a)}function IM(a,b){this.a=a;this.b=b}w(652,644,Fl,IM);_.zh=JM;_.Ce=function(){return GM(this)};_.Xf=function(){return this.b.a.d};_.a=null;_.b=null;function HM(a){this.a=a}w(653,1,{},HM);_.be=function(){return CM(this.a.a)};_.ce=function(){return(this.a.b=hw(this.a.a)).Bh()};_.de=function(){yM(this.a)};_.a=null;function KM(a){a.b=D(LM,q,0,0,0)}function kE(a,b,c){(0>b||b>a.c)&&EM(b,a.c);a.b.splice(b,0,c);++a.c}\nfunction Rm(a,b){xq(a.b,a.c++,b);return!0}function fy(a,b){PD(b,a.c);return a.b[b]}function hB(a,b){for(var c=0;ca.c&&xq(b,a.c,null);return b}\nfunction Om(){KM(this)}function UD(a){KM(this);this.b.length=a}function iD(a){KM(this);a=yw(a.b,a.c);Array.prototype.splice.apply(this.b,[0,0].concat(a));this.c=this.b.length}w(657,649,ul,Om,UD,iD);_.Eh=function(a,b){kE(this,a,b)};_.yh=function(a){return Rm(this,a)};_.ug=function(){this.b=D(LM,q,0,0,0);this.c=0};_.zh=function(a){return-1!=hB(this,a)};_.Fh=function(a){return fy(this,a)};_.Uf=function(){return 0==this.c};_.Ih=function(a){return MM(this,a)};_.Ah=function(a){return an(this,a)};_.Xf=cu;\n_.c=0;function pw(){pw=x;qw=new NM}var qw;function NM(){}w(660,649,km,NM);_.zh=wK;_.Fh=function(){throw new rz;};_.Xf=function(){return 0};function OM(){this.a=new Date}function PM(a){return 10>a?xc+a:m+a}w(663,1,{90:1,94:1,95:1,108:1},OM);_.eQ=function(a){return G(a,108)&&ix(J(this.a.getTime()),J(a.a.getTime()))};\n_.hC=function(){var a;a=J(this.a.getTime());var b,c,d,e;c=32;d=a.h&1048575;22>c?(e=d>>>c,b=a.m>>c|d<<22-c,c=a.l>>c|a.m<<22-c):44>c?(e=0,b=d>>>c-22,c=a.m>>c-22|a.h<<44-c):(b=e=0,c=d>>>c-44);b=Rw(c&4194303,b&4194303,e&1048575);a=Rw(a.l^b.l,a.m^b.m,a.h^b.h);return P(a)};\n_.tS=function(){var a,b;b=-this.a.getTimezoneOffset();a=(0<=b?mb:m)+~~(b/60);b=10>(0>b?-b:b)%60?xc+(0>b?-b:b)%60:m+(0>b?-b:b)%60;return(QM(),RM)[this.a.getDay()]+ha+SM[this.a.getMonth()]+ha+PM(this.a.getDate())+ha+PM(this.a.getHours())+gd+PM(this.a.getMinutes())+gd+PM(this.a.getSeconds())+" GMT"+a+b+ha+this.a.getFullYear()};_.a=null;function QM(){QM=x;RM=z(Kw,q,1,"Sun,Mon,Tue,Wed,Thu,Fri,Sat".split(","));SM=z(Kw,q,1,"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(","))}var RM,SM;\nfunction ew(a,b){return null==E(a.a,b,a)}function dw(){this.a=new Hp}w(665,644,{90:1,94:1,113:1},dw);_.yh=function(a){return ew(this,a)};_.zh=JM;_.Uf=function(){return 0==this.a.d};_.Ce=function(){return GM(new IM(this.a,new xF(this.a)))};_.Ah=function(a){return null!=ow(this.a,a)};_.Xf=xM;_.tS=function(){return uM(new IM(this.a,new xF(this.a)))};_.a=null;function pF(a,b){this.a=a;this.b=b}w(669,647,xl,pF);_.Bh=zx;_.Ch=iA;_.Dh=function(a){var b;b=this.b;this.b=a;return b};_.a=null;_.b=null;\nfunction uz(){}w(670,138,{90:1,98:1,106:1,107:1,112:1},uz);function TM(a){var b,c;b=a.b;c=a.d.length;if(ba.j&&(++a.j,a.p[a.j]=b)}function aN(a){var b;b=new SJ;b.f=a.f;b.d=a.d;b.q=a.q;b.r=a.r;b.s=a.s;b.n=a.n;b.e=a.e;b.p=a.p.slice();b.j=a.j;b.c=a.c;b.a=a.a;b.b=a.b;b.i=a.i;b.o=a.o;b.k=a.k;return b}function sJ(a){return-99199!=a.f?a.f:0}function bN(a){return 4<=a.o&&2==a.j}\nfunction gH(a,b,c){a.q+=b;a.r+=c}function YG(a){var b;b=-99199!=a.f;a.f=-99199;return b}function SJ(){ZM();this.p=TH(7)}w(690,1,{116:1},SJ);_.a=3;_.b=null;_.c=0;_.d=0;_.e=null;_.f=-99199;_.i=0;_.j=0;_.k=0;_.n=0;_.o=0;_.q=0;_.r=0;_.s=0;var $M;function dK(a,b){var c;c=cN(a);return 0\\\\.]+$",2);nN=new YM("\\\\s+",2)}\nfunction DI(a){kN();var b,c,d,e;this.i=this.f=null;this.j=0;this.e=!1;this.a=this.c=null;var f,g,h;if(null==a||0==a.length)c=0;else{g=1;f=a.length;for(h=0;h=this.j?this.b=Sy(a):this.b=a;c=new WM(nN,this.b);this.d=c.b.a.test(c.a);do if(4a.indexOf("j")&&((this.e=0=f.length)e=0;else{for(h=0,j=f.length;hn&&(n=0.001);r=g/n;e=f/n;l=TH(4);for(h=0;4>h;++h)d[h]==c||0>=d[h]||(0==l[1]?l[1]=d[h]:0==l[2]?l[2]=d[h]:0==l[3]&&(l[3]=d[h]));o=TH(4);d=TH(4);for(h=1;3>=h;++h)3==h&&0==l[3]||(f=(a.b[l[h]].q-a.b[b].q)*e+(a.b[l[h]].r-a.b[b].r)*r,g=(a.b[l[h]].r-a.b[b].r)*e-(a.b[l[h]].q-a.b[b].q)*r,n=Math.sqrt(f*f+g*g),0.001>n&&(n=0.001),o[h]=g/n,d[h]=f/n);a=RN(o[1],d[1],o[2],d[2]);0b?(j[1]=l[1],j[2]=l[3],j[3]=l[2]):0>a&&0d?(j[1]=l[2],j[2]=l[3],j[3]=l[1]):0>d&&0b&&0>a&&(j[1]=l[3],j[2]=l[2],j[3]=l[1])):0j&&(j=0.001);g/=j;f/=j;l=j+25*Math.cos(1.0471975511965976);n=25*Math.sin(1.0471975511965976);h=UJ(a,b,d);if(3==a.c[h].c||204==a.k.k||1!=a.c[h].c&&(203==a.k.k||204==a.k.k)||a.n)l=j+25,n=0;0n?n=-n:0>c&&0j&&(j=0.001),CJ(a,a.p,a.b[b].q+25*f/j,a.b[b].r+25*g/j),0==HJ(a,a.p,1,a.p)||h==a.b[b].j);++h);break;default:return--a.p,Pu(a.k,"Are you trying to draw an hedgehog ?"),a.k.cb=9,!1}b=TJ(a,a.v,a.p,1);203==a.k.k&&(b.c=2);204==a.k.k&&\n(b.c=3);201==a.k.k&&AJ(a,a.q);a.z=a.b[a.p].q;a.A=a.b[a.p].r;return e}function uJ(a,b){var c,d;if(!b||0==b.c)return m;d=m;d+="M V30 BEGIN COLLECTION"+(pG(),fa);d+=kf+a+" [ATOMS=("+b.c;for(c=new gw(b);c.bj&&(j=0.001);1>$H((a.b[b].r-a.b[e].r)*(g/j)+(a.b[b].q-a.b[e].q)*(h/j))?(g=a.b[b].q-a.b[e].q,h=a.b[b].r-a.b[e].r,j=Math.sqrt(g*g+h*h),0.001>j&&(j=0.001),b=h/j,g/=j,d[0]=a.b[e].q+j*g-c*b,d[1]=a.b[e].r+c*g+j*b):(g=(a.b[e].q+a.b[f].q)/2,e=(a.b[e].r+a.b[f].r)/2,g=a.b[b].q-g,h=a.b[b].r-e,j=Math.sqrt(g*g+h*h),0.001>j&&(j=0.001),d[0]=a.b[b].q+c*g/j,d[1]=a.b[b].r+c*h/j)}\nfunction lJ(a){var b,c,d,e,f,g,h,j,l,n,o,r,t,y;n=-1;j=6;switch(a.k.k){case 206:j=3;break;case 207:j=4;break;case 208:case 221:case 223:j=5;break;case 210:case 209:j=6;break;case 211:j=7;break;case 212:j=8;break;case 229:j=9}f=6.283185307179586/j;l=gM(312.5/(1-Math.cos(f)));if(0a.b[a.v].j)YN(a,j,f,l);else if(!a.k.Bb&&!a.k.rc)n=a.v,mJ(a,a.v,0),a.v=a.p,YN(a,j,f,l);else{a.k.rc=!1;if(209==a.k.k||221==a.k.k||223==a.k.k){Pu(a.k,"ERROR - cannot add aromatic spiro ring !");a.k.cb=9;return}for(d=\n1;d<=a.b[a.v].j;++d)if(b=a.c[UJ(a,a.v,a.b[a.v].p[d])].c,2o&&(o=0.001);g/=o;e/=o;for(d=1;d<=j;++d)h=BJ(a,null),r=f*d+1.5707963267948966,GJ(h,b[0]+l*(Math.sin(r)*e-Math.cos(r)*g),b[1]+l*(Math.cos(r)*e+Math.sin(r)*g))}else if(0o&&(o=0.001);g/=o;e/=o;h=o/2;r=l*Math.sin(0.5*(3.141592653589793-f));o=1;0<(a.b[d].r-a.b[b].r)*e-(a.b[d].q-a.b[b].q)*g&&(r=-r,o=0);t=a.b[b].q+h*e-r*g;y=a.b[b].r+r*e+h*g;for(d=1;d<=j;++d)h=BJ(a,null),r=f*(d+0.5)+3.141592653589793*o,GJ(h,t+l*(Math.sin(r)*e-Math.cos(r)*g),y+l*(Math.cos(r)*e+Math.sin(r)*g)),1==o?(d==j&&GJ(h,a.b[b].q,a.b[b].r),\nd==j-1&&GJ(h,a.b[c].q,a.b[c].r)):(d==j-1&&GJ(h,a.b[b].q,a.b[b].r),d==j&&GJ(h,a.b[c].q,a.b[c].r))}else{b=0.5;6==j&&(b=0);for(d=1;d<=j;++d)h=BJ(a,null),r=f*(d-b),GJ(h,a.z+l*Math.sin(r),a.A+l*Math.cos(r))}b=j;l=0;for(f=1;f<=b;++f)PJ(a,null),l=a.p-b+f,a.b[l].j=2,a.c[a.q].i=l,a.c[a.q].j=l+1;a.c[a.q].j=a.p-b+1;if(209==a.k.k){if(a.c[a.q-4].c=2,a.c[a.q-2].c=2,a.c[a.q].c=2,0e&&ed;--f)if(0g&&(g=0.001),e/=g,f/=g);l=a.b[a.v].q+d*f;n=a.b[a.v].r+d*e;for(g=1;g<=b;++g)h=BJ(a,null),j=c*g-1.5707963267948966,GJ(h,l+d*(Math.sin(j)*f-Math.cos(j)*e),n+d*(Math.cos(j)*f+Math.sin(j)*e))}function XN(a,b){var c,d;0==b&&(b=a.p);for(c=a.p;c>a.p-b;--c)d=HJ(a,c,1,a.p),0!=d&&gH(a.b[c],6,6)}\nfunction UJ(a,b,c){var d,e,f;for(e=1;e<=a.q;++e)if(d=a.c[e],f=d.i,d=d.j,f==b&&d==c||f==c&&d==b)return e;return 0}function wI(a){var b;for(b=1;b<=a.q;++b)if(1==a.c[b].c&&0=c||0>=d?a.s=!0:(b=cH(a),c=c/2-b.a,b=d/2-b.b,a.k.Ob||JJ(a,c,b),hH(a))}\nfunction hJ(a,b,c){var d,e,f;if(1==c)return a.b[b].n+=1,!0;if(-1==c)return a.b[b].n+=-1,!0;e=a.b[b].n;f=a.b[b].i;d=a.b[b].o;-1==d&&0==c&&(0==a.b[b].n?a.b[b].n=1:1==a.b[b].n?a.b[b].n=-1:-1==a.b[b].n&&(a.b[b].n=0));switch(a.b[b].a){case 1:0==d&&(0==a.b[b].n?a.b[b].n=1:1==a.b[b].n?a.b[b].n=-1:a.b[b].n=0);break;case 2:2d&&(0==\na.b[b].n?a.b[b].n=-1:-1==a.b[b].n?a.b[b].n=1:1==a.b[b].n&&(a.b[b].n=0));break;case 4:case 7:3d&&0==a.b[b].n?a.b[b].n=1:3>d&&1==a.b[b].n?a.b[b].n=-1:3>d&&-1==a.b[b].n&&(a.b[b].n=0);break;case 5:case 8:case 13:2d&&0==a.b[b].n?a.b[b].n=-1:\n2>d&&-1==a.b[b].n?a.b[b].n=1:2>d&&1==a.b[b].n&&(a.b[b].n=0);break;case 9:case 10:case 11:case 12:0==d&&0==a.b[b].n?a.b[b].n=-1:0==d&&-1==a.b[b].n?a.b[b].n=0:Pu(a.k,"Charge change not possible on the halogen !");break;case 32:Pu(a.k,"Use X button to change charge on the X atom !")}if(0e&&eb?e=2:0>a&&0>b?e=3:0>a&&0<=b&&(e=4);0<=c&&0<=d?f=1:0<=c&&0>d?f=2:0>c&&0>d?f=3:0>c&&0<=d&&(f=4);if(ef)return-1;switch(e){case 1:case 4:return ac?1:-1}return 0}function fK(a){ZN(a);hH(a);gK(a)}\nfunction cH(a){var b,c,d,e,f,g;b=new iN;f=9999;d=-9999;g=9999;e=-9999;for(c=1;c<=a.p;++c)a.b[c].qd&&(d=a.b[c].q),a.b[c].re&&(e=a.b[c].r);b.a=f+(d-f)/2;b.b=g+(e-g)/2;b.c=d-f;b.d=e-g;25>b.c&&(b.c=25);25>b.d&&(b.d=25);return b}function WN(a,b,c){var d,e;e=0;for(d=1;d<=a.p;++d)d>=b&&d<=c||0!=HJ(a,d,b,c)&&++e;return e}function TJ(a,b,c,d){var e;e=PJ(a,null);QJ(a.b[b],c);QJ(a.b[c],b);e.i=b;e.j=c;WJ(e,a.b);e.c=d;return e}\nfunction BJ(a,b){++a.p;b?a.b[a.p]=aN(b):a.b[a.p]=new SJ;return a.b[a.p]}function ZH(a,b,c,d,e,f){var g;g=a.b[b].q-c/2;f||(g-=d-c);a=a.b[b].r-~~(e/2);return new $N(g-1-2,a-2,d+1+4,e+4)}function PJ(a,b){var c;++a.q;c=new gN;b&&hN(c,b);return a.c[a.q]=c}\nfunction pJ(a,b,c){var d,e,f,g,h,c=rJ(a,b,c,!1);e=-1.7976931348623157E308;d=1.7976931348623157E308;for(b=1;b<=a.p;++b)a.b[b].r>e&&(e=a.b[b].r),a.b[b].qa.b[b].n?f=4-a.b[b].n:0>a.b[b].n&&-4=g&&(h=g)),\ng=oJ(h,2)+oJ(f,3)+" 0 0 0 0 0 0 0",f=$J(a,b),g+=oJ(f,3),c+=g+ka+(pG(),fa);for(b=1;b<=a.q;++b)d=a.c[b],g=e=d.c,1==a.c[b].c?g=1:2==a.c[b].c&&(g=2),f=oJ(d.i,3)+oJ(d.j,3),h=0,1==e&&1==d.f?h=1:1==e&&2==d.f&&(h=6),1==e&&3==d.f&&(h=1,f=oJ(d.j,3)+oJ(d.i,3)),1==e&&4==d.f&&(h=6,f=oJ(d.j,3)+oJ(d.i,3)),c+=f+oJ(g,3)+oJ(h,3)+la+(pG(),fa);for(b=1;b<=a.p;++b)0!=a.b[b].n&&(c+="M CHG 1"+oJ(b,4)+oJ(a.b[b].n,4)+(pG(),fa)),0!=a.b[b].d&&(c+="M ISO 1"+oJ(b,4)+oJ(a.b[b].d,4)+(pG(),fa));return c+=gf+(pG(),fa)}\nfunction IG(a,b){var c,d,e,f,g,h,j;g=j=0;for(h=1;h<=a.q;++h)e=a.c[h],c=e.i,d=e.j,c!=b&&d!=b?(++j,f=a.c[j],hN(f,e),f.i=c,c>b&&--f.i,f.j=d,d>b&&--f.j):g+=e.c;a.q=j;for(h=b;hb&&--c,a.b[h].p[++d]=c);a.b[h].j=d}}\nfunction KG(a,b){var c,d,e,f;c=a.c[b].i;d=a.c[b].j;for(e=b;ea.b[b].a&&0==a.b[d].d){if(0!=(-99199!=a.b[d].f?a.b[d].f:0))continue a;b=UJ(a,d,b);if(1==a.c[b].c&&(0==a.c[b].f||!a.k.tc))IG(a,d),c=!0}return c}function aO(a,b){var c,d,e,f,g;g=z(B,u,-1,[0,0]);for(e=1,f=0;e<=a.b[b].j;++e)c=a.b[b].p[e],d=UJ(a,b,c),2!=a.c[d].c&&(g[f++]=c);return g}\nfunction ZN(a){var b,c,d;for(d=1;d<=a.p;++d)a.b[d].j=0;for(d=1;d<=a.q;++d)b=a.c[d].i,c=a.c[d].j,QJ(a.b[b],c),QJ(a.b[c],b)}\nfunction cK(a,b,c){var d,e,f,g,h,j,l,n,o;a.d=TH(a.q+1);o=[];for(j=1;j<=a.p;++j){o[j]=!1;b[j]=!1;a:{d=void 0;for(d=1;d<=a.b[j].j;++d)if(c[UJ(a,j,a.b[j].p[d])]){d=!0;break a}d=!1}if(d&&!(3d&&(d=c);return d}\nfunction YH(a,b){var c;c=(pG(),wG)[a.b[b].a];32==a.b[b].a&&(c=a.b[b].e);return c}function VJ(a,b){a.b[b].j+=-1}function dI(a,b,c){var d,e,f,g,h;h=1;a.a=TH(a.p+1);for(e=a.a[b]=1;e<=a.b[b].j;++e)d=a.b[b].p[e],d!=c&&(a.a[d]=++h);for(g=!1;;){for(d=1;d<=a.p;++d){g=!1;if(0~~(c/2)+24?3:2}function RG(a,b){var c,d,e,f,g,h,j;c=cH(a);d=c.a;e=c.b;g=Math.sin(3.141592653589793*b/180);c=Math.cos(3.141592653589793*b/180);for(f=1;f<=a.p;++f)h=a.b[f].q*c+a.b[f].r*g,j=-a.b[f].q*g+a.b[f].r*c,GJ(a.b[f],h,j);c=cH(a);JJ(a,d-c.a,e-c.b)}\nfunction YJ(a){var b,c,d,e,f;e=f=0;for(d=1;d<=a.q;++d)b=a.b[a.c[d].i].q-a.b[a.c[d].j].q,c=a.b[a.c[d].i].r-a.b[a.c[d].j].r,f+=Math.sqrt(b*b+c*c);0=g;++g)if(H(f,(pG(),wG)[g])){f=g;break b}f=32}jJ(a,b,f);32==a.b[b].a&&(a.b[b].e=d);c+=\nha;d=0;0=e&&(d=e-48));32==a.b[b].a&&(a.b[b].i=d)}}}function UI(a,b,c){var d,e;a.i=1;c&&(a.i=-1);b=new HF(b);try{for(;b.j=AF(b,b.a),b.jc||6a.b[c].j&&2>a.b[d].j)e.f=0,Pu(a.k,"Stereomarking meaningless on this bond !");else switch(e.f){case 0:a.b[d].j<=a.b[c].j?e.f=1:e.f=3;break;case 1:e.f=2;break;case 2:2h||3c[b]&&(j=f,f=b,b=j);j=aO(a,f);h=j[0];l=j[1];e=0;n=!1;0c[l]&&(j=h,h=l,l=j);j=UJ(a,f,h);0!=d[j]?e=h:1==a.c[j].c&&5!=a.d[j]&&(e=h);0==e&&0c[f]&&(n=!0);j=aO(a,b);l=j[0];g=j[1];h=0;0g&&(g=0.001),j/=g,g=l/g,l=(a.b[e].r-a.b[f].r)*g-(a.b[e].q-a.b[f].q)*j,t=(a.b[h].r-a.b[f].r)*g-(a.b[h].q-a.b[f].q)*j,2>(0>=l?0-l:l)||2>(0>=t?0-t:t))Pu(a.k,"Not unique E/Z geometry !");else{g=\nUJ(a,e,f);h=UJ(a,h,b);r=1;if(0==d[g]){for(o=1;o<=a.b[e].j;++o)if(b=a.b[e].p[o],b!=f&&(j=UJ(a,e,b),0!=d[j])){c[b]>c[e]?r=-d[j]:r=d[j];break}d[g]=r}0==d[h]&&(0l&&0>t?d[h]=-d[g]:d[h]=d[g],n&&(d[h]=-d[h]))}}}function iK(a,b,c){var d;d=a.c[b].f;return 1>d||4g?e.i=3-g-c.b[d].n:4==g?(c.b[d].n=-1,e.i=0):5g?0c.b[d].n?e.i=2-g-c.b[d].n:e.i=4-g:(c.b[d].n=g-4,e.i=4-g+c.b[d].n);break;case 4:case 7:3>g?e.i=3-g+c.b[d].n:3==g?0>c.b[d].n?(c.b[d].n=0,e.i=0):0c.b[d].n?(c.b[d].n=0,e.i=0):0g?e.i=2-g+c.b[d].n:2==g?0>c.b[d].n?(c.b[d].n=0,e.i=0):0f;)if(0e.i&&(e.i=0)}}}function jH(a){ON(this);this.b[0]=new SJ;this.t=this.q=this.p=0;this.k=a}\nfunction TI(a,b){var c,d,e,f,g,h,j,l,n;jH.call(this,a);if(null!=b&&(f=m,l=RI(b),null!=l)){n=new GF(b,l,!0);for(g=1;4>=g;++g)f=SI(n,l);e=yI(nF(Sy(f.substr(0,3)),10)).a;j=yI(nF(Sy(f.substr(3,3)),10)).a;g=0;try{g=yI(nF(Sy(f.substr(14,1)),10)).a}catch(o){if(o=Hq(o),!G(o,98))throw o;}SG(this,(TG(),1==g?UG:VG));for(g=1;g<=e;++g){d=BJ(this,null);f=SI(n,l);d.q=(new YL(VL(Sy(f.substr(0,10))))).a;d.r=-(new YL(VL(Sy(f.substr(10,10))))).a;d=34;34>f.length&&(d=f.length);d=Sy(f.substr(31,d-31));kJ(this,g,d);62<=\nf.length&&(h=Sy(f.substr(60,3)),0=h))){var r=void 0,r=cN(d);d=0d&&(d=0);this.b[g].d=d}if(39<=f.length&&(h=Sy(f.substr(37,2)),0=h))){f=0;switch(h){case 1:f=3;break;case 2:f=2;break;case 3:f=1;break;case 4:f=0;break;case 5:f=-1;break;case 6:f=-2;break;case 7:f=-3}this.b[g].n=f}}for(g=1;g<=j;++g)e=PJ(this,null),f=\nSI(n,l),e.i=yI(nF(Sy(f.substr(0,3)),10)).a,e.j=yI(nF(Sy(f.substr(3,3)),10)).a,d=yI(nF(Sy(f.substr(6,3)),10)).a,1==d?c=1:2==d?c=2:3==d?c=3:c=9,h=0,11b.length)this.p=0;else{try{j=new FF(b);g=yI(nF(DF(j),10)).a;h=yI(nF(DF(j),10)).a;for(f=1;f<=g;++f)n=DF(j),c=(o=BJ(this,null),kJ(this,this.p,n),o),c.q=(new YL(VL(DF(j)))).a,c.r=-(new YL(VL(DF(j)))).a;for(f=1;f<=h;++f){d=PJ(this,null);d.i=yI(nF(DF(j),10)).a;d.j=yI(nF(DF(j),10)).a;e=yI(nF(DF(j),10)).a;l=0;if(-1==e)l=e=1;else if(-2==e)e=1,l=2;else if(-5==e)e=2,l=10;else if(11==\ne||12==e||13==e||14==e)l=e,e=9;d.c=e;d.f=l}ZN(this);YJ(this);fH(this)}catch(r){r=Hq(r);if(G(r,98)){r.Cd();this.p=0;return}throw r;}a&&!a.bb&&ZG(this);fK(this)}}function WI(a,b,c){var d,e,f,g;jH.call(this,a);g=TH(b.p+1);for(e=1;e<=b.p;++e)b.a[e]==c&&(BJ(this,b.b[e]),g[e]=this.p);for(e=1;e<=b.q;++e)if(a=b.c[e].i,d=b.c[e].j,!(b.a[a]!=c&&b.a[d]!=c)&&!(b.a[a]!=c||b.a[d]!=c))f=PJ(this,b.c[e]),f.i=g[a],f.j=g[d];this.i=b.i;ZN(this)}\nfunction bO(a,b,c){var d,e,f;jH.call(this,a);f=TH(b.p+1);for(d=1;d<=b.p;++d)b.b[d].k==c&&(BJ(this,b.b[d]),f[d]=this.p);for(d=1;d<=b.q;++d)a=b.c[d],a.e==c&&(e=PJ(this,a),e.i=f[a.i],e.j=f[a.j]);SG(this,b.f);this.i=b.i;ZN(this)}\nfunction qJ(a,b,c){var d,e,f,g;jH.call(this,a);for(a=1;a<=c;++a)this.p+=b[a].p,this.q+=b[a].q,this.t+=b[a].t,b[a].f.a&&SG(this,(TG(),TG(),UG));this.b=D(PN,q,116,this.p+1,0);this.c=D(QN,q,117,this.q+1,0);f=g=e=0;for(a=1;a<=c;++a){for(d=1;d<=b[a].p;++d)++e,this.b[e]=aN(b[a].b[d]);for(d=1;d<=b[a].q;++d)++g,this.c[g]=fN(b[a].c[d]),this.c[g].i+=f,this.c[g].j+=f;f=e}ZN(this)}\nfunction GG(a){var b;ON(this);this.k=a.k;this.p=a.p;this.q=a.q;this.t=a.t;this.b=D(PN,q,116,this.p+1,0);for(b=0;b(0>=a?0-a:a)&&(a=0);a=P(J(Q(a*Math.pow(10,c))))/Math.pow(10,c);e=m+(new YL(a)).a;d=Qy(e,Ry(46));0>d&&(e+=bc,d=Qy(e,Ry(46)));f=e.length;for(a=1;a<=c-f+d+1;++a)e+=xc;if(0==b)return e;e.length>b&&(e=Gd);c=m;for(a=1;a<=b-e.length;++a)c+=ha;return c+e}function RI(a){var b;b=new GF(a,fa,!0);if(4b&&(d=Gd);e=m;for(c=1;c<=b-d.length;++c)e+=ha;return e+d}function SI(a,b){for(var c,d;a.j=AF(a,a.a),a.j>16&255)),Gw(0.7*(g.d>>8&255)),Gw(0.7*(g.d&255))),RH(a.a,g)):(h=new rm(Gw(0.7*(g.d>>16&255)),Gw(0.7*(g.d>>8&255)),Gw(0.7*(g.d&255))),f=ED(g),RH(a.a,h));g=P(J(Q(R)));d=P(J(Q(d*R)));e=P(J(Q(e*R)));b=P(J(Q(b*R)));c=P(J(Q(c*R)));d-=g;e-=g;zH(a.a,b+g,c+g,d-g,e-g);RH(a.a,h);zH(a.a,b,c,d,g);zH(a.a,b,c+g,g,e);RH(a.a,f);zH(a.a,b+d,c,g,e+g);zH(a.a,b+1,c+e,d,g)}\nfunction uH(a,b,c,d,e){a=a.a;b=P(J(Q(b*R)));c=P(J(Q(c*R)));d=P(J(Q(d*R)));e=P(J(Q(e*R)));vH(a,!0);wH(a,xH(a,b,c,d,e))}function FH(a,b,c,d){var e,f,g;f=D(B,u,-1,d,1);g=D(B,u,-1,d,1);for(e=0;e=b||b>=ZC(this.a)-1||0>=c||c>=$C(this.a)-1)&&(this.a.j=!1);this.a.j?EJ(this.a.c,a,b,c):zI(this.a.c,a,b,c);this.a.pb.focus()};_.a=null;function yO(a){this.a=a}w(741,1,{},yO);_.od=function(a){this.a.j=!1;Vt(a);Wt(a);MJ(this.a.c)};_.a=null;\nfunction zO(a){this.a=a}w(742,1,{},zO);_.nd=function(){this.a.j&&(this.a.j=!1)};_.a=null;function AO(a){this.a=a}w(743,1,{},AO);_.a=null;function BO(a){this.a=a}w(744,1,{},BO);_.a=null;function nO(){lO.call(this);this.pb.style[Lk]=Gc;this.pb.style[ci]=Gc}w(745,736,Sl,nO);function CO(a){this.a=a}w(746,1,{},CO);_.Yd=function(){Sq((Pq(),Qq),new EO(this))};_.a=null;function EO(a){this.a=a}w(747,1,{},EO);_.pd=function(){this.a.a.c&&(XC(this.a.a.c),AK(this.a.a))};_.a=null;\nfunction FO(a,b){var c;c=b.a;c.e=4;return vJ(a.a.c,c,b.d,b.e)}function pO(a){this.a=a}w(748,1,{},pO);_.Ph=function(a){return FO(this,a)};_.a=null;function Iv(a,b){zI(a.a.c,b.a,b.d,b.e);return vJ(a.a.c,b.a,b.d,b.e)}function qO(a){this.a=a}w(749,1,{},qO);_.Ph=function(a){return Iv(this,a)};_.a=null;function rO(a){this.a=a}w(750,1,{},rO);_.Ph=function(a){return EJ(this.a.c,a.a,a.d,a.e)};_.a=null;function sO(a){this.a=a}w(751,1,{},sO);_.Ph=function(){return MJ(this.a.c)};_.a=null;\nfunction Au(a,b){var c;c=J(Q(b.b));c=new VE(b,0,Hj,c);NG(a.a.c,c);return!0}function tO(a){this.a=a}w(752,1,{},tO);_.Ph=function(a){return Au(this,a)};var GO=_.a=null;function HO(){HO=x;GO=new sx((Jx(),new Ix("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAEklEQVR42mM4MzPtPzJmIF0AAOqfLKHtSuV7AAAAAElFTkSuQmCC")),4,4)}function IO(){IO=x;JO={}}\nfunction KO(a,b,c){var d;c&&(b.style[Fh]=c.b+uj,d=c.a,d!=Ne&&(b.style[Eh]=d),0!=(c.c&1)&&(b.style[Hh]=Gg),0!=(c.c&2)&&(b.style[Gh]=ji));a.e.style[Kk]=aj}\nfunction aE(a){var b=LO,c,d,e,f,g,h,j,l,n,o,r,t,y;c=Yp(a);c in JO?a=JO[c]:(d=$doc.getElementsByTagName("body")[0],e=$doc.createElement($j),f=$doc.createElement(hi),f.style[ph]=(ls(),"inline"),f.style[Hk]=(mt(),"baseline"),f.style[zi]=Dc,f.style[Ai]=Dc,f.width=1,f.height=1,g=(HO(),GO),f.src=g.d.a,a=(h=$doc.createTextNode(Cf),KO(b,e,a),e.appendChild(h),e.appendChild(f),d.appendChild(e),j=er(e),l=er(e)+(e.offsetHeight||0),n=l-j,o=er(f)+(f.offsetHeight||0)+1,r=l-o,t=o-j,d.removeChild(e),y=new MO,y.a=\nt,y.b=r,y.c=n,y),JO[c]=a);return a}function NO(){IO();var a,b,c,d,e;Ss();this.a=z(Kw,q,1,["monospace","sans-serif",Tj]);this.c={};this.b={};this.d=$doc.getElementsByTagName("body")[0];this.e=$doc.createElement($j);ir(this.e,this.f);this.e.style[Fh]="72.0px";for(b=this.a,c=0,d=b.length;c=g?h=xH(a,b,c,d,e):h=(j=f+g,l=0,jg)&&(n=1),o=b+d/2,r=c+e/2,t=d/2,y=e/2,v=TO(o,r,t,y,f),s=TO(o,r,t,y,j),A=" text { cursor: default; } <\/style>":\nm;b=c+d+b+qd;b!==a.q&&(ir(a.t.pb,b),a.q=b);a.o=!0;a.p=!1}}function RH(a,b){(a.e=b)&&(a.f=UO(b))}function tK(a,b){var c,d,e;a.i=(c=b.b,d=b.a,e=m,12!=c&&(e=\' font-size="\'+c+\'px"\'),"Plain"!=d&&(e+=\' font-family="\'+d+oa),0!=(b.c&1)&&(e+=\'font-weight="bold"\'),0!=(b.c&2)&&(e+=\'font-style="italic"\'),e)}function QH(a,b){(a.n=b)&&b&&(a.c=\'stroke-width="\'+(b.e==Gw(b.e)?m+Gw(b.e):m+b.e)+pa)}w(763,507,{});_.d=null;_.e=null;_.f=Dg;_.i=null;_.j=!0;_.k=null;_.o=!1;_.p=!1;_.q=m;_.r=0;_.s=0;_.t=null;_.u=null;\nvar SO,RO;function Ev(a,b){var c;c=b.a.targetTouches;return 1==c.length?(c=c[0],a.b.d=c.clientX-br(a.o.pb)+qr(a.o.pb)+xr(a.o.pb.ownerDocument),a.b.e=c.clientY-er(a.o.pb)+(a.o.pb.scrollTop||0)+yr(a.o.pb.ownerDocument),a.b.a=new DO(b),b.a.preventDefault(),!0):!1}\nfunction oO(a){this.o=a;this.b=new VO;this.c=new WO(this);Zy(this.o,new XO(this),(Fv(),Fv(),Gv));Zy(this.o,new YO(this),(xv(),xv(),yv));Zy(this.o,new ZO(this),(Bv(),Bv(),Cv));Zy(this.o,new $O(this),(tv(),tv(),uv));Zy(this.o,new aP,(Gu(),Gu(),Hu));Zy(this.o,new bP(this),(Cu(),Cu(),Du));Zy(this.o,new cP(this),(xu(),xu(),yu))}w(764,1,{},oO);_.a=null;_.b=null;_.c=null;_.d=!1;_.e=null;_.f=null;_.i=null;_.j=null;_.k=null;_.n=null;_.o=null;function WO(a){Tm();this.a=a}w(765,67,{},WO);\n_.zd=function(){!this.a.d&&this.a.i&&FO(this.a.i,this.a.b)};_.a=null;function XO(a){this.a=a}w(766,1,{},XO);_.a=null;function YO(a){this.a=a}w(767,1,{},YO);_.a=null;function ZO(a){this.a=a}w(768,1,{},ZO);_.a=null;function $O(a){this.a=a}w(769,1,{},$O);_.a=null;function aP(){}w(770,1,{},aP);function bP(a){this.a=a}w(771,1,{},bP);_.a=null;function cP(a){this.a=a}w(772,1,{},cP);_.a=null;function VO(){}w(773,1,{},VO);_.a=null;_.b=0;_.c=0;_.d=0;_.e=0;\nfunction UO(a){var b,c;c=a.d>>16&255;b=a.d>>8&255;a=a.d&255;if(0==c*b*a){if(0==c&&0==b&&0==a)return Dg;if(255==c&&0==b&&0==a)return"red";if(0==c&&255==b&&0==a)return"green";if(0==c&&0==b&&255==a)return Eg}return 255==c&&255==b&&255==a?"white":Ej+c+nb+b+nb+a+jb}function KK(){var a=$wnd.navigator.userAgent.match(/MSIE\\s+(\\d+\\.\\d+)/);return a?parseFloat(a[1]):-1}\nfunction dP(a){var b,c,d,e,f;ez(a);d=(fz(),yB(null));e=new PO;FA(e,a);oz(d,e,d.pb);f=a.le();b=a.ke();c=KK();9<=c?(++f,++b):7==c&&G(a,40)&&(c=a.pb.textContent,2>=c.length&&(f+=8));HA(e,a);xz(d,e);return new tC(f,b)}function OF(a){try{$wnd.console.log(a)}catch(b){}}function eP(){this.pb=$doc.createElement(qh);this.pb[Xg]=li;this.pb.style[lj]=di;this.pb.style[rj]=ig;this.pb.style[Lk]=Gc;this.pb.style[ci]=Gc;this.pb.setAttribute("contenteditable",Ch)}w(775,388,Ul,eP);\nfunction TO(a,b,c,d,e){e*=0.017453292519943295;a+=c*Math.cos(e);b+=-d*Math.sin(e);return new OO(new YL(a),new YL(b))}function xH(a,b,c,d,e){return\'=f.k||(701==f.k?null.ii():401==f.k||402==f.k?(null.ii(),null.ii(),null.ii(),null.ii(),null.ii()):500<=f.k&&507>=f.k&&(g=null.ji,500!=g&&(g=new Ou(null.ji,g,null),g.i=f.f,g.j=f.i,f=f.j&63,g.e=f&12)))}function iP(a){this.a=a}w(785,1,Kl,iP);_.pd=function(){iB(this)};_.a=null;function CE(){fP();hP.call(this);this.a=new NB}w(786,778,{},CE);_.Mf=zx;_.a=null;function FE(){new dw;var a;a:{switch(Hw){case 1:case 3:case 5:case 7:a=new kP;break a}a=new lP}this.a=a}w(799,531,{},FE);_.a=null;\nfunction lP(){}w(801,1,{},lP);_.ei=function(a){a&&a&&Bq(8,new mP(a));return null};_.fi=function(a){Bq(8,new nP(a))};function kP(){}w(800,801,{},kP);_.ei=function(){return $wnd.clipboardData.getData("Text")};_.fi=function(a){$wnd.clipboardData.setData("Text",a)};function mP(a){this.a=a}w(804,1,Yl,mP);_.Dd=HC;_.a=null;function nP(a){this.a=a}w(806,1,Yl,nP);_.Dd=HC;_.a=null;function wu(a,b){a.onloadend=function(a){b._f(a.target.result)}}function WF(a){this.a=a}w(811,1,{},WF);_.a=null;\nfunction TF(){}w(812,1,{},TF);function UF(){}w(813,1,{},UF);function VF(){}w(814,1,{},VF);function DE(){this.b=new GE;this.d=new gD}w(817,529,{},DE);function xI(a,b,c,d){b=nC(b);c+=b.a;d+=b.b;Nz(a.a,c,d);Oz(a.a)}function mE(){fP();hP.call(this);var a=this.a=new oP;a.ab=!0;a.a.f=!0;this.a.db=!0}w(819,778,{},mE);_.Mf=zx;_.a=null;function kF(){}w(827,558,{},kF);\nfunction hF(){hF=x;var a;a=(ZE(),$E["os.encoding"]);if(null!=a)try{if(H("UTF-8",a))kM(m);else if(H("ISO-8859-1",a)||H("ISO-LATIN-1",a))D(lM,cm,-1,0,1);else throw new HL(a+ma);}catch(b){if(b=Hq(b),!G(b,107))throw b;}}function gE(a,b){a.a=31*a.a+Gw((new YL(b)).a)}function mD(){}w(832,1,{},mD);_.hC=zx;_.a=1;\nfunction oP(){Iz();var a=(Xz(),$z);Qz.call(this,!0,Fi);this.U=a.a;this.a=new pP(this);this.a.d=!0;Dz(this,this.a);this.ab=!0;this.a.f=!0;-1==this.lb?Hy(this.pb,1|(this.pb.__eventBits||0)):this.lb|=1;(Pz?lr(this.pb):mr(lr(this.pb)))[Xg]=$h;this.pb.style[Nk]="2147483647"}w(863,390,Sl,oP);_.ee=function(a){cz(this,a);1==Ux(a.type)&&Kz(this,!1)};_.a=null;\nfunction pP(a){this.b=a;this.c=new Om;this.i=new Om;a=(lB(),kB);new cC(a.d,a.b,a.c,a.e,a.a);var b;b=$doc.createElement(fk);this.e=$doc.createElement(kk);Ox(b,this.e);this.o=!0;a=sA();b=(Px(),Qx(b));a.appendChild(b);this.pb=a;eo();this.pb.setAttribute(Gj,Io.a);-1==this.lb?Hy(this.pb,2225|(this.pb.__eventBits||0)):this.lb|=2225;this.pb[Xg]=Zh;a=Py(this.pb)+"-vertical";Ky(this.me(),a,!0);this.pb.style[kj]=Ec;this.pb.setAttribute("hideFocus",Dk);Zy(this,new jB(this),(Pt(),Pt(),Qt))}w(864,430,Ul,pP);\n_.ee=function(a){switch(Ux(a.type)){case 16:this.a=!1;break;case 32:this.a=!0}bB(this,a)};_.Oe=function(a,b){fB(this,a,b);b||this.a&&Kz(this.b,!1)};_.a=!0;_.b=null;w(913,1,{});\nfunction qP(a,b,c,d){var e,f,g,h,j,l;h=(!c?b.b:tF(b,c,~~Yp(c)))[0][d.length];b=j=e=null;for(c=0,f=!h?0:h.length;c\',Ea=\'">\',Ga="#",Ka="$",La="$$$$",Na="$MOL\\n",Qa="$RXN",Ra="$RXN\\n\\n\\nJME Molecular Editor\\n",Sa="%",Ta="&",Xa="&",$a=">",bb="<",cb="\'",db="(",jb=")",lb="*",mb="+",nb=",",qb=", ",tb=",modifiers=",ub="-",vb="-C#C-Me",yb="-C#CH",zb="-C#N",Bb="-C(=O)N",Cb="-C(=O)OH",Jb="-C(=O)OMe",\nLb="-CCl3",Mb="-CF3",Nb="-CMe3",Pb="-NC=O",Rb="-NH-SO2-Me",Sb="-NMe2",Tb="-NO2",Ub="-OC(=O)Me",Vb="-SO2-NH2",Wb="-SO3H",Xb="-disabled",Zb="-selected",bc=".",mc="...",nc="/",sc="//",wc="/>",xc="0",Dc="0.0px",Ec="0px",Fc="1",Gc="100%",Ic="1px",Pc="2",Qc="3",Rc="4",Tc="5",Uc="6",Vc="7",Yc="8",Zc="9",gd=":",hd=": ",id=";",od="<",pd="<\/g>",qd="<\/svg>",rd="<\/text>",ud=\'b?{}:new ml[b],_.cM=c);for(var e=3;e=a.u+a.n;if(a.q&&!d)return d=(b-a.u)/a.n,a.td((1+Math.cos(3.141592653589793+3.141592653589793*d))/2),a.p&&a.s==c;if(!a.q&&b>=a.u&&(a.q=!0,a.sd(),!(a.p&&a.s==c)))return!1;return d?(a.p=!1,a.q=!1,a.rd(),!1):!0}w(58,1,{});_.qd=function(){this.v&&this.rd()};\n_.rd=function(){this.td((1+Math.cos(6.283185307179586))/2)};_.sd=function(){this.td((1+Math.cos(3.141592653589793))/2)};_.n=-1;_.o=null;_.p=!1;_.q=!1;_.r=null;_.s=-1;_.t=null;_.u=-1;_.v=!1;function Em(a,b){Fm(a.a,b)?a.a.r=a.a.t.vd(a.a.k,a.a.o):a.a.r=null}function Gm(a){this.a=a}w(59,1,{},Gm);_.ud=function(a){Em(this,a)};_.a=null;w(60,1,{});w(61,1,cm);function Hm(){Hm=x;var a;(a=new Im)&&(a.xd()||(a=new Jm));Km=a}w(62,60,{});var Km=null;\nfunction Lm(a,b){var c=C(function(){if(!b.a){var c=Dm();a.ud(c)}});$wnd.mozRequestAnimationFrame(c)}function Im(){}w(63,62,{},Im);_.xd=function(){return!!$wnd.mozRequestAnimationFrame};_.vd=function(a){var b;b=new Mm;Lm(a,b);return b};function Mm(){}w(64,61,cm,Mm);_.wd=function(){this.a=!0};_.a=!1;function Jm(){this.a=new Nm;this.b=new Om(this)}w(65,62,{},Jm);_.xd=function(){return!0};_.vd=function(a){a=new Pm(this,a);Qm(this.a,a);1==this.a.c&&Rm(this.b,16);return a};\nfunction Sm(){Sm=x;Tm=new Nm;var a=new Um;Vm();Wm(Xm?Xm:Xm=new Ym,a)}function Zm(a){a.b?$wnd.clearInterval(a.c):$wnd.clearTimeout(a.c);$m(Tm,a)}function Rm(a,b){if(0>b)throw new an("must be non-negative");a.b?$wnd.clearInterval(a.c):$wnd.clearTimeout(a.c);$m(Tm,a);a.b=!1;a.c=bn(a,b);Qm(Tm,a)}function bn(a,b){return $wnd.setTimeout(C(function(){a.yd()}),b)}w(67,1,{});_.yd=function(){this.b||$m(Tm,this);this.zd()};_.b=!1;_.c=0;var Tm;function Om(a){Sm();this.a=a}w(66,67,{},Om);\n_.zd=function(){var a=this.a,b,c,d,e,f;b=D(cn,q,14,a.a.c,0);b=dn(a.a,b);c=new en;for(e=0,f=b.length;eDm()-d.a;){e=!1;for(f=0;f=a.a.d)break a;b=d[e];c=new FileReader;vu(c,a.a.b);1==a.a.c&&c.readAsText(b)}0==d.length&&(b=(this.a.dataTransfer||null).getData(lk),a.a.b._f(b))};_.Kd=function(){return tu};var tu;function wu(){wu=x;xu=new Qt(Oh,new yu)}function yu(){}w(285,266,{},yu);\n_.Hd=function(a){var b,c;b=this.a.rotation;c=this.a.scale;a.a.e&&(0!=b&&a.a.b.b!=b&&(a.a.b.b=b,a.a.b.a=null,zu(a.a.e,a.a.b)&&this.a.preventDefault()),a.a.d=!0);a.a.f&&(1!=c&&a.a.b.c!=c&&(a.a.b.a=null,a.a.b.c=c,Au(a.a.f,a.a.b)&&this.a.preventDefault()),a.a.d=!0)};_.Kd=function(){return xu};var xu;function Bu(){Bu=x;Cu=new Qt(Ph,new Du)}function Du(){}w(286,266,{},Du);_.Hd=function(a){a.a.a&&(a.a.b.a=null,Eu(a.a.a,a.a.b))};_.Kd=function(){return Cu};var Cu;function Fu(){Fu=x;Gu=new Qt(Qh,new Hu)}\nfunction Hu(){}w(287,266,{},Hu);_.Hd=function(){this.a.preventDefault()};_.Kd=function(){return Gu};var Gu;w(289,266,{});w(288,289,{});function Iu(){Iu=x;Ju=new Qt(li,new Ku)}function Ku(){}w(290,288,{},Ku);\n_.Hd=function(a){var b,c;c=this.a.keyCode||0;0<=c&&c<(Lu(),Mu).length&&-999!=(Lu(),Mu)[c]&&(c=(Lu(),Mu)[c]);b=new Nu(null,c,null);if(this.a.ctrlKey||this.a.shiftKey||this.a.metaKey||this.a.altKey)this.a.ctrlKey&&(b.e|=2),this.a.altKey&&(b.e|=8),this.a.metaKey&&(b.e|=4),this.a.shiftKey&&(b.e|=1);a:{var a=a.a.c,d=c,e;a.Gb=!1;if(!a.J||a.K){Ou(a,m);c=0;e=8==b.e;b=0!=(b.e&2);switch(d){case 99:case 67:b?Pu(ru(a,!0,!1)):c=301;break;case 118:case 86:b&&a.Tb&&(b=a.r,null==b.i&&(b.i="PASTE"),Qu(a.E,(!a.Ub&&\n(a.Ub=new Ru(a)),a.Ub)));break;case 110:case 78:c=401;break;case 111:case 79:c=501;break;case 115:case 83:c=601;break;case 112:case 80:c=1101;break;case 102:case 70:c=701;break;case 108:case 76:c=801;break;case 98:case 66:c=901;break;case 105:case 73:c=1001;break;case 120:case 88:a.Bc&&(Ou(a,gr((Su(),Tu).Tc.a.pb,Fk)),c=1201,a.n=32);break;case 104:case 72:Ou(a,We);c=1300;break;case 114:case 82:Ou(a,"-R");c=1301;break;case 116:case 84:701==a.k?(c=236,Ou(a,Mb)):801==a.k?(c=237,Ou(a,Lb)):(c=233,Ou(a,\n"-tBu"));break;case 121:case 89:b?c=111:(c=234,Ou(a,Tb));break;case 122:case 90:b?c=110:(c=239,Ou(a,Wb));break;case 97:case 65:c=235;Ou(a,"-COOH");break;case 101:case 69:c=238;Ou(a,yb);break;case 117:case 85:c=110;break;case 113:case 81:c=242;Ou(a,zb);break;case 103:a=!0;break a;case 27:c=202;break;case 45:701==a.k?(c=254,Ou(a,"-F")):801==a.k?(c=255,Ou(a,"-Cl")):901==a.k?(c=256,Ou(a,"-Br")):1001==a.k?(c=257,Ou(a,"-I")):501==a.k?(c=259,Ou(a,"-OH")):401==a.k?(c=258,Ou(a,"-NH2")):c=202;break;case 43:c=\n108;break;case 35:c=204;break;case 48:105==a.k?Uu(a,0):e?(c=223,Ou(a,"-3-Furyl")):(c=221,Ou(a,"-Furyl"));break;case 49:105==a.k?Uu(a,1):c=209;break;case 50:case 61:50==d&&105==a.k?Uu(a,2):501==a.k?(c=250,Ou(a,"=O")):c=203;break;case 51:105==a.k?Uu(a,3):c=206;break;case 52:105==a.k?Uu(a,4):c=207;break;case 53:105==a.k?Uu(a,5):c=208;break;case 54:105==a.k?Uu(a,6):c=210;break;case 55:105==a.k?Uu(a,7):c=211;break;case 56:105==a.k?Uu(a,8):c=212;break;case 57:105==a.k?Uu(a,9):(Ou(a,"9 ring"),c=229);break;\ncase 100:case 68:case 8:case 127:c=104;break;case 32:c=205;break;case 109:case 77:case 1002:c=151;break;case 119:case 87:case 1003:c=152;break;case 1E3:c=153;break;case 1001:c=154}d=d+1-49;0<=d&&9>=d&&0=b&&(c=1301+d));Vu(a,c)}a=!0}a&&this.a.preventDefault()};_.Kd=function(){return Ju};var Ju;function Wu(){Wu=x;Xu=new Qt(Li,new Yu)}function Yu(){}w(291,271,Sl,Yu);_.Hd=function(a){a.ld(this)};_.Kd=function(){return Xu};var Xu;\nfunction Zu(){Zu=x;$u=new Qt(Mi,new av)}function av(){}w(292,271,Sl,av);_.Hd=function(a){a.md(this)};_.Kd=function(){return $u};var $u;function bv(){bv=x;cv=new Qt(Ni,new dv)}function dv(){}w(293,271,Sl,dv);_.Hd=function(a){a.nd(this)};_.Kd=function(){return cv};var cv;function ev(){ev=x;fv=new Qt(Oi,new gv)}function gv(){}w(294,271,Sl,gv);_.Hd=function(a){var b;b=this.a;Rq((Oq(),Pq),new hv(a,a.b,b))};_.Kd=function(){return fv};var fv;function iv(){iv=x;jv=new Qt(Pi,new kv)}function kv(){}\nw(295,271,Sl,kv);_.Hd=function(a){a.od(this)};_.Kd=function(){return jv};var jv;function lv(){lv=x;mv=new Qt(Qi,new nv);new Qt(Ke,new nv)}function nv(){}w(296,271,Sl,nv);_.Hd=function(a){var b,c,d,e,f;b=this.a.detail||0;b=new ov(a.a.i,Ut(this),Vt(this),b);f=0;for(c=pv(a.a.i.Pc,D(qv,q,77,0,0)),d=0,e=c.length;da.qI&&(c.tM==x||c.cM&&c.cM[1])&&(!c.cM||!c.cM[-a.qI]))throw new Dw;}return a[b]=c}w(326,1,{},ww);_.qI=0;function Aw(){Aw=x;Bw=[];Cw=[];var a=new ww,b=Bw,c=Cw,d=0,e,f;for(f in a)if(e=a[f])b[d]=f,c[d]=e,++d}var Bw,Cw;function G(a,b){return null!=a&&a.cM&&!!a.cM[b]}function Rp(a){return null!=a&&a.tM!=x&&!(a.cM&&a.cM[1])}function Up(a){return a.tM==x||a.cM&&!!a.cM[1]}\nfunction Ew(a){return null==a?null:a}function Fw(a){return~~Math.max(Math.min(a,2147483647),-2147483648)}var Gw=-1;\nfunction Hw(){var a;$stats&&Iw("com.google.gwt.useragent.client.UserAgentAsserter");a=navigator.userAgent.toLowerCase();if(-1!=a.indexOf(gj))a=gj;else if(-1!=a.indexOf("webkit"))a="safari";else if(-1!=a.indexOf(Si)&&9<=$doc.documentMode)a="ie9";else if(-1!=a.indexOf(Si)&&8<=$doc.documentMode)a="ie8";else{var b;var c=/msie ([0-9]+)\\.([0-9]+)/.exec(a);c&&3==c.length&&(b=6E3<=1E3*parseInt(c[1])+parseInt(c[2]));a=b?"ie6":-1!=a.indexOf("gecko")?Nh:"unknown"}H(Nh,a)||$wnd.alert("ERROR: Possible problem with your *.gwt.xml module file.\\nThe compile time user.agent value (gecko1_8) does not match the runtime user.agent value ("+\na+"). Expect more errors.\\n");$stats&&Iw("com.google.gwt.user.client.DocumentModeAsserter");b=$doc.compatMode;a=z(Jw,q,1,[qe]);for(c=0;c>22&4194303,0>a?1048575:0)}\nfunction Rw(a){return Qw(a.l,a.m,a.h)}function Qw(a,b,c){return _=new Sw,_.l=a,_.m=b,_.h=c,_}\nfunction Tw(a,b){var c,d,e,f,g;if(0==b.l&&0==b.m&&0==b.h)throw new Uw;if(0==a.l&&0==a.m&&0==a.h)return Vw=Qw(0,0,0),Qw(0,0,0);if(524288==b.h&&0==b.m&&0==b.l)return c=a,524288==c.h&&0==c.m&&0==c.l?(Vw=Qw(0,0,0),c=Rw((Ww(),Xw))):(Vw=Qw(c.l,c.m,c.h),c=Qw(0,0,0)),c;g=!1;0!=b.h>>19&&(b=Yw(b),g=!0);e=b.l;0!=(e&e-1)?f=-1:(d=b.m,0!=(d&d-1)?f=-1:(c=b.h,f=0!=(c&c-1)||0==c&&0==d&&0==e?-1:0==c&&0==d&&0!=e?Zw(e):0==c&&0!=d&&0==e?Zw(d)+22:0!=c&&0==d&&0==e?Zw(c)+44:-1));c=d=e=!1;if(524288==a.h&&0==a.m&&0==a.l)if(e=\nd=!0,-1==f)a=Rw((Ww(),$w)),c=!0,g=!g;else return c=ax(a,f),g&&bx(c),Vw=Qw(0,0,0),c;else 0!=a.h>>19&&(e=!0,a=Yw(a),c=!0,g=!g);if(-1!=f){c=a;d=f;f=g;g=e;e=ax(c,d);f&&bx(e);var h;22>=d?(f=c.l&(1<=d?(f=c.l,h=c.m&(1<r?j=\n!1:(n=j.l-f.l,o=j.m-f.m+(n>>22),r+=o>>22,0>r?j=!1:(j.l=n&4194303,j.m=o&4194303,j.h=r&1048575,j=!0));if(j&&(22>l?h.l|=1<l?h.m|=1<>>1;f.m=j>>>1|(n&1)<<21;f.l=o>>>1|(j&1)<<21;--l}g&&bx(h);e?(Vw=Yw(c),d&&(Vw=fx(Vw,(Ww(),Xw)))):Vw=Qw(c.l,c.m,c.h);return h}function bx(a){var b,c,d;b=~a.l+1&4194303;c=~a.m+(0==b?1:0)&4194303;d=~a.h+(0==b&&0==c?1:0)&1048575;a.l=b;a.m=c;a.h=d}\nfunction dx(a){var b;b=gx(a.h);return 32==b?(b=gx(a.m),32==b?gx(a.l)+32:b+20-10):b-12}var Vw=null;function hx(a,b){return a.l==b.l&&a.m==b.m&&a.h==b.h}function J(a){var b,c,d;if(isNaN(a))return Ww(),ix;if(-9223372036854775E3>a)return Ww(),jx;if(9223372036854775E3<=a)return Ww(),$w;d=!1;0>a&&(d=!0,a=-a);c=0;17592186044416<=a&&(c=Fw(a/17592186044416),a-=17592186044416*c);b=0;4194304<=a&&(b=Fw(a/4194304),a-=4194304*b);a=Fw(a);b=Qw(a,b,c);d&&bx(b);return b}\nfunction kx(a){var b,c;return-129a?(b=a+128,null==lx&&(lx=D(mx,q,32,256,0)),c=lx[b],!c&&(c=lx[b]=Pw(a)),c):Pw(a)}function nx(a){var b=Qk,c,d;c=a.h>>19;d=b.h>>19;return 0==c?0!=d||a.h>b.h||a.h==b.h&&a.m>b.m||a.h==b.h&&a.m==b.m&&a.l>b.l:!(0==d||a.h>19;d=b.h>>19;return 0==c?0!=d||a.h>b.h||a.h==b.h&&a.m>b.m||a.h==b.h&&a.m==b.m&&a.l>=b.l:!(0==d||a.h>13|(a.m&15)<<9;e=a.m>>4&8191;f=a.m>>17|(a.h&255)<<5;g=(a.h&1048320)>>8;h=b.l&8191;j=b.l>>13|(b.m&15)<<9;l=b.m>>4&8191;n=b.m>>17|(b.h&255)<<5;o=(b.h&1048320)>>8;r=c*h;y=d*h;t=e*h;v=f*h;g*=h;0!=j&&(y+=c*j,t+=d*j,v+=e*j,g+=f*j);0!=l&&(t+=c*l,v+=d*l,g+=e*l);0!=n&&(v+=c*n,g+=d*n);0!=o&&(g+=c*o);c=(r&4194303)+((y&511)<<13);r=(r>>22)+(y>>9)+((t&262143)<<4)+((v&31)<<17)+(c>>22);t=(t>>18)+(v>>5)+((g&4095)<<8)+(r>>22);return Qw(c&4194303,r&\n4194303,t&1048575)}function Yw(a){var b,c;b=~a.l+1&4194303;c=~a.m+(0==b?1:0)&4194303;return Qw(b,c,~a.h+(0==b&&0==c?1:0)&1048575)}function ex(a,b){var c,d,e,b=b&63;22>b?(c=a.l<>22-b,e=a.h<>22-b):44>b?(c=0,d=a.l<>44-b):(d=c=0,e=a.l<b?(e=c>>b,d=a.m>>b|c<<22-b,c=a.l>>b|a.m<<22-b):44>b?(e=d?1048575:0,d=c>>b-22,c=a.m>>b-22|c<<44-b):(e=d?1048575:0,d=d?4194303:0,c>>=b-44);return Qw(c&4194303,d&4194303,e&1048575)}function fx(a,b){var c,d;c=a.l-b.l;d=a.m-b.m+(c>>22);return Qw(c&4194303,d&4194303,a.h-b.h+(d>>22)&1048575)}function P(a){return a.l|a.m<<22}\nfunction px(a){var b,c,d;if(0==a.l&&0==a.m&&0==a.h)return xc;if(524288==a.h&&0==a.m&&0==a.l)return"-9223372036854775808";if(0!=a.h>>19)return ub+px(Yw(a));for(c=m;!(0==a.l&&0==a.m&&0==a.h);){b=kx(1E9);a=Tw(a,b);b=m+P(Vw);if(!(0==a.l&&0==a.m&&0==a.h))for(d=9-b.length;0=c))vh==vh&&(a.ondragexit=Ay);else switch(b){case "drag":a.ondrag=zy;break;case th:a.ondragend=zy;break;case uh:a.ondragenter=Ay;break;case wh:a.ondragleave=zy;break;case xh:a.ondragover=Ay;break;case yh:a.ondragstart=zy;break;case zh:a.ondrop=zy;break;case "canplaythrough":case "ended":case "progress":a.removeEventListener(b,zy,!1);a.addEventListener(b,zy,!1);break;default:throw"Trying to sink unknown event type "+b;}}\nvar Dy=null,xy=null,Cy=null,Ay=null,zy=null,By=null;function uy(){$wnd.addEventListener(Ni,C(function(a){var b=Dy;if(b&&!a.relatedTarget&&"html"==a.target.tagName.toLowerCase()){var c=$doc.createEvent("MouseEvents");c.initMouseEvent(Pi,!0,!0,$wnd,0,a.screenX,a.screenY,a.clientX,a.clientY,a.ctrlKey,a.altKey,a.shiftKey,a.metaKey,a.button,null);b.dispatchEvent(c)}}),!0);$wnd.addEventListener(Ke,Cy,!0)}\nfunction Gy(a,b){Vx();var c=(a.__eventBits||0)^b;a.__eventBits=b;c&&(c&1&&(a.onclick=b&1?zy:null),c&2&&(a.ondblclick=b&2?zy:null),c&4&&(a.onmousedown=b&4?zy:null),c&8&&(a.onmouseup=b&8?zy:null),c&16&&(a.onmouseover=b&16?zy:null),c&32&&(a.onmouseout=b&32?zy:null),c&64&&(a.onmousemove=b&64?zy:null),c&128&&(a.onkeydown=b&128?zy:null),c&256&&(a.onkeypress=b&256?zy:null),c&512&&(a.onkeyup=b&512?zy:null),c&1024&&(a.onchange=b&1024?zy:null),c&2048&&(a.onfocus=b&2048?zy:null),c&4096&&(a.onblur=b&4096?zy:\nnull),c&8192&&(a.onlosecapture=b&8192?zy:null),c&16384&&(a.onscroll=b&16384?zy:null),c&32768&&(a.onload=b&32768?By:null),c&65536&&(a.onerror=b&65536?zy:null),c&131072&&(a.onmousewheel=b&131072?zy:null),c&262144&&(a.oncontextmenu=b&262144?zy:null),c&524288&&(a.onpaste=b&524288?zy:null),c&1048576&&(a.ontouchstart=b&1048576?zy:null),c&2097152&&(a.ontouchmove=b&2097152?zy:null),c&4194304&&(a.ontouchend=b&4194304?zy:null),c&8388608&&(a.ontouchcancel=b&8388608?zy:null),c&16777216&&(a.ongesturestart=b&16777216?\nzy:null),c&33554432&&(a.ongesturechange=b&33554432?zy:null),c&67108864&&(a.ongestureend=b&67108864?zy:null));b&131072&&a.addEventListener(Ke,zy,!1)}w(381,1,ul);_.ge=function(a){return decodeURI(a.replace("%23",Ga))};_.$d=function(a){aw(this.a,a)};_.he=function(a){a=null==a?m:a;if(!H(a,null==Hy?m:Hy))Hy=a,Ov&&(a=new Nv,aw(this.a,a))};var Hy=m;\nfunction dy(){function a(){$wnd.setTimeout(a,250);e()}var b=by,c=m,d=$wnd.location.hash;0d||d>a.p.c)throw new qz;b.ob==a&&(f=a.Ae(b),fd||d>=c.c)throw new qz;for(--c.c;d<\/div>"),Rq((Oq(),Pq),new Uz(d)));c.appendChild(d);this.Le(0,0);(Oz?kr(this.pb):lr(kr(this.pb)))[Xg]="gwt-PopupPanel";(Oz?kr(kr(this.pb)):kr(this.pb))[Xg]=pj;this.W=this.V=a;this.db=!1;c=z(Jw,q,1,[b+"Top",b+"Middle",b+"Bottom"]);this.T=new Vz(c);c=m;this.T.me()[Xg]=c;c=Oz?kr(this.pb):lr(kr(this.pb));if(!c)throw new Np(zf);d=Ry("gwt-DecoratedPopupPanel");\nif(0==d.length)throw new an(Pf);var e=c.className.split(/\\s+/);if(e){var f=e[0],g=f.length;e[0]=d;for(var h=1,j=e.length;hg&&l.charAt(g)==ub&&0==l.indexOf(f)&&(e[h]=d+l.substring(g))}c.className=e.join(ha)}Ez(this,this.T);Lz(this);Jy(Oz?kr(kr(this.pb)):kr(this.pb),pj,!1);Jy(this.T.b,b+"Content",!0)}w(391,392,Ql);_.se=function(){$y(this.T)};_.te=function(){cz(this.T)};_.He=function(){return this.T.jb};_.Ce=function(){return new Gz(this.T)};_.ze=function(a){return this.T.ze(a)};\n_.Ie=function(a){Ez(this.T,a);Lz(this)};_.T=null;w(390,391,Ql);_.we=iz;function Wz(){Wz=x;Xz=new Yz(0,(Rz(),Sz));Zz=new Yz(1,$z);aA=new Yz(2,bA);cA=z(dA,q,39,[Xz,Zz,aA])}function Yz(a,b){this.b=a;this.a=b}w(394,195,{39:1,90:1,95:1,97:1},Yz);_.a=null;var cA,Xz,Zz,aA;function eA(){eA=x;fA=z(Jw,q,1,[sk,Ji,Jg])}\nfunction Vz(a){var b;eA();var c,d;c=this.pb=$doc.createElement(ek);this.c=$doc.createElement(jk);Nx(c,this.c);c[Rg]=0;for(c=c[Ng]=0;c";h=new xx(c.a.a);g=(hr(g,h.a),kr(g));a.kb&&(a.pb.__listener=\nnull);if(a.pb&&(h=a.pb,b=h.parentNode))b.insertBefore(g,h),b.removeChild(h);a.pb=g;a.kb&&(a.pb.__listener=a);-1==a.lb?Gy(a.pb,133333119|(a.pb.__eventBits||0)):a.lb|=133333119}w(423,424,{},MA);_.a=0;_.b=0;_.c=0;_.d=null;_.e=0;function NA(a,b){this.a=a;this.b=b}w(425,1,{},NA);_.pd=function(){var a,b;this.b.a!=this.a||this!=this.a.f||(this.a.f=null,this.b.kb?(a=(b=$doc.createEvent("HTMLEvents"),b.initEvent(ui,!1,!1),b),this.b.pb.dispatchEvent(a)):this.b.pb.__gwtLastUnhandledEvent=ui)};_.a=null;_.b=null;\nw(427,355,Pl);function TA(a){this.a=a}w(429,427,Pl,TA);_.Wd=function(a){this.a.Oe(a.f,a.a)};function UA(a,b,c){var d;if(a.o){var e=d=$doc.createElement(yk);Ey(a.e,(Ox(),Px(e)),b);a=(Ox(),Px(c));d.appendChild(a)}else d=vy(a.e,0),Ey(d,(Ox(),Px(c)),b)}\nfunction VA(a,b,c){var d;b.b&&(WA(a,b),c&&b.a?(WA(a,null),a=b.a,b=(Oq(),Pq),b.c=Sq(b.c,[new XA(a),!1])):null!=b.d&&(a.j=new YA(a,b),c=(Rz(),$z),a.j.U=c,a.j.ab=a.f,c=$h,a.j.me()[Xg]=c,d=Oy(a.pb),H(Zh,d)||Iy(a.j,d+"Popup"),Zy(a.j,new TA(a),Xm?Xm:Xm=new Ym),a.n=b.d,d=a.j,a=new ZA(a,b),d.pb.style[Hk]=di,Nz(d),tw(),a.a.o?Mz(a.a.j,ar(a.a.pb)+fr(a.a.pb,ej)-1,dr(a.b.pb)):Mz(a.a.j,ar(a.b.pb),dr(a.a.pb)+fr(a.a.pb,dj)-1),d.pb.style[Hk]=Ik))}\nfunction $A(a,b){!b&&a.k&&a.n==a.k.d||b&&!b.b||(WA(a,b),a.pb.focus(),b&&a.d&&VA(a,b,!1))}\nfunction aB(a,b){var c;a:{c=b.target;var d,e;for(e=new fw(a.i);e.bc&&(c=a.i.c-1),c==b){d=ey(a.i,b);break}else if(d=ey(a.i,c),d.b)break;WA(a,d)}}w(430,388,Tl);_.ee=function(a){aB(this,a)};_.we=function(){this.j&&Jz(this.j,!1);cz(this)};_.Oe=function(a,b){eB(this,a,b)};_.d=!1;_.e=null;_.f=!1;_.j=null;_.k=null;_.n=null;_.o=!1;function XA(a){this.a=a}\nw(431,1,{},XA);_.pd=function(){hB(this.a)};_.a=null;function iB(a){this.a=a}w(432,1,{},iB);_.Ld=function(){WA(this.a,null)};_.a=null;function YA(a,b){Hz();this.a=a;this.b=b;Pz.call(this,!0,Ei);Ez(this.T,this.b.d);Lz(this);this.fb=!0;this.b.d.ii()}w(433,391,Ql,YA);_.ae=function(a){var b,c;if(!a.a)switch(Tx(a.d.type)){case 4:c=a.d.target;b=this.b.c.pb;if(sr(b,c)){a.a=!0;break}a.a&&WA(this.a,null)}};_.a=null;_.b=null;function ZA(a,b){this.a=a;this.b=b}w(434,1,{},ZA);_.a=null;var jB=_.b=null;\nfunction kB(){kB=x;jB=new rx((Ix(),new Hx((tw(),"data:image/gif;base64,R0lGODlhBQAJAIAAAAAAAAAAACH5BAEAAAEALAAAAAAFAAkAAAIMRB5gp9v2YlJsJRQKADs="))),5,9)}function lB(a,b){if(b){var c=Oy(a.pb)+Xb;Jy(a.me(),c,!1)}else c=Oy(a.pb)+Xb,Jy(a.me(),c,!0);a.b=b}function mB(a,b){this.pb=$doc.createElement(kk);var c=Oy(this.pb)+Zb;Jy(this.me(),c,!1);this.pb.textContent=a||m;this.pb[Xg]="gwt-MenuItem";c=tr();this.pb.setAttribute(fi,c);co();this.pb.setAttribute(Fj,Ko.a);this.a=b}w(437,389,{43:1,47:1,50:1},mB);\n_.a=null;_.b=!0;_.c=null;_.d=null;function nB(){var a;this.pb=$doc.createElement(kk);this.pb[Xg]="gwt-MenuItemSeparator";a=$doc.createElement(qh);Nx(this.pb,a);a[Xg]="menuSeparatorInner"}w(438,389,Il,nB);function oB(){var a,b,c,d,e;b=null.ii();e=vr();d=ur();b[ph]=(ks(),Yi);b[Kk]=0+(Rs(),tj);b[ci]=Ec;c=$doc;c=(H(c.compatMode,qe)?c.documentElement:c.body).scrollWidth||0;a=$doc;a=(H(a.compatMode,qe)?a.documentElement:a.body).scrollHeight||0;b[Kk]=(c>e?c:e)+tj;b[ci]=(a>d?a:d)+tj;b[ph]="block"}\nfunction Qz(){}w(439,1,{},Qz);_.Yd=function(){oB()};function pB(a){this.a=a}w(440,1,{},pB);\n_.ae=function(a){var b=this.a,c,d;if(a.a||!b.fb&&a.b)b.db&&(a.a=!0);else if(b.ae(a),!a.a){d=a.d;c=d.target;var e;try{e=!!c&&!!c.nodeType}catch(f){e=!1}(c=e&&c&&1==c.nodeType?sr(b.pb,c):!1)&&(a.b=!0);b.db&&(a.a=!0);switch(Tx(d.type)){case 4:case 1048576:if(Sx){a.b=!0;break}if(!c&&b.V){b.Ke(!0);break}break;case 8:case 64:case 1:case 2:case 4194304:if(Sx){a.b=!0;break}break;case 2048:d=d.target,b.db&&!c&&d&&(d.blur&&d!=$doc.body&&d.blur(),a.a=!0)}}};_.a=null;function qB(a){this.a=a}w(441,1,{},qB);\n_.a=null;function Rz(){Rz=x;Sz=new rB(0);$z=new rB(1);bA=new rB(2);sB=z(tB,q,48,[Sz,$z,bA])}function rB(a){this.b=a}w(442,195,{48:1,90:1,95:1,97:1},rB);var sB,Sz,$z,bA;function uB(a){a.j?a.a.bb&&($doc.body.appendChild(a.a.Z),Hz(),a.f=hy(a.a.$),oB(),a.b=!0):a.b&&($doc.body.removeChild(a.a.Z),Hz(),vB(a.f.a),a.f=null,a.b=!1)}function wB(a){a.j||(uB(a),a.c||(ez(),wz(xB(null),a.a)),Hz());yB((Hz(),a.a.pb),"rect(auto, auto, auto, auto)");a.a.pb.style[kj]=Ik}\nfunction zB(a,b){var c,d,e,f,g,h;a.j||(b=1-b);c=f=e=g=0;d=Fw(b*a.d);h=Fw(b*a.e);switch(a.a.U.b){case 2:f=a.e;c=d;break;case 0:g=a.d-d>>1;e=a.e-h>>1;f=e+h;c=g+d;break;case 1:tw(),f=h,c=d}yB((Hz(),a.a.pb),"rect("+g+vj+f+vj+c+vj+e+"px)")}\nfunction Kz(a,b,c){a.c=c;Bm(a);a.i&&(Zm(a.i),a.i=null,wB(a));a.a.hb=b;var d=a.a;d.eb&&(vB(d.eb.a),d.eb=null);d._&&(vB(d._.a),d._=null);if(d.hb){d.eb=Ux(new pB(d));var e;e=new qB(d);ay();e=by?Pv(by.a,(!Ov&&(Ov=new Ym),Ov),e):null;d._=e}c=!c&&a.a.ab;a.a.U!=(Rz(),Sz)&&!b&&(c=!1);a.j=b;c?b?(uB(a),a.a.pb.style[qj]=ig,-1!=a.a.ib&&a.a.Le(a.a.cb,a.a.ib),yB((Hz(),a.a.pb),Aj),ez(),b=xB(null),nz(b,a.a,b.pb),a.i=new AB(a),Rm(a.i,1)):Cm(a,200):(uB(a),a.j?(a.a.pb.style[qj]=ig,-1!=a.a.ib&&a.a.Le(a.a.cb,a.a.ib),\nez(),b=xB(null),nz(b,a.a,b.pb)):a.c||(ez(),wz(xB(null),a.a)),Hz(),a.a.pb.style[kj]=Ik)}function Tz(a){var b=(Hm(),Km);this.k=new Gm(this);this.t=b;this.a=a}w(443,58,{},Tz);_.rd=function(){wB(this)};_.sd=function(){this.d=fr(this.a.pb,dj);this.e=fr(this.a.pb,ej);this.a.pb.style[kj]=di;zB(this,(1+Math.cos(3.141592653589793))/2)};_.td=function(a){zB(this,a)};_.a=null;_.b=!1;_.c=!1;_.d=0;_.e=-1;_.f=null;_.i=null;_.j=!1;function AB(a){Sm();this.a=a}w(444,67,{},AB);\n_.zd=function(){this.a.i=null;Cm(this.a,200)};_.a=null;function Ox(){Ox=x;BB()}function Px(a){return a.__gwt_resolve?a.__gwt_resolve():a}function BB(){function a(){}a.prototype={className:m,clientHeight:0,clientWidth:0,dir:m,getAttribute:function(a){return this[a]},href:m,id:m,lang:m,nodeType:1,removeAttribute:function(a){this[a]=void 0},setAttribute:function(a,c){this[a]=c},src:m,style:{},title:m};$wnd.GwtPotentialElementShim=a}function ez(){ez=x;CB=new DB;EB=new Gp;fz=new cw}\nfunction FB(a){this.p=new Bz(this);this.pb=a;$y(this)}function xB(a){ez();var b,c;c=lw(EB,a);b=null;if(null!=a&&!(b=$doc.getElementById(a)))return null;if(c&&(!b||c.pb==b))return c;if(0==EB.d){var d=new GB;Vm();Wm(Xm?Xm:Xm=new Ym,d);tw()}!b?c=new HB:c=new FB(b);E(EB,a,c);dw(fz,c);return c}w(446,385,Ql,FB);var CB,EB,fz;function DB(){}w(447,1,{},DB);_.Ne=function(a){a.ue()&&a.we()};function GB(){}w(448,1,{},GB);_.Wd=function(){ez();try{jz(fz,CB)}finally{IB(fz.a),IB(EB)}};\nfunction HB(){FB.call(this,$doc.body)}w(449,446,Ql,HB);_.Fe=function(a,b,c){b-=nr();c-=or();zz(a,b,c)};function Gz(a){this.c=a;this.a=!!this.c.jb}w(450,1,{},Gz);_.be=yx;_.ce=function(){if(!this.a||!this.c.jb)throw new tz;this.a=!1;return this.b=this.c.jb};_.de=function(){this.b&&this.c.ze(this.b)};_.b=null;_.c=null;function JB(a,b){a.pb[Fk]=null!=b?b:m}w(453,403,Tl);_.ee=function(a){0!=(Tx(a.type)&896)?bz(this,a):bz(this,a)};_.xe=hz;function KB(){KB=x;LB()}w(452,453,Tl);\nfunction MB(){KB();var a=jr(lk);!Mx&&(Mx=new Lx);!Kx&&(Kx=new Jx);this.pb=a;tw();this.pb[Xg]="gwt-TextBox"}w(454,452,Tl,MB);function LB(){LB=x;NB=new OB;PB=new QB;RB=new SB;TB=new UB;VB=z(WB,q,51,[NB,PB,RB,TB])}w(455,195,Ul);var VB,NB,PB,RB,TB;function OB(){this.b=0}w(456,455,Ul,OB);function QB(){this.b=1}w(457,455,Ul,QB);function SB(){this.b=2}w(458,455,Ul,SB);function UB(){this.b=3}w(459,455,Ul,UB);function sz(a,b){var c;for(c=0;cc||c>a.c)throw new qz;if(a.c==a.a.length){e=D(XB,q,52,2*a.a.length,0);for(d=0;dc;--d)wq(a.a,d,a.a[d-1]);wq(a.a,c,b)}function Bz(a){this.b=a;this.a=D(XB,q,52,4,0)}w(461,1,{},Bz);_.Ce=function(){return new uz(this)};_.a=null;_.b=null;_.c=0;function YB(a){if(a.a>=a.b.c)throw new tz;return a.b.a[++a.a]}function ZB(a){if(0>a.a||a.a>=a.b.c)throw new $B;a.b.b.ze(a.b.a[a.a--])}function uz(a){this.b=a}w(462,1,{},uz);\n_.be=function(){return this.a=1E3*parseInt(a[1])+parseInt(a[2])){Oz=!0;break a}Oz=!1}}\nfunction yB(a,b){a.style.clip=b;a.style[ph]=(ks(),Yi);a.style[ph]=m}var Oz;function Uz(a){this.a=a}w(470,1,{},Uz);_.pd=function(){this.a.style[kj]=(vs(),zg)};_.a=null;function vB(a){var b=a.a,c=a.d,d=a.c,a=a.b;0a)throw new an("Missing message: awt.133");this.e=a;this.a=2;this.c=0;this.d=10;this.b=0}w(489,1,{57:1},kD);\n_.eQ=function(a){return a===this?!0:G(a,57)?a.e==this.e&&a.a==this.a&&a.c==this.c&&a.d==this.d&&a.b==this.b:!1};_.hC=function(){var a;a=new lD;a.a=31*a.a+Fw((new mD(this.e)).a);a.a=31*a.a+this.a;a.a=31*a.a+this.c;a.a=31*a.a+Fw((new mD(this.d)).a);return a.a};_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;\nfunction nD(){nD=x;oD=pD=new qm(255,255,255);qD=new qm(192,192,192);rD=new qm(128,128,128);sD=new qm(64,64,64);tD=uD=new qm(0,0,0);vD=wD=new qm(255,0,0);new qm(255,175,175);xD=new qm(255,200,0);yD=new qm(255,255,0);new qm(0,255,0);zD=new qm(255,0,255);AD=new qm(0,255,255);BD=CD=new qm(0,0,255)}\nfunction DD(a){var b,c;c=a.d>>16&255;b=a.d&255;a=a.d>>8&255;if(0==c&&0==b&&0==a)return new qm(3,3,3);3>c&&0!=c?c=3:(c=Fw(c/0.7),c=255b&&0!=b?b=3:(b=Fw(b/0.7),b=255a&&0!=a?a=3:(a=Fw(a/0.7),a=255>16&255)),Fw(0.7*(a.d>>8&255)),Fw(0.7*(a.d&255)))}function FD(a,b){return G(b,60)?b.d==a.d:!1}function qm(a,b,c){nD();if((a&255)!=a||(b&255)!=b||(c&255)!=c)throw new an(De);this.d=c|b<<8|a<<16|-16777216}\nw(495,1,{60:1,69:1,72:1},qm);_.eQ=function(a){return FD(this,a)};_.hC=GD;_.tS=function(){return HD.d+"[r="+(this.d>>16&255)+",g="+(this.d>>8&255)+",b="+(this.d&255)+eg};_.a=0;_.b=null;_.c=null;_.d=0;var tD,BD,vD,oD,uD,CD,AD,sD,rD,qD,zD,xD,wD,pD,yD;function BC(){BC=x;CC=new ID(!0);JD=new cw;dw(JD,"ar");dw(JD,"fa");dw(JD,"iw");dw(JD,"ur")}function ID(a){this.a=a}w(496,1,Ol,ID);_.a=!1;var CC,JD;w(500,1,{78:1,94:1});function KD(){sC.call(this,0,0)}function sC(a,b){this.b=a;this.a=b}\nfunction uC(a){sC.call(this,a.b,a.a)}w(499,500,{63:1,78:1,90:1,94:1},KD,sC,uC);_.eQ=function(a){return a===this?!0:G(a,63)?a.b==this.b&&a.a==this.a:!1};_.hC=function(){var a;a=new lD;a.a=31*a.a+this.b;a.a=31*a.a+this.a;return a.a};_.tS=function(){return LD.d+"[width="+this.b+",height="+this.a+eg};_.a=0;_.b=0;function Nu(a,b,c){this.f=a;this.c=b;this.e=this.d=this.j=this.i=0;this.b=c}w(501,1,Ol,Nu,function(a,b,c,d){this.f=a;this.c=b;this.j=this.i=0;this.d=c;this.e=d;this.b=null});\n_.xf=function(){return 0!=(this.e&4)};_.yf=function(){return 0!=(this.e&1)};_.tS=function(){var a;return this.cZ.d+"[id="+this.c+",x="+this.i+",y="+this.j+(0!=this.d?",key="+this.d+(a=m,this.yf()&&(a+=",shift"),0!=(this.e&2)&&(a+=",control"),this.xf()&&(a+=",meta"),a):m)+",target="+this.f+(null!=this.b?",arg="+this.b:m)+eg};_.b=null;_.c=0;_.d=0;_.e=0;_.f=null;_.i=0;_.j=0;function MD(a){var b,c;for(c=b=0;cb.b&&(ND(this,l,b.b-(n-this.c),g.b,o,j,h),l.ug(),n=f,o+=j+this.d,j=0),e=!1,wq(l.b,l.c++,c),n+=a.b+this.c,j=fn(j,a.a);ND(this,l,b.b-(n-this.c),g.b,o,\nj,h)}};_.uf=function(a){this.b=SD(a.Fc);return 0==MD(this)?JC(a,new sC(10,10)):JC(a,PD(this,!1))};_.vf=function(a){this.b=SD(a.Fc);return 0==MD(this)?JC(a,new sC(10,10)):JC(a,PD(this,!0))};_.wf=GC;_.tS=function(){var a;switch(this.a){case 0:a=oi;break;case 2:a=Ej;break;case 1:a=Tg;break;case 4:a="trailing";break;default:a="leading"}return VD.d+"[hgap="+this.c+",vgap="+this.d+",align="+a+eg};_.a=0;_.b=null;_.c=0;_.d=0;function WD(){WD=x;XD=new YD(Ne,0,12)}\nfunction YD(a,b,c){WD();this.a=null!=a?a:"Default";this.b=0<=c?c:0;this.c=0==(b&-4)?b:0}w(503,1,{64:1,90:1},YD);_.a=null;_.b=0;_.c=0;var XD;w(504,1,yl);_.tS=function(){return ZD.d+"[font="+this.b+"ascent="+$D(this.b).a+", descent="+$D(this.b).b+", height="+$D(this.b).c+eg};_.b=null;w(506,1,{});_.tS=function(){return"Graphics"};w(507,506,{});function $B(){}function az(a){this.f=a}w(510,138,pl,$B,az);function oC(){this.f="Missing message: awt.151"}w(509,510,pl,oC);w(511,1,{});\nfunction EC(a,b,c,d){this.d=a;this.b=b;this.a=c;this.c=d}w(512,1,{66:1,90:1,94:1},EC);_.eQ=function(a){return a===this?!0:G(a,66)?a.b==this.b&&a.a==this.a&&a.c==this.c&&a.d==this.d:!1};_.hC=function(){var a;a=31+this.d;a=31*a+this.b;a=31*a+this.a;return a=31*a+this.c};_.tS=function(){return aE.d+"[left="+this.b+",top="+this.d+",right="+this.c+",bottom="+this.a+eg};_.a=0;_.b=0;_.c=0;_.d=0;w(516,1,Ol);_.gf=function(){return this.j};_.tS=IC;_.j=null;_.k=null;\nfunction bE(a){var b;b=a.j+",label="+a.f;a.e||(b+=",disabled");null!=a.c&&(b+=",command="+a.c);return b}function cE(a,b){a.e=b;lB(a.i.a,b)}function dE(a){this.n=(yC(),yC(),zC);var b;var c;b=this.cZ.d;-1!=Py(b,Qy(36))?b=null:(c=this.n.b.d++,b=Sy(b,iC(b,Qy(46))+1)+m+c);this.j=b;this.d=new iD;this.f=a;this.e=!0;this.i=new eE(this)}w(515,516,Ol,dE);_.gf=function(){return bE(this)};_.c=null;_.e=!1;_.f=null;_.i=null;w(514,515,Ll);_.gf=function(){return bE(this)+(this.b?",tearOff":m)};_.b=!1;w(518,1,{79:1});\n_.eQ=function(a){return a===this?!0:G(a,79)?this.zf()==a.zf()&&this.Af()==a.Af():!1};_.hC=function(){var a;a=new lD;fE(a,this.zf());fE(a,this.Af());return a.a};function nC(){this.b=this.a=0}function gE(a,b){this.a=a;this.b=b}w(517,518,{70:1,79:1,90:1},nC,gE);_.eQ=function(a){return a===this?!0:G(a,70)?this.a==a.a&&this.b==a.b:!1};_.zf=yx;_.Af=hA;_.tS=function(){return hE.d+"[x="+this.a+",y="+this.b+eg};_.a=0;_.b=0;\nfunction iE(a,b){if(!b)throw new Qv("Missing message: awt.70");var c=a.a;if(H(b.f,ub)){var c=c.a.a,d=new nB,e=c.c.c;if(0>e||e>c.c.c)throw new qz;c.o&&(d.pb[ah]=2);UA(c,e,d.pb);jE(c.c,e,d)}else{var d=c.a.a,c=b.i.a,e=d.c.c,f,g;if(0>e||e>d.c.c)throw new qz;jE(d.c,e,c);for(f=g=0;fb?0:b;var c=this.Tc;JB(c.a,a);c.e.a=-1;c.e.b=-1}w(528,527,Zl,vE,wE);_.Re=function(){return"textfield"+this.Vc.b.f++};_.Te=function(){return tE(this,gr(this.Tc.a.pb,Fk).length)};_.Ue=function(){return!jC(this)?null:tE(this,gr(this.Tc.a.pb,Fk).length)};_.We=zE;_.Ye=AE;_.af=function(){this.Tc=(yC(),new BE)};_.ef=zE;_.hf=AE;_.a=0;function yC(){yC=x;zC=new CE}\nfunction DE(){var a=(yC(),yC(),zC);!a.c&&(a.c=new EE);return a.c}w(529,1,{});_.a=null;_.c=null;var zC;function FE(){}w(530,1,{},FE);_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;_.f=0;w(531,1,{});function GE(){GE=x;HE=new IE;JE=new IE}function KE(a,b){return b==a?!0:!b?!1:!0}function IE(){}w(532,1,{74:1},IE);_.eQ=function(a){return null==a||!G(a,74)?!1:KE(this,a)};_.hC=function(){var a;a=null.ii()+";class="+null.ii();a=!null.ii().ii()?a:a+";charset=";return LE(a)};\n_.tS=function(){return ME.d+"[MimeType=(null);humanPresentableName="+this.a+eg};_.a=null;var HE,JE;function NE(){NE=x;z(OE,q,74,[(GE(),JE),HE])}function PE(a){var b=(GE(),JE);if(KE(b,(GE(),JE)))return a.a;if(KE(b,HE))return new QE(a.a);throw new RE(b);}function SE(a){NE();this.a=a}w(533,1,{},SE);_.a=null;function RE(a){this.f="flavor = "+a}w(534,139,{75:1,90:1,98:1,107:1},RE);function TE(a,b,c){bD();UE.call(this,a,b,c,Qk)}\nfunction UE(a,b,c,d){bD();$C.call(this,a);this.k=b;this.a=c;this.c=d;this.b=0}w(535,482,Ol,TE,UE);_.gf=function(){var a,b;a=1001==this.k?"ACTION_PERFORMED":Ek;b=m;0<(this.b&1)&&(b+="Shift");0<(this.b&2)&&(b+=0==b.length?"Ctrl":"+Ctrl");0<(this.b&4)&&(b+=0==b.length?"Meta":"+Meta");0<(this.b&8)&&(b+=0==b.length?"Alt":"+Alt");return a+",cmd="+this.a+",when="+px(this.c)+tb+b};_.a=null;_.b=0;_.c=Qk;function wC(a,b){bD();$C.call(this,a);this.k=b}w(536,482,Ol,wC);\n_.gf=function(){var a,b;a=this.n;switch(this.k){case 100:b="COMPONENT_MOVED";break;case 101:b="COMPONENT_RESIZED";break;case 102:return"COMPONENT_SHOWN";case 103:return"COMPONENT_HIDDEN";default:return Ek}return b+" ("+a.$e()+nb+a._e()+ha+a.Ze()+Lk+a.Ve()+jb};w(539,536,Ol);_.j=0;\nfunction VE(a){var b;switch(a.k){case 503:b="MOUSE_MOVED";break;case 500:b="MOUSE_CLICKED";break;case 501:b="MOUSE_PRESSED";break;case 502:b="MOUSE_RELEASED";break;case 506:b="MOUSE_DRAGGED";break;case 504:b="MOUSE_ENTERED";break;case 505:b="MOUSE_EXITED";break;case 507:b="MOUSE_WHEEL";break;default:b=Ek}b=b+",("+a.f+nb+a.i+"),button="+a.d;if(0<(a.j&16320)){var c=tb,d;d=a.j;var e;e=new ux;0!=(d&4)&&Jp(Jp(e,(yC(),null)),mb);0!=(d&1)&&Jp(Jp(e,(yC(),null)),mb);0!=(d&2)&&Jp(Jp(e,(yC(),null)),mb);0!=(d&\n8)&&(0!=(d&2048)?0!=(d&512)&&Jp(Jp(e,(yC(),null)),mb):Jp(Jp(e,(yC(),null)),mb));0!=(d&32)&&Jp(Jp(e,(yC(),null)),mb);0!=(d&16)&&Jp(Jp(e,(yC(),null)),mb);0!=(d&8)&&Jp(Jp(e,(yC(),null)),mb);0!=(d&4)&&Jp(Jp(e,(yC(),null)),mb);d=0==e.a.a.length?e.a.a:WE(e.a.a,0,e.a.a.length-1);c=c+d+",extModifiers=";d=a.j;var f;e=(f=m,0!=(d&256)&&(f+=(yC(),null)),0!=(d&128)&&(f+=(0=this.k?0!=(this.j&16)?(this.d=1,501==this.k&&(this.j|=1024)):0!=(this.j&8)?(this.d=2,501==this.k&&(this.j|=2048)):0!=(this.j&4)&&(this.d=3,501==this.k&&(this.j|=4096)):(0!=(this.j&16)&&(this.j|=1024),0!=(this.j&8)&&(this.j|=\n2048),0!=(this.j&4)&&(this.j|=4096));else if(0!=(this.j&16320))if(this.j&=-64,0!=(this.j&64)&&(this.j|=1),0!=(this.j&128)&&(this.j|=2),0!=(this.j&256)&&(this.j|=4),0!=(this.j&512)&&(this.j|=8),0!=(this.j&8192)&&(this.j|=32),500<=this.k&&502>=this.k)switch(this.d){case 1:this.j|=16;break;case 2:this.j|=8;break;case 3:this.j|=4}else 0!=(this.j&1024)&&(this.j|=16),0!=(this.j&2048)&&(this.j|=8),0!=(this.j&4096)&&(this.j|=4);this.b=0;this.a=1;this.c=d}w(542,541,Ol,ov);\n_.gf=function(){var a,b;a=VE(this);switch(this.b){case 0:b="WHEEL_UNIT_SCROLL";break;case 1:b="WHEEL_BLOCK_SCROLL";break;default:b=Ek}return a+=",scrollType="+b+",scrollAmount="+this.a+",wheelRotation="+this.c};_.a=0;_.b=0;_.c=0;w(551,1,{});function QE(a){if(null==a)throw new XE;}w(552,551,{},QE);\nfunction YE(){YE=x;ZE={};ZE["java.vendor"]=Rh;ZE["package.restrict.access.sun"]=Ck;ZE["sun.java.launcher"]=wf;ZE["sun.management.compiler"]=Rh;ZE["os.name"]=wf;ZE[" sun.boot.class.path"]=wf;ZE["path.separator.applet"]=wf;ZE["java.vm.specification.vendor"]=Rh;ZE["java.runtime.version"]=wf;ZE["http.proxyPort"]=wf;ZE["user.name"]=wf;ZE["user.language"]=wf;ZE["os.name.applet"]=wf;ZE["browser.version"]=wf;ZE["java.version"]=wf;ZE["user.timezone"]=wf;ZE["java.endorsed.dirs"]=wf;ZE["java.specification.name"]=\n"GWT";ZE["java.specification.version"]="2.5.0";ZE[ji]=cf;!rv&&(rv=new zv);rv.a?ZE[hi]="yes":ZE[hi]=null}var ZE;w(556,139,xl);function $E(){}function aF(a){this.f=a}w(555,556,{84:1,90:1,98:1,107:1},$E,aF);function bF(){bF=x;cF=new dF}function eF(a){var b;if(a.k){var c;b=new ux;Jp(b,a.f);b.a.a+=gd;c=a.a;null!=c&&0=b||65<=b&&90>=b;for(c=1;b&&c=b||65<=b&&90>=b||48<=b&&57>=b||43==b||45==b||46==b;if(b){c=this.f;gF();var f,g,h;h=c.length;b=new hF;for(g=0;g=f?iF(b,f+32&65535):Kp(b.a,String.fromCharCode(f));\nthis.f=b.a.a}else this.f=null,d=-1}if(null==this.f)throw new aF($e+a);if(!this.k&&(this.k=lw(cF,this.f),this.k||(this.k=(yC(),new jF))&&E(cF,this.f,this.k),!this.k))throw new aF($e+a);try{c=a;var j=++d,l=a.length,n,o,r,t,y,v,s,A,F,M,N,$,S,V,ea,na,ta,Yb,K,ra,yc;if(ll){if(-2147483647>=l&&(j>=c.length||0>j)||!(0>j||j>=c.length)&&c.indexOf(sc,j)==j&&-1==kF(c,Qy(47),j+2))throw new lF(l);}else{N=c.substr(j,l-j);l-=j;v=0;s=this.c;$=this.e;Yb=this.j;t=this.d;ea=this.i;n=this.a;yc=this.n;K=kF(N,Qy(35),\n0);if(0==N.indexOf(sc)&&0!=N.indexOf("////")){F=2;$=-1;v=kF(N,Qy(47),2);ta=kF(N,Qy(63),2);-1!=ta&&(-1==v||v>ta)&&(v=ta);-1==v&&(v=l,t=m);A=v;-1!=K&&Kr+1?(o=N.charCodeAt(r+1),58==o?S=r+1:S=-1):S=-1}catch(wb){if(wb=Gq(wb),!G(wb,98))throw wb;}-1==S||S>v?s=N.substr(F,A-F):(s=N.substr(F,S-F),V=N.substr(S+1,A-(S+1)),0==V.length?$=-1:$=mF(V,\n10))}-1v&&(null==t?t=m:H(t,m)?t=nc:t.indexOf(nc),M=iC(t,Qy(47))+1,0==M?t=N.substr(v,y-v):t=t.substr(0,M-0)+N.substr(v,y-v)));null==t&&(t=m);null==s&&(s=m);d=s;var Ha;Ha=t;null!=ea&&!H(ea,m)&&(null!=t?Ha=t+Gd+ea:Ha=Gd+ea);null==this.f&&(this.f=\nthis.f);this.c=d;this.b=Ha;this.e=$;this.j=Yb;var xb;null!=this.c&&0this.e)throw new aF("incorrect port: "+\nthis.e);}w(557,1,Ol,fF);_.tS=function(){return eF(this)};_.a=null;_.b=null;_.c=null;_.d=null;_.e=-1;_.f=null;_.i=null;_.j=null;_.k=null;_.n=null;var cF;w(558,1,{});function nF(a,b,c){var d,e;for(d=a.Sf().Ce();d.be();)if(a=d.ce(),e=a.Bh(),null==b?null==e:Tp(b,e))return c&&(a=new oF(a.Bh(),a.Ch()),d.de()),a;return null}w(562,1,Kl);_.Rf=function(a){return!!nF(this,a,!1)};\n_.eQ=function(a){var b,c;if(a===this)return!0;if(!G(a,110)||this.Xf()!=a.Xf())return!1;for(a=a.Sf().Ce();a.be();)if(b=a.ce(),c=b.Bh(),b=b.Ch(),!this.Rf(c)||!pF(b,this.Tf(c)))return!1;return!0};_.Tf=function(a){a=nF(this,a,!1);return!a?null:a.Ch()};_.hC=function(){var a,b,c;c=0;for(b=this.Sf().Ce();b.be();)a=b.ce(),c+=a.hC(),c=~~c;return c};_.Uf=qF;_.Vf=function(){throw new rF("Put not supported on this map");};_.Wf=function(a){a=nF(this,a,!0);return!a?null:a.Ch()};_.Xf=function(){return this.Sf().Xf()};\n_.tS=function(){var a,b,c,d;d=Nk;a=!1;for(c=this.Sf().Ce();c.be();)b=c.ce(),a?d+=qb:a=!0,d+=m+b.Bh(),d+=Ed,d+=m+b.Ch();return d+"}"};function IB(a){a.a=[];a.e={};a.c=!1;a.b=null;a.d=0}function yy(a,b){var c;if(null==b)c=a.c;else if(G(b,1))c=gd+b in a.e;else a:{c=a.$f(b);if(c=a.a[c])for(var d=0,e=c.length;d=a.i)break;c=AF(a,c);++b}return b}\nfunction BF(a,b){var c;for(c=0;c=a.i)throw new xF;b=a.a;a.a=AF(a,a.a);return WE(a.n,b,a.a)}\nfunction AF(a,b){var c,d;for(d=b;da.f||!BF(a,c))break;d+=65536<=c?2:1}else{c=a.n.charCodeAt(d);if(c>a.f||0>Py(a.c,Qy(c)))break;++d}return d}function EF(a){FF.call(this,a,ia,!1)}function GF(a){FF.call(this,a,nb,!1)}\nfunction FF(a,b,c){this.a=0;this.j=-1;this.d=!1;this.n=a;this.i=a.length;this.c=b;this.k=c;var d;if(null==this.c)this.f=0;else{for(c=b=d=0;c=a&&(a=DF(this.c,c,this.c.length),this.e=!0),d=a;++a)0=a;++a)b=Gf,33=j||b>a.Sb||c>a.Sb))){l=D(aH,Yl,-1,99,1);h=o=n=0;for(g=b;g<=c;++g)f=bH(a.zb[g]),n+=f.c,o+=f.d,f.d>h&&(h=f.d),l[g]=f.c,2==d&&(l[g]=f.d);a.J&&(n+=25*(j+1),o+=25*(j+1),h+=25);j=g=1;a.J?r=cH(a):r=dH(a);f=Fw(r.b);r=Fw(r.a);1==d||3==d?f=~~((f-48)/2):2==d&&(r=~~(r/2));n>=f&&(g=f/n);h>=r&&(j=r/h);h=0;a.J&&(a.xb=gd)switch(pH(b,(nD(),uD)),f){case 101:pH(b,yD);tH(b,j+3,g+3,a.mb-6,a.mb-6);pH(b,uD);e=g+3;h=a.mb-6;c=\na.mb-6;d=b.a;f=P(J(Q((j+3)*R)));e=P(J(Q(e*R)));h=P(J(Q(h*R)));c=P(J(Q(c*R)));d.n&&(uH(d,!1),vH(d,wH(d,f,e,h,c)));xH(b,j+6,g+6,a.mb-12,a.mb-12);yH(b.a,P(J(Q((j+9)*(zH(),R)))),P(J(Q((g+9)*R))),P(J(Q(2*R))),P(J(Q(4*R))));qH(b,j+a.mb-10,g+9,2,4);0.04>Math.random()&&(pH(b,wD),yH(b.a,P(J(Q((j+10)*R))),P(J(Q((g+18)*R))),P(J(Q(4*R))),P(J(Q(4*R)))));0.96=e;++e)if(bn&&(pH(g,(oG(),wG)[n]),tH(g,f.b[A].q-12,f.b[A].r-\n12,24,24));for(A=1;A<=f.q;++A)l=f.c[A].i,o=f.c[A].j,0!=f.b[l].c&&f.b[l].c==f.b[o].c&&(pH(g,(oG(),wG)[f.b[l].c]),v=f.b[o].q-f.b[l].q,h=f.b[o].r-f.b[l].r,y=Math.sqrt(v*v+h*h),1>y&&(y=1),h/=y,y=v/y,v=9*h,t=9*y,n=SH(4),r=SH(4),n[0]=f.b[l].q+v,r[0]=f.b[l].r-t,n[1]=f.b[o].q+v,r[1]=f.b[o].r-t,n[2]=f.b[o].q-v,r[2]=f.b[o].r+t,n[3]=f.b[l].q-v,r[3]=f.b[l].r+t,EH(g,n,r,4))}for(A=1;A<=f.q;++A){pH(g,(nD(),tD));t=f.c[A];l=t.i;o=t.j;1==f.i&&0!=f.b[l].c&&f.b[l].c==f.b[o].c&&pH(g,(oG(),wG)[f.b[l].c]);if(3==t.f||4==\nt.f)n=l,l=o,o=n;n=f.b[l].q;r=f.b[l].r;N=f.b[o].q;M=f.b[o].r;if(1!=t.c||0!=t.f)v=N-n,h=M-r,y=Math.sqrt(v*v+h*h),1>y&&(y=1),h/=y,y=v/y;switch(t.c){case 2:10<=t.f&&pH(g,zD);v=2*h;t=2*y;BH(g.a,P(J(Q((n+v)*(zH(),R)))),P(J(Q((r-t)*R))),P(J(Q((N+v)*R))),P(J(Q((M-t)*R))));BH(g.a,P(J(Q((n-v)*R))),P(J(Q((r+t)*R))),P(J(Q((N-v)*R))),P(J(Q((M+t)*R))));pH(g,uD);break;case 3:BH(g.a,P(J(Q(n*(zH(),R)))),P(J(Q(r*R))),P(J(Q(N*R))),P(J(Q(M*R))));l=3*h;o=3*y;BH(g.a,P(J(Q((n+l)*R))),P(J(Q((r-o)*R))),P(J(Q((N+l)*R))),P(J(Q((M-\no)*R))));BH(g.a,P(J(Q((n-l)*R))),P(J(Q((r+o)*R))),P(J(Q((N-l)*R))),P(J(Q((M+o)*R))));break;case 9:case 0:for(o=0;10>o;++o)l=n-(n-N)/10*o,s=r-(r-M)/10*o,BH(g.a,P(J(Q(l*(zH(),R)))),P(J(Q(s*R))),P(J(Q(l*R))),P(J(Q(s*R))));TH(g,f.k.v);o=UH(f.k.w);t=t.d;l=Gd;null!=t&&(l=t);t=uE(f.k.w,l);t=(n+N)/2-t/2;M=(r+M)/2+~~(o/2)-1;pH(g,zD);VH(g.a,l,P(J(Q(t*(zH(),R)))),P(J(Q(M*R))));pH(g,uD);break;default:if(1==t.f||3==t.f)v=3*h,t=3*y,s=SH(3),j=SH(3),s[0]=N+v,j[0]=M-t,s[1]=n,j[1]=r,s[2]=N-v,j[2]=M+t,EH(g,s,j,3);else if(2==\nt.f||4==t.f){v=3*h;t=3*y;for(o=0;10>o;++o)l=n-(n-N)/10*o,s=r-(r-M)/10*o,j=o/10,BH(g.a,P(J(Q((l+v*j)*(zH(),R)))),P(J(Q((s-t*j)*R))),P(J(Q((l-v*j)*R))),P(J(Q((s+t*j)*R))))}else BH(g.a,P(J(Q(n*(zH(),R)))),P(J(Q(r*R))),P(J(Q(N*R))),P(J(Q(M*R))))}}y=SH(f.p+1);h=SH(f.p+1);for(A=1;A<=f.q;++A)l=f.c[A].i,o=f.c[A].j,n=f.b[l].q,r=f.b[o].q,++h[l],++h[o],y[l]=y[l]/h[l]+r/h[l],y[o]=y[o]/h[o]+n/h[o];TH(g,f.k.v);o=UH(f.k.w);N=SH(f.p+1);r=SH(f.p+1);n=D(WH,q,122,f.p+1,0);for(A=1;A<=f.p;++A)l=XH(f,A),(null==l||1>l.length)&&\n(l=lb),j=f.b[A],3==f.b[A].a&&0ZH(y[A]-f.b[A].q)&&(v=!1),2ZH(y[A]-f.b[A].q)&&(M=!0),t=l,s=m,f.k.oc&&(F=f.b[A].i,0y&&(y=1),h/=y,y=v/y,v=4*h,t=4*y,s=SH(5),j=SH(5),s[0]=f.b[l].q+v,s[1]=f.b[o].q+v,j[0]=f.b[l].r-t,j[1]=f.b[o].r-t,s[3]=f.b[l].q-v,s[2]=f.b[o].q-v,j[3]=f.b[l].r+t,j[2]=f.b[o].r+t,s[4]=s[0],j[4]=j[0],106!=f.k.k&&bI(g,s,j,5),106==f.k.k&&cI(f,f.c[f.w].i,f.c[f.w].j))){h=0;for(A=1;A<=f.p;++A)0~~(f.p/2))for(A=1;A<=f.p;++A)0e;++e)if(d=a.zb[e])0b&&(b=c);return b}\nfunction mI(a,b,c,d){var e=xG?350:170,f,g,h,j;nI(d);b=oI(a,b);c=oI(a,c);h=e;for(g=1;g<=a.Sb;++g){j=new pI(e);f=a.zb[g];for(var l=b,n=c,o=j,r=void 0,t=void 0,y=void 0,v=void 0,s=r=r=r=v=r=void 0,A=void 0,F=void 0,M=t=y=r=r=void 0,N=void 0,$=void 0,s=0,F=o.a,A=1;A<=f.q;++A)r=qI(l,n,f.c[A].a,f.c[A].b),ry+F||(r=N*r+$*v,0>r||(y=Math.sqrt(y),t=Math.sqrt(t),r/=y*t,1<=r||(r=1.5707963267948966-Math.acos(r),r=t*Math.cos(r),r*=r,r=a.yb||0>=a.ub)&&(!a.M&&(a.M=XC(a)),rI(a,a.M));b=new sI;b.b=a.yb;b.a=a.ub;return b}function dH(a){var b;b=cH(a);b.b/=a.xb;b.a/=a.xb;return b}\nfunction OH(a,b){var c=a.b.a;vH(c,"=e;++e)b=RI(h,d);e=xI(mF(Ry(b.substr(0,3)),10)).a;g=xI(mF(Ry(b.substr(3,3)),10)).a;RI(h,d);for(b=1;b<=e+g;++b){for(f=m;!(j=RI(h,d),null==j||H(j,"$MOL"));)f+=j+d;a.zb[++a.Sb]=new SI(a,f)}a.xb=1;$G(a,1,e,1,!1);$G(a,e+1,e+g,3,!1);d="readRXNFile"}else{(a.J||a.Vb)&&(a.dc=!1);a.ob=new SI(a,b);if(!a.ob||0==a.ob.p)return!a.ob&&(Ou(a,"ERROR - problems in reading/processing MOL input"),\na.ff(a.Ec.d)),!!a.ob;d=(a.dc||a.Fb)&&a.p||a.Mb;null!=a.t&&a.ob&&TI(a.ob,a.t,!0);null!=a.u&&a.ob&&TI(a.ob,a.u,!1);d||(a.Sb=0,a.xb=1);h=UI(a.ob);if(1>=h||a.J)a.zb[++a.Sb]=a.ob;else{a.Fb=!0;for(b=1;b<=h;++b)a.zb[++a.Sb]=new VI(a,a.ob,b)}d?a.o=a.Sb:a.o=1;a.ob=a.zb[a.o];a.J?$G(a,1,1,0,!0):$G(a,1,h,0,!d);d=zj}WI(a);null!=d&&(YF(a.r,Od),a.r&&jH(fq(a.r,d),0,0,0),a.hc=!0);a.Ib=!0;c&&a.ff(a.Ec.d);return!0}function Ou(a,b){null==b&&(b=m);a.Gb=!0;a.X=b;a.mg("info: "+b)}\nfunction RH(a,b){var c;c=Math.round(b);100>c&&(!yG[c]&&(yG[c]=new YD(Xe,0,c)),!AG[c]&&wq(AG,c,kC(yG[c])),a.v=yG[c],a.w=AG[c])}function uI(a){var b;if(!a)return!1;b=a.xf();a=0!=(a.e&2);return b||a}function dI(a,b){return(a.mb+(a.Lb?1:0))*b}function IH(a,b){var c,d;d=-1;for(c=0;c=b)switch(a.Kb=!0,a.Hb=!0,Ou(a,m),b){case 102:hH(a,!0);AI(a,102);zI(a,102);d=!0;break;case 110:a.Ib=!0;a.k=c;a.pb.a!=a.pb.b&&a.pb.a.b!=a.pb.b?a.q&&(++a.Sb,a.o=a.Sb,a.q=!1):Ou(a,"No more undo");if(!(a.pb.a!=a.pb.b&&a.pb.a.b!=a.pb.b))break;XI(a,YI(a.pb));a.r&&jH(fq(a.r,Dk),0,0,0);a.hc=!0;a.hc=!1;a.Ib=!0;break;case 111:a.k=c;if(a.pb.a.c)a.q&&(++a.Sb,a.o=a.Sb,a.q=!1);else{Ou(a,"No more redo");break}if(!a.pb.a.c)break;e=a.pb;\nif(!e.a.c)throw new az("Cannot redo. Index is out of range.");if(!e.a.c)throw new az(af);e.a=e.a.c;XI(a,e.a.a);a.r&&jH(fq(a.r,Bj),0,0,0);a.hc=!0;a.hc=!1;a.Ib=!0;break;case 214:tI(a,null,a.R.a,a.R.b);a.k=c;break;case 151:case 152:case 154:case 153:e=null;a.k=c;switch(b){case 152:e=ZI(a.jc);break;case 151:e=$I(a.jc);break;case 154:e=a.jc;e.a=e.c;e=ZI(e);break;case 153:e=a.jc,e.a=-1,e=$I(e)}null==e?Ou(a,"No more molecules in SDF buffer"):(kH(a),a.Vb=!0,aJ(a,e,!1),a.Vb=!1,H(a.X,m)&&(Ou(a,"MOL n. "+(a.jc.a+\n1)+" of "+a.jc.c),d=!0,a.r&&jH(fq(a.r,"SDFstack"),0,0,0),a.hc=!0,a.hc=!1));break;case 101:Aq(4,new bJ(a));a.k=c;break;case 107:Aq(2,new cJ(a));break;case 114:Aq(3,new dJ(a));a.k=c;break;case 103:a.Mb=!0;a.k=c;break;case 105:a.A&&a.Bb&&(a.Bb=!1,eJ(a.ob),a.Ib=!0,a.r&&jH(fq(a.r,Ag),0,0,0),d=a.hc=!0,a.k=c);a.I=1;break;case 109:a.k=c;e=fJ(a.ob);if(2==e){Ou(a,"Copying the agent not possible !");break}d=bH(a.ob);a.Ib=!0;a.ob=new FG(a.ob);d=Fw((a.M.b-a.mb)/2-d.a);for(e=1;e<=a.ob.p;++e)fH(a.ob.b[e],2*d/a.xb,\n0/a.xb);a.zb[++a.Sb]=a.ob;a.o=a.Sb;a.r&&jH(fq(a.r,"reactionCopy"),0,0,0);d=a.hc=!0;AI(a,109);zI(a,109);break;case 104:d=GG(a);break;case 213:a.k=c;if(!a.S){var f,g,h,j,l;l=new kE;for(f=a.U,g=0,h=f.length;g=b&&(a.n=33+(b-1301)),0=a.k)a.cb=2,kJ(a.ob),d=!0,VG(a,mg,a.o,0,a.ob.w);else if(202==a.k||203==a.k||204==a.k)if(0=g;++g){f=0;for(c=1;c<=a.Sb;++c)fJ(a.zb[c])==g&&(h[g][++f]=c);h[g][0]=f}e+=Ra;e+=nJ(h[1][0],3)+nJ(h[3][0],3)+fa;for(c=1;c<=h[1][0];++c)e+=Na+oJ(a.zb[h[1][c]],d,b);for(c=1;c<=h[3][0];++c)e+=Na+oJ(a.zb[h[3][c]],d,b)}else{1f&&(f=e.b[b].r),e.b[b].qb;++b)wq(g.b,g.c++,null),wq(f.b,f.c++,null);for(b=1;b<=e.p;++b)j=e.b[b].b,null==j||0==j.length||(H(j,hg)?Qm(c,new dD(b)):0==j.indexOf("mix")?(j=mF(Sy(j,3),10),l=null,f.c>j&&(l=(OD(j,f.c),f.b[j])),null==l?h=new Nm:h=l,Qm(h,new dD(b)),UD(f,j,h)):0==j.indexOf(ij)&&(j=mF(Sy(j,2),10),l=null,g.c>j&&(l=\n(OD(j,g.c),g.b[j])),null==l?h=new Nm:h=l,Qm(h,new dD(b)),UD(g,j,h)));d+=tJ(qf,c);if(0a.M.a-P(J(Q(a.mb*a.nb))))return!1;var b=a.Cc,f=a.Dc,g,h,j,l;l=0;if(0>b||0>f||f>a.ub||b>a.yb)b=0;else if(1==a.Sb)b=a.o;else{b=oI(a,b);f=oI(a,f);j=1.7976931348623157E308;for(h=1;h<=a.Sb;++h){g=a.zb[h];for(var n=void 0,o=void 0,r=void 0,o=1.7976931348623157E308,n=1;n<=g.p;++n)r=qI(b,f,g.b[n].q,g.b[n].r),r=a.k)a.cb=2,kJ(a.ob),IG(a,lg,a.ob.v);else if(230==a.k)a.cb=3,IG(a,ng,a.ob.v);\nelse if(233<=a.k&&262>a.k)xJ(a.ob,!1),IG(a,kg,a.ob.v),a.cb=3;else if(107==a.k){if(a.bc.b)return!0;jJ(a.ob,a.ob.v,gr(a.bc.e.Tc.a.pb,Fk));a.ob.j=!0;IG(a,"addAtomQuery",a.ob.v)}else if(105==a.k)(c=yJ(a.ob))?IG(a,"markAtom",a.ob.v):IG(a,"unMarkAtom",a.ob.v);else if(113!=a.k)if(300c.length&&(c=Wf),jJ(a.ob,a.ob.v,c)),IG(a,Tj+a.n,a.ob.v)}else e=!1}else if(0<\na.ob.w)if(a.eb.c=a.o,104==a.k)GG(a);else if(106==a.k){c=a.ob;d=a.ob.w;if(0d&&(d=b);if(0==d)break;HG(c,d);c.a[d]=0}KG(a.ob);VG(a,"delBondGroup",a.o,0,a.ob.w);a.ob.w=0}else if(201==a.k)zJ(a.ob,a.ob.w),VG(a,"setBondStereo",a.o,0,a.ob.w);else if(202==a.k||205==a.k)1==a.ob.c[a.ob.w].c&&0==a.ob.c[a.ob.w].f?(a.ob.c[a.ob.w].c=2,VG(a,Uj,a.o,0,a.ob.w)):(a.ob.c[a.ob.w].c=1,a.ob.c[a.ob.w].f=\n0,VG(a,Vj,a.o,0,a.ob.w)),a.ob.c[a.ob.w].f=0;else if(203==a.k)a.ob.c[a.ob.w].c=2,a.ob.c[a.ob.w].f=0,KG(a.ob),VG(a,Uj,a.o,0,a.ob.w);else if(204==a.k)a.ob.c[a.ob.w].c=3,a.ob.c[a.ob.w].f=0,KG(a.ob),VG(a,Wj,a.o,0,a.ob.w);else if(206<=a.k&&229>=a.k)a.cb=2,kJ(a.ob),VG(a,mg,a.o,0,a.ob.w),KG(a.ob);else if(107==a.k){if(!a.bc.b)return!0;c=gr(a.bc.e.Tc.a.pb,Fk);a.ob.c[a.ob.w].c=9;a.ob.c[a.ob.w].d=c;VG(a,"setQueryBond",a.o,0,a.ob.w)}else 105==a.k?(c=a.ob,b=a.ob.w,c.k.gb=!0,c.k.sc?(c.i=-1,d=c.c[b].i,b=c.c[b].j,\nf=c.b[d].c,h=c.b[b].c,j=4,f==h&&0=a.k)return!1;++a.Sb;a.o=a.Sb;a.zb[a.Sb]=new iH(a);a.ob=a.zb[a.Sb];a.eb.c=a.o;202<=a.k&&204>=a.k||205==a.k?(AJ(a.ob,null),a.ob.q=0,BJ(a.ob,1,c/a.xb,d/a.xb),a.ob.v=1,a.ob.x=1,a.cb=1,b=a.ob,lJ(b,b.v,0),205==a.k?(BJ(a.ob,2,(c+21.65)/a.xb,(d-12.5)/a.xb),a.ob.e[0]=1,a.ob.e[1]=2,a.ob.r=1,VG(a,"addChain",a.o,0,a.ob.w)):VG(a,\njg,a.o,0,a.ob.w)):206<=a.k&&229>=a.k?(a.ob.z=oI(a,c),a.ob.A=oI(a,d),a.cb=2,kJ(a.ob),a.r&&jH(fq(a.r,lg),0,0,0),a.hc=!0):300c.length&&(c=Wf),jJ(a.ob,1,c)),IG(a,"addAtom",a.ob.v)):230==a.k?(LI(a,null,!0),a.r&&jH(fq(a.r,ng),0,0,0),a.hc=!0):233<=a.k&&262>a.k?(AJ(a.ob,null),a.ob.q=0,BJ(a.ob,1,c/a.xb,d/a.xb),a.ob.v=1,xJ(a.ob,!0),a.r&&jH(fq(a.r,kg),0,0,0),a.hc=!0):YE()}else e=!1;e&&CJ(a)}return a.Ab=\ne}\nfunction DJ(a,b,c,d){var e,f,g,h;YE();if(!a.Db||EJ(b))return!0;a.Gb=!1;c-=P(J(Q(dI(a,a.nb))));d-=P(J(Q(eI(a,a.nb))));f=oI(a,c-a.Cc);g=oI(a,d-a.Dc);e=oI(a,c);h=oI(a,d);if(2==a.cb||3==a.cb||9==a.cb)return!0;if(1==a.cb){f=!1;a.zb[a.eb.c].v=0;--a.ob.p;g=c;var b=d,j=a.Nb;0>g||0>b||b>a.ub||g>a.yb?nI(j):mI(a,g,b,j);++a.ob.p;if(0g&&(g=1);b/=g;j/=g;n=g/2/Math.tan(0.5235987755982988);o=e-f.b[l].q;r=h-f.b[l].r;l=-g/2+o*j+r*b;b=r*j-o*b;if(0>l)if(1f.b[2].r-f.b[1].r&&0h-f.b[1].r&&(f.b[2].r=f.b[1].r-g/2),0>f.b[2].q-f.b[1].q&&0e-f.b[1].q&&(f.b[2].q=f.b[1].q-0.866*g);else{if(2==f.b[f.e[0]].j&&(n=f.b[f.e[0]].p[1],n==f.e[1]&&(n=f.b[f.e[0]].p[2]),j=f.b[f.e[0]].q-f.b[n].q,b=f.b[f.e[0]].r-f.b[n].r,g=Math.sqrt(j*j+b*b),1>g&&(g=1),b/=g,j/=g,o=e-f.b[n].q,r=h-f.b[n].r,e=r*j-o*b,o=f.b[f.e[1]].q-f.b[n].q,r=f.b[f.e[1]].r-f.b[n].r,h=r*j-o*b,0h||0>e&&0=b?0-b:b)>e){++f.r;if(100g&&(g=1),BJ(f,f.p,f.b[f.x].q+25*(j/g),f.b[f.x].r+25*(b/g))}a.B=!0}else if(113==a.k&&0c||0>d||d>a.ub||c>a.yb)&&5!=a.cb))e=dH(a),h=a.ob,j=bH(h),b=j.a,j=j.b,0>f&&be.b||0>g&&je.a||IJ(h,f,g),a.cb=5;NG(a,!1);a.Ib=!0;$F(a);a.Cc=c;a.Dc=d;return!0}\nfunction yI(a,b,c,d){var e,f;if(!a.J||a.dg().a||a.eg().a||a.K)if(f=!1,e=JH(a,c,d),e!=a.Cb&&(f|=AI(a,a.Cb),f|=zI(a,e),a.Cb=e),!uI(b)){c-=P(J(Q(dI(a,a.nb))));d-=P(J(Q(eI(a,a.nb))));b=c;c=a.Nb;0>b||0>d||d>a.ub||b>a.yb?nI(c):mI(a,b,d,c);113==e&&0d.b[e].j&&(OJ(d,null),b=d.e[d.r-1],d.c[d.q].i=e,d.c[d.q].j=b,PJ(d.b[e],b),PJ(d.b[e],b)),HG(d,d.p)),d.u=!1,a.hc=!0;else if(0!=a.eb.c&&a.o!=a.eb.c){HG(a.ob,a.ob.p);b=a.ob.x;c=a.eb.a+a.ob.p;e=a.zb[a.eb.c];d=new pJ(a,z(QJ,q,121,[null,a.ob,e]),2);d.b[0]=new RJ;SJ(d,b,c,1);b=D(QJ,\nq,121,a.zb.length,0);for(f=0,c=0;fd.c[b].c?(++d.c[b].c,d.c[b].f=0):Ou(d.k,"Maximum allowed bond order is 3 !")):6==d.b[e].j?(--d.q,UJ(d,d.x),Ou(d.k,"Not possible connection !")):(d.c[d.q].j=e,UJ(d,d.x),b=d.x,PJ(d.b[e],b),PJ(d.b[b],e),VJ(d.c[d.q],d.b)));gH(a.ob);a.B&&(d=a.pb,d.a!=d.b&&d.a.b!=d.b&&(e=d.a.c,YI(d),d.a.c=e),\nVG(a,jg,a.o,0,a.ob.w),a.B=!1);d=!0}else 5==a.cb&&(gH(a.ob),d=a.hc=!0);0=b&&0==c||b==c&&a.o==a.Zb)return-1;0>=b&&0ob))for(;zc=ac[uc]*ac[uc];)0==zc%ac[uc]?dc=!1:++uc;if(dc){oc[++$b]=kx(zc);if($b>=ob)break;Isd&&(sd=0),0>W&&(W=0),be=28*sd+W));eb=0;0!=aa.b[U].n&&(-2>aa.b[U].n?eb=1:-2==aa.b[U].n?eb=2:-1==aa.b[U].n?eb=3:1==aa.b[U].n?eb=4:2==aa.b[U].n?eb=5:2Ia&&(Ia=10-Ia));Wc=126;kb=wd;kb+=126*aa.b[U].i;Wc*=7;kb+=eb*Wc;Wc*=7;0!=Ia&&(kb+=Ia*Wc);Wc*=7;kb+=be*Wc;Wc*=783;kb+=aa.b[U].j*Wc;O[U]=kx(kb)}for(da=0;!dK(aa,Ya,O);){Oa=!1;for(U=1;U<=aa.p;++U)Ya[U]!=Ab[U]&&(Ab[U]=Ya[U],Oa=!0);if(Oa){for(U=1;U<=aa.p;++U){O[U]=Rk;for(ga=1;ga<=aa.b[U].j;++ga)O[U]=\nox(O[U],oc[Ya[aa.b[U].p[ga]]])}da=0}else if(0aa.c[U].j&&(ae=aa.c[U].i,aa.c[U].i=aa.c[U].j,aa.c[U].j=ae,1==aa.c[U].f?aa.c[U].f=3:2==aa.c[U].f?aa.c[U].f=4:3==aa.c[U].f?aa.c[U].f=1:4==aa.c[U].f&&(aa.c[U].f=2));for(U=1;Uo.a[v])&&M!=Ba[v]){Hc=!0;for(yc=1;yc<=xb;++yc)if(ea[yc]==v&&na[yc]==M||ea[yc]==M&&na[yc]==v){Hc=!1;break}Hc&&(++xb,ea[xb]=v,na[xb]=M)}}else V[++Ha]=M;if(0==Ha){if(ba==o.p)break;v=S[L--]}else if(1==Ha)Ba[V[1]]=v,v=V[1],o.a[v]=++ba;else{S[++L]=v;A=0;for(ta=1;ta<=Ha;++ta)if($=TJ(o,V[ta],\nv),!K[$]){A=V[ta];break}if(0==A)for(ta=1;ta<=Ha;++ta)if($=TJ(o,V[ta],v),2==o.d[$]||3==o.d[$]){A=V[ta];break}0==A&&(A=V[1]);Ba[A]=v;v=A;o.a[A]=++ba}}Ba=SH(o.p+1);y=SH(o.p+1);jd=[];kd=[];F=ba=L=0;for(ta=1;ta<=o.p;++ta)if(1==o.a[ta]){v=ta;break}b:for(;;){0ca.b[Hb].j||4Ua.b[Wa].j||3Mc[ab]&&(se=Jd,Jd=ab,ab=se);Ja=Jd;0==Jd&&(Ja=ab,te=!0);for(hc=1;hc<=Ua.b[Wa].j;++hc)de=Ua.b[Wa].p[hc],de!=pc[ic-1]&&(0==jc?jc=de:td=de);0Mc[td]&&(se=jc,jc=td,td=se);Kd=jc;0==jc&&(Kd=td,zd=!0);kf=0kf+me?-(kf+me):kf+me)||0!=ue||0!=Td?Ou(Ua.k,"Bad stereoinfo on allene !"):(T=Ua.b[pc[ic-1]].q-Ua.b[Wa].q,ee=Ua.b[pc[ic-1]].r-Ua.b[Wa].r,Fb=Math.sqrt(T*T+ee*ee),0.001>Fb&&(Fb=0.001),0<(Ua.b[Kd].r-Ua.b[pc[ic-1]].r)*(T/Fb)-(Ua.b[Kd].q-Ua.b[pc[ic-1]].q)*(ee/Fb)?dd[pb]=1:dd[pb]=-1,te&&(dd[pb]*=-1),zd&&(dd[pb]*=-1),Ja==Jd&&0>kf&&(dd[pb]*=-1),Ja==ab&&0>me&&(dd[pb]*=-1),Mc[Ja]>Mc[Kd]&&(dd[pb]*=-1))}}else c:{var sb=ca,ed=Hb,ve=Gb,Ud=void 0,Ac=void 0,Nc=void 0,rc=void 0,hb=void 0,kc=void 0,Ad=void 0,we=\nvoid 0,Bd=void 0,Bc=void 0,Pa=void 0,Za=void 0,Cd=void 0,Vd=void 0,Cc=void 0,Va=void 0,Ue=void 0,Za=SH(4),Vd=SH(4),Ve=sb,nd=ed,og=fc,lf=Sd,Kh=yd,He=fb,pg=rb,Eb=Za,Xc=void 0,Dd=void 0,mf=void 0,qg=void 0,Mg=void 0,Df=void 0,Df=-1;0hb;++hb)0>=Za[hb]||(Ud=TJ(sb,ed,Za[hb]),Vd[hb]=hK(sb,Ud,ed),0Vd[hb]?(++Ad,rc=Za[hb],kc=Za[hb]):we=Za[hb]);Bd=Bc+Ad;Va=SH(4);Cc=0;if(3==sb.b[ed].j){if(1==Bc&&1==Ad||3==Bd&&0hb;++hb)Ud=TJ(sb,ed,Pa[hb]),Ac[hb]=hK(sb,Ud,ed);if(4==Bd){if(0==Bc||0==Ad){Ou(sb.k,"Error in C4 stereospecification !");break c}if(1==Bc||1==Ad)Va[0]=Pa[0],Va[1]=Pa[3],Va[2]=Pa[2],Va[3]=Pa[1],Cc=Ac[0];else{for(hb=0;4>hb;++hb)-1==Ac[hb]&&(Ac[hb]=0);Bd=2}}else if(3==\nBd)if(3==Bc||3==Ad)Va[0]=Pa[0],Va[1]=Pa[3],Va[2]=Pa[2],Va[3]=Pa[1],0hb;++hb)Ac[hb]==Nc&&(Ac[hb]=0);Bd=2}if(2==Bd)if(1==Bc&&1==Ad)Pa[1]==rc?(Pa[1]=Pa[2],Pa[2]=Pa[3]):Pa[2]==rc&&(Pa[2]=Pa[3]),Va[0]=Ue,Va[1]=rc,Va[2]=Pa[2],Va[3]=Pa[1],Cc=1;else{if(Ac[0]==Ac[1]||Ac[1]==Ac[2]){Ou(sb.k,"Error in C4 stereospecification ! 2/0r");break c}0!=Ac[0]?(Va[0]=Pa[0],Va[1]=Pa[2],Va[2]=Pa[1],Va[3]=Pa[3]):(Va[0]=Pa[1],Va[1]=Pa[3],Va[2]=Pa[2],Va[3]=Pa[0]);1=Ff&&(Ld=!0,Da=(oG(),vG)[Ff]);Ld&&(0!=Wd?Da=Yf+Wd+Da:Da=Yf+Da,1==Lh[nf]?Da+=Md:-1==Lh[nf]&&\n(Da+="@@"),1==Tf?Da+=We:1fd?-fd:fd)&&(Da+=0>fd?-fd:fd)),ne&&(Da+=gd+ib),Da+=eg);Kp(Ib.a,Da);for(ra=1;ra<=xb;++ra)if(ea[ra]==v||na[ra]==v)s=na[ra],s==v&&(s=ea[ra]),N[v]",!0);j=-1c;++c)(d=b.d[c])?a.zb[c]=new FG(d):a.zb[c]=null;0b||b>a.Sb?(Ou(a,"ERROR - invalid mol index: "+b),a.ff(a.Ec.d),null):a.zb[b]}function WI(a){var b,c,d;b=WG(a);for(d=1;d<=a.Sb;++d)c=a.zb[d],c.o=b}function qK(a,b){b!=a.nb&&(a.nb=b,a.ng(),a.ff(a.Ec.d))}function rK(a,b){var c,d,e;if(b!=a.xb){c=dH(a);a.xb=b;d=dH(a);e=P(J(Q((d.b-d.c)/2-(c.b-c.c)/2)));d=P(J(Q((d.a-d.d)/2-(c.a-c.d)/2)));for(c=1;c<=a.Sb;++c)IJ(a.zb[c],e,d),gH(a.zb[c]);a.Ib=!0;a.ff(a.Ec.d)}}\nfunction ZG(a,b){var c;c=-1;H(b,"Select substituent")?(c=202,b=m):H(b,Cb)?c=235:H(b,Jb)?c=240:H(b,Bb)?c=260:H(b,Pb)?c=261:H(b,Ub)?c=241:H(b,Nb)?c=233:H(b,Mb)?c=236:H(b,Lb)?c=237:H(b,Tb)?c=234:H(b,Sb)?c=243:H(b,Vb)?c=252:H(b,Rb)?c=244:H(b,Wb)?c=239:H(b,"-PO3H2")?c=251:H(b,zb)?c=242:H(b,vb)?c=245:H(b,yb)&&(c=238);0=a.mb-1)for(g=f.b.b;j>=a.mb-1&&1=a.k&&(a.k=213);for(c=1;14>=c;++c)oH(a,b,c,1),oH(a,b,c,2);a.k=d;fI(a.Ec,a.wc.a,0,0)}var f;if(a.Hb){b=OH(a.fb,a.nb);d=a.mb+(a.Lb?1:0);c=(a.M.a-P(J(Q(eI(a,a.nb)))))/a.nb;f=c-a.mb;pH(b,qG);yH(b.a,P(J(Q(0*(zH(),R)))),P(J(Q(0*R))),P(J(Q(d*R))),P(J(Q(c*R))));a.Lb?(pH(b,(nD(),sD)),e=KH*\n(a.mb+(a.Lb?1:0))+3,f>e&&(AH(b,0,e,a.mb-1,e),BH(b.a,P(J(Q(0*R))),P(J(Q(e*R))),P(J(Q(0*R))),P(J(Q((c-1)*R)))),AH(b,a.mb-1,e,a.mb-1,f),AH(b,a.mb-1,f,d,f))):(pH(b,rG),BH(b.a,P(J(Q(0*R))),P(J(Q(0*R))),P(J(Q(0*R))),P(J(Q((c-1)*R)))),AH(b,0,KH*a.mb,c-1,KH*a.mb),pH(b,ED(qG)),BH(b.a,P(J(Q((d-1)*R))),P(J(Q(0*R))),P(J(Q((d-1)*R))),P(J(Q((f+1)*R)))));BH(b.a,P(J(Q(0*R))),P(J(Q((c-1)*R))),P(J(Q(d*R))),P(J(Q((c-1)*R))));for(c=3;c<=KH+2;++c)oH(a,b,1,c);b=P(J(Q(eI(a,a.nb))));fI(a.Ec,a.fb.a,0,b)}a.Jb&&(d=OH(a.fc,\na.nb),c=a.Lb?1:3,b=(a.M.a-P(J(Q(eI(a,a.nb))))-P(J(Q(a.mb*a.nb))))/a.nb,a.Lb?(pH(d,(nD(),sD)),yH(d.a,P(J(Q(0*(zH(),R)))),P(J(Q(0*R))),P(J(Q(c*R))),P(J(Q(b*R))))):(pH(d,ED(qG)),BH(d.a,P(J(Q((c-1)*(zH(),R)))),P(J(Q(0*R))),P(J(Q((c-1)*R))),P(J(Q(b*R)))),pH(d,qG),BH(d.a,P(J(Q((c-2)*R))),P(J(Q(0*R))),P(J(Q((c-2)*R))),P(J(Q(b*R)))),pH(d,rG),BH(d.a,P(J(Q((c-3)*R))),P(J(Q(0*R))),P(J(Q((c-3)*R))),P(J(Q(b*R))))),b=a.M.b-P(J(Q((a.Lb?1:3)*a.nb))),c=P(J(Q(eI(a,a.nb)))),fI(a.Ec,a.fc.a,b,c))}}\nfunction Uu(a,b){a.A?0==b&&(a.I=-1,Ou(a,Zg),$F(a)):(a.gb?a.I=b:-1a.I?a.I=10*a.I+b:a.I=b,a.gb=!1,0==a.I?(a.I=-1,Ou(a,Zg)):Ou(a,a.I+ha),$F(a))}function rI(a,b){var c,d;d=b.b;c=b.a;a.J||(d-=P(J(Q(dI(a,a.nb))))+P(J(Q((a.Lb?1:3)*a.nb))),c-=P(J(Q(eI(a,a.nb))))+P(J(Q(a.mb*a.nb))));1>d&&(d=1);1>c&&(c=1);a.yb=Fw(d);a.ub=Fw(c)}function CG(a){oG();return 14<=a&&20>=a?1:21<=a&&28>=a?2:29<=a&&31>=a?3:0}w(586,478,Gl);_.Df=function(a){MG(this,a)};_.cg=uK;_.dg=function(){return SG(),null!=this.Pb?TG:UG};\n_.eg=function(){return SG(),SG(),UG};_.fg=GC;_.gg=function(a,b,c){return TC(this,b,c)};_.hg=GC;_.ig=function(){YE()};_.jg=RD;_.kg=vK;_.lg=RD;_.mg=function(){YE()};_.Ef=function(a){var b,c;if(this.s)if(c=a.c,b=a.f,a=a.i,c=(100+2*c)/100,this.J||!(bthis.M.a-P(J(Q(this.mb*this.nb)))||b>this.M.b-P(J(Q((this.Lb?1:3)*this.nb))))){if(b=this.xb*c,b>this.xb&&10>=b||b=b&&qK(this,b)};\n_.ff=function(){tK(this)};_.ng=function(){oK(this)};_.og=hz;_.j=null;_.k=0;_.n=0;_.o=0;_.p=!1;_.q=!1;_.s=!0;_.t=null;_.u=null;_.v=null;_.w=null;_.x=13;_.y=null;_.z=!0;_.A=!1;_.B=!1;_.C=!0;_.F=null;_.G=null;_.I=1;_.J=!1;_.K=!1;_.L=!1;_.M=null;_.N=!0;_.O=!1;_.P=!0;_.Q=!0;_.R=null;_.S=null;_.T=null;_.V="http://peter-ertl.com/jsme/2013_03/help.html";_.W=null;_.X=null;_.Y=null;_._=null;_.ab=!1;_.bb=!0;_.cb=0;_.db=Qk;_.fb=null;_.gb=!0;_.hb=null;_.ib=null;_.jb=null;_.kb=null;_.lb=null;_.mb=24;_.nb=1;\n_.ob=null;_.pb=null;_.rb=null;_.sb=null;_.tb=!0;_.ub=0;_.vb=null;_.wb=1;_.xb=1;_.yb=0;_.Ab=!1;_.Bb=!1;_.Cb=0;_.Db=!1;_.Eb=!1;_.Fb=!0;_.Gb=!0;_.Hb=!0;_.Ib=!0;_.Jb=!0;_.Kb=!0;_.Lb=!1;_.Mb=!1;_.Ob=!1;_.Pb=null;_.Qb=null;_.Rb=!1;_.Sb=0;_.Tb=!0;_.Ub=null;_.Vb=!1;_.Wb=null;_.Xb=!1;_.Yb=null;_.Zb=0;_.$b=0;_._b=0;_.ac=!1;_.bc=null;_.cc=!1;_.dc=!1;_.ec=!1;_.fc=null;_.gc=!1;_.hc=!1;_.kc=!0;_.lc=!1;_.mc=!1;_.nc=!0;_.oc=!0;_.pc=null;_.qc=null;_.rc=!1;_.sc=!1;_.tc=!0;_.uc=null;_.vc=!1;_.wc=null;_.xc=null;\n_.yc=null;_.zc=!1;_.Ac=!0;_.Bc=!0;_.Cc=0;_.Dc=0;var KH=10,sG,yG,AG,qG,rG,tG,pG,xG,wK=null,wG,vG;function wJ(a,b,c,d,e){a.b[e]&&(iI(a.r),YF(a.r,Se),a.r.a=e,a.r.d=c,a.r.e=d,a.r.f=b,xK(a.c,a.r,e),iI(a.r))}function yK(a,b,c){return a.b[c]?(iI(a.r),a.r.a=c,a.r.b=b,xK(a.c,a.r,c),iI(a.r),!0):!1}function $F(a){tK(a);a.f&&(zK(a.Ec),a.f=!1)}function AK(a,b,c){b in a.b?a.b[b]=c:$wnd.alert("Invalid callback name: "+b)}\nfunction BK(){oG();RC.call(this);this.Ec=(yC(),yC(),zC).a;this.eb=new CK;this.Nb=new CK;this.H=new YD(null,0,8);this.Z=(this.mb-6)/1.5;this.r=new DK;this.D=(nD(),pD);this.zb=D(QJ,q,121,99,0);this.qb=new PC;this.jc=new EK;this.$=H((YE(),ZE[ji]),cf);this.E=new FK;this.U=z(Jw,q,1,[Cb,Jb,Ub,Bb,Pb,Nb,Mb,Lb,Tb,Vb,Rb,Sb,zb,yb,vb]);this.ic=new GK;this.ob=new iH(this);wG[0]=rD;wG[1]=new qm(255,153,153);wG[2]=new qm(255,204,102);wG[3]=new qm(255,255,153);wG[4]=new qm(102,255,255);wG[5]=new qm(51,204,255);wG[6]=\nnew qm(255,153,255);this.eb.c=1;this.Nb.c=1;this.zb[1]=this.ob;this.Y=new HK(this);this.a=z(Jw,q,1,[je,Pd,$d,le,Zd,ke,Ze]);var a,b,c,d;this.b={};for(b=this.a,c=0,d=b.length;cS&&(S=0),na=new ZK(f,V,S,g),$K(na),Qm(f.k,na),N.c=V,N.b=ea,N.d=24,N.a=S,N);ea=$.c;V=$.b;RF(new WF(h),f);S=0>=JK();N=new aG(h);S?(S=new aL,Ny(S,g.pb.alt),0<=ea&&(S.pb.style[Kk]=ea+tj),0<=V&&(S.pb.style[ci]=\nV+tj),V=new bG(f,S,ea,$),vz(V.d.f,V.b,YC(V.d)-V.c-V.a.a,ZC(V.d)-(V.a.d-V.a.a)),Qm(f.k,V),S.pb.draggable=Ck,S.pb.style[jh]=(yr(),Ri),Xy(S,N,(ou(),ou(),pu)),S.pb.style[Vf]=Yi):(g.pb.draggable=Ck,g.pb.style[jh]=(yr(),Ri),Xy(g,N,(ou(),ou(),pu)),g.pb.style[Vf]=Yi)}else NF("JSME initialization error: HTML id "+a+" not found.")}function bL(){return Mw(null)}function cL(a){return Mw(a)}w(590,1,Fl,QK,SK,TK,RK);_.pg=function(a){Yy(this.d,new dL(this,a),(Wt(),Wt(),Xt))};\n_.qg=function(a){Yy(this.d,new eL(this,a),(Wu(),Wu(),Xu))};_.rg=function(a){Yy(this.d,new fL(this,a),(bv(),bv(),cv))};_.sg=function(a){Yy(this.d,new gL(this,a),(ev(),ev(),fv))};_.tg=function(a){Aq(2,new hL(this.b,a))};_.ug=function(){hH(this.b,!0)};_.vg=function(){Rq((Oq(),Pq),new iL(this))};_.wg=function(){var a,b,c;c=[];for(b=new fw(this.d.a);b.ba&&(b.x=a,RH(b,a),jI(b))};_.dh=function(a,b){var c=this.b,d;d=pK(c,a);1>b||b>d.p?(Ou(c,"ERROR - invalid atom index: "+b),$F(c)):(d.v=b,CJ(c))};\n_.eh=function(a){AK(this.b,je,a)};_.fh=function(a,b){AK(this.b,a,b)};_.pe=function(a){Ky(this.d,a);PK(this)};_.gh=function(a){this.b.V=a};_.hh=function(a){qK(this.b,a)};_.ih=function(a){var b=this.b;b.tb=a;jI(b)};_.jh=function(a){var b=this.b;b.wb=a;jI(b)};_.kh=function(a){rK(this.b,a)};_.lh=function(a){this.b.Pb=a};_.mh=function(a){this.b.Qb=a};_.nh=function(a){var b=this.b;b.Wb=a;b.F=lH(b,!1)};_.oh=function(a){this.b.Yb=a};_.ph=function(a,b){Ly(this.d,a,b);PK(this)};\n_.qh=function(a,b,c){c&&Ly(this.c,a,b);Ly(this.d,a,b);PK(this)};_.rh=function(a,b){My(this.d,a,b);PK(this)};_.sh=function(a,b,c){c&&My(this.c,a,b);My(this.d,a,b);PK(this)};_.th=function(a){ZG(this.b,a)};_.uh=function(a,b){var c=this.b,d;c.q=!1;d=c.sc;c.sc=!1;c.uc=new mK(c,a);c.sc=d;c.k=253;Ou(c,b);$F(c)};_.qe=function(a){Ty(this.c.pb,a)};_.vh=function(a){this.b.i=a};_.re=function(a){this.d.pb.style[Kk]=a;PK(this)};_.wh=function(a){HJ(this.b,a)};_.xh=function(){return DG(this.b)};_.a=-1;_.b=null;\n_.c=null;_.d=null;var UK=0;function iL(a){this.a=a}w(591,1,{},iL);_.pd=function(){var a,b;for(b=new fw(this.a.d.a);b.b=a.c.length)return!1;c=a.c[a.b];g=c.getAttribute(Kk)||m;b=c.getAttribute(ci)||m;f=c.getAttribute(Vi)||m;e=c.getAttribute(fi)||m;var h,j,l;l={};for(d=0;d=d&&b=a;return c?65536+((d&1023)<<10)+(e&1023):d}function KL(a,b){return 2>b||36b?b:10)?a-48:97<=a&&aa?-a:a):a}\nfunction NL(a,b){var c;c=new LL;c.d=Ce+(OL(0!=a?-a:0)?ML(0!=a?-a:0):m+Xp(c));PL(0!=a?-a:0)&&QL(0!=a?-a:0,c);c.b=4;c.a=b;return c}function X(a){var b;b=new LL;b.d=Ce+(OL(a)?ML(a):m+Xp(b));PL(a)&&QL(a,b);return b}function RL(a,b){var c;c=new LL;c.d=Ce+(OL(a)?ML(a):m+Xp(c));PL(a)&&QL(a,c);c.b=b?8:0;return c}function SL(){var a;a=new LL;a.d=Ce+(OL(0)?ML(0):m+Xp(a));PL(0)&&QL(0,a);a.b=2;return a}function TL(a){var b;b=new LL;b.d=Ce+(OL(a)?ML(a):m+Xp(b));PL(a)&&QL(a,b);b.b=1;return b}\nfunction PL(a){return typeof a==bj&&0b||36c||2147483647a)return 0;if(0==a)return 32;b=-(a>>16)>>16&16;c=16-b;a>>=b;b=a-256>>16&8;c+=b;a<<=b;b=a-4096>>16&4;c+=b;a<<=b;b=a-16384>>16&2;c+=b;a=a<>14;return c+2-(a&~(a>>1))}function Zw(a){var b,c;if(0==a)return 32;c=0;for(b=1;0==(b&a);b<<=1)++c;return c}function mm(a){var b,c,d;b=D($L,fm,-1,8,1);c=(aM(),bM);d=7;if(0<=a)for(;15>=4;else for(;0>=4;b[d]=c[a&15];return cM(b,d,8)}\nfunction xI(a){var b,c;return-129a?(b=a+128,c=(dM(),eM)[b],!c&&(c=eM[b]=new dD(a)),c):new dD(a)}w(627,624,{90:1,95:1,101:1,103:1},dD);_.eQ=function(a){return G(a,101)&&a.a==this.a};_.hC=yx;_.tS=ZL;_.a=0;function dM(){dM=x;eM=D(KJ,q,101,256,0)}var eM;function ZH(a){return 0>=a?0-a:a}function $H(a){return 0>a?-a:a}function fn(a,b){return a>b?a:b}function Q(a){return Math.round(a)}function fM(a){return Math.sqrt(a)}function XE(){}function Qv(a){this.f=a}\nw(631,138,{90:1,98:1,102:1,106:1,107:1},XE,Qv);function aM(){aM=x;bM=z($L,fm,-1,[48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122])}var bM;function WL(a){this.f=a}w(633,626,{90:1,98:1,100:1,104:1,106:1,107:1},WL);function JL(a,b){return a.charCodeAt(b)}function gM(a,b){return-1!=a.lastIndexOf(b)&&a.lastIndexOf(b)==a.length-b.length}function H(a,b){return!G(b,1)?!1:""+a==b}function Py(a,b){return a.indexOf(b)}\nfunction kF(a,b,c){return a.indexOf(b,c)}function iC(a,b){return a.lastIndexOf(b)}function MK(a,b,c){var d;for(d=0;0<=(d=c.indexOf($f,d));)36==c.charCodeAt(d+1)?c=c.substr(0,d-0)+Ka+Sy(c,++d):c=c.substr(0,d-0)+Sy(c,++d);return a.replace(RegExp(b,Mh),c)}\nfunction hM(a,b){for(var c=RegExp(b,Mh),d=[],e=0,f=a,g=null;;){var h=c.exec(f);if(null==h||f==m){d[e]=f;break}else d[e]=f.substring(0,h.index),f=f.substring(h.index+h[0].length,f.length),c.lastIndex=0,g==f&&(d[e]=f.substring(0,1),f=f.substring(1)),g=f,e++}if(0ha&&a[a.length-1]>ha?a:a.replace(/^(\\s*)/,m).replace(/\\s*$/,m)}function cM(a,b,c){a=a.slice(b,c);return String.fromCharCode.apply(null,a)}\nfunction iM(a,b,c){if(128>c)return a[b]=(c&127)<<24>>24,1;if(2048>c)return a[b++]=(c>>6&31|192)<<24>>24,a[b]=(c&63|128)<<24>>24,2;if(65536>c)return a[b++]=(c>>12&15|224)<<24>>24,a[b++]=(c>>6&63|128)<<24>>24,a[b]=(c&63|128)<<24>>24,3;if(2097152>c)return a[b++]=(c>>18&7|240)<<24>>24,a[b++]=(c>>12&63|128)<<24>>24,a[b++]=(c>>6&63|128)<<24>>24,a[b]=(c&63|128)<<24>>24,4;if(67108864>c)return a[b++]=(c>>24&3|248)<<24>>24,a[b++]=(c>>18&63|128)<<24>>24,a[b++]=(c>>12&63|128)<<24>>24,a[b++]=(c>>6&63|128)<<24>>\n24,a[b]=(c&63|128)<<24>>24,5;throw new an("Character out of range: "+c);}function Qy(a){var b;return 65536<=a?(b=56320+(a-65536&1023)&65535,String.fromCharCode(55296+(a-65536>>10&1023)&65535)+String.fromCharCode(b)):String.fromCharCode(a&65535)}function jM(a){var b,c,d,e,f;e=a.length;for(d=b=0;dc?++b:2048>c?b+=2:65536>c?b+=3:2097152>c?b+=4:67108864>c&&(b+=5);b=D(kM,bm,-1,b,1);for(d=f=0;da||a>=b)&&DM(a,b)}function DM(a,b){throw new HL("Index: "+a+", Size: "+b);}w(649,642,im);\n_.Eh=function(){throw new rF("Add not supported on this list");};_.yh=function(a){this.Eh(this.Xf(),a);return!0};_.eQ=function(a){return CM(this,a)};_.hC=function(){var a,b,c;b=1;for(a=this.Ce();a.be();)c=a.ce(),b=31*b+(null==c?0:Wp(c)),b=~~b;return b};_.Ce=function(){return new fw(this)};_.Gh=function(){return this.Hh(0)};_.Hh=function(a){return new EM(this,a)};_.Ih=function(){throw new rF("Remove not supported on this list");};function BM(a){return a.b=a.d.Xf())throw new tz;return a.d.Fh(a.c=a.b++)}function yM(a){if(0>a.c)throw new $B;a.d.Ih(a.c);a.b=a.c;a.c=-1}function fw(a){this.d=a}w(650,1,{},fw);_.be=function(){return BM(this)};_.ce=function(){return gw(this)};_.de=function(){yM(this)};_.b=0;_.c=-1;_.d=null;function EM(a,b){var c;this.d=this.a=a;c=a.Xf();(0>b||b>c)&&DM(b,c);this.b=b}w(651,650,{},EM);_.Jh=function(){return 0=this.b)throw new tz;return this.a.Fh(this.c=--this.b)};_.a=null;\nfunction FM(a){a=new vM(a.b.a);return new GM(a)}function HM(a,b){this.a=a;this.b=b}w(652,644,El,HM);_.zh=IM;_.Ce=function(){return FM(this)};_.Xf=function(){return this.b.a.d};_.a=null;_.b=null;function GM(a){this.a=a}w(653,1,{},GM);_.be=function(){return BM(this.a.a)};_.ce=function(){return(this.a.b=gw(this.a.a)).Bh()};_.de=function(){xM(this.a)};_.a=null;function JM(a){a.b=D(KM,q,0,0,0)}function jE(a,b,c){(0>b||b>a.c)&&DM(b,a.c);a.b.splice(b,0,c);++a.c}\nfunction Qm(a,b){wq(a.b,a.c++,b);return!0}function ey(a,b){OD(b,a.c);return a.b[b]}function gB(a,b){for(var c=0;ca.c&&wq(b,a.c,null);return b}\nfunction Nm(){JM(this)}function TD(a){JM(this);this.b.length=a}function hD(a){JM(this);a=xw(a.b,a.c);Array.prototype.splice.apply(this.b,[0,0].concat(a));this.c=this.b.length}w(657,649,tl,Nm,TD,hD);_.Eh=function(a,b){jE(this,a,b)};_.yh=function(a){return Qm(this,a)};_.ug=function(){this.b=D(KM,q,0,0,0);this.c=0};_.zh=function(a){return-1!=gB(this,a)};_.Fh=function(a){return ey(this,a)};_.Uf=function(){return 0==this.c};_.Ih=function(a){return LM(this,a)};_.Ah=function(a){return $m(this,a)};_.Xf=bu;\n_.c=0;function ow(){ow=x;pw=new MM}var pw;function MM(){}w(660,649,jm,MM);_.zh=vK;_.Fh=function(){throw new qz;};_.Xf=function(){return 0};function NM(){this.a=new Date}function OM(a){return 10>a?xc+a:m+a}w(663,1,{90:1,94:1,95:1,108:1},NM);_.eQ=function(a){return G(a,108)&&hx(J(this.a.getTime()),J(a.a.getTime()))};\n_.hC=function(){var a;a=J(this.a.getTime());var b,c,d,e;c=32;d=a.h&1048575;22>c?(e=d>>>c,b=a.m>>c|d<<22-c,c=a.l>>c|a.m<<22-c):44>c?(e=0,b=d>>>c-22,c=a.m>>c-22|a.h<<44-c):(b=e=0,c=d>>>c-44);b=Qw(c&4194303,b&4194303,e&1048575);a=Qw(a.l^b.l,a.m^b.m,a.h^b.h);return P(a)};\n_.tS=function(){var a,b;b=-this.a.getTimezoneOffset();a=(0<=b?mb:m)+~~(b/60);b=10>(0>b?-b:b)%60?xc+(0>b?-b:b)%60:m+(0>b?-b:b)%60;return(PM(),QM)[this.a.getDay()]+ha+RM[this.a.getMonth()]+ha+OM(this.a.getDate())+ha+OM(this.a.getHours())+gd+OM(this.a.getMinutes())+gd+OM(this.a.getSeconds())+" GMT"+a+b+ha+this.a.getFullYear()};_.a=null;function PM(){PM=x;QM=z(Jw,q,1,"Sun,Mon,Tue,Wed,Thu,Fri,Sat".split(","));RM=z(Jw,q,1,"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(","))}var QM,RM;\nfunction dw(a,b){return null==E(a.a,b,a)}function cw(){this.a=new Gp}w(665,644,{90:1,94:1,113:1},cw);_.yh=function(a){return dw(this,a)};_.zh=IM;_.Uf=function(){return 0==this.a.d};_.Ce=function(){return FM(new HM(this.a,new wF(this.a)))};_.Ah=function(a){return null!=nw(this.a,a)};_.Xf=wM;_.tS=function(){return tM(new HM(this.a,new wF(this.a)))};_.a=null;function oF(a,b){this.a=a;this.b=b}w(669,647,wl,oF);_.Bh=yx;_.Ch=hA;_.Dh=function(a){var b;b=this.b;this.b=a;return b};_.a=null;_.b=null;\nfunction tz(){}w(670,138,{90:1,98:1,106:1,107:1,112:1},tz);function SM(a){var b,c;b=a.b;c=a.d.length;if(ba.j&&(++a.j,a.p[a.j]=b)}function $M(a){var b;b=new RJ;b.f=a.f;b.d=a.d;b.q=a.q;b.r=a.r;b.s=a.s;b.n=a.n;b.e=a.e;b.p=a.p.slice();b.j=a.j;b.c=a.c;b.a=a.a;b.b=a.b;b.i=a.i;b.o=a.o;b.k=a.k;return b}function rJ(a){return-99199!=a.f?a.f:0}function aN(a){return 4<=a.o&&2==a.j}\nfunction fH(a,b,c){a.q+=b;a.r+=c}function XG(a){var b;b=-99199!=a.f;a.f=-99199;return b}function RJ(){YM();this.p=SH(7)}w(690,1,{116:1},RJ);_.a=3;_.b=null;_.c=0;_.d=0;_.e=null;_.f=-99199;_.i=0;_.j=0;_.k=0;_.n=0;_.o=0;_.q=0;_.r=0;_.s=0;var ZM;function cK(a,b){var c;c=bN(a);return 0\\\\.]+$",2);mN=new XM("\\\\s+",2)}\nfunction CI(a){jN();var b,c,d,e;this.i=this.f=null;this.j=0;this.e=!1;this.a=this.c=null;var f,g,h;if(null==a||0==a.length)c=0;else{g=1;f=a.length;for(h=0;h=this.j?this.b=Ry(a):this.b=a;c=new VM(mN,this.b);this.d=c.b.a.test(c.a);do if(4a.indexOf("j")&&((this.e=0=f.length)e=0;else{for(h=0,j=f.length;hn&&(n=0.001);r=g/n;e=f/n;l=SH(4);for(h=0;4>h;++h)d[h]==c||0>=d[h]||(0==l[1]?l[1]=d[h]:0==l[2]?l[2]=d[h]:0==l[3]&&(l[3]=d[h]));o=SH(4);d=SH(4);for(h=1;3>=h;++h)3==h&&0==l[3]||(f=(a.b[l[h]].q-a.b[b].q)*e+(a.b[l[h]].r-a.b[b].r)*r,g=(a.b[l[h]].r-a.b[b].r)*e-(a.b[l[h]].q-a.b[b].q)*r,n=Math.sqrt(f*f+g*g),0.001>n&&(n=0.001),o[h]=g/n,d[h]=f/n);a=QN(o[1],d[1],o[2],d[2]);0b?(j[1]=l[1],j[2]=l[3],j[3]=l[2]):0>a&&0d?(j[1]=l[2],j[2]=l[3],j[3]=l[1]):0>d&&0b&&0>a&&(j[1]=l[3],j[2]=l[2],j[3]=l[1])):0j&&(j=0.001);g/=j;f/=j;l=j+25*Math.cos(1.0471975511965976);n=25*Math.sin(1.0471975511965976);h=TJ(a,b,d);if(3==a.c[h].c||204==a.k.k||1!=a.c[h].c&&(203==a.k.k||204==a.k.k)||a.n)l=j+25,n=0;0n?n=-n:0>c&&0j&&(j=0.001),BJ(a,a.p,a.b[b].q+25*f/j,a.b[b].r+25*g/j),0==GJ(a,a.p,1,a.p)||h==a.b[b].j);++h);break;default:return--a.p,Ou(a.k,"Are you trying to draw an hedgehog ?"),a.k.cb=9,!1}b=SJ(a,a.v,a.p,1);203==a.k.k&&(b.c=2);204==a.k.k&&\n(b.c=3);201==a.k.k&&zJ(a,a.q);a.z=a.b[a.p].q;a.A=a.b[a.p].r;return e}function tJ(a,b){var c,d;if(!b||0==b.c)return m;d=m;d+="M V30 BEGIN COLLECTION"+(oG(),fa);d+=pf+a+" [ATOMS=("+b.c;for(c=new fw(b);c.bj&&(j=0.001);1>ZH((a.b[b].r-a.b[e].r)*(g/j)+(a.b[b].q-a.b[e].q)*(h/j))?(g=a.b[b].q-a.b[e].q,h=a.b[b].r-a.b[e].r,j=Math.sqrt(g*g+h*h),0.001>j&&(j=0.001),b=h/j,g/=j,d[0]=a.b[e].q+j*g-c*b,d[1]=a.b[e].r+c*g+j*b):(g=(a.b[e].q+a.b[f].q)/2,e=(a.b[e].r+a.b[f].r)/2,g=a.b[b].q-g,h=a.b[b].r-e,j=Math.sqrt(g*g+h*h),0.001>j&&(j=0.001),d[0]=a.b[b].q+c*g/j,d[1]=a.b[b].r+c*h/j)}\nfunction kJ(a){var b,c,d,e,f,g,h,j,l,n,o,r,t,y;n=-1;j=6;switch(a.k.k){case 206:j=3;break;case 207:j=4;break;case 208:case 221:case 223:j=5;break;case 210:case 209:j=6;break;case 211:j=7;break;case 212:j=8;break;case 229:j=9}f=6.283185307179586/j;l=fM(312.5/(1-Math.cos(f)));if(0a.b[a.v].j)XN(a,j,f,l);else if(!a.k.Bb&&!a.k.rc)n=a.v,lJ(a,a.v,0),a.v=a.p,XN(a,j,f,l);else{a.k.rc=!1;if(209==a.k.k||221==a.k.k||223==a.k.k){Ou(a.k,"ERROR - cannot add aromatic spiro ring !");a.k.cb=9;return}for(d=\n1;d<=a.b[a.v].j;++d)if(b=a.c[TJ(a,a.v,a.b[a.v].p[d])].c,2o&&(o=0.001);g/=o;e/=o;for(d=1;d<=j;++d)h=AJ(a,null),r=f*d+1.5707963267948966,FJ(h,b[0]+l*(Math.sin(r)*e-Math.cos(r)*g),b[1]+l*(Math.cos(r)*e+Math.sin(r)*g))}else if(0o&&(o=0.001);g/=o;e/=o;h=o/2;r=l*Math.sin(0.5*(3.141592653589793-f));o=1;0<(a.b[d].r-a.b[b].r)*e-(a.b[d].q-a.b[b].q)*g&&(r=-r,o=0);t=a.b[b].q+h*e-r*g;y=a.b[b].r+r*e+h*g;for(d=1;d<=j;++d)h=AJ(a,null),r=f*(d+0.5)+3.141592653589793*o,FJ(h,t+l*(Math.sin(r)*e-Math.cos(r)*g),y+l*(Math.cos(r)*e+Math.sin(r)*g)),1==o?(d==j&&FJ(h,a.b[b].q,a.b[b].r),\nd==j-1&&FJ(h,a.b[c].q,a.b[c].r)):(d==j-1&&FJ(h,a.b[b].q,a.b[b].r),d==j&&FJ(h,a.b[c].q,a.b[c].r))}else{b=0.5;6==j&&(b=0);for(d=1;d<=j;++d)h=AJ(a,null),r=f*(d-b),FJ(h,a.z+l*Math.sin(r),a.A+l*Math.cos(r))}b=j;l=0;for(f=1;f<=b;++f)OJ(a,null),l=a.p-b+f,a.b[l].j=2,a.c[a.q].i=l,a.c[a.q].j=l+1;a.c[a.q].j=a.p-b+1;if(209==a.k.k){if(a.c[a.q-4].c=2,a.c[a.q-2].c=2,a.c[a.q].c=2,0e&&ed;--f)if(0g&&(g=0.001),e/=g,f/=g);l=a.b[a.v].q+d*f;n=a.b[a.v].r+d*e;for(g=1;g<=b;++g)h=AJ(a,null),j=c*g-1.5707963267948966,FJ(h,l+d*(Math.sin(j)*f-Math.cos(j)*e),n+d*(Math.cos(j)*f+Math.sin(j)*e))}function WN(a,b){var c,d;0==b&&(b=a.p);for(c=a.p;c>a.p-b;--c)d=GJ(a,c,1,a.p),0!=d&&fH(a.b[c],6,6)}\nfunction TJ(a,b,c){var d,e,f;for(e=1;e<=a.q;++e)if(d=a.c[e],f=d.i,d=d.j,f==b&&d==c||f==c&&d==b)return e;return 0}function vI(a){var b;for(b=1;b<=a.q;++b)if(1==a.c[b].c&&0=c||0>=d?a.s=!0:(b=bH(a),c=c/2-b.a,b=d/2-b.b,a.k.Ob||IJ(a,c,b),gH(a))}\nfunction gJ(a,b,c){var d,e,f;if(1==c)return a.b[b].n+=1,!0;if(-1==c)return a.b[b].n+=-1,!0;e=a.b[b].n;f=a.b[b].i;d=a.b[b].o;-1==d&&0==c&&(0==a.b[b].n?a.b[b].n=1:1==a.b[b].n?a.b[b].n=-1:-1==a.b[b].n&&(a.b[b].n=0));switch(a.b[b].a){case 1:0==d&&(0==a.b[b].n?a.b[b].n=1:1==a.b[b].n?a.b[b].n=-1:a.b[b].n=0);break;case 2:2d&&(0==\na.b[b].n?a.b[b].n=-1:-1==a.b[b].n?a.b[b].n=1:1==a.b[b].n&&(a.b[b].n=0));break;case 4:case 7:3d&&0==a.b[b].n?a.b[b].n=1:3>d&&1==a.b[b].n?a.b[b].n=-1:3>d&&-1==a.b[b].n&&(a.b[b].n=0);break;case 5:case 8:case 13:2d&&0==a.b[b].n?a.b[b].n=-1:\n2>d&&-1==a.b[b].n?a.b[b].n=1:2>d&&1==a.b[b].n&&(a.b[b].n=0);break;case 9:case 10:case 11:case 12:0==d&&0==a.b[b].n?a.b[b].n=-1:0==d&&-1==a.b[b].n?a.b[b].n=0:Ou(a.k,"Charge change not possible on the halogen !");break;case 32:Ou(a.k,"Use X button to change charge on the X atom !")}if(0e&&eb?e=2:0>a&&0>b?e=3:0>a&&0<=b&&(e=4);0<=c&&0<=d?f=1:0<=c&&0>d?f=2:0>c&&0>d?f=3:0>c&&0<=d&&(f=4);if(ef)return-1;switch(e){case 1:case 4:return ac?1:-1}return 0}function eK(a){YN(a);gH(a);fK(a)}\nfunction bH(a){var b,c,d,e,f,g;b=new hN;f=9999;d=-9999;g=9999;e=-9999;for(c=1;c<=a.p;++c)a.b[c].qd&&(d=a.b[c].q),a.b[c].re&&(e=a.b[c].r);b.a=f+(d-f)/2;b.b=g+(e-g)/2;b.c=d-f;b.d=e-g;25>b.c&&(b.c=25);25>b.d&&(b.d=25);return b}function VN(a,b,c){var d,e;e=0;for(d=1;d<=a.p;++d)d>=b&&d<=c||0!=GJ(a,d,b,c)&&++e;return e}function SJ(a,b,c,d){var e;e=OJ(a,null);PJ(a.b[b],c);PJ(a.b[c],b);e.i=b;e.j=c;VJ(e,a.b);e.c=d;return e}\nfunction AJ(a,b){++a.p;b?a.b[a.p]=$M(b):a.b[a.p]=new RJ;return a.b[a.p]}function YH(a,b,c,d,e,f){var g;g=a.b[b].q-c/2;f||(g-=d-c);a=a.b[b].r-~~(e/2);return new ZN(g-1-2,a-2,d+1+4,e+4)}function OJ(a,b){var c;++a.q;c=new fN;b&&gN(c,b);return a.c[a.q]=c}\nfunction oJ(a,b,c){var d,e,f,g,h,c=qJ(a,b,c,!1);e=-1.7976931348623157E308;d=1.7976931348623157E308;for(b=1;b<=a.p;++b)a.b[b].r>e&&(e=a.b[b].r),a.b[b].qa.b[b].n?f=4-a.b[b].n:0>a.b[b].n&&-4=g&&(h=g)),\ng=nJ(h,2)+nJ(f,3)+" 0 0 0 0 0 0 0",f=ZJ(a,b),g+=nJ(f,3),c+=g+ka+(oG(),fa);for(b=1;b<=a.q;++b)d=a.c[b],g=e=d.c,1==a.c[b].c?g=1:2==a.c[b].c&&(g=2),f=nJ(d.i,3)+nJ(d.j,3),h=0,1==e&&1==d.f?h=1:1==e&&2==d.f&&(h=6),1==e&&3==d.f&&(h=1,f=nJ(d.j,3)+nJ(d.i,3)),1==e&&4==d.f&&(h=6,f=nJ(d.j,3)+nJ(d.i,3)),c+=f+nJ(g,3)+nJ(h,3)+la+(oG(),fa);for(b=1;b<=a.p;++b)0!=a.b[b].n&&(c+="M CHG 1"+nJ(b,4)+nJ(a.b[b].n,4)+(oG(),fa)),0!=a.b[b].d&&(c+="M ISO 1"+nJ(b,4)+nJ(a.b[b].d,4)+(oG(),fa));return c+=gf+(oG(),fa)}\nfunction HG(a,b){var c,d,e,f,g,h,j;g=j=0;for(h=1;h<=a.q;++h)e=a.c[h],c=e.i,d=e.j,c!=b&&d!=b?(++j,f=a.c[j],gN(f,e),f.i=c,c>b&&--f.i,f.j=d,d>b&&--f.j):g+=e.c;a.q=j;for(h=b;hb&&--c,a.b[h].p[++d]=c);a.b[h].j=d}}\nfunction JG(a,b){var c,d,e,f;c=a.c[b].i;d=a.c[b].j;for(e=b;ea.b[b].a&&0==a.b[d].d){if(0!=(-99199!=a.b[d].f?a.b[d].f:0))continue a;b=TJ(a,d,b);if(1==a.c[b].c&&(0==a.c[b].f||!a.k.tc))HG(a,d),c=!0}return c}function $N(a,b){var c,d,e,f,g;g=z(B,u,-1,[0,0]);for(e=1,f=0;e<=a.b[b].j;++e)c=a.b[b].p[e],d=TJ(a,b,c),2!=a.c[d].c&&(g[f++]=c);return g}\nfunction YN(a){var b,c,d;for(d=1;d<=a.p;++d)a.b[d].j=0;for(d=1;d<=a.q;++d)b=a.c[d].i,c=a.c[d].j,PJ(a.b[b],c),PJ(a.b[c],b)}\nfunction bK(a,b,c){var d,e,f,g,h,j,l,n,o;a.d=SH(a.q+1);o=[];for(j=1;j<=a.p;++j){o[j]=!1;b[j]=!1;a:{d=void 0;for(d=1;d<=a.b[j].j;++d)if(c[TJ(a,j,a.b[j].p[d])]){d=!0;break a}d=!1}if(d&&!(3d&&(d=c);return d}\nfunction XH(a,b){var c;c=(oG(),vG)[a.b[b].a];32==a.b[b].a&&(c=a.b[b].e);return c}function UJ(a,b){a.b[b].j+=-1}function cI(a,b,c){var d,e,f,g,h;h=1;a.a=SH(a.p+1);for(e=a.a[b]=1;e<=a.b[b].j;++e)d=a.b[b].p[e],d!=c&&(a.a[d]=++h);for(g=!1;;){for(d=1;d<=a.p;++d){g=!1;if(0~~(c/2)+24?3:2}function QG(a,b){var c,d,e,f,g,h,j;c=bH(a);d=c.a;e=c.b;g=Math.sin(3.141592653589793*b/180);c=Math.cos(3.141592653589793*b/180);for(f=1;f<=a.p;++f)h=a.b[f].q*c+a.b[f].r*g,j=-a.b[f].q*g+a.b[f].r*c,FJ(a.b[f],h,j);c=bH(a);IJ(a,d-c.a,e-c.b)}\nfunction XJ(a){var b,c,d,e,f;e=f=0;for(d=1;d<=a.q;++d)b=a.b[a.c[d].i].q-a.b[a.c[d].j].q,c=a.b[a.c[d].i].r-a.b[a.c[d].j].r,f+=Math.sqrt(b*b+c*c);0=g;++g)if(H(f,(oG(),vG)[g])){f=g;break b}f=32}iJ(a,b,f);32==a.b[b].a&&(a.b[b].e=d);c+=\nha;d=0;0=e&&(d=e-48));32==a.b[b].a&&(a.b[b].i=d)}}}function TI(a,b,c){var d,e;a.i=1;c&&(a.i=-1);b=new GF(b);try{for(;b.j=zF(b,b.a),b.jc||6a.b[c].j&&2>a.b[d].j)e.f=0,Ou(a.k,"Stereomarking meaningless on this bond !");else switch(e.f){case 0:a.b[d].j<=a.b[c].j?e.f=1:e.f=3;break;case 1:e.f=2;break;case 2:2h||3c[b]&&(j=f,f=b,b=j);j=$N(a,f);h=j[0];l=j[1];e=0;n=!1;0c[l]&&(j=h,h=l,l=j);j=TJ(a,f,h);0!=d[j]?e=h:1==a.c[j].c&&5!=a.d[j]&&(e=h);0==e&&0c[f]&&(n=!0);j=$N(a,b);l=j[0];g=j[1];h=0;0g&&(g=0.001),j/=g,g=l/g,l=(a.b[e].r-a.b[f].r)*g-(a.b[e].q-a.b[f].q)*j,t=(a.b[h].r-a.b[f].r)*g-(a.b[h].q-a.b[f].q)*j,2>(0>=l?0-l:l)||2>(0>=t?0-t:t))Ou(a.k,"Not unique E/Z geometry !");else{g=\nTJ(a,e,f);h=TJ(a,h,b);r=1;if(0==d[g]){for(o=1;o<=a.b[e].j;++o)if(b=a.b[e].p[o],b!=f&&(j=TJ(a,e,b),0!=d[j])){c[b]>c[e]?r=-d[j]:r=d[j];break}d[g]=r}0==d[h]&&(0l&&0>t?d[h]=-d[g]:d[h]=d[g],n&&(d[h]=-d[h]))}}}function hK(a,b,c){var d;d=a.c[b].f;return 1>d||4g?e.i=3-g-c.b[d].n:4==g?(c.b[d].n=-1,e.i=0):5g?0c.b[d].n?e.i=2-g-c.b[d].n:e.i=4-g:(c.b[d].n=g-4,e.i=4-g+c.b[d].n);break;case 4:case 7:3>g?e.i=3-g+c.b[d].n:3==g?0>c.b[d].n?(c.b[d].n=0,e.i=0):0c.b[d].n?(c.b[d].n=0,e.i=0):0g?e.i=2-g+c.b[d].n:2==g?0>c.b[d].n?(c.b[d].n=0,e.i=0):0f;)if(0e.i&&(e.i=0)}}}function iH(a){NN(this);this.b[0]=new RJ;this.t=this.q=this.p=0;this.k=a}\nfunction SI(a,b){var c,d,e,f,g,h,j,l,n;iH.call(this,a);if(null!=b&&(f=m,l=QI(b),null!=l)){n=new FF(b,l,!0);for(g=1;4>=g;++g)f=RI(n,l);e=xI(mF(Ry(f.substr(0,3)),10)).a;j=xI(mF(Ry(f.substr(3,3)),10)).a;g=0;try{g=xI(mF(Ry(f.substr(14,1)),10)).a}catch(o){if(o=Gq(o),!G(o,98))throw o;}RG(this,(SG(),1==g?TG:UG));for(g=1;g<=e;++g){d=AJ(this,null);f=RI(n,l);d.q=(new XL(UL(Ry(f.substr(0,10))))).a;d.r=-(new XL(UL(Ry(f.substr(10,10))))).a;d=34;34>f.length&&(d=f.length);d=Ry(f.substr(31,d-31));jJ(this,g,d);62<=\nf.length&&(h=Ry(f.substr(60,3)),0=h))){var r=void 0,r=bN(d);d=0d&&(d=0);this.b[g].d=d}if(39<=f.length&&(h=Ry(f.substr(37,2)),0=h))){f=0;switch(h){case 1:f=3;break;case 2:f=2;break;case 3:f=1;break;case 4:f=0;break;case 5:f=-1;break;case 6:f=-2;break;case 7:f=-3}this.b[g].n=f}}for(g=1;g<=j;++g)e=OJ(this,null),f=\nRI(n,l),e.i=xI(mF(Ry(f.substr(0,3)),10)).a,e.j=xI(mF(Ry(f.substr(3,3)),10)).a,d=xI(mF(Ry(f.substr(6,3)),10)).a,1==d?c=1:2==d?c=2:3==d?c=3:c=9,h=0,11b.length)this.p=0;else{try{j=new EF(b);g=xI(mF(CF(j),10)).a;h=xI(mF(CF(j),10)).a;for(f=1;f<=g;++f)n=CF(j),c=(o=AJ(this,null),jJ(this,this.p,n),o),c.q=(new XL(UL(CF(j)))).a,c.r=-(new XL(UL(CF(j)))).a;for(f=1;f<=h;++f){d=OJ(this,null);d.i=xI(mF(CF(j),10)).a;d.j=xI(mF(CF(j),10)).a;e=xI(mF(CF(j),10)).a;l=0;if(-1==e)l=e=1;else if(-2==e)e=1,l=2;else if(-5==e)e=2,l=10;else if(11==\ne||12==e||13==e||14==e)l=e,e=9;d.c=e;d.f=l}YN(this);XJ(this);eH(this)}catch(r){r=Gq(r);if(G(r,98)){r.Cd();this.p=0;return}throw r;}a&&!a.bb&&YG(this);eK(this)}}function VI(a,b,c){var d,e,f,g;iH.call(this,a);g=SH(b.p+1);for(e=1;e<=b.p;++e)b.a[e]==c&&(AJ(this,b.b[e]),g[e]=this.p);for(e=1;e<=b.q;++e)if(a=b.c[e].i,d=b.c[e].j,!(b.a[a]!=c&&b.a[d]!=c)&&!(b.a[a]!=c||b.a[d]!=c))f=OJ(this,b.c[e]),f.i=g[a],f.j=g[d];this.i=b.i;YN(this)}\nfunction aO(a,b,c){var d,e,f;iH.call(this,a);f=SH(b.p+1);for(d=1;d<=b.p;++d)b.b[d].k==c&&(AJ(this,b.b[d]),f[d]=this.p);for(d=1;d<=b.q;++d)a=b.c[d],a.e==c&&(e=OJ(this,a),e.i=f[a.i],e.j=f[a.j]);RG(this,b.f);this.i=b.i;YN(this)}\nfunction pJ(a,b,c){var d,e,f,g;iH.call(this,a);for(a=1;a<=c;++a)this.p+=b[a].p,this.q+=b[a].q,this.t+=b[a].t,b[a].f.a&&RG(this,(SG(),SG(),TG));this.b=D(ON,q,116,this.p+1,0);this.c=D(PN,q,117,this.q+1,0);f=g=e=0;for(a=1;a<=c;++a){for(d=1;d<=b[a].p;++d)++e,this.b[e]=$M(b[a].b[d]);for(d=1;d<=b[a].q;++d)++g,this.c[g]=eN(b[a].c[d]),this.c[g].i+=f,this.c[g].j+=f;f=e}YN(this)}\nfunction FG(a){var b;NN(this);this.k=a.k;this.p=a.p;this.q=a.q;this.t=a.t;this.b=D(ON,q,116,this.p+1,0);for(b=0;b(0>=a?0-a:a)&&(a=0);a=P(J(Q(a*Math.pow(10,c))))/Math.pow(10,c);e=m+(new XL(a)).a;d=Py(e,Qy(46));0>d&&(e+=bc,d=Py(e,Qy(46)));f=e.length;for(a=1;a<=c-f+d+1;++a)e+=xc;if(0==b)return e;e.length>b&&(e=Gd);c=m;for(a=1;a<=b-e.length;++a)c+=ha;return c+e}function QI(a){var b;b=new FF(a,fa,!0);if(4b&&(d=Gd);e=m;for(c=1;c<=b-d.length;++c)e+=ha;return e+d}function RI(a,b){for(var c,d;a.j=zF(a,a.a),a.j>16&255)),Fw(0.7*(g.d>>8&255)),Fw(0.7*(g.d&255))),QH(a.a,g)):(h=new qm(Fw(0.7*(g.d>>16&255)),Fw(0.7*(g.d>>8&255)),Fw(0.7*(g.d&255))),f=DD(g),QH(a.a,h));g=P(J(Q(R)));d=P(J(Q(d*R)));e=P(J(Q(e*R)));b=P(J(Q(b*R)));c=P(J(Q(c*R)));d-=g;e-=g;yH(a.a,b+g,c+g,d-g,e-g);QH(a.a,h);yH(a.a,b,c,d,g);yH(a.a,b,c+g,g,e);QH(a.a,f);yH(a.a,b+d,c,g,e+g);yH(a.a,b+1,c+e,d,g)}\nfunction tH(a,b,c,d,e){a=a.a;b=P(J(Q(b*R)));c=P(J(Q(c*R)));d=P(J(Q(d*R)));e=P(J(Q(e*R)));uH(a,!0);vH(a,wH(a,b,c,d,e))}function EH(a,b,c,d){var e,f,g;f=D(B,u,-1,d,1);g=D(B,u,-1,d,1);for(e=0;e=b||b>=YC(this.a)-1||0>=c||c>=ZC(this.a)-1)&&(this.a.j=!1);this.a.j?DJ(this.a.c,a,b,c):yI(this.a.c,a,b,c);this.a.pb.focus()};_.a=null;function xO(a){this.a=a}w(741,1,{},xO);_.od=function(a){this.a.j=!1;Ut(a);Vt(a);LJ(this.a.c)};_.a=null;\nfunction yO(a){this.a=a}w(742,1,{},yO);_.nd=function(){this.a.j&&(this.a.j=!1)};_.a=null;function zO(a){this.a=a}w(743,1,{},zO);_.a=null;function AO(a){this.a=a}w(744,1,{},AO);_.a=null;function mO(){kO.call(this);this.pb.style[Kk]=Gc;this.pb.style[ci]=Gc}w(745,736,Ql,mO);function BO(a){this.a=a}w(746,1,{},BO);_.Yd=function(){Rq((Oq(),Pq),new DO(this))};_.a=null;function DO(a){this.a=a}w(747,1,{},DO);_.pd=function(){this.a.a.c&&(WC(this.a.a.c),zK(this.a.a))};_.a=null;\nfunction EO(a,b){var c;c=b.a;c.e=4;return uJ(a.a.c,c,b.d,b.e)}function oO(a){this.a=a}w(748,1,{},oO);_.Ph=function(a){return EO(this,a)};_.a=null;function Hv(a,b){yI(a.a.c,b.a,b.d,b.e);return uJ(a.a.c,b.a,b.d,b.e)}function pO(a){this.a=a}w(749,1,{},pO);_.Ph=function(a){return Hv(this,a)};_.a=null;function qO(a){this.a=a}w(750,1,{},qO);_.Ph=function(a){return DJ(this.a.c,a.a,a.d,a.e)};_.a=null;function rO(a){this.a=a}w(751,1,{},rO);_.Ph=function(){return LJ(this.a.c)};_.a=null;\nfunction zu(a,b){var c;c=J(Q(b.b));c=new UE(b,0,Gj,c);MG(a.a.c,c);return!0}function sO(a){this.a=a}w(752,1,{},sO);_.Ph=function(a){return zu(this,a)};var FO=_.a=null;function GO(){GO=x;FO=new rx((Ix(),new Hx("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAEklEQVR42mM4MzPtPzJmIF0AAOqfLKHtSuV7AAAAAElFTkSuQmCC")),4,4)}function HO(){HO=x;IO={}}\nfunction JO(a,b,c){var d;c&&(b.style[Fh]=c.b+tj,d=c.a,d!=Ne&&(b.style[Eh]=d),0!=(c.c&1)&&(b.style[Hh]=Gg),0!=(c.c&2)&&(b.style[Gh]=ii));a.e.style[Jk]=$i}\nfunction $D(a){var b=KO,c,d,e,f,g,h,j,l,n,o,r,t,y;c=Xp(a);c in IO?a=IO[c]:(d=$doc.getElementsByTagName("body")[0],e=$doc.createElement(Zj),f=$doc.createElement(gi),f.style[ph]=(ks(),"inline"),f.style[Gk]=(lt(),"baseline"),f.style[yi]=Dc,f.style[zi]=Dc,f.width=1,f.height=1,g=(GO(),FO),f.src=g.d.a,a=(h=$doc.createTextNode(Cf),JO(b,e,a),e.appendChild(h),e.appendChild(f),d.appendChild(e),j=dr(e),l=dr(e)+(e.offsetHeight||0),n=l-j,o=dr(f)+(f.offsetHeight||0)+1,r=l-o,t=o-j,d.removeChild(e),y=new LO,y.a=\nt,y.b=r,y.c=n,y),IO[c]=a);return a}function MO(){HO();var a,b,c,d,e;Rs();this.a=z(Jw,q,1,["monospace","sans-serif",Sj]);this.c={};this.b={};this.d=$doc.getElementsByTagName("body")[0];this.e=$doc.createElement(Zj);hr(this.e,this.f);this.e.style[Fh]="72.0px";for(b=this.a,c=0,d=b.length;c=g?h=wH(a,b,c,d,e):h=(j=f+g,l=0,jg)&&(n=1),o=b+d/2,r=c+e/2,t=d/2,y=e/2,v=SO(o,r,t,y,f),s=SO(o,r,t,y,j),A=" text { cursor: default; } <\/style>":\nm;b=c+d+b+qd;b!==a.q&&(hr(a.t.pb,b),a.q=b);a.o=!0;a.p=!1}}function QH(a,b){(a.e=b)&&(a.f=TO(b))}function sK(a,b){var c,d,e;a.i=(c=b.b,d=b.a,e=m,12!=c&&(e=\' font-size="\'+c+\'px"\'),"Plain"!=d&&(e+=\' font-family="\'+d+oa),0!=(b.c&1)&&(e+=\'font-weight="bold"\'),0!=(b.c&2)&&(e+=\'font-style="italic"\'),e)}function PH(a,b){(a.n=b)&&b&&(a.c=\'stroke-width="\'+(b.e==Fw(b.e)?m+Fw(b.e):m+b.e)+pa)}w(763,507,{});_.d=null;_.e=null;_.f=Dg;_.i=null;_.j=!0;_.k=null;_.o=!1;_.p=!1;_.q=m;_.r=0;_.s=0;_.t=null;_.u=null;\nvar RO,QO;function Dv(a,b){var c;c=b.a.targetTouches;return 1==c.length?(c=c[0],a.b.d=c.clientX-ar(a.o.pb)+pr(a.o.pb)+wr(a.o.pb.ownerDocument),a.b.e=c.clientY-dr(a.o.pb)+(a.o.pb.scrollTop||0)+xr(a.o.pb.ownerDocument),a.b.a=new CO(b),b.a.preventDefault(),!0):!1}\nfunction nO(a){this.o=a;this.b=new UO;this.c=new VO(this);Yy(this.o,new WO(this),(Ev(),Ev(),Fv));Yy(this.o,new XO(this),(wv(),wv(),xv));Yy(this.o,new YO(this),(Av(),Av(),Bv));Yy(this.o,new ZO(this),(sv(),sv(),tv));Yy(this.o,new $O,(Fu(),Fu(),Gu));Yy(this.o,new aP(this),(Bu(),Bu(),Cu));Yy(this.o,new bP(this),(wu(),wu(),xu))}w(764,1,{},nO);_.a=null;_.b=null;_.c=null;_.d=!1;_.e=null;_.f=null;_.i=null;_.j=null;_.k=null;_.n=null;_.o=null;function VO(a){Sm();this.a=a}w(765,67,{},VO);\n_.zd=function(){!this.a.d&&this.a.i&&EO(this.a.i,this.a.b)};_.a=null;function WO(a){this.a=a}w(766,1,{},WO);_.a=null;function XO(a){this.a=a}w(767,1,{},XO);_.a=null;function YO(a){this.a=a}w(768,1,{},YO);_.a=null;function ZO(a){this.a=a}w(769,1,{},ZO);_.a=null;function $O(){}w(770,1,{},$O);function aP(a){this.a=a}w(771,1,{},aP);_.a=null;function bP(a){this.a=a}w(772,1,{},bP);_.a=null;function UO(){}w(773,1,{},UO);_.a=null;_.b=0;_.c=0;_.d=0;_.e=0;\nfunction TO(a){var b,c;c=a.d>>16&255;b=a.d>>8&255;a=a.d&255;if(0==c*b*a){if(0==c&&0==b&&0==a)return Dg;if(255==c&&0==b&&0==a)return"red";if(0==c&&255==b&&0==a)return"green";if(0==c&&0==b&&255==a)return Eg}return 255==c&&255==b&&255==a?"white":Dj+c+nb+b+nb+a+jb}function JK(){var a=$wnd.navigator.userAgent.match(/MSIE\\s+(\\d+\\.\\d+)/);return a?parseFloat(a[1]):-1}\nfunction cP(a){var b,c,d,e,f;dz(a);d=(ez(),xB(null));e=new OO;EA(e,a);nz(d,e,d.pb);f=a.le();b=a.ke();c=JK();9<=c?(++f,++b):7==c&&G(a,40)&&(c=a.pb.textContent,2>=c.length&&(f+=8));GA(e,a);wz(d,e);return new sC(f,b)}function NF(a){try{$wnd.console.log(a)}catch(b){}}function dP(){this.pb=$doc.createElement(qh);this.pb[Xg]=ki;this.pb.style[kj]=di;this.pb.style[qj]=ig;this.pb.style[Kk]=Gc;this.pb.style[ci]=Gc;this.pb.setAttribute("contenteditable",Ch)}w(775,388,Tl,dP);\nfunction SO(a,b,c,d,e){e*=0.017453292519943295;a+=c*Math.cos(e);b+=-d*Math.sin(e);return new NO(new XL(a),new XL(b))}function wH(a,b,c,d,e){return\'=f.k||(701==f.k?null.ii():401==f.k||402==f.k?(null.ii(),null.ii(),null.ii(),null.ii(),null.ii()):500<=f.k&&507>=f.k&&(g=null.ji,500!=g&&(g=new Nu(null.ji,g,null),g.i=f.f,g.j=f.i,f=f.j&63,g.e=f&12)))}function hP(a){this.a=a}w(785,1,Jl,hP);_.pd=function(){hB(this)};_.a=null;function BE(){eP();gP.call(this);this.a=new MB}w(786,778,{},BE);_.Mf=yx;_.a=null;function EE(){new cw;var a;a:{switch(Gw){case 1:case 3:case 5:case 7:a=new jP;break a}a=new kP}this.a=a}w(799,531,{},EE);_.a=null;\nfunction kP(){}w(801,1,{},kP);_.ei=function(a){a&&a&&Aq(8,new lP(a));return null};_.fi=function(a){Aq(8,new mP(a))};function jP(){}w(800,801,{},jP);_.ei=function(){return $wnd.clipboardData.getData("Text")};_.fi=function(a){$wnd.clipboardData.setData("Text",a)};function lP(a){this.a=a}w(804,1,Xl,lP);_.Dd=GC;_.a=null;function mP(a){this.a=a}w(806,1,Xl,mP);_.Dd=GC;_.a=null;function vu(a,b){a.onloadend=function(a){b._f(a.target.result)}}function VF(a){this.a=a}w(811,1,{},VF);_.a=null;\nfunction SF(){}w(812,1,{},SF);function TF(){}w(813,1,{},TF);function UF(){}w(814,1,{},UF);function CE(){this.b=new FE;this.d=new fD}w(817,529,{},CE);function wI(a,b,c,d){b=mC(b);c+=b.a;d+=b.b;Mz(a.a,c,d);Nz(a.a)}function lE(){eP();gP.call(this);var a=this.a=new nP;a.ab=!0;a.a.f=!0;this.a.db=!0}w(819,778,{},lE);_.Mf=yx;_.a=null;function jF(){}w(827,558,{},jF);\nfunction gF(){gF=x;var a;a=(YE(),ZE["os.encoding"]);if(null!=a)try{if(H("UTF-8",a))jM(m);else if(H("ISO-8859-1",a)||H("ISO-LATIN-1",a))D(kM,bm,-1,0,1);else throw new GL(a+ma);}catch(b){if(b=Gq(b),!G(b,107))throw b;}}function fE(a,b){a.a=31*a.a+Fw((new XL(b)).a)}function lD(){}w(832,1,{},lD);_.hC=yx;_.a=1;\nfunction nP(){Hz();var a=(Wz(),Zz);Pz.call(this,!0,Ei);this.U=a.a;this.a=new oP(this);this.a.d=!0;Cz(this,this.a);this.ab=!0;this.a.f=!0;-1==this.lb?Gy(this.pb,1|(this.pb.__eventBits||0)):this.lb|=1;(Oz?kr(this.pb):lr(kr(this.pb)))[Xg]=$h;this.pb.style[Mk]="2147483647"}w(863,390,Ql,nP);_.ee=function(a){bz(this,a);1==Tx(a.type)&&Jz(this,!1)};_.a=null;\nfunction oP(a){this.b=a;this.c=new Nm;this.i=new Nm;a=(kB(),jB);new bC(a.d,a.b,a.c,a.e,a.a);var b;b=$doc.createElement(ek);this.e=$doc.createElement(jk);Nx(b,this.e);this.o=!0;a=rA();b=(Ox(),Px(b));a.appendChild(b);this.pb=a;co();this.pb.setAttribute(Fj,Ho.a);-1==this.lb?Gy(this.pb,2225|(this.pb.__eventBits||0)):this.lb|=2225;this.pb[Xg]=Zh;a=Oy(this.pb)+"-vertical";Jy(this.me(),a,!0);this.pb.style[jj]=Ec;this.pb.setAttribute("hideFocus",Ck);Yy(this,new iB(this),(Ot(),Ot(),Pt))}w(864,430,Tl,oP);\n_.ee=function(a){switch(Tx(a.type)){case 16:this.a=!1;break;case 32:this.a=!0}aB(this,a)};_.Oe=function(a,b){eB(this,a,b);b||this.a&&Jz(this.b,!1)};_.a=!0;_.b=null;w(913,1,{});\nfunction pP(a,b,c,d){var e,f,g,h,j,l;h=(!c?b.b:sF(b,c,~~Xp(c)))[0][d.length];b=j=e=null;for(c=0,f=!h?0:h.length;cb?{}:new bl[b],_.cM=c);for(var e=3;e=a.t+a.n;if(a.p&&!d)return d=(b-a.t)/a.n,a.td((1+Math.cos(3.141592653589793+3.141592653589793*d))/2),a.o&&a.r==c;if(!a.p&&b>=a.t&&(a.p=!0,a.sd(),!(a.o&&a.r==c)))return!1;return d?(a.o=!1,a.p=!1,a.rd(),!1):!0}w(58,1,{});_.qd=function(){this.u&&this.rd()};\n_.rd=function(){this.td((1+Math.cos(6.283185307179586))/2)};_.sd=function(){this.td((1+Math.cos(3.141592653589793))/2)};_.n=-1;_.o=!1;_.p=!1;_.q=null;_.r=-1;_.s=null;_.t=-1;_.u=!1;function sm(a,b){if(tm(a.a,b)){var c=a.a,d=a.a.s,e;e=new um(d,a.a.k);vm(d.a,e);1==d.a.c&&wm(d.b,16);c.q=e}else a.a.q=null}function xm(a){this.a=a}w(59,1,{},xm);_.a=null;w(60,1,{});w(61,1,{13:1});function ym(){ym=x;zm=new Am}w(62,60,{});var zm=null;function Am(){this.a=new Bm;this.b=new Cm(this)}w(63,62,{},Am);\nfunction Dm(){Dm=x;Em=new Bm;var a=new Fm;Gm();Hm(Im?Im:Im=new Jm,a)}function pm(a){a.b?$wnd.clearInterval(a.c):$wnd.clearTimeout(a.c);om(Em,a)}function wm(a,b){if(0>b)throw new Km("must be non-negative");a.b?$wnd.clearInterval(a.c):$wnd.clearTimeout(a.c);om(Em,a);a.b=!1;a.c=Lm(a,b);vm(Em,a)}function Lm(a,b){return $wnd.setTimeout(B(function(){a.ud()}),b)}w(65,1,{});_.ud=function(){this.b||om(Em,this);this.vd()};_.b=!1;_.c=0;var Em;function Cm(a){Dm();this.a=a}w(64,65,{},Cm);\n_.vd=function(){var a=this.a,b,c,d,e,f;b=C(Mm,q,14,a.a.c,0);b=Nm(a.a,b);c=new Om;for(e=0,f=b.length;erm()-d.a;){e=!1;for(f=0;f=d&&0=b&&(c=1301+d));ot(a,c)}a=!0}a&&Uq(this.a)};_.Gd=function(){return bt};var bt;function pt(){pt=x;qt=new As(si,new rt)}function rt(){}w(265,246,cl,rt);_.Dd=function(a){a.ld(this)};_.Gd=function(){return qt};var qt;function st(){st=x;tt=new As(ti,new ut)}\nfunction ut(){}w(266,246,cl,ut);_.Dd=function(a){a.md(this)};_.Gd=function(){return tt};var tt;function vt(){vt=x;wt=new As(ui,new xt)}function xt(){}w(267,246,cl,xt);_.Dd=function(a){a.nd(this)};_.Gd=function(){return wt};var wt;function yt(){yt=x;zt=new As(vi,new At)}function At(){}w(268,246,cl,At);_.Dd=function(a){var b;b=this.a;Aq((xq(),yq),new Bt(a,a.b,b))};_.Gd=function(){return zt};var zt;function Ct(){Ct=x;Dt=new As(wi,new Et)}function Et(){}w(269,246,cl,Et);_.Dd=function(a){a.od(this)};\n_.Gd=function(){return Dt};var Dt;function Ft(){Ft=x;Gt=new As(xi,new Ht);new As(se,new Ht)}function Ht(){}w(270,246,cl,Ht);_.Dd=function(a){var b,c,d,e,f;b=Math.round(-this.a.wheelDelta/40)||0;b=new It(a.a.i,Es(this),Fs(this),b);f=0;for(c=Jt(a.a.i.Pc,C(Kt,q,75,0,0)),d=0,e=c.length;da.qI&&(c.tM==x||c.cM&&c.cM[1])&&(!c.cM||!c.cM[-a.qI]))throw new Su;}return a[b]=c}w(300,1,{},Lu);_.qI=0;function Pu(){Pu=x;Qu=[];Ru=[];var a=new Lu,b=Qu,c=Ru,d=0,e,f;for(f in a)if(e=a[f])b[d]=f,c[d]=e,++d}var Qu,Ru;function H(a,b){return null!=a&&a.cM&&!!a.cM[b]}function Ap(a){return null!=a&&a.tM!=x&&!(a.cM&&a.cM[1])}function Dp(a){return a.tM==x||a.cM&&!!a.cM[1]}\nfunction Tu(a){return null==a?null:a}function Uu(a){return~~Math.max(Math.min(a,2147483647),-2147483648)}var Vu=-1;\nfunction Wu(){var a;$stats&&Xu("com.google.gwt.useragent.client.UserAgentAsserter");a=navigator.userAgent.toLowerCase();if(-1!=a.indexOf(Qi))a=Qi;else if(-1!=a.indexOf("webkit"))a="safari";else if(-1!=a.indexOf(yi)&&9<=$doc.documentMode)a="ie9";else if(-1!=a.indexOf(yi)&&8<=$doc.documentMode)a=Mh;else{var b;var c=/msie ([0-9]+)\\.([0-9]+)/.exec(a);c&&3==c.length&&(b=6E3<=1E3*parseInt(c[1])+parseInt(c[2]));a=b?"ie6":-1!=a.indexOf("gecko")?"gecko1_8":"unknown"}J(Mh,a)||$wnd.alert("ERROR: Possible problem with your *.gwt.xml module file.\\nThe compile time user.agent value (ie8) does not match the runtime user.agent value ("+\na+"). Expect more errors.\\n");$stats&&Xu("com.google.gwt.user.client.DocumentModeAsserter");b=$doc.compatMode;a=y(Yu,q,1,[Sd]);for(c=0;cd)$doc.createStyleSheet().cssText=a;else{f=2147483647;e=-1;for(b=0;b>22&4194303,0>a?1048575:0)}function fv(a){return ev(a.l,a.m,a.h)}function ev(a,b,c){return _=new gv,_.l=a,_.m=b,_.h=c,_}\nfunction hv(a,b){var c,d,e,f,g;if(0==b.l&&0==b.m&&0==b.h)throw new iv;if(0==a.l&&0==a.m&&0==a.h)return jv=ev(0,0,0),ev(0,0,0);if(524288==b.h&&0==b.m&&0==b.l)return c=a,524288==c.h&&0==c.m&&0==c.l?(jv=ev(0,0,0),c=fv((kv(),lv))):(jv=ev(c.l,c.m,c.h),c=ev(0,0,0)),c;g=!1;0!=b.h>>19&&(b=mv(b),g=!0);e=b.l;0!=(e&e-1)?f=-1:(d=b.m,0!=(d&d-1)?f=-1:(c=b.h,f=0!=(c&c-1)||0==c&&0==d&&0==e?-1:0==c&&0==d&&0!=e?nv(e):0==c&&0!=d&&0==e?nv(d)+22:0!=c&&0==d&&0==e?nv(c)+44:-1));c=d=e=!1;if(524288==a.h&&0==a.m&&0==a.l)if(e=\nd=!0,-1==f)a=fv((kv(),ov)),c=!0,g=!g;else return c=pv(a,f),g&&qv(c),jv=ev(0,0,0),c;else 0!=a.h>>19&&(e=!0,a=mv(a),c=!0,g=!g);if(-1!=f){c=a;d=f;f=g;g=e;e=pv(c,d);f&&qv(e);var h;22>=d?(f=c.l&(1<=d?(f=c.l,h=c.m&(1<r?j=\n!1:(n=j.l-f.l,o=j.m-f.m+(n>>22),r+=o>>22,0>r?j=!1:(j.l=n&4194303,j.m=o&4194303,j.h=r&1048575,j=!0));if(j&&(22>l?h.l|=1<l?h.m|=1<>>1;f.m=j>>>1|(n&1)<<21;f.l=o>>>1|(j&1)<<21;--l}g&&qv(h);e?(jv=mv(c),d&&(jv=uv(jv,(kv(),lv)))):jv=ev(c.l,c.m,c.h);return h}function qv(a){var b,c,d;b=~a.l+1&4194303;c=~a.m+(0==b?1:0)&4194303;d=~a.h+(0==b&&0==c?1:0)&1048575;a.l=b;a.m=c;a.h=d}\nfunction sv(a){var b;b=Av(a.h);return 32==b?(b=Av(a.m),32==b?Av(a.l)+32:b+20-10):b-12}var jv=null;function Bv(a,b){return a.l==b.l&&a.m==b.m&&a.h==b.h}function L(a){var b,c,d;if(isNaN(a))return kv(),Cv;if(-9223372036854775E3>a)return kv(),Dv;if(9223372036854775E3<=a)return kv(),ov;d=!1;0>a&&(d=!0,a=-a);c=0;17592186044416<=a&&(c=Uu(a/17592186044416),a-=17592186044416*c);b=0;4194304<=a&&(b=Uu(a/4194304),a-=4194304*b);a=Uu(a);b=ev(a,b,c);d&&qv(b);return b}\nfunction Ev(a){var b,c;return-129a?(b=a+128,null==Fv&&(Fv=C(Gv,q,30,256,0)),c=Fv[b],!c&&(c=Fv[b]=dv(a)),c):dv(a)}function Hv(a){var b=Gk,c,d;c=a.h>>19;d=b.h>>19;return 0==c?0!=d||a.h>b.h||a.h==b.h&&a.m>b.m||a.h==b.h&&a.m==b.m&&a.l>b.l:!(0==d||a.h>19;d=b.h>>19;return 0==c?0!=d||a.h>b.h||a.h==b.h&&a.m>b.m||a.h==b.h&&a.m==b.m&&a.l>=b.l:!(0==d||a.h>13|(a.m&15)<<9;e=a.m>>4&8191;f=a.m>>17|(a.h&255)<<5;g=(a.h&1048320)>>8;h=b.l&8191;j=b.l>>13|(b.m&15)<<9;l=b.m>>4&8191;n=b.m>>17|(b.h&255)<<5;o=(b.h&1048320)>>8;r=c*h;z=d*h;t=e*h;v=f*h;g*=h;0!=j&&(z+=c*j,t+=d*j,v+=e*j,g+=f*j);0!=l&&(t+=c*l,v+=d*l,g+=e*l);0!=n&&(v+=c*n,g+=d*n);0!=o&&(g+=c*o);c=(r&4194303)+((z&511)<<13);r=(r>>22)+(z>>9)+((t&262143)<<4)+((v&31)<<17)+(c>>22);t=(t>>18)+(v>>5)+((g&4095)<<8)+(r>>22);return ev(c&4194303,r&\n4194303,t&1048575)}function mv(a){var b,c;b=~a.l+1&4194303;c=~a.m+(0==b?1:0)&4194303;return ev(b,c,~a.h+(0==b&&0==c?1:0)&1048575)}function tv(a,b){var c,d,e,b=b&63;22>b?(c=a.l<>22-b,e=a.h<>22-b):44>b?(c=0,d=a.l<>44-b):(d=c=0,e=a.l<b?(e=c>>b,d=a.m>>b|c<<22-b,c=a.l>>b|a.m<<22-b):44>b?(e=d?1048575:0,d=c>>b-22,c=a.m>>b-22|c<<44-b):(e=d?1048575:0,d=d?4194303:0,c>>=b-44);return ev(c&4194303,d&4194303,e&1048575)}function uv(a,b){var c,d;c=a.l-b.l;d=a.m-b.m+(c>>22);return ev(c&4194303,d&4194303,a.h-b.h+(d>>22)&1048575)}function Q(a){return a.l|a.m<<22}\nfunction Jv(a){var b,c,d;if(0==a.l&&0==a.m&&0==a.h)return bc;if(524288==a.h&&0==a.m&&0==a.l)return"-9223372036854775808";if(0!=a.h>>19)return $a+Jv(mv(a));for(c=m;!(0==a.l&&0==a.m&&0==a.h);){b=Ev(1E9);a=hv(a,b);b=m+Q(jv);if(!(0==a.l&&0==a.m&&0==a.h))for(d=9-b.length;0=a.children.length?a.appendChild(b):a.insertBefore(b,a.children[c])}\nfunction Xw(a,b){var c=(a.__eventBits||0)^b;a.__eventBits=b;c&&(c&1&&(a.onclick=b&1?Sw:null),c&3&&(a.ondblclick=b&3?Tw:null),c&4&&(a.onmousedown=b&4?Sw:null),c&8&&(a.onmouseup=b&8?Sw:null),c&16&&(a.onmouseover=b&16?Sw:null),c&32&&(a.onmouseout=b&32?Sw:null),c&64&&(a.onmousemove=b&64?Sw:null),c&128&&(a.onkeydown=b&128?Sw:null),c&256&&(a.onkeypress=b&256?Sw:null),c&512&&(a.onkeyup=b&512?Sw:null),c&1024&&(a.onchange=b&1024?Sw:null),c&2048&&(a.onfocus=b&2048?Sw:null),c&4096&&(a.onblur=b&4096?Sw:null),\nc&8192&&(a.onlosecapture=b&8192?Sw:null),c&16384&&(a.onscroll=b&16384?Sw:null),c&32768&&("IFRAME"==a.nodeName?b&32768?a.attachEvent(Oi,Vw):a.detachEvent(Oi,Vw):a.onload=b&32768?Uw:null),c&65536&&(a.onerror=b&65536?Sw:null),c&131072&&(a.onmousewheel=b&131072?Sw:null),c&262144&&(a.oncontextmenu=b&262144?Sw:null),c&524288&&(a.onpaste=b&524288?Sw:null))}function Rw(){for(var a=!1,b=0;b<$wnd.__gwt_globalEventArray.length;b++)!$wnd.__gwt_globalEventArray[b]()&&(a=!0);return!a}\nvar Tw=null,Sw=null,Vw=null,Uw=null;function vw(){var a=tw,b=m,c=$wnd.location.hash;0d||d>a.p.c)throw new Fx;b.ob==a&&(f=a.se(b),fd||d>=c.c)throw new Fx;for(--c.c;dg&&l.charAt(g)==$a&&0==l.indexOf(f)&&(e[h]=d+l.substring(g))}c.className=e.join(ea)}Tx(this,this.T);Yx(this);$w(Rq(this.pb),Yi,!1);$w(this.T.b,b+"Content",!0)}w(365,366,rl);_.ke=function(){ox(this.T)};_.le=function(){rx(this.T)};_.ze=function(){return this.T.jb};_.ue=function(){return new Vx(this.T)};_.re=function(a){return this.T.re(a)};_.Ae=function(a){Tx(this.T,a);Yx(this)};_.T=null;w(364,365,rl);_.oe=xx;\nfunction gy(){gy=x;hy=new iy(0,(cy(),dy));jy=new iy(1,ky);ly=new iy(2,my);ny=y(oy,q,37,[hy,jy,ly])}function iy(a,b){this.b=a;this.a=b}w(368,193,{37:1,88:1,93:1,95:1},iy);_.a=null;var ny,hy,jy,ly;function py(){py=x;qy=y(Yu,q,1,[ek,qi,Bg])}\nfunction fy(a){var b;py();var c,d;c=this.pb=Tq(Tj);this.c=Tq(Wj);gw(c,this.c);c[Fg]=0;for(c=c[Eg]=0;c");h=new Rv(Mq(c.a));g.innerHTML=h.a||m;g=Rq(g);a.kb&&(a.pb.__listener=null);\nif(a.pb&&(h=a.pb,b=h.parentNode))b.insertBefore(g,h),b.removeChild(h);a.pb=g;a.kb&&(a.pb.__listener=a);-1==a.lb?(g=a.pb,a=133333119|(a.pb.__eventBits||0),mw(),Xw(g,a)):a.lb|=133333119}w(397,398,{},Ty);_.a=0;_.b=0;_.c=0;_.d=null;_.e=0;function Uy(a,b){this.a=a;this.b=b}w(399,1,{},Uy);_.pd=function(){var a,b;this.b.a!=this.a||this!=this.a.f||(this.a.f=null,this.b.kb?(a=(b=$doc.createEventObject(),b.type=ci,b),this.b.pb.fireEvent("on"+a.type,a)):this.b.pb.__gwtLastUnhandledEvent=ci)};_.a=null;_.b=null;\nw(401,329,Vl);function $y(a){this.a=a}w(403,401,Vl,$y);_.Od=function(a){this.a.Ge(a.f,a.a)};function az(a,b,c){var d;if(a.o){var e=d=Tq(lk);Ww(a.e,(hw(),iw(e)),b);a=(hw(),iw(c));d.appendChild(a)}else d=a.e.children[0],Ww(d,(hw(),iw(c)),b)}\nfunction bz(a,b,c){var d;b.b&&(cz(a,b),c&&b.a?(cz(a,null),a=b.a,b=(xq(),yq),b.c=Bq(b.c,[new dz(a),!1])):null!=b.d&&(a.j=new ez(a,b),c=(cy(),ky),a.j.U=c,a.j.ab=a.f,c=Fh,a.j.ee()[Kg]=c,d=dx(a.pb),J(Eh,d)||Zw(a.j,d+"Popup"),nx(a.j,new $y(a),Im?Im:Im=new Jm),a.n=b.d,d=a.j,a=new fz(a,b),d.pb.style[uk]=Ih,$x(d),Iu(),a.a.o?Zx(a.a.j,Xq(a.a.pb)+Nq(a.a.pb,Mi)-1,Zq(a.b.pb)):Zx(a.a.j,Xq(a.b.pb),Zq(a.a.pb)+Nq(a.a.pb,Li)-1),d.pb.style[uk]=vk))}\nfunction gz(a,b){!b&&a.k&&a.n==a.k.d||b&&!b.b||(cz(a,b),hz(a.pb),b&&a.d&&bz(a,b,!1))}\nfunction iz(a,b){var c;a:{c=b.srcElement;var d,e;for(e=new uu(a.i);e.bc&&(c=a.i.c-1),c==b){d=ww(a.i,b);break}else if(d=ww(a.i,c),d.b)break;cz(a,d)}}w(404,362,jl);_.Yd=function(a){iz(this,a)};_.oe=function(){this.j&&Wx(this.j,!1);rx(this)};_.Ge=function(a,b){mz(this,a,b)};_.d=!1;_.e=null;_.f=!1;_.j=null;_.k=null;_.n=null;_.o=!1;function dz(a){this.a=a}\nw(405,1,{},dz);_.pd=function(){pz(this.a)};_.a=null;function qz(a){this.a=a}w(406,1,{},qz);_.Hd=function(){cz(this.a,null)};_.a=null;function ez(a,b){this.a=a;this.b=b;ay.call(this,!0,li);Tx(this.T,this.b.d);Yx(this);this.fb=!0;this.b.d.bi()}w(407,365,rl,ez);_.Ud=function(a){var b,c;if(!a.a)switch(Nw(a.d.type)){case 4:c=a.d.srcElement;b=this.b.c.pb;if(Wq(b,c)){a.a=!0;break}a.a&&cz(this.a,null)}};_.a=null;_.b=null;function fz(a,b){this.a=a;this.b=b}w(408,1,{},fz);_.a=null;var rz=_.b=null;\nfunction sz(){sz=x;rz=new Lv((bw(),new aw((Iu(),"data:image/gif;base64,R0lGODlhBQAJAIAAAAAAAAAAACH5BAEAAAEALAAAAAAFAAkAAAIMRB5gp9v2YlJsJRQKADs="))),5,9)}function tz(a,b){if(b){var c=dx(a.pb)+Ib;$w(a.ee(),c,!1)}else c=dx(a.pb)+Ib,$w(a.ee(),c,!0);a.b=b}function uz(a,b){this.pb=Tq(Xj);var c=dx(this.pb)+Kb;$w(this.ee(),c,!1);this.pb.innerText=a||m;this.pb[Kg]="gwt-MenuItem";c=$q();this.pb.setAttribute(Kh,c);Kn();this.pb.setAttribute("role",to.a);this.a=b}w(411,363,{41:1,45:1,48:1},uz);_.a=null;_.b=!0;\n_.c=null;_.d=null;function vz(){var a;this.pb=Tq(Xj);this.pb[Kg]="gwt-MenuItemSeparator";a=Tq(gh);gw(this.pb,a);a[Kg]="menuSeparatorInner"}w(412,363,Ql,vz);function wz(){var a,b,c,d,e;b=null.bi();e=dr();d=cr();b[fh]=(gr(),Fi);b[zk]=0+(Cr(),bj);b[Hh]=dc;c=$doc;c=(J(c.compatMode,Sd)?c.documentElement:c.body).scrollWidth||0;a=$doc;a=(J(a.compatMode,Sd)?a.documentElement:a.body).scrollHeight||0;b[zk]=(c>e?c:e)+bj;b[Hh]=(a>d?a:d)+bj;b[fh]="block"}function by(){}w(413,1,{},by);_.Qd=function(){wz()};\nfunction xz(a){this.a=a}w(414,1,{},xz);_.Ud=function(a){var b=this.a,c,d;if(a.a||!b.fb&&a.b)b.db&&(a.a=!0);else if(b.Ud(a),!a.a){d=a.d;c=d.srcElement;var e;try{e=!!c&&!!c.nodeType}catch(f){e=!1}(c=e&&c&&1==c.nodeType?Wq(b.pb,c):!1)&&(a.b=!0);b.db&&(a.a=!0);switch(Nw(d.type)){case 4:case 1048576:if(kw){a.b=!0;break}if(!c&&b.V){b.Ce(!0);break}break;case 8:case 64:case 1:case 2:case 4194304:if(kw){a.b=!0;break}break;case 2048:d=d.srcElement,b.db&&!c&&d&&(d.blur&&d!=$doc.body&&d.blur(),a.a=!0)}}};\n_.a=null;function yz(a){this.a=a}w(415,1,{},yz);_.a=null;function cy(){cy=x;dy=new zz(0);ky=new zz(1);my=new zz(2);Az=y(Bz,q,46,[dy,ky,my])}function zz(a){this.b=a}w(416,193,{46:1,88:1,93:1,95:1},zz);var Az,dy,ky,my;function Cz(a){a.j?a.a.bb&&($doc.body.appendChild(a.a.Z),a.f=zw(a.a.$),wz(),a.b=!0):a.b&&($doc.body.removeChild(a.a.Z),Dz(a.f.a),a.f=null,a.b=!1)}function Ez(a){a.j||(Cz(a),a.c||(tx(),Lx(Fz(null),a.a)));a.a.pb.style[Ng]="rect(auto, auto, auto, auto)";a.a.pb.style[Ui]=vk}\nfunction Gz(a,b){var c,d,e,f,g,h;a.j||(b=1-b);c=f=e=g=0;d=Uu(b*a.d);h=Uu(b*a.e);switch(a.a.U.b){case 2:f=a.e;c=d;break;case 0:g=a.d-d>>1;e=a.e-h>>1;f=e+h;c=g+d;break;case 1:Iu(),f=h,c=d}a.a.pb.style[Ng]="rect("+g+fj+f+fj+c+fj+e+"px)"}\nfunction Xx(a,b,c){a.c=c;nm(a);a.i&&(pm(a.i),a.i=null,Ez(a));a.a.hb=b;var d=a.a;d.eb&&(Dz(d.eb.a),d.eb=null);d._&&(Dz(d._.a),d._=null);if(d.hb){d.eb=lw(new xz(d));var e;e=new yz(d);sw();e=tw?iu(tw.a,(!hu&&(hu=new Jm),hu),e):null;d._=e}c=!c&&a.a.ab;a.a.U!=(cy(),dy)&&!b&&(c=!1);a.j=b;c?b?(Cz(a),a.a.pb.style[Zi]=bg,-1!=a.a.ib&&a.a.De(a.a.cb,a.a.ib),a.a.pb.style[Ng]=oj,tx(),b=Fz(null),Cx(b,a.a,b.pb),a.i=new Hz(a),wm(a.i,1)):qm(a,200):(Cz(a),a.j?(a.a.pb.style[Zi]=bg,-1!=a.a.ib&&a.a.De(a.a.cb,a.a.ib),tx(),\nb=Fz(null),Cx(b,a.a,b.pb)):a.c||(tx(),Lx(Fz(null),a.a)),a.a.pb.style[Ui]=vk)}function ey(a){var b=(ym(),zm);this.k=new xm(this);this.s=b;this.a=a}w(417,58,{},ey);_.rd=function(){Ez(this)};_.sd=function(){this.d=Nq(this.a.pb,Li);this.e=Nq(this.a.pb,Mi);this.a.pb.style[Ui]=Ih;Gz(this,(1+Math.cos(3.141592653589793))/2)};_.td=function(a){Gz(this,a)};_.a=null;_.b=!1;_.c=!1;_.d=0;_.e=-1;_.f=null;_.i=null;_.j=!1;function Hz(a){Dm();this.a=a}w(418,65,{},Hz);_.vd=function(){this.a.i=null;qm(this.a,200)};\n_.a=null;function hw(){hw=x;Iz()}function iw(a){return a.__gwt_resolve?a.__gwt_resolve():a}function Iz(){function a(){}a.prototype={className:m,clientHeight:0,clientWidth:0,dir:m,getAttribute:function(a){return this[a]},href:m,id:m,lang:m,nodeType:1,removeAttribute:function(a){this[a]=void 0},setAttribute:function(a,c){this[a]=c},src:m,style:{},title:m};$wnd.GwtPotentialElementShim=a}function tx(){tx=x;Jz=new Kz;Lz=new pp;ux=new ru}function Mz(a){this.p=new Qx(this);this.pb=a;ox(this)}\nfunction Fz(a){tx();var b,c;c=Au(Lz,a);b=null;if(null!=a&&!(b=$doc.getElementById(a)))return null;if(c&&(!b||c.pb==b))return c;if(0==Lz.d){var d=new Nz;Gm();Hm(Im?Im:Im=new Jm,d);Iu()}!b?c=new Oz:c=new Mz(b);D(Lz,a,c);su(ux,c);return c}w(420,359,rl,Mz);var Jz,Lz,ux;function Kz(){}w(421,1,{},Kz);_.Fe=function(a){a.me()&&a.oe()};function Nz(){}w(422,1,{},Nz);_.Od=function(){tx();try{yx(ux,Jz)}finally{Pz(ux.a),Pz(Lz)}};function Oz(){Mz.call(this,$doc.body)}w(423,420,rl,Oz);\n_.xe=function(a,b,c){b-=ar();c-=br();Ox(a,b,c)};function Vx(a){this.c=a;this.a=!!this.c.jb}w(424,1,{},Vx);_.Vd=Sv;_.Wd=function(){if(!this.a||!this.c.jb)throw new Ix;this.a=!1;return this.b=this.c.jb};_.Xd=function(){this.b&&this.c.re(this.b)};_.b=null;_.c=null;function Qz(a,b){a.pb[sk]=null!=b?b:m}w(427,377,jl);_.Yd=function(a){0!=(Nw(a.type)&896)?qx(this,a):qx(this,a)};_.pe=wx;function Rz(){Rz=x;Sz()}w(426,427,jl);\nfunction Tz(){Rz();var a=Qq(Yj);!fw&&(fw=new ew);!dw&&(dw=new cw);this.pb=a;Iu();this.pb[Kg]="gwt-TextBox"}w(428,426,jl,Tz);function Sz(){Sz=x;Uz=new Vz;Wz=new Xz;Yz=new Zz;$z=new aA;bA=y(cA,q,49,[Uz,Wz,Yz,$z])}w(429,193,ll);var bA,Uz,Wz,Yz,$z;function Vz(){this.b=0}w(430,429,ll,Vz);function Xz(){this.b=1}w(431,429,ll,Xz);function Zz(){this.b=2}w(432,429,ll,Zz);function aA(){this.b=3}w(433,429,ll,aA);function Hx(a,b){var c;for(c=0;cc||c>a.c)throw new Fx;if(a.c==a.a.length){e=C(dA,q,50,2*a.a.length,0);for(d=0;dc;--d)fq(a.a,d,a.a[d-1]);fq(a.a,c,b)}function Qx(a){this.b=a;this.a=C(dA,q,50,4,0)}w(435,1,{},Qx);_.ue=function(){return new Jx(this)};_.a=null;_.b=null;_.c=0;function eA(a){if(a.a>=a.b.c)throw new Ix;return a.b.a[++a.a]}function fA(a){if(0>a.a||a.a>=a.b.c)throw new gA;a.b.b.re(a.b.a[a.a--])}function Jx(a){this.b=a}w(436,1,{},Jx);\n_.Vd=function(){return this.aa)throw new Km("Missing message: awt.133");this.e=a;this.a=2;this.c=0;this.d=10;this.b=0}w(462,1,{55:1},pB);\n_.eQ=function(a){return a===this?!0:H(a,55)?a.e==this.e&&a.a==this.a&&a.c==this.c&&a.d==this.d&&a.b==this.b:!1};_.hC=function(){var a;a=new qB;a.a=31*a.a+Uu((new rB(this.e)).a);a.a=31*a.a+this.a;a.a=31*a.a+this.c;a.a=31*a.a+Uu((new rB(this.d)).a);return a.a};_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;\nfunction sB(){sB=x;tB=uB=new cm(255,255,255);vB=new cm(192,192,192);wB=new cm(128,128,128);xB=new cm(64,64,64);yB=zB=new cm(0,0,0);AB=BB=new cm(255,0,0);new cm(255,175,175);CB=new cm(255,200,0);DB=new cm(255,255,0);new cm(0,255,0);EB=new cm(255,0,255);FB=new cm(0,255,255);GB=HB=new cm(0,0,255)}\nfunction IB(a){var b,c;c=a.d>>16&255;b=a.d&255;a=a.d>>8&255;if(0==c&&0==b&&0==a)return new cm(3,3,3);3>c&&0!=c?c=3:(c=Uu(c/0.7),c=255b&&0!=b?b=3:(b=Uu(b/0.7),b=255a&&0!=a?a=3:(a=Uu(a/0.7),a=255>16&255)),Uu(0.7*(a.d>>8&255)),Uu(0.7*(a.d&255)))}function KB(a,b){return H(b,58)?b.d==a.d:!1}function cm(a,b,c){sB();if((a&255)!=a||(b&255)!=b||(c&255)!=c)throw new Km(ie);this.d=c|b<<8|a<<16|-16777216}\nw(468,1,{58:1,67:1,70:1},cm);_.eQ=function(a){return KB(this,a)};_.hC=LB;_.tS=function(){return MB.d+"[r="+(this.d>>16&255)+",g="+(this.d>>8&255)+",b="+(this.d&255)+Tf};_.a=0;_.b=null;_.c=null;_.d=0;var yB,GB,AB,tB,zB,HB,FB,xB,wB,vB,EB,CB,BB,uB,DB;function GA(){GA=x;HA=new NB(!0);OB=new ru;su(OB,"ar");su(OB,"fa");su(OB,"iw");su(OB,"ur")}function NB(a){this.a=a}w(469,1,Sl,NB);_.a=!1;var HA,OB;w(473,1,{76:1,92:1});function PB(){xA.call(this,0,0)}function xA(a,b){this.b=a;this.a=b}\nfunction zA(a){xA.call(this,a.b,a.a)}w(472,473,{61:1,76:1,88:1,92:1},PB,xA,zA);_.eQ=function(a){return a===this?!0:H(a,61)?a.b==this.b&&a.a==this.a:!1};_.hC=function(){var a;a=new qB;a.a=31*a.a+this.b;a.a=31*a.a+this.a;return a.a};_.tS=function(){return QB.d+"[width="+this.b+",height="+this.a+Tf};_.a=0;_.b=0;function ft(a,b,c){this.f=a;this.c=b;this.e=this.d=this.j=this.i=0;this.b=c}w(474,1,Sl,ft,function(a,b,c,d){this.f=a;this.c=b;this.j=this.i=0;this.d=c;this.e=d;this.b=null});\n_.pf=function(){return 0!=(this.e&4)};_.qf=function(){return 0!=(this.e&1)};_.tS=function(){var a;return this.cZ.d+"[id="+this.c+",x="+this.i+",y="+this.j+(0!=this.d?",key="+this.d+(a=m,this.qf()&&(a+=",shift"),0!=(this.e&2)&&(a+=",control"),this.pf()&&(a+=",meta"),a):m)+",target="+this.f+(null!=this.b?",arg="+this.b:m)+Tf};_.b=null;_.c=0;_.d=0;_.e=0;_.f=null;_.i=0;_.j=0;function RB(a){var b,c;for(c=b=0;cb.b&&(SB(this,l,b.b-(n-this.c),g.b,o,j,h),l.mg(),n=f,o+=j+this.d,j=0),e=!1,fq(l.b,l.c++,c),n+=a.b+this.c,j=Pm(j,a.a);SB(this,l,b.b-(n-this.c),g.b,o,\nj,h)}};_.mf=function(a){this.b=XB(a.Fc);return 0==RB(this)?OA(a,new xA(10,10)):OA(a,UB(this,!1))};_.nf=function(a){this.b=XB(a.Fc);return 0==RB(this)?OA(a,new xA(10,10)):OA(a,UB(this,!0))};_.of=LA;_.tS=function(){var a;switch(this.a){case 0:a=Xh;break;case 2:a=tj;break;case 1:a=Gg;break;case 4:a="trailing";break;default:a="leading"}return $B.d+"[hgap="+this.c+",vgap="+this.d+",align="+a+Tf};_.a=0;_.b=null;_.c=0;_.d=0;function aC(){aC=x;bC=new cC(ve,0,12)}\nfunction cC(a,b,c){aC();this.a=null!=a?a:"Default";this.b=0<=c?c:0;this.c=0==(b&-4)?b:0}w(476,1,{62:1,88:1},cC);_.a=null;_.b=0;_.c=0;var bC;w(477,1,nl);_.tS=function(){return dC.d+"[font="+this.b+"ascent="+eC(fC,this.b).a+", descent="+eC(fC,this.b).b+", height="+eC(fC,this.b).c+Tf};_.b=null;w(479,1,{});_.tS=function(){return"Graphics"};w(480,479,{});function gA(){}function px(a){this.f=a}w(483,136,El,gA,px);function tA(){this.f="Missing message: awt.151"}w(482,483,El,tA);w(484,1,{});\nfunction JA(a,b,c,d){this.d=a;this.b=b;this.a=c;this.c=d}w(485,1,{64:1,88:1,92:1},JA);_.eQ=function(a){return a===this?!0:H(a,64)?a.b==this.b&&a.a==this.a&&a.c==this.c&&a.d==this.d:!1};_.hC=function(){var a;a=31+this.d;a=31*a+this.b;a=31*a+this.a;return a=31*a+this.c};_.tS=function(){return gC.d+"[left="+this.b+",top="+this.d+",right="+this.c+",bottom="+this.a+Tf};_.a=0;_.b=0;_.c=0;_.d=0;w(489,1,Sl);_.$e=function(){return this.j};_.tS=NA;_.j=null;_.k=null;\nfunction hC(a){var b;b=a.j+",label="+a.f;a.e||(b+=",disabled");null!=a.c&&(b+=",command="+a.c);return b}function iC(a,b){a.e=b;tz(a.i.a,b)}function jC(a){this.n=(DA(),DA(),EA);var b;var c;b=this.cZ.d;-1!=ex(b,fx(36))?b=null:(c=this.n.b.d++,b=hx(b,nA(b,fx(46))+1)+m+c);this.j=b;this.d=new nB;this.f=a;this.e=!0;this.i=new kC(this)}w(488,489,Sl,jC);_.$e=function(){return hC(this)};_.c=null;_.e=!1;_.f=null;_.i=null;w(487,488,gl);_.$e=function(){return hC(this)+(this.b?",tearOff":m)};_.b=!1;w(491,1,{77:1});\n_.eQ=function(a){return a===this?!0:H(a,77)?this.rf()==a.rf()&&this.sf()==a.sf():!1};_.hC=function(){var a;a=new qB;lC(a,this.rf());lC(a,this.sf());return a.a};function sA(){this.b=this.a=0}function mC(a,b){this.a=a;this.b=b}w(490,491,{68:1,77:1,88:1},sA,mC);_.eQ=function(a){return a===this?!0:H(a,68)?this.a==a.a&&this.b==a.b:!1};_.rf=Sv;_.sf=sy;_.tS=function(){return nC.d+"[x="+this.a+",y="+this.b+Tf};_.a=0;_.b=0;\nfunction oC(a,b){if(!b)throw new ju("Missing message: awt.70");var c=a.a;if(J(b.f,$a)){var c=c.a.a,d=new vz,e=c.c.c;if(0>e||e>c.c.c)throw new Fx;c.o&&(d.pb[Qg]=2);az(c,e,d.pb);pC(c.c,e,d)}else{var d=c.a.a,c=b.i.a,e=d.c.c,f,g;if(0>e||e>d.c.c)throw new Fx;pC(d.c,e,c);for(f=g=0;f=this.k?0!=(this.j&16)?(this.d=1,501==this.k&&(this.j|=1024)):0!=(this.j&8)?(this.d=2,501==this.k&&(this.j|=2048)):0!=(this.j&4)&&(this.d=3,501==this.k&&(this.j|=4096)):(0!=(this.j&16)&&(this.j|=1024),0!=(this.j&8)&&(this.j|=\n2048),0!=(this.j&4)&&(this.j|=4096));else if(0!=(this.j&16320))if(this.j&=-64,0!=(this.j&64)&&(this.j|=1),0!=(this.j&128)&&(this.j|=2),0!=(this.j&256)&&(this.j|=4),0!=(this.j&512)&&(this.j|=8),0!=(this.j&8192)&&(this.j|=32),500<=this.k&&502>=this.k)switch(this.d){case 1:this.j|=16;break;case 2:this.j|=8;break;case 3:this.j|=4}else 0!=(this.j&1024)&&(this.j|=16),0!=(this.j&2048)&&(this.j|=8),0!=(this.j&4096)&&(this.j|=4);this.b=0;this.a=1;this.c=d}w(515,514,Sl,It);\n_.$e=function(){var a,b;a=ZC(this);switch(this.b){case 0:b="WHEEL_UNIT_SCROLL";break;case 1:b="WHEEL_BLOCK_SCROLL";break;default:b=rk}return a+=",scrollType="+b+",scrollAmount="+this.a+",wheelRotation="+this.c};_.a=0;_.b=0;_.c=0;w(524,1,{});function UC(a){if(null==a)throw new aD;}w(525,524,{},UC);\nfunction bD(){bD=x;cD={};cD["java.vendor"]=Ah;cD["package.restrict.access.sun"]=pk;cD["sun.java.launcher"]=cf;cD["sun.management.compiler"]=Ah;cD["os.name"]=cf;cD[" sun.boot.class.path"]=cf;cD["path.separator.applet"]=cf;cD["java.vm.specification.vendor"]=Ah;cD["java.runtime.version"]=cf;cD["http.proxyPort"]=cf;cD["user.name"]=cf;cD["user.language"]=cf;cD["os.name.applet"]=cf;cD["browser.version"]=cf;cD["java.version"]=cf;cD["user.timezone"]=cf;cD["java.endorsed.dirs"]=cf;cD["java.specification.name"]=\n"GWT";cD["java.specification.version"]="2.5.0";cD[Qh]=Le;!Lt&&(Lt=new Tt);Lt.a?cD[Oh]="yes":cD[Oh]=null}var cD;w(529,137,Tl);function dD(){}function eD(a){this.f=a}w(528,529,{82:1,88:1,96:1,105:1},dD,eD);function fD(){fD=x;gD=new hD}function iD(a){var b;if(a.k){var c;b=new Ov;tp(b,a.f);Jq(b.a,Nc);c=a.a;null!=c&&0=b||65<=b&&90>=b;for(c=1;b&&c=b||65<=b&&90>=b||48<=b&&57>=b||43==b||45==b||46==b;if(b){c=this.f;kD();var f,g,h;h=c.length;b=new lD;for(g=0;g=f?mD(b,f+32&65535):Jq(b.a,String.fromCharCode(f));\nthis.f=Mq(b.a)}else this.f=null,d=-1}if(null==this.f)throw new eD(Ie+a);if(!this.k&&(this.k=Au(gD,this.f),this.k||(this.k=(DA(),new nD))&&D(gD,this.f,this.k),!this.k))throw new eD(Ie+a);try{c=a;var j=++d,l=a.length,n,o,r,t,z,v,E,s,F,P,M,$,da,Z,ca,Hb,aa,sb,Mb,K,Ja;if(ll){if(-2147483647>=l&&(j>=c.length||0>j)||!(0>j||j>=c.length)&&c.indexOf(Wb,j)==j&&-1==oD(c,fx(47),j+2))throw new pD(l);}else{M=c.substr(j,l-j);l-=j;v=0;E=this.c;$=this.e;sb=this.j;t=this.d;ca=this.i;n=this.a;Ja=this.n;Mb=oD(M,\nfx(35),0);if(0==M.indexOf(Wb)&&0!=M.indexOf("////")){F=2;$=-1;v=oD(M,fx(47),2);aa=oD(M,fx(63),2);-1!=aa&&(-1==v||v>aa)&&(v=aa);-1==v&&(v=l,t=m);s=v;-1!=Mb&&Mbr+1?(o=M.charCodeAt(r+1),58==o?da=r+1:da=-1):da=-1}catch(Ub){if(Ub=pq(Ub),!H(Ub,96))throw Ub;}-1==da||da>v?E=M.substr(F,s-F):(E=M.substr(F,da-F),Z=M.substr(da+1,s-(da+1)),0==Z.length?\n$=-1:$=qD(Z,10))}-1v&&(null==t?t=m:J(t,m)?t=Tb:t.indexOf(Tb),P=nA(t,fx(47))+1,0==P?t=M.substr(v,z-v):t=t.substr(0,P-0)+M.substr(v,z-v)));null==t&&(t=m);null==E&&(E=m);d=E;var N;N=t;null!=ca&&!J(ca,m)&&(null!=t?N=t+cd+ca:N=cd+ca);\nnull==this.f&&(this.f=this.f);this.c=d;this.b=N;this.e=$;this.j=sb;var za;null!=this.c&&0this.e)throw new eD("incorrect port: "+\nthis.e);}w(530,1,Sl,jD);_.tS=function(){return iD(this)};_.a=null;_.b=null;_.c=null;_.d=null;_.e=-1;_.f=null;_.i=null;_.j=null;_.k=null;_.n=null;var gD;w(531,1,{});function rD(a,b,c){var d,e;for(d=a.Kf().ue();d.Vd();)if(a=d.Wd(),e=a.th(),null==b?null==e:Cp(b,e))return c&&(a=new sD(a.th(),a.uh()),d.Xd()),a;return null}w(535,1,Kl);_.Jf=function(a){return!!rD(this,a,!1)};\n_.eQ=function(a){var b,c;if(a===this)return!0;if(!H(a,108)||this.Pf()!=a.Pf())return!1;for(a=a.Kf().ue();a.Vd();)if(b=a.Wd(),c=b.th(),b=b.uh(),!this.Jf(c)||!tD(b,this.Lf(c)))return!1;return!0};_.Lf=function(a){a=rD(this,a,!1);return!a?null:a.uh()};_.hC=function(){var a,b,c;c=0;for(b=this.Kf().ue();b.Vd();)a=b.Wd(),c+=a.hC(),c=~~c;return c};_.Mf=uD;_.Nf=function(){throw new vD("Put not supported on this map");};_.Of=function(a){a=rD(this,a,!0);return!a?null:a.uh()};_.Pf=function(){return this.Kf().Pf()};\n_.tS=function(){var a,b,c,d;d=Dk;a=!1;for(c=this.Kf().ue();c.Vd();)b=c.Wd(),a?d+=Ua:a=!0,d+=m+b.th(),d+=ad,d+=m+b.uh();return d+"}"};function Pz(a){a.a=[];a.e={};a.c=!1;a.b=null;a.d=0}function Qw(a,b){var c;if(null==b)c=a.c;else if(H(b,1))c=Nc+b in a.e;else a:{c=a.Sf(b);if(c=a.a[c])for(var d=0,e=c.length;d=a.i)break;c=ED(a,c);++b}return b}\nfunction FD(a,b){var c;for(c=0;c=a.i)throw new BD;b=a.a;a.a=ED(a,a.a);return $C(a.n,b,a.a)}\nfunction ED(a,b){var c,d;for(d=b;da.f||!FD(a,c))break;d+=65536<=c?2:1}else{c=a.n.charCodeAt(d);if(c>a.f||0>ex(a.c,fx(c)))break;++d}return d}function ID(a){JD.call(this,a,fa,!1)}function KD(a){JD.call(this,a,Pa,!1)}\nfunction JD(a,b,c){this.a=0;this.j=-1;this.d=!1;this.n=a;this.i=a.length;this.c=b;this.k=c;var d;if(null==this.c)this.f=0;else{for(c=b=d=0;c=a&&(a=HD(this.c,c,this.c.length),this.e=!0),d=a;++a)0=a;++a)b=kf,33=j||b>a.Sb||c>a.Sb))){l=C(XE,Ml,-1,99,1);h=o=n=0;for(g=b;g<=c;++g)f=YE(a.zb[g]),n+=f.c,o+=f.d,f.d>h&&(h=f.d),l[g]=f.c,2==d&&(l[g]=f.d);a.J&&(n+=25*(j+1),o+=25*(j+1),h+=25);j=g=1;a.J?r=ZE(a):r=$E(a);f=Uu(r.b);r=Uu(r.a);1==d||3==d?f=~~((f-48)/2):2==d&&(r=~~(r/2));n>=f&&(g=f/n);h>=r&&(j=r/h);h=0;a.J&&(a.xb=gd)switch(lF(b,(sB(),zB)),f){case 101:lF(b,DB);pF(b,j+3,g+3,a.mb-6,a.mb-6);lF(b,zB);e=g+3;h=a.mb-6;c=\na.mb-6;d=b.a;f=Q(L(R((j+3)*S)));e=Q(L(R(e*S)));h=Q(L(R(h*S)));c=Q(L(R(c*S)));d.o&&(qF(d,!1),rF(d,sF(d,f,e,h,c)));tF(b,j+6,g+6,a.mb-12,a.mb-12);uF(b.a,Q(L(R((j+9)*(vF(),S)))),Q(L(R((g+9)*S))),Q(L(R(2*S))),Q(L(R(4*S))));mF(b,j+a.mb-10,g+9,2,4);0.04>Math.random()&&(lF(b,BB),uF(b.a,Q(L(R((j+10)*S))),Q(L(R((g+18)*S))),Q(L(R(4*S))),Q(L(R(4*S)))));0.96=e;++e)if(bn&&(lF(g,(kE(),sE)[n]),pF(g,f.b[s].q-12,f.b[s].r-\n12,24,24));for(s=1;s<=f.q;++s)l=f.c[s].i,o=f.c[s].j,0!=f.b[l].c&&f.b[l].c==f.b[o].c&&(lF(g,(kE(),sE)[f.b[l].c]),v=f.b[o].q-f.b[l].q,h=f.b[o].r-f.b[l].r,z=Math.sqrt(v*v+h*h),1>z&&(z=1),h/=z,z=v/z,v=9*h,t=9*z,n=OF(4),r=OF(4),n[0]=f.b[l].q+v,r[0]=f.b[l].r-t,n[1]=f.b[o].q+v,r[1]=f.b[o].r-t,n[2]=f.b[o].q-v,r[2]=f.b[o].r+t,n[3]=f.b[l].q-v,r[3]=f.b[l].r+t,AF(g,n,r,4))}for(s=1;s<=f.q;++s){lF(g,(sB(),yB));t=f.c[s];l=t.i;o=t.j;1==f.i&&0!=f.b[l].c&&f.b[l].c==f.b[o].c&&lF(g,(kE(),sE)[f.b[l].c]);if(3==t.f||4==\nt.f)n=l,l=o,o=n;n=f.b[l].q;r=f.b[l].r;M=f.b[o].q;P=f.b[o].r;if(1!=t.c||0!=t.f)v=M-n,h=P-r,z=Math.sqrt(v*v+h*h),1>z&&(z=1),h/=z,z=v/z;switch(t.c){case 2:10<=t.f&&lF(g,EB);v=2*h;t=2*z;xF(g.a,Q(L(R((n+v)*(vF(),S)))),Q(L(R((r-t)*S))),Q(L(R((M+v)*S))),Q(L(R((P-t)*S))));xF(g.a,Q(L(R((n-v)*S))),Q(L(R((r+t)*S))),Q(L(R((M-v)*S))),Q(L(R((P+t)*S))));lF(g,zB);break;case 3:xF(g.a,Q(L(R(n*(vF(),S)))),Q(L(R(r*S))),Q(L(R(M*S))),Q(L(R(P*S))));l=3*h;o=3*z;xF(g.a,Q(L(R((n+l)*S))),Q(L(R((r-o)*S))),Q(L(R((M+l)*S))),Q(L(R((P-\no)*S))));xF(g.a,Q(L(R((n-l)*S))),Q(L(R((r+o)*S))),Q(L(R((M-l)*S))),Q(L(R((P+o)*S))));break;case 9:case 0:for(o=0;10>o;++o)l=n-(n-M)/10*o,E=r-(r-P)/10*o,xF(g.a,Q(L(R(l*(vF(),S)))),Q(L(R(E*S))),Q(L(R(l*S))),Q(L(R(E*S))));PF(g,f.k.v);o=QF(f.k.w);t=t.d;l=cd;null!=t&&(l=t);t=AC(f.k.w,l);t=(n+M)/2-t/2;P=(r+P)/2+~~(o/2)-1;lF(g,EB);RF(g.a,l,Q(L(R(t*(vF(),S)))),Q(L(R(P*S))));lF(g,zB);break;default:if(1==t.f||3==t.f)v=3*h,t=3*z,E=OF(3),j=OF(3),E[0]=M+v,j[0]=P-t,E[1]=n,j[1]=r,E[2]=M-v,j[2]=P+t,AF(g,E,j,3);else if(2==\nt.f||4==t.f){v=3*h;t=3*z;for(o=0;10>o;++o)l=n-(n-M)/10*o,E=r-(r-P)/10*o,j=o/10,xF(g.a,Q(L(R((l+v*j)*(vF(),S)))),Q(L(R((E-t*j)*S))),Q(L(R((l-v*j)*S))),Q(L(R((E+t*j)*S))))}else xF(g.a,Q(L(R(n*(vF(),S)))),Q(L(R(r*S))),Q(L(R(M*S))),Q(L(R(P*S))))}}z=OF(f.p+1);h=OF(f.p+1);for(s=1;s<=f.q;++s)l=f.c[s].i,o=f.c[s].j,n=f.b[l].q,r=f.b[o].q,++h[l],++h[o],z[l]=z[l]/h[l]+r/h[l],z[o]=z[o]/h[o]+n/h[o];PF(g,f.k.v);o=QF(f.k.w);M=OF(f.p+1);r=OF(f.p+1);n=C(SF,q,120,f.p+1,0);for(s=1;s<=f.p;++s)l=TF(f,s),(null==l||1>l.length)&&\n(l=Ma),j=f.b[s],3==f.b[s].a&&0VF(z[s]-f.b[s].q)&&(v=!1),2VF(z[s]-f.b[s].q)&&(P=!0),t=l,E=m,f.k.oc&&(F=f.b[s].i,0z&&(z=1),h/=z,z=v/z,v=4*h,t=4*z,E=OF(5),j=OF(5),E[0]=f.b[l].q+v,E[1]=f.b[o].q+v,j[0]=f.b[l].r-t,j[1]=f.b[o].r-t,E[3]=f.b[l].q-v,E[2]=f.b[o].q-v,j[3]=f.b[l].r+t,j[2]=f.b[o].r+t,E[4]=E[0],j[4]=j[0],106!=f.k.k&&YF(g,E,j,5),106==f.k.k&&ZF(f,f.c[f.w].i,f.c[f.w].j))){h=0;for(s=1;s<=f.p;++s)0~~(f.p/2))for(s=1;s<=f.p;++s)0e;++e)if(d=a.zb[e])0b&&(b=c);return b}\nfunction jG(a,b,c,d){var e=tE?350:170,f,g,h,j;kG(d);b=lG(a,b);c=lG(a,c);h=e;for(g=1;g<=a.Sb;++g){j=new mG(e);f=a.zb[g];for(var l=b,n=c,o=j,r=void 0,t=void 0,z=void 0,v=void 0,E=r=r=r=v=r=void 0,s=void 0,F=void 0,P=t=z=r=r=void 0,M=void 0,$=void 0,E=0,F=o.a,s=1;s<=f.q;++s)r=nG(l,n,f.c[s].a,f.c[s].b),rz+F||(r=M*r+$*v,0>r||(z=Math.sqrt(z),t=Math.sqrt(t),r/=z*t,1<=r||(r=1.5707963267948966-Math.acos(r),r=t*Math.cos(r),r*=r,r=a.yb||0>=a.ub)&&(!a.M&&(a.M=bB(a)),oG(a,a.M));b=new pG;b.b=a.yb;b.a=a.ub;return b}function $E(a){var b;b=ZE(a);b.b/=a.xb;b.a/=a.xb;return b}function KF(a,b){a.b.a.a=b/S;return a.b}\nfunction qG(a,b,c,d){var e,f;if(!b||rG(b)){if((e=0=e;++e)b=PG(h,d);e=uG(qD(gx(b.substr(0,3)),10)).a;g=uG(qD(gx(b.substr(3,3)),10)).a;PG(h,d);for(b=1;b<=e+g;++b){for(f=m;!(j=PG(h,d),null==j||J(j,"$MOL"));)f+=j+d;a.zb[++a.Sb]=new QG(a,f)}a.xb=1;WE(a,1,e,1,!1);WE(a,e+1,e+g,3,!1);d="readRXNFile"}else{(a.J||a.Vb)&&(a.dc=!1);a.ob=new QG(a,b);if(!a.ob||0==a.ob.p)return!a.ob&&(gt(a,"ERROR - problems in reading/processing MOL input"),\na.Ze(a.Ec.d)),!!a.ob;d=(a.dc||a.Fb)&&a.p||a.Mb;null!=a.t&&a.ob&&RG(a.ob,a.t,!0);null!=a.u&&a.ob&&RG(a.ob,a.u,!1);d||(a.Sb=0,a.xb=1);h=SG(a.ob);if(1>=h||a.J)a.zb[++a.Sb]=a.ob;else{a.Fb=!0;for(b=1;b<=h;++b)a.zb[++a.Sb]=new TG(a,a.ob,b)}d?a.o=a.Sb:a.o=1;a.ob=a.zb[a.o];a.J?WE(a,1,1,0,!0):WE(a,1,h,0,!d);d=mj}UG(a);null!=d&&(AG(a.r,pd),a.r&&fF(Pp(a.r,d),0,0,0),a.hc=!0);a.Ib=!0;c&&a.Ze(a.Ec.d);return!0}function gt(a,b){null==b&&(b=m);a.Gb=!0;a.X=b;a.cg("info: "+b)}\nfunction NF(a,b){var c;c=Math.round(b);100>c&&(!uE[c]&&(uE[c]=new cC(Fe,0,c)),!wE[c]&&fq(wE,c,pA(uE[c])),a.v=uE[c],a.w=wE[c])}function rG(a){var b;if(!a)return!1;b=a.pf();a=0!=(a.e&2);return b||a}function aG(a,b){return(a.mb+(a.Lb?1:0))*b}function EF(a,b){var c,d;d=-1;for(c=0;c=b)switch(a.Kb=!0,a.Hb=!0,gt(a,m),b){case 102:dF(a,!0);xG(a,102);wG(a,102);d=!0;break;case 110:a.Ib=!0;a.k=c;a.pb.a!=a.pb.b&&a.pb.a.b!=a.pb.b?a.q&&(++a.Sb,a.o=a.Sb,a.q=!1):gt(a,"No more undo");if(!(a.pb.a!=a.pb.b&&a.pb.a.b!=a.pb.b))break;VG(a,WG(a.pb));a.r&&fF(Pp(a.r,qk),0,0,0);a.hc=!0;a.hc=!1;a.Ib=!0;break;case 111:a.k=c;if(a.pb.a.c)a.q&&(++a.Sb,a.o=a.Sb,a.q=!1);else{gt(a,"No more redo");break}if(!a.pb.a.c)break;e=a.pb;\nif(!e.a.c)throw new px("Cannot redo. Index is out of range.");if(!e.a.c)throw new px(Je);e.a=e.a.c;VG(a,e.a.a);a.r&&fF(Pp(a.r,pj),0,0,0);a.hc=!0;a.hc=!1;a.Ib=!0;break;case 214:qG(a,null,a.R.a,a.R.b);a.k=c;break;case 151:case 152:case 154:case 153:e=null;a.k=c;switch(b){case 152:e=XG(a.jc);break;case 151:e=YG(a.jc);break;case 154:e=a.jc;e.a=e.c;e=XG(e);break;case 153:e=a.jc,e.a=-1,e=YG(e)}null==e?gt(a,"No more molecules in SDF buffer"):(gF(a),a.Vb=!0,ZG(a,e,!1),a.Vb=!1,J(a.X,m)&&(gt(a,"MOL n. "+(a.jc.a+\n1)+" of "+a.jc.c),d=!0,a.r&&fF(Pp(a.r,"SDFstack"),0,0,0),a.hc=!0,a.hc=!1));break;case 101:jq(4,new $G(a));a.k=c;break;case 107:jq(2,new aH(a));break;case 114:jq(3,new bH(a));a.k=c;break;case 103:a.Mb=!0;a.k=c;break;case 105:a.A&&a.Bb&&(a.Bb=!1,cH(a.ob),a.Ib=!0,a.r&&fF(Pp(a.r,og),0,0,0),d=a.hc=!0,a.k=c);a.I=1;break;case 109:a.k=c;e=dH(a.ob);if(2==e){gt(a,"Copying the agent not possible !");break}d=YE(a.ob);a.Ib=!0;a.ob=new BE(a.ob);d=Uu((a.M.b-a.mb)/2-d.a);for(e=1;e<=a.ob.p;++e)bF(a.ob.b[e],2*d/a.xb,\n0/a.xb);a.zb[++a.Sb]=a.ob;a.o=a.Sb;a.r&&fF(Pp(a.r,"reactionCopy"),0,0,0);d=a.hc=!0;xG(a,109);wG(a,109);break;case 104:d=CE(a);break;case 213:a.k=c;if(!a.S){var f,g,h,j,l;l=new qC;for(f=a.U,g=0,h=f.length;g=b&&(a.n=33+(b-1301)),0=a.k)a.cb=2,iH(a.ob),d=!0,RE(a,fg,a.o,0,a.ob.w);else if(202==a.k||203==a.k||204==a.k)if(0=g;++g){f=0;for(c=1;c<=a.Sb;++c)dH(a.zb[c])==g&&(h[g][++f]=c);h[g][0]=f}e+=va;e+=lH(h[1][0],3)+lH(h[3][0],3)+ba;for(c=1;c<=h[1][0];++c)e+=ta+mH(a.zb[h[1][c]],d,b);for(c=1;c<=h[3][0];++c)e+=ta+mH(a.zb[h[3][c]],d,b)}else{1f&&(f=e.b[b].r),e.b[b].qb;++b)fq(g.b,g.c++,null),fq(f.b,f.c++,null);for(b=1;b<=e.p;++b)j=e.b[b].b,null==j||0==j.length||(J(j,ag)?vm(c,new iB(b)):0==j.indexOf("mix")?(j=qD(hx(j,3),10),l=null,f.c>j&&(l=(TB(j,f.c),f.b[j])),null==l?h=new Bm:h=l,vm(h,new iB(b)),ZB(f,j,h)):0==j.indexOf(Si)&&(j=qD(hx(j,2),10),l=null,g.c>j&&(l=\n(TB(j,g.c),g.b[j])),null==l?h=new Bm:h=l,vm(h,new iB(b)),ZB(g,j,h)));d+=rH(Ye,c);if(0a.M.a-Q(L(R(a.mb*a.nb))))return!1;var b=a.Cc,f=a.Dc,g,h,j,l;l=0;if(0>b||0>f||f>a.ub||b>a.yb)b=0;else if(1==a.Sb)b=a.o;else{b=lG(a,b);f=lG(a,f);j=1.7976931348623157E308;for(h=1;h<=a.Sb;++h){g=a.zb[h];for(var n=void 0,o=void 0,r=void 0,o=1.7976931348623157E308,n=1;n<=g.p;++n)r=nG(b,f,g.b[n].q,g.b[n].r),r=a.k)a.cb=2,iH(a.ob),EE(a,eg,a.ob.v);else if(230==a.k)a.cb=3,EE(a,gg,a.ob.v);\nelse if(233<=a.k&&262>a.k)vH(a.ob,!1),EE(a,dg,a.ob.v),a.cb=3;else if(107==a.k){if(a.bc.b)return!0;hH(a.ob,a.ob.v,Oq(a.bc.e.Tc.a.pb,sk));a.ob.j=!0;EE(a,"addAtomQuery",a.ob.v)}else if(105==a.k)(c=wH(a.ob))?EE(a,"markAtom",a.ob.v):EE(a,"unMarkAtom",a.ob.v);else if(113!=a.k)if(300c.length&&(c=Kf),hH(a.ob,a.ob.v,c)),EE(a,Ij+a.n,a.ob.v)}else e=!1}else if(0<\na.ob.w)if(a.eb.c=a.o,104==a.k)CE(a);else if(106==a.k){c=a.ob;d=a.ob.w;if(0d&&(d=b);if(0==d)break;DE(c,d);c.a[d]=0}GE(a.ob);RE(a,"delBondGroup",a.o,0,a.ob.w);a.ob.w=0}else if(201==a.k)xH(a.ob,a.ob.w),RE(a,"setBondStereo",a.o,0,a.ob.w);else if(202==a.k||205==a.k)1==a.ob.c[a.ob.w].c&&0==a.ob.c[a.ob.w].f?(a.ob.c[a.ob.w].c=2,RE(a,Jj,a.o,0,a.ob.w)):(a.ob.c[a.ob.w].c=1,a.ob.c[a.ob.w].f=\n0,RE(a,Kj,a.o,0,a.ob.w)),a.ob.c[a.ob.w].f=0;else if(203==a.k)a.ob.c[a.ob.w].c=2,a.ob.c[a.ob.w].f=0,GE(a.ob),RE(a,Jj,a.o,0,a.ob.w);else if(204==a.k)a.ob.c[a.ob.w].c=3,a.ob.c[a.ob.w].f=0,GE(a.ob),RE(a,Lj,a.o,0,a.ob.w);else if(206<=a.k&&229>=a.k)a.cb=2,iH(a.ob),RE(a,fg,a.o,0,a.ob.w),GE(a.ob);else if(107==a.k){if(!a.bc.b)return!0;c=Oq(a.bc.e.Tc.a.pb,sk);a.ob.c[a.ob.w].c=9;a.ob.c[a.ob.w].d=c;RE(a,"setQueryBond",a.o,0,a.ob.w)}else 105==a.k?(c=a.ob,b=a.ob.w,c.k.gb=!0,c.k.sc?(c.i=-1,d=c.c[b].i,b=c.c[b].j,\nf=c.b[d].c,h=c.b[b].c,j=4,f==h&&0=a.k)return!1;++a.Sb;a.o=a.Sb;a.zb[a.Sb]=new eF(a);a.ob=a.zb[a.Sb];a.eb.c=a.o;202<=a.k&&204>=a.k||205==a.k?(yH(a.ob,null),a.ob.q=0,zH(a.ob,1,c/a.xb,d/a.xb),a.ob.v=1,a.ob.x=1,a.cb=1,b=a.ob,jH(b,b.v,0),205==a.k?(zH(a.ob,2,(c+21.65)/a.xb,(d-12.5)/a.xb),a.ob.e[0]=1,a.ob.e[1]=2,a.ob.r=1,RE(a,"addChain",a.o,0,a.ob.w)):RE(a,\ncg,a.o,0,a.ob.w)):206<=a.k&&229>=a.k?(a.ob.z=lG(a,c),a.ob.A=lG(a,d),a.cb=2,iH(a.ob),a.r&&fF(Pp(a.r,eg),0,0,0),a.hc=!0):300c.length&&(c=Kf),hH(a.ob,1,c)),EE(a,"addAtom",a.ob.v)):230==a.k?(JG(a,null,!0),a.r&&fF(Pp(a.r,gg),0,0,0),a.hc=!0):233<=a.k&&262>a.k?(yH(a.ob,null),a.ob.q=0,zH(a.ob,1,c/a.xb,d/a.xb),a.ob.v=1,vH(a.ob,!0),a.r&&fF(Pp(a.r,dg),0,0,0),a.hc=!0):bD()}else e=!1;e&&AH(a)}return a.Ab=\ne}\nfunction BH(a,b,c,d){var e,f,g,h;bD();if(!a.Db||CH(b))return!0;a.Gb=!1;c-=Q(L(R(aG(a,a.nb))));d-=Q(L(R(bG(a,a.nb))));f=lG(a,c-a.Cc);g=lG(a,d-a.Dc);e=lG(a,c);h=lG(a,d);if(2==a.cb||3==a.cb||9==a.cb)return!0;if(1==a.cb){f=!1;a.zb[a.eb.c].v=0;--a.ob.p;g=c;var b=d,j=a.Nb;0>g||0>b||b>a.ub||g>a.yb?kG(j):jG(a,g,b,j);++a.ob.p;if(0g&&(g=1);b/=g;j/=g;n=g/2/Math.tan(0.5235987755982988);o=e-f.b[l].q;r=h-f.b[l].r;l=-g/2+o*j+r*b;b=r*j-o*b;if(0>l)if(1f.b[2].r-f.b[1].r&&0h-f.b[1].r&&(f.b[2].r=f.b[1].r-g/2),0>f.b[2].q-f.b[1].q&&0e-f.b[1].q&&(f.b[2].q=f.b[1].q-0.866*g);else{if(2==f.b[f.e[0]].j&&(n=f.b[f.e[0]].p[1],n==f.e[1]&&(n=f.b[f.e[0]].p[2]),j=f.b[f.e[0]].q-f.b[n].q,b=f.b[f.e[0]].r-f.b[n].r,g=Math.sqrt(j*j+b*b),1>g&&(g=1),b/=g,j/=g,o=e-f.b[n].q,r=h-f.b[n].r,e=r*j-o*b,o=f.b[f.e[1]].q-f.b[n].q,r=f.b[f.e[1]].r-f.b[n].r,h=r*j-o*b,0h||0>e&&0=b?0-b:b)>e){++f.r;if(100g&&(g=1),zH(f,f.p,f.b[f.x].q+25*(j/g),f.b[f.x].r+25*(b/g))}a.B=!0}else if(113==a.k&&0c||0>d||d>a.ub||c>a.yb)&&5!=a.cb))e=$E(a),h=a.ob,j=YE(h),b=j.a,j=j.b,0>f&&be.b||0>g&&je.a||GH(h,f,g),a.cb=5;JE(a,!1);a.Ib=!0;gG(a);a.Cc=c;a.Dc=d;return!0}\nfunction vG(a,b,c,d){var e,f;if(!a.J||a.Vf().a||a.Wf().a||a.K)if(f=!1,e=FF(a,c,d),e!=a.Cb&&(f|=xG(a,a.Cb),f|=wG(a,e),a.Cb=e),!rG(b)){c-=Q(L(R(aG(a,a.nb))));d-=Q(L(R(bG(a,a.nb))));b=c;c=a.Nb;0>b||0>d||d>a.ub||b>a.yb?kG(c):jG(a,b,d,c);113==e&&0d.b[e].j&&(MH(d,null),b=d.e[d.r-1],d.c[d.q].i=e,d.c[d.q].j=b,NH(d.b[e],b),NH(d.b[e],b)),DE(d,d.p)),d.u=!1,a.hc=!0;else if(0!=a.eb.c&&a.o!=a.eb.c){DE(a.ob,a.ob.p);b=a.ob.x;c=a.eb.a+a.ob.p;e=a.zb[a.eb.c];d=new nH(a,y(OH,q,119,[null,a.ob,e]),2);d.b[0]=new PH;QH(d,b,c,1);b=C(OH,\nq,119,a.zb.length,0);for(f=0,c=0;fd.c[b].c?(++d.c[b].c,d.c[b].f=0):gt(d.k,"Maximum allowed bond order is 3 !")):6==d.b[e].j?(--d.q,SH(d,d.x),gt(d.k,"Not possible connection !")):(d.c[d.q].j=e,SH(d,d.x),b=d.x,NH(d.b[e],b),NH(d.b[b],e),TH(d.c[d.q],d.b)));cF(a.ob);a.B&&(d=a.pb,d.a!=d.b&&d.a.b!=d.b&&(e=d.a.c,WG(d),d.a.c=e),\nRE(a,cg,a.o,0,a.ob.w),a.B=!1);d=!0}else 5==a.cb&&(cF(a.ob),d=a.hc=!0);0=b&&0==c||b==c&&a.o==a.Zb)return-1;0>=b&&0Vb))for(;wc=pb[fd]*pb[fd];)0==wc%pb[fd]?eb=!1:++fd;if(eb){I[++Yb]=Ev(wc);if(Yb>=Vb)break;Yctc&&(tc=0),0>Y&&(Y=0),Gd=28*tc+Y));Qc=0;0!=G.b[T].n&&(-2>G.b[T].n?Qc=1:-2==G.b[T].n?Qc=2:-1==G.b[T].n?Qc=3:1==G.b[T].n?Qc=4:2==G.b[T].n?Qc=5:2Bb&&(Bb=10-Bb));Ec=126;db=je;db+=126*G.b[T].i;Ec*=7;db+=Qc*Ec;Ec*=7;0!=Bb&&(db+=Bb*Ec);Ec*=7;db+=Gd*Ec;Ec*=783;db+=G.b[T].j*Ec;O[T]=Ev(db)}for(ga=0;!bI(G,Sa,O);){Da=!1;for(T=1;T<=G.p;++T)Sa[T]!=ob[T]&&(ob[T]=Sa[T],Da=!0);if(Da){for(T=1;T<=G.p;++T){O[T]=Hk;for(Aa=1;Aa<=G.b[T].j;++Aa)O[T]=Iv(O[T],I[Sa[G.b[T].p[Aa]]])}ga=\n0}else if(0G.c[T].j&&(Nb=G.c[T].i,G.c[T].i=G.c[T].j,G.c[T].j=Nb,1==G.c[T].f?G.c[T].f=3:2==G.c[T].f?G.c[T].f=4:3==G.c[T].f?G.c[T].f=1:4==G.c[T].f&&(G.c[T].f=2));for(T=1;To.a[v])&&P!=qa[v]){mc=!0;for(Ja=1;Ja<=za;++Ja)if(ca[Ja]==v&&Hb[Ja]==P||ca[Ja]==P&&Hb[Ja]==v){mc=!1;break}mc&&(++za,ca[za]=v,Hb[za]=P)}}else Z[++N]=P;if(0==N){if(Ab==o.p)break;v=da[tb--]}else if(1==N)qa[Z[1]]=v,v=Z[1],o.a[v]=++Ab;else{da[++tb]=v;s=0;for(aa=1;aa<=N;++aa)if($=RH(o,Z[aa],v),!Mb[$]){s=Z[aa];break}if(0==s)for(aa=1;aa<=N;++aa)if($=RH(o,Z[aa],v),2==o.d[$]||3==o.d[$]){s=\nZ[aa];break}0==s&&(s=Z[1]);qa[s]=v;v=s;o.a[s]=++Ab}}qa=OF(o.p+1);z=OF(o.p+1);$c=[];dd=[];F=Ab=tb=0;for(aa=1;aa<=o.p;++aa)if(1==o.a[aa]){v=aa;break}b:for(;;){0Cb.b[Na].j||4Qa.b[Rc].j||3Gc[fb]&&(de=nc,nc=fb,fb=de);Xa=nc;0==nc&&(Xa=fb,Me=!0);for(kc=1;kc<=Qa.b[Rc].j;++kc)Ad=Qa.b[Rc].p[kc],Ad!=Qb[zc-1]&&(0==le?le=Ad:me=Ad);0Gc[me]&&(de=le,le=me,me=de);Bd=le;0==le&&(Bd=me,Ud=!0);lf=0lf+ke?-(lf+ke):lf+ke)||0!=vc||0!=md?gt(Qa.k,"Bad stereoinfo on allene !"):(Hc=Qa.b[Qb[zc-1]].q-Qa.b[Rc].q,V=\nQa.b[Qb[zc-1]].r-Qa.b[Rc].r,oc=Math.sqrt(Hc*Hc+V*V),0.001>oc&&(oc=0.001),0<(Qa.b[Bd].r-Qa.b[Qb[zc-1]].r)*(Hc/oc)-(Qa.b[Bd].q-Qa.b[Qb[zc-1]].q)*(V/oc)?hd[Pb]=1:hd[Pb]=-1,Me&&(hd[Pb]*=-1),Ud&&(hd[Pb]*=-1),Xa==nc&&0>lf&&(hd[Pb]*=-1),Xa==fb&&0>ke&&(hd[Pb]*=-1),Gc[Xa]>Gc[Bd]&&(hd[Pb]*=-1))}}else c:{var qb=Cb,Ac=Na,Ne=gd,Oe=void 0,lc=void 0,Jc=void 0,Bc=void 0,gb=void 0,$b=void 0,ee=void 0,ye=void 0,Cd=void 0,Sc=void 0,Ba=void 0,hb=void 0,Id=void 0,Dd=void 0,Kc=void 0,Za=void 0,ne=void 0,hb=OF(4),Dd=OF(4),\nEf=qb,nd=Ac,Wf=kb,Xf=Md,Ff=ic,Pe=ce,sg=Ta,Fb=hb,id=void 0,Jd=void 0,mf=void 0,tg=void 0,Pg=void 0,Gf=void 0,Gf=-1;0gb;++gb)0>=hb[gb]||(Oe=RH(qb,Ac,hb[gb]),Dd[gb]=fI(qb,Oe,Ac),0Dd[gb]?(++ee,Bc=hb[gb],$b=hb[gb]):ye=hb[gb]);Cd=Sc+ee;Za=OF(4);Kc=0;if(3==qb.b[Ac].j){if(1==Sc&&1==ee||3==Cd&&0gb;++gb)Oe=RH(qb,Ac,Ba[gb]),lc[gb]=fI(qb,Oe,Ac);if(4==Cd){if(0==Sc||0==ee){gt(qb.k,"Error in C4 stereospecification !");break c}if(1==Sc||1==ee)Za[0]=Ba[0],Za[1]=Ba[3],Za[2]=Ba[2],Za[3]=Ba[1],Kc=lc[0];else{for(gb=0;4>gb;++gb)-1==lc[gb]&&(lc[gb]=0);Cd=2}}else if(3==Cd)if(3==Sc||3==ee)Za[0]=Ba[0],Za[1]=Ba[3],Za[2]=Ba[2],Za[3]=Ba[1],0gb;++gb)lc[gb]==Jc&&(lc[gb]=0);Cd=2}if(2==Cd)if(1==Sc&&1==ee)Ba[1]==Bc?(Ba[1]=Ba[2],Ba[2]=Ba[3]):Ba[2]==Bc&&(Ba[2]=Ba[3]),Za[0]=ne,Za[1]=Bc,Za[2]=Ba[2],Za[3]=Ba[1],Kc=1;else{if(lc[0]==lc[1]||lc[1]==lc[2]){gt(qb.k,"Error in C4 stereospecification ! 2/0r");break c}0!=lc[0]?(Za[0]=Ba[0],Za[1]=Ba[2],Za[2]=Ba[1],Za[3]=Ba[3]):(Za[0]=Ba[1],Za[1]=Ba[3],Za[2]=Ba[2],Za[3]=Ba[0]);1=If&&(Nd=!0,ya=(kE(),rE)[If]);Nd&&(0!=Vd?ya=Mf+Vd+ya:ya=Mf+ya,1==Lh[nf]?ya+=jd:-1==Lh[nf]&&(ya+="@@"),1==Zf?ya+=Ee:1od?-od:od)&&(ya+=0>od?-od:od)),oe&&(ya+=Nc+\nib),ya+=Tf);sp(Jb.a,ya);for(K=1;K<=za;++K)if(ca[K]==v||Hb[K]==v)E=Hb[K],E==v&&(E=ca[K]),M[v]",!0);j=-1c;++c)(d=b.d[c])?a.zb[c]=new BE(d):a.zb[c]=null;0b||b>a.Sb?(gt(a,"ERROR - invalid mol index: "+b),a.Ze(a.Ec.d),null):a.zb[b]}function UG(a){var b,c,d;b=SE(a);for(d=1;d<=a.Sb;++d)c=a.zb[d],c.o=b}function oI(a,b){b!=a.nb&&(a.nb=b,a.fg(),a.Ze(a.Ec.d))}function pI(a,b){var c,d,e;if(b!=a.xb){c=$E(a);a.xb=b;d=$E(a);e=Q(L(R((d.b-d.c)/2-(c.b-c.c)/2)));d=Q(L(R((d.a-d.d)/2-(c.a-c.d)/2)));for(c=1;c<=a.Sb;++c)GH(a.zb[c],e,d),cF(a.zb[c]);a.Ib=!0;a.Ze(a.Ec.d)}}\nfunction VE(a,b){var c;c=-1;J(b,"Select substituent")?(c=202,b=m):J(b,lb)?c=235:J(b,mb)?c=240:J(b,jb)?c=260:J(b,wb)?c=261:J(b,Db)?c=241:J(b,vb)?c=233:J(b,rb)?c=236:J(b,nb)?c=237:J(b,zb)?c=234:J(b,yb)?c=243:J(b,Eb)?c=252:J(b,xb)?c=244:J(b,Gb)?c=239:J(b,"-PO3H2")?c=251:J(b,cb)?c=242:J(b,ab)?c=245:J(b,bb)&&(c=238);0=a.mb-1)for(g=f.b.b;j>=a.mb-1&&1=a.k&&(a.k=213);for(c=1;14>=c;++c)kF(a,b,c,1),kF(a,b,c,2);a.k=d;$F(a.wc.a,0,0,a)}var f;if(a.Hb){b=KF(a.fb,a.nb);d=a.mb+(a.Lb?1:0);c=(a.M.a-Q(L(R(bG(a,a.nb)))))/a.nb;f=c-a.mb;lF(b,mE);uF(b.a,Q(L(R(0*(vF(),S)))),Q(L(R(0*S))),Q(L(R(d*S))),Q(L(R(c*S))));a.Lb?(lF(b,(sB(),xB)),e=GF*(a.mb+(a.Lb?1:0))+\n3,f>e&&(wF(b,0,e,a.mb-1,e),xF(b.a,Q(L(R(0*S))),Q(L(R(e*S))),Q(L(R(0*S))),Q(L(R((c-1)*S)))),wF(b,a.mb-1,e,a.mb-1,f),wF(b,a.mb-1,f,d,f))):(lF(b,nE),xF(b.a,Q(L(R(0*S))),Q(L(R(0*S))),Q(L(R(0*S))),Q(L(R((c-1)*S)))),wF(b,0,GF*a.mb,c-1,GF*a.mb),lF(b,JB(mE)),xF(b.a,Q(L(R((d-1)*S))),Q(L(R(0*S))),Q(L(R((d-1)*S))),Q(L(R((f+1)*S)))));xF(b.a,Q(L(R(0*S))),Q(L(R((c-1)*S))),Q(L(R(d*S))),Q(L(R((c-1)*S))));for(c=3;c<=GF+2;++c)kF(a,b,1,c);$F(a.fb.a,0,Q(L(R(bG(a,a.nb)))),a)}a.Jb&&(d=KF(a.fc,a.nb),c=a.Lb?1:3,b=(a.M.a-\nQ(L(R(bG(a,a.nb))))-Q(L(R(a.mb*a.nb))))/a.nb,a.Lb?(lF(d,(sB(),xB)),uF(d.a,Q(L(R(0*(vF(),S)))),Q(L(R(0*S))),Q(L(R(c*S))),Q(L(R(b*S))))):(lF(d,JB(mE)),xF(d.a,Q(L(R((c-1)*(vF(),S)))),Q(L(R(0*S))),Q(L(R((c-1)*S))),Q(L(R(b*S)))),lF(d,mE),xF(d.a,Q(L(R((c-2)*S))),Q(L(R(0*S))),Q(L(R((c-2)*S))),Q(L(R(b*S)))),lF(d,nE),xF(d.a,Q(L(R((c-3)*S))),Q(L(R(0*S))),Q(L(R((c-3)*S))),Q(L(R(b*S))))),$F(a.fc.a,a.M.b-Q(L(R((a.Lb?1:3)*a.nb))),Q(L(R(bG(a,a.nb)))),a))}}\nfunction nt(a,b){a.A?0==b&&(a.I=-1,gt(a,Mg),gG(a)):(a.gb?a.I=b:-1a.I?a.I=10*a.I+b:a.I=b,a.gb=!1,0==a.I?(a.I=-1,gt(a,Mg)):gt(a,a.I+ea),gG(a))}function oG(a,b){var c,d;d=b.b;c=b.a;a.J||(d-=Q(L(R(aG(a,a.nb))))+Q(L(R((a.Lb?1:3)*a.nb))),c-=Q(L(R(bG(a,a.nb))))+Q(L(R(a.mb*a.nb))));1>d&&(d=1);1>c&&(c=1);a.yb=Uu(d);a.ub=Uu(c)}function yE(a){kE();return 14<=a&&20>=a?1:21<=a&&28>=a?2:29<=a&&31>=a?3:0}w(553,451,Wl);_.vf=function(a){IE(this,a)};_.Uf=sI;_.Vf=function(){return OE(),null!=this.Pb?PE:QE};\n_.Wf=function(){return OE(),OE(),QE};_.Xf=LA;_.Yf=function(a,b,c){return YA(this,b,c)};_.Zf=LA;_.$f=function(){bD()};_._f=WB;_.ag=tI;_.bg=WB;_.cg=function(){bD()};_.dg=function(){return it(this,!0,!1)};\n_.wf=function(a){var b,c;if(this.s)if(c=a.c,b=a.f,a=a.i,c=(100+2*c)/100,this.J||!(bthis.M.a-Q(L(R(this.mb*this.nb)))||b>this.M.b-Q(L(R((this.Lb?1:3)*this.nb))))){if(b=this.xb*c,b>this.xb&&10>=b||b=b&&oI(this,b)};_.Ze=function(){rI(this)};\n_.eg=function(a){this.Tb&&(null!=a&&0j&&(j=0);h=new XI(g,h,j,M);YI(h);vm(g.k,h);YD(f,M.pb);XD(f,g.pb)}else TD("JSME initialization error: HTML id "+a+" not found.")}function ZI(){return av(null)}\nfunction $I(a){return av(a)}w(557,1,Cl,PI,RI,SI,QI);_.hg=function(a){mx(this.d,new aJ(this,a),(Gs(),Gs(),Hs))};_.ig=function(a){mx(this.d,new bJ(this,a),(pt(),pt(),qt))};_.jg=function(a){mx(this.d,new cJ(this,a),(vt(),vt(),wt))};_.kg=function(a){mx(this.d,new dJ(this,a),(yt(),yt(),zt))};_.lg=function(a){jq(2,new eJ(this.b,a))};_.mg=function(){dF(this.b,!0)};_.ng=function(){Aq((xq(),yq),new fJ(this))};_.og=function(){var a,b,c;c=[];for(b=new uu(this.d.a);b.ba&&(b.x=a,NF(b,a),fG(b))};_.Xg=function(a,b){var c=this.b,d;d=nI(c,a);1>b||b>d.p?(gt(c,"ERROR - invalid atom index: "+b),gG(c)):(d.v=b,AH(c))};_.Yg=function(a){zI(this.b,Ld,a)};_.Zg=function(a,b){zI(this.b,a,b)};_.he=function(a){ax(this.d,a);OI(this)};_.$g=function(a){this.b.V=a};_._g=function(a){oI(this.b,a)};_.ah=function(a){var b=this.b;b.tb=a;fG(b)};_.bh=function(a){var b=this.b;b.wb=a;fG(b)};_.ch=function(a){pI(this.b,a)};\n_.dh=function(a){this.b.Pb=a};_.eh=function(a){this.b.Qb=a};_.fh=function(a){var b=this.b;b.Wb=a;b.F=hF(b,!1)};_.gh=function(a){this.b.Yb=a};_.hh=function(a,b){bx(this.d,a,b);OI(this)};_.ih=function(a,b,c){c&&bx(this.c,a,b);bx(this.d,a,b);OI(this)};_.jh=function(a,b){cx(this.d,a,b);OI(this)};_.kh=function(a,b,c){c&&cx(this.c,a,b);cx(this.d,a,b);OI(this)};_.lh=function(a){VE(this.b,a)};_.mh=function(a,b){var c=this.b,d;c.q=!1;d=c.sc;c.sc=!1;c.uc=new kI(c,a);c.sc=d;c.k=253;gt(c,b);gG(c)};\n_.ie=function(a){ix(this.c.pb,a)};_.nh=function(a){this.b.i=a};_.je=function(a){this.d.pb.style[zk]=a;OI(this)};_.oh=function(a){FH(this.b,a)};_.ph=function(){return zE(this.b)};_.a=-1;_.b=null;_.c=null;_.d=null;var TI=0;function fJ(a){this.a=a}w(558,1,{},fJ);_.pd=function(){var a,b;for(b=new uu(this.a.d.a);b.b=a.c.length)return!1;c=a.c[a.b];g=Vq(c,zk);b=Vq(c,Hh);f=Vq(c,Bi);e=Vq(c,Kh);var h,j,l;l={};for(d=0;d=d&&b=a;return c?65536+((d&1023)<<10)+(e&1023):d}function HJ(a,b){return 2>b||36b?b:10)?a-48:97<=a&&aa?-a:a):a}\nfunction KJ(a,b){var c;c=new IJ;c.d=he+(LJ(0!=a?-a:0)?JJ(0!=a?-a:0):m+Gp(c));MJ(0!=a?-a:0)&&NJ(0!=a?-a:0,c);c.b=4;c.a=b;return c}function U(a){var b;b=new IJ;b.d=he+(LJ(a)?JJ(a):m+Gp(b));MJ(a)&&NJ(a,b);return b}function OJ(a,b){var c;c=new IJ;c.d=he+(LJ(a)?JJ(a):m+Gp(c));MJ(a)&&NJ(a,c);c.b=b?8:0;return c}function PJ(){var a;a=new IJ;a.d=he+(LJ(0)?JJ(0):m+Gp(a));MJ(0)&&NJ(0,a);a.b=2;return a}function QJ(a){var b;b=new IJ;b.d=he+(LJ(a)?JJ(a):m+Gp(b));MJ(a)&&NJ(a,b);b.b=1;return b}\nfunction MJ(a){return typeof a==Ji&&0b||36c||2147483647a)return 0;if(0==a)return 32;b=-(a>>16)>>16&16;c=16-b;a>>=b;b=a-256>>16&8;c+=b;a<<=b;b=a-4096>>16&4;c+=b;a<<=b;b=a-16384>>16&2;c+=b;a=a<>14;return c+2-(a&~(a>>1))}function nv(a){var b,c;if(0==a)return 32;c=0;for(b=1;0==(b&a);b<<=1)++c;return c}function Zl(a){var b,c,d;b=C(XJ,xl,-1,8,1);c=(YJ(),ZJ);d=7;if(0<=a)for(;15>=4;else for(;0>=4;b[d]=c[a&15];return $J(b,d,8)}\nfunction uG(a){var b,c;return-129a?(b=a+128,c=(aK(),bK)[b],!c&&(c=bK[b]=new iB(a)),c):new iB(a)}w(594,591,{88:1,93:1,99:1,101:1},iB);_.eQ=function(a){return H(a,99)&&a.a==this.a};_.hC=Sv;_.tS=WJ;_.a=0;function aK(){aK=x;bK=C(IH,q,99,256,0)}var bK;function VF(a){return 0>=a?0-a:a}function WF(a){return 0>a?-a:a}function Pm(a,b){return a>b?a:b}function R(a){return Math.round(a)}function cK(a){return Math.sqrt(a)}function aD(){}function ju(a){this.f=a}\nw(598,136,{88:1,96:1,100:1,104:1,105:1},aD,ju);function YJ(){YJ=x;ZJ=y(XJ,xl,-1,[48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122])}var ZJ;function TJ(a){this.f=a}w(600,593,{88:1,96:1,98:1,102:1,104:1,105:1},TJ);function GJ(a,b){return a.charCodeAt(b)}function dK(a,b){return-1!=a.lastIndexOf(b)&&a.lastIndexOf(b)==a.length-b.length}function J(a,b){return!H(b,1)?!1:""+a==b}function ex(a,b){return a.indexOf(b)}\nfunction oD(a,b,c){return a.indexOf(b,c)}function nA(a,b){return a.lastIndexOf(b)}function LI(a,b,c){var d;for(d=0;0<=(d=c.indexOf(Of,d));)36==c.charCodeAt(d+1)?c=c.substr(0,d-0)+ra+hx(c,++d):c=c.substr(0,d-0)+hx(c,++d);return a.replace(RegExp(b,wh),c)}\nfunction eK(a,b){for(var c=RegExp(b,wh),d=[],e=0,f=a,g=null;;){var h=c.exec(f);if(null==h||f==m){d[e]=f;break}else d[e]=f.substring(0,h.index),f=f.substring(h.index+h[0].length,f.length),c.lastIndex=0,g==f&&(d[e]=f.substring(0,1),f=f.substring(1)),g=f,e++}if(0ea&&a[a.length-1]>ea?a:a.replace(/^(\\s*)/,m).replace(/\\s*$/,m)}function $J(a,b,c){a=a.slice(b,c);return String.fromCharCode.apply(null,a)}\nfunction fK(a,b,c){if(128>c)return a[b]=(c&127)<<24>>24,1;if(2048>c)return a[b++]=(c>>6&31|192)<<24>>24,a[b]=(c&63|128)<<24>>24,2;if(65536>c)return a[b++]=(c>>12&15|224)<<24>>24,a[b++]=(c>>6&63|128)<<24>>24,a[b]=(c&63|128)<<24>>24,3;if(2097152>c)return a[b++]=(c>>18&7|240)<<24>>24,a[b++]=(c>>12&63|128)<<24>>24,a[b++]=(c>>6&63|128)<<24>>24,a[b]=(c&63|128)<<24>>24,4;if(67108864>c)return a[b++]=(c>>24&3|248)<<24>>24,a[b++]=(c>>18&63|128)<<24>>24,a[b++]=(c>>12&63|128)<<24>>24,a[b++]=(c>>6&63|128)<<24>>\n24,a[b]=(c&63|128)<<24>>24,5;throw new Km("Character out of range: "+c);}function fx(a){var b;return 65536<=a?(b=56320+(a-65536&1023)&65535,String.fromCharCode(55296+(a-65536>>10&1023)&65535)+String.fromCharCode(b)):String.fromCharCode(a&65535)}function gK(a){var b,c,d,e,f;e=a.length;for(d=b=0;dc?++b:2048>c?b+=2:65536>c?b+=3:2097152>c?b+=4:67108864>c&&(b+=5);b=C(hK,Il,-1,b,1);for(d=f=0;da||a>=b)&&zK(a,b)}function zK(a,b){throw new EJ("Index: "+a+", Size: "+b);}w(616,609,pl);\n_.wh=function(){throw new vD("Add not supported on this list");};_.qh=function(a){this.wh(this.Pf(),a);return!0};_.eQ=function(a){return yK(this,a)};_.hC=function(){var a,b,c;b=1;for(a=this.ue();a.Vd();)c=a.Wd(),b=31*b+(null==c?0:Fp(c)),b=~~b;return b};_.ue=function(){return new uu(this)};_.yh=function(){return this.zh(0)};_.zh=function(a){return new AK(this,a)};_.Ah=function(){throw new vD("Remove not supported on this list");};function xK(a){return a.b=a.d.Pf())throw new Ix;return a.d.xh(a.c=a.b++)}function uK(a){if(0>a.c)throw new gA;a.d.Ah(a.c);a.b=a.c;a.c=-1}function uu(a){this.d=a}w(617,1,{},uu);_.Vd=function(){return xK(this)};_.Wd=function(){return vu(this)};_.Xd=function(){uK(this)};_.b=0;_.c=-1;_.d=null;function AK(a,b){var c;this.d=this.a=a;c=a.Pf();(0>b||b>c)&&zK(b,c);this.b=b}w(618,617,{},AK);_.Bh=function(){return 0=this.b)throw new Ix;return this.a.xh(this.c=--this.b)};_.a=null;\nfunction BK(a){a=new rK(a.b.a);return new CK(a)}function DK(a,b){this.a=a;this.b=b}w(619,611,Dl,DK);_.rh=EK;_.ue=function(){return BK(this)};_.Pf=function(){return this.b.a.d};_.a=null;_.b=null;function CK(a){this.a=a}w(620,1,{},CK);_.Vd=function(){return xK(this.a.a)};_.Wd=function(){return(this.a.b=vu(this.a.a)).th()};_.Xd=function(){tK(this.a)};_.a=null;function FK(a){a.b=C(GK,q,0,0,0)}function pC(a,b,c){(0>b||b>a.c)&&zK(b,a.c);a.b.splice(b,0,c);++a.c}\nfunction vm(a,b){fq(a.b,a.c++,b);return!0}function ww(a,b){TB(b,a.c);return a.b[b]}function oz(a,b){for(var c=0;ca.c&&fq(b,a.c,null);return b}\nfunction Bm(){FK(this)}function YB(a){FK(this);this.b.length=a}function mB(a){FK(this);a=Mu(a.b,a.c);Array.prototype.splice.apply(this.b,[0,0].concat(a));this.c=this.b.length}w(624,616,Ul,Bm,YB,mB);_.wh=function(a,b){pC(this,a,b)};_.qh=function(a){return vm(this,a)};_.mg=function(){this.b=C(GK,q,0,0,0);this.c=0};_.rh=function(a){return-1!=oz(this,a)};_.xh=function(a){return ww(this,a)};_.Mf=function(){return 0==this.c};_.Ah=function(a){return HK(this,a)};_.sh=function(a){return om(this,a)};_.Pf=Ms;\n_.c=0;function Du(){Du=x;Eu=new IK}var Eu;function IK(){}w(627,616,ol,IK);_.rh=tI;_.xh=function(){throw new Fx;};_.Pf=function(){return 0};function JK(){this.a=new Date}function KK(a){return 10>a?bc+a:m+a}w(630,1,{88:1,92:1,93:1,106:1},JK);_.eQ=function(a){return H(a,106)&&Bv(L(this.a.getTime()),L(a.a.getTime()))};\n_.hC=function(){var a;a=L(this.a.getTime());var b,c,d,e;c=32;d=a.h&1048575;22>c?(e=d>>>c,b=a.m>>c|d<<22-c,c=a.l>>c|a.m<<22-c):44>c?(e=0,b=d>>>c-22,c=a.m>>c-22|a.h<<44-c):(b=e=0,c=d>>>c-44);b=ev(c&4194303,b&4194303,e&1048575);a=ev(a.l^b.l,a.m^b.m,a.h^b.h);return Q(a)};\n_.tS=function(){var a,b;b=-this.a.getTimezoneOffset();a=(0<=b?Oa:m)+~~(b/60);b=10>(0>b?-b:b)%60?bc+(0>b?-b:b)%60:m+(0>b?-b:b)%60;return(LK(),MK)[this.a.getDay()]+ea+NK[this.a.getMonth()]+ea+KK(this.a.getDate())+ea+KK(this.a.getHours())+Nc+KK(this.a.getMinutes())+Nc+KK(this.a.getSeconds())+" GMT"+a+b+ea+this.a.getFullYear()};_.a=null;function LK(){LK=x;MK=y(Yu,q,1,"Sun,Mon,Tue,Wed,Thu,Fri,Sat".split(","));NK=y(Yu,q,1,"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(","))}var MK,NK;\nfunction su(a,b){return null==D(a.a,b,a)}function ru(){this.a=new pp}w(632,611,{88:1,92:1,111:1},ru);_.qh=function(a){return su(this,a)};_.rh=EK;_.Mf=function(){return 0==this.a.d};_.ue=function(){return BK(new DK(this.a,new AD(this.a)))};_.sh=function(a){return null!=Cu(this.a,a)};_.Pf=sK;_.tS=function(){return pK(new DK(this.a,new AD(this.a)))};_.a=null;function sD(a,b){this.a=a;this.b=b}w(636,614,Ll,sD);_.th=Sv;_.uh=sy;_.vh=function(a){var b;b=this.b;this.b=a;return b};_.a=null;_.b=null;\nfunction Ix(){}w(637,136,{88:1,96:1,104:1,105:1,110:1},Ix);function OK(a){var b,c;b=a.b;c=a.d.length;if(ba.j&&(++a.j,a.p[a.j]=b)}function WK(a){var b;b=new PH;b.f=a.f;b.d=a.d;b.q=a.q;b.r=a.r;b.s=a.s;b.n=a.n;b.e=a.e;b.p=a.p.slice();b.j=a.j;b.c=a.c;b.a=a.a;b.b=a.b;b.i=a.i;b.o=a.o;b.k=a.k;return b}function pH(a){return-99199!=a.f?a.f:0}function XK(a){return 4<=a.o&&2==a.j}\nfunction bF(a,b,c){a.q+=b;a.r+=c}function TE(a){var b;b=-99199!=a.f;a.f=-99199;return b}function PH(){UK();this.p=OF(7)}w(657,1,{114:1},PH);_.a=3;_.b=null;_.c=0;_.d=0;_.e=null;_.f=-99199;_.i=0;_.j=0;_.k=0;_.n=0;_.o=0;_.q=0;_.r=0;_.s=0;var VK;function aI(a,b){var c;c=YK(a);return 0\\\\.]+$",2);iL=new TK("\\\\s+",2)}\nfunction zG(a){fL();var b,c,d,e;this.i=this.f=null;this.j=0;this.e=!1;this.a=this.c=null;var f,g,h;if(null==a||0==a.length)c=0;else{g=1;f=a.length;for(h=0;h=this.j?this.b=gx(a):this.b=a;c=new RK(iL,this.b);this.d=c.b.a.test(c.a);do if(4a.indexOf("j")&&((this.e=0=f.length)e=0;else{for(h=0,j=f.length;hn&&(n=0.001);r=g/n;e=f/n;l=OF(4);for(h=0;4>h;++h)d[h]==c||0>=d[h]||(0==l[1]?l[1]=d[h]:0==l[2]?l[2]=d[h]:0==l[3]&&(l[3]=d[h]));o=OF(4);d=OF(4);for(h=1;3>=h;++h)3==h&&0==l[3]||(f=(a.b[l[h]].q-a.b[b].q)*e+(a.b[l[h]].r-a.b[b].r)*r,g=(a.b[l[h]].r-a.b[b].r)*e-(a.b[l[h]].q-a.b[b].q)*r,n=Math.sqrt(f*f+g*g),0.001>n&&(n=0.001),o[h]=g/n,d[h]=f/n);a=ML(o[1],d[1],o[2],d[2]);0b?(j[1]=l[1],j[2]=l[3],j[3]=l[2]):0>a&&0d?(j[1]=l[2],j[2]=l[3],j[3]=l[1]):0>d&&0b&&0>a&&(j[1]=l[3],j[2]=l[2],j[3]=l[1])):0j&&(j=0.001);g/=j;f/=j;l=j+25*Math.cos(1.0471975511965976);n=25*Math.sin(1.0471975511965976);h=RH(a,b,d);if(3==a.c[h].c||204==a.k.k||1!=a.c[h].c&&(203==a.k.k||204==a.k.k)||a.n)l=j+25,n=0;0n?n=-n:0>c&&0j&&(j=0.001),zH(a,a.p,a.b[b].q+25*f/j,a.b[b].r+25*g/j),0==EH(a,a.p,1,a.p)||h==a.b[b].j);++h);break;default:return--a.p,gt(a.k,"Are you trying to draw an hedgehog ?"),a.k.cb=9,!1}b=QH(a,a.v,a.p,1);203==a.k.k&&(b.c=2);204==a.k.k&&\n(b.c=3);201==a.k.k&&xH(a,a.q);a.z=a.b[a.p].q;a.A=a.b[a.p].r;return e}function rH(a,b){var c,d;if(!b||0==b.c)return m;d=m;d+="M V30 BEGIN COLLECTION"+(kE(),ba);d+=Xe+a+" [ATOMS=("+b.c;for(c=new uu(b);c.bj&&(j=0.001);1>VF((a.b[b].r-a.b[e].r)*(g/j)+(a.b[b].q-a.b[e].q)*(h/j))?(g=a.b[b].q-a.b[e].q,h=a.b[b].r-a.b[e].r,j=Math.sqrt(g*g+h*h),0.001>j&&(j=0.001),b=h/j,g/=j,d[0]=a.b[e].q+j*g-c*b,d[1]=a.b[e].r+c*g+j*b):(g=(a.b[e].q+a.b[f].q)/2,e=(a.b[e].r+a.b[f].r)/2,g=a.b[b].q-g,h=a.b[b].r-e,j=Math.sqrt(g*g+h*h),0.001>j&&(j=0.001),d[0]=a.b[b].q+c*g/j,d[1]=a.b[b].r+c*h/j)}\nfunction iH(a){var b,c,d,e,f,g,h,j,l,n,o,r,t,z;n=-1;j=6;switch(a.k.k){case 206:j=3;break;case 207:j=4;break;case 208:case 221:case 223:j=5;break;case 210:case 209:j=6;break;case 211:j=7;break;case 212:j=8;break;case 229:j=9}f=6.283185307179586/j;l=cK(312.5/(1-Math.cos(f)));if(0a.b[a.v].j)TL(a,j,f,l);else if(!a.k.Bb&&!a.k.rc)n=a.v,jH(a,a.v,0),a.v=a.p,TL(a,j,f,l);else{a.k.rc=!1;if(209==a.k.k||221==a.k.k||223==a.k.k){gt(a.k,"ERROR - cannot add aromatic spiro ring !");a.k.cb=9;return}for(d=\n1;d<=a.b[a.v].j;++d)if(b=a.c[RH(a,a.v,a.b[a.v].p[d])].c,2o&&(o=0.001);g/=o;e/=o;for(d=1;d<=j;++d)h=yH(a,null),r=f*d+1.5707963267948966,DH(h,b[0]+l*(Math.sin(r)*e-Math.cos(r)*g),b[1]+l*(Math.cos(r)*e+Math.sin(r)*g))}else if(0o&&(o=0.001);g/=o;e/=o;h=o/2;r=l*Math.sin(0.5*(3.141592653589793-f));o=1;0<(a.b[d].r-a.b[b].r)*e-(a.b[d].q-a.b[b].q)*g&&(r=-r,o=0);t=a.b[b].q+h*e-r*g;z=a.b[b].r+r*e+h*g;for(d=1;d<=j;++d)h=yH(a,null),r=f*(d+0.5)+3.141592653589793*o,DH(h,t+l*(Math.sin(r)*e-Math.cos(r)*g),z+l*(Math.cos(r)*e+Math.sin(r)*g)),1==o?(d==j&&DH(h,a.b[b].q,a.b[b].r),\nd==j-1&&DH(h,a.b[c].q,a.b[c].r)):(d==j-1&&DH(h,a.b[b].q,a.b[b].r),d==j&&DH(h,a.b[c].q,a.b[c].r))}else{b=0.5;6==j&&(b=0);for(d=1;d<=j;++d)h=yH(a,null),r=f*(d-b),DH(h,a.z+l*Math.sin(r),a.A+l*Math.cos(r))}b=j;l=0;for(f=1;f<=b;++f)MH(a,null),l=a.p-b+f,a.b[l].j=2,a.c[a.q].i=l,a.c[a.q].j=l+1;a.c[a.q].j=a.p-b+1;if(209==a.k.k){if(a.c[a.q-4].c=2,a.c[a.q-2].c=2,a.c[a.q].c=2,0e&&ed;--f)if(0g&&(g=0.001),e/=g,f/=g);l=a.b[a.v].q+d*f;n=a.b[a.v].r+d*e;for(g=1;g<=b;++g)h=yH(a,null),j=c*g-1.5707963267948966,DH(h,l+d*(Math.sin(j)*f-Math.cos(j)*e),n+d*(Math.cos(j)*f+Math.sin(j)*e))}function SL(a,b){var c,d;0==b&&(b=a.p);for(c=a.p;c>a.p-b;--c)d=EH(a,c,1,a.p),0!=d&&bF(a.b[c],6,6)}\nfunction RH(a,b,c){var d,e,f;for(e=1;e<=a.q;++e)if(d=a.c[e],f=d.i,d=d.j,f==b&&d==c||f==c&&d==b)return e;return 0}function sG(a){var b;for(b=1;b<=a.q;++b)if(1==a.c[b].c&&0=c||0>=d?a.s=!0:(b=YE(a),c=c/2-b.a,b=d/2-b.b,a.k.Ob||GH(a,c,b),cF(a))}\nfunction eH(a,b,c){var d,e,f;if(1==c)return a.b[b].n+=1,!0;if(-1==c)return a.b[b].n+=-1,!0;e=a.b[b].n;f=a.b[b].i;d=a.b[b].o;-1==d&&0==c&&(0==a.b[b].n?a.b[b].n=1:1==a.b[b].n?a.b[b].n=-1:-1==a.b[b].n&&(a.b[b].n=0));switch(a.b[b].a){case 1:0==d&&(0==a.b[b].n?a.b[b].n=1:1==a.b[b].n?a.b[b].n=-1:a.b[b].n=0);break;case 2:2d&&(0==\na.b[b].n?a.b[b].n=-1:-1==a.b[b].n?a.b[b].n=1:1==a.b[b].n&&(a.b[b].n=0));break;case 4:case 7:3d&&0==a.b[b].n?a.b[b].n=1:3>d&&1==a.b[b].n?a.b[b].n=-1:3>d&&-1==a.b[b].n&&(a.b[b].n=0);break;case 5:case 8:case 13:2d&&0==a.b[b].n?a.b[b].n=-1:\n2>d&&-1==a.b[b].n?a.b[b].n=1:2>d&&1==a.b[b].n&&(a.b[b].n=0);break;case 9:case 10:case 11:case 12:0==d&&0==a.b[b].n?a.b[b].n=-1:0==d&&-1==a.b[b].n?a.b[b].n=0:gt(a.k,"Charge change not possible on the halogen !");break;case 32:gt(a.k,"Use X button to change charge on the X atom !")}if(0e&&eb?e=2:0>a&&0>b?e=3:0>a&&0<=b&&(e=4);0<=c&&0<=d?f=1:0<=c&&0>d?f=2:0>c&&0>d?f=3:0>c&&0<=d&&(f=4);if(ef)return-1;switch(e){case 1:case 4:return ac?1:-1}return 0}function cI(a){UL(a);cF(a);dI(a)}\nfunction YE(a){var b,c,d,e,f,g;b=new dL;f=9999;d=-9999;g=9999;e=-9999;for(c=1;c<=a.p;++c)a.b[c].qd&&(d=a.b[c].q),a.b[c].re&&(e=a.b[c].r);b.a=f+(d-f)/2;b.b=g+(e-g)/2;b.c=d-f;b.d=e-g;25>b.c&&(b.c=25);25>b.d&&(b.d=25);return b}function RL(a,b,c){var d,e;e=0;for(d=1;d<=a.p;++d)d>=b&&d<=c||0!=EH(a,d,b,c)&&++e;return e}function QH(a,b,c,d){var e;e=MH(a,null);NH(a.b[b],c);NH(a.b[c],b);e.i=b;e.j=c;TH(e,a.b);e.c=d;return e}\nfunction yH(a,b){++a.p;b?a.b[a.p]=WK(b):a.b[a.p]=new PH;return a.b[a.p]}function UF(a,b,c,d,e,f){var g;g=a.b[b].q-c/2;f||(g-=d-c);a=a.b[b].r-~~(e/2);return new VL(g-1-2,a-2,d+1+4,e+4)}function MH(a,b){var c;++a.q;c=new bL;b&&cL(c,b);return a.c[a.q]=c}\nfunction mH(a,b,c){var d,e,f,g,h,c=oH(a,b,c,!1);e=-1.7976931348623157E308;d=1.7976931348623157E308;for(b=1;b<=a.p;++b)a.b[b].r>e&&(e=a.b[b].r),a.b[b].qa.b[b].n?f=4-a.b[b].n:0>a.b[b].n&&-4=g&&(h=g)),\ng=lH(h,2)+lH(f,3)+" 0 0 0 0 0 0 0",f=XH(a,b),g+=lH(f,3),c+=g+ia+(kE(),ba);for(b=1;b<=a.q;++b)d=a.c[b],g=e=d.c,1==a.c[b].c?g=1:2==a.c[b].c&&(g=2),f=lH(d.i,3)+lH(d.j,3),h=0,1==e&&1==d.f?h=1:1==e&&2==d.f&&(h=6),1==e&&3==d.f&&(h=1,f=lH(d.j,3)+lH(d.i,3)),1==e&&4==d.f&&(h=6,f=lH(d.j,3)+lH(d.i,3)),c+=f+lH(g,3)+lH(h,3)+ja+(kE(),ba);for(b=1;b<=a.p;++b)0!=a.b[b].n&&(c+="M CHG 1"+lH(b,4)+lH(a.b[b].n,4)+(kE(),ba)),0!=a.b[b].d&&(c+="M ISO 1"+lH(b,4)+lH(a.b[b].d,4)+(kE(),ba));return c+=Ue+(kE(),ba)}\nfunction DE(a,b){var c,d,e,f,g,h,j;g=j=0;for(h=1;h<=a.q;++h)e=a.c[h],c=e.i,d=e.j,c!=b&&d!=b?(++j,f=a.c[j],cL(f,e),f.i=c,c>b&&--f.i,f.j=d,d>b&&--f.j):g+=e.c;a.q=j;for(h=b;hb&&--c,a.b[h].p[++d]=c);a.b[h].j=d}}\nfunction FE(a,b){var c,d,e,f;c=a.c[b].i;d=a.c[b].j;for(e=b;ea.b[b].a&&0==a.b[d].d){if(0!=(-99199!=a.b[d].f?a.b[d].f:0))continue a;b=RH(a,d,b);if(1==a.c[b].c&&(0==a.c[b].f||!a.k.tc))DE(a,d),c=!0}return c}function WL(a,b){var c,d,e,f,g;g=y(A,u,-1,[0,0]);for(e=1,f=0;e<=a.b[b].j;++e)c=a.b[b].p[e],d=RH(a,b,c),2!=a.c[d].c&&(g[f++]=c);return g}\nfunction UL(a){var b,c,d;for(d=1;d<=a.p;++d)a.b[d].j=0;for(d=1;d<=a.q;++d)b=a.c[d].i,c=a.c[d].j,NH(a.b[b],c),NH(a.b[c],b)}\nfunction $H(a,b,c){var d,e,f,g,h,j,l,n,o;a.d=OF(a.q+1);o=[];for(j=1;j<=a.p;++j){o[j]=!1;b[j]=!1;a:{d=void 0;for(d=1;d<=a.b[j].j;++d)if(c[RH(a,j,a.b[j].p[d])]){d=!0;break a}d=!1}if(d&&!(3d&&(d=c);return d}\nfunction TF(a,b){var c;c=(kE(),rE)[a.b[b].a];32==a.b[b].a&&(c=a.b[b].e);return c}function SH(a,b){a.b[b].j+=-1}function ZF(a,b,c){var d,e,f,g,h;h=1;a.a=OF(a.p+1);for(e=a.a[b]=1;e<=a.b[b].j;++e)d=a.b[b].p[e],d!=c&&(a.a[d]=++h);for(g=!1;;){for(d=1;d<=a.p;++d){g=!1;if(0~~(c/2)+24?3:2}function ME(a,b){var c,d,e,f,g,h,j;c=YE(a);d=c.a;e=c.b;g=Math.sin(3.141592653589793*b/180);c=Math.cos(3.141592653589793*b/180);for(f=1;f<=a.p;++f)h=a.b[f].q*c+a.b[f].r*g,j=-a.b[f].q*g+a.b[f].r*c,DH(a.b[f],h,j);c=YE(a);GH(a,d-c.a,e-c.b)}\nfunction VH(a){var b,c,d,e,f;e=f=0;for(d=1;d<=a.q;++d)b=a.b[a.c[d].i].q-a.b[a.c[d].j].q,c=a.b[a.c[d].i].r-a.b[a.c[d].j].r,f+=Math.sqrt(b*b+c*c);0=g;++g)if(J(f,(kE(),rE)[g])){f=g;break b}f=32}gH(a,b,f);32==a.b[b].a&&(a.b[b].e=d);c+=\nea;d=0;0=e&&(d=e-48));32==a.b[b].a&&(a.b[b].i=d)}}}function RG(a,b,c){var d,e;a.i=1;c&&(a.i=-1);b=new KD(b);try{for(;b.j=DD(b,b.a),b.jc||6a.b[c].j&&2>a.b[d].j)e.f=0,gt(a.k,"Stereomarking meaningless on this bond !");else switch(e.f){case 0:a.b[d].j<=a.b[c].j?e.f=1:e.f=3;break;case 1:e.f=2;break;case 2:2h||3c[b]&&(j=f,f=b,b=j);j=WL(a,f);h=j[0];l=j[1];e=0;n=!1;0c[l]&&(j=h,h=l,l=j);j=RH(a,f,h);0!=d[j]?e=h:1==a.c[j].c&&5!=a.d[j]&&(e=h);0==e&&0c[f]&&(n=!0);j=WL(a,b);l=j[0];g=j[1];h=0;0g&&(g=0.001),j/=g,g=l/g,l=(a.b[e].r-a.b[f].r)*g-(a.b[e].q-a.b[f].q)*j,t=(a.b[h].r-a.b[f].r)*g-(a.b[h].q-a.b[f].q)*j,2>(0>=l?0-l:l)||2>(0>=t?0-t:t))gt(a.k,"Not unique E/Z geometry !");else{g=\nRH(a,e,f);h=RH(a,h,b);r=1;if(0==d[g]){for(o=1;o<=a.b[e].j;++o)if(b=a.b[e].p[o],b!=f&&(j=RH(a,e,b),0!=d[j])){c[b]>c[e]?r=-d[j]:r=d[j];break}d[g]=r}0==d[h]&&(0l&&0>t?d[h]=-d[g]:d[h]=d[g],n&&(d[h]=-d[h]))}}}function fI(a,b,c){var d;d=a.c[b].f;return 1>d||4g?e.i=3-g-c.b[d].n:4==g?(c.b[d].n=-1,e.i=0):5g?0c.b[d].n?e.i=2-g-c.b[d].n:e.i=4-g:(c.b[d].n=g-4,e.i=4-g+c.b[d].n);break;case 4:case 7:3>g?e.i=3-g+c.b[d].n:3==g?0>c.b[d].n?(c.b[d].n=0,e.i=0):0c.b[d].n?(c.b[d].n=0,e.i=0):0g?e.i=2-g+c.b[d].n:2==g?0>c.b[d].n?(c.b[d].n=0,e.i=0):0f;)if(0e.i&&(e.i=0)}}}function eF(a){JL(this);this.b[0]=new PH;this.t=this.q=this.p=0;this.k=a}\nfunction QG(a,b){var c,d,e,f,g,h,j,l,n;eF.call(this,a);if(null!=b&&(f=m,l=OG(b),null!=l)){n=new JD(b,l,!0);for(g=1;4>=g;++g)f=PG(n,l);e=uG(qD(gx(f.substr(0,3)),10)).a;j=uG(qD(gx(f.substr(3,3)),10)).a;g=0;try{g=uG(qD(gx(f.substr(14,1)),10)).a}catch(o){if(o=pq(o),!H(o,96))throw o;}NE(this,(OE(),1==g?PE:QE));for(g=1;g<=e;++g){d=yH(this,null);f=PG(n,l);d.q=(new UJ(RJ(gx(f.substr(0,10))))).a;d.r=-(new UJ(RJ(gx(f.substr(10,10))))).a;d=34;34>f.length&&(d=f.length);d=gx(f.substr(31,d-31));hH(this,g,d);62<=\nf.length&&(h=gx(f.substr(60,3)),0=h))){var r=void 0,r=YK(d);d=0d&&(d=0);this.b[g].d=d}if(39<=f.length&&(h=gx(f.substr(37,2)),0=h))){f=0;switch(h){case 1:f=3;break;case 2:f=2;break;case 3:f=1;break;case 4:f=0;break;case 5:f=-1;break;case 6:f=-2;break;case 7:f=-3}this.b[g].n=f}}for(g=1;g<=j;++g)e=MH(this,null),f=\nPG(n,l),e.i=uG(qD(gx(f.substr(0,3)),10)).a,e.j=uG(qD(gx(f.substr(3,3)),10)).a,d=uG(qD(gx(f.substr(6,3)),10)).a,1==d?c=1:2==d?c=2:3==d?c=3:c=9,h=0,11b.length)this.p=0;else{try{j=new ID(b);g=uG(qD(GD(j),10)).a;h=uG(qD(GD(j),10)).a;for(f=1;f<=g;++f)n=GD(j),c=(o=yH(this,null),hH(this,this.p,n),o),c.q=(new UJ(RJ(GD(j)))).a,c.r=-(new UJ(RJ(GD(j)))).a;for(f=1;f<=h;++f){d=MH(this,null);d.i=uG(qD(GD(j),10)).a;d.j=uG(qD(GD(j),10)).a;e=uG(qD(GD(j),10)).a;l=0;if(-1==e)l=e=1;else if(-2==e)e=1,l=2;else if(-5==e)e=2,l=10;else if(11==\ne||12==e||13==e||14==e)l=e,e=9;d.c=e;d.f=l}UL(this);VH(this);aF(this)}catch(r){r=pq(r);if(H(r,96)){r.yd();this.p=0;return}throw r;}a&&!a.bb&&UE(this);cI(this)}}function TG(a,b,c){var d,e,f,g;eF.call(this,a);g=OF(b.p+1);for(e=1;e<=b.p;++e)b.a[e]==c&&(yH(this,b.b[e]),g[e]=this.p);for(e=1;e<=b.q;++e)if(a=b.c[e].i,d=b.c[e].j,!(b.a[a]!=c&&b.a[d]!=c)&&!(b.a[a]!=c||b.a[d]!=c))f=MH(this,b.c[e]),f.i=g[a],f.j=g[d];this.i=b.i;UL(this)}\nfunction XL(a,b,c){var d,e,f;eF.call(this,a);f=OF(b.p+1);for(d=1;d<=b.p;++d)b.b[d].k==c&&(yH(this,b.b[d]),f[d]=this.p);for(d=1;d<=b.q;++d)a=b.c[d],a.e==c&&(e=MH(this,a),e.i=f[a.i],e.j=f[a.j]);NE(this,b.f);this.i=b.i;UL(this)}\nfunction nH(a,b,c){var d,e,f,g;eF.call(this,a);for(a=1;a<=c;++a)this.p+=b[a].p,this.q+=b[a].q,this.t+=b[a].t,b[a].f.a&&NE(this,(OE(),OE(),PE));this.b=C(KL,q,114,this.p+1,0);this.c=C(LL,q,115,this.q+1,0);f=g=e=0;for(a=1;a<=c;++a){for(d=1;d<=b[a].p;++d)++e,this.b[e]=WK(b[a].b[d]);for(d=1;d<=b[a].q;++d)++g,this.c[g]=aL(b[a].c[d]),this.c[g].i+=f,this.c[g].j+=f;f=e}UL(this)}\nfunction BE(a){var b;JL(this);this.k=a.k;this.p=a.p;this.q=a.q;this.t=a.t;this.b=C(KL,q,114,this.p+1,0);for(b=0;b(0>=a?0-a:a)&&(a=0);a=Q(L(R(a*Math.pow(10,c))))/Math.pow(10,c);e=m+(new UJ(a)).a;d=ex(e,fx(46));0>d&&(e+=Lb,d=ex(e,fx(46)));f=e.length;for(a=1;a<=c-f+d+1;++a)e+=bc;if(0==b)return e;e.length>b&&(e=cd);c=m;for(a=1;a<=b-e.length;++a)c+=ea;return c+e}function OG(a){var b;b=new JD(a,ba,!0);if(4b&&(d=cd);e=m;for(c=1;c<=b-d.length;++c)e+=ea;return e+d}function PG(a,b){for(var c,d;a.j=DD(a,a.a),a.j>16&255)),Uu(0.7*(g.d>>8&255)),Uu(0.7*(g.d&255))),MF(a.a,g)):(h=new cm(Uu(0.7*(g.d>>16&255)),Uu(0.7*(g.d>>8&255)),Uu(0.7*(g.d&255))),f=IB(g),MF(a.a,h));g=Q(L(R(S)));d=Q(L(R(d*S)));e=Q(L(R(e*S)));b=Q(L(R(b*S)));c=Q(L(R(c*S)));d-=g;e-=g;uF(a.a,b+g,c+g,d-g,e-g);MF(a.a,h);uF(a.a,b,c,d,g);uF(a.a,b,c+g,g,e);MF(a.a,f);uF(a.a,b+d,c,g,e+g);uF(a.a,b+1,c+e,d,g)}\nfunction pF(a,b,c,d,e){a=a.a;b=Q(L(R(b*S)));c=Q(L(R(c*S)));d=Q(L(R(d*S)));e=Q(L(R(e*S)));qF(a,!0);rF(a,sF(a,b,c,d,e))}function AF(a,b,c,d){var e,f,g;f=C(A,u,-1,d,1);g=C(A,u,-1,d,1);for(e=0;e=b||b>=cB(this.a)-1||0>=c||c>=dB(this.a)-1)&&(this.a.j=!1);this.a.j?BH(this.a.c,a,b,c):vG(this.a.c,a,b,c);hz(this.a.pb)};_.a=null;function sM(a){this.a=a}w(708,1,{},sM);_.od=function(a){this.a.j=!1;Es(a);Fs(a);JH(this.a.c)};_.a=null;\nfunction tM(a){this.a=a}w(709,1,{},tM);_.nd=function(){this.a.j&&(this.a.j=!1)};_.a=null;function uM(a){this.a=a}w(710,1,{},uM);_.a=null;function vM(a){this.a=a}w(711,1,{},vM);_.a=null;function hM(){fM.call(this);this.pb.style[zk]=fc;this.pb.style[Hh]=fc}w(712,703,rl,hM);function wM(a){this.a=a}w(713,1,{},wM);_.Qd=function(){Aq((xq(),yq),new yM(this))};_.a=null;function yM(a){this.a=a}w(714,1,{},yM);_.pd=function(){this.a.a.c&&(aB(this.a.a.c),yI(this.a.a))};_.a=null;\nfunction zM(a,b){var c;c=b.a;c.e=4;return sH(a.a.c,c,b.d,b.e)}function jM(a){this.a=a}w(715,1,{},jM);_.Hh=function(a){return zM(this,a)};_.a=null;function au(a,b){vG(a.a.c,b.a,b.d,b.e);return sH(a.a.c,b.a,b.d,b.e)}function kM(a){this.a=a}w(716,1,{},kM);_.Hh=function(a){return au(this,a)};_.a=null;function lM(a){this.a=a}w(717,1,{},lM);_.Hh=function(a){return BH(this.a.c,a.a,a.d,a.e)};_.a=null;function mM(a){this.a=a}w(718,1,{},mM);_.Hh=function(){return JH(this.a.c)};_.a=null;\nfunction Ss(a,b){var c;c=L(R(b.b));c=new YC(b,0,uj,c);IE(a.a.c,c);return!0}function nM(a){this.a=a}w(719,1,{},nM);_.Hh=function(a){return Ss(this,a)};var AM=_.a=null;function BM(){BM=x;AM=new Lv((bw(),new aw("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAEklEQVR42mM4MzPtPzJmIF0AAOqfLKHtSuV7AAAAAElFTkSuQmCC")),4,4)}function CM(){CM=x;DM={}}\nfunction EM(a,b,c){var d;c&&(b.style[rh]=c.b+bj,d=c.a,d!=ve&&(b.style[qh]=d),0!=(c.c&1)&&(b.style[th]=yg),0!=(c.c&2)&&(b.style[sh]=Ph));a.e.style[xk]=Hi}\nfunction eC(a,b){var c,d,e,f,g,h,j,l,n,o,r,t,z;d=Gp(b);d in DM?c=DM[d]:(c=$doc.getElementsByTagName("body")[0],e=Tq(Nj),f=Tq(Nh),f.style[fh]=(gr(),"inline"),f.style[tk]=(Xr(),"baseline"),f.style[gi]=cc,f.style[hi]=cc,f.width=1,f.height=1,g=(BM(),AM),f.src=g.d.a,c=(h=$doc.createTextNode(jf),EM(a,e,b),e.appendChild(h),e.appendChild(f),c.appendChild(e),j=Zq(e),l=Zq(e)+(e.offsetHeight||0),n=l-j,o=Zq(f)+(f.offsetHeight||0)+1,r=l-o,t=o-j,c.removeChild(e),z=new FM,z.a=t,z.b=r,z.c=n,z),DM[d]=c);return c}\nfunction GM(){CM();var a,b,c,d,e;Cr();this.a=y(Yu,q,1,["monospace","sans-serif",Hj]);this.c={};this.b={};this.d=$doc.getElementsByTagName("body")[0];this.e=Tq(Nj);this.e.innerHTML=this.f||m;this.e.style[rh]="72.0px";for(b=this.a,c=0,d=b.length;c=g?h=sF(a,b,c,d,e):h=(j=f+g,l=90-f,n=90-j,a.b+\'arc startangle="\'+l+\'" endangle="\'+n+\'" style="top:\'+c*a.a+"px;left:"+b*a.a+jj+d*a.a+hj+e*a.a+\'px"+\'+a.n+ac),rF(a,h))}function $F(a,b,c,d){a=a.a;if(a.s!=b||a.t!=c)Nx(d.Ec.f,a.u,b,c),a.s=b,a.t=c;LM(a)}function xF(a,b,c,d,e){a.o&&rF(a,a.b+\'line from="\'+b*a.a+Pa+c*a.a+\'" to="\'+d*a.a+Pa+e*a.a+\'" strokecolor="\'+a.i+la+a.c+"/>\\n")}function yF(a,b,c,d,e){a.o&&(qF(a,!1),rF(a,MM(a,b,c,d,e)))}\nfunction RF(a,b,c,d){var e,b=b.replace(/&/g,Ea).replace(/<\/g,Ha).replace(/>/g,Fa),f=(IM(),JM),b=(e=eC(f,a.f).a,""+b+"<\/span>");rF(a,b)}function uF(a,b,c,d,e){qF(a,!0);rF(a,MM(a,b,c,d,e))}function LM(a){var b;if(a.q){for(;null!=(b=a.v.pop());){var c=a.d;c[c.length]=b}b=a.d.join(ba);b=m+b+m;b!==a.r&&(a.u.pb.innerHTML=b||m,a.r=b);a.p=!0;a.q=!1}}function MF(a,b){(a.e=b)&&(a.i=NM(b))}\nfunction qI(a,b){var c,d,e,f;a.f=b;a.j=(c=(aC(),bC),d=b.b,e=b.a,f=m,d!=c.b&&(f="font-size:"+d*a.a+gj),e!=c.a&&(f+="font-family:"+e+Uc),0!=(b.c&1)&&(f+="font-weight:bolder;"),0!=(b.c&2)&&(f+="font-style:italic;"),f+="white-space:nowrap;",f)}function LF(a,b){(a.o=b)&&b&&(a.c=\' strokeweight="\'+b.e*a.a+\'px" \')}w(729,480,{});_.d=null;_.e=null;_.f=null;_.i=rg;_.j=null;_.k=!0;_.n=null;_.p=!1;_.q=!1;_.r=m;_.s=0;_.t=0;_.u=null;_.v=null;var KM,JM;\nfunction Xt(a,b){var c;c=b.a.targetTouches;return 1==c.length?(c=c[0],a.b.d=c.clientX-Xq(a.o.pb)+Yq(a.o.pb)+er(a.o.pb.ownerDocument),a.b.e=c.clientY-Zq(a.o.pb)+(a.o.pb.scrollTop||0)+fr(a.o.pb.ownerDocument),a.b.a=new xM(b),Uq(b.a),!0):!1}\nfunction iM(a){this.o=a;this.b=new OM;this.c=new PM(this);mx(this.o,new QM(this),(Yt(),Yt(),Zt));mx(this.o,new RM(this),(Qt(),Qt(),Rt));mx(this.o,new SM(this),(Ut(),Ut(),Vt));mx(this.o,new TM(this),(Mt(),Mt(),Nt));mx(this.o,new UM,(Ys(),Ys(),Zs));mx(this.o,new VM(this),(Us(),Us(),Vs));mx(this.o,new WM(this),(Ps(),Ps(),Qs))}w(730,1,{},iM);_.a=null;_.b=null;_.c=null;_.d=!1;_.e=null;_.f=null;_.i=null;_.j=null;_.k=null;_.n=null;_.o=null;function PM(a){Dm();this.a=a}w(731,65,{},PM);\n_.vd=function(){!this.a.d&&this.a.i&&zM(this.a.i,this.a.b)};_.a=null;function QM(a){this.a=a}w(732,1,{},QM);_.a=null;function RM(a){this.a=a}w(733,1,{},RM);_.a=null;function SM(a){this.a=a}w(734,1,{},SM);_.a=null;function TM(a){this.a=a}w(735,1,{},TM);_.a=null;function UM(){}w(736,1,{},UM);function VM(a){this.a=a}w(737,1,{},VM);_.a=null;function WM(a){this.a=a}w(738,1,{},WM);_.a=null;function OM(){}w(739,1,{},OM);_.a=null;_.b=0;_.c=0;_.d=0;_.e=0;\nfunction NM(a){var b,c;c=a.d>>16&255;b=a.d>>8&255;a=a.d&255;if(0==c*b*a){if(0==c&&0==b&&0==a)return rg;if(255==c&&0==b&&0==a)return"red";if(0==c&&255==b&&0==a)return"green";if(0==c&&0==b&&255==a)return ug}return 255==c&&255==b&&255==a?"white":sj+c+Pa+b+Pa+a+La}function II(){var a=$wnd.navigator.userAgent.match(/MSIE\\s+(\\d+\\.\\d+)/);return a?parseFloat(a[1]):-1}\nfunction XM(a){var b,c,d,e,f;sx(a);d=(tx(),Fz(null));e=new HM;Ly(e,a);Cx(d,e,d.pb);f=a.de();b=a.ce();c=II();9<=c?(++f,++b):7==c&&H(a,38)&&(c=a.pb.innerText,2>=c.length&&(f+=8));Ny(e,a);Lx(d,e);return new xA(f,b)}function TD(a){try{$wnd.console.log(a)}catch(b){}}function YM(){this.pb=Tq(gh);this.pb[Kg]=Vh;this.pb.style[Ui]=Ih;this.pb.style[Zi]=bg;this.pb.style[zk]=fc;this.pb.style[Hh]=fc;this.pb.setAttribute("contenteditable",oh)}w(741,362,jl,YM);\nfunction ZM(){ZM=x;IM();$M=y(Yu,q,1," *,line,polyline,arc,oval,rect,roundrect".split(","))}function sF(a,b,c,d,e){return a.b+\'oval style="position:absolute;left:\'+b*a.a+ij+c*a.a+jj+d*a.a+hj+e*a.a+dj+a.n+ac}function ZL(a,b,c,d,e){var f,g,h,j,l;if(1>d)return m;h=a.b+\'polyline points="\';g=m;for(f=0;f=f.k||(701==f.k?null.bi():401==f.k||402==f.k?(null.bi(),null.bi(),null.bi(),null.bi(),null.bi()):500<=f.k&&507>=f.k&&(g=null.ci,500!=g&&(g=new ft(null.ci,g,null),g.i=f.f,g.j=f.i,f=f.j&63,g.e=f&12)))}function gN(a){this.a=a}w(751,1,el,gN);_.pd=function(){pz(this)};_.a=null;function FC(){dN();fN.call(this);this.a=new Tz}w(752,744,{},FC);_.Ef=Sv;_.a=null;function IC(){new ru;var a;a:{switch(Vu){case 1:case 3:case 5:case 7:a=new iN;break a}a=new jN}this.a=a}w(767,504,{},IC);_.a=null;\nfunction jN(){}w(769,1,{},jN);_.Zh=function(a){a&&a&&jq(8,new kN(a));return null};_.$h=function(a){jq(8,new lN(a))};function iN(){}w(768,769,{},iN);_.Zh=function(){return $wnd.clipboardData.getData(zf)};_.$h=function(a){$wnd.clipboardData.setData(zf,a)};function kN(a){this.a=a}w(772,1,Hl,kN);_.zd=LA;_.a=null;function lN(a){this.a=a}w(774,1,Hl,lN);_.zd=LA;_.a=null;function GC(){this.b=new JC;this.d=new kB}w(785,502,{},GC);function tG(a,b,c,d){b=rA(b);c+=b.a;d+=b.b;Zx(a.a,c,d);$x(a.a)}\nfunction rC(){dN();fN.call(this);var a=this.a=new mN;a.ab=!0;a.a.f=!0;this.a.db=!0}w(787,744,{},rC);_.Ef=Sv;_.a=null;function nD(){}w(795,531,{},nD);function kD(){kD=x;var a;a=(bD(),cD["os.encoding"]);if(null!=a)try{if(J("UTF-8",a))gK(m);else if(J("ISO-8859-1",a)||J("ISO-LATIN-1",a))C(hK,Il,-1,0,1);else throw new DJ(a+ka);}catch(b){if(b=pq(b),!H(b,105))throw b;}}function lC(a,b){a.a=31*a.a+Uu((new UJ(b)).a)}function qB(){}w(800,1,{},qB);_.hC=Sv;_.a=1;\nfunction mN(){var a=(gy(),jy);ay.call(this,!0,li);this.U=a.a;this.a=new nN(this);this.a.d=!0;Rx(this,this.a);this.ab=!0;this.a.f=!0;if(-1==this.lb){var a=this.pb,b=1|(this.pb.__eventBits||0);mw();Xw(a,b)}else this.lb|=1;Sq(Rq(this.pb))[Kg]=Fh;this.pb.style[Bk]="2147483647"}w(832,364,rl,mN);_.Yd=function(a){qx(this,a);1==Nw(a.type)&&Wx(this,!1)};_.a=null;\nfunction nN(a){this.b=a;this.c=new Bm;this.i=new Bm;a=(sz(),rz);new iA(a.d,a.b,a.c,a.e,a.a);var b;b=Tq(Tj);this.e=Tq(Wj);gw(b,this.e);this.o=!0;a=yy();b=(hw(),iw(b));a.appendChild(b);this.pb=a;Kn();this.pb.setAttribute("role",qo.a);-1==this.lb?(a=this.pb,b=2225|(this.pb.__eventBits||0),mw(),Xw(a,b)):this.lb|=2225;this.pb[Kg]=Eh;a=dx(this.pb)+"-vertical";$w(this.ee(),a,!0);this.pb.style[Ti]=dc;this.pb.setAttribute("hideFocus",pk);mx(this,new qz(this),(ys(),ys(),zs))}w(833,404,jl,nN);\n_.Yd=function(a){switch(Nw(a.type)){case 16:this.a=!1;break;case 32:this.a=!0}iz(this,a)};_.Ge=function(a,b){mz(this,a,b);b||this.a&&Wx(this.b,!1)};_.a=!0;_.b=null;w(881,1,{});\nfunction oN(a,b,c,d){var e,f,g,h,j,l;h=(!c?b.b:wD(b,c,~~Gp(c)))[0][d.length];b=j=e=null;for(c=0,f=!h?0:h.length;c\',Ca=\'">\',Ea="#",Ha="$",Ia="$$$$",Ka="$MOL\\n",La="$RXN",Pa="$RXN\\n\\n\\nJME Molecular Editor\\n",Qa="%",Ta="&",Va="&",Wa=">",$a="<",ab="\'",bb="(",gb=")",kb="*",lb="+",mb=",",ob=", ",qb=",modifiers=",rb="-",sb="-C#C-Me",vb="-C#CH",wb="-C#N",Ab="-C(=O)N",Bb="-C(=O)OH",Ib="-C(=O)OMe",\nKb="-CCl3",Lb="-CF3",Mb="-CMe3",Sb="-NC=O",Ub="-NH-SO2-Me",Vb="-NMe2",Wb="-NO2",Xb="-OC(=O)Me",Yb="-SO2-NH2",Zb="-SO3H",$b="-disabled",bc="-selected",ic=".",mc="...",nc="/",rc="//",sc="/>",yc="0",zc="0.0px",Fc="0px",Gc="1",Hc="100%",Jc="1px",Mc="2",Nc="3",Oc="4",Uc="5",Vc="6",Wc="7",ad="8",bd="9",fd=":",gd=": ",hd=";",pd="<",qd="<\/g>",rd="<\/svg>",zd="<\/text>",Ad=\'b?{}:new pl[b],_.cM=c);for(var e=3;e=a.u+a.n;if(a.q&&!d)return d=(b-a.u)/a.n,a.td((1+Math.cos(3.141592653589793+3.141592653589793*d))/2),a.p&&a.s==c;if(!a.q&&b>=a.u&&(a.q=!0,a.sd(),!(a.p&&a.s==c)))return!1;return d?(a.p=!1,a.q=!1,a.rd(),!1):!0}w(59,1,{});_.qd=function(){this.v&&this.rd()};\n_.rd=function(){this.td((1+Math.cos(6.283185307179586))/2)};_.sd=function(){this.td((1+Math.cos(3.141592653589793))/2)};_.n=-1;_.o=null;_.p=!1;_.q=!1;_.r=null;_.s=-1;_.t=null;_.u=-1;_.v=!1;function Gm(a,b){Hm(a.a,b)?a.a.r=a.a.t.vd(a.a.k,a.a.o):a.a.r=null}function Im(a){this.a=a}w(60,1,{},Im);_.ud=function(a){Gm(this,a)};_.a=null;w(61,1,{});w(62,1,fm);function Jm(){Jm=x;var a;(a=new Km)&&(a.xd()||(a=new Lm));Mm=a}w(63,61,{});var Mm=null;function Lm(){this.a=new Nm;this.b=new Om(this)}w(64,63,{},Lm);\n_.xd=function(){return!0};_.vd=function(a){a=new Pm(this,a);Qm(this.a,a);1==this.a.c&&Rm(this.b,16);return a};function Sm(){Sm=x;Tm=new Nm;var a=new Um;Vm();Wm(Xm?Xm:Xm=new Ym,a)}function Zm(a){a.b?$wnd.clearInterval(a.c):$wnd.clearTimeout(a.c);$m(Tm,a)}function Rm(a,b){if(0>b)throw new an("must be non-negative");a.b?$wnd.clearInterval(a.c):$wnd.clearTimeout(a.c);$m(Tm,a);a.b=!1;a.c=bn(a,b);Qm(Tm,a)}function bn(a,b){return $wnd.setTimeout(C(function(){a.yd()}),b)}w(66,1,{});\n_.yd=function(){this.b||$m(Tm,this);this.zd()};_.b=!1;_.c=0;var Tm;function Om(a){Sm();this.a=a}w(65,66,{},Om);_.zd=function(){var a=this.a,b,c,d,e,f;b=D(cn,u,14,a.a.c,0);b=dn(a.a,b);c=new en;for(e=0,f=b.length;eFm()-d.a;){e=!1;for(f=0;f=a.a.d)break a;b=d[e];c=new FileReader;du(c,a.a.b);1==a.a.c&&c.readAsText(b)}0==d.length&&(b=(this.a.dataTransfer||null).getData(ok),a.a.b.ag(b))};_.Kd=function(){return bu};var bu;function eu(){eu=x;fu=new yt(Th,new gu)}function gu(){}w(283,264,{},gu);\n_.Hd=function(a){var b,c;b=this.a.rotation;c=this.a.scale;a.a.e&&(0!=b&&a.a.b.b!=b&&(a.a.b.b=b,a.a.b.a=null,hu(a.a.e,a.a.b)&&this.a.preventDefault()),a.a.d=!0);a.a.f&&(1!=c&&a.a.b.c!=c&&(a.a.b.a=null,a.a.b.c=c,iu(a.a.f,a.a.b)&&this.a.preventDefault()),a.a.d=!0)};_.Kd=function(){return fu};var fu;function ju(){ju=x;ku=new yt(Uh,new lu)}function lu(){}w(284,264,{},lu);_.Hd=function(a){a.a.a&&(a.a.b.a=null,mu(a.a.a,a.a.b))};_.Kd=function(){return ku};var ku;function nu(){nu=x;ou=new yt(Vh,new pu)}\nfunction pu(){}w(285,264,{},pu);_.Hd=function(){this.a.preventDefault()};_.Kd=function(){return ou};var ou;w(287,264,{});w(286,287,{});function qu(){qu=x;ru=new yt(mi,new su)}function su(){}w(288,286,{},su);\n_.Hd=function(a){var b,c;c=this.a.keyCode||0;0<=c&&c<(tu(),uu).length&&-999!=(tu(),uu)[c]&&(c=(tu(),uu)[c]);b=new vu(null,c,null);if(this.a.ctrlKey||this.a.shiftKey||this.a.metaKey||this.a.altKey)this.a.ctrlKey&&(b.e|=2),this.a.altKey&&(b.e|=8),this.a.metaKey&&(b.e|=4),this.a.shiftKey&&(b.e|=1);a:{var a=a.a.c,d=c,e;a.Gb=!1;if(!a.J||a.K){wu(a,m);c=0;e=8==b.e;b=0!=(b.e&2);switch(d){case 99:case 67:b?xu($t(a,!0,!1)):c=301;break;case 118:case 86:b&&a.Tb&&(b=a.r,null==b.i&&(b.i="PASTE"),yu(a.E,(!a.Ub&&\n(a.Ub=new zu(a)),a.Ub)));break;case 110:case 78:c=401;break;case 111:case 79:c=501;break;case 115:case 83:c=601;break;case 112:case 80:c=1101;break;case 102:case 70:c=701;break;case 108:case 76:c=801;break;case 98:case 66:c=901;break;case 105:case 73:c=1001;break;case 120:case 88:a.Bc&&(wu(a,dr((Au(),Bu).Tc.a.pb,Ik)),c=1201,a.n=32);break;case 104:case 72:wu(a,Ve);c=1300;break;case 114:case 82:wu(a,"-R");c=1301;break;case 116:case 84:701==a.k?(c=236,wu(a,Lb)):801==a.k?(c=237,wu(a,Kb)):(c=233,wu(a,\n"-tBu"));break;case 121:case 89:b?c=111:(c=234,wu(a,Wb));break;case 122:case 90:b?c=110:(c=239,wu(a,Zb));break;case 97:case 65:c=235;wu(a,"-COOH");break;case 101:case 69:c=238;wu(a,vb);break;case 117:case 85:c=110;break;case 113:case 81:c=242;wu(a,wb);break;case 103:a=!0;break a;case 27:c=202;break;case 45:701==a.k?(c=254,wu(a,"-F")):801==a.k?(c=255,wu(a,"-Cl")):901==a.k?(c=256,wu(a,"-Br")):1001==a.k?(c=257,wu(a,"-I")):501==a.k?(c=259,wu(a,"-OH")):401==a.k?(c=258,wu(a,"-NH2")):c=202;break;case 43:c=\n108;break;case 35:c=204;break;case 48:105==a.k?Cu(a,0):e?(c=223,wu(a,"-3-Furyl")):(c=221,wu(a,"-Furyl"));break;case 49:105==a.k?Cu(a,1):c=209;break;case 50:case 61:50==d&&105==a.k?Cu(a,2):501==a.k?(c=250,wu(a,"=O")):c=203;break;case 51:105==a.k?Cu(a,3):c=206;break;case 52:105==a.k?Cu(a,4):c=207;break;case 53:105==a.k?Cu(a,5):c=208;break;case 54:105==a.k?Cu(a,6):c=210;break;case 55:105==a.k?Cu(a,7):c=211;break;case 56:105==a.k?Cu(a,8):c=212;break;case 57:105==a.k?Cu(a,9):(wu(a,"9 ring"),c=229);break;\ncase 100:case 68:case 8:case 127:c=104;break;case 32:c=205;break;case 109:case 77:case 1002:c=151;break;case 119:case 87:case 1003:c=152;break;case 1E3:c=153;break;case 1001:c=154}d=d+1-49;0<=d&&9>=d&&0=b&&(c=1301+d));Du(a,c)}a=!0}a&&this.a.preventDefault()};_.Kd=function(){return ru};var ru;function Eu(){Eu=x;Fu=new yt(Mi,new Gu)}function Gu(){}w(289,269,Jl,Gu);_.Hd=function(a){a.ld(this)};_.Kd=function(){return Fu};var Fu;\nfunction Hu(){Hu=x;Iu=new yt(Ni,new Ju)}function Ju(){}w(290,269,Jl,Ju);_.Hd=function(a){a.md(this)};_.Kd=function(){return Iu};var Iu;function Ku(){Ku=x;Lu=new yt(Oi,new Mu)}function Mu(){}w(291,269,Jl,Mu);_.Hd=function(a){a.nd(this)};_.Kd=function(){return Lu};var Lu;function Nu(){Nu=x;Ou=new yt(Pi,new Pu)}function Pu(){}w(292,269,Jl,Pu);_.Hd=function(a){var b;b=this.a;Tq((Qq(),Rq),new Qu(a,a.b,b))};_.Kd=function(){return Ou};var Ou;function Ru(){Ru=x;Su=new yt(Qi,new Tu)}function Tu(){}\nw(293,269,Jl,Tu);_.Hd=function(a){a.od(this)};_.Kd=function(){return Su};var Su;function Uu(){Uu=x;Vu=new yt(Ri,new Wu);new yt(Ie,new Wu)}function Wu(){}w(294,269,Jl,Wu);_.Hd=function(a){var b,c,d,e,f;b=Math.round(-this.a.wheelDelta/40)||0;b=new Xu(a.a.i,Ct(this),Dt(this),b);f=0;for(c=Yu(a.a.i.Pc,D(Zu,u,76,0,0)),d=0,e=c.length;da.qI&&(c.tM==x||c.cM&&c.cM[1])&&(!c.cM||!c.cM[-a.qI]))throw new lw;}return a[b]=c}w(324,1,{},ew);_.qI=0;function iw(){iw=x;jw=[];kw=[];var a=new ew,b=jw,c=kw,d=0,e,f;for(f in a)if(e=a[f])b[d]=f,c[d]=e,++d}var jw,kw;function G(a,b){return null!=a&&a.cM&&!!a.cM[b]}function Tp(a){return null!=a&&a.tM!=x&&!(a.cM&&a.cM[1])}function Wp(a){return a.tM==x||a.cM&&!!a.cM[1]}\nfunction mw(a){return null==a?null:a}function nw(a){return~~Math.max(Math.min(a,2147483647),-2147483648)}var ow=-1;\nfunction pw(){var a;$stats&&qw("com.google.gwt.useragent.client.UserAgentAsserter");a=navigator.userAgent.toLowerCase();if(-1!=a.indexOf(hj))a=hj;else if(-1!=a.indexOf("webkit"))a=Oj;else if(-1!=a.indexOf(Ti)&&9<=$doc.documentMode)a="ie9";else if(-1!=a.indexOf(Ti)&&8<=$doc.documentMode)a="ie8";else{var b;var c=/msie ([0-9]+)\\.([0-9]+)/.exec(a);c&&3==c.length&&(b=6E3<=1E3*parseInt(c[1])+parseInt(c[2]));a=b?"ie6":-1!=a.indexOf("gecko")?"gecko1_8":"unknown"}H(Oj,a)||$wnd.alert("ERROR: Possible problem with your *.gwt.xml module file.\\nThe compile time user.agent value (safari) does not match the runtime user.agent value ("+\na+"). Expect more errors.\\n");$stats&&qw("com.google.gwt.user.client.DocumentModeAsserter");b=$doc.compatMode;a=z(rw,u,1,[ve]);for(c=0;c>22&4194303,0>a?1048575:0)}\nfunction zw(a){return yw(a.l,a.m,a.h)}function yw(a,b,c){return _=new Aw,_.l=a,_.m=b,_.h=c,_}\nfunction Bw(a,b){var c,d,e,f,g;if(0==b.l&&0==b.m&&0==b.h)throw new Cw;if(0==a.l&&0==a.m&&0==a.h)return Dw=yw(0,0,0),yw(0,0,0);if(524288==b.h&&0==b.m&&0==b.l)return c=a,524288==c.h&&0==c.m&&0==c.l?(Dw=yw(0,0,0),c=zw((Ew(),Fw))):(Dw=yw(c.l,c.m,c.h),c=yw(0,0,0)),c;g=!1;0!=~~b.h>>19&&(b=Gw(b),g=!0);e=b.l;0!=(e&e-1)?f=-1:(d=b.m,0!=(d&d-1)?f=-1:(c=b.h,f=0!=(c&c-1)||0==c&&0==d&&0==e?-1:0==c&&0==d&&0!=e?Hw(e):0==c&&0!=d&&0==e?Hw(d)+22:0!=c&&0==d&&0==e?Hw(c)+44:-1));c=d=e=!1;if(524288==a.h&&0==a.m&&0==a.l)if(e=\nd=!0,-1==f)a=zw((Ew(),Iw)),c=!0,g=!g;else return c=Jw(a,f),g&&Kw(c),Dw=yw(0,0,0),c;else 0!=~~a.h>>19&&(e=!0,a=Gw(a),c=!0,g=!g);if(-1!=f){c=a;d=f;f=g;g=e;e=Jw(c,d);f&&Kw(e);var h;22>=d?(f=c.l&(1<=d?(f=c.l,h=c.m&(1<r?\nj=!1:(o=j.l-f.l,n=j.m-f.m+(~~o>>22),r+=~~n>>22,0>r?j=!1:(j.l=o&4194303,j.m=n&4194303,j.h=r&1048575,j=!0));if(j&&(22>l?h.l|=1<l?h.m|=1<>>1;f.m=~~j>>>1|(o&1)<<21;f.l=~~n>>>1|(j&1)<<21;--l}g&&Kw(h);e?(Dw=Gw(c),d&&(Dw=Ow(Dw,(Ew(),Fw)))):Dw=yw(c.l,c.m,c.h);return h}function Kw(a){var b,c,d;b=~a.l+1&4194303;c=~a.m+(0==b?1:0)&4194303;d=~a.h+(0==b&&0==c?1:0)&1048575;a.l=b;a.m=c;a.h=d}\nfunction Mw(a){var b;b=Pw(a.h);return 32==b?(b=Pw(a.m),32==b?Pw(a.l)+32:b+20-10):b-12}var Dw=null;function Qw(a,b){return a.l==b.l&&a.m==b.m&&a.h==b.h}function J(a){var b,c,d;if(isNaN(a))return Ew(),Rw;if(-9223372036854775E3>a)return Ew(),Sw;if(9223372036854775E3<=a)return Ew(),Iw;d=!1;0>a&&(d=!0,a=-a);c=0;17592186044416<=a&&(c=nw(a/17592186044416),a-=17592186044416*c);b=0;4194304<=a&&(b=nw(a/4194304),a-=4194304*b);a=nw(a);b=yw(a,b,c);d&&Kw(b);return b}\nfunction Tw(a){var b,c;return-129a?(b=a+128,null==Uw&&(Uw=D(Vw,u,31,256,0)),c=Uw[b],!c&&(c=Uw[b]=xw(a)),c):xw(a)}function Ww(a){var b=Tk,c,d;c=~~a.h>>19;d=~~b.h>>19;return 0==c?0!=d||a.h>b.h||a.h==b.h&&a.m>b.m||a.h==b.h&&a.m==b.m&&a.l>b.l:!(0==d||a.h>19;d=~~b.h>>19;return 0==c?0!=d||a.h>b.h||a.h==b.h&&a.m>b.m||a.h==b.h&&a.m==b.m&&a.l>=b.l:!(0==d||a.h>13|(a.m&15)<<9;e=~~a.m>>4&8191;f=~~a.m>>17|(a.h&255)<<5;g=~~(a.h&1048320)>>8;h=b.l&8191;j=~~b.l>>13|(b.m&15)<<9;l=~~b.m>>4&8191;o=~~b.m>>17|(b.h&255)<<5;n=~~(b.h&1048320)>>8;r=c*h;y=d*h;t=e*h;v=f*h;g*=h;0!=j&&(y+=c*j,t+=d*j,v+=e*j,g+=f*j);0!=l&&(t+=c*l,v+=d*l,g+=e*l);0!=o&&(v+=c*o,g+=d*o);0!=n&&(g+=c*n);c=(r&4194303)+((y&511)<<13);r=(~~r>>22)+(~~y>>9)+((t&262143)<<4)+((v&31)<<17)+(~~c>>22);t=(~~t>>18)+(~~v>>5)+((g&4095)<<8)+(~~r>>\n22);return yw(c&4194303,r&4194303,t&1048575)}function Gw(a){var b,c;b=~a.l+1&4194303;c=~a.m+(0==b?1:0)&4194303;return yw(b,c,~a.h+(0==b&&0==c?1:0)&1048575)}function Nw(a,b){var c,d,e,b=b&63;22>b?(c=a.l<>22-b,e=a.h<>22-b):44>b?(c=0,d=a.l<>44-b):(d=c=0,e=a.l<b?(e=~~c>>b,d=~~a.m>>b|c<<22-b,c=~~a.l>>b|a.m<<22-b):44>b?(e=d?1048575:0,d=~~c>>b-22,c=~~a.m>>b-22|c<<44-b):(e=d?1048575:0,d=d?4194303:0,c=~~c>>b-44);return yw(c&4194303,d&4194303,e&1048575)}function Ow(a,b){var c,d;c=a.l-b.l;d=a.m-b.m+(~~c>>22);return yw(c&4194303,d&4194303,a.h-b.h+(~~d>>22)&1048575)}function P(a){return a.l|a.m<<22}\nfunction Yw(a){var b,c,d;if(0==a.l&&0==a.m&&0==a.h)return yc;if(524288==a.h&&0==a.m&&0==a.l)return"-9223372036854775808";if(0!=~~a.h>>19)return rb+Yw(Gw(a));for(c=m;!(0==a.l&&0==a.m&&0==a.h);){b=Tw(1E9);a=Bw(a,b);b=m+P(Dw);if(!(0==a.l&&0==a.m&&0==a.h))for(d=9-b.length;0d||d>a.p.c)throw new Yy;b.ob==a&&(f=a.Ae(b),fd||d>=c.c)throw new Yy;for(--c.c;dg&&l.charAt(g)==rb&&0==l.indexOf(f)&&(e[h]=d+l.substring(g))}c.className=e.join(ea)}lz(this,this.T);qz(this);qy(hr(this.pb),qj,!1);qy(this.T.b,b+"Content",!0)}w(388,389,tl);_.se=function(){Hy(this.T)};_.te=function(){Ky(this.T)};_.He=function(){return this.T.jb};_.Ce=function(){return new nz(this.T)};_.ze=function(a){return this.T.ze(a)};_.Ie=function(a){lz(this.T,a);qz(this)};_.T=null;w(387,388,tl);_.we=Qy;\nfunction zz(){zz=x;Az=new Bz(0,(vz(),wz));Cz=new Bz(1,Dz);Ez=new Bz(2,Fz);Gz=z(Hz,u,38,[Az,Cz,Ez])}function Bz(a,b){this.b=a;this.a=b}w(391,198,{38:1,89:1,94:1,96:1},Bz);_.a=null;var Gz,Az,Cz,Ez;function Iz(){Iz=x;Jz=z(rw,u,1,[vk,Ki,Pg])}\nfunction yz(a){var b;Iz();var c,d;c=this.pb=$doc.createElement(gk);this.c=$doc.createElement(mk);vx(c,this.c);c[Tg]=0;for(c=c[Sg]=0;c";h=new fx(c.a.a);g.innerHTML=h.a||m;g=hr(g);a.kb&&(a.pb.__listener=\nnull);if(a.pb&&(h=a.pb,b=h.parentNode))b.insertBefore(g,h),b.removeChild(h);a.pb=g;a.kb&&(a.pb.__listener=a);-1==a.lb?(g=a.pb,a=133333119|(a.pb.__eventBits||0),Dx(),ny(g,a)):a.lb|=133333119}w(420,421,{},uA);_.a=0;_.b=0;_.c=0;_.d=null;_.e=0;function vA(a,b){this.a=a;this.b=b}w(422,1,{},vA);_.pd=function(){var a,b;this.b.a!=this.a||this!=this.a.f||(this.a.f=null,this.b.kb?(a=(b=$doc.createEvent("HTMLEvents"),b.initEvent(vi,!1,!1),b),this.b.pb.dispatchEvent(a)):this.b.pb.__gwtLastUnhandledEvent=vi)};\n_.a=null;_.b=null;w(424,353,$l);function BA(a){this.a=a}w(426,424,$l,BA);_.Wd=function(a){this.a.Oe(a.f,a.a)};function CA(a,b,c){var d;if(a.o){var e=d=$doc.createElement(Bk);ly(a.e,(wx(),xx(e)),b);a=(wx(),xx(c));d.appendChild(a)}else d=cy(a.e,0),ly(d,(wx(),xx(c)),b)}\nfunction DA(a,b,c){var d;b.b&&(EA(a,b),c&&b.a?(EA(a,null),a=b.a,b=(Qq(),Rq),b.c=Uq(b.c,[new FA(a),!1])):null!=b.d&&(a.j=new GA(a,b),c=(vz(),Dz),a.j.U=c,a.j.ab=a.f,c=ai,a.j.me()[Yg]=c,d=vy(a.pb),H($h,d)||py(a.j,d+"Popup"),Gy(a.j,new BA(a),Xm?Xm:Xm=new Ym),a.n=b.d,d=a.j,a=new HA(a,b),d.pb.style[Kk]=ei,sz(d),bw(),a.a.o?rz(a.a.j,kr(a.a.pb)+cr(a.a.pb,fj)-1,mr(a.b.pb)):rz(a.a.j,kr(a.b.pb),mr(a.a.pb)+cr(a.a.pb,ej)-1),d.pb.style[Kk]=Lk))}\nfunction IA(a,b){!b&&a.k&&a.n==a.k.d||b&&!b.b||(EA(a,b),JA((Yz(),a.pb)),b&&a.d&&DA(a,b,!1))}\nfunction KA(a,b){var c;a:{c=nr(b);var d,e;for(e=new Jv(a.i);e.bc&&(c=a.i.c-1),c==b){d=Nx(a.i,b);break}else if(d=Nx(a.i,c),d.b)break;EA(a,d)}}w(427,385,xl);_.ee=function(a){KA(this,a)};_.we=function(){this.j&&oz(this.j,!1);Ky(this)};_.Oe=function(a,b){OA(this,a,b)};_.d=!1;_.e=null;_.f=!1;_.j=null;_.k=null;_.n=null;_.o=!1;function FA(a){this.a=a}\nw(428,1,{},FA);_.pd=function(){RA(this.a)};_.a=null;function SA(a){this.a=a}w(429,1,{},SA);_.Ld=function(){EA(this.a,null)};_.a=null;function GA(a,b){this.a=a;this.b=b;tz.call(this,!0,Fi);lz(this.T,this.b.d);qz(this);this.fb=!0;this.b.d.ji()}w(430,388,tl,GA);_.ae=function(a){var b,c;if(!a.a)switch(Bx(a.d.type)){case 4:c=nr(a.d);b=this.b.c.pb;if(b.contains(c)){a.a=!0;break}a.a&&EA(this.a,null)}};_.a=null;_.b=null;function HA(a,b){this.a=a;this.b=b}w(431,1,{},HA);_.a=null;var TA=_.b=null;\nfunction UA(){UA=x;TA=new $w((qx(),new px((bw(),"data:image/gif;base64,R0lGODlhBQAJAIAAAAAAAAAAACH5BAEAAAEALAAAAAAFAAkAAAIMRB5gp9v2YlJsJRQKADs="))),5,9)}function VA(a,b){if(b){var c=vy(a.pb)+$b;qy(a.me(),c,!1)}else c=vy(a.pb)+$b,qy(a.me(),c,!0);a.b=b}function WA(a,b){this.pb=$doc.createElement(nk);var c=vy(this.pb)+bc;qy(this.me(),c,!1);this.pb.textContent=a||m;this.pb[Yg]="gwt-MenuItem";c=or();this.pb.setAttribute(gi,c);fo();this.pb.setAttribute(Gj,Mo.a);this.a=b}w(434,386,{42:1,46:1,49:1},WA);\n_.a=null;_.b=!0;_.c=null;_.d=null;function XA(){var a;this.pb=$doc.createElement(nk);this.pb[Yg]="gwt-MenuItemSeparator";a=$doc.createElement(th);vx(this.pb,a);a[Yg]="menuSeparatorInner"}w(435,386,Hl,XA);function YA(){var a,b,c,d,e;b=null.ji();e=qr();d=pr();b[sh]=(ds(),Zi);b[Nk]=0+(zs(),uj);b[di]=Fc;c=$doc;c=(H(c.compatMode,ve)?c.documentElement:c.body).scrollWidth||0;a=$doc;a=(H(a.compatMode,ve)?a.documentElement:a.body).scrollHeight||0;b[Nk]=(c>e?c:e)+uj;b[di]=(a>d?a:d)+uj;b[sh]="block"}\nfunction uz(){}w(436,1,{},uz);_.Yd=function(){YA()};function ZA(a){this.a=a}w(437,1,{},ZA);\n_.ae=function(a){var b=this.a,c,d;if(a.a||!b.fb&&a.b)b.db&&(a.a=!0);else if(b.ae(a),!a.a){d=a.d;c=nr(d);var e;try{e=!!c&&!!c.nodeType}catch(f){e=!1}(c=e&&c&&1==c.nodeType?b.pb.contains(c):!1)&&(a.b=!0);b.db&&(a.a=!0);switch(Bx(d.type)){case 4:case 1048576:if(Ax){a.b=!0;break}if(!c&&b.V){b.Ke(!0);break}break;case 8:case 64:case 1:case 2:case 4194304:if(Ax){a.b=!0;break}break;case 2048:d=nr(d),b.db&&!c&&d&&(d.blur&&d!=$doc.body&&d.blur(),a.a=!0)}}};_.a=null;function $A(a){this.a=a}w(438,1,{},$A);\n_.a=null;function vz(){vz=x;wz=new aB(0);Dz=new aB(1);Fz=new aB(2);bB=z(cB,u,47,[wz,Dz,Fz])}function aB(a){this.b=a}w(439,198,{47:1,89:1,94:1,96:1},aB);var bB,wz,Dz,Fz;function dB(a){a.j?a.a.bb&&($doc.body.appendChild(a.a.Z),a.f=Qx(a.a.$),YA(),a.b=!0):a.b&&($doc.body.removeChild(a.a.Z),eB(a.f.a),a.f=null,a.b=!1)}function fB(a){a.j||(dB(a),a.c||(My(),dz(gB(null),a.a)));a.a.pb.style[ah]="rect(auto, auto, auto, auto)";a.a.pb.style[lj]=Lk}\nfunction hB(a,b){var c,d,e,f,g,h;a.j||(b=1-b);c=f=e=g=0;d=nw(b*a.d);h=nw(b*a.e);switch(a.a.U.b){case 2:f=a.e;c=d;break;case 0:g=~~(a.d-d)>>1;e=~~(a.e-h)>>1;f=e+h;c=g+d;break;case 1:bw(),f=h,c=d}a.a.pb.style[ah]="rect("+g+wj+f+wj+c+wj+e+"px)"}\nfunction pz(a,b,c){a.c=c;Dm(a);a.i&&(Zm(a.i),a.i=null,fB(a));a.a.hb=b;var d=a.a;d.eb&&(eB(d.eb.a),d.eb=null);d._&&(eB(d._.a),d._=null);if(d.hb){d.eb=Cx(new ZA(d));var e;e=new $A(d);Jx();e=Kx?xv(Kx.a,(!wv&&(wv=new Ym),wv),e):null;d._=e}c=!c&&a.a.ab;a.a.U!=(vz(),wz)&&!b&&(c=!1);a.j=b;c?b?(dB(a),a.a.pb.style[rj]=hg,-1!=a.a.ib&&a.a.Le(a.a.cb,a.a.ib),a.a.pb.style[ah]=Bj,My(),b=gB(null),Vy(b,a.a,b.pb),a.i=new iB(a),Rm(a.i,1)):Em(a,200):(dB(a),a.j?(a.a.pb.style[rj]=hg,-1!=a.a.ib&&a.a.Le(a.a.cb,a.a.ib),My(),\nb=gB(null),Vy(b,a.a,b.pb)):a.c||(My(),dz(gB(null),a.a)),a.a.pb.style[lj]=Lk)}function xz(a){var b=(Jm(),Mm);this.k=new Im(this);this.t=b;this.a=a}w(440,59,{},xz);_.rd=function(){fB(this)};_.sd=function(){this.d=cr(this.a.pb,ej);this.e=cr(this.a.pb,fj);this.a.pb.style[lj]=ei;hB(this,(1+Math.cos(3.141592653589793))/2)};_.td=function(a){hB(this,a)};_.a=null;_.b=!1;_.c=!1;_.d=0;_.e=-1;_.f=null;_.i=null;_.j=!1;function iB(a){Sm();this.a=a}w(441,66,{},iB);_.zd=function(){this.a.i=null;Em(this.a,200)};\n_.a=null;function wx(){wx=x;jB()}function xx(a){return a.__gwt_resolve?a.__gwt_resolve():a}function jB(){function a(){}a.prototype={className:m,clientHeight:0,clientWidth:0,dir:m,getAttribute:function(a){return this[a]},href:m,id:m,lang:m,nodeType:1,removeAttribute:function(a){this[a]=void 0},setAttribute:function(a,c){this[a]=c},src:m,style:{},title:m};$wnd.GwtPotentialElementShim=a}function My(){My=x;kB=new lB;mB=new Ip;Ny=new Gv}function nB(a){this.p=new iz(this);this.pb=a;Hy(this)}\nfunction gB(a){My();var b,c;c=Uv(mB,a);b=null;if(null!=a&&!(b=$doc.getElementById(a)))return null;if(c&&(!b||c.pb==b))return c;if(0==mB.d){var d=new oB;Vm();Wm(Xm?Xm:Xm=new Ym,d);bw()}!b?c=new pB:c=new nB(b);E(mB,a,c);Hv(Ny,c);return c}w(443,382,tl,nB);var kB,mB,Ny;function lB(){}w(444,1,{},lB);_.Ne=function(a){a.ue()&&a.we()};function oB(){}w(445,1,{},oB);_.Wd=function(){My();try{Ry(Ny,kB)}finally{qB(Ny.a),qB(mB)}};function pB(){nB.call(this,$doc.body)}w(446,443,tl,pB);\n_.Fe=function(a,b,c){gz(a,b-0,c-0)};function nz(a){this.c=a;this.a=!!this.c.jb}w(447,1,{},nz);_.be=gx;_.ce=function(){if(!this.a||!this.c.jb)throw new az;this.a=!1;return this.b=this.c.jb};_.de=function(){this.b&&this.c.ze(this.b)};_.b=null;_.c=null;function rB(a,b){a.pb[Ik]=null!=b?b:m}w(450,400,xl);_.ee=function(a){0!=(Bx(a.type)&896)?Jy(this,a):Jy(this,a)};_.xe=Py;function sB(){sB=x;Pz();tB()}function uB(a){!ux&&(ux=new tx);!sx&&(sx=new rx);Pz();this.pb=a;bw()}w(449,450,xl);\nfunction vB(){sB();var a=gr(ok);uB.call(this,a);this.pb[Yg]="gwt-TextBox"}w(451,449,xl,vB);function tB(){tB=x;wB=new xB;yB=new zB;AB=new BB;CB=new DB;EB=z(FB,u,50,[wB,yB,AB,CB])}w(452,198,Wl);var EB,wB,yB,AB,CB;function xB(){this.b=0}w(453,452,Wl,xB);function zB(){this.b=1}w(454,452,Wl,zB);function BB(){this.b=2}w(455,452,Wl,BB);function DB(){this.b=3}w(456,452,Wl,DB);function $y(a,b){var c;for(c=0;cc||c>a.c)throw new Yy;if(a.c==a.a.length){e=D(GB,u,51,2*a.a.length,0);for(d=0;dc;--d)yq(a.a,d,a.a[d-1]);yq(a.a,c,b)}function iz(a){this.b=a;this.a=D(GB,u,51,4,0)}w(458,1,{},iz);_.Ce=function(){return new bz(this)};_.a=null;_.b=null;_.c=0;function HB(a){if(a.a>=a.b.c)throw new az;return a.b.a[++a.a]}function IB(a){if(0>a.a||a.a>=a.b.c)throw new JB;a.b.b.ze(a.b.a[a.a--])}function bz(a){this.b=a}w(459,1,{},bz);\n_.be=function(){return this.aa)throw new an("Missing message: awt.133");this.e=a;this.a=2;this.c=0;this.d=10;this.b=0}w(485,1,{56:1},XC);\n_.eQ=function(a){return a===this?!0:G(a,56)?a.e==this.e&&a.a==this.a&&a.c==this.c&&a.d==this.d&&a.b==this.b:!1};_.hC=function(){var a;a=new YC;a.a=31*a.a+nw((new ZC(this.e)).a);a.a=31*a.a+this.a;a.a=31*a.a+this.c;a.a=31*a.a+nw((new ZC(this.d)).a);return a.a};_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;\nfunction $C(){$C=x;aD=bD=new sm(255,255,255);cD=new sm(192,192,192);dD=new sm(128,128,128);eD=new sm(64,64,64);fD=gD=new sm(0,0,0);hD=iD=new sm(255,0,0);new sm(255,175,175);jD=new sm(255,200,0);kD=new sm(255,255,0);new sm(0,255,0);lD=new sm(255,0,255);mD=new sm(0,255,255);nD=oD=new sm(0,0,255)}\nfunction pD(a){var b,c;c=~~a.d>>16&255;b=a.d&255;a=~~a.d>>8&255;if(0==c&&0==b&&0==a)return new sm(3,3,3);3>c&&0!=c?c=3:(c=nw(c/0.7),c=255b&&0!=b?b=3:(b=nw(b/0.7),b=255a&&0!=a?a=3:(a=nw(a/0.7),a=255>16&255)),nw(0.7*(~~a.d>>8&255)),nw(0.7*(a.d&255)))}function rD(a,b){return G(b,59)?b.d==a.d:!1}function sm(a,b,c){$C();if((a&255)!=a||(b&255)!=b||(c&255)!=c)throw new an(Ce);this.d=c|b<<8|a<<16|-16777216}\nw(491,1,{59:1,68:1,71:1},sm);_.eQ=function(a){return rD(this,a)};_.hC=sD;_.tS=function(){return tD.d+"[r="+(~~this.d>>16&255)+",g="+(~~this.d>>8&255)+",b="+(this.d&255)+dg};_.a=0;_.b=null;_.c=null;_.d=0;var fD,nD,hD,aD,gD,oD,mD,eD,dD,cD,lD,jD,iD,bD,kD;function nC(){nC=x;oC=new uD(!0);vD=new Gv;Hv(vD,"ar");Hv(vD,"fa");Hv(vD,"iw");Hv(vD,"ur")}function uD(a){this.a=a}w(492,1,Xl,uD);_.a=!1;var oC,vD;w(496,1,{77:1,93:1});function wD(){eC.call(this,0,0)}function eC(a,b){this.b=a;this.a=b}\nfunction gC(a){eC.call(this,a.b,a.a)}w(495,496,{62:1,77:1,89:1,93:1},wD,eC,gC);_.eQ=function(a){return a===this?!0:G(a,62)?a.b==this.b&&a.a==this.a:!1};_.hC=function(){var a;a=new YC;a.a=31*a.a+this.b;a.a=31*a.a+this.a;return a.a};_.tS=function(){return xD.d+"[width="+this.b+",height="+this.a+dg};_.a=0;_.b=0;function vu(a,b,c){this.f=a;this.c=b;this.e=this.d=this.j=this.i=0;this.b=c}w(497,1,Xl,vu,function(a,b,c,d){this.f=a;this.c=b;this.j=this.i=0;this.d=c;this.e=d;this.b=null});\n_.yf=function(){return 0!=(this.e&4)};_.zf=function(){return 0!=(this.e&1)};_.tS=function(){var a;return this.cZ.d+"[id="+this.c+",x="+this.i+",y="+this.j+(0!=this.d?",key="+this.d+(a=m,this.zf()&&(a+=",shift"),0!=(this.e&2)&&(a+=",control"),this.yf()&&(a+=",meta"),a):m)+",target="+this.f+(null!=this.b?",arg="+this.b:m)+dg};_.b=null;_.c=0;_.d=0;_.e=0;_.f=null;_.i=0;_.j=0;function yD(a){var b,c;for(c=b=0;cb.b&&(zD(this,l,b.b-(o-this.c),g.b,n,j,h),l.vg(),o=f,n+=j+this.d,j=0),e=!1,yq(l.b,l.c++,c),o+=a.b+this.c,j=fn(j,a.a);zD(this,l,b.b-(o-this.c),g.b,n,\nj,h)}};_.vf=function(a){this.b=ED(a.Fc);return 0==yD(this)?vC(a,new eC(10,10)):vC(a,BD(this,!1))};_.wf=function(a){this.b=ED(a.Fc);return 0==yD(this)?vC(a,new eC(10,10)):vC(a,BD(this,!0))};_.xf=sC;_.tS=function(){var a;switch(this.a){case 0:a=pi;break;case 2:a=Fj;break;case 1:a=Ug;break;case 4:a="trailing";break;default:a="leading"}return HD.d+"[hgap="+this.c+",vgap="+this.d+",align="+a+dg};_.a=0;_.b=null;_.c=0;_.d=0;function ID(){ID=x;JD=new KD(Le,0,12)}\nfunction KD(a,b,c){ID();this.a=null!=a?a:"Default";this.b=0<=c?c:0;this.c=0==(b&-4)?b:0}w(499,1,{63:1,89:1},KD);_.a=null;_.b=0;_.c=0;var JD;w(500,1,jm);_.tS=function(){return LD.d+"[font="+this.b+"ascent="+MD(this.b).a+", descent="+MD(this.b).b+", height="+MD(this.b).c+dg};_.b=null;w(502,1,{});_.tS=function(){return"Graphics"};w(503,502,{});function JB(){}function Iy(a){this.f=a}w(506,139,lm,JB,Iy);function aC(){this.f="Missing message: awt.151"}w(505,506,lm,aC);w(507,1,{});\nfunction qC(a,b,c,d){this.d=a;this.b=b;this.a=c;this.c=d}w(508,1,{65:1,89:1,93:1},qC);_.eQ=function(a){return a===this?!0:G(a,65)?a.b==this.b&&a.a==this.a&&a.c==this.c&&a.d==this.d:!1};_.hC=function(){var a;a=31+this.d;a=31*a+this.b;a=31*a+this.a;return a=31*a+this.c};_.tS=function(){return ND.d+"[left="+this.b+",top="+this.d+",right="+this.c+",bottom="+this.a+dg};_.a=0;_.b=0;_.c=0;_.d=0;w(512,1,Xl);_.hf=function(){return this.j};_.tS=uC;_.j=null;_.k=null;\nfunction OD(a){var b;b=a.j+",label="+a.f;a.e||(b+=",disabled");null!=a.c&&(b+=",command="+a.c);return b}function PD(a,b){a.e=b;VA(a.i.a,b)}function QD(a){this.n=(kC(),kC(),lC);var b;var c;b=this.cZ.d;-1!=wy(b,xy(36))?b=null:(c=this.n.b.d++,b=zy(b,VB(b,xy(46))+1)+m+c);this.j=b;this.d=new VC;this.f=a;this.e=!0;this.i=new RD(this)}w(511,512,Xl,QD);_.hf=function(){return OD(this)};_.c=null;_.e=!1;_.f=null;_.i=null;w(510,511,Zl);_.hf=function(){return OD(this)+(this.b?",tearOff":m)};_.b=!1;w(514,1,{78:1});\n_.eQ=function(a){return a===this?!0:G(a,78)?this.Af()==a.Af()&&this.Bf()==a.Bf():!1};_.hC=function(){var a;a=new YC;SD(a,this.Af());SD(a,this.Bf());return a.a};function $B(){this.b=this.a=0}function TD(a,b){this.a=a;this.b=b}w(513,514,{69:1,78:1,89:1},$B,TD);_.eQ=function(a){return a===this?!0:G(a,69)?this.a==a.a&&this.b==a.b:!1};_.Af=gx;_.Bf=Lz;_.tS=function(){return UD.d+"[x="+this.a+",y="+this.b+dg};_.a=0;_.b=0;\nfunction VD(a,b){if(!b)throw new yv("Missing message: awt.70");var c=a.a;if(H(b.f,rb)){var c=c.a.a,d=new XA,e=c.c.c;if(0>e||e>c.c.c)throw new Yy;c.o&&(d.pb[ch]=2);CA(c,e,d.pb);WD(c.c,e,d)}else{var d=c.a.a,c=b.i.a,e=d.c.c,f,g;if(0>e||e>d.c.c)throw new Yy;WD(d.c,e,c);for(f=g=0;fb?0:b;jE(this.Tc,a)}w(524,523,Fl,hE,iE);_.Se=function(){return"textfield"+this.Vc.b.f++};_.Ue=function(){return fE(this,dr(this.Tc.a.pb,Ik).length)};_.Ve=function(){return!WB(this)?null:fE(this,dr(this.Tc.a.pb,Ik).length)};_.Xe=kE;_.Ze=lE;_.bf=function(){this.Tc=(kC(),new mE)};_.ff=kE;_.jf=lE;_.a=0;function kC(){kC=x;lC=new nE}function oE(){var a=(kC(),kC(),lC);!a.c&&(a.c=new rE);return a.c}w(525,1,{});_.a=null;\n_.c=null;var lC;function sE(){}w(526,1,{},sE);_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;_.f=0;w(527,1,{});function tE(){tE=x;uE=new vE;wE=new vE}function xE(a,b){return b==a?!0:!b?!1:!0}function vE(){}w(528,1,{73:1},vE);_.eQ=function(a){return null==a||!G(a,73)?!1:xE(this,a)};_.hC=function(){var a;a=null.ji()+";class="+null.ji();a=!null.ji().ji()?a:a+";charset=";return yE(a)};_.tS=function(){return zE.d+"[MimeType=(null);humanPresentableName="+this.a+dg};_.a=null;var uE,wE;\nfunction AE(){AE=x;z(BE,u,73,[(tE(),wE),uE])}function CE(a){var b=(tE(),wE);if(xE(b,(tE(),wE)))return a.a;if(xE(b,uE))return new DE(a.a);throw new EE(b);}function FE(a){AE();this.a=a}w(529,1,{},FE);_.a=null;function EE(a){this.f="flavor = "+a}w(530,140,{74:1,89:1,97:1,106:1},EE);function GE(a,b,c){OC();HE.call(this,a,b,c,Tk)}function HE(a,b,c,d){OC();MC.call(this,a);this.k=b;this.a=c;this.c=d;this.b=0}w(531,478,Xl,GE,HE);\n_.hf=function(){var a,b;a=1001==this.k?"ACTION_PERFORMED":Hk;b=m;0<(this.b&1)&&(b+="Shift");0<(this.b&2)&&(b+=0==b.length?"Ctrl":"+Ctrl");0<(this.b&4)&&(b+=0==b.length?"Meta":"+Meta");0<(this.b&8)&&(b+=0==b.length?"Alt":"+Alt");return a+",cmd="+this.a+",when="+Yw(this.c)+qb+b};_.a=null;_.b=0;_.c=Tk;function iC(a,b){OC();MC.call(this,a);this.k=b}w(532,478,Xl,iC);\n_.hf=function(){var a,b;a=this.n;switch(this.k){case 100:b="COMPONENT_MOVED";break;case 101:b="COMPONENT_RESIZED";break;case 102:return"COMPONENT_SHOWN";case 103:return"COMPONENT_HIDDEN";default:return Hk}return b+" ("+a._e()+mb+a.af()+ea+a.$e()+Ok+a.We()+gb};w(535,532,Xl);_.j=0;\nfunction IE(a){var b;switch(a.k){case 503:b="MOUSE_MOVED";break;case 500:b="MOUSE_CLICKED";break;case 501:b="MOUSE_PRESSED";break;case 502:b="MOUSE_RELEASED";break;case 506:b="MOUSE_DRAGGED";break;case 504:b="MOUSE_ENTERED";break;case 505:b="MOUSE_EXITED";break;case 507:b="MOUSE_WHEEL";break;default:b=Hk}b=b+",("+a.f+mb+a.i+"),button="+a.d;if(0<(a.j&16320)){var c=qb,d;d=a.j;var e;e=new cx;0!=(d&4)&&Lp(Lp(e,(kC(),null)),lb);0!=(d&1)&&Lp(Lp(e,(kC(),null)),lb);0!=(d&2)&&Lp(Lp(e,(kC(),null)),lb);0!=(d&\n8)&&(0!=(d&2048)?0!=(d&512)&&Lp(Lp(e,(kC(),null)),lb):Lp(Lp(e,(kC(),null)),lb));0!=(d&32)&&Lp(Lp(e,(kC(),null)),lb);0!=(d&16)&&Lp(Lp(e,(kC(),null)),lb);0!=(d&8)&&Lp(Lp(e,(kC(),null)),lb);0!=(d&4)&&Lp(Lp(e,(kC(),null)),lb);d=0==e.a.a.length?e.a.a:JE(e.a.a,0,e.a.a.length-1);c=c+d+",extModifiers=";d=a.j;var f;e=(f=m,0!=(d&256)&&(f+=(kC(),null)),0!=(d&128)&&(f+=(0=this.k?0!=(this.j&16)?(this.d=1,501==this.k&&(this.j|=1024)):0!=(this.j&8)?(this.d=2,501==this.k&&(this.j|=2048)):0!=(this.j&4)&&(this.d=3,501==this.k&&(this.j|=4096)):(0!=(this.j&16)&&(this.j|=1024),0!=(this.j&8)&&(this.j|=\n2048),0!=(this.j&4)&&(this.j|=4096));else if(0!=(this.j&16320))if(this.j&=-64,0!=(this.j&64)&&(this.j|=1),0!=(this.j&128)&&(this.j|=2),0!=(this.j&256)&&(this.j|=4),0!=(this.j&512)&&(this.j|=8),0!=(this.j&8192)&&(this.j|=32),500<=this.k&&502>=this.k)switch(this.d){case 1:this.j|=16;break;case 2:this.j|=8;break;case 3:this.j|=4}else 0!=(this.j&1024)&&(this.j|=16),0!=(this.j&2048)&&(this.j|=8),0!=(this.j&4096)&&(this.j|=4);this.b=0;this.a=1;this.c=d}w(538,537,Xl,Xu);\n_.hf=function(){var a,b;a=IE(this);switch(this.b){case 0:b="WHEEL_UNIT_SCROLL";break;case 1:b="WHEEL_BLOCK_SCROLL";break;default:b=Hk}return a+=",scrollType="+b+",scrollAmount="+this.a+",wheelRotation="+this.c};_.a=0;_.b=0;_.c=0;w(547,1,{});function DE(a){if(null==a)throw new KE;}w(548,547,{},DE);\nfunction LE(){LE=x;ME={};ME["java.vendor"]=Wh;ME["package.restrict.access.sun"]=Fk;ME["sun.java.launcher"]=vf;ME["sun.management.compiler"]=Wh;ME["os.name"]=vf;ME[" sun.boot.class.path"]=vf;ME["path.separator.applet"]=vf;ME["java.vm.specification.vendor"]=Wh;ME["java.runtime.version"]=vf;ME["http.proxyPort"]=vf;ME["user.name"]=vf;ME["user.language"]=vf;ME["os.name.applet"]=vf;ME["browser.version"]=vf;ME["java.version"]=vf;ME["user.timezone"]=vf;ME["java.endorsed.dirs"]=vf;ME["java.specification.name"]=\n"GWT";ME["java.specification.version"]="2.5.0";ME[ki]=bf;!$u&&($u=new hv);$u.a?ME[ii]="yes":ME[ii]=null}var ME;w(552,140,Ql);function NE(){}function OE(a){this.f=a}w(551,552,{83:1,89:1,97:1,106:1},NE,OE);function PE(){PE=x;QE=new RE}function SE(a){var b;if(a.k){var c;b=new cx;Lp(b,a.f);b.a.a+=fd;c=a.a;null!=c&&0=b||65<=b&&90>=b;for(c=1;b&&c=b||65<=b&&90>=b||48<=b&&57>=b||43==b||45==b||46==b;if(b){c=this.f;UE();var f,g,h;h=c.length;b=new VE;for(g=0;g=f?WE(b,f+32&65535):Mp(b.a,String.fromCharCode(f));\nthis.f=b.a.a}else this.f=null,d=-1}if(null==this.f)throw new OE(Ze+a);if(!this.k&&(this.k=Uv(QE,this.f),this.k||(this.k=(kC(),new XE))&&E(QE,this.f,this.k),!this.k))throw new OE(Ze+a);try{c=a;var j=++d,l=a.length,o,n,r,t,y,v,s,A,F,M,N,$,V,W,ca,ja,ra,ac,K,oa,Ac;if(ll){if(-2147483647>=l&&(j>=c.length||0>j)||!(0>j||j>=c.length)&&c.indexOf(rc,j)==j&&-1==YE(c,xy(47),j+2))throw new ZE(l);}else{N=c.substr(j,l-j);l-=j;v=0;s=this.c;$=this.e;ac=this.j;t=this.d;ca=this.i;o=this.a;Ac=this.n;K=YE(N,xy(35),\n0);if(0==N.indexOf(rc)&&0!=N.indexOf("////")){F=2;$=-1;v=YE(N,xy(47),2);ra=YE(N,xy(63),2);-1!=ra&&(-1==v||v>ra)&&(v=ra);-1==v&&(v=l,t=m);A=v;-1!=K&&Kr+1?(n=N.charCodeAt(r+1),58==n?V=r+1:V=-1):V=-1}catch(tb){if(tb=Iq(tb),!G(tb,97))throw tb;}-1==V||V>v?s=N.substr(F,A-F):(s=N.substr(F,V-F),W=N.substr(V+1,A-(V+1)),0==W.length?$=-1:$=$E(W,\n10))}-1v&&(null==t?t=m:H(t,m)?t=nc:t.indexOf(nc),M=VB(t,xy(47))+1,0==M?t=N.substr(v,y-v):t=t.substr(0,M-0)+N.substr(v,y-v)));null==t&&(t=m);null==s&&(s=m);d=s;var Fa;Fa=t;null!=ca&&!H(ca,m)&&(null!=t?Fa=t+Md+ca:Fa=Md+ca);null==this.f&&(this.f=\nthis.f);this.c=d;this.b=Fa;this.e=$;this.j=ac;var ub;null!=this.c&&0this.e)throw new OE("incorrect port: "+\nthis.e);}w(553,1,Xl,TE);_.tS=function(){return SE(this)};_.a=null;_.b=null;_.c=null;_.d=null;_.e=-1;_.f=null;_.i=null;_.j=null;_.k=null;_.n=null;var QE;w(554,1,{});function aF(a,b,c){var d,e;for(d=a.Tf().Ce();d.be();)if(a=d.ce(),e=a.Ch(),null==b?null==e:Vp(b,e))return c&&(a=new bF(a.Ch(),a.Dh()),d.de()),a;return null}w(558,1,Vl);_.Sf=function(a){return!!aF(this,a,!1)};\n_.eQ=function(a){var b,c;if(a===this)return!0;if(!G(a,109)||this.Yf()!=a.Yf())return!1;for(a=a.Tf().Ce();a.be();)if(b=a.ce(),c=b.Ch(),b=b.Dh(),!this.Sf(c)||!cF(b,this.Uf(c)))return!1;return!0};_.Uf=function(a){a=aF(this,a,!1);return!a?null:a.Dh()};_.hC=function(){var a,b,c;c=0;for(b=this.Tf().Ce();b.be();)a=b.ce(),c+=a.hC(),c=~~c;return c};_.Vf=dF;_.Wf=function(){throw new eF("Put not supported on this map");};_.Xf=function(a){a=aF(this,a,!0);return!a?null:a.Dh()};_.Yf=function(){return this.Tf().Yf()};\n_.tS=function(){var a,b,c,d;d=Qk;a=!1;for(c=this.Tf().Ce();c.be();)b=c.ce(),a?d+=ob:a=!0,d+=m+b.Ch(),d+=Id,d+=m+b.Dh();return d+"}"};function qB(a){a.a=[];a.e={};a.c=!1;a.b=null;a.d=0}function fy(a,b){var c;if(null==b)c=a.c;else if(G(b,1))c=fd+b in a.e;else a:{c=a._f(b);if(c=a.a[c])for(var d=0,e=c.length;d=a.i)break;c=nF(a,c);++b}return b}\nfunction oF(a,b){var c;for(c=0;c=a.i)throw new kF;b=a.a;a.a=nF(a,a.a);return JE(a.n,b,a.a)}\nfunction nF(a,b){var c,d;for(d=b;da.f||!oF(a,c))break;d+=65536<=c?2:1}else{c=a.n.charCodeAt(d);if(c>a.f||0>wy(a.c,xy(c)))break;++d}return d}function rF(a){sF.call(this,a,fa,!1)}function tF(a){sF.call(this,a,mb,!1)}\nfunction sF(a,b,c){this.a=0;this.j=-1;this.d=!1;this.n=a;this.i=a.length;this.c=b;this.k=c;var d;if(null==this.c)this.f=0;else{for(c=b=d=0;c=a&&(a=qF(this.c,c,this.c.length),this.e=!0),d=a;++a)0=a;++a)b=Gf,33=j||b>a.Sb||c>a.Sb))){l=D(OG,vl,-1,99,1);h=n=o=0;for(g=b;g<=c;++g)f=PG(a.zb[g]),o+=f.c,n+=f.d,f.d>h&&(h=f.d),l[g]=f.c,2==d&&(l[g]=f.d);a.J&&(o+=25*(j+1),n+=25*(j+1),h+=25);j=g=1;a.J?r=QG(a):r=RG(a);f=nw(r.b);r=nw(r.a);1==d||3==d?f=~~((f-48)/2):2==d&&(r=~~(r/2));o>=f&&(g=f/o);h>=r&&(j=r/h);h=0;a.J&&(a.xb=gd)switch(cH(b,($C(),gD)),f){case 101:cH(b,kD);gH(b,j+3,g+3,a.mb-6,a.mb-6);cH(b,gD);e=g+3;h=a.mb-6;c=\na.mb-6;d=b.a;f=P(J(Q((j+3)*R)));e=P(J(Q(e*R)));h=P(J(Q(h*R)));c=P(J(Q(c*R)));d.n&&(hH(d,!1),iH(d,jH(d,f,e,h,c)));kH(b,j+6,g+6,a.mb-12,a.mb-12);lH(b.a,P(J(Q((j+9)*(mH(),R)))),P(J(Q((g+9)*R))),P(J(Q(2*R))),P(J(Q(4*R))));dH(b,j+a.mb-10,g+9,2,4);0.04>Math.random()&&(cH(b,iD),lH(b.a,P(J(Q((j+10)*R))),P(J(Q((g+18)*R))),P(J(Q(4*R))),P(J(Q(4*R)))));0.96=e;++e)if(bo&&(cH(g,(bG(),jG)[o]),gH(g,f.b[A].q-12,f.b[A].r-\n12,24,24));for(A=1;A<=f.q;++A)l=f.c[A].i,n=f.c[A].j,0!=f.b[l].c&&f.b[l].c==f.b[n].c&&(cH(g,(bG(),jG)[f.b[l].c]),v=f.b[n].q-f.b[l].q,h=f.b[n].r-f.b[l].r,y=Math.sqrt(v*v+h*h),1>y&&(y=1),h/=y,y=v/y,v=9*h,t=9*y,o=FH(4),r=FH(4),o[0]=f.b[l].q+v,r[0]=f.b[l].r-t,o[1]=f.b[n].q+v,r[1]=f.b[n].r-t,o[2]=f.b[n].q-v,r[2]=f.b[n].r+t,o[3]=f.b[l].q-v,r[3]=f.b[l].r+t,rH(g,o,r,4))}for(A=1;A<=f.q;++A){cH(g,($C(),fD));t=f.c[A];l=t.i;n=t.j;1==f.i&&0!=f.b[l].c&&f.b[l].c==f.b[n].c&&cH(g,(bG(),jG)[f.b[l].c]);if(3==t.f||4==\nt.f)o=l,l=n,n=o;o=f.b[l].q;r=f.b[l].r;N=f.b[n].q;M=f.b[n].r;if(1!=t.c||0!=t.f)v=N-o,h=M-r,y=Math.sqrt(v*v+h*h),1>y&&(y=1),h/=y,y=v/y;switch(t.c){case 2:10<=t.f&&cH(g,lD);v=2*h;t=2*y;oH(g.a,P(J(Q((o+v)*(mH(),R)))),P(J(Q((r-t)*R))),P(J(Q((N+v)*R))),P(J(Q((M-t)*R))));oH(g.a,P(J(Q((o-v)*R))),P(J(Q((r+t)*R))),P(J(Q((N-v)*R))),P(J(Q((M+t)*R))));cH(g,gD);break;case 3:oH(g.a,P(J(Q(o*(mH(),R)))),P(J(Q(r*R))),P(J(Q(N*R))),P(J(Q(M*R))));l=3*h;n=3*y;oH(g.a,P(J(Q((o+l)*R))),P(J(Q((r-n)*R))),P(J(Q((N+l)*R))),P(J(Q((M-\nn)*R))));oH(g.a,P(J(Q((o-l)*R))),P(J(Q((r+n)*R))),P(J(Q((N-l)*R))),P(J(Q((M+n)*R))));break;case 9:case 0:for(n=0;10>n;++n)l=o-(o-N)/10*n,s=r-(r-M)/10*n,oH(g.a,P(J(Q(l*(mH(),R)))),P(J(Q(s*R))),P(J(Q(l*R))),P(J(Q(s*R))));GH(g,f.k.v);n=MD(f.k.w.b).a-MD(f.k.w.b).b;t=t.d;l=Md;null!=t&&(l=t);t=gE(f.k.w,l);t=(o+N)/2-t/2;M=(r+M)/2+~~(n/2)-1;cH(g,lD);HH(g.a,l,P(J(Q(t*(mH(),R)))),P(J(Q(M*R))));cH(g,gD);break;default:if(1==t.f||3==t.f)v=3*h,t=3*y,s=FH(3),j=FH(3),s[0]=N+v,j[0]=M-t,s[1]=o,j[1]=r,s[2]=N-v,j[2]=\nM+t,rH(g,s,j,3);else if(2==t.f||4==t.f){v=3*h;t=3*y;for(n=0;10>n;++n)l=o-(o-N)/10*n,s=r-(r-M)/10*n,j=n/10,oH(g.a,P(J(Q((l+v*j)*(mH(),R)))),P(J(Q((s-t*j)*R))),P(J(Q((l-v*j)*R))),P(J(Q((s+t*j)*R))))}else oH(g.a,P(J(Q(o*(mH(),R)))),P(J(Q(r*R))),P(J(Q(N*R))),P(J(Q(M*R))))}}y=FH(f.p+1);h=FH(f.p+1);for(A=1;A<=f.q;++A)l=f.c[A].i,n=f.c[A].j,o=f.b[l].q,r=f.b[n].q,++h[l],++h[n],y[l]=y[l]/h[l]+r/h[l],y[n]=y[n]/h[n]+o/h[n];GH(g,f.k.v);n=MD(f.k.w.b).a-MD(f.k.w.b).b;N=FH(f.p+1);r=FH(f.p+1);o=D(IH,u,121,f.p+1,0);\nfor(A=1;A<=f.p;++A)l=JH(f,A),(null==l||1>l.length)&&(l=kb),j=f.b[A],3==f.b[A].a&&0LH(y[A]-f.b[A].q)&&(v=!1),2LH(y[A]-f.b[A].q)&&(M=!0),t=l,s=m,f.k.oc&&(F=f.b[A].i,0y&&(y=1),h/=y,y=v/y,v=4*h,t=4*y,s=FH(5),j=FH(5),s[0]=f.b[l].q+v,s[1]=f.b[n].q+v,j[0]=f.b[l].r-t,j[1]=f.b[n].r-t,s[3]=f.b[l].q-v,s[2]=f.b[n].q-v,j[3]=f.b[l].r+t,j[2]=f.b[n].r+t,s[4]=s[0],j[4]=j[0],106!=f.k.k&&OH(g,s,j,5),106==f.k.k&&PH(f,f.c[f.w].i,f.c[f.w].j))){h=0;for(A=1;A<=f.p;++A)0~~(f.p/2))for(A=1;A<=f.p;++A)0e;++e)if(d=a.zb[e])0b&&(b=c);return b}\nfunction ZH(a,b,c,d){var e=kG?350:170,f,g,h,j;$H(d);b=aI(a,b);c=aI(a,c);h=e;for(g=1;g<=a.Sb;++g){j=new bI(e);f=a.zb[g];for(var l=b,o=c,n=j,r=void 0,t=void 0,y=void 0,v=void 0,s=r=r=r=v=r=void 0,A=void 0,F=void 0,M=t=y=r=r=void 0,N=void 0,$=void 0,s=0,F=n.a,A=1;A<=f.q;++A)r=cI(l,o,f.c[A].a,f.c[A].b),ry+F||(r=N*r+$*v,0>r||(y=Math.sqrt(y),t=Math.sqrt(t),r/=y*t,1<=r||(r=1.5707963267948966-Math.acos(r),r=t*Math.cos(r),r*=r,r=a.yb||0>=a.ub)&&(!a.M&&(a.M=JC(a)),dI(a,a.M));b=new eI;b.b=a.yb;b.a=a.ub;return b}function RG(a){var b;b=QG(a);b.b/=a.xb;b.a/=a.xb;return b}\nfunction BH(a,b){var c=a.b.a;iH(c,"=e;++e)b=DI(h,d);e=jI($E(yy(b.substr(0,3)),10)).a;g=jI($E(yy(b.substr(3,3)),10)).a;DI(h,d);for(b=1;b<=e+g;++b){for(f=m;!(j=DI(h,d),null==j||H(j,"$MOL"));)f+=j+d;a.zb[++a.Sb]=new EI(a,f)}a.xb=1;NG(a,1,e,1,!1);NG(a,e+1,e+g,3,!1);d="readRXNFile"}else{(a.J||a.Vb)&&(a.dc=!1);a.ob=new EI(a,b);if(!a.ob||0==a.ob.p)return!a.ob&&(wu(a,"ERROR - problems in reading/processing MOL input"),\na.gf(a.Ec.d)),!!a.ob;d=(a.dc||a.Fb)&&a.p||a.Mb;null!=a.t&&a.ob&&FI(a.ob,a.t,!0);null!=a.u&&a.ob&&FI(a.ob,a.u,!1);d||(a.Sb=0,a.xb=1);h=GI(a.ob);if(1>=h||a.J)a.zb[++a.Sb]=a.ob;else{a.Fb=!0;for(b=1;b<=h;++b)a.zb[++a.Sb]=new HI(a,a.ob,b)}d?a.o=a.Sb:a.o=1;a.ob=a.zb[a.o];a.J?NG(a,1,1,0,!0):NG(a,1,h,0,!d);d=Aj}II(a);null!=d&&(LF(a.r,Pd),a.r&&XG(hq(a.r,d),0,0,0),a.hc=!0);a.Ib=!0;c&&a.gf(a.Ec.d);return!0}function wu(a,b){null==b&&(b=m);a.Gb=!0;a.X=b;a.ng("info: "+b)}\nfunction EH(a,b){var c;c=Math.round(b);100>c&&(!lG[c]&&(lG[c]=new KD(We,0,c)),!nG[c]&&yq(nG,c,XB(lG[c])),a.v=lG[c],a.w=nG[c])}function gI(a){var b;if(!a)return!1;b=a.yf();a=0!=(a.e&2);return b||a}function QH(a,b){return(a.mb+(a.Lb?1:0))*b}function vH(a,b){var c,d;d=-1;for(c=0;c=b)switch(a.Kb=!0,a.Hb=!0,wu(a,m),b){case 102:VG(a,!0);mI(a,102);lI(a,102);d=!0;break;case 110:a.Ib=!0;a.k=c;a.pb.a!=a.pb.b&&a.pb.a.b!=a.pb.b?a.q&&(++a.Sb,a.o=a.Sb,a.q=!1):wu(a,"No more undo");if(!(a.pb.a!=a.pb.b&&a.pb.a.b!=a.pb.b))break;JI(a,KI(a.pb));a.r&&XG(hq(a.r,Gk),0,0,0);a.hc=!0;a.hc=!1;a.Ib=!0;break;case 111:a.k=c;if(a.pb.a.c)a.q&&(++a.Sb,a.o=a.Sb,a.q=!1);else{wu(a,"No more redo");break}if(!a.pb.a.c)break;e=a.pb;\nif(!e.a.c)throw new Iy("Cannot redo. Index is out of range.");if(!e.a.c)throw new Iy($e);e.a=e.a.c;JI(a,e.a.a);a.r&&XG(hq(a.r,Cj),0,0,0);a.hc=!0;a.hc=!1;a.Ib=!0;break;case 214:fI(a,null,a.R.a,a.R.b);a.k=c;break;case 151:case 152:case 154:case 153:e=null;a.k=c;switch(b){case 152:e=LI(a.jc);break;case 151:e=MI(a.jc);break;case 154:e=a.jc;e.a=e.c;e=LI(e);break;case 153:e=a.jc,e.a=-1,e=MI(e)}null==e?wu(a,"No more molecules in SDF buffer"):(YG(a),a.Vb=!0,NI(a,e,!1),a.Vb=!1,H(a.X,m)&&(wu(a,"MOL n. "+(a.jc.a+\n1)+" of "+a.jc.c),d=!0,a.r&&XG(hq(a.r,"SDFstack"),0,0,0),a.hc=!0,a.hc=!1));break;case 101:Cq(4,new OI(a));a.k=c;break;case 107:Cq(2,new PI(a));break;case 114:Cq(3,new QI(a));a.k=c;break;case 103:a.Mb=!0;a.k=c;break;case 105:a.A&&a.Bb&&(a.Bb=!1,RI(a.ob),a.Ib=!0,a.r&&XG(hq(a.r,yg),0,0,0),d=a.hc=!0,a.k=c);a.I=1;break;case 109:a.k=c;e=SI(a.ob);if(2==e){wu(a,"Copying the agent not possible !");break}d=PG(a.ob);a.Ib=!0;a.ob=new sG(a.ob);d=nw((a.M.b-a.mb)/2-d.a);for(e=1;e<=a.ob.p;++e)TG(a.ob.b[e],2*d/a.xb,\n0/a.xb);a.zb[++a.Sb]=a.ob;a.o=a.Sb;a.r&&XG(hq(a.r,"reactionCopy"),0,0,0);d=a.hc=!0;mI(a,109);lI(a,109);break;case 104:d=tG(a);break;case 213:a.k=c;if(!a.S){var f,g,h,j,l;l=new XD;for(f=a.U,g=0,h=f.length;g=b&&(a.n=33+(b-1301)),0=a.k)a.cb=2,XI(a.ob),d=!0,IG(a,lg,a.o,0,a.ob.w);else if(202==a.k||203==a.k||204==a.k)if(0=g;++g){f=0;for(c=1;c<=a.Sb;++c)SI(a.zb[c])==g&&(h[g][++f]=c);h[g][0]=f}e+=Pa;e+=$I(h[1][0],3)+$I(h[3][0],3)+da;for(c=1;c<=h[1][0];++c)e+=Ka+aJ(a.zb[h[1][c]],d,b);for(c=1;c<=h[3][0];++c)e+=Ka+aJ(a.zb[h[3][c]],d,b)}else{1f&&(f=e.b[b].r),e.b[b].qb;++b)yq(g.b,g.c++,null),yq(f.b,f.c++,null);for(b=1;b<=e.p;++b)j=e.b[b].b,null==j||0==j.length||(H(j,gg)?Qm(c,new QC(b)):0==j.indexOf("mix")?(j=$E(zy(j,3),10),l=null,f.c>j&&(l=(AD(j,f.c),f.b[j])),null==l?h=new Nm:h=l,Qm(h,new QC(b)),GD(f,j,h)):0==j.indexOf(jj)&&(j=$E(zy(j,2),10),l=null,g.c>j&&(l=\n(AD(j,g.c),g.b[j])),null==l?h=new Nm:h=l,Qm(h,new QC(b)),GD(g,j,h)));d+=fJ(qf,c);if(0a.M.a-P(J(Q(a.mb*a.nb))))return!1;var b=a.Cc,f=a.Dc,g,h,j,l;l=0;if(0>b||0>f||f>a.ub||b>a.yb)b=0;else if(1==a.Sb)b=a.o;else{b=aI(a,b);f=aI(a,f);j=1.7976931348623157E308;for(h=1;h<=a.Sb;++h){g=a.zb[h];for(var o=void 0,n=void 0,r=void 0,n=1.7976931348623157E308,o=1;o<=g.p;++o)r=cI(b,f,g.b[o].q,g.b[o].r),r=a.k)a.cb=2,XI(a.ob),vG(a,kg,a.ob.v);else if(230==a.k)a.cb=3,vG(a,mg,a.ob.v);\nelse if(233<=a.k&&262>a.k)jJ(a.ob,!1),vG(a,jg,a.ob.v),a.cb=3;else if(107==a.k){if(a.bc.b)return!0;WI(a.ob,a.ob.v,dr(a.bc.e.Tc.a.pb,Ik));a.ob.j=!0;vG(a,"addAtomQuery",a.ob.v)}else if(105==a.k)(c=kJ(a.ob))?vG(a,"markAtom",a.ob.v):vG(a,"unMarkAtom",a.ob.v);else if(113!=a.k)if(300c.length&&(c=Vf),WI(a.ob,a.ob.v,c)),vG(a,Vj+a.n,a.ob.v)}else e=!1}else if(0<\na.ob.w)if(a.eb.c=a.o,104==a.k)tG(a);else if(106==a.k){c=a.ob;d=a.ob.w;if(0d&&(d=b);if(0==d)break;uG(c,d);c.a[d]=0}xG(a.ob);IG(a,"delBondGroup",a.o,0,a.ob.w);a.ob.w=0}else if(201==a.k)lJ(a.ob,a.ob.w),IG(a,"setBondStereo",a.o,0,a.ob.w);else if(202==a.k||205==a.k)1==a.ob.c[a.ob.w].c&&0==a.ob.c[a.ob.w].f?(a.ob.c[a.ob.w].c=2,IG(a,Wj,a.o,0,a.ob.w)):(a.ob.c[a.ob.w].c=1,a.ob.c[a.ob.w].f=\n0,IG(a,Xj,a.o,0,a.ob.w)),a.ob.c[a.ob.w].f=0;else if(203==a.k)a.ob.c[a.ob.w].c=2,a.ob.c[a.ob.w].f=0,xG(a.ob),IG(a,Wj,a.o,0,a.ob.w);else if(204==a.k)a.ob.c[a.ob.w].c=3,a.ob.c[a.ob.w].f=0,xG(a.ob),IG(a,Yj,a.o,0,a.ob.w);else if(206<=a.k&&229>=a.k)a.cb=2,XI(a.ob),IG(a,lg,a.o,0,a.ob.w),xG(a.ob);else if(107==a.k){if(!a.bc.b)return!0;c=dr(a.bc.e.Tc.a.pb,Ik);a.ob.c[a.ob.w].c=9;a.ob.c[a.ob.w].d=c;IG(a,"setQueryBond",a.o,0,a.ob.w)}else 105==a.k?(c=a.ob,b=a.ob.w,c.k.gb=!0,c.k.sc?(c.i=-1,d=c.c[b].i,b=c.c[b].j,\nf=c.b[d].c,h=c.b[b].c,j=4,f==h&&0=a.k)return!1;++a.Sb;a.o=a.Sb;a.zb[a.Sb]=new WG(a);a.ob=a.zb[a.Sb];a.eb.c=a.o;202<=a.k&&204>=a.k||205==a.k?(mJ(a.ob,null),a.ob.q=0,nJ(a.ob,1,c/a.xb,d/a.xb),a.ob.v=1,a.ob.x=1,a.cb=1,b=a.ob,YI(b,b.v,0),205==a.k?(nJ(a.ob,2,(c+21.65)/a.xb,(d-12.5)/a.xb),a.ob.e[0]=1,a.ob.e[1]=2,a.ob.r=1,IG(a,"addChain",a.o,0,a.ob.w)):IG(a,\nig,a.o,0,a.ob.w)):206<=a.k&&229>=a.k?(a.ob.z=aI(a,c),a.ob.A=aI(a,d),a.cb=2,XI(a.ob),a.r&&XG(hq(a.r,kg),0,0,0),a.hc=!0):300c.length&&(c=Vf),WI(a.ob,1,c)),vG(a,"addAtom",a.ob.v)):230==a.k?(xI(a,null,!0),a.r&&XG(hq(a.r,mg),0,0,0),a.hc=!0):233<=a.k&&262>a.k?(mJ(a.ob,null),a.ob.q=0,nJ(a.ob,1,c/a.xb,d/a.xb),a.ob.v=1,jJ(a.ob,!0),a.r&&XG(hq(a.r,jg),0,0,0),a.hc=!0):LE()}else e=!1;e&&oJ(a)}return a.Ab=\ne}\nfunction pJ(a,b,c,d){var e,f,g,h;LE();if(!a.Db||qJ(b))return!0;a.Gb=!1;c-=P(J(Q(QH(a,a.nb))));d-=P(J(Q(RH(a,a.nb))));f=aI(a,c-a.Cc);g=aI(a,d-a.Dc);e=aI(a,c);h=aI(a,d);if(2==a.cb||3==a.cb||9==a.cb)return!0;if(1==a.cb){f=!1;a.zb[a.eb.c].v=0;--a.ob.p;g=c;var b=d,j=a.Nb;0>g||0>b||b>a.ub||g>a.yb?$H(j):ZH(a,g,b,j);++a.ob.p;if(0g&&(g=1);b/=g;j/=g;o=g/2/Math.tan(0.5235987755982988);n=e-f.b[l].q;r=h-f.b[l].r;l=-g/2+n*j+r*b;b=r*j-n*b;if(0>l)if(1f.b[2].r-f.b[1].r&&0h-f.b[1].r&&(f.b[2].r=f.b[1].r-g/2),0>f.b[2].q-f.b[1].q&&0e-f.b[1].q&&(f.b[2].q=f.b[1].q-0.866*g);else{if(2==f.b[f.e[0]].j&&(o=f.b[f.e[0]].p[1],o==f.e[1]&&(o=f.b[f.e[0]].p[2]),j=f.b[f.e[0]].q-f.b[o].q,b=f.b[f.e[0]].r-f.b[o].r,g=Math.sqrt(j*j+b*b),1>g&&(g=1),b/=g,j/=g,n=e-f.b[o].q,r=h-f.b[o].r,e=r*j-n*b,n=f.b[f.e[1]].q-f.b[o].q,r=f.b[f.e[1]].r-f.b[o].r,h=r*j-n*b,0h||0>e&&0=b?0-b:b)>e){++f.r;if(100g&&(g=1),nJ(f,f.p,f.b[f.x].q+25*(j/g),f.b[f.x].r+25*(b/g))}a.B=!0}else if(113==a.k&&0c||0>d||d>a.ub||c>a.yb)&&5!=a.cb))e=RG(a),h=a.ob,j=PG(h),b=j.a,j=j.b,0>f&&be.b||0>g&&je.a||uJ(h,f,g),a.cb=5;AG(a,!1);a.Ib=!0;NF(a);a.Cc=c;a.Dc=d;return!0}\nfunction kI(a,b,c,d){var e,f;if(!a.J||a.eg().a||a.fg().a||a.K)if(f=!1,e=wH(a,c,d),e!=a.Cb&&(f|=mI(a,a.Cb),f|=lI(a,e),a.Cb=e),!gI(b)){c-=P(J(Q(QH(a,a.nb))));d-=P(J(Q(RH(a,a.nb))));b=c;c=a.Nb;0>b||0>d||d>a.ub||b>a.yb?$H(c):ZH(a,b,d,c);113==e&&0d.b[e].j&&(AJ(d,null),b=d.e[d.r-1],d.c[d.q].i=e,d.c[d.q].j=b,BJ(d.b[e],b),BJ(d.b[e],b)),uG(d,d.p)),d.u=!1,a.hc=!0;else if(0!=a.eb.c&&a.o!=a.eb.c){uG(a.ob,a.ob.p);b=a.ob.x;c=a.eb.a+a.ob.p;e=a.zb[a.eb.c];d=new bJ(a,z(CJ,u,120,[null,a.ob,e]),2);d.b[0]=new DJ;EJ(d,b,c,1);b=D(CJ,\nu,120,a.zb.length,0);for(f=0,c=0;fd.c[b].c?(++d.c[b].c,d.c[b].f=0):wu(d.k,"Maximum allowed bond order is 3 !")):6==d.b[e].j?(--d.q,GJ(d,d.x),wu(d.k,"Not possible connection !")):(d.c[d.q].j=e,GJ(d,d.x),b=d.x,BJ(d.b[e],b),BJ(d.b[b],e),HJ(d.c[d.q],d.b)));UG(a.ob);a.B&&(d=a.pb,d.a!=d.b&&d.a.b!=d.b&&(e=d.a.c,KI(d),d.a.c=e),\nIG(a,ig,a.o,0,a.ob.w),a.B=!1);d=!0}else 5==a.cb&&(UG(a.ob),d=a.hc=!0);0=b&&0==c||b==c&&a.o==a.Zb)return-1;0>=b&&0nb))for(;Bc=dc[uc]*dc[uc];)0==Bc%dc[uc]?jc=!1:++uc;if(jc){pc[++cc]=Tw(Bc);if(cc>=nb)break;Iba&&(ba=0),0>kd&&(kd=0),ae=28*ba+kd));eb=0;0!=n.b[T].n&&(-2>n.b[T].n?eb=1:-2==n.b[T].n?eb=2:-1==n.b[T].n?eb=3:1==n.b[T].n?eb=4:2==n.b[T].n?eb=5:2Db&&(Db=10-Db));Xc=126;O=Bd;O+=126*n.b[T].i;Xc*=7;O+=eb*Xc;Xc*=7;0!=Db&&(O+=Db*Xc);Xc*=7;O+=ae*Xc;Xc*=783;O+=n.b[T].j*Xc;S[T]=Tw(O)}for(oc=0;!QJ(n,Fb,S);){Qc=!1;for(T=1;T<=n.p;++T)Fb[T]!=cb[T]&&(cb[T]=Fb[T],Qc=!0);if(Qc){for(T=1;T<=n.p;++T){S[T]=Uk;for(db=1;db<=n.b[T].j;++db)S[T]=Xw(S[T],Na[Fb[n.b[T].p[db]]])}oc=\n0}else if(0n.c[T].j&&(Ua=n.c[T].i,n.c[T].i=n.c[T].j,n.c[T].j=Ua,1==n.c[T].f?n.c[T].f=3:2==n.c[T].f?n.c[T].f=4:3==n.c[T].f?n.c[T].f=1:4==n.c[T].f&&(n.c[T].f=2));for(T=1;Tn.a[v])&&M!=Aa[v]){Ic=!0;for(Ac=1;Ac<=ub;++Ac)if(ca[Ac]==v&&ja[Ac]==M||ca[Ac]==M&&ja[Ac]==v){Ic=!1;break}Ic&&(++ub,ca[ub]=v,ja[ub]=M)}}else W[++Fa]=M;if(0==Fa){if(aa==n.p)break;v=V[L--]}else if(1==Fa)Aa[W[1]]=v,v=W[1],n.a[v]=++aa;else{V[++L]=v;A=0;for(ra=1;ra<=Fa;++ra)if($=FJ(n,W[ra],v),!K[$]){A=W[ra];break}if(0==A)for(ra=1;ra<=Fa;++ra)if($=FJ(n,W[ra],v),2==n.d[$]||3==n.d[$]){A=W[ra];break}0==\nA&&(A=W[1]);Aa[A]=v;v=A;n.a[A]=++aa}}Aa=FH(n.p+1);y=FH(n.p+1);id=[];jd=[];F=aa=L=0;for(ra=1;ra<=n.p;++ra)if(1==n.a[ra]){v=ra;break}b:for(;;){0n.b[Ob].j||4Ba.b[Dd].j||3Yc[Eb]&&\n(wc=Zc,Zc=Eb,Eb=wc);U=Zc;0==Zc&&(U=Eb,$c=!0);for(gc=1;gc<=Ba.b[Dd].j;++gc)ld=Ba.b[Dd].p[gc],ld!=xb[Ed-1]&&(0==Rd?Rd=ld:fb=ld);0Yc[fb]&&(wc=Rd,Rd=fb,fb=wc);Ga=Rd;0==Rd&&(Ga=fb,se=!0);ib=0ib+kc?-(ib+kc):ib+kc)||0!=ng||0!=Re?wu(Ba.k,"Bad stereoinfo on allene !"):(md=Ba.b[xb[Ed-1]].q-Ba.b[Dd].q,re=Ba.b[xb[Ed-1]].r-Ba.b[Dd].r,Kd=Math.sqrt(md*md+re*re),0.001>\nKd&&(Kd=0.001),0<(Ba.b[Ga].r-Ba.b[xb[Ed-1]].r)*(md/Kd)-(Ba.b[Ga].q-Ba.b[xb[Ed-1]].q)*(re/Kd)?ec[fc]=1:ec[fc]=-1,$c&&(ec[fc]*=-1),se&&(ec[fc]*=-1),U==Zc&&0>ib&&(ec[fc]*=-1),U==Eb&&0>kc&&(ec[fc]*=-1),Yc[U]>Yc[Ga]&&(ec[fc]*=-1))}}else c:{var Ec=n,Lc=Ob,Fd=ta,td=void 0,Ya=void 0,ud=void 0,hc=void 0,Cb=void 0,de=void 0,Sc=void 0,Gd=void 0,Qb=void 0,pb=void 0,Sa=void 0,jb=void 0,Sd=void 0,Fe=void 0,od=void 0,Za=void 0,vd=void 0,jb=FH(4),Fe=FH(4),Rb=Ec,wd=Lc,je=Rc,Td=ka,Ud=ca,Af=ja,Hg=ce,qc=jb,ff=void 0,\nxd=void 0,Ig=void 0,ke=void 0,Bf=void 0,Tc=void 0,Tc=-1;0Cb;++Cb)0>=jb[Cb]||\n(td=FJ(Ec,Lc,jb[Cb]),Fe[Cb]=UJ(Ec,td,Lc),0Fe[Cb]?(++Sc,hc=jb[Cb],de=jb[Cb]):Gd=jb[Cb]);Qb=pb+Sc;Za=FH(4);od=0;if(3==Ec.b[Lc].j){if(1==pb&&1==Sc||3==Qb&&0Cb;++Cb)td=FJ(Ec,Lc,Sa[Cb]),Ya[Cb]=UJ(Ec,td,Lc);if(4==Qb){if(0==pb||0==Sc){wu(Ec.k,"Error in C4 stereospecification !");break c}if(1==pb||1==Sc)Za[0]=Sa[0],Za[1]=Sa[3],Za[2]=Sa[2],Za[3]=Sa[1],od=Ya[0];else{for(Cb=0;4>Cb;++Cb)-1==Ya[Cb]&&(Ya[Cb]=0);Qb=2}}else if(3==Qb)if(3==pb||3==Sc)Za[0]=Sa[0],Za[1]=Sa[3],Za[2]=Sa[2],Za[3]=Sa[1],0Cb;++Cb)Ya[Cb]==ud&&(Ya[Cb]=0);Qb=2}if(2==\nQb)if(1==pb&&1==Sc)Sa[1]==hc?(Sa[1]=Sa[2],Sa[2]=Sa[3]):Sa[2]==hc&&(Sa[2]=Sa[3]),Za[0]=vd,Za[1]=hc,Za[2]=Sa[2],Za[3]=Sa[1],od=1;else{if(Ya[0]==Ya[1]||Ya[1]==Ya[2]){wu(Ec.k,"Error in C4 stereospecification ! 2/0r");break c}0!=Ya[0]?(Za[0]=Sa[0],Za[1]=Sa[2],Za[2]=Sa[1],Za[3]=Sa[3]):(Za[0]=Sa[1],Za[1]=Sa[3],Za[2]=Sa[2],Za[3]=Sa[0]);1=jf&&(yd=!0,Oa=(bG(),iG)[jf]);yd&&(0!=og?Oa=Xf+og+Oa:Oa=Xf+Oa,1==te[gf]?Oa+=Nd:-1==te[gf]&&(Oa+="@@"),1==Rf?Oa+=Ve:1ee?-ee:ee)&&(Oa+=0>ee?-ee:ee)),yb&&(Oa+=fd+Jh),Oa+=dg);Mp(Ih.a,Oa);for(oa=1;oa<=ub;++oa)if(ca[oa]==\nv||ja[oa]==v)s=ja[oa],s==v&&(s=ca[oa]),N[v]",!0);j=-1c;++c)(d=b.d[c])?a.zb[c]=new sG(d):a.zb[c]=null;0b||b>a.Sb?(wu(a,"ERROR - invalid mol index: "+b),a.gf(a.Ec.d),null):a.zb[b]}function II(a){var b,c,d;b=JG(a);for(d=1;d<=a.Sb;++d)c=a.zb[d],c.o=b}function cK(a,b){b!=a.nb&&(a.nb=b,a.og(),a.gf(a.Ec.d))}function dK(a,b){var c,d,e;if(b!=a.xb){c=RG(a);a.xb=b;d=RG(a);e=P(J(Q((d.b-d.c)/2-(c.b-c.c)/2)));d=P(J(Q((d.a-d.d)/2-(c.a-c.d)/2)));for(c=1;c<=a.Sb;++c)uJ(a.zb[c],e,d),UG(a.zb[c]);a.Ib=!0;a.gf(a.Ec.d)}}\nfunction MG(a,b){var c;c=-1;H(b,"Select substituent")?(c=202,b=m):H(b,Bb)?c=235:H(b,Ib)?c=240:H(b,Ab)?c=260:H(b,Sb)?c=261:H(b,Xb)?c=241:H(b,Mb)?c=233:H(b,Lb)?c=236:H(b,Kb)?c=237:H(b,Wb)?c=234:H(b,Vb)?c=243:H(b,Yb)?c=252:H(b,Ub)?c=244:H(b,Zb)?c=239:H(b,"-PO3H2")?c=251:H(b,wb)?c=242:H(b,sb)?c=245:H(b,vb)&&(c=238);0=a.mb-1)for(g=f.b.b;j>=a.mb-1&&1=a.k&&(a.k=213);for(c=1;14>=c;++c)bH(a,b,c,1),bH(a,b,c,2);a.k=d;SH(a.Ec,a.wc.a,0,0)}var f;if(a.Hb){b=BH(a.fb,a.nb);d=a.mb+(a.Lb?1:0);c=(a.M.a-P(J(Q(RH(a,a.nb)))))/a.nb;f=c-a.mb;cH(b,dG);lH(b.a,P(J(Q(0*(mH(),R)))),P(J(Q(0*R))),P(J(Q(d*R))),P(J(Q(c*R))));a.Lb?(cH(b,($C(),eD)),e=xH*\n(a.mb+(a.Lb?1:0))+3,f>e&&(nH(b,0,e,a.mb-1,e),oH(b.a,P(J(Q(0*R))),P(J(Q(e*R))),P(J(Q(0*R))),P(J(Q((c-1)*R)))),nH(b,a.mb-1,e,a.mb-1,f),nH(b,a.mb-1,f,d,f))):(cH(b,eG),oH(b.a,P(J(Q(0*R))),P(J(Q(0*R))),P(J(Q(0*R))),P(J(Q((c-1)*R)))),nH(b,0,xH*a.mb,c-1,xH*a.mb),cH(b,qD(dG)),oH(b.a,P(J(Q((d-1)*R))),P(J(Q(0*R))),P(J(Q((d-1)*R))),P(J(Q((f+1)*R)))));oH(b.a,P(J(Q(0*R))),P(J(Q((c-1)*R))),P(J(Q(d*R))),P(J(Q((c-1)*R))));for(c=3;c<=xH+2;++c)bH(a,b,1,c);b=P(J(Q(RH(a,a.nb))));SH(a.Ec,a.fb.a,0,b)}a.Jb&&(d=BH(a.fc,\na.nb),c=a.Lb?1:3,b=(a.M.a-P(J(Q(RH(a,a.nb))))-P(J(Q(a.mb*a.nb))))/a.nb,a.Lb?(cH(d,($C(),eD)),lH(d.a,P(J(Q(0*(mH(),R)))),P(J(Q(0*R))),P(J(Q(c*R))),P(J(Q(b*R))))):(cH(d,qD(dG)),oH(d.a,P(J(Q((c-1)*(mH(),R)))),P(J(Q(0*R))),P(J(Q((c-1)*R))),P(J(Q(b*R)))),cH(d,dG),oH(d.a,P(J(Q((c-2)*R))),P(J(Q(0*R))),P(J(Q((c-2)*R))),P(J(Q(b*R)))),cH(d,eG),oH(d.a,P(J(Q((c-3)*R))),P(J(Q(0*R))),P(J(Q((c-3)*R))),P(J(Q(b*R))))),b=a.M.b-P(J(Q((a.Lb?1:3)*a.nb))),c=P(J(Q(RH(a,a.nb)))),SH(a.Ec,a.fc.a,b,c))}}\nfunction Cu(a,b){a.A?0==b&&(a.I=-1,wu(a,$g),NF(a)):(a.gb?a.I=b:-1a.I?a.I=10*a.I+b:a.I=b,a.gb=!1,0==a.I?(a.I=-1,wu(a,$g)):wu(a,a.I+ea),NF(a))}function dI(a,b){var c,d;d=b.b;c=b.a;a.J||(d-=P(J(Q(QH(a,a.nb))))+P(J(Q((a.Lb?1:3)*a.nb))),c-=P(J(Q(RH(a,a.nb))))+P(J(Q(a.mb*a.nb))));1>d&&(d=1);1>c&&(c=1);a.yb=nw(d);a.ub=nw(c)}function pG(a){bG();return 14<=a&&20>=a?1:21<=a&&28>=a?2:29<=a&&31>=a?3:0}w(582,474,em);_.Ef=function(a){zG(this,a)};_.dg=gK;_.eg=function(){return FG(),null!=this.Pb?GG:HG};\n_.fg=function(){return FG(),FG(),HG};_.gg=sC;_.hg=function(a,b,c){return FC(this,b,c)};_.ig=sC;_.jg=function(){LE()};_.kg=DD;_.lg=hK;_.mg=DD;_.ng=function(){LE()};_.Ff=function(a){var b,c;if(this.s)if(c=a.c,b=a.f,a=a.i,c=(100+2*c)/100,this.J||!(bthis.M.a-P(J(Q(this.mb*this.nb)))||b>this.M.b-P(J(Q((this.Lb?1:3)*this.nb))))){if(b=this.xb*c,b>this.xb&&10>=b||b=b&&cK(this,b)};\n_.gf=function(){fK(this)};_.og=function(){aK(this)};_.pg=Py;_.j=null;_.k=0;_.n=0;_.o=0;_.p=!1;_.q=!1;_.s=!0;_.t=null;_.u=null;_.v=null;_.w=null;_.x=13;_.y=null;_.z=!0;_.A=!1;_.B=!1;_.C=!0;_.F=null;_.G=null;_.I=1;_.J=!1;_.K=!1;_.L=!1;_.M=null;_.N=!0;_.O=!1;_.P=!0;_.Q=!0;_.R=null;_.S=null;_.T=null;_.V="http://peter-ertl.com/jsme/2013_03/help.html";_.W=null;_.X=null;_.Y=null;_._=null;_.ab=!1;_.bb=!0;_.cb=0;_.db=Tk;_.fb=null;_.gb=!0;_.hb=null;_.ib=null;_.jb=null;_.kb=null;_.lb=null;_.mb=24;_.nb=1;\n_.ob=null;_.pb=null;_.rb=null;_.sb=null;_.tb=!0;_.ub=0;_.vb=null;_.wb=1;_.xb=1;_.yb=0;_.Ab=!1;_.Bb=!1;_.Cb=0;_.Db=!1;_.Eb=!1;_.Fb=!0;_.Gb=!0;_.Hb=!0;_.Ib=!0;_.Jb=!0;_.Kb=!0;_.Lb=!1;_.Mb=!1;_.Ob=!1;_.Pb=null;_.Qb=null;_.Rb=!1;_.Sb=0;_.Tb=!0;_.Ub=null;_.Vb=!1;_.Wb=null;_.Xb=!1;_.Yb=null;_.Zb=0;_.$b=0;_._b=0;_.ac=!1;_.bc=null;_.cc=!1;_.dc=!1;_.ec=!1;_.fc=null;_.gc=!1;_.hc=!1;_.kc=!0;_.lc=!1;_.mc=!1;_.nc=!0;_.oc=!0;_.pc=null;_.qc=null;_.rc=!1;_.sc=!1;_.tc=!0;_.uc=null;_.vc=!1;_.wc=null;_.xc=null;\n_.yc=null;_.zc=!1;_.Ac=!0;_.Bc=!0;_.Cc=0;_.Dc=0;var xH=10,fG,lG,nG,dG,eG,gG,cG,kG,iK=null,jG,iG;function iJ(a,b,c,d,e){a.b[e]&&(VH(a.r),LF(a.r,Qe),a.r.a=e,a.r.d=c,a.r.e=d,a.r.f=b,jK(a.c,a.r,e),VH(a.r))}function kK(a,b,c){return a.b[c]?(VH(a.r),a.r.a=c,a.r.b=b,jK(a.c,a.r,c),VH(a.r),!0):!1}function NF(a){fK(a);a.f&&(lK(a.Ec),a.f=!1)}function mK(a,b,c){b in a.b?a.b[b]=c:$wnd.alert("Invalid callback name: "+b)}\nfunction nK(){bG();DC.call(this);this.Ec=(kC(),kC(),lC).a;this.eb=new oK;this.Nb=new oK;this.H=new KD(null,0,8);this.Z=(this.mb-6)/1.5;this.r=new pK;this.D=($C(),bD);this.zb=D(CJ,u,120,99,0);this.qb=new BC;this.jc=new qK;this.$=H((LE(),ME[ki]),bf);this.E=new rK;this.U=z(rw,u,1,[Bb,Ib,Xb,Ab,Sb,Mb,Lb,Kb,Wb,Yb,Ub,Vb,wb,vb,sb]);this.ic=new sK;this.ob=new WG(this);jG[0]=dD;jG[1]=new sm(255,153,153);jG[2]=new sm(255,204,102);jG[3]=new sm(255,255,153);jG[4]=new sm(102,255,255);jG[5]=new sm(51,204,255);jG[6]=\nnew sm(255,153,255);this.eb.c=1;this.Nb.c=1;this.zb[1]=this.ob;this.Y=new tK(this);this.a=z(rw,u,1,[le,Qd,Zd,ne,Yd,me,Ye]);var a,b,c,d;this.b={};for(b=this.a,c=0,d=b.length;cV&&(V=0),ja=new LK(f,W,V,g),MK(ja),Qm(f.k,ja),N.c=W,N.b=ca,N.d=24,N.a=V,N);ca=$.c;W=$.b;EF(new JF(h),f);V=0>=vK();N=new OF(h);V?(V=new NK,uy(V,g.pb.alt),0<=ca&&(V.pb.style[Nk]=ca+uj),0<=W&&(V.pb.style[di]=\nW+uj),W=new PF(f,V,ca,$),cz(W.d.f,W.b,KC(W.d)-W.c-W.a.a,LC(W.d)-(W.a.d-W.a.a)),Qm(f.k,W),er(V.pb),V.pb.style[mh]=(rr(),Si),Ey(V,N,(Xt(),Xt(),Yt)),V.pb.style[Uf]=Zi):(er(g.pb),g.pb.style[mh]=(rr(),Si),Ey(g,N,(Xt(),Xt(),Yt)),g.pb.style[Uf]=Zi)}else AF("JSME initialization error: HTML id "+a+" not found.")}function OK(){return uw(null)}function PK(a){return uw(a)}w(586,1,Rl,CK,EK,FK,DK);_.qg=function(a){Fy(this.d,new QK(this,a),(Et(),Et(),Ft))};_.rg=function(a){Fy(this.d,new RK(this,a),(Eu(),Eu(),Fu))};\n_.sg=function(a){Fy(this.d,new SK(this,a),(Ku(),Ku(),Lu))};_.tg=function(a){Fy(this.d,new TK(this,a),(Nu(),Nu(),Ou))};_.ug=function(a){Cq(2,new UK(this.b,a))};_.vg=function(){VG(this.b,!0)};_.wg=function(){Tq((Qq(),Rq),new VK(this))};_.xg=function(){var a,b,c;c=[];for(b=new Jv(this.d.a);b.ba&&(b.x=a,EH(b,a),WH(b))};_.eh=function(a,b){var c=this.b,d;d=bK(c,a);1>b||b>d.p?(wu(c,"ERROR - invalid atom index: "+b),NF(c)):(d.v=b,oJ(c))};_.fh=function(a){mK(this.b,le,a)};_.gh=function(a,b){mK(this.b,a,b)};\n_.pe=function(a){ry(this.d,a);BK(this)};_.hh=function(a){this.b.V=a};_.ih=function(a){cK(this.b,a)};_.jh=function(a){var b=this.b;b.tb=a;WH(b)};_.kh=function(a){var b=this.b;b.wb=a;WH(b)};_.lh=function(a){dK(this.b,a)};_.mh=function(a){this.b.Pb=a};_.nh=function(a){this.b.Qb=a};_.oh=function(a){var b=this.b;b.Wb=a;b.F=ZG(b,!1)};_.ph=function(a){this.b.Yb=a};_.qh=function(a,b){sy(this.d,a,b);BK(this)};_.rh=function(a,b,c){c&&sy(this.c,a,b);sy(this.d,a,b);BK(this)};\n_.sh=function(a,b){ty(this.d,a,b);BK(this)};_.th=function(a,b,c){c&&ty(this.c,a,b);ty(this.d,a,b);BK(this)};_.uh=function(a){MG(this.b,a)};_.vh=function(a,b){var c=this.b,d;c.q=!1;d=c.sc;c.sc=!1;c.uc=new ZJ(c,a);c.sc=d;c.k=253;wu(c,b);NF(c)};_.qe=function(a){Ay(this.c.pb,a)};_.wh=function(a){this.b.i=a};_.re=function(a){this.d.pb.style[Nk]=a;BK(this)};_.xh=function(a){tJ(this.b,a)};_.yh=function(){return qG(this.b)};_.a=-1;_.b=null;_.c=null;_.d=null;var GK=0;function VK(a){this.a=a}w(587,1,{},VK);\n_.pd=function(){var a,b;for(b=new Jv(this.a.d.a);b.b=a.c.length)return!1;c=a.c[a.b];g=c.getAttribute(Nk)||m;b=c.getAttribute(di)||m;f=c.getAttribute(Wi)||m;e=c.getAttribute(gi)||m;var h,j,l;l={};for(d=0;d=d&&b=a;return c?65536+((d&1023)<<10)+(e&1023):d}function wL(a,b){return 2>b||36b?b:10)?a-48:97<=a&&aa?-a:a):a}\nfunction zL(a,b){var c;c=new xL;c.d=Be+(AL(0!=a?-a:0)?yL(0!=a?-a:0):m+Zp(c));BL(0!=a?-a:0)&&CL(0!=a?-a:0,c);c.b=4;c.a=b;return c}function X(a){var b;b=new xL;b.d=Be+(AL(a)?yL(a):m+Zp(b));BL(a)&&CL(a,b);return b}function DL(a,b){var c;c=new xL;c.d=Be+(AL(a)?yL(a):m+Zp(c));BL(a)&&CL(a,c);c.b=b?8:0;return c}function EL(){var a;a=new xL;a.d=Be+(AL(0)?yL(0):m+Zp(a));BL(0)&&CL(0,a);a.b=2;return a}function FL(a){var b;b=new xL;b.d=Be+(AL(a)?yL(a):m+Zp(b));BL(a)&&CL(a,b);b.b=1;return b}\nfunction BL(a){return typeof a==cj&&0b||36c||2147483647a)return 0;if(0==a)return 32;b=~~-(~~a>>16)>>16&16;c=16-b;a=~~a>>b;b=~~(a-256)>>16&8;c+=b;a<<=b;b=~~(a-4096)>>16&4;c+=b;a<<=b;b=~~(a-16384)>>16&2;c+=b;a=~~(a<>14;return c+2-(a&~(~~a>>1))}function Hw(a){var b,c;if(0==a)return 32;c=0;for(b=1;0==(b&a);b<<=1)++c;return c}function om(a){var b,c,d;b=D(ML,Al,-1,8,1);c=(NL(),OL);d=7;if(0<=a)for(;15>=4;else for(;0>=4;b[d]=c[a&15];return PL(b,d,8)}\nfunction jI(a){var b,c;return-129a?(b=a+128,c=(QL(),RL)[b],!c&&(c=RL[b]=new QC(a)),c):new QC(a)}w(623,620,{89:1,94:1,100:1,102:1},QC);_.eQ=function(a){return G(a,100)&&a.a==this.a};_.hC=gx;_.tS=LL;_.a=0;function QL(){QL=x;RL=D(wJ,u,100,256,0)}var RL;function LH(a){return 0>=a?0-a:a}function MH(a){return 0>a?-a:a}function fn(a,b){return a>b?a:b}function Q(a){return Math.round(a)}function SL(a){return Math.sqrt(a)}function KE(){}function yv(a){this.f=a}\nw(627,139,{89:1,97:1,101:1,105:1,106:1},KE,yv);function NL(){NL=x;OL=z(ML,Al,-1,[48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122])}var OL;function IL(a){this.f=a}w(629,622,{89:1,97:1,99:1,103:1,105:1,106:1},IL);function vL(a,b){return a.charCodeAt(b)}function TL(a,b){return-1!=a.lastIndexOf(b)&&a.lastIndexOf(b)==a.length-b.length}function H(a,b){return!G(b,1)?!1:""+a==b}function wy(a,b){return a.indexOf(b)}\nfunction YE(a,b,c){return a.indexOf(b,c)}function VB(a,b){return a.lastIndexOf(b)}function yK(a,b,c){var d;for(d=0;0<=(d=c.indexOf(Zf,d));)36==c.charCodeAt(d+1)?c=c.substr(0,d-0)+Ha+zy(c,++d):c=c.substr(0,d-0)+zy(c,++d);return a.replace(RegExp(b,Oh),c)}\nfunction UL(a,b){for(var c=RegExp(b,Oh),d=[],e=0,f=a,g=null;;){var h=c.exec(f);if(null==h||f==m){d[e]=f;break}else d[e]=f.substring(0,h.index),f=f.substring(h.index+h[0].length,f.length),c.lastIndex=0,g==f&&(d[e]=f.substring(0,1),f=f.substring(1)),g=f,e++}if(0ea&&a[a.length-1]>ea?a:a.replace(/^(\\s*)/,m).replace(/\\s*$/,m)}function PL(a,b,c){a=a.slice(b,c);return String.fromCharCode.apply(null,a)}\nfunction VL(a,b,c){if(128>c)return a[b]=~~((c&127)<<24)>>24,1;if(2048>c)return a[b++]=~~((~~c>>6&31|192)<<24)>>24,a[b]=~~((c&63|128)<<24)>>24,2;if(65536>c)return a[b++]=~~((~~c>>12&15|224)<<24)>>24,a[b++]=~~((~~c>>6&63|128)<<24)>>24,a[b]=~~((c&63|128)<<24)>>24,3;if(2097152>c)return a[b++]=~~((~~c>>18&7|240)<<24)>>24,a[b++]=~~((~~c>>12&63|128)<<24)>>24,a[b++]=~~((~~c>>6&63|128)<<24)>>24,a[b]=~~((c&63|128)<<24)>>24,4;if(67108864>c)return a[b++]=~~((~~c>>24&3|248)<<24)>>24,a[b++]=~~((~~c>>18&63|128)<<\n24)>>24,a[b++]=~~((~~c>>12&63|128)<<24)>>24,a[b++]=~~((~~c>>6&63|128)<<24)>>24,a[b]=~~((c&63|128)<<24)>>24,5;throw new an("Character out of range: "+c);}function xy(a){var b;return 65536<=a?(b=56320+(a-65536&1023)&65535,String.fromCharCode(55296+(~~(a-65536)>>10&1023)&65535)+String.fromCharCode(b)):String.fromCharCode(a&65535)}\nfunction WL(a){var b,c,d,e,f;e=a.length;for(d=b=0;dc?++b:2048>c?b+=2:65536>c?b+=3:2097152>c?b+=4:67108864>c&&(b+=5);b=D(XL,zl,-1,b,1);for(d=f=0;da||a>=b)&&pM(a,b)}function pM(a,b){throw new tL("Index: "+a+", Size: "+b);}w(645,638,yl);\n_.Fh=function(){throw new eF("Add not supported on this list");};_.zh=function(a){this.Fh(this.Yf(),a);return!0};_.eQ=function(a){return oM(this,a)};_.hC=function(){var a,b,c;b=1;for(a=this.Ce();a.be();)c=a.ce(),b=31*b+(null==c?0:Yp(c)),b=~~b;return b};_.Ce=function(){return new Jv(this)};_.Hh=function(){return this.Ih(0)};_.Ih=function(a){return new qM(this,a)};_.Jh=function(){throw new eF("Remove not supported on this list");};function nM(a){return a.b=a.d.Yf())throw new az;return a.d.Gh(a.c=a.b++)}function kM(a){if(0>a.c)throw new JB;a.d.Jh(a.c);a.b=a.c;a.c=-1}function Jv(a){this.d=a}w(646,1,{},Jv);_.be=function(){return nM(this)};_.ce=function(){return Kv(this)};_.de=function(){kM(this)};_.b=0;_.c=-1;_.d=null;function qM(a,b){var c;this.d=this.a=a;c=a.Yf();(0>b||b>c)&&pM(b,c);this.b=b}w(647,646,{},qM);_.Kh=function(){return 0=this.b)throw new az;return this.a.Gh(this.c=--this.b)};_.a=null;\nfunction rM(a){a=new hM(a.b.a);return new sM(a)}function tM(a,b){this.a=a;this.b=b}w(648,640,Pl,tM);_.Ah=uM;_.Ce=function(){return rM(this)};_.Yf=function(){return this.b.a.d};_.a=null;_.b=null;function sM(a){this.a=a}w(649,1,{},sM);_.be=function(){return nM(this.a.a)};_.ce=function(){return(this.a.b=Kv(this.a.a)).Ch()};_.de=function(){jM(this.a)};_.a=null;function vM(a){a.b=D(wM,u,0,0,0)}function WD(a,b,c){(0>b||b>a.c)&&pM(b,a.c);a.b.splice(b,0,c);++a.c}\nfunction Qm(a,b){yq(a.b,a.c++,b);return!0}function Nx(a,b){AD(b,a.c);return a.b[b]}function QA(a,b){for(var c=0;ca.c&&yq(b,a.c,null);return b}\nfunction Nm(){vM(this)}function FD(a){vM(this);this.b.length=a}function UC(a){vM(this);a=fw(a.b,a.c);Array.prototype.splice.apply(this.b,[0,0].concat(a));this.c=this.b.length}w(653,645,sl,Nm,FD,UC);_.Fh=function(a,b){WD(this,a,b)};_.zh=function(a){return Qm(this,a)};_.vg=function(){this.b=D(wM,u,0,0,0);this.c=0};_.Ah=function(a){return-1!=QA(this,a)};_.Gh=function(a){return Nx(this,a)};_.Vf=function(){return 0==this.c};_.Jh=function(a){return xM(this,a)};_.Bh=function(a){return $m(this,a)};_.Yf=Kt;\n_.c=0;function Xv(){Xv=x;Yv=new yM}var Yv;function yM(){}w(656,645,hm,yM);_.Ah=hK;_.Gh=function(){throw new Yy;};_.Yf=function(){return 0};function zM(){this.a=new Date}function AM(a){return 10>a?yc+a:m+a}w(659,1,{89:1,93:1,94:1,107:1},zM);_.eQ=function(a){return G(a,107)&&Qw(J(this.a.getTime()),J(a.a.getTime()))};\n_.hC=function(){var a;a=J(this.a.getTime());var b,c,d,e;c=32;d=a.h&1048575;22>c?(e=~~d>>>c,b=~~a.m>>c|d<<22-c,c=~~a.l>>c|a.m<<22-c):44>c?(e=0,b=~~d>>>c-22,c=~~a.m>>c-22|a.h<<44-c):(b=e=0,c=~~d>>>c-44);b=yw(c&4194303,b&4194303,e&1048575);a=yw(a.l^b.l,a.m^b.m,a.h^b.h);return P(a)};\n_.tS=function(){var a,b;b=-this.a.getTimezoneOffset();a=(0<=b?lb:m)+~~(b/60);b=10>(0>b?-b:b)%60?yc+(0>b?-b:b)%60:m+(0>b?-b:b)%60;return(BM(),CM)[this.a.getDay()]+ea+DM[this.a.getMonth()]+ea+AM(this.a.getDate())+ea+AM(this.a.getHours())+fd+AM(this.a.getMinutes())+fd+AM(this.a.getSeconds())+" GMT"+a+b+ea+this.a.getFullYear()};_.a=null;function BM(){BM=x;CM=z(rw,u,1,"Sun,Mon,Tue,Wed,Thu,Fri,Sat".split(","));DM=z(rw,u,1,"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(","))}var CM,DM;\nfunction Hv(a,b){return null==E(a.a,b,a)}function Gv(){this.a=new Ip}w(661,640,{89:1,93:1,112:1},Gv);_.zh=function(a){return Hv(this,a)};_.Ah=uM;_.Vf=function(){return 0==this.a.d};_.Ce=function(){return rM(new tM(this.a,new jF(this.a)))};_.Bh=function(a){return null!=Wv(this.a,a)};_.Yf=iM;_.tS=function(){return fM(new tM(this.a,new jF(this.a)))};_.a=null;function bF(a,b){this.a=a;this.b=b}w(665,643,Nl,bF);_.Ch=gx;_.Dh=Lz;_.Eh=function(a){var b;b=this.b;this.b=a;return b};_.a=null;_.b=null;\nfunction az(){}w(666,139,{89:1,97:1,105:1,106:1,111:1},az);function EM(a){var b,c;b=a.b;c=a.d.length;if(ba.j&&(++a.j,a.p[a.j]=b)}function MM(a){var b;b=new DJ;b.f=a.f;b.d=a.d;b.q=a.q;b.r=a.r;b.s=a.s;b.n=a.n;b.e=a.e;b.p=a.p.slice();b.j=a.j;b.c=a.c;b.a=a.a;b.b=a.b;b.i=a.i;b.o=a.o;b.k=a.k;return b}function dJ(a){return-99199!=a.f?a.f:0}function NM(a){return 4<=a.o&&2==a.j}\nfunction TG(a,b,c){a.q+=b;a.r+=c}function KG(a){var b;b=-99199!=a.f;a.f=-99199;return b}function DJ(){KM();this.p=FH(7)}w(686,1,{115:1},DJ);_.a=3;_.b=null;_.c=0;_.d=0;_.e=null;_.f=-99199;_.i=0;_.j=0;_.k=0;_.n=0;_.o=0;_.q=0;_.r=0;_.s=0;var LM;function PJ(a,b){var c;c=OM(a);return 0\\\\.]+$",2);ZM=new JM("\\\\s+",2)}\nfunction oI(a){WM();var b,c,d,e;this.i=this.f=null;this.j=0;this.e=!1;this.a=this.c=null;var f,g,h;if(null==a||0==a.length)c=0;else{g=1;f=a.length;for(h=0;h=this.j?this.b=yy(a):this.b=a;c=new HM(ZM,this.b);this.d=c.b.a.test(c.a);do if(4a.indexOf("j")&&((this.e=0=f.length)e=0;else{for(h=0,j=f.length;ho&&(o=0.001);r=g/o;e=f/o;l=FH(4);for(h=0;4>h;++h)d[h]==c||0>=d[h]||(0==l[1]?l[1]=d[h]:0==l[2]?l[2]=d[h]:0==l[3]&&(l[3]=d[h]));n=FH(4);d=FH(4);for(h=1;3>=h;++h)3==h&&0==l[3]||(f=(a.b[l[h]].q-a.b[b].q)*e+(a.b[l[h]].r-a.b[b].r)*r,g=(a.b[l[h]].r-a.b[b].r)*e-(a.b[l[h]].q-a.b[b].q)*r,o=Math.sqrt(f*f+g*g),0.001>o&&(o=0.001),n[h]=g/o,d[h]=f/o);a=CN(n[1],d[1],n[2],d[2]);0b?(j[1]=l[1],j[2]=l[3],j[3]=l[2]):0>a&&0d?(j[1]=l[2],j[2]=l[3],j[3]=l[1]):0>d&&0b&&0>a&&(j[1]=l[3],j[2]=l[2],j[3]=l[1])):0j&&(j=0.001);g/=j;f/=j;l=j+25*Math.cos(1.0471975511965976);o=25*Math.sin(1.0471975511965976);h=FJ(a,b,d);if(3==a.c[h].c||204==a.k.k||1!=a.c[h].c&&(203==a.k.k||204==a.k.k)||a.n)l=j+25,o=0;0o?o=-o:0>c&&0j&&(j=0.001),nJ(a,a.p,a.b[b].q+25*f/j,a.b[b].r+25*g/j),0==sJ(a,a.p,1,a.p)||h==a.b[b].j);++h);break;default:return--a.p,wu(a.k,"Are you trying to draw an hedgehog ?"),a.k.cb=9,!1}b=EJ(a,a.v,a.p,1);203==a.k.k&&(b.c=2);204==a.k.k&&\n(b.c=3);201==a.k.k&&lJ(a,a.q);a.z=a.b[a.p].q;a.A=a.b[a.p].r;return e}function fJ(a,b){var c,d;if(!b||0==b.c)return m;d=m;d+="M V30 BEGIN COLLECTION"+(bG(),da);d+=pf+a+" [ATOMS=("+b.c;for(c=new Jv(b);c.bj&&(j=0.001);1>LH((a.b[b].r-a.b[e].r)*(g/j)+(a.b[b].q-a.b[e].q)*(h/j))?(g=a.b[b].q-a.b[e].q,h=a.b[b].r-a.b[e].r,j=Math.sqrt(g*g+h*h),0.001>j&&(j=0.001),b=h/j,g/=j,d[0]=a.b[e].q+j*g-c*b,d[1]=a.b[e].r+c*g+j*b):(g=(a.b[e].q+a.b[f].q)/2,e=(a.b[e].r+a.b[f].r)/2,g=a.b[b].q-g,h=a.b[b].r-e,j=Math.sqrt(g*g+h*h),0.001>j&&(j=0.001),d[0]=a.b[b].q+c*g/j,d[1]=a.b[b].r+c*h/j)}\nfunction XI(a){var b,c,d,e,f,g,h,j,l,o,n,r,t,y;o=-1;j=6;switch(a.k.k){case 206:j=3;break;case 207:j=4;break;case 208:case 221:case 223:j=5;break;case 210:case 209:j=6;break;case 211:j=7;break;case 212:j=8;break;case 229:j=9}f=6.283185307179586/j;l=SL(312.5/(1-Math.cos(f)));if(0a.b[a.v].j)JN(a,j,f,l);else if(!a.k.Bb&&!a.k.rc)o=a.v,YI(a,a.v,0),a.v=a.p,JN(a,j,f,l);else{a.k.rc=!1;if(209==a.k.k||221==a.k.k||223==a.k.k){wu(a.k,"ERROR - cannot add aromatic spiro ring !");a.k.cb=9;return}for(d=\n1;d<=a.b[a.v].j;++d)if(b=a.c[FJ(a,a.v,a.b[a.v].p[d])].c,2n&&(n=0.001);g/=n;e/=n;for(d=1;d<=j;++d)h=mJ(a,null),r=f*d+1.5707963267948966,rJ(h,b[0]+l*(Math.sin(r)*e-Math.cos(r)*g),b[1]+l*(Math.cos(r)*e+Math.sin(r)*g))}else if(0n&&(n=0.001);g/=n;e/=n;h=n/2;r=l*Math.sin(0.5*(3.141592653589793-f));n=1;0<(a.b[d].r-a.b[b].r)*e-(a.b[d].q-a.b[b].q)*g&&(r=-r,n=0);t=a.b[b].q+h*e-r*g;y=a.b[b].r+r*e+h*g;for(d=1;d<=j;++d)h=mJ(a,null),r=f*(d+0.5)+3.141592653589793*n,rJ(h,t+l*(Math.sin(r)*e-Math.cos(r)*g),y+l*(Math.cos(r)*e+Math.sin(r)*g)),1==n?(d==j&&rJ(h,a.b[b].q,a.b[b].r),\nd==j-1&&rJ(h,a.b[c].q,a.b[c].r)):(d==j-1&&rJ(h,a.b[b].q,a.b[b].r),d==j&&rJ(h,a.b[c].q,a.b[c].r))}else{b=0.5;6==j&&(b=0);for(d=1;d<=j;++d)h=mJ(a,null),r=f*(d-b),rJ(h,a.z+l*Math.sin(r),a.A+l*Math.cos(r))}b=j;l=0;for(f=1;f<=b;++f)AJ(a,null),l=a.p-b+f,a.b[l].j=2,a.c[a.q].i=l,a.c[a.q].j=l+1;a.c[a.q].j=a.p-b+1;if(209==a.k.k){if(a.c[a.q-4].c=2,a.c[a.q-2].c=2,a.c[a.q].c=2,0e&&ed;--f)if(0g&&(g=0.001),e/=g,f/=g);l=a.b[a.v].q+d*f;o=a.b[a.v].r+d*e;for(g=1;g<=b;++g)h=mJ(a,null),j=c*g-1.5707963267948966,rJ(h,l+d*(Math.sin(j)*f-Math.cos(j)*e),o+d*(Math.cos(j)*f+Math.sin(j)*e))}function IN(a,b){var c,d;0==b&&(b=a.p);for(c=a.p;c>a.p-b;--c)d=sJ(a,c,1,a.p),0!=d&&TG(a.b[c],6,6)}\nfunction FJ(a,b,c){var d,e,f;for(e=1;e<=a.q;++e)if(d=a.c[e],f=d.i,d=d.j,f==b&&d==c||f==c&&d==b)return e;return 0}function hI(a){var b;for(b=1;b<=a.q;++b)if(1==a.c[b].c&&0=c||0>=d?a.s=!0:(b=PG(a),c=c/2-b.a,b=d/2-b.b,a.k.Ob||uJ(a,c,b),UG(a))}\nfunction TI(a,b,c){var d,e,f;if(1==c)return a.b[b].n+=1,!0;if(-1==c)return a.b[b].n+=-1,!0;e=a.b[b].n;f=a.b[b].i;d=a.b[b].o;-1==d&&0==c&&(0==a.b[b].n?a.b[b].n=1:1==a.b[b].n?a.b[b].n=-1:-1==a.b[b].n&&(a.b[b].n=0));switch(a.b[b].a){case 1:0==d&&(0==a.b[b].n?a.b[b].n=1:1==a.b[b].n?a.b[b].n=-1:a.b[b].n=0);break;case 2:2d&&(0==\na.b[b].n?a.b[b].n=-1:-1==a.b[b].n?a.b[b].n=1:1==a.b[b].n&&(a.b[b].n=0));break;case 4:case 7:3d&&0==a.b[b].n?a.b[b].n=1:3>d&&1==a.b[b].n?a.b[b].n=-1:3>d&&-1==a.b[b].n&&(a.b[b].n=0);break;case 5:case 8:case 13:2d&&0==a.b[b].n?a.b[b].n=-1:\n2>d&&-1==a.b[b].n?a.b[b].n=1:2>d&&1==a.b[b].n&&(a.b[b].n=0);break;case 9:case 10:case 11:case 12:0==d&&0==a.b[b].n?a.b[b].n=-1:0==d&&-1==a.b[b].n?a.b[b].n=0:wu(a.k,"Charge change not possible on the halogen !");break;case 32:wu(a.k,"Use X button to change charge on the X atom !")}if(0e&&eb?e=2:0>a&&0>b?e=3:0>a&&0<=b&&(e=4);0<=c&&0<=d?f=1:0<=c&&0>d?f=2:0>c&&0>d?f=3:0>c&&0<=d&&(f=4);if(ef)return-1;switch(e){case 1:case 4:return ac?1:-1}return 0}function RJ(a){KN(a);UG(a);SJ(a)}\nfunction PG(a){var b,c,d,e,f,g;b=new UM;f=9999;d=-9999;g=9999;e=-9999;for(c=1;c<=a.p;++c)a.b[c].qd&&(d=a.b[c].q),a.b[c].re&&(e=a.b[c].r);b.a=f+(d-f)/2;b.b=g+(e-g)/2;b.c=d-f;b.d=e-g;25>b.c&&(b.c=25);25>b.d&&(b.d=25);return b}function HN(a,b,c){var d,e;e=0;for(d=1;d<=a.p;++d)d>=b&&d<=c||0!=sJ(a,d,b,c)&&++e;return e}function EJ(a,b,c,d){var e;e=AJ(a,null);BJ(a.b[b],c);BJ(a.b[c],b);e.i=b;e.j=c;HJ(e,a.b);e.c=d;return e}\nfunction mJ(a,b){++a.p;b?a.b[a.p]=MM(b):a.b[a.p]=new DJ;return a.b[a.p]}function KH(a,b,c,d,e,f){var g;g=a.b[b].q-c/2;f||(g-=d-c);a=a.b[b].r-~~(e/2);return new LN(g-1-2,a-2,d+1+4,e+4)}function AJ(a,b){var c;++a.q;c=new SM;b&&TM(c,b);return a.c[a.q]=c}\nfunction aJ(a,b,c){var d,e,f,g,h,c=cJ(a,b,c,!1);e=-1.7976931348623157E308;d=1.7976931348623157E308;for(b=1;b<=a.p;++b)a.b[b].r>e&&(e=a.b[b].r),a.b[b].qa.b[b].n?f=4-a.b[b].n:0>a.b[b].n&&-4=g&&(h=g)),\ng=$I(h,2)+$I(f,3)+" 0 0 0 0 0 0 0",f=LJ(a,b),g+=$I(f,3),c+=g+ha+(bG(),da);for(b=1;b<=a.q;++b)d=a.c[b],g=e=d.c,1==a.c[b].c?g=1:2==a.c[b].c&&(g=2),f=$I(d.i,3)+$I(d.j,3),h=0,1==e&&1==d.f?h=1:1==e&&2==d.f&&(h=6),1==e&&3==d.f&&(h=1,f=$I(d.j,3)+$I(d.i,3)),1==e&&4==d.f&&(h=6,f=$I(d.j,3)+$I(d.i,3)),c+=f+$I(g,3)+$I(h,3)+ia+(bG(),da);for(b=1;b<=a.p;++b)0!=a.b[b].n&&(c+="M CHG 1"+$I(b,4)+$I(a.b[b].n,4)+(bG(),da)),0!=a.b[b].d&&(c+="M ISO 1"+$I(b,4)+$I(a.b[b].d,4)+(bG(),da));return c+=kf+(bG(),da)}\nfunction uG(a,b){var c,d,e,f,g,h,j;g=j=0;for(h=1;h<=a.q;++h)e=a.c[h],c=e.i,d=e.j,c!=b&&d!=b?(++j,f=a.c[j],TM(f,e),f.i=c,c>b&&--f.i,f.j=d,d>b&&--f.j):g+=e.c;a.q=j;for(h=b;hb&&--c,a.b[h].p[++d]=c);a.b[h].j=d}}\nfunction wG(a,b){var c,d,e,f;c=a.c[b].i;d=a.c[b].j;for(e=b;ea.b[b].a&&0==a.b[d].d){if(0!=(-99199!=a.b[d].f?a.b[d].f:0))continue a;b=FJ(a,d,b);if(1==a.c[b].c&&(0==a.c[b].f||!a.k.tc))uG(a,d),c=!0}return c}function MN(a,b){var c,d,e,f,g;g=z(B,q,-1,[0,0]);for(e=1,f=0;e<=a.b[b].j;++e)c=a.b[b].p[e],d=FJ(a,b,c),2!=a.c[d].c&&(g[f++]=c);return g}\nfunction KN(a){var b,c,d;for(d=1;d<=a.p;++d)a.b[d].j=0;for(d=1;d<=a.q;++d)b=a.c[d].i,c=a.c[d].j,BJ(a.b[b],c),BJ(a.b[c],b)}\nfunction OJ(a,b,c){var d,e,f,g,h,j,l,o,n;a.d=FH(a.q+1);n=[];for(j=1;j<=a.p;++j){n[j]=!1;b[j]=!1;a:{d=void 0;for(d=1;d<=a.b[j].j;++d)if(c[FJ(a,j,a.b[j].p[d])]){d=!0;break a}d=!1}if(d&&!(3d&&(d=c);return d}\nfunction JH(a,b){var c;c=(bG(),iG)[a.b[b].a];32==a.b[b].a&&(c=a.b[b].e);return c}function GJ(a,b){a.b[b].j+=-1}function PH(a,b,c){var d,e,f,g,h;h=1;a.a=FH(a.p+1);for(e=a.a[b]=1;e<=a.b[b].j;++e)d=a.b[b].p[e],d!=c&&(a.a[d]=++h);for(g=!1;;){for(d=1;d<=a.p;++d){g=!1;if(0~~(c/2)+24?3:2}function DG(a,b){var c,d,e,f,g,h,j;c=PG(a);d=c.a;e=c.b;g=Math.sin(3.141592653589793*b/180);c=Math.cos(3.141592653589793*b/180);for(f=1;f<=a.p;++f)h=a.b[f].q*c+a.b[f].r*g,j=-a.b[f].q*g+a.b[f].r*c,rJ(a.b[f],h,j);c=PG(a);uJ(a,d-c.a,e-c.b)}\nfunction JJ(a){var b,c,d,e,f;e=f=0;for(d=1;d<=a.q;++d)b=a.b[a.c[d].i].q-a.b[a.c[d].j].q,c=a.b[a.c[d].i].r-a.b[a.c[d].j].r,f+=Math.sqrt(b*b+c*c);0=g;++g)if(H(f,(bG(),iG)[g])){f=g;break b}f=32}VI(a,b,f);32==a.b[b].a&&(a.b[b].e=d);c+=\nea;d=0;0=e&&(d=e-48));32==a.b[b].a&&(a.b[b].i=d)}}}function FI(a,b,c){var d,e;a.i=1;c&&(a.i=-1);b=new tF(b);try{for(;b.j=mF(b,b.a),b.jc||6a.b[c].j&&2>a.b[d].j)e.f=0,wu(a.k,"Stereomarking meaningless on this bond !");else switch(e.f){case 0:a.b[d].j<=a.b[c].j?e.f=1:e.f=3;break;case 1:e.f=2;break;case 2:2h||3c[b]&&(j=f,f=b,b=j);j=MN(a,f);h=j[0];l=j[1];e=0;o=!1;0c[l]&&(j=h,h=l,l=j);j=FJ(a,f,h);0!=d[j]?e=h:1==a.c[j].c&&5!=a.d[j]&&(e=h);0==e&&0c[f]&&(o=!0);j=MN(a,b);l=j[0];g=j[1];h=0;0g&&(g=0.001),j/=g,g=l/g,l=(a.b[e].r-a.b[f].r)*g-(a.b[e].q-a.b[f].q)*j,t=(a.b[h].r-a.b[f].r)*g-(a.b[h].q-a.b[f].q)*j,2>(0>=l?0-l:l)||2>(0>=t?0-t:t))wu(a.k,"Not unique E/Z geometry !");else{g=\nFJ(a,e,f);h=FJ(a,h,b);r=1;if(0==d[g]){for(n=1;n<=a.b[e].j;++n)if(b=a.b[e].p[n],b!=f&&(j=FJ(a,e,b),0!=d[j])){c[b]>c[e]?r=-d[j]:r=d[j];break}d[g]=r}0==d[h]&&(0l&&0>t?d[h]=-d[g]:d[h]=d[g],o&&(d[h]=-d[h]))}}}function UJ(a,b,c){var d;d=a.c[b].f;return 1>d||4g?e.i=3-g-c.b[d].n:4==g?(c.b[d].n=-1,e.i=0):5g?0c.b[d].n?e.i=2-g-c.b[d].n:e.i=4-g:(c.b[d].n=g-4,e.i=4-g+c.b[d].n);break;case 4:case 7:3>g?e.i=3-g+c.b[d].n:3==g?0>c.b[d].n?(c.b[d].n=0,e.i=0):0c.b[d].n?(c.b[d].n=0,e.i=0):0g?e.i=2-g+c.b[d].n:2==g?0>c.b[d].n?(c.b[d].n=0,e.i=0):0f;)if(0e.i&&(e.i=0)}}}function WG(a){zN(this);this.b[0]=new DJ;this.t=this.q=this.p=0;this.k=a}\nfunction EI(a,b){var c,d,e,f,g,h,j,l,o;WG.call(this,a);if(null!=b&&(f=m,l=CI(b),null!=l)){o=new sF(b,l,!0);for(g=1;4>=g;++g)f=DI(o,l);e=jI($E(yy(f.substr(0,3)),10)).a;j=jI($E(yy(f.substr(3,3)),10)).a;g=0;try{g=jI($E(yy(f.substr(14,1)),10)).a}catch(n){if(n=Iq(n),!G(n,97))throw n;}EG(this,(FG(),1==g?GG:HG));for(g=1;g<=e;++g){d=mJ(this,null);f=DI(o,l);d.q=(new JL(GL(yy(f.substr(0,10))))).a;d.r=-(new JL(GL(yy(f.substr(10,10))))).a;d=34;34>f.length&&(d=f.length);d=yy(f.substr(31,d-31));WI(this,g,d);62<=\nf.length&&(h=yy(f.substr(60,3)),0=h))){var r=void 0,r=OM(d);d=0d&&(d=0);this.b[g].d=d}if(39<=f.length&&(h=yy(f.substr(37,2)),0=h))){f=0;switch(h){case 1:f=3;break;case 2:f=2;break;case 3:f=1;break;case 4:f=0;break;case 5:f=-1;break;case 6:f=-2;break;case 7:f=-3}this.b[g].n=f}}for(g=1;g<=j;++g)e=AJ(this,null),f=\nDI(o,l),e.i=jI($E(yy(f.substr(0,3)),10)).a,e.j=jI($E(yy(f.substr(3,3)),10)).a,d=jI($E(yy(f.substr(6,3)),10)).a,1==d?c=1:2==d?c=2:3==d?c=3:c=9,h=0,11b.length)this.p=0;else{try{j=new rF(b);g=jI($E(pF(j),10)).a;h=jI($E(pF(j),10)).a;for(f=1;f<=g;++f)o=pF(j),c=(n=mJ(this,null),WI(this,this.p,o),n),c.q=(new JL(GL(pF(j)))).a,c.r=-(new JL(GL(pF(j)))).a;for(f=1;f<=h;++f){d=AJ(this,null);d.i=jI($E(pF(j),10)).a;d.j=jI($E(pF(j),10)).a;e=jI($E(pF(j),10)).a;l=0;if(-1==e)l=e=1;else if(-2==e)e=1,l=2;else if(-5==e)e=2,l=10;else if(11==\ne||12==e||13==e||14==e)l=e,e=9;d.c=e;d.f=l}KN(this);JJ(this);SG(this)}catch(r){r=Iq(r);if(G(r,97)){r.Cd();this.p=0;return}throw r;}a&&!a.bb&&LG(this);RJ(this)}}function HI(a,b,c){var d,e,f,g;WG.call(this,a);g=FH(b.p+1);for(e=1;e<=b.p;++e)b.a[e]==c&&(mJ(this,b.b[e]),g[e]=this.p);for(e=1;e<=b.q;++e)if(a=b.c[e].i,d=b.c[e].j,!(b.a[a]!=c&&b.a[d]!=c)&&!(b.a[a]!=c||b.a[d]!=c))f=AJ(this,b.c[e]),f.i=g[a],f.j=g[d];this.i=b.i;KN(this)}\nfunction NN(a,b,c){var d,e,f;WG.call(this,a);f=FH(b.p+1);for(d=1;d<=b.p;++d)b.b[d].k==c&&(mJ(this,b.b[d]),f[d]=this.p);for(d=1;d<=b.q;++d)a=b.c[d],a.e==c&&(e=AJ(this,a),e.i=f[a.i],e.j=f[a.j]);EG(this,b.f);this.i=b.i;KN(this)}\nfunction bJ(a,b,c){var d,e,f,g;WG.call(this,a);for(a=1;a<=c;++a)this.p+=b[a].p,this.q+=b[a].q,this.t+=b[a].t,b[a].f.a&&EG(this,(FG(),FG(),GG));this.b=D(AN,u,115,this.p+1,0);this.c=D(BN,u,116,this.q+1,0);f=g=e=0;for(a=1;a<=c;++a){for(d=1;d<=b[a].p;++d)++e,this.b[e]=MM(b[a].b[d]);for(d=1;d<=b[a].q;++d)++g,this.c[g]=RM(b[a].c[d]),this.c[g].i+=f,this.c[g].j+=f;f=e}KN(this)}\nfunction sG(a){var b;zN(this);this.k=a.k;this.p=a.p;this.q=a.q;this.t=a.t;this.b=D(AN,u,115,this.p+1,0);for(b=0;b(0>=a?0-a:a)&&(a=0);a=P(J(Q(a*Math.pow(10,c))))/Math.pow(10,c);e=m+(new JL(a)).a;d=wy(e,xy(46));0>d&&(e+=ic,d=wy(e,xy(46)));f=e.length;for(a=1;a<=c-f+d+1;++a)e+=yc;if(0==b)return e;e.length>b&&(e=Md);c=m;for(a=1;a<=b-e.length;++a)c+=ea;return c+e}function CI(a){var b;b=new sF(a,da,!0);if(4b&&(d=Md);e=m;for(c=1;c<=b-d.length;++c)e+=ea;return e+d}function DI(a,b){for(var c,d;a.j=mF(a,a.a),a.j>16&255)),nw(0.7*(~~g.d>>8&255)),nw(0.7*(g.d&255))),DH(a.a,g)):(h=new sm(nw(0.7*(~~g.d>>16&255)),nw(0.7*(~~g.d>>8&255)),nw(0.7*(g.d&255))),f=pD(g),DH(a.a,h));g=P(J(Q(R)));d=P(J(Q(d*R)));e=P(J(Q(e*R)));b=P(J(Q(b*R)));c=P(J(Q(c*R)));d-=g;e-=g;lH(a.a,b+g,c+g,d-g,e-g);DH(a.a,h);lH(a.a,b,c,d,g);lH(a.a,b,c+g,g,e);DH(a.a,f);lH(a.a,b+d,c,g,e+g);lH(a.a,b+1,c+e,d,g)}\nfunction gH(a,b,c,d,e){a=a.a;b=P(J(Q(b*R)));c=P(J(Q(c*R)));d=P(J(Q(d*R)));e=P(J(Q(e*R)));hH(a,!0);iH(a,jH(a,b,c,d,e))}function rH(a,b,c,d){var e,f,g;f=D(B,q,-1,d,1);g=D(B,q,-1,d,1);for(e=0;e=b||b>=KC(this.a)-1||0>=c||c>=LC(this.a)-1)&&(this.a.j=!1);this.a.j?pJ(this.a.c,a,b,c):kI(this.a.c,a,b,c);JA(this.a.pb)};_.a=null;function jO(a){this.a=a}w(737,1,{},jO);_.od=function(a){this.a.j=!1;Ct(a);Dt(a);xJ(this.a.c)};_.a=null;\nfunction kO(a){this.a=a}w(738,1,{},kO);_.nd=function(){this.a.j&&(this.a.j=!1)};_.a=null;function lO(a){this.a=a}w(739,1,{},lO);_.a=null;function mO(a){this.a=a}w(740,1,{},mO);_.a=null;function ZN(){XN.call(this);this.pb.style[Nk]=Hc;this.pb.style[di]=Hc}w(741,732,tl,ZN);function nO(a){this.a=a}w(742,1,{},nO);_.Yd=function(){Tq((Qq(),Rq),new pO(this))};_.a=null;function pO(a){this.a=a}w(743,1,{},pO);_.pd=function(){this.a.a.c&&(IC(this.a.a.c),lK(this.a.a))};_.a=null;\nfunction qO(a,b){var c;c=b.a;c.e=4;return gJ(a.a.c,c,b.d,b.e)}function aO(a){this.a=a}w(744,1,{},aO);_.Qh=function(a){return qO(this,a)};_.a=null;function pv(a,b){kI(a.a.c,b.a,b.d,b.e);return gJ(a.a.c,b.a,b.d,b.e)}function bO(a){this.a=a}w(745,1,{},bO);_.Qh=function(a){return pv(this,a)};_.a=null;function cO(a){this.a=a}w(746,1,{},cO);_.Qh=function(a){return pJ(this.a.c,a.a,a.d,a.e)};_.a=null;function dO(a){this.a=a}w(747,1,{},dO);_.Qh=function(){return xJ(this.a.c)};_.a=null;\nfunction hu(a,b){var c;c=J(Q(b.b));c=new HE(b,0,Hj,c);zG(a.a.c,c);return!0}function eO(a){this.a=a}w(748,1,{},eO);_.Qh=function(a){return hu(this,a)};var rO=_.a=null;function sO(){sO=x;rO=new $w((qx(),new px("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAEklEQVR42mM4MzPtPzJmIF0AAOqfLKHtSuV7AAAAAElFTkSuQmCC")),4,4)}function tO(){tO=x;uO={}}\nfunction vO(a,b,c){var d;c&&(b.style[Hh]=c.b+uj,d=c.a,d!=Le&&(b.style[Gh]=d),0!=(c.c&1)&&(b.style[Lh]=Eg),0!=(c.c&2)&&(b.style[Kh]=ji));a.e.style[Mk]=aj}\nfunction MD(a){var b=wO,c,d,e,f,g,h,j,l,o,n,r,t,y;c=Zp(a);c in uO?a=uO[c]:(d=$doc.getElementsByTagName("body")[0],e=$doc.createElement(ak),f=$doc.createElement(hi),f.style[sh]=(ds(),"inline"),f.style[Jk]=(Us(),"baseline"),f.style[zi]=zc,f.style[Ai]=zc,f.width=1,f.height=1,g=(sO(),rO),f.src=g.d.a,a=(h=$doc.createTextNode(Ff),vO(b,e,a),e.appendChild(h),e.appendChild(f),d.appendChild(e),j=mr(e),l=mr(e)+(e.offsetHeight||0),o=l-j,n=mr(f)+(f.offsetHeight||0)+1,r=l-n,t=n-j,d.removeChild(e),y=new xO,y.a=\nt,y.b=r,y.c=o,y),uO[c]=a);return a}function yO(){tO();var a,b,c,d,e;zs();this.a=z(rw,u,1,["monospace","sans-serif",Uj]);this.c={};this.b={};this.d=$doc.getElementsByTagName("body")[0];this.e=$doc.createElement(ak);this.e.innerHTML=this.f||m;this.e.style[Hh]="72.0px";for(b=this.a,c=0,d=b.length;c=g?h=jH(a,b,c,d,e):h=(j=f+g,l=0,jg)&&(o=1),n=b+d/2,r=c+e/2,t=d/2,y=e/2,v=EO(n,r,t,y,f),s=EO(n,r,t,y,j),A=" text { cursor: default; } <\/style>":m;b=c+d+b+rd;b!==a.q&&(a.t.pb.innerHTML=\nb||m,a.q=b);a.o=!0;a.p=!1}}function DH(a,b){(a.e=b)&&(a.f=FO(b))}function eK(a,b){var c,d,e;a.i=(c=b.b,d=b.a,e=m,12!=c&&(e=\' font-size="\'+c+\'px"\'),"Plain"!=d&&(e+=\' font-family="\'+d+ma),0!=(b.c&1)&&(e+=\'font-weight="bold"\'),0!=(b.c&2)&&(e+=\'font-style="italic"\'),e)}function CH(a,b){(a.n=b)&&b&&(a.c=\'stroke-width="\'+(b.e==nw(b.e)?m+nw(b.e):m+b.e)+na)}w(759,503,{});_.d=null;_.e=null;_.f=Bg;_.i=null;_.j=!0;_.k=null;_.o=!1;_.p=!1;_.q=m;_.r=0;_.s=0;_.t=null;_.u=null;var DO,CO;\nfunction lv(a,b){var c;c=b.a.targetTouches;return 1==c.length?(c=c[0],a.b.d=c.clientX-kr(a.o.pb)+lr(a.o.pb)+lr(a.o.pb.ownerDocument.body),a.b.e=c.clientY-mr(a.o.pb)+(a.o.pb.scrollTop||0)+(a.o.pb.ownerDocument.body.scrollTop||0),a.b.a=new oO(b),b.a.preventDefault(),!0):!1}\nfunction $N(a){this.o=a;this.b=new GO;this.c=new HO(this);Fy(this.o,new IO(this),(mv(),mv(),nv));Fy(this.o,new JO(this),(ev(),ev(),fv));Fy(this.o,new KO(this),(iv(),iv(),jv));Fy(this.o,new LO(this),(av(),av(),bv));Fy(this.o,new MO,(nu(),nu(),ou));Fy(this.o,new NO(this),(ju(),ju(),ku));Fy(this.o,new OO(this),(eu(),eu(),fu))}w(760,1,{},$N);_.a=null;_.b=null;_.c=null;_.d=!1;_.e=null;_.f=null;_.i=null;_.j=null;_.k=null;_.n=null;_.o=null;function HO(a){Sm();this.a=a}w(761,66,{},HO);\n_.zd=function(){!this.a.d&&this.a.i&&qO(this.a.i,this.a.b)};_.a=null;function IO(a){this.a=a}w(762,1,{},IO);_.a=null;function JO(a){this.a=a}w(763,1,{},JO);_.a=null;function KO(a){this.a=a}w(764,1,{},KO);_.a=null;function LO(a){this.a=a}w(765,1,{},LO);_.a=null;function MO(){}w(766,1,{},MO);function NO(a){this.a=a}w(767,1,{},NO);_.a=null;function OO(a){this.a=a}w(768,1,{},OO);_.a=null;function GO(){}w(769,1,{},GO);_.a=null;_.b=0;_.c=0;_.d=0;_.e=0;\nfunction FO(a){var b,c;c=~~a.d>>16&255;b=~~a.d>>8&255;a=a.d&255;if(0==c*b*a){if(0==c&&0==b&&0==a)return Bg;if(255==c&&0==b&&0==a)return"red";if(0==c&&255==b&&0==a)return"green";if(0==c&&0==b&&255==a)return Cg}return 255==c&&255==b&&255==a?"white":Ej+c+mb+b+mb+a+gb}function vK(){var a=$wnd.navigator.userAgent.match(/MSIE\\s+(\\d+\\.\\d+)/);return a?parseFloat(a[1]):-1}\nfunction PO(a){var b,c,d,e,f;Ly(a);d=(My(),gB(null));e=new AO;mA(e,a);Vy(d,e,d.pb);f=a.le();b=a.ke();c=vK();9<=c?(++f,++b):7==c&&G(a,39)&&(c=a.pb.textContent,2>=c.length&&(f+=8));oA(e,a);dz(d,e);return new eC(f,b)}function AF(a){try{$wnd.console.log(a)}catch(b){}}function QO(){this.pb=$doc.createElement(th);this.pb[Yg]=li;this.pb.style[lj]=ei;this.pb.style[rj]=hg;this.pb.style[Nk]=Hc;this.pb.style[di]=Hc;this.pb.setAttribute("contenteditable",Dh)}w(771,385,xl,QO);\nfunction EO(a,b,c,d,e){e*=0.017453292519943295;a+=c*Math.cos(e);b+=-d*Math.sin(e);return new zO(new JL(a),new JL(b))}function jH(a,b,c,d,e){return\'=f.k||(701==f.k?null.ji():401==f.k||402==f.k?(null.ji(),null.ji(),null.ji(),null.ji(),null.ji()):500<=f.k&&507>=f.k&&(g=null.ki,500!=g&&(g=new vu(null.ki,g,null),g.i=f.f,g.j=f.i,f=f.j&63,g.e=f&12)))}function UO(a){this.a=a}w(781,1,Kl,UO);_.pd=function(){RA(this)};_.a=null;function jE(a,b){rB(a.a,b);a.e.a=-1;a.e.b=-1}function mE(){RO();TO.call(this);this.a=new vB}w(782,774,{},mE);_.Nf=gx;_.a=null;\nfunction rE(){new Gv;var a;a:{switch(ow){case 1:case 3:case 5:case 7:a=new WO;break a}a=new XO}this.a=a}w(795,527,{},rE);_.a=null;function XO(){}w(797,1,{},XO);_.fi=function(a){a&&a&&Cq(8,new YO(a));return null};_.gi=function(a){Cq(8,new ZO(a))};function WO(){}w(796,797,{},WO);_.fi=function(){return $wnd.clipboardData.getData("Text")};_.gi=function(a){$wnd.clipboardData.setData("Text",a)};function YO(a){this.a=a}w(800,1,am,YO);_.Dd=sC;_.a=null;function ZO(a){this.a=a}w(802,1,am,ZO);_.Dd=sC;_.a=null;\nfunction du(a,b){a.onloadend=function(a){b.ag(a.target.result)}}function IF(a){this.a=a}w(807,1,{},IF);_.a=null;function FF(){}w(808,1,{},FF);function GF(){}w(809,1,{},GF);function HF(){}w(810,1,{},HF);function nE(){this.b=new sE;this.d=new SC}w(813,525,{},nE);function iI(a,b,c,d){b=ZB(b);c+=b.a;d+=b.b;rz(a.a,c,d);sz(a.a)}function YD(){RO();TO.call(this);var a=this.a=new $O;a.ab=!0;a.a.f=!0;this.a.db=!0}w(815,774,{},YD);_.Nf=gx;_.a=null;function XE(){}w(823,554,{},XE);\nfunction UE(){UE=x;var a;a=(LE(),ME["os.encoding"]);if(null!=a)try{if(H("UTF-8",a))WL(m);else if(H("ISO-8859-1",a)||H("ISO-LATIN-1",a))D(XL,zl,-1,0,1);else throw new sL(a+la);}catch(b){if(b=Iq(b),!G(b,106))throw b;}}function SD(a,b){a.a=31*a.a+nw((new JL(b)).a)}function YC(){}w(828,1,{},YC);_.hC=gx;_.a=1;\nfunction $O(){var a=(zz(),Cz);tz.call(this,!0,Fi);this.U=a.a;this.a=new aP(this);this.a.d=!0;jz(this,this.a);this.ab=!0;this.a.f=!0;if(-1==this.lb){var a=this.pb,b=1|(this.pb.__eventBits||0);Dx();ny(a,b)}else this.lb|=1;ir(hr(this.pb))[Yg]=ai;this.pb.style[Pk]="2147483647"}w(859,387,tl,$O);_.ee=function(a){Jy(this,a);1==Bx(a.type)&&oz(this,!1)};_.a=null;\nfunction aP(a){this.b=a;this.c=new Nm;this.i=new Nm;a=(UA(),TA);new LB(a.d,a.b,a.c,a.e,a.a);var b;b=$doc.createElement(gk);this.e=$doc.createElement(mk);vx(b,this.e);this.o=!0;a=(Yz(),$z());b=(wx(),xx(b));a.appendChild(b);this.pb=a;fo();this.pb.setAttribute(Gj,Jo.a);-1==this.lb?(a=this.pb,b=2225|(this.pb.__eventBits||0),Dx(),ny(a,b)):this.lb|=2225;this.pb[Yg]=$h;a=vy(this.pb)+"-vertical";qy(this.me(),a,!0);this.pb.style[kj]=Fc;this.pb.setAttribute("hideFocus",Fk);Fy(this,new SA(this),(wt(),wt(),xt))}\nw(860,427,xl,aP);_.ee=function(a){switch(Bx(a.type)){case 16:this.a=!1;break;case 32:this.a=!0}KA(this,a)};_.Oe=function(a,b){OA(this,a,b);b||this.a&&oz(this.b,!1)};_.a=!0;_.b=null;w(909,1,{});\nfunction bP(a,b,c,d){var e,f,g,h,j,l;h=(!c?b.b:fF(b,c,~~Zp(c)))[0][d.length];b=j=e=null;for(c=0,f=!h?0:h.length;c\',Ba=\'">\',Ca="#",Da="$",Ea="$$$$",Ha="$MOL\\n",Ja="$RXN",Ka="$RXN\\n\\n\\nJME Molecular Editor\\n",Ma="%",Na="&",Qa="&",Sa=">",Ya="<",cb="\'",db="(",eb=")",gb="*",kb="+",lb=",",mb=", ",qb=",modifiers=",vb="-",wb="-C#C-Me",xb="-C#CH",yb="-C#N",zb="-C(=O)N",Bb="-C(=O)OH",Cb="-C(=O)OMe",\nHb="-CCl3",Ib="-CF3",Jb="-CMe3",Qb="-NC=O",Rb="-NH-SO2-Me",Sb="-NMe2",Xb="-NO2",Yb="-OC(=O)Me",ac="-SO2-NH2",dc="-SO3H",ec="-disabled",fc="-selected",gc=".",hc="...",ic="/",sc="//",tc="/>",wc="0",Bc="0.0px",Cc="0px",Fc="1",Gc="100%",Hc="2",Ic="3",Kc="4",Lc="5",Mc="6",Vc="7",Wc="8",Xc="9",dd=":",ed=": ",hd=";",id="<",jd="<\/g>",kd="<\/svg>",qd="<\/text>",rd=\'b?{}:new fl[b],_.cM=c);for(var e=3;e=a.t+a.n;if(a.p&&!d)return d=(b-a.t)/a.n,a.td((1+Math.cos(3.141592653589793+3.141592653589793*d))/2),a.o&&a.r==c;if(!a.p&&b>=a.t&&(a.p=!0,a.sd(),!(a.o&&a.r==c)))return!1;return d?(a.o=!1,a.p=!1,a.rd(),!1):!0}w(58,1,{});_.qd=function(){this.u&&this.rd()};\n_.rd=function(){this.td((1+Math.cos(6.283185307179586))/2)};_.sd=function(){this.td((1+Math.cos(3.141592653589793))/2)};_.n=-1;_.o=!1;_.p=!1;_.q=null;_.r=-1;_.s=null;_.t=-1;_.u=!1;function xm(a,b){if(ym(a.a,b)){var c=a.a,d=a.a.s,e;e=new zm(d,a.a.k);Am(d.a,e);1==d.a.c&&Bm(d.b,16);c.q=e}else a.a.q=null}function Cm(a){this.a=a}w(59,1,{},Cm);_.a=null;w(60,1,{});w(61,1,{13:1});function Dm(){Dm=x;Em=new Fm}w(62,60,{});var Em=null;function Fm(){this.a=new Gm;this.b=new Hm(this)}w(63,62,{},Fm);\nfunction Im(){Im=x;Jm=new Gm;var a=new Km;Lm();Mm(Nm?Nm:Nm=new Om,a)}function um(a){a.b?$wnd.clearInterval(a.c):$wnd.clearTimeout(a.c);tm(Jm,a)}function Bm(a,b){if(0>b)throw new Pm("must be non-negative");a.b?$wnd.clearInterval(a.c):$wnd.clearTimeout(a.c);tm(Jm,a);a.b=!1;a.c=Qm(a,b);Am(Jm,a)}function Qm(a,b){return $wnd.setTimeout(B(function(){a.ud()}),b)}w(65,1,{});_.ud=function(){this.b||tm(Jm,this);this.vd()};_.b=!1;_.c=0;var Jm;function Hm(a){Im();this.a=a}w(64,65,{},Hm);\n_.vd=function(){var a=this.a,b,c,d,e,f;b=C(Rm,q,14,a.a.c,0);b=Sm(a.a,b);c=new Tm;for(e=0,f=b.length;ewm()-d.a;){e=!1;for(f=0;f=d&&0=b&&(c=1301+d));pt(a,c)}a=!0}a&&this.a.preventDefault()};_.Gd=function(){return ct};var ct;function qt(){qt=x;rt=new Bs(Ai,new st)}function st(){}w(267,248,gl,st);_.Dd=function(a){a.ld(this)};_.Gd=function(){return rt};var rt;\nfunction tt(){tt=x;ut=new Bs(Bi,new vt)}function vt(){}w(268,248,gl,vt);_.Dd=function(a){a.md(this)};_.Gd=function(){return ut};var ut;function wt(){wt=x;xt=new Bs(Ci,new yt)}function yt(){}w(269,248,gl,yt);_.Dd=function(a){a.nd(this)};_.Gd=function(){return xt};var xt;function zt(){zt=x;At=new Bs(Di,new Bt)}function Bt(){}w(270,248,gl,Bt);_.Dd=function(a){var b;b=this.a;Gq((Dq(),Eq),new Ct(a,a.b,b))};_.Gd=function(){return At};var At;function Dt(){Dt=x;Et=new Bs(Ei,new Ft)}function Ft(){}\nw(271,248,gl,Ft);_.Dd=function(a){a.od(this)};_.Gd=function(){return Et};var Et;function Gt(){Gt=x;Ht=new Bs(Fi,new It);new Bs(Be,new It)}function It(){}w(272,248,gl,It);_.Dd=function(a){var b,c,d,e,f;b=Math.round(-this.a.wheelDelta/40)||0;b=new Jt(a.a.i,Fs(this),Gs(this),b);f=0;for(c=Kt(a.a.i.Pc,C(Lt,q,75,0,0)),d=0,e=c.length;da.qI&&(c.tM==x||c.cM&&c.cM[1])&&(!c.cM||!c.cM[-a.qI]))throw new Tu;}return a[b]=c}w(302,1,{},Mu);_.qI=0;function Qu(){Qu=x;Ru=[];Su=[];var a=new Mu,b=Ru,c=Su,d=0,e,f;for(f in a)if(e=a[f])b[d]=f,c[d]=e,++d}var Ru,Su;function H(a,b){return null!=a&&a.cM&&!!a.cM[b]}function Fp(a){return null!=a&&a.tM!=x&&!(a.cM&&a.cM[1])}function Ip(a){return a.tM==x||a.cM&&!!a.cM[1]}\nfunction Uu(a){return null==a?null:a}function Vu(a){return~~Math.max(Math.min(a,2147483647),-2147483648)}var Wu=-1;\nfunction Xu(){var a;$stats&&Yu("com.google.gwt.useragent.client.UserAgentAsserter");a=navigator.userAgent.toLowerCase();if(-1!=a.indexOf(Vi))a=Vi;else if(-1!=a.indexOf("webkit"))a="safari";else if(-1!=a.indexOf(Gi)&&9<=$doc.documentMode)a=Uh;else if(-1!=a.indexOf(Gi)&&8<=$doc.documentMode)a="ie8";else{var b;var c=/msie ([0-9]+)\\.([0-9]+)/.exec(a);c&&3==c.length&&(b=6E3<=1E3*parseInt(c[1])+parseInt(c[2]));a=b?"ie6":-1!=a.indexOf("gecko")?"gecko1_8":"unknown"}I(Uh,a)||$wnd.alert("ERROR: Possible problem with your *.gwt.xml module file.\\nThe compile time user.agent value (ie9) does not match the runtime user.agent value ("+\na+"). Expect more errors.\\n");$stats&&Yu("com.google.gwt.user.client.DocumentModeAsserter");b=$doc.compatMode;a=z(Zu,q,1,[qe]);for(c=0;cd)$doc.createStyleSheet().cssText=a;else{f=2147483647;e=-1;for(b=0;b>22&4194303,0>a?1048575:0)}function gv(a){return fv(a.l,a.m,a.h)}function fv(a,b,c){return _=new hv,_.l=a,_.m=b,_.h=c,_}\nfunction iv(a,b){var c,d,e,f,g;if(0==b.l&&0==b.m&&0==b.h)throw new jv;if(0==a.l&&0==a.m&&0==a.h)return kv=fv(0,0,0),fv(0,0,0);if(524288==b.h&&0==b.m&&0==b.l)return c=a,524288==c.h&&0==c.m&&0==c.l?(kv=fv(0,0,0),c=gv((lv(),mv))):(kv=fv(c.l,c.m,c.h),c=fv(0,0,0)),c;g=!1;0!=b.h>>19&&(b=nv(b),g=!0);e=b.l;0!=(e&e-1)?f=-1:(d=b.m,0!=(d&d-1)?f=-1:(c=b.h,f=0!=(c&c-1)||0==c&&0==d&&0==e?-1:0==c&&0==d&&0!=e?ov(e):0==c&&0!=d&&0==e?ov(d)+22:0!=c&&0==d&&0==e?ov(c)+44:-1));c=d=e=!1;if(524288==a.h&&0==a.m&&0==a.l)if(e=\nd=!0,-1==f)a=gv((lv(),pv)),c=!0,g=!g;else return c=qv(a,f),g&&rv(c),kv=fv(0,0,0),c;else 0!=a.h>>19&&(e=!0,a=nv(a),c=!0,g=!g);if(-1!=f){c=a;d=f;f=g;g=e;e=qv(c,d);f&&rv(e);var h;22>=d?(f=c.l&(1<=d?(f=c.l,h=c.m&(1<r?j=\n!1:(o=j.l-f.l,m=j.m-f.m+(o>>22),r+=m>>22,0>r?j=!1:(j.l=o&4194303,j.m=m&4194303,j.h=r&1048575,j=!0));if(j&&(22>l?h.l|=1<l?h.m|=1<>>1;f.m=j>>>1|(o&1)<<21;f.l=m>>>1|(j&1)<<21;--l}g&&rv(h);e?(kv=nv(c),d&&(kv=vv(kv,(lv(),mv)))):kv=fv(c.l,c.m,c.h);return h}function rv(a){var b,c,d;b=~a.l+1&4194303;c=~a.m+(0==b?1:0)&4194303;d=~a.h+(0==b&&0==c?1:0)&1048575;a.l=b;a.m=c;a.h=d}\nfunction tv(a){var b;b=wv(a.h);return 32==b?(b=wv(a.m),32==b?wv(a.l)+32:b+20-10):b-12}var kv=null;function xv(a,b){return a.l==b.l&&a.m==b.m&&a.h==b.h}function K(a){var b,c,d;if(isNaN(a))return lv(),Dv;if(-9223372036854775E3>a)return lv(),Ev;if(9223372036854775E3<=a)return lv(),pv;d=!1;0>a&&(d=!0,a=-a);c=0;17592186044416<=a&&(c=Vu(a/17592186044416),a-=17592186044416*c);b=0;4194304<=a&&(b=Vu(a/4194304),a-=4194304*b);a=Vu(a);b=fv(a,b,c);d&&rv(b);return b}\nfunction Fv(a){var b,c;return-129a?(b=a+128,null==Gv&&(Gv=C(Hv,q,30,256,0)),c=Gv[b],!c&&(c=Gv[b]=ev(a)),c):ev(a)}function Iv(a){var b=Kk,c,d;c=a.h>>19;d=b.h>>19;return 0==c?0!=d||a.h>b.h||a.h==b.h&&a.m>b.m||a.h==b.h&&a.m==b.m&&a.l>b.l:!(0==d||a.h>19;d=b.h>>19;return 0==c?0!=d||a.h>b.h||a.h==b.h&&a.m>b.m||a.h==b.h&&a.m==b.m&&a.l>=b.l:!(0==d||a.h>13|(a.m&15)<<9;e=a.m>>4&8191;f=a.m>>17|(a.h&255)<<5;g=(a.h&1048320)>>8;h=b.l&8191;j=b.l>>13|(b.m&15)<<9;l=b.m>>4&8191;o=b.m>>17|(b.h&255)<<5;m=(b.h&1048320)>>8;r=c*h;y=d*h;t=e*h;u=f*h;g*=h;0!=j&&(y+=c*j,t+=d*j,u+=e*j,g+=f*j);0!=l&&(t+=c*l,u+=d*l,g+=e*l);0!=o&&(u+=c*o,g+=d*o);0!=m&&(g+=c*m);c=(r&4194303)+((y&511)<<13);r=(r>>22)+(y>>9)+((t&262143)<<4)+((u&31)<<17)+(c>>22);t=(t>>18)+(u>>5)+((g&4095)<<8)+(r>>22);return fv(c&4194303,r&\n4194303,t&1048575)}function nv(a){var b,c;b=~a.l+1&4194303;c=~a.m+(0==b?1:0)&4194303;return fv(b,c,~a.h+(0==b&&0==c?1:0)&1048575)}function uv(a,b){var c,d,e,b=b&63;22>b?(c=a.l<>22-b,e=a.h<>22-b):44>b?(c=0,d=a.l<>44-b):(d=c=0,e=a.l<b?(e=c>>b,d=a.m>>b|c<<22-b,c=a.l>>b|a.m<<22-b):44>b?(e=d?1048575:0,d=c>>b-22,c=a.m>>b-22|c<<44-b):(e=d?1048575:0,d=d?4194303:0,c>>=b-44);return fv(c&4194303,d&4194303,e&1048575)}function vv(a,b){var c,d;c=a.l-b.l;d=a.m-b.m+(c>>22);return fv(c&4194303,d&4194303,a.h-b.h+(d>>22)&1048575)}function Q(a){return a.l|a.m<<22}\nfunction Kv(a){var b,c,d;if(0==a.l&&0==a.m&&0==a.h)return wc;if(524288==a.h&&0==a.m&&0==a.l)return"-9223372036854775808";if(0!=a.h>>19)return vb+Kv(nv(a));for(c=n;!(0==a.l&&0==a.m&&0==a.h);){b=Fv(1E9);a=iv(a,b);b=n+Q(kv);if(!(0==a.l&&0==a.m&&0==a.h))for(d=9-b.length;0d||d>a.p.c)throw new Mx;b.ob==a&&(f=a.se(b),fd||d>=c.c)throw new Mx;for(--c.c;dg&&l.charAt(g)==vb&&0==l.indexOf(f)&&(e[h]=d+l.substring(g))}c.className=e.join(fa)}$x(this,this.T);ey(this);gx(Xq(this.pb),cj,!1);gx(this.T.b,b+"Content",!0)}w(369,370,zl);_.ke=function(){vx(this.T)};_.le=function(){yx(this.T)};_.ze=function(){return this.T.jb};_.ue=function(){return new by(this.T)};_.re=function(a){return this.T.re(a)};_.Ae=function(a){$x(this.T,a);ey(this)};_.T=null;w(368,369,zl);_.oe=Ex;\nfunction ny(){ny=x;oy=new py(0,(jy(),ky));qy=new py(1,ry);sy=new py(2,ty);uy=z(vy,q,37,[oy,qy,sy])}function py(a,b){this.b=a;this.a=b}w(372,195,{37:1,88:1,93:1,95:1},py);_.a=null;var uy,oy,qy,sy;function wy(){wy=x;xy=z(Zu,q,1,[lk,yi,Gg])}\nfunction my(a){var b;wy();var c,d;c=this.pb=$doc.createElement(Wj);this.c=$doc.createElement(Zj);hw(c,this.c);c[Lg]=0;for(c=c[Jg]=0;cthis.pb.tabIndex?this.pb.tabIndex:-(this.pb.tabIndex%65535)-1)&&(this.pb.tabIndex=0)};function Dy(){this.p=new Xx(this);this.e=$doc.createElement(Wj);this.d=$doc.createElement(Zj);hw(this.e,this.d);this.pb=this.e}w(382,364,zl);_.d=null;_.e=null;function Ey(){this.pb=Fy()}w(386,371,zl,Ey);function Gy(){Gy=x;Hy=new Iy((sr(),Ng));Jy=new Iy(ci);Ky=new Iy(vj);Ly=(Ju(),Jy);My=Ky;Ny=Ly}var Hy,Ny,Jy,My,Ly,Ky;w(396,1,{});function Iy(a){this.a=a}w(397,396,{},Iy);_.a=null;\nfunction Oy(){Oy=x;Py=new Qy(yi);Ry=new Qy(lk)}var Py,Ry;function Qy(a){this.a=a}w(398,1,{},Qy);_.a=null;function Sy(a,b){var c;c=Ty(a);hw(a.b,c);Jx(a,b,c)}function Ty(a){var b;b=$doc.createElement($j);b[ng]=a.a.a;b.style[zk]=a.c.a;return b}function Uy(a,b){var c,d;d=Yq(b.pb);(c=Nx(a,b))&&a.b.removeChild(d);return c}function Vy(){Dy.call(this);this.a=(Gy(),Ny);this.c=(Oy(),Ry);this.b=$doc.createElement(qk);hw(this.d,this.b);this.e[Lg]=wc;this.e[Jg]=wc}w(399,382,zl,Vy);\n_.re=function(a){return Uy(this,a)};_.b=null;function Wy(){Wy=x;new up}function Xy(a){Wy();Yy.call(this,a.d.a,a.b,a.c,a.e,a.a)}function Zy(a,b,c,d,e){Wy();this.a=new $y(this,a,b,c,d,e);this.pb[Sg]="gwt-Image"}function Yy(a,b,c,d,e){Wy();Zy.call(this,(cw(),new bw(a)),b,c,d,e)}w(400,366,nl,Xy,Zy,Yy);_.Yd=function(a){32768==nw(a.type)&&this.a&&(this.pb.__gwtLastUnhandledEvent=n);xx(this,a)};_.pe=function(){var a=this.a;I(ii,Uq(this.pb,"__gwtLastUnhandledEvent"))&&(a.f=new az(a,this),Gq((Dq(),Eq),a.f))};\n_.a=null;w(402,1,{});_.f=null;function bz(){bz=x;cz()}\nfunction $y(a,b,c,d,e,f){var g,h;bz();this.b=c;this.c=d;this.e=e;this.a=f;this.d=b;g=$doc.createElement(Qj);h=new Ov;Nv(Nv(Nv(h,new Qv("width:"+e+(Dr(),kj)+hd)),new Qv("height:"+f+nj)),new Qv("background:url("+b.a+") no-repeat "+-c+lj+-d+nj));!dz&&(dz=new ez);b=fz;h=new Qv((new Qv(Sq(h.a.a))).a);c=new Pv;xp(c.a,"");h=new Sv(Sq(c.a));g.innerHTML=h.a||n;g=Xq(g);a.kb&&(a.pb.__listener=\nnull);if(a.pb&&(h=a.pb,b=h.parentNode))b.insertBefore(g,h),b.removeChild(h);a.pb=g;a.kb&&(a.pb.__listener=a);-1==a.lb?(g=a.pb,a=133333119|(a.pb.__eventBits||0),pw(),dx(g,a)):a.lb|=133333119}w(401,402,{},$y);_.a=0;_.b=0;_.c=0;_.d=null;_.e=0;function az(a,b){this.a=a;this.b=b}w(403,1,{},az);_.pd=function(){var a,b;this.b.a!=this.a||this!=this.a.f||(this.a.f=null,this.b.kb?(a=(b=$doc.createEvent("HTMLEvents"),b.initEvent(ii,!1,!1),b),this.b.pb.dispatchEvent(a)):this.b.pb.__gwtLastUnhandledEvent=ii)};\n_.a=null;_.b=null;w(405,331,$l);function gz(a){this.a=a}w(407,405,$l,gz);_.Od=function(a){this.a.Ge(a.f,a.a)};function hz(a,b,c){var d;if(a.o){var e=d=$doc.createElement(qk);bx(a.e,(iw(),jw(e)),b);a=(iw(),jw(c));d.appendChild(a)}else d=Tw(a.e,0),bx(d,(iw(),jw(c)),b)}\nfunction iz(a,b,c){var d;b.b&&(jz(a,b),c&&b.a?(jz(a,null),a=b.a,b=(Dq(),Eq),b.c=Hq(b.c,[new kz(a),!1])):null!=b.d&&(a.j=new lz(a,b),c=(jy(),ry),a.j.U=c,a.j.ab=a.f,c=Oh,a.j.ee()[Sg]=c,d=kx(a.pb),I(Nh,d)||fx(a.j,d+"Popup"),ux(a.j,new gz(a),Nm?Nm:Nm=new Om),a.n=b.d,d=a.j,a=new mz(a,b),d.pb.style[Ak]=Rh,gy(d),Ju(),a.a.o?fy(a.a.j,ar(a.a.pb)+Tq(a.a.pb,Ti)-1,br(a.b.pb)+$wnd.pageYOffset):fy(a.a.j,ar(a.b.pb),br(a.a.pb)+$wnd.pageYOffset+Tq(a.a.pb,Si)-1),d.pb.style[Ak]=Bk))}\nfunction nz(a,b){!b&&a.k&&a.n==a.k.d||b&&!b.b||(jz(a,b),oz(a.pb),b&&a.d&&iz(a,b,!1))}\nfunction pz(a,b){var c;a:{c=b.target;var d,e;for(e=new vu(a.i);e.bc&&(c=a.i.c-1),c==b){d=zw(a.i,b);break}else if(d=zw(a.i,c),d.b)break;jz(a,d)}}w(408,366,nl);_.Yd=function(a){pz(this,a)};_.oe=function(){this.j&&cy(this.j,!1);yx(this)};_.Ge=function(a,b){tz(this,a,b)};_.d=!1;_.e=null;_.f=!1;_.j=null;_.k=null;_.n=null;_.o=!1;function kz(a){this.a=a}\nw(409,1,{},kz);_.pd=function(){wz(this.a)};_.a=null;function xz(a){this.a=a}w(410,1,{},xz);_.Hd=function(){jz(this.a,null)};_.a=null;function lz(a,b){this.a=a;this.b=b;hy.call(this,!0,ri);$x(this.T,this.b.d);ey(this);this.fb=!0;this.b.d.bi()}w(411,369,zl,lz);_.Ud=function(a){var b,c;if(!a.a)switch(nw(a.d.type)){case 4:c=a.d.target;b=this.b.c.pb;if(dr(b,c)){a.a=!0;break}a.a&&jz(this.a,null)}};_.a=null;_.b=null;function mz(a,b){this.a=a;this.b=b}w(412,1,{},mz);_.a=null;var yz=_.b=null;\nfunction zz(){zz=x;yz=new Mv((cw(),new bw((Ju(),"data:image/gif;base64,R0lGODlhBQAJAIAAAAAAAAAAACH5BAEAAAEALAAAAAAFAAkAAAIMRB5gp9v2YlJsJRQKADs="))),5,9)}function Az(a,b){if(b){var c=kx(a.pb)+ec;gx(a.ee(),c,!1)}else c=kx(a.pb)+ec,gx(a.ee(),c,!0);a.b=b}function Bz(a,b){this.pb=$doc.createElement($j);var c=kx(this.pb)+fc;gx(this.ee(),c,!1);this.pb.textContent=a||n;this.pb[Sg]="gwt-MenuItem";c=er();this.pb.setAttribute(Th,c);Rn();this.pb.setAttribute("role",yo.a);this.a=b}w(415,367,{41:1,45:1,48:1},Bz);\n_.a=null;_.b=!0;_.c=null;_.d=null;function Cz(){var a;this.pb=$doc.createElement($j);this.pb[Sg]="gwt-MenuItemSeparator";a=$doc.createElement(nh);hw(this.pb,a);a[Sg]="menuSeparatorInner"}w(416,367,Wl,Cz);function Dz(){var a,b,c,d,e;b=null.bi();e=gr();d=fr();b[mh]=(hr(),Mi);b[Dk]=0+(Dr(),kj);b[Qh]=Cc;c=$doc;c=(I(c.compatMode,qe)?c.documentElement:c.body).scrollWidth||0;a=$doc;a=(I(a.compatMode,qe)?a.documentElement:a.body).scrollHeight||0;b[Dk]=(c>e?c:e)+kj;b[Qh]=(a>d?a:d)+kj;b[mh]="block"}\nfunction iy(){}w(417,1,{},iy);_.Qd=function(){Dz()};function Ez(a){this.a=a}w(418,1,{},Ez);\n_.Ud=function(a){var b=this.a,c,d;if(a.a||!b.fb&&a.b)b.db&&(a.a=!0);else if(b.Ud(a),!a.a){d=a.d;c=d.target;var e;try{e=!!c&&!!c.nodeType}catch(f){e=!1}(c=e&&c&&1==c.nodeType?dr(b.pb,c):!1)&&(a.b=!0);b.db&&(a.a=!0);switch(nw(d.type)){case 4:case 1048576:if(mw){a.b=!0;break}if(!c&&b.V){b.Ce(!0);break}break;case 8:case 64:case 1:case 2:case 4194304:if(mw){a.b=!0;break}break;case 2048:d=d.target,b.db&&!c&&d&&(d.blur&&d!=$doc.body&&d.blur(),a.a=!0)}}};_.a=null;function Fz(a){this.a=a}w(419,1,{},Fz);\n_.a=null;function jy(){jy=x;ky=new Gz(0);ry=new Gz(1);ty=new Gz(2);Hz=z(Iz,q,46,[ky,ry,ty])}function Gz(a){this.b=a}w(420,195,{46:1,88:1,93:1,95:1},Gz);var Hz,ky,ry,ty;function Jz(a){a.j?a.a.bb&&($doc.body.appendChild(a.a.Z),a.f=Cw(a.a.$),Dz(),a.b=!0):a.b&&($doc.body.removeChild(a.a.Z),Kz(a.f.a),a.f=null,a.b=!1)}function Lz(a){a.j||(Jz(a),a.c||(Ax(),Sx(Mz(null),a.a)));a.a.pb.style[Vg]="rect(auto, auto, auto, auto)";a.a.pb.style[Zi]=Bk}\nfunction Nz(a,b){var c,d,e,f,g,h;a.j||(b=1-b);c=f=e=g=0;d=Vu(b*a.d);h=Vu(b*a.e);switch(a.a.U.b){case 2:f=a.e;c=d;break;case 0:g=a.d-d>>1;e=a.e-h>>1;f=e+h;c=g+d;break;case 1:Ju(),f=h,c=d}a.a.pb.style[Vg]="rect("+g+mj+f+mj+c+mj+e+"px)"}\nfunction dy(a,b,c){a.c=c;sm(a);a.i&&(um(a.i),a.i=null,Lz(a));a.a.hb=b;var d=a.a;d.eb&&(Kz(d.eb.a),d.eb=null);d._&&(Kz(d._.a),d._=null);if(d.hb){d.eb=ow(new Ez(d));var e;e=new Fz(d);vw();e=ww?ju(ww.a,(!iu&&(iu=new Om),iu),e):null;d._=e}c=!c&&a.a.ab;a.a.U!=(jy(),ky)&&!b&&(c=!1);a.j=b;c?b?(Jz(a),a.a.pb.style[dj]=fg,-1!=a.a.ib&&a.a.De(a.a.cb,a.a.ib),a.a.pb.style[Vg]=rj,Ax(),b=Mz(null),Jx(b,a.a,b.pb),a.i=new Oz(a),Bm(a.i,1)):vm(a,200):(Jz(a),a.j?(a.a.pb.style[dj]=fg,-1!=a.a.ib&&a.a.De(a.a.cb,a.a.ib),Ax(),\nb=Mz(null),Jx(b,a.a,b.pb)):a.c||(Ax(),Sx(Mz(null),a.a)),a.a.pb.style[Zi]=Bk)}function ly(a){var b=(Dm(),Em);this.k=new Cm(this);this.s=b;this.a=a}w(421,58,{},ly);_.rd=function(){Lz(this)};_.sd=function(){this.d=Tq(this.a.pb,Si);this.e=Tq(this.a.pb,Ti);this.a.pb.style[Zi]=Rh;Nz(this,(1+Math.cos(3.141592653589793))/2)};_.td=function(a){Nz(this,a)};_.a=null;_.b=!1;_.c=!1;_.d=0;_.e=-1;_.f=null;_.i=null;_.j=!1;function Oz(a){Im();this.a=a}w(422,65,{},Oz);_.vd=function(){this.a.i=null;vm(this.a,200)};\n_.a=null;function iw(){iw=x;Pz()}function jw(a){return a.__gwt_resolve?a.__gwt_resolve():a}function Pz(){function a(){}a.prototype={className:n,clientHeight:0,clientWidth:0,dir:n,getAttribute:function(a){return this[a]},href:n,id:n,lang:n,nodeType:1,removeAttribute:function(a){this[a]=void 0},setAttribute:function(a,c){this[a]=c},src:n,style:{},title:n};$wnd.GwtPotentialElementShim=a}function Ax(){Ax=x;Qz=new Rz;Sz=new up;Bx=new su}function Tz(a){this.p=new Xx(this);this.pb=a;vx(this)}\nfunction Mz(a){Ax();var b,c;c=Bu(Sz,a);b=null;if(null!=a&&!(b=$doc.getElementById(a)))return null;if(c&&(!b||c.pb==b))return c;if(0==Sz.d){var d=new Uz;Lm();Mm(Nm?Nm:Nm=new Om,d);Ju()}!b?c=new Vz:c=new Tz(b);E(Sz,a,c);tu(Bx,c);return c}w(424,363,zl,Tz);var Qz,Sz,Bx;function Rz(){}w(425,1,{},Rz);_.Fe=function(a){a.me()&&a.oe()};function Uz(){}w(426,1,{},Uz);_.Od=function(){Ax();try{Fx(Bx,Qz)}finally{Wz(Bx.a),Wz(Sz)}};function Vz(){Tz.call(this,$doc.body)}w(427,424,zl,Vz);\n_.xe=function(a,b,c){Vx(a,b-0,c-0)};function by(a){this.c=a;this.a=!!this.c.jb}w(428,1,{},by);_.Vd=Tv;_.Wd=function(){if(!this.a||!this.c.jb)throw new Px;this.a=!1;return this.b=this.c.jb};_.Xd=function(){this.b&&this.c.re(this.b)};_.b=null;_.c=null;function Xz(a,b){a.pb[yk]=null!=b?b:n}w(431,381,nl);_.Yd=function(a){0!=(nw(a.type)&896)?xx(this,a):xx(this,a)};_.pe=Dx;function Yz(){Yz=x;Zz()}w(430,431,nl);\nfunction $z(){Yz();var a=Wq(ak);!gw&&(gw=new fw);!ew&&(ew=new dw);this.pb=a;Ju();this.pb[Sg]="gwt-TextBox"}w(432,430,nl,$z);function Zz(){Zz=x;aA=new bA;cA=new dA;eA=new fA;gA=new hA;iA=z(jA,q,49,[aA,cA,eA,gA])}w(433,195,pl);var iA,aA,cA,eA,gA;function bA(){this.b=0}w(434,433,pl,bA);function dA(){this.b=1}w(435,433,pl,dA);function fA(){this.b=2}w(436,433,pl,fA);function hA(){this.b=3}w(437,433,pl,hA);function Ox(a,b){var c;for(c=0;cc||c>a.c)throw new Mx;if(a.c==a.a.length){e=C(kA,q,50,2*a.a.length,0);for(d=0;dc;--d)kq(a.a,d,a.a[d-1]);kq(a.a,c,b)}function Xx(a){this.b=a;this.a=C(kA,q,50,4,0)}w(439,1,{},Xx);_.ue=function(){return new Qx(this)};_.a=null;_.b=null;_.c=0;function lA(a){if(a.a>=a.b.c)throw new Px;return a.b.a[++a.a]}function mA(a){if(0>a.a||a.a>=a.b.c)throw new nA;a.b.b.re(a.b.a[a.a--])}function Qx(a){this.b=a}w(440,1,{},Qx);\n_.Vd=function(){return this.aa)throw new Pm("Missing message: awt.133");this.e=a;this.a=2;this.c=0;this.d=10;this.b=0}w(465,1,{55:1},wB);\n_.eQ=function(a){return a===this?!0:H(a,55)?a.e==this.e&&a.a==this.a&&a.c==this.c&&a.d==this.d&&a.b==this.b:!1};_.hC=function(){var a;a=new xB;a.a=31*a.a+Vu((new yB(this.e)).a);a.a=31*a.a+this.a;a.a=31*a.a+this.c;a.a=31*a.a+Vu((new yB(this.d)).a);return a.a};_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;\nfunction zB(){zB=x;AB=BB=new hm(255,255,255);CB=new hm(192,192,192);DB=new hm(128,128,128);EB=new hm(64,64,64);FB=GB=new hm(0,0,0);HB=IB=new hm(255,0,0);new hm(255,175,175);JB=new hm(255,200,0);KB=new hm(255,255,0);new hm(0,255,0);LB=new hm(255,0,255);MB=new hm(0,255,255);NB=OB=new hm(0,0,255)}\nfunction PB(a){var b,c;c=a.d>>16&255;b=a.d&255;a=a.d>>8&255;if(0==c&&0==b&&0==a)return new hm(3,3,3);3>c&&0!=c?c=3:(c=Vu(c/0.7),c=255b&&0!=b?b=3:(b=Vu(b/0.7),b=255a&&0!=a?a=3:(a=Vu(a/0.7),a=255>16&255)),Vu(0.7*(a.d>>8&255)),Vu(0.7*(a.d&255)))}function RB(a,b){return H(b,58)?b.d==a.d:!1}function hm(a,b,c){zB();if((a&255)!=a||(b&255)!=b||(c&255)!=c)throw new Pm(xe);this.d=c|b<<8|a<<16|-16777216}\nw(471,1,{58:1,67:1,70:1},hm);_.eQ=function(a){return RB(this,a)};_.hC=SB;_.tS=function(){return TB.d+"[r="+(this.d>>16&255)+",g="+(this.d>>8&255)+",b="+(this.d&255)+bg};_.a=0;_.b=null;_.c=null;_.d=0;var FB,NB,HB,AB,GB,OB,MB,EB,DB,CB,LB,JB,IB,BB,KB;function NA(){NA=x;OA=new UB(!0);VB=new su;tu(VB,"ar");tu(VB,"fa");tu(VB,"iw");tu(VB,"ur")}function UB(a){this.a=a}w(472,1,Xl,UB);_.a=!1;var OA,VB;w(476,1,{76:1,92:1});function WB(){EA.call(this,0,0)}function EA(a,b){this.b=a;this.a=b}\nfunction GA(a){EA.call(this,a.b,a.a)}w(475,476,{61:1,76:1,88:1,92:1},WB,EA,GA);_.eQ=function(a){return a===this?!0:H(a,61)?a.b==this.b&&a.a==this.a:!1};_.hC=function(){var a;a=new xB;a.a=31*a.a+this.b;a.a=31*a.a+this.a;return a.a};_.tS=function(){return XB.d+"[width="+this.b+",height="+this.a+bg};_.a=0;_.b=0;function gt(a,b,c){this.f=a;this.c=b;this.e=this.d=this.j=this.i=0;this.b=c}w(477,1,Xl,gt,function(a,b,c,d){this.f=a;this.c=b;this.j=this.i=0;this.d=c;this.e=d;this.b=null});\n_.pf=function(){return 0!=(this.e&4)};_.qf=function(){return 0!=(this.e&1)};_.tS=function(){var a;return this.cZ.d+"[id="+this.c+",x="+this.i+",y="+this.j+(0!=this.d?",key="+this.d+(a=n,this.qf()&&(a+=",shift"),0!=(this.e&2)&&(a+=",control"),this.pf()&&(a+=",meta"),a):n)+",target="+this.f+(null!=this.b?",arg="+this.b:n)+bg};_.b=null;_.c=0;_.d=0;_.e=0;_.f=null;_.i=0;_.j=0;function YB(a){var b,c;for(c=b=0;cb.b&&(ZB(this,l,b.b-(o-this.c),g.b,m,j,h),l.mg(),o=f,m+=j+this.d,j=0),e=!1,kq(l.b,l.c++,c),o+=a.b+this.c,j=Um(j,a.a);ZB(this,l,b.b-(o-this.c),g.b,m,\nj,h)}};_.mf=function(a){this.b=dC(a.Fc);return 0==YB(this)?VA(a,new EA(10,10)):VA(a,aC(this,!1))};_.nf=function(a){this.b=dC(a.Fc);return 0==YB(this)?VA(a,new EA(10,10)):VA(a,aC(this,!0))};_.of=SA;_.tS=function(){var a;switch(this.a){case 0:a=ci;break;case 2:a=vj;break;case 1:a=Ng;break;case 4:a="trailing";break;default:a="leading"}return gC.d+"[hgap="+this.c+",vgap="+this.d+",align="+a+bg};_.a=0;_.b=null;_.c=0;_.d=0;function hC(){hC=x;iC=new jC(Ee,0,12)}\nfunction jC(a,b,c){hC();this.a=null!=a?a:"Default";this.b=0<=c?c:0;this.c=0==(b&-4)?b:0}w(479,1,{62:1,88:1},jC);_.a=null;_.b=0;_.c=0;var iC;w(480,1,rl);_.tS=function(){return kC.d+"[font="+this.b+"ascent="+lC(this.b).a+", descent="+lC(this.b).b+", height="+lC(this.b).c+bg};_.b=null;w(482,1,{});_.tS=function(){return"Graphics"};w(483,482,{});function nA(){}function wx(a){this.f=a}w(486,136,Jl,nA,wx);function AA(){this.f="Missing message: awt.151"}w(485,486,Jl,AA);w(487,1,{});\nfunction QA(a,b,c,d){this.d=a;this.b=b;this.a=c;this.c=d}w(488,1,{64:1,88:1,92:1},QA);_.eQ=function(a){return a===this?!0:H(a,64)?a.b==this.b&&a.a==this.a&&a.c==this.c&&a.d==this.d:!1};_.hC=function(){var a;a=31+this.d;a=31*a+this.b;a=31*a+this.a;return a=31*a+this.c};_.tS=function(){return mC.d+"[left="+this.b+",top="+this.d+",right="+this.c+",bottom="+this.a+bg};_.a=0;_.b=0;_.c=0;_.d=0;w(492,1,Xl);_.$e=function(){return this.j};_.tS=UA;_.j=null;_.k=null;\nfunction nC(a){var b;b=a.j+",label="+a.f;a.e||(b+=",disabled");null!=a.c&&(b+=",command="+a.c);return b}function oC(a,b){a.e=b;Az(a.i.a,b)}function pC(a){this.n=(KA(),KA(),LA);var b;var c;b=this.cZ.d;-1!=lx(b,mx(36))?b=null:(c=this.n.b.d++,b=ox(b,uA(b,mx(46))+1)+n+c);this.j=b;this.d=new uB;this.f=a;this.e=!0;this.i=new qC(this)}w(491,492,Xl,pC);_.$e=function(){return nC(this)};_.c=null;_.e=!1;_.f=null;_.i=null;w(490,491,kl);_.$e=function(){return nC(this)+(this.b?",tearOff":n)};_.b=!1;w(494,1,{77:1});\n_.eQ=function(a){return a===this?!0:H(a,77)?this.rf()==a.rf()&&this.sf()==a.sf():!1};_.hC=function(){var a;a=new xB;rC(a,this.rf());rC(a,this.sf());return a.a};function zA(){this.b=this.a=0}function sC(a,b){this.a=a;this.b=b}w(493,494,{68:1,77:1,88:1},zA,sC);_.eQ=function(a){return a===this?!0:H(a,68)?this.a==a.a&&this.b==a.b:!1};_.rf=Tv;_.sf=zy;_.tS=function(){return tC.d+"[x="+this.a+",y="+this.b+bg};_.a=0;_.b=0;\nfunction uC(a,b){if(!b)throw new ku("Missing message: awt.70");var c=a.a;if(I(b.f,vb)){var c=c.a.a,d=new Cz,e=c.c.c;if(0>e||e>c.c.c)throw new Mx;c.o&&(d.pb[Xg]=2);hz(c,e,d.pb);vC(c.c,e,d)}else{var e=c.a,d=e.a,c=b.i.a,e=e.a.c.c,f,g;if(0>e||e>d.c.c)throw new Mx;vC(d.c,e,c);for(f=g=0;fb?0:b;var c=this.Tc;Xz(c.a,a);c.e.a=-1;c.e.b=-1}w(504,503,Ul,HC,IC);_.Je=function(){return"textfield"+this.Vc.b.f++};_.Le=function(){return FC(this,Uq(this.Tc.a.pb,yk).length)};_.Me=function(){return!vA(this)?null:FC(this,Uq(this.Tc.a.pb,yk).length)};_.Oe=JC;_.Qe=KC;_.Ue=function(){this.Tc=(KA(),new LC)};_.Ye=JC;_._e=KC;_.a=0;function KA(){KA=x;LA=new MC}\nfunction NC(){var a=(KA(),KA(),LA);!a.c&&(a.c=new OC);return a.c}w(505,1,{});_.a=null;_.c=null;var LA;function PC(){}w(506,1,{},PC);_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;_.f=0;w(507,1,{});function QC(){QC=x;RC=new SC;TC=new SC}function UC(a,b){return b==a?!0:!b?!1:!0}function SC(){}w(508,1,{72:1},SC);_.eQ=function(a){return null==a||!H(a,72)?!1:UC(this,a)};_.hC=function(){var a;a=null.bi()+";class="+null.bi();a=!null.bi().bi()?a:a+";charset=";return VC(a)};\n_.tS=function(){return WC.d+"[MimeType=(null);humanPresentableName="+this.a+bg};_.a=null;var RC,TC;function XC(){XC=x;z(YC,q,72,[(QC(),TC),RC])}function ZC(a){var b=(QC(),TC);if(UC(b,(QC(),TC)))return a.a;if(UC(b,RC))return new $C(a.a);throw new aD(b);}function bD(a){XC();this.a=a}w(509,1,{},bD);_.a=null;function aD(a){this.f="flavor = "+a}w(510,137,{73:1,88:1,96:1,105:1},aD);function cD(a,b,c){nB();dD.call(this,a,b,c,Kk)}\nfunction dD(a,b,c,d){nB();lB.call(this,a);this.k=b;this.a=c;this.c=d;this.b=0}w(511,458,Xl,cD,dD);_.$e=function(){var a,b;a=1001==this.k?"ACTION_PERFORMED":xk;b=n;0<(this.b&1)&&(b+="Shift");0<(this.b&2)&&(b+=0==b.length?"Ctrl":"+Ctrl");0<(this.b&4)&&(b+=0==b.length?"Meta":"+Meta");0<(this.b&8)&&(b+=0==b.length?"Alt":"+Alt");return a+",cmd="+this.a+",when="+Kv(this.c)+qb+b};_.a=null;_.b=0;_.c=Kk;function IA(a,b){nB();lB.call(this,a);this.k=b}w(512,458,Xl,IA);\n_.$e=function(){var a,b;a=this.n;switch(this.k){case 100:b="COMPONENT_MOVED";break;case 101:b="COMPONENT_RESIZED";break;case 102:return"COMPONENT_SHOWN";case 103:return"COMPONENT_HIDDEN";default:return xk}return b+" ("+a.Se()+lb+a.Te()+fa+a.Re()+Ek+a.Ne()+eb};w(515,512,Xl);_.j=0;\nfunction eD(a){var b;switch(a.k){case 503:b="MOUSE_MOVED";break;case 500:b="MOUSE_CLICKED";break;case 501:b="MOUSE_PRESSED";break;case 502:b="MOUSE_RELEASED";break;case 506:b="MOUSE_DRAGGED";break;case 504:b="MOUSE_ENTERED";break;case 505:b="MOUSE_EXITED";break;case 507:b="MOUSE_WHEEL";break;default:b=xk}b=b+",("+a.f+lb+a.i+"),button="+a.d;if(0<(a.j&16320)){var c=qb,d=a.j,e;e=new Pv;0!=(d&4)&&yp(yp(e,(KA(),null)),kb);0!=(d&1)&&yp(yp(e,(KA(),null)),kb);0!=(d&2)&&yp(yp(e,(KA(),null)),kb);0!=(d&8)&&\n(0!=(d&2048)?0!=(d&512)&&yp(yp(e,(KA(),null)),kb):yp(yp(e,(KA(),null)),kb));0!=(d&32)&&yp(yp(e,(KA(),null)),kb);0!=(d&16)&&yp(yp(e,(KA(),null)),kb);0!=(d&8)&&yp(yp(e,(KA(),null)),kb);0!=(d&4)&&yp(yp(e,(KA(),null)),kb);0==Sq(e.a).length?e=Sq(e.a):(d=Sq(e.a).length-1,e=fD(Sq(e.a),0,d));c=c+e+",extModifiers=";e=a.j;var f,d=(f=n,0!=(e&256)&&(f+=(KA(),null)),0!=(e&128)&&(f+=(0=this.k?0!=(this.j&16)?(this.d=1,501==this.k&&(this.j|=1024)):0!=(this.j&8)?(this.d=2,501==this.k&&(this.j|=2048)):0!=(this.j&4)&&(this.d=3,501==this.k&&(this.j|=4096)):(0!=(this.j&16)&&(this.j|=1024),0!=(this.j&8)&&(this.j|=\n2048),0!=(this.j&4)&&(this.j|=4096));else if(0!=(this.j&16320))if(this.j&=-64,0!=(this.j&64)&&(this.j|=1),0!=(this.j&128)&&(this.j|=2),0!=(this.j&256)&&(this.j|=4),0!=(this.j&512)&&(this.j|=8),0!=(this.j&8192)&&(this.j|=32),500<=this.k&&502>=this.k)switch(this.d){case 1:this.j|=16;break;case 2:this.j|=8;break;case 3:this.j|=4}else 0!=(this.j&1024)&&(this.j|=16),0!=(this.j&2048)&&(this.j|=8),0!=(this.j&4096)&&(this.j|=4);this.b=0;this.a=1;this.c=d}w(518,517,Xl,Jt);\n_.$e=function(){var a,b;a=eD(this);switch(this.b){case 0:b="WHEEL_UNIT_SCROLL";break;case 1:b="WHEEL_BLOCK_SCROLL";break;default:b=xk}return a+=",scrollType="+b+",scrollAmount="+this.a+",wheelRotation="+this.c};_.a=0;_.b=0;_.c=0;w(527,1,{});function $C(a){if(null==a)throw new gD;}w(528,527,{},$C);\nfunction hD(){hD=x;iD={};iD["java.vendor"]=Ih;iD["package.restrict.access.sun"]=uk;iD["sun.java.launcher"]=uf;iD["sun.management.compiler"]=Ih;iD["os.name"]=uf;iD[" sun.boot.class.path"]=uf;iD["path.separator.applet"]=uf;iD["java.vm.specification.vendor"]=Ih;iD["java.runtime.version"]=uf;iD["http.proxyPort"]=uf;iD["user.name"]=uf;iD["user.language"]=uf;iD["os.name.applet"]=uf;iD["browser.version"]=uf;iD["java.version"]=uf;iD["user.timezone"]=uf;iD["java.endorsed.dirs"]=uf;iD["java.specification.name"]=\n"GWT";iD["java.specification.version"]="2.5.0";iD[Yh]=df;!Mt&&(Mt=new Ut);Mt.a?iD[Wh]="yes":iD[Wh]=null}var iD;w(532,137,Yl);function jD(){}function kD(a){this.f=a}w(531,532,{82:1,88:1,96:1,105:1},jD,kD);function lD(){lD=x;mD=new nD}function oD(a){var b;if(a.k){var c;b=new Pv;yp(b,a.f);Pq(b.a,dd);c=a.a;null!=c&&0=b||65<=b&&90>=b;for(c=1;b&&c=b||65<=b&&90>=b||48<=b&&57>=b||43==b||45==b||46==b;if(b){c=this.f;qD();var f,g,h;h=c.length;b=new rD;for(g=0;g=f?sD(b,f+32&65535):Pq(b.a,String.fromCharCode(f));\nthis.f=Sq(b.a)}else this.f=null,d=-1}if(null==this.f)throw new kD(Ze+a);if(!this.k&&(this.k=Bu(mD,this.f),this.k||(this.k=(KA(),new tD))&&E(mD,this.f,this.k),!this.k))throw new kD(Ze+a);try{c=a;var j=++d,l=a.length,o,m,r,t,y,u,D,s,F,O,L,Z,ea,Y,da,Fb,$,rb,Kb,J,Ia;if(ll){if(-2147483647>=l&&(j>=c.length||0>j)||!(0>j||j>=c.length)&&c.indexOf(sc,j)==j&&-1==uD(c,mx(47),j+2))throw new vD(l);}else{L=c.substr(j,l-j);l-=j;u=0;D=this.c;Z=this.e;rb=this.j;t=this.d;da=this.i;o=this.a;Ia=this.n;Kb=uD(L,mx(35),\n0);if(0==L.indexOf(sc)&&0!=L.indexOf("////")){F=2;Z=-1;u=uD(L,mx(47),2);$=uD(L,mx(63),2);-1!=$&&(-1==u||u>$)&&(u=$);-1==u&&(u=l,t=n);s=u;-1!=Kb&&Kbr+1?(m=L.charCodeAt(r+1),58==m?ea=r+1:ea=-1):ea=-1}catch(Tb){if(Tb=vq(Tb),!H(Tb,96))throw Tb;}-1==ea||ea>u?D=L.substr(F,s-F):(D=L.substr(F,ea-F),Y=L.substr(ea+1,s-(ea+1)),0==Y.length?Z=-1:Z=wD(Y,\n10))}-1u&&(null==t?t=n:I(t,n)?t=ic:t.indexOf(ic),O=uA(t,mx(47))+1,0==O?t=L.substr(u,y-u):t=t.substr(0,O-0)+L.substr(u,y-u)));null==t&&(t=n);null==D&&(D=n);d=D;var M;M=t;null!=da&&!I(da,n)&&(null!=t?M=t+xd+da:M=xd+da);null==this.f&&\n(this.f=this.f);this.c=d;this.b=M;this.e=Z;this.j=rb;var ya;null!=this.c&&0this.e)throw new kD("incorrect port: "+\nthis.e);}w(533,1,Xl,pD);_.tS=function(){return oD(this)};_.a=null;_.b=null;_.c=null;_.d=null;_.e=-1;_.f=null;_.i=null;_.j=null;_.k=null;_.n=null;var mD;w(534,1,{});function xD(a,b,c){var d,e;for(d=a.Kf().ue();d.Vd();)if(a=d.Wd(),e=a.th(),null==b?null==e:Hp(b,e))return c&&(a=new yD(a.th(),a.uh()),d.Xd()),a;return null}w(538,1,Ql);_.Jf=function(a){return!!xD(this,a,!1)};\n_.eQ=function(a){var b,c;if(a===this)return!0;if(!H(a,108)||this.Pf()!=a.Pf())return!1;for(a=a.Kf().ue();a.Vd();)if(b=a.Wd(),c=b.th(),b=b.uh(),!this.Jf(c)||!zD(b,this.Lf(c)))return!1;return!0};_.Lf=function(a){a=xD(this,a,!1);return!a?null:a.uh()};_.hC=function(){var a,b,c;c=0;for(b=this.Kf().ue();b.Vd();)a=b.Wd(),c+=a.hC(),c=~~c;return c};_.Mf=AD;_.Nf=function(){throw new BD("Put not supported on this map");};_.Of=function(a){a=xD(this,a,!0);return!a?null:a.uh()};_.Pf=function(){return this.Kf().Pf()};\n_.tS=function(){var a,b,c,d;d=Hk;a=!1;for(c=this.Kf().ue();c.Vd();)b=c.Wd(),a?d+=mb:a=!0,d+=n+b.th(),d+=td,d+=n+b.uh();return d+"}"};function Wz(a){a.a=[];a.e={};a.c=!1;a.b=null;a.d=0}function Ww(a,b){var c;if(null==b)c=a.c;else if(H(b,1))c=dd+b in a.e;else a:{c=a.Sf(b);if(c=a.a[c])for(var d=0,e=c.length;d=a.i)break;c=KD(a,c);++b}return b}\nfunction LD(a,b){var c;for(c=0;c=a.i)throw new HD;b=a.a;a.a=KD(a,a.a);return fD(a.n,b,a.a)}\nfunction KD(a,b){var c,d;for(d=b;da.f||!LD(a,c))break;d+=65536<=c?2:1}else{c=a.n.charCodeAt(d);if(c>a.f||0>lx(a.c,mx(c)))break;++d}return d}function OD(a){PD.call(this,a,ga,!1)}function QD(a){PD.call(this,a,lb,!1)}\nfunction PD(a,b,c){this.a=0;this.j=-1;this.d=!1;this.n=a;this.i=a.length;this.c=b;this.k=c;var d;if(null==this.c)this.f=0;else{for(c=b=d=0;c=a&&(a=ND(this.c,c,this.c.length),this.e=!0),d=a;++a)0=a;++a)b=Bf,33=j||b>a.Sb||c>a.Sb))){l=C(cF,Sl,-1,99,1);h=m=o=0;for(g=b;g<=c;++g)f=dF(a.zb[g]),o+=f.c,m+=f.d,f.d>h&&(h=f.d),l[g]=f.c,2==d&&(l[g]=f.d);a.J&&(o+=25*(j+1),m+=25*(j+1),h+=25);j=g=1;a.J?r=eF(a):r=fF(a);f=Vu(r.b);r=Vu(r.a);1==d||3==d?f=~~((f-48)/2):2==d&&(r=~~(r/2));o>=f&&(g=f/o);h>=r&&(j=r/h);h=0;a.J&&(a.xb=gd)switch(rF(b,(zB(),GB)),f){case 101:rF(b,KB);vF(b,j+3,g+3,a.mb-6,a.mb-6);rF(b,GB);e=g+3;h=a.mb-6;c=\na.mb-6;d=b.a;f=Q(K(R((j+3)*T)));e=Q(K(R(e*T)));h=Q(K(R(h*T)));c=Q(K(R(c*T)));d.n&&(wF(d,!1),xF(d,yF(d,f,e,h,c)));zF(b,j+6,g+6,a.mb-12,a.mb-12);AF(b.a,Q(K(R((j+9)*(BF(),T)))),Q(K(R((g+9)*T))),Q(K(R(2*T))),Q(K(R(4*T))));sF(b,j+a.mb-10,g+9,2,4);0.04>Math.random()&&(rF(b,IB),AF(b.a,Q(K(R((j+10)*T))),Q(K(R((g+18)*T))),Q(K(R(4*T))),Q(K(R(4*T)))));0.96=e;++e)if(bo&&(rF(g,(qE(),yE)[o]),vF(g,f.b[s].q-\n12,f.b[s].r-12,24,24));for(s=1;s<=f.q;++s)l=f.c[s].i,m=f.c[s].j,0!=f.b[l].c&&f.b[l].c==f.b[m].c&&(rF(g,(qE(),yE)[f.b[l].c]),u=f.b[m].q-f.b[l].q,h=f.b[m].r-f.b[l].r,y=Math.sqrt(u*u+h*h),1>y&&(y=1),h/=y,y=u/y,u=9*h,t=9*y,o=UF(4),r=UF(4),o[0]=f.b[l].q+u,r[0]=f.b[l].r-t,o[1]=f.b[m].q+u,r[1]=f.b[m].r-t,o[2]=f.b[m].q-u,r[2]=f.b[m].r+t,o[3]=f.b[l].q-u,r[3]=f.b[l].r+t,GF(g,o,r,4))}for(s=1;s<=f.q;++s){rF(g,(zB(),FB));t=f.c[s];l=t.i;m=t.j;1==f.i&&0!=f.b[l].c&&f.b[l].c==f.b[m].c&&rF(g,(qE(),yE)[f.b[l].c]);if(3==\nt.f||4==t.f)o=l,l=m,m=o;o=f.b[l].q;r=f.b[l].r;L=f.b[m].q;O=f.b[m].r;if(1!=t.c||0!=t.f)u=L-o,h=O-r,y=Math.sqrt(u*u+h*h),1>y&&(y=1),h/=y,y=u/y;switch(t.c){case 2:10<=t.f&&rF(g,LB);u=2*h;t=2*y;DF(g.a,Q(K(R((o+u)*(BF(),T)))),Q(K(R((r-t)*T))),Q(K(R((L+u)*T))),Q(K(R((O-t)*T))));DF(g.a,Q(K(R((o-u)*T))),Q(K(R((r+t)*T))),Q(K(R((L-u)*T))),Q(K(R((O+t)*T))));rF(g,GB);break;case 3:DF(g.a,Q(K(R(o*(BF(),T)))),Q(K(R(r*T))),Q(K(R(L*T))),Q(K(R(O*T))));l=3*h;m=3*y;DF(g.a,Q(K(R((o+l)*T))),Q(K(R((r-m)*T))),Q(K(R((L+l)*\nT))),Q(K(R((O-m)*T))));DF(g.a,Q(K(R((o-l)*T))),Q(K(R((r+m)*T))),Q(K(R((L-l)*T))),Q(K(R((O+m)*T))));break;case 9:case 0:for(m=0;10>m;++m)l=o-(o-L)/10*m,D=r-(r-O)/10*m,DF(g.a,Q(K(R(l*(BF(),T)))),Q(K(R(D*T))),Q(K(R(l*T))),Q(K(R(D*T))));VF(g,f.k.v);m=WF(f.k.w);t=t.d;l=xd;null!=t&&(l=t);t=GC(f.k.w,l);t=(o+L)/2-t/2;O=(r+O)/2+~~(m/2)-1;rF(g,LB);XF(g.a,l,Q(K(R(t*(BF(),T)))),Q(K(R(O*T))));rF(g,GB);break;default:if(1==t.f||3==t.f)u=3*h,t=3*y,D=UF(3),j=UF(3),D[0]=L+u,j[0]=O-t,D[1]=o,j[1]=r,D[2]=L-u,j[2]=O+t,\nGF(g,D,j,3);else if(2==t.f||4==t.f){u=3*h;t=3*y;for(m=0;10>m;++m)l=o-(o-L)/10*m,D=r-(r-O)/10*m,j=m/10,DF(g.a,Q(K(R((l+u*j)*(BF(),T)))),Q(K(R((D-t*j)*T))),Q(K(R((l-u*j)*T))),Q(K(R((D+t*j)*T))))}else DF(g.a,Q(K(R(o*(BF(),T)))),Q(K(R(r*T))),Q(K(R(L*T))),Q(K(R(O*T))))}}y=UF(f.p+1);h=UF(f.p+1);for(s=1;s<=f.q;++s)l=f.c[s].i,m=f.c[s].j,o=f.b[l].q,r=f.b[m].q,++h[l],++h[m],y[l]=y[l]/h[l]+r/h[l],y[m]=y[m]/h[m]+o/h[m];VF(g,f.k.v);m=WF(f.k.w);L=UF(f.p+1);r=UF(f.p+1);o=C(YF,q,120,f.p+1,0);for(s=1;s<=f.p;++s)l=\nZF(f,s),(null==l||1>l.length)&&(l=gb),j=f.b[s],3==f.b[s].a&&0aG(y[s]-f.b[s].q)&&(u=!1),2aG(y[s]-f.b[s].q)&&(O=!0),t=l,D=n,f.k.oc&&(F=f.b[s].i,0y&&(y=1),h/=y,y=u/y,u=4*h,t=4*y,D=UF(5),j=UF(5),D[0]=f.b[l].q+u,D[1]=f.b[m].q+u,j[0]=f.b[l].r-t,j[1]=f.b[m].r-t,D[3]=f.b[l].q-u,D[2]=f.b[m].q-u,j[3]=f.b[l].r+t,j[2]=f.b[m].r+t,D[4]=D[0],j[4]=j[0],106!=f.k.k&&dG(g,D,j,5),106==f.k.k&&eG(f,f.c[f.w].i,f.c[f.w].j))){h=0;for(s=1;s<=f.p;++s)0~~(f.p/2))for(s=1;s<=f.p;++s)0e;++e)if(d=a.zb[e])0b&&(b=c);return b}\nfunction pG(a,b,c,d){var e=zE?350:170,f,g,h,j;qG(d);b=rG(a,b);c=rG(a,c);h=e;for(g=1;g<=a.Sb;++g){j=new sG(e);f=a.zb[g];for(var l=b,o=c,m=j,r=void 0,t=void 0,y=void 0,u=void 0,D=r=r=r=u=r=void 0,s=void 0,F=void 0,O=t=y=r=r=void 0,L=void 0,Z=void 0,D=0,F=m.a,s=1;s<=f.q;++s)r=tG(l,o,f.c[s].a,f.c[s].b),ry+F||(r=L*r+Z*u,0>r||(y=Math.sqrt(y),t=Math.sqrt(t),r/=y*t,1<=r||(r=1.5707963267948966-Math.acos(r),r=t*Math.cos(r),r*=r,r=a.yb||0>=a.ub)&&(!a.M&&(a.M=iB(a)),uG(a,a.M));b=new vG;b.b=a.yb;b.a=a.ub;return b}function fF(a){var b;b=eF(a);b.b/=a.xb;b.a/=a.xb;return b}\nfunction wG(a,b,c,d){var e,f;if(!b||xG(b)){if((e=0=e;++e)b=VG(h,d);e=AG(wD(nx(b.substr(0,3)),10)).a;g=AG(wD(nx(b.substr(3,3)),10)).a;VG(h,d);for(b=1;b<=e+g;++b){for(f=n;!(j=VG(h,d),null==j||I(j,"$MOL"));)f+=j+d;a.zb[++a.Sb]=new WG(a,f)}a.xb=1;bF(a,1,e,1,!1);bF(a,e+1,e+g,3,!1);d="readRXNFile"}else{(a.J||a.Vb)&&(a.dc=!1);a.ob=new WG(a,b);if(!a.ob||0==a.ob.p)return!a.ob&&(ht(a,"ERROR - problems in reading/processing MOL input"),\na.Ze(a.Ec.d)),!!a.ob;d=(a.dc||a.Fb)&&a.p||a.Mb;null!=a.t&&a.ob&&XG(a.ob,a.t,!0);null!=a.u&&a.ob&&XG(a.ob,a.u,!1);d||(a.Sb=0,a.xb=1);h=YG(a.ob);if(1>=h||a.J)a.zb[++a.Sb]=a.ob;else{a.Fb=!0;for(b=1;b<=h;++b)a.zb[++a.Sb]=new ZG(a,a.ob,b)}d?a.o=a.Sb:a.o=1;a.ob=a.zb[a.o];a.J?bF(a,1,1,0,!0):bF(a,1,h,0,!d);d=qj}$G(a);null!=d&&(GG(a.r,Od),a.r&&lF(Up(a.r,d),0,0,0),a.hc=!0);a.Ib=!0;c&&a.Ze(a.Ec.d);return!0}function ht(a,b){null==b&&(b=n);a.Gb=!0;a.X=b;a.cg("info: "+b)}\nfunction TF(a,b){var c;c=Math.round(b);100>c&&(!AE[c]&&(AE[c]=new jC(Qe,0,c)),!CE[c]&&kq(CE,c,wA(AE[c])),a.v=AE[c],a.w=CE[c])}function xG(a){var b;if(!a)return!1;b=a.pf();a=0!=(a.e&2);return b||a}function fG(a,b){return(a.mb+(a.Lb?1:0))*b}function KF(a,b){var c,d;d=-1;for(c=0;c=b)switch(a.Kb=!0,a.Hb=!0,ht(a,n),b){case 102:jF(a,!0);DG(a,102);CG(a,102);d=!0;break;case 110:a.Ib=!0;a.k=c;a.pb.a!=a.pb.b&&a.pb.a.b!=a.pb.b?a.q&&(++a.Sb,a.o=a.Sb,a.q=!1):ht(a,"No more undo");if(!(a.pb.a!=a.pb.b&&a.pb.a.b!=a.pb.b))break;aH(a,bH(a.pb));a.r&&lF(Up(a.r,wk),0,0,0);a.hc=!0;a.hc=!1;a.Ib=!0;break;case 111:a.k=c;if(a.pb.a.c)a.q&&(++a.Sb,a.o=a.Sb,a.q=!1);else{ht(a,"No more redo");break}if(!a.pb.a.c)break;e=a.pb;\nif(!e.a.c)throw new wx("Cannot redo. Index is out of range.");if(!e.a.c)throw new wx(bf);e.a=e.a.c;aH(a,e.a.a);a.r&&lF(Up(a.r,sj),0,0,0);a.hc=!0;a.hc=!1;a.Ib=!0;break;case 214:wG(a,null,a.R.a,a.R.b);a.k=c;break;case 151:case 152:case 154:case 153:e=null;a.k=c;switch(b){case 152:e=cH(a.jc);break;case 151:e=dH(a.jc);break;case 154:e=a.jc;e.a=e.c;e=cH(e);break;case 153:e=a.jc,e.a=-1,e=dH(e)}null==e?ht(a,"No more molecules in SDF buffer"):(mF(a),a.Vb=!0,eH(a,e,!1),a.Vb=!1,I(a.X,n)&&(ht(a,"MOL n. "+(a.jc.a+\n1)+" of "+a.jc.c),d=!0,a.r&&lF(Up(a.r,"SDFstack"),0,0,0),a.hc=!0,a.hc=!1));break;case 101:oq(4,new fH(a));a.k=c;break;case 107:oq(2,new gH(a));break;case 114:oq(3,new hH(a));a.k=c;break;case 103:a.Mb=!0;a.k=c;break;case 105:a.A&&a.Bb&&(a.Bb=!1,iH(a.ob),a.Ib=!0,a.r&&lF(Up(a.r,xg),0,0,0),d=a.hc=!0,a.k=c);a.I=1;break;case 109:a.k=c;e=jH(a.ob);if(2==e){ht(a,"Copying the agent not possible !");break}d=dF(a.ob);a.Ib=!0;a.ob=new HE(a.ob);d=Vu((a.M.b-a.mb)/2-d.a);for(e=1;e<=a.ob.p;++e)hF(a.ob.b[e],2*d/a.xb,\n0/a.xb);a.zb[++a.Sb]=a.ob;a.o=a.Sb;a.r&&lF(Up(a.r,"reactionCopy"),0,0,0);d=a.hc=!0;DG(a,109);CG(a,109);break;case 104:d=IE(a);break;case 213:a.k=c;if(!a.S){var f,g,h,j,l;l=new wC;for(f=a.U,g=0,h=f.length;g=b&&(a.n=33+(b-1301)),0=a.k)a.cb=2,oH(a.ob),d=!0,XE(a,jg,a.o,0,a.ob.w);else if(202==a.k||203==a.k||204==a.k)if(0=g;++g){f=0;for(c=1;c<=a.Sb;++c)jH(a.zb[c])==g&&(h[g][++f]=c);h[g][0]=f}e+=Ka;e+=rH(h[1][0],3)+rH(h[3][0],3)+ca;for(c=1;c<=h[1][0];++c)e+=Ha+sH(a.zb[h[1][c]],d,b);for(c=1;c<=h[3][0];++c)e+=Ha+sH(a.zb[h[3][c]],d,b)}else{1f&&(f=e.b[b].r),e.b[b].qb;++b)kq(g.b,g.c++,null),kq(f.b,f.c++,null);for(b=1;b<=e.p;++b)j=e.b[b].b,null==j||0==j.length||(I(j,eg)?Am(c,new pB(b)):0==j.indexOf("mix")?(j=wD(ox(j,3),10),l=null,f.c>j&&(l=($B(j,f.c),f.b[j])),null==l?h=new Gm:h=l,Am(h,new pB(b)),fC(f,j,h)):0==j.indexOf(Xi)&&(j=wD(ox(j,2),10),l=null,g.c>j&&(l=\n($B(j,g.c),g.b[j])),null==l?h=new Gm:h=l,Am(h,new pB(b)),fC(g,j,h)));d+=xH(pf,c);if(0a.M.a-Q(K(R(a.mb*a.nb))))return!1;var b=a.Cc,f=a.Dc,g,h,j,l;l=0;if(0>b||0>f||f>a.ub||b>a.yb)b=0;else if(1==a.Sb)b=a.o;else{b=rG(a,b);f=rG(a,f);j=1.7976931348623157E308;for(h=1;h<=a.Sb;++h){g=a.zb[h];for(var o=void 0,m=void 0,r=void 0,m=1.7976931348623157E308,o=1;o<=g.p;++o)r=tG(b,f,g.b[o].q,g.b[o].r),r=a.k)a.cb=2,oH(a.ob),KE(a,ig,a.ob.v);else if(230==a.k)a.cb=3,KE(a,kg,a.ob.v);\nelse if(233<=a.k&&262>a.k)BH(a.ob,!1),KE(a,hg,a.ob.v),a.cb=3;else if(107==a.k){if(a.bc.b)return!0;nH(a.ob,a.ob.v,Uq(a.bc.e.Tc.a.pb,yk));a.ob.j=!0;KE(a,"addAtomQuery",a.ob.v)}else if(105==a.k)(c=CH(a.ob))?KE(a,"markAtom",a.ob.v):KE(a,"unMarkAtom",a.ob.v);else if(113!=a.k)if(300c.length&&(c=Sf),nH(a.ob,a.ob.v,c)),KE(a,Kj+a.n,a.ob.v)}else e=!1}else if(0<\na.ob.w)if(a.eb.c=a.o,104==a.k)IE(a);else if(106==a.k){c=a.ob;d=a.ob.w;if(0d&&(d=b);if(0==d)break;JE(c,d);c.a[d]=0}ME(a.ob);XE(a,"delBondGroup",a.o,0,a.ob.w);a.ob.w=0}else if(201==a.k)DH(a.ob,a.ob.w),XE(a,"setBondStereo",a.o,0,a.ob.w);else if(202==a.k||205==a.k)1==a.ob.c[a.ob.w].c&&0==a.ob.c[a.ob.w].f?(a.ob.c[a.ob.w].c=2,XE(a,Lj,a.o,0,a.ob.w)):(a.ob.c[a.ob.w].c=1,a.ob.c[a.ob.w].f=\n0,XE(a,Mj,a.o,0,a.ob.w)),a.ob.c[a.ob.w].f=0;else if(203==a.k)a.ob.c[a.ob.w].c=2,a.ob.c[a.ob.w].f=0,ME(a.ob),XE(a,Lj,a.o,0,a.ob.w);else if(204==a.k)a.ob.c[a.ob.w].c=3,a.ob.c[a.ob.w].f=0,ME(a.ob),XE(a,Nj,a.o,0,a.ob.w);else if(206<=a.k&&229>=a.k)a.cb=2,oH(a.ob),XE(a,jg,a.o,0,a.ob.w),ME(a.ob);else if(107==a.k){if(!a.bc.b)return!0;c=Uq(a.bc.e.Tc.a.pb,yk);a.ob.c[a.ob.w].c=9;a.ob.c[a.ob.w].d=c;XE(a,"setQueryBond",a.o,0,a.ob.w)}else 105==a.k?(c=a.ob,b=a.ob.w,c.k.gb=!0,c.k.sc?(c.i=-1,d=c.c[b].i,b=c.c[b].j,\nf=c.b[d].c,h=c.b[b].c,j=4,f==h&&0=a.k)return!1;++a.Sb;a.o=a.Sb;a.zb[a.Sb]=new kF(a);a.ob=a.zb[a.Sb];a.eb.c=a.o;202<=a.k&&204>=a.k||205==a.k?(EH(a.ob,null),a.ob.q=0,FH(a.ob,1,c/a.xb,d/a.xb),a.ob.v=1,a.ob.x=1,a.cb=1,b=a.ob,pH(b,b.v,0),205==a.k?(FH(a.ob,2,(c+21.65)/a.xb,(d-12.5)/a.xb),a.ob.e[0]=1,a.ob.e[1]=2,a.ob.r=1,XE(a,"addChain",a.o,0,a.ob.w)):XE(a,\ngg,a.o,0,a.ob.w)):206<=a.k&&229>=a.k?(a.ob.z=rG(a,c),a.ob.A=rG(a,d),a.cb=2,oH(a.ob),a.r&&lF(Up(a.r,ig),0,0,0),a.hc=!0):300c.length&&(c=Sf),nH(a.ob,1,c)),KE(a,"addAtom",a.ob.v)):230==a.k?(PG(a,null,!0),a.r&&lF(Up(a.r,kg),0,0,0),a.hc=!0):233<=a.k&&262>a.k?(EH(a.ob,null),a.ob.q=0,FH(a.ob,1,c/a.xb,d/a.xb),a.ob.v=1,BH(a.ob,!0),a.r&&lF(Up(a.r,hg),0,0,0),a.hc=!0):hD()}else e=!1;e&&GH(a)}return a.Ab=\ne}\nfunction HH(a,b,c,d){var e,f,g,h;hD();if(!a.Db||IH(b))return!0;a.Gb=!1;c-=Q(K(R(fG(a,a.nb))));d-=Q(K(R(gG(a,a.nb))));f=rG(a,c-a.Cc);g=rG(a,d-a.Dc);e=rG(a,c);h=rG(a,d);if(2==a.cb||3==a.cb||9==a.cb)return!0;if(1==a.cb){f=!1;a.zb[a.eb.c].v=0;--a.ob.p;g=c;var b=d,j=a.Nb;0>g||0>b||b>a.ub||g>a.yb?qG(j):pG(a,g,b,j);++a.ob.p;if(0g&&(g=1);b/=g;j/=g;o=g/2/Math.tan(0.5235987755982988);m=e-f.b[l].q;r=h-f.b[l].r;l=-g/2+m*j+r*b;b=r*j-m*b;if(0>l)if(1f.b[2].r-f.b[1].r&&0h-f.b[1].r&&(f.b[2].r=f.b[1].r-g/2),0>f.b[2].q-f.b[1].q&&0e-f.b[1].q&&(f.b[2].q=f.b[1].q-0.866*g);else{if(2==f.b[f.e[0]].j&&(o=f.b[f.e[0]].p[1],o==f.e[1]&&(o=f.b[f.e[0]].p[2]),j=f.b[f.e[0]].q-f.b[o].q,b=f.b[f.e[0]].r-f.b[o].r,g=Math.sqrt(j*j+b*b),1>g&&(g=1),b/=g,j/=g,m=e-f.b[o].q,r=h-f.b[o].r,e=r*j-m*b,m=f.b[f.e[1]].q-f.b[o].q,r=f.b[f.e[1]].r-f.b[o].r,h=r*j-m*b,0h||0>e&&0=b?0-b:b)>e){++f.r;if(100g&&(g=1),FH(f,f.p,f.b[f.x].q+25*(j/g),f.b[f.x].r+25*(b/g))}a.B=!0}else if(113==a.k&&0c||0>d||d>a.ub||c>a.yb)&&5!=a.cb))e=fF(a),h=a.ob,j=dF(h),b=j.a,j=j.b,0>f&&be.b||0>g&&je.a||MH(h,f,g),a.cb=5;PE(a,!1);a.Ib=!0;mG(a);a.Cc=c;a.Dc=d;return!0}\nfunction BG(a,b,c,d){var e,f;if(!a.J||a.Vf().a||a.Wf().a||a.K)if(f=!1,e=LF(a,c,d),e!=a.Cb&&(f|=DG(a,a.Cb),f|=CG(a,e),a.Cb=e),!xG(b)){c-=Q(K(R(fG(a,a.nb))));d-=Q(K(R(gG(a,a.nb))));b=c;c=a.Nb;0>b||0>d||d>a.ub||b>a.yb?qG(c):pG(a,b,d,c);113==e&&0d.b[e].j&&(SH(d,null),b=d.e[d.r-1],d.c[d.q].i=e,d.c[d.q].j=b,TH(d.b[e],b),TH(d.b[e],b)),JE(d,d.p)),d.u=!1,a.hc=!0;else if(0!=a.eb.c&&a.o!=a.eb.c){JE(a.ob,a.ob.p);b=a.ob.x;c=a.eb.a+a.ob.p;e=a.zb[a.eb.c];d=new tH(a,z(UH,q,119,[null,a.ob,e]),2);d.b[0]=new VH;WH(d,b,c,1);b=C(UH,\nq,119,a.zb.length,0);for(f=0,c=0;fd.c[b].c?(++d.c[b].c,d.c[b].f=0):ht(d.k,"Maximum allowed bond order is 3 !")):6==d.b[e].j?(--d.q,YH(d,d.x),ht(d.k,"Not possible connection !")):(d.c[d.q].j=e,YH(d,d.x),b=d.x,TH(d.b[e],b),TH(d.b[b],e),ZH(d.c[d.q],d.b)));iF(a.ob);a.B&&(d=a.pb,d.a!=d.b&&d.a.b!=d.b&&(e=d.a.c,bH(d),d.a.c=e),\nXE(a,gg,a.o,0,a.ob.w),a.B=!1);d=!0}else 5==a.cb&&(iF(a.ob),d=a.hc=!0);0=b&&0==c||b==c&&a.o==a.Zb)return-1;0>=b&&0Vb))for(;xc=nb[ad]*nb[ad];)0==xc%nb[ad]?fb=!1:++ad;if(fb){G[++Zb]=Fv(xc);if(Zb>=Vb)break;Ocha&&(ha=0),0>pc&&(pc=0),yd=28*ha+pc));Jc=0;0!=m.b[P].n&&(-2>m.b[P].n?Jc=1:-2==m.b[P].n?Jc=2:-1==m.b[P].n?Jc=3:1==m.b[P].n?Jc=4:2==m.b[P].n?Jc=5:2Eb&&(Eb=10-Eb));Dc=126;N=ke;N+=126*m.b[P].i;Dc*=7;N+=Jc*Dc;Dc*=7;0!=Eb&&(N+=Eb*Dc);Dc*=7;N+=yd*Dc;Dc*=783;N+=m.b[P].j*Dc;U[P]=Fv(N)}for(oc=0;!hI(m,ba,U);){Zc=!1;for(P=1;P<=m.p;++P)ba[P]!=Ua[P]&&(Ua[P]=ba[P],Zc=!0);if(Zc){for(P=1;P<=m.p;++P){U[P]=Lk;for(Za=1;Za<=m.b[P].j;++Za)U[P]=Jv(U[P],Fa[ba[m.b[P].p[Za]]])}oc=\n0}else if(0m.c[P].j&&(Ub=m.c[P].i,m.c[P].i=m.c[P].j,m.c[P].j=Ub,1==m.c[P].f?m.c[P].f=3:2==m.c[P].f?m.c[P].f=4:3==m.c[P].f?m.c[P].f=1:4==m.c[P].f&&(m.c[P].f=2));for(P=1;Pm.a[u])&&O!=ra[u]){nc=!0;for(Ia=1;Ia<=ya;++Ia)if(da[Ia]==u&&Fb[Ia]==O||da[Ia]==O&&Fb[Ia]==u){nc=!1;break}nc&&(++ya,da[ya]=u,Fb[ya]=O)}}else Y[++M]=O;if(0==M){if(Ab==m.p)break;u=ea[sb--]}else if(1==M)ra[Y[1]]=u,u=Y[1],m.a[u]=++Ab;else{ea[++sb]=u;s=0;for($=1;$<=M;++$)if(Z=XH(m,Y[$],u),!Kb[Z]){s=Y[$];break}if(0==s)for($=1;$<=M;++$)if(Z=XH(m,Y[$],u),2==m.d[Z]||3==m.d[Z]){s=Y[$];break}0==s&&(s=\nY[1]);ra[s]=u;u=s;m.a[s]=++Ab}}ra=UF(m.p+1);y=UF(m.p+1);Uc=[];Yc=[];F=Ab=sb=0;for($=1;$<=m.p;++$)if(1==m.a[$]){u=$;break}b:for(;;){0m.b[Lb].j||4Wa.b[bd].j||3Nb[ub]&&(lc=S,S=ub,ub=lc);fe=\nS;0==S&&(fe=ub,ib=!0);for(nd=1;nd<=Wa.b[bd].j;++nd)Qc=Wa.b[bd].p[nd],Qc!=zc[ud-1]&&(0==La?La=Qc:jb=Qc);0Nb[jb]&&(lc=La,La=jb,jb=lc);fd=La;0==La&&(fd=jb,He=!0);Xd=0Xd+mc?-(Xd+mc):Xd+mc)||0!=og||0!=Df?ht(Wa.k,"Bad stereoinfo on allene !"):(Ac=Wa.b[zc[ud-1]].q-Wa.b[bd].q,Bd=Wa.b[zc[ud-1]].r-Wa.b[bd].r,cd=Math.sqrt(Ac*Ac+Bd*Bd),0.001>cd&&(cd=0.001),0<(Wa.b[fd].r-\nWa.b[zc[ud-1]].r)*(Ac/cd)-(Wa.b[fd].q-Wa.b[zc[ud-1]].q)*(Bd/cd)?kc[uc]=1:kc[uc]=-1,ib&&(kc[uc]*=-1),He&&(kc[uc]*=-1),fe==S&&0>Xd&&(kc[uc]*=-1),fe==ub&&0>mc&&(kc[uc]*=-1),Nb[fe]>Nb[fd]&&(kc[uc]*=-1))}}else c:{var ab=m,qc=Lb,Jd=Wb,Kd=Mb,Ld=da,Ob=Fb,gd=oa,Cd=Ta,le=void 0,Dd=void 0,Yd=void 0,rc=void 0,bb=void 0,vc=void 0,pb=void 0,Te=void 0,Md=void 0,Rc=void 0,Pa=void 0,Oa=void 0,Sc=void 0,$b=void 0,Tc=void 0,aa=void 0,Zd=void 0,Oa=UF(4),$b=UF(4),Ed=void 0,Nd=void 0,me=void 0,Ue=void 0,Uf=void 0,lf=void 0,\nlf=-1;0bb;++bb)0>=Oa[bb]||(le=XH(ab,qc,Oa[bb]),$b[bb]=lI(ab,le,qc),0<$b[bb]?\n(++Rc,Zd=Oa[bb],vc=Oa[bb]):0>$b[bb]?(++pb,rc=Oa[bb],vc=Oa[bb]):Te=Oa[bb]);Md=Rc+pb;aa=UF(4);Tc=0;if(3==ab.b[qc].j){if(1==Rc&&1==pb||3==Md&&0bb;++bb)le=XH(ab,qc,Pa[bb]),Dd[bb]=lI(ab,le,qc);if(4==Md){if(0==Rc||0==pb){ht(ab.k,"Error in C4 stereospecification !");break c}if(1==Rc||1==pb)aa[0]=Pa[0],aa[1]=Pa[3],aa[2]=Pa[2],aa[3]=Pa[1],Tc=Dd[0];else{for(bb=0;4>bb;++bb)-1==Dd[bb]&&(Dd[bb]=0);Md=2}}else if(3==Md)if(3==Rc||3==pb)aa[0]=Pa[0],aa[1]=Pa[3],aa[2]=Pa[2],aa[3]=Pa[1],0bb;++bb)Dd[bb]==Yd&&(Dd[bb]=0);Md=2}if(2==Md)if(1==Rc&&1==pb)Pa[1]==rc?(Pa[1]=Pa[2],Pa[2]=\nPa[3]):Pa[2]==rc&&(Pa[2]=Pa[3]),aa[0]=Zd,aa[1]=rc,aa[2]=Pa[2],aa[3]=Pa[1],Tc=1;else{if(Dd[0]==Dd[1]||Dd[1]==Dd[2]){ht(ab.k,"Error in C4 stereospecification ! 2/0r");break c}0!=Dd[0]?(aa[0]=Pa[0],aa[1]=Pa[2],aa[2]=Pa[1],aa[3]=Pa[3]):(aa[0]=Pa[1],aa[1]=Pa[3],aa[2]=Pa[2],aa[3]=Pa[0]);1=Xe&&(pd=!0,za=(qE(),xE)[Xe]);pd&&(0!=ge?za=Vf+ge+za:za=Vf+za,1==vd[Ve]?za+=Fd:-1==vd[Ve]&&(za+="@@"),1==Ef?za+=Pe:1ne?-ne:ne)&&(za+=0>ne?-ne:ne)),pg&&(za+=dd+Kg),za+=bg);xp(We.a,za);for(J=1;J<=ya;++J)if(da[J]==u||Fb[J]==u)D=Fb[J],D==u&&(D=da[J]),L[u]",!0);j=-1c;++c)(d=b.d[c])?a.zb[c]=new HE(d):a.zb[c]=null;0b||b>a.Sb?(ht(a,"ERROR - invalid mol index: "+b),a.Ze(a.Ec.d),null):a.zb[b]}function $G(a){var b,c,d;b=YE(a);for(d=1;d<=a.Sb;++d)c=a.zb[d],c.o=b}function uI(a,b){b!=a.nb&&(a.nb=b,a.fg(),a.Ze(a.Ec.d))}function vI(a,b){var c,d,e;if(b!=a.xb){c=fF(a);a.xb=b;d=fF(a);e=Q(K(R((d.b-d.c)/2-(c.b-c.c)/2)));d=Q(K(R((d.a-d.d)/2-(c.a-c.d)/2)));for(c=1;c<=a.Sb;++c)MH(a.zb[c],e,d),iF(a.zb[c]);a.Ib=!0;a.Ze(a.Ec.d)}}\nfunction aF(a,b){var c;c=-1;I(b,"Select substituent")?(c=202,b=n):I(b,Bb)?c=235:I(b,Cb)?c=240:I(b,zb)?c=260:I(b,Qb)?c=261:I(b,Yb)?c=241:I(b,Jb)?c=233:I(b,Ib)?c=236:I(b,Hb)?c=237:I(b,Xb)?c=234:I(b,Sb)?c=243:I(b,ac)?c=252:I(b,Rb)?c=244:I(b,dc)?c=239:I(b,"-PO3H2")?c=251:I(b,yb)?c=242:I(b,wb)?c=245:I(b,xb)&&(c=238);0=a.mb-1)for(g=f.b.b;j>=a.mb-1&&1=a.k&&(a.k=213);for(c=1;14>=c;++c)qF(a,b,c,1),qF(a,b,c,2);a.k=d;hG(a.Ec,a.wc.a,0,0)}var f;if(a.Hb){QF(a.fb.b.a,a.nb/T);b=a.fb.b;d=a.mb+(a.Lb?1:0);c=(a.M.a-Q(K(R(gG(a,a.nb)))))/a.nb;f=c-a.mb;rF(b,sE);AF(b.a,Q(K(R(0*(BF(),T)))),Q(K(R(0*T))),Q(K(R(d*T))),Q(K(R(c*\nT))));a.Lb?(rF(b,(zB(),EB)),e=MF*(a.mb+(a.Lb?1:0))+3,f>e&&(CF(b,0,e,a.mb-1,e),DF(b.a,Q(K(R(0*T))),Q(K(R(e*T))),Q(K(R(0*T))),Q(K(R((c-1)*T)))),CF(b,a.mb-1,e,a.mb-1,f),CF(b,a.mb-1,f,d,f))):(rF(b,tE),DF(b.a,Q(K(R(0*T))),Q(K(R(0*T))),Q(K(R(0*T))),Q(K(R((c-1)*T)))),CF(b,0,MF*a.mb,c-1,MF*a.mb),rF(b,QB(sE)),DF(b.a,Q(K(R((d-1)*T))),Q(K(R(0*T))),Q(K(R((d-1)*T))),Q(K(R((f+1)*T)))));DF(b.a,Q(K(R(0*T))),Q(K(R((c-1)*T))),Q(K(R(d*T))),Q(K(R((c-1)*T))));for(c=3;c<=MF+2;++c)qF(a,b,1,c);b=Q(K(R(gG(a,a.nb))));hG(a.Ec,\na.fb.a,0,b)}a.Jb&&(QF(a.fc.b.a,a.nb/T),d=a.fc.b,c=a.Lb?1:3,b=(a.M.a-Q(K(R(gG(a,a.nb))))-Q(K(R(a.mb*a.nb))))/a.nb,a.Lb?(rF(d,(zB(),EB)),AF(d.a,Q(K(R(0*(BF(),T)))),Q(K(R(0*T))),Q(K(R(c*T))),Q(K(R(b*T))))):(rF(d,QB(sE)),DF(d.a,Q(K(R((c-1)*(BF(),T)))),Q(K(R(0*T))),Q(K(R((c-1)*T))),Q(K(R(b*T)))),rF(d,sE),DF(d.a,Q(K(R((c-2)*T))),Q(K(R(0*T))),Q(K(R((c-2)*T))),Q(K(R(b*T)))),rF(d,tE),DF(d.a,Q(K(R((c-3)*T))),Q(K(R(0*T))),Q(K(R((c-3)*T))),Q(K(R(b*T))))),b=a.M.b-Q(K(R((a.Lb?1:3)*a.nb))),c=Q(K(R(gG(a,a.nb)))),\nhG(a.Ec,a.fc.a,b,c))}}function ot(a,b){a.A?0==b&&(a.I=-1,ht(a,Ug),mG(a)):(a.gb?a.I=b:-1a.I?a.I=10*a.I+b:a.I=b,a.gb=!1,0==a.I?(a.I=-1,ht(a,Ug)):ht(a,a.I+fa),mG(a))}function uG(a,b){var c,d;d=b.b;c=b.a;a.J||(d-=Q(K(R(fG(a,a.nb))))+Q(K(R((a.Lb?1:3)*a.nb))),c-=Q(K(R(gG(a,a.nb))))+Q(K(R(a.mb*a.nb))));1>d&&(d=1);1>c&&(c=1);a.yb=Vu(d);a.ub=Vu(c)}function EE(a){qE();return 14<=a&&20>=a?1:21<=a&&28>=a?2:29<=a&&31>=a?3:0}w(556,454,am);_.vf=function(a){OE(this,a)};_.Uf=yI;\n_.Vf=function(){return UE(),null!=this.Pb?VE:WE};_.Wf=function(){return UE(),UE(),WE};_.Xf=SA;_.Yf=function(a,b,c){return eB(this,b,c)};_.Zf=SA;_.$f=function(){hD()};_._f=cC;_.ag=zI;_.bg=cC;_.cg=function(){hD()};_.dg=function(){return jt(this,!0,!1)};\n_.wf=function(a){var b,c;if(this.s)if(c=a.c,b=a.f,a=a.i,c=(100+2*c)/100,this.J||!(bthis.M.a-Q(K(R(this.mb*this.nb)))||b>this.M.b-Q(K(R((this.Lb?1:3)*this.nb))))){if(b=this.xb*c,b>this.xb&&10>=b||b=b&&uI(this,b)};_.Ze=function(){xI(this)};\n_.eg=function(a){this.Tb&&(null!=a&&0j&&(j=0);h=new cJ(g,h,j,L);dJ(h);Am(g.k,h);dE(f,L.pb);cE(f,g.pb)}else XD("JSME initialization error: HTML id "+a+" not found.")}function eJ(){return bv(null)}\nfunction fJ(a){return bv(a)}w(560,1,Hl,VI,XI,YI,WI);_.hg=function(a){tx(this.d,new gJ(this,a),(Hs(),Hs(),Is))};_.ig=function(a){tx(this.d,new hJ(this,a),(qt(),qt(),rt))};_.jg=function(a){tx(this.d,new iJ(this,a),(wt(),wt(),xt))};_.kg=function(a){tx(this.d,new jJ(this,a),(zt(),zt(),At))};_.lg=function(a){oq(2,new kJ(this.b,a))};_.mg=function(){jF(this.b,!0)};_.ng=function(){Gq((Dq(),Eq),new lJ(this))};_.og=function(){var a,b,c;c=[];for(b=new vu(this.d.a);b.ba&&(b.x=a,TF(b,a),lG(b))};_.Xg=function(a,b){var c=this.b,d;d=tI(c,a);1>b||b>d.p?(ht(c,"ERROR - invalid atom index: "+b),mG(c)):(d.v=b,GH(c))};_.Yg=function(a){FI(this.b,de,a)};_.Zg=function(a,b){FI(this.b,a,b)};_.he=function(a){hx(this.d,a);UI(this)};_.$g=function(a){this.b.V=a};_._g=function(a){uI(this.b,a)};_.ah=function(a){var b=this.b;b.tb=a;lG(b)};_.bh=function(a){var b=this.b;b.wb=a;lG(b)};_.ch=function(a){vI(this.b,a)};\n_.dh=function(a){this.b.Pb=a};_.eh=function(a){this.b.Qb=a};_.fh=function(a){var b=this.b;b.Wb=a;b.F=nF(b,!1)};_.gh=function(a){this.b.Yb=a};_.hh=function(a,b){ix(this.d,a,b);UI(this)};_.ih=function(a,b,c){c&&ix(this.c,a,b);ix(this.d,a,b);UI(this)};_.jh=function(a,b){jx(this.d,a,b);UI(this)};_.kh=function(a,b,c){c&&jx(this.c,a,b);jx(this.d,a,b);UI(this)};_.lh=function(a){aF(this.b,a)};_.mh=function(a,b){var c=this.b,d;c.q=!1;d=c.sc;c.sc=!1;c.uc=new qI(c,a);c.sc=d;c.k=253;ht(c,b);mG(c)};\n_.ie=function(a){px(this.c.pb,a)};_.nh=function(a){this.b.i=a};_.je=function(a){this.d.pb.style[Dk]=a;UI(this)};_.oh=function(a){LH(this.b,a)};_.ph=function(){return FE(this.b)};_.a=-1;_.b=null;_.c=null;_.d=null;var ZI=0;function lJ(a){this.a=a}w(561,1,{},lJ);_.pd=function(){var a,b;for(b=new vu(this.a.d.a);b.b=a.c.length)return!1;c=a.c[a.b];g=c.getAttribute(Dk)||n;b=c.getAttribute(Qh)||n;f=c.getAttribute(Ji)||n;e=c.getAttribute(Th)||n;var h,j,l;l={};for(d=0;d=d&&b=a;return c?65536+((d&1023)<<10)+(e&1023):d}function NJ(a,b){return 2>b||36b?b:10)?a-48:97<=a&&aa?-a:a):a}\nfunction QJ(a,b){var c;c=new OJ;c.d=we+(RJ(0!=a?-a:0)?PJ(0!=a?-a:0):n+Lp(c));SJ(0!=a?-a:0)&&TJ(0!=a?-a:0,c);c.b=4;c.a=b;return c}function V(a){var b;b=new OJ;b.d=we+(RJ(a)?PJ(a):n+Lp(b));SJ(a)&&TJ(a,b);return b}function UJ(a,b){var c;c=new OJ;c.d=we+(RJ(a)?PJ(a):n+Lp(c));SJ(a)&&TJ(a,c);c.b=b?8:0;return c}function VJ(){var a;a=new OJ;a.d=we+(RJ(0)?PJ(0):n+Lp(a));SJ(0)&&TJ(0,a);a.b=2;return a}function WJ(a){var b;b=new OJ;b.d=we+(RJ(a)?PJ(a):n+Lp(b));SJ(a)&&TJ(a,b);b.b=1;return b}\nfunction SJ(a){return typeof a==Qi&&0b||36c||2147483647a)return 0;if(0==a)return 32;b=-(a>>16)>>16&16;c=16-b;a>>=b;b=a-256>>16&8;c+=b;a<<=b;b=a-4096>>16&4;c+=b;a<<=b;b=a-16384>>16&2;c+=b;a=a<>14;return c+2-(a&~(a>>1))}function ov(a){var b,c;if(0==a)return 32;c=0;for(b=1;0==(b&a);b<<=1)++c;return c}function dm(a){var b,c,d;b=C(cK,Fl,-1,8,1);c=(dK(),eK);d=7;if(0<=a)for(;15>=4;else for(;0>=4;b[d]=c[a&15];return fK(b,d,8)}\nfunction AG(a){var b,c;return-129a?(b=a+128,c=(gK(),hK)[b],!c&&(c=hK[b]=new pB(a)),c):new pB(a)}w(597,594,{88:1,93:1,99:1,101:1},pB);_.eQ=function(a){return H(a,99)&&a.a==this.a};_.hC=Tv;_.tS=bK;_.a=0;function gK(){gK=x;hK=C(OH,q,99,256,0)}var hK;function aG(a){return 0>=a?0-a:a}function bG(a){return 0>a?-a:a}function Um(a,b){return a>b?a:b}function R(a){return Math.round(a)}function iK(a){return Math.sqrt(a)}function gD(){}function ku(a){this.f=a}\nw(601,136,{88:1,96:1,100:1,104:1,105:1},gD,ku);function dK(){dK=x;eK=z(cK,Fl,-1,[48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122])}var eK;function ZJ(a){this.f=a}w(603,596,{88:1,96:1,98:1,102:1,104:1,105:1},ZJ);function MJ(a,b){return a.charCodeAt(b)}function jK(a,b){return-1!=a.lastIndexOf(b)&&a.lastIndexOf(b)==a.length-b.length}function I(a,b){return!H(b,1)?!1:""+a==b}function lx(a,b){return a.indexOf(b)}\nfunction uD(a,b,c){return a.indexOf(b,c)}function uA(a,b){return a.lastIndexOf(b)}function RI(a,b,c){var d;for(d=0;0<=(d=c.indexOf(Xf,d));)36==c.charCodeAt(d+1)?c=c.substr(0,d-0)+Da+ox(c,++d):c=c.substr(0,d-0)+ox(c,++d);return a.replace(RegExp(b,Eh),c)}\nfunction kK(a,b){for(var c=RegExp(b,Eh),d=[],e=0,f=a,g=null;;){var h=c.exec(f);if(null==h||f==n){d[e]=f;break}else d[e]=f.substring(0,h.index),f=f.substring(h.index+h[0].length,f.length),c.lastIndex=0,g==f&&(d[e]=f.substring(0,1),f=f.substring(1)),g=f,e++}if(0fa&&a[a.length-1]>fa?a:a.replace(/^(\\s*)/,n).replace(/\\s*$/,n)}function fK(a,b,c){a=a.slice(b,c);return String.fromCharCode.apply(null,a)}\nfunction lK(a,b,c){if(128>c)return a[b]=(c&127)<<24>>24,1;if(2048>c)return a[b++]=(c>>6&31|192)<<24>>24,a[b]=(c&63|128)<<24>>24,2;if(65536>c)return a[b++]=(c>>12&15|224)<<24>>24,a[b++]=(c>>6&63|128)<<24>>24,a[b]=(c&63|128)<<24>>24,3;if(2097152>c)return a[b++]=(c>>18&7|240)<<24>>24,a[b++]=(c>>12&63|128)<<24>>24,a[b++]=(c>>6&63|128)<<24>>24,a[b]=(c&63|128)<<24>>24,4;if(67108864>c)return a[b++]=(c>>24&3|248)<<24>>24,a[b++]=(c>>18&63|128)<<24>>24,a[b++]=(c>>12&63|128)<<24>>24,a[b++]=(c>>6&63|128)<<24>>\n24,a[b]=(c&63|128)<<24>>24,5;throw new Pm("Character out of range: "+c);}function mx(a){var b;return 65536<=a?(b=56320+(a-65536&1023)&65535,String.fromCharCode(55296+(a-65536>>10&1023)&65535)+String.fromCharCode(b)):String.fromCharCode(a&65535)}function mK(a){var b,c,d,e,f;e=a.length;for(d=b=0;dc?++b:2048>c?b+=2:65536>c?b+=3:2097152>c?b+=4:67108864>c&&(b+=5);b=C(nK,Nl,-1,b,1);for(d=f=0;da||a>=b)&&FK(a,b)}function FK(a,b){throw new KJ("Index: "+a+", Size: "+b);}w(619,612,tl);\n_.wh=function(){throw new BD("Add not supported on this list");};_.qh=function(a){this.wh(this.Pf(),a);return!0};_.eQ=function(a){return EK(this,a)};_.hC=function(){var a,b,c;b=1;for(a=this.ue();a.Vd();)c=a.Wd(),b=31*b+(null==c?0:Kp(c)),b=~~b;return b};_.ue=function(){return new vu(this)};_.yh=function(){return this.zh(0)};_.zh=function(a){return new GK(this,a)};_.Ah=function(){throw new BD("Remove not supported on this list");};function DK(a){return a.b=a.d.Pf())throw new Px;return a.d.xh(a.c=a.b++)}function AK(a){if(0>a.c)throw new nA;a.d.Ah(a.c);a.b=a.c;a.c=-1}function vu(a){this.d=a}w(620,1,{},vu);_.Vd=function(){return DK(this)};_.Wd=function(){return wu(this)};_.Xd=function(){AK(this)};_.b=0;_.c=-1;_.d=null;function GK(a,b){var c;this.d=this.a=a;c=a.Pf();(0>b||b>c)&&FK(b,c);this.b=b}w(621,620,{},GK);_.Bh=function(){return 0=this.b)throw new Px;return this.a.xh(this.c=--this.b)};_.a=null;\nfunction HK(a){a=new xK(a.b.a);return new IK(a)}function JK(a,b){this.a=a;this.b=b}w(622,614,Il,JK);_.rh=KK;_.ue=function(){return HK(this)};_.Pf=function(){return this.b.a.d};_.a=null;_.b=null;function IK(a){this.a=a}w(623,1,{},IK);_.Vd=function(){return DK(this.a.a)};_.Wd=function(){return(this.a.b=wu(this.a.a)).th()};_.Xd=function(){zK(this.a)};_.a=null;function LK(a){a.b=C(MK,q,0,0,0)}function vC(a,b,c){(0>b||b>a.c)&&FK(b,a.c);a.b.splice(b,0,c);++a.c}\nfunction Am(a,b){kq(a.b,a.c++,b);return!0}function zw(a,b){$B(b,a.c);return a.b[b]}function vz(a,b){for(var c=0;ca.c&&kq(b,a.c,null);return b}\nfunction Gm(){LK(this)}function eC(a){LK(this);this.b.length=a}function tB(a){LK(this);a=Nu(a.b,a.c);Array.prototype.splice.apply(this.b,[0,0].concat(a));this.c=this.b.length}w(627,619,Zl,Gm,eC,tB);_.wh=function(a,b){vC(this,a,b)};_.qh=function(a){return Am(this,a)};_.mg=function(){this.b=C(MK,q,0,0,0);this.c=0};_.rh=function(a){return-1!=vz(this,a)};_.xh=function(a){return zw(this,a)};_.Mf=function(){return 0==this.c};_.Ah=function(a){return NK(this,a)};_.sh=function(a){return tm(this,a)};_.Pf=Ns;\n_.c=0;function Eu(){Eu=x;Fu=new OK}var Fu;function OK(){}w(630,619,sl,OK);_.rh=zI;_.xh=function(){throw new Mx;};_.Pf=function(){return 0};function PK(){this.a=new Date}function QK(a){return 10>a?wc+a:n+a}w(633,1,{88:1,92:1,93:1,106:1},PK);_.eQ=function(a){return H(a,106)&&xv(K(this.a.getTime()),K(a.a.getTime()))};\n_.hC=function(){var a;a=K(this.a.getTime());var b,c,d,e;c=32;d=a.h&1048575;22>c?(e=d>>>c,b=a.m>>c|d<<22-c,c=a.l>>c|a.m<<22-c):44>c?(e=0,b=d>>>c-22,c=a.m>>c-22|a.h<<44-c):(b=e=0,c=d>>>c-44);b=fv(c&4194303,b&4194303,e&1048575);a=fv(a.l^b.l,a.m^b.m,a.h^b.h);return Q(a)};\n_.tS=function(){var a,b;b=-this.a.getTimezoneOffset();a=(0<=b?kb:n)+~~(b/60);b=10>(0>b?-b:b)%60?wc+(0>b?-b:b)%60:n+(0>b?-b:b)%60;return(RK(),SK)[this.a.getDay()]+fa+TK[this.a.getMonth()]+fa+QK(this.a.getDate())+fa+QK(this.a.getHours())+dd+QK(this.a.getMinutes())+dd+QK(this.a.getSeconds())+" GMT"+a+b+fa+this.a.getFullYear()};_.a=null;function RK(){RK=x;SK=z(Zu,q,1,"Sun,Mon,Tue,Wed,Thu,Fri,Sat".split(","));TK=z(Zu,q,1,"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(","))}var SK,TK;\nfunction tu(a,b){return null==E(a.a,b,a)}function su(){this.a=new up}w(635,614,{88:1,92:1,111:1},su);_.qh=function(a){return tu(this,a)};_.rh=KK;_.Mf=function(){return 0==this.a.d};_.ue=function(){return HK(new JK(this.a,new GD(this.a)))};_.sh=function(a){return null!=Du(this.a,a)};_.Pf=yK;_.tS=function(){return vK(new JK(this.a,new GD(this.a)))};_.a=null;function yD(a,b){this.a=a;this.b=b}w(639,617,Rl,yD);_.th=Tv;_.uh=zy;_.vh=function(a){var b;b=this.b;this.b=a;return b};_.a=null;_.b=null;\nfunction Px(){}w(640,136,{88:1,96:1,104:1,105:1,110:1},Px);function UK(a){var b,c;b=a.b;c=a.d.length;if(ba.j&&(++a.j,a.p[a.j]=b)}function bL(a){var b;b=new VH;b.f=a.f;b.d=a.d;b.q=a.q;b.r=a.r;b.s=a.s;b.n=a.n;b.e=a.e;b.p=a.p.slice();b.j=a.j;b.c=a.c;b.a=a.a;b.b=a.b;b.i=a.i;b.o=a.o;b.k=a.k;return b}function vH(a){return-99199!=a.f?a.f:0}function cL(a){return 4<=a.o&&2==a.j}\nfunction hF(a,b,c){a.q+=b;a.r+=c}function ZE(a){var b;b=-99199!=a.f;a.f=-99199;return b}function VH(){$K();this.p=UF(7)}w(660,1,{114:1},VH);_.a=3;_.b=null;_.c=0;_.d=0;_.e=null;_.f=-99199;_.i=0;_.j=0;_.k=0;_.n=0;_.o=0;_.q=0;_.r=0;_.s=0;var aL;function gI(a,b){var c;c=dL(a);return 0\\\\.]+$",2);oL=new ZK("\\\\s+",2)}\nfunction FG(a){lL();var b,c,d,e;this.i=this.f=null;this.j=0;this.e=!1;this.a=this.c=null;var f,g,h;if(null==a||0==a.length)c=0;else{g=1;f=a.length;for(h=0;h=this.j?this.b=nx(a):this.b=a;c=new XK(oL,this.b);this.d=c.b.a.test(c.a);do if(4a.indexOf("j")&&((this.e=0=f.length)e=0;else{for(h=0,j=f.length;ho&&(o=0.001);r=g/o;e=f/o;l=UF(4);for(h=0;4>h;++h)d[h]==c||0>=d[h]||(0==l[1]?l[1]=d[h]:0==l[2]?l[2]=d[h]:0==l[3]&&(l[3]=d[h]));m=UF(4);d=UF(4);for(h=1;3>=h;++h)3==h&&0==l[3]||(f=(a.b[l[h]].q-a.b[b].q)*e+(a.b[l[h]].r-a.b[b].r)*r,g=(a.b[l[h]].r-a.b[b].r)*e-(a.b[l[h]].q-a.b[b].q)*r,o=Math.sqrt(f*f+g*g),0.001>o&&(o=0.001),m[h]=g/o,d[h]=f/o);a=SL(m[1],d[1],m[2],d[2]);0b?(j[1]=l[1],j[2]=l[3],j[3]=l[2]):0>a&&0d?(j[1]=l[2],j[2]=l[3],j[3]=l[1]):0>d&&0b&&0>a&&(j[1]=l[3],j[2]=l[2],j[3]=l[1])):0j&&(j=0.001);g/=j;f/=j;l=j+25*Math.cos(1.0471975511965976);o=25*Math.sin(1.0471975511965976);h=XH(a,b,d);if(3==a.c[h].c||204==a.k.k||1!=a.c[h].c&&(203==a.k.k||204==a.k.k)||a.n)l=j+25,o=0;0o?o=-o:0>c&&0j&&(j=0.001),FH(a,a.p,a.b[b].q+25*f/j,a.b[b].r+25*g/j),0==KH(a,a.p,1,a.p)||h==a.b[b].j);++h);break;default:return--a.p,ht(a.k,"Are you trying to draw an hedgehog ?"),a.k.cb=9,!1}b=WH(a,a.v,a.p,1);203==a.k.k&&(b.c=2);204==a.k.k&&\n(b.c=3);201==a.k.k&&DH(a,a.q);a.z=a.b[a.p].q;a.A=a.b[a.p].r;return e}function xH(a,b){var c,d;if(!b||0==b.c)return n;d=n;d+="M V30 BEGIN COLLECTION"+(qE(),ca);d+=mf+a+" [ATOMS=("+b.c;for(c=new vu(b);c.bj&&(j=0.001);1>aG((a.b[b].r-a.b[e].r)*(g/j)+(a.b[b].q-a.b[e].q)*(h/j))?(g=a.b[b].q-a.b[e].q,h=a.b[b].r-a.b[e].r,j=Math.sqrt(g*g+h*h),0.001>j&&(j=0.001),b=h/j,g/=j,d[0]=a.b[e].q+j*g-c*b,d[1]=a.b[e].r+c*g+j*b):(g=(a.b[e].q+a.b[f].q)/2,e=(a.b[e].r+a.b[f].r)/2,g=a.b[b].q-g,h=a.b[b].r-e,j=Math.sqrt(g*g+h*h),0.001>j&&(j=0.001),d[0]=a.b[b].q+c*g/j,d[1]=a.b[b].r+c*h/j)}\nfunction oH(a){var b,c,d,e,f,g,h,j,l,o,m,r,t,y;o=-1;j=6;switch(a.k.k){case 206:j=3;break;case 207:j=4;break;case 208:case 221:case 223:j=5;break;case 210:case 209:j=6;break;case 211:j=7;break;case 212:j=8;break;case 229:j=9}f=6.283185307179586/j;l=iK(312.5/(1-Math.cos(f)));if(0a.b[a.v].j)ZL(a,j,f,l);else if(!a.k.Bb&&!a.k.rc)o=a.v,pH(a,a.v,0),a.v=a.p,ZL(a,j,f,l);else{a.k.rc=!1;if(209==a.k.k||221==a.k.k||223==a.k.k){ht(a.k,"ERROR - cannot add aromatic spiro ring !");a.k.cb=9;return}for(d=\n1;d<=a.b[a.v].j;++d)if(b=a.c[XH(a,a.v,a.b[a.v].p[d])].c,2m&&(m=0.001);g/=m;e/=m;for(d=1;d<=j;++d)h=EH(a,null),r=f*d+1.5707963267948966,JH(h,b[0]+l*(Math.sin(r)*e-Math.cos(r)*g),b[1]+l*(Math.cos(r)*e+Math.sin(r)*g))}else if(0m&&(m=0.001);g/=m;e/=m;h=m/2;r=l*Math.sin(0.5*(3.141592653589793-f));m=1;0<(a.b[d].r-a.b[b].r)*e-(a.b[d].q-a.b[b].q)*g&&(r=-r,m=0);t=a.b[b].q+h*e-r*g;y=a.b[b].r+r*e+h*g;for(d=1;d<=j;++d)h=EH(a,null),r=f*(d+0.5)+3.141592653589793*m,JH(h,t+l*(Math.sin(r)*e-Math.cos(r)*g),y+l*(Math.cos(r)*e+Math.sin(r)*g)),1==m?(d==j&&JH(h,a.b[b].q,a.b[b].r),\nd==j-1&&JH(h,a.b[c].q,a.b[c].r)):(d==j-1&&JH(h,a.b[b].q,a.b[b].r),d==j&&JH(h,a.b[c].q,a.b[c].r))}else{b=0.5;6==j&&(b=0);for(d=1;d<=j;++d)h=EH(a,null),r=f*(d-b),JH(h,a.z+l*Math.sin(r),a.A+l*Math.cos(r))}b=j;l=0;for(f=1;f<=b;++f)SH(a,null),l=a.p-b+f,a.b[l].j=2,a.c[a.q].i=l,a.c[a.q].j=l+1;a.c[a.q].j=a.p-b+1;if(209==a.k.k){if(a.c[a.q-4].c=2,a.c[a.q-2].c=2,a.c[a.q].c=2,0e&&ed;--f)if(0g&&(g=0.001),e/=g,f/=g);l=a.b[a.v].q+d*f;o=a.b[a.v].r+d*e;for(g=1;g<=b;++g)h=EH(a,null),j=c*g-1.5707963267948966,JH(h,l+d*(Math.sin(j)*f-Math.cos(j)*e),o+d*(Math.cos(j)*f+Math.sin(j)*e))}function YL(a,b){var c,d;0==b&&(b=a.p);for(c=a.p;c>a.p-b;--c)d=KH(a,c,1,a.p),0!=d&&hF(a.b[c],6,6)}\nfunction XH(a,b,c){var d,e,f;for(e=1;e<=a.q;++e)if(d=a.c[e],f=d.i,d=d.j,f==b&&d==c||f==c&&d==b)return e;return 0}function yG(a){var b;for(b=1;b<=a.q;++b)if(1==a.c[b].c&&0=c||0>=d?a.s=!0:(b=dF(a),c=c/2-b.a,b=d/2-b.b,a.k.Ob||MH(a,c,b),iF(a))}\nfunction kH(a,b,c){var d,e,f;if(1==c)return a.b[b].n+=1,!0;if(-1==c)return a.b[b].n+=-1,!0;e=a.b[b].n;f=a.b[b].i;d=a.b[b].o;-1==d&&0==c&&(0==a.b[b].n?a.b[b].n=1:1==a.b[b].n?a.b[b].n=-1:-1==a.b[b].n&&(a.b[b].n=0));switch(a.b[b].a){case 1:0==d&&(0==a.b[b].n?a.b[b].n=1:1==a.b[b].n?a.b[b].n=-1:a.b[b].n=0);break;case 2:2d&&(0==\na.b[b].n?a.b[b].n=-1:-1==a.b[b].n?a.b[b].n=1:1==a.b[b].n&&(a.b[b].n=0));break;case 4:case 7:3d&&0==a.b[b].n?a.b[b].n=1:3>d&&1==a.b[b].n?a.b[b].n=-1:3>d&&-1==a.b[b].n&&(a.b[b].n=0);break;case 5:case 8:case 13:2d&&0==a.b[b].n?a.b[b].n=-1:\n2>d&&-1==a.b[b].n?a.b[b].n=1:2>d&&1==a.b[b].n&&(a.b[b].n=0);break;case 9:case 10:case 11:case 12:0==d&&0==a.b[b].n?a.b[b].n=-1:0==d&&-1==a.b[b].n?a.b[b].n=0:ht(a.k,"Charge change not possible on the halogen !");break;case 32:ht(a.k,"Use X button to change charge on the X atom !")}if(0e&&eb?e=2:0>a&&0>b?e=3:0>a&&0<=b&&(e=4);0<=c&&0<=d?f=1:0<=c&&0>d?f=2:0>c&&0>d?f=3:0>c&&0<=d&&(f=4);if(ef)return-1;switch(e){case 1:case 4:return ac?1:-1}return 0}function iI(a){$L(a);iF(a);jI(a)}\nfunction dF(a){var b,c,d,e,f,g;b=new jL;f=9999;d=-9999;g=9999;e=-9999;for(c=1;c<=a.p;++c)a.b[c].qd&&(d=a.b[c].q),a.b[c].re&&(e=a.b[c].r);b.a=f+(d-f)/2;b.b=g+(e-g)/2;b.c=d-f;b.d=e-g;25>b.c&&(b.c=25);25>b.d&&(b.d=25);return b}function XL(a,b,c){var d,e;e=0;for(d=1;d<=a.p;++d)d>=b&&d<=c||0!=KH(a,d,b,c)&&++e;return e}function WH(a,b,c,d){var e;e=SH(a,null);TH(a.b[b],c);TH(a.b[c],b);e.i=b;e.j=c;ZH(e,a.b);e.c=d;return e}\nfunction EH(a,b){++a.p;b?a.b[a.p]=bL(b):a.b[a.p]=new VH;return a.b[a.p]}function $F(a,b,c,d,e,f){var g;g=a.b[b].q-c/2;f||(g-=d-c);a=a.b[b].r-~~(e/2);return new aM(g-1-2,a-2,d+1+4,e+4)}function SH(a,b){var c;++a.q;c=new hL;b&&iL(c,b);return a.c[a.q]=c}\nfunction sH(a,b,c){var d,e,f,g,h,c=uH(a,b,c,!1);e=-1.7976931348623157E308;d=1.7976931348623157E308;for(b=1;b<=a.p;++b)a.b[b].r>e&&(e=a.b[b].r),a.b[b].qa.b[b].n?f=4-a.b[b].n:0>a.b[b].n&&-4=g&&(h=g)),\ng=rH(h,2)+rH(f,3)+" 0 0 0 0 0 0 0",f=cI(a,b),g+=rH(f,3),c+=g+ja+(qE(),ca);for(b=1;b<=a.q;++b)d=a.c[b],g=e=d.c,1==a.c[b].c?g=1:2==a.c[b].c&&(g=2),f=rH(d.i,3)+rH(d.j,3),h=0,1==e&&1==d.f?h=1:1==e&&2==d.f&&(h=6),1==e&&3==d.f&&(h=1,f=rH(d.j,3)+rH(d.i,3)),1==e&&4==d.f&&(h=6,f=rH(d.j,3)+rH(d.i,3)),c+=f+rH(g,3)+rH(h,3)+ka+(qE(),ca);for(b=1;b<=a.p;++b)0!=a.b[b].n&&(c+="M CHG 1"+rH(b,4)+rH(a.b[b].n,4)+(qE(),ca)),0!=a.b[b].d&&(c+="M ISO 1"+rH(b,4)+rH(a.b[b].d,4)+(qE(),ca));return c+=hf+(qE(),ca)}\nfunction JE(a,b){var c,d,e,f,g,h,j;g=j=0;for(h=1;h<=a.q;++h)e=a.c[h],c=e.i,d=e.j,c!=b&&d!=b?(++j,f=a.c[j],iL(f,e),f.i=c,c>b&&--f.i,f.j=d,d>b&&--f.j):g+=e.c;a.q=j;for(h=b;hb&&--c,a.b[h].p[++d]=c);a.b[h].j=d}}\nfunction LE(a,b){var c,d,e,f;c=a.c[b].i;d=a.c[b].j;for(e=b;ea.b[b].a&&0==a.b[d].d){if(0!=(-99199!=a.b[d].f?a.b[d].f:0))continue a;b=XH(a,d,b);if(1==a.c[b].c&&(0==a.c[b].f||!a.k.tc))JE(a,d),c=!0}return c}function bM(a,b){var c,d,e,f,g;g=z(A,v,-1,[0,0]);for(e=1,f=0;e<=a.b[b].j;++e)c=a.b[b].p[e],d=XH(a,b,c),2!=a.c[d].c&&(g[f++]=c);return g}\nfunction $L(a){var b,c,d;for(d=1;d<=a.p;++d)a.b[d].j=0;for(d=1;d<=a.q;++d)b=a.c[d].i,c=a.c[d].j,TH(a.b[b],c),TH(a.b[c],b)}\nfunction fI(a,b,c){var d,e,f,g,h,j,l,o,m;a.d=UF(a.q+1);m=[];for(j=1;j<=a.p;++j){m[j]=!1;b[j]=!1;a:{d=void 0;for(d=1;d<=a.b[j].j;++d)if(c[XH(a,j,a.b[j].p[d])]){d=!0;break a}d=!1}if(d&&!(3d&&(d=c);return d}\nfunction ZF(a,b){var c;c=(qE(),xE)[a.b[b].a];32==a.b[b].a&&(c=a.b[b].e);return c}function YH(a,b){a.b[b].j+=-1}function eG(a,b,c){var d,e,f,g,h;h=1;a.a=UF(a.p+1);for(e=a.a[b]=1;e<=a.b[b].j;++e)d=a.b[b].p[e],d!=c&&(a.a[d]=++h);for(g=!1;;){for(d=1;d<=a.p;++d){g=!1;if(0~~(c/2)+24?3:2}function SE(a,b){var c,d,e,f,g,h,j;c=dF(a);d=c.a;e=c.b;g=Math.sin(3.141592653589793*b/180);c=Math.cos(3.141592653589793*b/180);for(f=1;f<=a.p;++f)h=a.b[f].q*c+a.b[f].r*g,j=-a.b[f].q*g+a.b[f].r*c,JH(a.b[f],h,j);c=dF(a);MH(a,d-c.a,e-c.b)}\nfunction aI(a){var b,c,d,e,f;e=f=0;for(d=1;d<=a.q;++d)b=a.b[a.c[d].i].q-a.b[a.c[d].j].q,c=a.b[a.c[d].i].r-a.b[a.c[d].j].r,f+=Math.sqrt(b*b+c*c);0=g;++g)if(I(f,(qE(),xE)[g])){f=g;break b}f=32}mH(a,b,f);32==a.b[b].a&&(a.b[b].e=d);c+=\nfa;d=0;0=e&&(d=e-48));32==a.b[b].a&&(a.b[b].i=d)}}}function XG(a,b,c){var d,e;a.i=1;c&&(a.i=-1);b=new QD(b);try{for(;b.j=JD(b,b.a),b.jc||6a.b[c].j&&2>a.b[d].j)e.f=0,ht(a.k,"Stereomarking meaningless on this bond !");else switch(e.f){case 0:a.b[d].j<=a.b[c].j?e.f=1:e.f=3;break;case 1:e.f=2;break;case 2:2h||3c[b]&&(j=f,f=b,b=j);j=bM(a,f);h=j[0];l=j[1];e=0;o=!1;0c[l]&&(j=h,h=l,l=j);j=XH(a,f,h);0!=d[j]?e=h:1==a.c[j].c&&5!=a.d[j]&&(e=h);0==e&&0c[f]&&(o=!0);j=bM(a,b);l=j[0];g=j[1];h=0;0g&&(g=0.001),j/=g,g=l/g,l=(a.b[e].r-a.b[f].r)*g-(a.b[e].q-a.b[f].q)*j,t=(a.b[h].r-a.b[f].r)*g-(a.b[h].q-a.b[f].q)*j,2>(0>=l?0-l:l)||2>(0>=t?0-t:t))ht(a.k,"Not unique E/Z geometry !");else{g=\nXH(a,e,f);h=XH(a,h,b);r=1;if(0==d[g]){for(m=1;m<=a.b[e].j;++m)if(b=a.b[e].p[m],b!=f&&(j=XH(a,e,b),0!=d[j])){c[b]>c[e]?r=-d[j]:r=d[j];break}d[g]=r}0==d[h]&&(0l&&0>t?d[h]=-d[g]:d[h]=d[g],o&&(d[h]=-d[h]))}}}function lI(a,b,c){var d;d=a.c[b].f;return 1>d||4g?e.i=3-g-c.b[d].n:4==g?(c.b[d].n=-1,e.i=0):5g?0c.b[d].n?e.i=2-g-c.b[d].n:e.i=4-g:(c.b[d].n=g-4,e.i=4-g+c.b[d].n);break;case 4:case 7:3>g?e.i=3-g+c.b[d].n:3==g?0>c.b[d].n?(c.b[d].n=0,e.i=0):0c.b[d].n?(c.b[d].n=0,e.i=0):0g?e.i=2-g+c.b[d].n:2==g?0>c.b[d].n?(c.b[d].n=0,e.i=0):0f;)if(0e.i&&(e.i=0)}}}function kF(a){PL(this);this.b[0]=new VH;this.t=this.q=this.p=0;this.k=a}\nfunction WG(a,b){var c,d,e,f,g,h,j,l,o;kF.call(this,a);if(null!=b&&(f=n,l=UG(b),null!=l)){o=new PD(b,l,!0);for(g=1;4>=g;++g)f=VG(o,l);e=AG(wD(nx(f.substr(0,3)),10)).a;j=AG(wD(nx(f.substr(3,3)),10)).a;g=0;try{g=AG(wD(nx(f.substr(14,1)),10)).a}catch(m){if(m=vq(m),!H(m,96))throw m;}TE(this,(UE(),1==g?VE:WE));for(g=1;g<=e;++g){d=EH(this,null);f=VG(o,l);d.q=(new $J(XJ(nx(f.substr(0,10))))).a;d.r=-(new $J(XJ(nx(f.substr(10,10))))).a;d=34;34>f.length&&(d=f.length);d=nx(f.substr(31,d-31));nH(this,g,d);62<=\nf.length&&(h=nx(f.substr(60,3)),0=h))){var r=void 0,r=dL(d);d=0d&&(d=0);this.b[g].d=d}if(39<=f.length&&(h=nx(f.substr(37,2)),0=h))){f=0;switch(h){case 1:f=3;break;case 2:f=2;break;case 3:f=1;break;case 4:f=0;break;case 5:f=-1;break;case 6:f=-2;break;case 7:f=-3}this.b[g].n=f}}for(g=1;g<=j;++g)e=SH(this,null),f=\nVG(o,l),e.i=AG(wD(nx(f.substr(0,3)),10)).a,e.j=AG(wD(nx(f.substr(3,3)),10)).a,d=AG(wD(nx(f.substr(6,3)),10)).a,1==d?c=1:2==d?c=2:3==d?c=3:c=9,h=0,11b.length)this.p=0;else{try{j=new OD(b);g=AG(wD(MD(j),10)).a;h=AG(wD(MD(j),10)).a;for(f=1;f<=g;++f)o=MD(j),c=(m=EH(this,null),nH(this,this.p,o),m),c.q=(new $J(XJ(MD(j)))).a,c.r=-(new $J(XJ(MD(j)))).a;for(f=1;f<=h;++f){d=SH(this,null);d.i=AG(wD(MD(j),10)).a;d.j=AG(wD(MD(j),10)).a;e=AG(wD(MD(j),10)).a;l=0;if(-1==e)l=e=1;else if(-2==e)e=1,l=2;else if(-5==e)e=2,l=10;else if(11==\ne||12==e||13==e||14==e)l=e,e=9;d.c=e;d.f=l}$L(this);aI(this);gF(this)}catch(r){r=vq(r);if(H(r,96)){r.yd();this.p=0;return}throw r;}a&&!a.bb&&$E(this);iI(this)}}function ZG(a,b,c){var d,e,f,g;kF.call(this,a);g=UF(b.p+1);for(e=1;e<=b.p;++e)b.a[e]==c&&(EH(this,b.b[e]),g[e]=this.p);for(e=1;e<=b.q;++e)if(a=b.c[e].i,d=b.c[e].j,!(b.a[a]!=c&&b.a[d]!=c)&&!(b.a[a]!=c||b.a[d]!=c))f=SH(this,b.c[e]),f.i=g[a],f.j=g[d];this.i=b.i;$L(this)}\nfunction cM(a,b,c){var d,e,f;kF.call(this,a);f=UF(b.p+1);for(d=1;d<=b.p;++d)b.b[d].k==c&&(EH(this,b.b[d]),f[d]=this.p);for(d=1;d<=b.q;++d)a=b.c[d],a.e==c&&(e=SH(this,a),e.i=f[a.i],e.j=f[a.j]);TE(this,b.f);this.i=b.i;$L(this)}\nfunction tH(a,b,c){var d,e,f,g;kF.call(this,a);for(a=1;a<=c;++a)this.p+=b[a].p,this.q+=b[a].q,this.t+=b[a].t,b[a].f.a&&TE(this,(UE(),UE(),VE));this.b=C(QL,q,114,this.p+1,0);this.c=C(RL,q,115,this.q+1,0);f=g=e=0;for(a=1;a<=c;++a){for(d=1;d<=b[a].p;++d)++e,this.b[e]=bL(b[a].b[d]);for(d=1;d<=b[a].q;++d)++g,this.c[g]=gL(b[a].c[d]),this.c[g].i+=f,this.c[g].j+=f;f=e}$L(this)}\nfunction HE(a){var b;PL(this);this.k=a.k;this.p=a.p;this.q=a.q;this.t=a.t;this.b=C(QL,q,114,this.p+1,0);for(b=0;b(0>=a?0-a:a)&&(a=0);a=Q(K(R(a*Math.pow(10,c))))/Math.pow(10,c);e=n+(new $J(a)).a;d=lx(e,mx(46));0>d&&(e+=gc,d=lx(e,mx(46)));f=e.length;for(a=1;a<=c-f+d+1;++a)e+=wc;if(0==b)return e;e.length>b&&(e=xd);c=n;for(a=1;a<=b-e.length;++a)c+=fa;return c+e}function UG(a){var b;b=new PD(a,ca,!0);if(4b&&(d=xd);e=n;for(c=1;c<=b-d.length;++c)e+=fa;return e+d}function VG(a,b){for(var c,d;a.j=JD(a,a.a),a.j>16&255)),Vu(0.7*(g.d>>8&255)),Vu(0.7*(g.d&255))),SF(a.a,g)):(h=new hm(Vu(0.7*(g.d>>16&255)),Vu(0.7*(g.d>>8&255)),Vu(0.7*(g.d&255))),f=PB(g),SF(a.a,h));g=Q(K(R(T)));d=Q(K(R(d*T)));e=Q(K(R(e*T)));b=Q(K(R(b*T)));c=Q(K(R(c*T)));d-=g;e-=g;AF(a.a,b+g,c+g,d-g,e-g);SF(a.a,h);AF(a.a,b,c,d,g);AF(a.a,b,c+g,g,e);SF(a.a,f);AF(a.a,b+d,c,g,e+g);AF(a.a,b+1,c+e,d,g)}\nfunction vF(a,b,c,d,e){a=a.a;b=Q(K(R(b*T)));c=Q(K(R(c*T)));d=Q(K(R(d*T)));e=Q(K(R(e*T)));wF(a,!0);xF(a,yF(a,b,c,d,e))}function GF(a,b,c,d){var e,f,g;f=C(A,v,-1,d,1);g=C(A,v,-1,d,1);for(e=0;e=b||b>=jB(this.a)-1||0>=c||c>=kB(this.a)-1)&&(this.a.j=!1);this.a.j?HH(this.a.c,a,b,c):BG(this.a.c,a,b,c);oz(this.a.pb)};_.a=null;function zM(a){this.a=a}w(711,1,{},zM);_.od=function(a){this.a.j=!1;Fs(a);Gs(a);PH(this.a.c)};_.a=null;\nfunction AM(a){this.a=a}w(712,1,{},AM);_.nd=function(){this.a.j&&(this.a.j=!1)};_.a=null;function BM(a){this.a=a}w(713,1,{},BM);_.a=null;function CM(a){this.a=a}w(714,1,{},CM);_.a=null;function oM(){mM.call(this);this.pb.style[Dk]=Gc;this.pb.style[Qh]=Gc}w(715,706,zl,oM);function DM(a){this.a=a}w(716,1,{},DM);_.Qd=function(){Gq((Dq(),Eq),new FM(this))};_.a=null;function FM(a){this.a=a}w(717,1,{},FM);_.pd=function(){this.a.a.c&&(hB(this.a.a.c),EI(this.a.a))};_.a=null;\nfunction GM(a,b){var c;c=b.a;c.e=4;return yH(a.a.c,c,b.d,b.e)}function qM(a){this.a=a}w(718,1,{},qM);_.Hh=function(a){return GM(this,a)};_.a=null;function bu(a,b){BG(a.a.c,b.a,b.d,b.e);return yH(a.a.c,b.a,b.d,b.e)}function rM(a){this.a=a}w(719,1,{},rM);_.Hh=function(a){return bu(this,a)};_.a=null;function sM(a){this.a=a}w(720,1,{},sM);_.Hh=function(a){return HH(this.a.c,a.a,a.d,a.e)};_.a=null;function tM(a){this.a=a}w(721,1,{},tM);_.Hh=function(){return PH(this.a.c)};_.a=null;\nfunction Ts(a,b){var c;c=K(R(b.b));c=new dD(b,0,wj,c);OE(a.a.c,c);return!0}function uM(a){this.a=a}w(722,1,{},uM);_.Hh=function(a){return Ts(this,a)};var HM=_.a=null;function IM(){IM=x;HM=new Mv((cw(),new bw("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAEklEQVR42mM4MzPtPzJmIF0AAOqfLKHtSuV7AAAAAElFTkSuQmCC")),4,4)}function JM(){JM=x;KM={}}\nfunction LM(a,b,c){var d;c&&(b.style[zh]=c.b+kj,d=c.a,d!=Ee&&(b.style[yh]=d),0!=(c.c&1)&&(b.style[Bh]=Dg),0!=(c.c&2)&&(b.style[Ah]=Xh));a.e.style[Ck]=Oi}\nfunction lC(a){var b=MM,c,d,e,f,g,h,j,l,o,m,r,t,y;c=Lp(a);c in KM?a=KM[c]:(d=$doc.getElementsByTagName("body")[0],e=$doc.createElement(Qj),f=$doc.createElement(Vh),f.style[mh]=(hr(),"inline"),f.style[zk]=(Yr(),"baseline"),f.style[mi]=Bc,f.style[ni]=Bc,f.width=1,f.height=1,g=(IM(),HM),f.src=g.d.a,a=(h=$doc.createTextNode(Af),LM(b,e,a),e.appendChild(h),e.appendChild(f),d.appendChild(e),j=br(e)+$wnd.pageYOffset,l=br(e)+$wnd.pageYOffset+(e.offsetHeight||0),o=l-j,m=br(f)+$wnd.pageYOffset+(f.offsetHeight||\n0)+1,r=l-m,t=m-j,d.removeChild(e),y=new NM,y.a=t,y.b=r,y.c=o,y),KM[c]=a);return a}function OM(){JM();var a,b,c,d,e;Dr();this.a=z(Zu,q,1,["monospace","sans-serif",Jj]);this.c={};this.b={};this.d=$doc.getElementsByTagName("body")[0];this.e=$doc.createElement(Qj);this.e.innerHTML=this.f||n;this.e.style[zh]="72.0px";for(b=this.a,c=0,d=b.length;c=g?h=yF(a,b,c,d,e):h=(j=f+g,l=0,jg)&&(o=1),m=b+d/2,r=c+e/2,t=d/2,y=e/2,u=UM(m,r,t,y,f),D=UM(m,r,t,y,j),s=" text { cursor: default; } <\/style>":\nn;b=c+d+b+kd;b!==a.q&&(a.t.pb.innerHTML=b||n,a.q=b);a.o=!0;a.p=!1}}function SF(a,b){(a.e=b)&&(a.f=VM(b))}function wI(a,b){var c,d,e;a.i=(c=b.b,d=b.a,e=n,12!=c&&(e=\' font-size="\'+c+\'px"\'),"Plain"!=d&&(e+=\' font-family="\'+d+ma),0!=(b.c&1)&&(e+=\'font-weight="bold"\'),0!=(b.c&2)&&(e+=\'font-style="italic"\'),e)}function RF(a,b){(a.n=b)&&b&&(a.c=\'stroke-width="\'+(b.e==Vu(b.e)?n+Vu(b.e):n+b.e)+na)}w(733,483,{});_.d=null;_.e=null;_.f=Ag;_.i=null;_.j=!0;_.k=null;_.o=!1;_.p=!1;_.q=n;_.r=0;_.s=0;_.t=null;\n_.u=null;var TM,SM;function Yt(a,b){var c;c=b.a.targetTouches;return 1==c.length?(c=c[0],a.b.d=c.clientX-ar(a.o.pb)+cr(a.o.pb)+$wnd.pageXOffset,a.b.e=c.clientY-(br(a.o.pb)+$wnd.pageYOffset)+(a.o.pb.scrollTop||0)+$wnd.pageYOffset,a.b.a=new EM(b),b.a.preventDefault(),!0):!1}\nfunction pM(a){this.o=a;this.b=new WM;this.c=new XM(this);tx(this.o,new YM(this),(Zt(),Zt(),$t));tx(this.o,new ZM(this),(Rt(),Rt(),St));tx(this.o,new $M(this),(Vt(),Vt(),Wt));tx(this.o,new aN(this),(Nt(),Nt(),Ot));tx(this.o,new bN,(Zs(),Zs(),$s));tx(this.o,new cN(this),(Vs(),Vs(),Ws));tx(this.o,new dN(this),(Qs(),Qs(),Rs))}w(734,1,{},pM);_.a=null;_.b=null;_.c=null;_.d=!1;_.e=null;_.f=null;_.i=null;_.j=null;_.k=null;_.n=null;_.o=null;function XM(a){Im();this.a=a}w(735,65,{},XM);\n_.vd=function(){!this.a.d&&this.a.i&&GM(this.a.i,this.a.b)};_.a=null;function YM(a){this.a=a}w(736,1,{},YM);_.a=null;function ZM(a){this.a=a}w(737,1,{},ZM);_.a=null;function $M(a){this.a=a}w(738,1,{},$M);_.a=null;function aN(a){this.a=a}w(739,1,{},aN);_.a=null;function bN(){}w(740,1,{},bN);function cN(a){this.a=a}w(741,1,{},cN);_.a=null;function dN(a){this.a=a}w(742,1,{},dN);_.a=null;function WM(){}w(743,1,{},WM);_.a=null;_.b=0;_.c=0;_.d=0;_.e=0;\nfunction VM(a){var b,c;c=a.d>>16&255;b=a.d>>8&255;a=a.d&255;if(0==c*b*a){if(0==c&&0==b&&0==a)return Ag;if(255==c&&0==b&&0==a)return"red";if(0==c&&255==b&&0==a)return"green";if(0==c&&0==b&&255==a)return Bg}return 255==c&&255==b&&255==a?"white":uj+c+lb+b+lb+a+eb}function OI(){var a=$wnd.navigator.userAgent.match(/MSIE\\s+(\\d+\\.\\d+)/);return a?parseFloat(a[1]):-1}\nfunction eN(a){var b,c,d,e,f;zx(a);d=(Ax(),Mz(null));e=new QM;Sy(e,a);Jx(d,e,d.pb);f=a.de();b=a.ce();c=OI();9<=c?(++f,++b):7==c&&H(a,38)&&(c=a.pb.textContent,2>=c.length&&(f+=8));Uy(e,a);Sx(d,e);return new EA(f,b)}function XD(a){try{$wnd.console.log(a)}catch(b){}}function fN(){this.pb=$doc.createElement(nh);this.pb[Sg]=Zh;this.pb.style[Zi]=Rh;this.pb.style[dj]=fg;this.pb.style[Dk]=Gc;this.pb.style[Qh]=Gc;this.pb.setAttribute("contenteditable",wh)}w(745,366,nl,fN);\nfunction UM(a,b,c,d,e){e*=0.017453292519943295;a+=c*Math.cos(e);b+=-d*Math.sin(e);return new PM(new $J(a),new $J(b))}function yF(a,b,c,d,e){return\'=f.k||(701==f.k?null.bi():401==f.k||402==f.k?(null.bi(),null.bi(),null.bi(),null.bi(),null.bi()):500<=f.k&&507>=f.k&&(g=null.ci,500!=g&&(g=new gt(null.ci,g,null),g.i=f.f,g.j=f.i,f=f.j&63,g.e=f&12)))}function jN(a){this.a=a}w(755,1,il,jN);_.pd=function(){wz(this)};_.a=null;function LC(){gN();iN.call(this);this.a=new $z}w(756,748,{},LC);_.Ef=Tv;_.a=null;function OC(){new su;var a;a:{switch(Wu){case 1:case 3:case 5:case 7:a=new lN;break a}a=new mN}this.a=a}w(771,507,{},OC);_.a=null;\nfunction mN(){}w(773,1,{},mN);_.Zh=function(a){a&&a&&oq(8,new nN(a));return null};_.$h=function(a){oq(8,new oN(a))};function lN(){}w(772,773,{},lN);_.Zh=function(){return $wnd.clipboardData.getData(Of)};_.$h=function(a){$wnd.clipboardData.setData(Of,a)};function nN(a){this.a=a}w(776,1,Ml,nN);_.zd=SA;_.a=null;function oN(a){this.a=a}w(778,1,Ml,oN);_.zd=SA;_.a=null;function MC(){this.b=new PC;this.d=new rB}w(789,505,{},MC);function zG(a,b,c,d){b=yA(b);c+=b.a;d+=b.b;fy(a.a,c,d);gy(a.a)}\nfunction xC(){gN();iN.call(this);var a=this.a=new pN;a.ab=!0;a.a.f=!0;this.a.db=!0}w(791,748,{},xC);_.Ef=Tv;_.a=null;function tD(){}w(799,534,{},tD);function qD(){qD=x;var a;a=(hD(),iD["os.encoding"]);if(null!=a)try{if(I("UTF-8",a))mK(n);else if(I("ISO-8859-1",a)||I("ISO-LATIN-1",a))C(nK,Nl,-1,0,1);else throw new JJ(a+la);}catch(b){if(b=vq(b),!H(b,105))throw b;}}function rC(a,b){a.a=31*a.a+Vu((new $J(b)).a)}function xB(){}w(804,1,{},xB);_.hC=Tv;_.a=1;\nfunction pN(){var a=(ny(),qy);hy.call(this,!0,ri);this.U=a.a;this.a=new qN(this);this.a.d=!0;Yx(this,this.a);this.ab=!0;this.a.f=!0;if(-1==this.lb){var a=this.pb,b=1|(this.pb.__eventBits||0);pw();dx(a,b)}else this.lb|=1;Yq(Xq(this.pb))[Sg]=Oh;this.pb.style[Fk]="2147483647"}w(836,368,zl,pN);_.Yd=function(a){xx(this,a);1==nw(a.type)&&cy(this,!1)};_.a=null;\nfunction qN(a){this.b=a;this.c=new Gm;this.i=new Gm;a=(zz(),yz);new pA(a.d,a.b,a.c,a.e,a.a);var b;b=$doc.createElement(Wj);this.e=$doc.createElement(Zj);hw(b,this.e);this.o=!0;a=Fy();b=(iw(),jw(b));a.appendChild(b);this.pb=a;Rn();this.pb.setAttribute("role",vo.a);-1==this.lb?(a=this.pb,b=2225|(this.pb.__eventBits||0),pw(),dx(a,b)):this.lb|=2225;this.pb[Sg]=Nh;a=kx(this.pb)+"-vertical";gx(this.ee(),a,!0);this.pb.style[Yi]=Cc;this.pb.setAttribute("hideFocus",uk);tx(this,new xz(this),(zs(),zs(),As))}\nw(837,408,nl,qN);_.Yd=function(a){switch(nw(a.type)){case 16:this.a=!1;break;case 32:this.a=!0}pz(this,a)};_.Ge=function(a,b){tz(this,a,b);b||this.a&&cy(this.b,!1)};_.a=!0;_.b=null;w(885,1,{});\nfunction rN(a,b,c,d){var e,f,g,h,j,l;h=(!c?b.b:CD(b,c,~~Lp(c)))[0][d.length];b=j=e=null;for(c=0,f=!h?0:h.length;c\',aja=\'" class="event" cx="\',\nbja=\'" class="event" x1="\',x6=\'" cy="\',y6=\'" fill="\',cja=\'" font-family=" \',dja=\'" font-size="\',eja=\'" r="\',fja=\'" r="8" fill-opacity="0"/>\',gja=\'" stroke-width:\',hja=\'" stroke-width="8" stroke-opacity="0"/>\',ija=\'" stroke="\',jja=\'" style="stroke:\',kja=\'" text-anchor="middle" y="\',z6=\'" x2="\',lja=\'" xmlns="http://www.w3.org/2000/svg" version="1.1" \',A6=\'" y1="\',B6=\'" y2="\',C6=\'"/>\',mja=\'">\',nja=\'">\\n\',oja=",!a",pja=",c",qja=",c+",rja=",c-",sja=",c0",tja=",h0",uja=",h1",vja=",h2",wja=",h<2",xja=",h<3",\nyja=",h>0",zja=",h>1",Aja=",n1",Bja=",n2",Cja=",n3",Dja=",n<3",Eja=",n<4",Fja=",n>1",Gja=",n>2",Hja=",n>3",Ija=",pi0",Jja=",pi1",Kja=",pi2",Lja=",pi>0",Mja=",r",Nja=",rb2",Oja=",rb3",Pja=",rb4",Qja=",rs",Rja=",s",Sja=",sp2",Tja=",|",Uja="2d",Vja=":Atom:",Wja=":Bond:",Xja=";stroke-width:",Yja="<\/svg>",Zja="<\/text>",$ja=\'h;++h)if(g=c.e[f][h],g!=b&&1==c.k[g]){e=f;break}break}c=e;-1!=c&&(b=c,d=V6(a,c))}if(-1==d)return a.r[b];switch(d&255){case 1:return 384;case 2:return 64;default:return 448}}\nfunction V6(a,b){var c,d,e;d=e=-1;if(0!=(a.B&128))return-1;0!=(a.G.s[b]&134217728)&&(e=BY(a.G,b),d=CY(a.G,b));c=hY(a.G,b);-1!=c&&(e=(a.G.z[c]&3072)>>10,d=DY(a.G,c));-1!=e&&0!=e&&(e|=d<<8);return e}function W6(a,b){var c;if(0==jX(a.G,b))return!1;for(c=0;cg&&(n=!0),2.617993878g&&(g=0.523598776),g<=f&&(f=g,g=a.M*Math.tan(g-1.5707963267948966)/2,e.a=-(g*Math.sin(h)),e.b=-(g*Math.cos(h)))):(3.141592653589793<=g&&(n=!0),3.665191429>g&&(g=3.665191429),5.759586531<\ng&&(g=5.759586531),g>=f&&(f=g,g=a.M*Math.tan(4.712388981-g)/2,e.a=-(g*Math.sin(h)),e.b=-(g*Math.cos(h)))));return n}function Z6(a,b,c,d){0==b?(0>c?d.a=a.M:d.a=-a.M,d.b=0):(c=Math.atan(c/b),0>b&&(c+=3.141592653589793),d.a=-(a.M*Math.sin(c)),d.b=a.M*Math.cos(c))}\nfunction $6(a,b,c,d){var e,f,g,h,j,l,n,o;e=new J6;h=new J6;l=new a7;j=new a7;f=W(a.G,0,c);g=W(a.G,1,c);d&&(n=b.a,b.a=b.b,b.b=n,n=b.c,b.c=b.d,b.d=n,n=f,f=g,g=n);if(O6(a,b))if(wX(a.G,c)){e.a=b.a;e.c=b.c;e.b=b.b;e.d=b.d;d=d?-b7(a,c):b7(a,c);0==d&&(d=1);Z6(a,b.b-b.a,b.d-b.c,l);if(0a.G.q[b]?r+ee:r+Ed);g=null;r=a.G.w[b];0!=r&&(0!=(r&2)&&(g=$m),0!=(r&4)&&(g=null==g?w6:g+oja),0!=(r&4096)&&(g=null==g?ft:g+Rja),0!=(r&1920)&&(e=r&1920,1792==e?g=null==g?yka:g+tja:1664==e?g=null==g?zka:g+uja:1408==e?g=null==g?Aka:g+vja:128==e?g=null==g?Dka:g+yja:384==e?g=\nnull==g?Eka:g+zja:1024==e?g=null==g?Cka:g+xja:1536==e&&(g=null==g?Bka:g+wja)),0!=(r&234881024)&&(e=r&234881024,167772160==e?g=null==g?wka:g+sja:100663296==e?g=null==g?uka:g+qja:201326592==e&&(g=null==g?vka:g+rja)),0!=(r&114688)&&(e=r&114688,98304==e?g=null==g?Pka:g+Ija:81920==e?g=null==g?Qka:g+Jja:49152==e?g=null==g?Rka:g+Kja:16384==e&&(g=null==g?Ska:g+Lja)),0!=(r&4063232)&&(e=r&4063232,3801088==e?g=null==g?Gka:g+Aja:3538944==e?g=null==g?Hka:g+Bja:3014656==e?g=null==g?Ika:g+Cja:3145728==e?g=null==\ng?Jka:g+Dja:2097152==e?g=null==g?Kka:g+Eja:393216==e?g=null==g?Lka:g+Fja:917504==e?g=null==g?Mka:g+Gja:1966080==e&&(g=null==g?Nka:g+Hja)),0!=(r&120)&&(e=r&120,112==e?g=null==g?ao:g+pja:8==e?g=null==g?F6:g+Mja:104==e?g=null==g?Wka:g+Nja:88==e?g=null==g?Xka:g+Oja:56==e&&(g=null==g?Yka:g+Pja)),0!=(r&29360128)&&(g=null==g?Zka+((r&29360128)>>22):g+Qja+((r&29360128)>>22)),0!=(r&268435456)&&(g=null==g?$ka:g+Sja));0!=a.G.v[b]&&(g=null==g?m+a.G.v[b]:g+Jd+(m+a.G.v[b]));r=0;if(0!=(a.G.s[b]&48))switch(a.G.s[b]&\n48){case 16:h=null==h?iu:h+Tja;break;case 32:r=1;break;case 48:r=2}e=null;if(0==(a.B&64))if(0!=(a.G.s[b]&67108864))e=Xf;else if(0!=(a.G.s[b]&98304)>>15)if(2==a.G.f[b])switch((a.G.s[b]&98304)>>15){case 2:e=0!=(a.G.s[b]&4)?zs:dk;break;case 1:e=0!=(a.G.s[b]&4)?cr:E6;break;default:e=Dd}else switch((a.G.s[b]&98304)>>15){case 1:e=0!=(a.G.s[b]&4)?F6:kk;break;case 2:e=0!=(a.G.s[b]&4)?ft:sk;break;default:e=Dd}0!=(a.B&1792)&&(e=null==e?m+(null==a.G.b.d?-1:a.G.b.d[b]):e+Jd+(m+(null==a.G.b.d?-1:a.G.b.d[b])));\nn=null;0!=(a.B&16)&&0!=QO(a.G.u[b])&&(n=m+QO(a.G.u[b]));l=null;a:{j=a.G;jY(j,1);if(2==j.f[b]&&2==j.j[b][0]&&2==j.j[b][1])for(d=0;2>d;++d)for(c=0;c>8))));j=0;a.G.E?((6!=a.G.x[b]||!a.s[b])&&0!=(a.G.w[b]&2048)&&0!=a.G.q[b]||0!=(a.G.s[b]&48))&&(j=ZX(a.G,b)):(6!=a.G.x[b]||!a.s[b]||\n0!=(a.G.s[b]&48))&&(j=ZX(a.G,b));c=yY(a.G,b);if(null!=c)j=0;else if(null!=qY(a.G,b)){d=0!=(a.G.w[b]&1)?tka:gl;c=a.G;if(null==c.t||null==c.t[b])c=0!=(c.w[b]&1)?m:cZ[c.x[b]];else{t=m;for(o=0;oc;++c)if(2!=a.G.j[b][c]){c=!1;break a}c=!0}c&&(c=S6(a.K,sX(a.G,b)),f=T6(a.K,tX(a.G,b)),Tv(a.T,new i7(c-a.O,f-a.O,2*a.O,2*a.O)),a.F||Tv(a.N,new j7(c,f,W6(a,b)?-3:a.r[b])))}null!=h&&(k7(a,~~((2*a.Q+1)/3)),f=S6(a.K,sX(a.G,b))+((d+g7(a,h))/2+1),c=T6(a.K,tX(a.G,b))-~~((4*a.o-4)/8),h7(a,f,c,h,!0),k7(a,a.Q));0!=(a.B&2)&&(g=m+b);null!=g&&(k7(a,~~((2*a.Q+1)/3)),f=S6(a.K,sX(a.G,b))-(d+g7(a,g))/2,c=T6(a.K,\ntX(a.G,b))-~~((4*a.o-4)/8),h7(a,f,c,g,!0),k7(a,a.Q));null!=e&&(k7(a,~~((2*a.Q+1)/3)),f=S6(a.K,sX(a.G,b))-(d+g7(a,e))/2,c=T6(a.K,tX(a.G,b))+~~((4*a.o+4)/8),o=a.z,L6(a,448),h7(a,f,c,e,!1),L6(a,o),k7(a,a.Q));null!=n&&(k7(a,~~((2*a.Q+1)/3)),f=S6(a.K,sX(a.G,b))+((d+g7(a,n))/2+1),c=T6(a.K,tX(a.G,b))+~~((4*a.o+4)/8),o=a.z,L6(a,0>a.G.u[b]?384:448),h7(a,f,c,n,!0),L6(a,o),k7(a,a.Q));if(null!=l){var z,v;c=C(SN,gv,-1,jX(a.G,b),1);for(f=0;fo;++o)W(a.G,o,f)==b&&(t=yX(a.G,W(a.G,o,f),W(a.G,1-o,f)),-1.5707963267948966>t?(l[0]-=t+1.5707963267948966,l[3]+=t+3.141592653589793):0>t?(l[2]+=t+1.5707963267948966,l[3]-=t):1.5707963267948966>t?(l[1]+=\nt,l[2]+=1.5707963267948966-t):(l[0]+=t-1.5707963267948966,l[1]+=3.141592653589793-t))}0==a.G.f[b]?HZ(a.G.x[b])?l[3]-=0.2:l[1]-=0.2:l[1]-=0.1;(null!=h||null!=n)&&(l[1]+=10);(null!=g||null!=e)&&(l[3]+=10);e=m;0!=j&&(f=g7(a,ji),n=0,-1==j?(e=Gr,k7(a,~~((2*a.Q+1)/3)),n=g7(a,e)):1l[1]||0.6>l[3]?(h=T6(a.K,tX(a.G,b)),l[1]<=l[3]?(l[1]+=10,g=S6(a.K,sX(a.G,b))+(d+f)/2):(l[3]+=10,g=S6(a.K,sX(a.G,b))-(d+f)/2-n)):(g=S6(a.K,sX(a.G,b)),l[0]c;++c)h=1g&&(e=c,g=l[h]);switch(e){case 0:g=S6(a.K,sX(a.G,b));h=T6(a.K,tX(a.G,b))-a.O-d/2;break;case 1:g=S6(a.K,sX(a.G,b))+a.O+d/2;h=T6(a.K,tX(a.G,b));break;case 2:g=S6(a.K,sX(a.G,b));h=T6(a.K,tX(a.G,b))+a.O+d/2;break;default:g=S6(a.K,sX(a.G,b))-a.O-d/2,h=T6(a.K,tX(a.G,b))}if(1==r)Tv(a.T,new i7(g-\na.O,h-a.O,2*a.O,2*a.O)),a.F||Tv(a.N,new j7(g,h,W6(a,b)?-3:a.r[b]));else{switch(e){case 2:case 0:r=2*a.O;e=0;g-=a.O;break;case 1:r=0;e=2*a.O;h-=a.O;break;default:r=0,e=2*a.O,h-=a.O}Tv(a.T,new i7(g-a.O,h-a.O,2*a.O,2*a.O));a.F||Tv(a.N,new j7(g,h,W6(a,b)?-3:a.r[b]));Tv(a.T,new i7(g+r-a.O,h+e-a.O,2*a.O,2*a.O));a.F||Tv(a.N,new j7(g+r,h+e,W6(a,b)?-3:a.r[b]))}}}-8==a.z&&L6(a,-9)}\nfunction n7(a,b){var c,d,e,f,g,h,j,l,n,o,r,t;n=new J6;c=new J6;f=new J6;j=new a7;h=new a7;d=W(a.G,0,b);e=W(a.G,1,b);var z=T6(a.K,tX(a.G,d)),v=S6(a.K,sX(a.G,e)),E=T6(a.K,tX(a.G,e)),z=bka+(null!=a.k?a.k:vr+f7)+Wja+d+ee+e+bja+fA(100*S6(a.K,sX(a.G,d)))/100+A6+fA(100*z)/100+z6+fA(100*v)/100+B6+fA(100*E)/100+hja;Tv(a.c,z);!AY(a.G,d)&&!AY(a.G,e)&&0!=((a.G.w[d]|a.G.w[e])&536870912)&&L6(a,-8);a.q[d]?(n.a=a.q[d].a,n.c=a.q[d].b):(n.a=S6(a.K,sX(a.G,d)),n.c=T6(a.K,tX(a.G,d)));a.q[e]?(n.b=a.q[e].a,n.d=a.q[e].b):\n(n.b=S6(a.K,sX(a.G,e)),n.d=T6(a.K,tX(a.G,e)));if(0!=(a.G.A[b]&16320))O6(a,n)&&(g=m+fA(100*n.a)/100,l=m+fA(100*n.b)/100,o=m+fA(100*n.c)/100,r=m+fA(100*n.d)/100,t=cka+g+A6+o+z6+l+B6+r+ija+a.e+gja+fA(100*a.n)/100+C6,o7(a,t)),L6(a,-9);else{g=64==a.G.B[b]?0:32==a.G.B[b]?1:qX(a.G,b);switch(g){case 1:switch(a.G.B[b]){case 1:O6(a,n)&&N6(a,n,d,e);break;case 17:p7(a,n,d,e);break;case 9:h=n.b-n.a;j=n.d-n.c;K6(a.G,TY(a.G,d,e))?f=e=-3:(e=a.r[d],f=U6(a,d),e==(a.G.s[d]&448)&&(e=f));for(d=2;17>d;d+=2)c.a=n.a+d*h/\n17-d*j/128,c.c=n.c+d*j/17+d*h/128,c.b=n.a+d*h/17+d*j/128,c.d=n.c+d*j/17-d*h/128,O6(a,c)&&(L6(a,9>d?e:f),M6(a,c),L6(a,a.J));break;case 32:if(O6(a,n)){f=n.b-n.a;j=n.d-n.c;c=Math.sqrt(f*f+j*j);c=2*Q(L(R(c/(4*a.R))));f/=c-1;j/=c-1;K6(a.G,TY(a.G,d,e))?e=d=-3:(d=a.r[d],e=a.r[e]);h=n.a-a.R/2;n=n.c-a.R/2;L6(a,d);for(d=0;d<~~(c/2);++d)q7(a,h,n,a.R),h+=f,n+=j;L6(a,e);for(d=0;d<~~(c/2);++d)q7(a,h,n,a.R),h+=f,n+=j;L6(a,a.J)}}break;case 0:case 2:if((a.t[d]||2==a.G.k[d])&&(a.t[e]||2==a.G.k[e])&&!wX(a.G,b)&&2==\ng){if(!O6(a,n))break;Z6(a,n.b-n.a,n.d-n.c,j);h=j.a/2;j=j.b/2;c.a=n.a+h;c.c=n.c+j;c.b=n.b+h;c.d=n.d+j;f.a=n.a-h;f.c=n.c-j;f.b=n.b-h;f.d=n.d-j;26==a.G.B[b]&&c7(c,f);N6(a,c,d,e);N6(a,f,d,e)}else if((a.t[e]||2==a.G.k[e])&&2==g)$6(a,n,b,!1);else if((a.t[d]||2==a.G.k[d])&&2==g)$6(a,n,b,!0);else{l=b7(a,b);0==l&&(l=1);c.a=n.a;c.c=n.c;c.b=n.b;c.d=n.d;Z6(a,n.b-n.a,n.d-n.c,j);if(0c?a-=2*Math.cos(c+0.5235987755982988):a-=0.5*Math.cos(c+0.5235987755982988);return a}\nfunction t7(a){var b;b=new R6;a.a<=a.b?(b.c=a.a,b.b=a.b-a.a):(b.c=a.b,b.b=a.a-a.b);a.c<=a.d?(b.d=a.c,b.a=a.d-a.c):(b.d=a.d,b.a=a.c-a.d);return b}function l7(a,b){var c;if(0f.c+f.b||e.d>f.d+f.a||f.c>e.c+e.b||f.d>e.d+e.a)){if(u7(a,g.a,g.c,b)){if(u7(a,g.b,g.d,b))return;v7(a,g,0,b);p7(a,g,c,d);return}if(u7(a,g.b,g.d,b)){v7(a,g,1,b);p7(a,g,c,d);return}}var h,j,l;j=(g.c-g.d)/9;l=(g.b-g.a)/9;b=C(SN,gv,-1,3,1);e=C(SN,gv,-1,3,1);f=C(SN,gv,-1,4,1);h=C(SN,gv,-1,4,1);b[0]=g.a;e[0]=g.c;f[2]=g.b+j;h[2]=g.d+l;f[3]=g.b-j;h[3]=g.d-l;b[1]=\n(b[0]+f[2])/2;e[1]=(e[0]+h[2])/2;b[2]=(b[0]+f[3])/2;e[2]=(e[0]+h[3])/2;f[0]=b[2];h[0]=e[2];f[1]=b[1];h[1]=e[1];K6(a.G,TY(a.G,c,d))?g=d=-3:(d=a.r[c],g=U6(a,c),d==(a.G.s[c]&448)&&(d=g));L6(a,d);a.bd(b,e,3);L6(a,g);a.bd(f,h,4);L6(a,a.J)}}function u7(a,b,c,d){if(0!=(a.B&1))return!1;a=CF(a.T,d);return b>a.c&&ba.d&&ch;++h){e=W(a.G,h,b);for(n=0;nf[0]?(f[1]=f[0]+3.141592653589793,e=!1):(f[1]=f[0],f[0]=f[1]-3.141592653589793,e=!0);for(h=g=0;hf[0]&&c[h]=e.b||0>=e.a?e=!1:(g=e.c,j=e.d,h=g+e.b,l=j+e.a,e=g<=c&&cb.b&&(s7(b),c=!0);for(d=0;df.c+f.b||e.d>f.d+f.a||f.c>e.c+e.b||f.d>e.d+e.a)){if(u7(a,b.a,b.c,d)){if(u7(a,b.b,b.d,d))return c&&s7(b),!1;v7(a,b,0,d);d=O6(a,b);c&&s7(b);return d}if(u7(a,b.b,b.d,d))return v7(a,b,1,d),d=O6(a,\nb),c&&s7(b),d}c&&s7(b);return!0}function v7(a,b,c,d){var e,f,g,h,j,l;0==c?(j=b.a,l=b.c,g=b.b,f=b.d):(j=b.b,l=b.d,g=b.a,f=b.c);d=CF(a.T,d);a=g>j?d.c+d.b:d.c;h=f>l?d.d+d.a:d.d;d=g-j;e=f-l;(0>=d?0-d:d)>(0>=e?0-e:e)?l==f?(f=a,g=l):(f=j+d*(h-l)/e,g>j==a>f?g=h:(f=a,g=l+e*(a-j)/d)):j==g?(f=j,g=h):(g=l+e*(a-j)/d,f>l==h>g?f=a:(f=j+d*(h-l)/e,g=h));0==c?(b.a=f,b.c=g):(b.b=f,b.d=g)}\nfunction w7(a,b,c,d){c/=2;switch(d&786432){case 786432:if(b){a.x.a=b.c+b.b/2;a.x.b=b.d+b.a-c;break}case 0:a.x.a=a.w.c+a.w.b/2;a.x.b=a.w.d+a.w.a+c;b&&a.x.b>b.d+b.a-c&&(a.x.b=b.d+b.a-c);break;case 524288:if(b){a.x.a=b.c+b.b/2;a.x.b=b.d+c;break}case 262144:a.x.a=a.w.c+a.w.b/2,a.x.b=a.w.d-c,b&&a.x.bS6(a.K,sX(a.G,b))&&(e=S6(a.K,sX(a.G,b))),cT6(a.K,tX(a.G,b))&&(f=T6(a.K,tX(a.G,b))),de;++e){c=W(a.d,e,b);for(f=0;fe;++e){d=W(a.d,e,c);b=!1;for(g=0;gb)return d;g=1.7976931348623157E308;for(c=1;c=c||11<=c&&13>=c||19<=c&&31>=c||37<=c&&51>=c||55<=c&&84>=c||87<=c&&103>=c}function K7(a,b,c){c?a.s[b]|=262144:a.s[b]&=-262145}function L7(a,b,c){a.D[b].a=c;a.K&=3}function M7(a,b,c){a.D[b].b=c;a.K&=3}function N7(a,b,c){a.D[b].c=c;a.K&=3}function O7(a,b){var c;for(c=a-b;-3.141592653589793>c;)c+=6.283185307179586;for(;3.141592653589793c.f[c.e[d][0]]||2>c.f[c.e[d][1]]||1!=c.k[c.e[d][0]]||1!=c.k[c.e[d][1]])zZ(c,d,0,!1);else{l=t=f=e=-1;for(h=n=0;2>h;++h){g=c.e[d][h];for(r=0;rh;++h)for(r=0;rj&&(g=j);t=C(A,u,-1,2,1);for(h=n=0;ht[1]&&(h=t[0],t[0]=t[1],t[1]=h),h=O7(j,yX(c,l,t[0])),l=O7(j,yX(c,l,t[1])),l=h-l):l=O7(j,yX(c,l,t[0]));0>l^1==(c.s[d]&\n3)^g==f?c.B[e]=17:c.B[e]=9}}}else if(3>c.f[d]||4j)a:{for(var j=c,g=d,E=o=t=o=z=z=n=v=z=n=h=void 0,r=z=r=void 0,h=j.f[j.o+g],n=C(SN,gv,-1,h,1),t=0;tr||3.061592653589793f[2]-f[1]||f[1]>f[2]&&3.141592653589793<\nf[1]-f[2];break;case 1:e=3.141592653589793f[1]-f[0]}f=1==(c.s[d]&3)^e?17:9}else e=0,f[1]<=f[2]&&f[2]<=f[3]?e=0:f[1]<=f[3]&&f[3]<=f[2]?e=1:f[2]<=f[1]&&f[1]<=f[3]?e=2:f[2]<=f[3]&&f[3]<=f[1]?e=3:f[3]<=f[1]&&f[1]<=f[2]?e=4:f[3]<=f[2]&&f[2]<=f[1]&&(e=5),f=1==(c.s[d]&3)^1==l[e][g]?9:17;c.B[j]=f}}}for(b=0;bg;++g){j=d.y[g][c];for(r=0;r<\nd.f[d.o+j];++r)o=d.i[j][r],o!=c&&1==qX(d,o)&&(t=d.e[j][r],z=P7(d,o,t),ng;++g)for(r=0;rt&&(j=t);t=C(A,u,-1,2,1);for(g=n=0;gt[1]&&(h=t[0],t[0]=t[1],t[1]=h),h=O7(g,yX(d,\nl,t[0])),l=O7(g,yX(d,l,t[1])),l=h-l):l=O7(g,yX(d,l,t[0]));0>l^2==(d.z[c]&3)^j==f?d.B[e]=17:d.B[e]=9}}}function X(a,b){var c,d;c=b;for(d=0;0!=b;)0==a.c&&(a.e=(a.a[++a.d]&63)<<11,a.c=6),d|=(65536&a.e)>>16-c+b,a.e<<=1,--b,--a.c;return d}function S7(a,b,c){a.c=6;a.d=c;a.a=b;a.e=(b[a.d]&63)<<11}function T7(a,b){var c,d;c=~~(b/2);(d=a>=c)&&(a-=c);c=~~(b/32)*a/(c-a);return d?-c:c}function U7(){this.b=!0}w(24,1,{},U7);_.a=null;_.b=!1;_.c=0;_.d=0;_.e=0;_.f=null;\nfunction V7(a,b){var c,d;c=b;var e,f;9.0E-4>(0>=c?0-c:c)&&(c=0);c=Q(L(R(c*Math.pow(10,4))))/Math.pow(10,4);d=m+(new KS(c)).a;e=gG(d,hG(46));0>e&&(d+=Ie,e=gG(d,hG(46)));f=d.length;for(c=1;c<=4-f+e+1;++c)d+=Xe;10c;++c)lM(a.a,32);qW(a.a,d)}function W7(a,b){var c,d,e;if(0>b||999d;++d)e=~~(b/100),0==e?2==d||c?lM(a.a,48):lM(a.a,32):(lM(a.a,48+e&65535),c=!0),b=10*(b%100)}}\nfunction X7(a){var b=new kM,c,d,e,f,g,h,j,l;jY(a,7);f=!0;for(c=0;c>19){f=!1;break}l=-1;if(f){d=C(A,u,-1,32,1);for(c=0;c>19){c=1!=(a.s[c]&1572864)>>19&&2!=(a.s[c]&1572864)>>19?-1:(a.s[c]&65011712)>>21;++d[c];0c||3g&&(e=g);d=3/e}for(c=0;c>>28)-1,-1==e?qW(this.a,t6):0==e?qW(this.a,Sia):W7(this,e),qW(this.a,ka),W7(this,QO(a.u[c])),qW(this.a,Mia);for(c=0;cf?(qW(this.a,Iia),f=-f):qW(this.a,p6),lM(this.a,48+f&65535));qW(this.a,ba)}for(c=f=0;cc)return!a.i&&(a.i=(qC(),new xJ(a.f))),c=BL(a.i,b),11<=a.f.b&&(c*=1.5714285714285714),c;var d=a.f;c=b;var e=Y7;e||(Y7=e=$doc.createElement(xka));d=m+d.b+Hs+d.a;e=e.getContext(Uja);e.font=d;c=e.measureText(c);return(new i7(0,0,c.width,0)).b}\nfunction k7(a,b){a.o!=b&&(a.o=b,a.f=new hL(mi,0,b))}function Z7(a){var b,c,d;d=fka+(null!=a.k?a.k:vr+f7)+lja+a.gd(fa)+ela+a.p+Tka+a.j+Uka+a.p+fa+a.j+nja;b=eka+(null!=a.k?a.k:vr+f7)+Zia+(null!=a.k?a.k:vr+f7)+Qia;d+=o6;d+=b;for(c=new GD(a.c);c.b\');o7(this,Uz(e.a))};_.cd=function(a){this.e=Xs+(a.d>>16&255)+Jd+(a.d>>8&255)+Jd+(a.d&255)+kd};_.tS=function(){return Z7(this)};_.e=On;_.i=null;_.j=400;_.k=null;_.n=1;_.o=10;_.p=400;var f7=0;\nfunction $7(a,b){var c,d,e;1==a.b.B[b]&&NY(a.b,b,2);for(d=0;2>d;++d){c=W(a.b,d,b);K7(a.b,c,!1);for(e=0;ee;++e){b=!1;d=W(a.b,e,c);for(g=0;ga.k[e]&&(d=a.k[e],f=e);a.c=a.f[f];for(e=f+1;ef)return 3;c=-1==a.c&&1==a.d||-1!=a.c&&MZ(a.n.b,a.c);d=-1;for(e=0;ee[g]&&(h=!h),c[j]>c[g]&&(h=!h);return a.e^h^d^f?2:1}function d8(a,b,c,d,e,f){this.n=a;0!=d&&1!=d?this.b=!0:(this.a=b,this.c=c,this.d=d,this.e=f,this.i=0,this.j=C(tz,Ou,-1,4,2),this.f=C(A,u,-1,4,1),this.k=C(A,u,-1,4,1),-1!=c&&1==d&&(c8(this,2147483647,e,!0),this.d=0))}w(30,1,{},d8);_.a=0;_.b=!1;_.c=0;_.d=0;_.e=!1;_.f=null;_.i=0;_.j=null;_.k=null;_.n=null;\nfunction gla(a){var b;jY(a,15);b=a.C&65535;switch(a.C&-65536){case 65536:return null;case 131072:return 1==b?Fka:m+b+Xia;case 0:return dla;case 196608:return Vka;case 262144:return ala;case 327680:return bla;case 393216:return cla;default:return 1==b?Oka:m+b+Yia}}function e8(a){jY(a,15);if(a.b){var a=a.b,b;for(b=0;bf)h8(d);else a:{var g,h,j,l,n,o,r;f=y(eQ,Gu,86,[y(A,u,-1,[627]),null,y(A,u,-1,[2457]),null,y(A,u,-1,[2451,8643,2519]),null,y(A,u,-1,[34377,-2147448999]),null,y(A,u,-1,[37449,137313,95703,34371,37815,54891,132867,-2147309741,54857,55129,-2147449005,-2147449065]),null,y(A,u,-1,[530697,531819,899169,137289,694617,-2146951863,-2146952797,-2146939175,-2146929547,-2146929564,-2146625111,\n-2146931799,-2146940503,-2146931935]),null,y(A,u,-1,[542985,137283,2122017,530691,2206773,-2144711351,219209,2840841,137555,-2146871031,-2147264167,613705,-2145360543,-2146625271,694611,2454837,-2145356703,-2147345133,-2146928951,-2146931805,-2144641719,-2146951869,-2146625237,-2146624183,2841963,1074905,-2146625117,2799955,-2144723645,138583,859225,-2145264843,-2145216253,-2146624149,-2144700727,-2146928917,-2143905527,-2144045771,-2146789097,2288547,544407,2104323,-2146911977,-2144479405,3633737,\n-2146870089,-2146952169]),null,y(A,u,-1,[8487297,2172633,2116611,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8829813])]);o=d.e.length-10;if(10<=d.e.length&&24>=d.e.length&&null!=f[o]){l=1<>>=1,e>>>=1;for(r=0;r>>=1;break a}0!=(c&1)&&(c|=l);c>>>=1}}}}h8(d)}Tv(a.c,d)}function i8(a,b){var c,d;d=0;CX(a,a.length,(DX(),DX(),EX));for(c=0;cf?-f:f)>=QO(g.b)?g.b:f,f-=b,Tv(0>b?j:l,new k8(d,g.a,b)),0==f)););}}if(0==j.c||0==l.c)return null;l8(l,new n8);l8(j,new o8);for(f=new GD(l);f.b-c.b)return a.j[e.c.e[e.a]]+=c.b,a.j[c.c.e[c.a]]-=c.b,new p8(e.c,c.c,e.a,c.a)}for(f=new GD(l);f.ba.c.c?null:new r8(CF(a.c,0),CF(a.c,1))}\nfunction s8(a){var b,c,d,e,f,g,h,j;j=b=null;for(f=0;fh&&(d=g,g=h,h=d,d=e,e=c,c=d),null==j&&(j=C(hla,q,10,a.c.c,0)),null==j[h]&&(j[h]=C(u8,Eia,9,h,0)),j[h][g]?(j[h][g].c[0]+=j[h][g].b[0].a[e],j[h][g].d[0]+=j[h][g].b[0].b[e],j[h][g].c[1]+=j[h][g].b[1].a[c],j[h][g].d[1]+=j[h][g].b[1].b[c],++j[h][g].a[0],++j[h][g].a[1]):(j[h][g]=new p8(CF(a.c,\ng),CF(a.c,h),e,c),!b&&(b=new Zv),Tv(b,j[h][g])))}return b}function h8(a){var b,c;b=3.141592653589793-3.141592653589793*(a.e.length-2)/a.e.length;for(c=1;c>>28)-1,(-1==n||nY;++Y)if(Ya[0]=W(a.f,Y,Sa),Ya[1]=W(a.f,1-Y,Sa),1==a.f.k[Ya[0]]&&2==a.f.k[Ya[1]]&&2==jX(a.f,Ya[1])){a.a[Ya[0]]=!0;a.a[Ya[1]]=!0;a.b[Sa]=!0;Bb=1;do{T=iX(a.f,Ya[Bb],0)==Ya[Bb-1]?1:0;Ya[Bb+1]=iX(a.f,Ya[Bb],T);if(2==a.f.k[Ya[Bb+1]]&&2Y;++Y)Aa[Xc]=iX(a.f,pa,Y),Wa[Xc]=xX(a.f,pa,Y),1==jX(a.f,Aa[Xc])&&!a.b[Wa[Xc]]&&++Xc;if(2==Xc){ga=new g8(a.f,3,a.e);for(Y=0;2>Y;++Y)a.a[Aa[Y]]=!0,a.b[Wa[Y]]=!0,ga.e[Y]=Aa[Y],ga.n[Y]=32;ga.a[0]=-0.5;ga.b[0]=0.866;ga.a[1]=0.5;ga.b[1]=0.866;ga.a[2]=0;ga.b[2]=0;ga.n[2]=32;ga.e[2]=pa;Tv(a.c,ga)}if(3==Xc){for(Y=0;2>Y;++Y)1==qX(a.f,Wa[Y])&&(ed=\nAa[Y],Aa[Y]=Aa[2],Aa[2]=ed,ed=Wa[Y],Wa[Y]=Wa[2],Wa[2]=ed);ga=new g8(a.f,4,a.e);for(Y=0;3>Y;++Y)a.a[Aa[Y]]=!0,a.b[Wa[Y]]=!0,ga.e[Y]=Aa[Y],ga.n[Y]=32;ga.a[0]=-1;ga.b[0]=0;ga.a[1]=1;ga.b[1]=0;ga.a[2]=0;ga.b[2]=1;ga.a[3]=0;ga.b[3]=0;ga.n[3]=32;ga.e[3]=pa;Tv(a.c,ga)}}C8(a);for(var Ld,ae,gd,ic,be,Ta;;){ic=null;for(Ld=0;Ldic.a.length)&&\n(ic=be)}}if(!ic)break;ae=new g8(a.f,ic.a.length,a.e);for(gd=0;gdQb&&++Hc}Pb.f=C(A,u,-1,Hc,1);Pb.i=C(A,u,-1,Pb.k.o,1);\nfor(V=Hc=0;VQb&&(Pb.f[Hc++]=xX(Pb.k,Qb,Rc))}}var kc,Ra,zc,Xa,nc,of,fb,je,Me,Ad,ke,vc;for(je=0;jeAd;++Ad){vc[Ad]=a.f.G;\nXa[Ad]=W(a.f,Ad,zc);for(ke=0;kenc&&(vc[Ad]=nc)}of=D8(fb.a[fb.i[Xa[0]]],fb.b[fb.i[Xa[0]]],fb.a[fb.i[Xa[1]]],fb.b[fb.i[Xa[1]]]);kc=D8(fb.a[fb.i[vc[0]]],fb.b[fb.i[vc[0]]],fb.a[fb.i[Xa[0]]],fb.b[fb.i[Xa[0]]]);Ra=D8(fb.a[fb.i[Xa[1]]],fb.b[fb.i[Xa[1]]],fb.a[fb.i[vc[1]]],fb.b[fb.i[vc[1]]]);0>O7(of,kc)^0>O7(of,Ra)^2==(a.f.z[zc]&3)&&E8(fb,zc)}}}var md,Td,oc,Ic,qb,Ac,Ne,Oe,lc,Jc,Bc,gb,$b,de,xe,Bd,Sc,Ba,hb,Hd,Cd,Kc,Za,me,Gf,nd;Cd=C(oY,q,6,\na.f.o,0);for(Hd=0;Hdid;--Id)wg[Id]=wg[Id-1];wg[id]=xg}pf=rY(6,jX(Zf.f,Pe));\nNX($f[Pe],Pe);OX($f[Pe],16,JE(Hf[Pe]));OX($f[Pe],17*(6-pf),ku);for(Gb=0;GbJb;++Jb)if(ag=W(a.f,Jb,xa),2Bc&&0!=Ne.c;++Bc){Oe=H8(a.i,Ne.c);Ac=(ZK(Oe,Ne.c),Ne.b[Oe]);a:{var rf=a,Md=Ac[0],ne=Ac[1],Ud=void 0,ib=void 0,bg=void 0,od=void 0,ya=void 0,Gl=void 0,Th=void 0,lk=void 0,Ga=void 0,Di=void 0,lh=void 0,Uh=\nvoid 0,ya=C(A,u,-1,rf.f.o,1),Gl=C(A,u,-1,rf.f.o,1),Th=C(A,u,-1,rf.f.o,1),lk=C(A,u,-1,rf.f.o,1);ya[0]=ne;Th[ne]=1;lk[0]=-1;for(Ga=od=0;od<=Ga;){for(Di=0;DiBc)for($b=1;$bBc)for($b=1;$bJc.c&&(Bd=Jc.c,xe=new G8(Jc,a.e)))}}eL(a.c,gb,xe);Jc=xe;lc=1;do{Sc=9999;for($b=0;$b=Vd-Qe?0-(Vd-Qe):Vd-Qe,0.5>zg&&(Vh[Ag++]=new J8(D8(Qe,uf,Vd,uf),(0.5-zg)/2))):Xg==Bk?(zg=0>=uf-Xg?0-(uf-Xg):uf-Xg,0.5>zg&&(Vh[Ag++]=new J8(D8(Vd,Xg,Vd,uf),(0.5-zg)/2))):(nj=(Bk-Xg)/(ye-Qe),Il=-1/nj,mk=Xg-nj*Qe,Hl=uf-Il*Vd,Xb=(Hl-mk)/(nj-Il),Fv=nj*Xb+mk,zg=Math.sqrt((Xb-Vd)*(Xb-Vd)+(Fv-uf)*(Fv-uf)),0.5>zg&&(Vh[Ag++]=new J8(D8(Xb,Fv,Vd,uf),(0.5-zg)/2))):0.5>nh?Vh[Ag++]=new J8(D8(Qe,Xg,Vd,uf),(0.5-nh)/2):0.5>Wh&&(Vh[Ag++]=new J8(D8(ye,Bk,Vd,uf),(0.5-Wh)/\n2)));0lc&&hbj;++j){b.c[j]/=b.a[j];b.d[j]/=b.a[j];n=e;g=j;f=b.b[j];h=b.c[j];l=b.d[j];var o=void 0,r=o=void 0,t=void 0,z=void 0,v=void 0,E=void 0,s=E=void 0,F=z=o=v=z=void 0,P=void 0,M=r=void 0,$=z=o=void 0,da=void 0;if(1==f.e.length)f=0;else{M=c+Math.sqrt(b.b[1-j].e.length);t=C(SN,gv,-1,36,1);for(s=0;so?o+36:36<=o?o-36:o,z=h-f.a[s],v=l-f.b[s],\nz=z*z+v*v,t[o]s;++s)t[s]=Math.sqrt(t[s]),zo-18?o-18+36:36<=o-18?o-18-36:o-18;for(s=0;18>=s;++s)t[0>o+s?o+s+36:36<=o+s?o+s-36:o+s]+=0.01*s,t[0>o-s?o-s+36:36<=o-s?o-s-36:o-s]+=0.01*s;$=C(SN,gv,-1,9,1);for(s=1;9>s;++s)$[s]=Math.sin(0.17453292519943295*s);da=M*M;P=1.7976931348623157E308;F=-1;for(o=0;36>o;++o)if(!(t[o]>=P)){v=t[o];for(s=1;9>s;++s){for(z=-1;1>=z&&!(r=0>o+z*s?o+z*s+36:36<=o+z*s?o+z*s-36:o+z*s,!(t[r]<=v)&&(E=t[r]*$[s],Ev&&(P=v,F=o)}f=6.283185307179586*F/36}n[g]=f}M8(b.b[0],b.c[0],b.d[0],1.5707963267948966-e[0]);M8(b.b[1],b.c[1],b.d[1],4.71238898038469-e[1]);n=1.7976931348623157E308;f=-1.7976931348623157E308;g=b.d[0]-b.d[1];for(j=0;jb.b[1].b[j]&&(n=b.b[1].b[j]),fb.b[1].a[j]&&(g[l]=b.b[1].a[j])}for(j=0;jr?h=(b<<24)+(o<<16)+(r<<8)+c:h=(b<<24)+(r<<16)+(o<<8)+c,vr?(t=d,z=e):(t=e,z=\nd)}}}if(0==v)break;if(n==t.e.length)Nv(a.c,t);else if(n==z.e.length)Nv(a.c,z);else{c=a;f=n;r=o=e=d=n=n=j=b=v=g=void 0;g=C(A,u,-1,f,1);for(b=v=0;bPO(O7(b.a,l.a)))M8(e,g,o,E.a);else{r=g;b=o;E=l=j=void 0;for(E=0;Ed[b+1]&&(j=d[b],d[b]=d[b+1],d[b+1]=j,j=f[b],f[b]=f[b+1],f[b+1]=j,j=g[b],g[b]=g[b+1],g[b+1]=j);d[e]=d[0]+6.283185307179586;f[e]=f[0];g[e]=g[0];j=-100;for(h=l=0;hc&&(d+=3.141592653589793));c=Math.sqrt(e*e+c*c)/b;return new J8(d,c)}w(33,1,{},R8);_.a=null;_.b=null;_.c=null;_.d=null;_.e=0;_.f=null;_.i=null;_.j=null;function m8(){}w(34,1,{},m8);_.dd=function(a,b){var c,d;return c=QO(a.b),d=QO(b.b),cc;++c){for(d=0;dd&&(0>a?b-=3.141592653589793:b+=3.141592653589793)):b=0~~(a.e.length/2);if(0!=(a.j&6)){f=g=!1;for(j=0;jd&&(b=C(A,u,-1,2,1),b[0]=a.e[e],b[1]=a.e[f],sz(c.b,c.c++,b)),b=1-(1>d?d:1),a.c+=b*b;return c}function t8(a,b){var c;for(c=0;cc&&(c+=6.283185307179586);return c}function S8(){S8=x;T8=y(U8,Vu,-1,[0.29899999499320984,0.5870000123977661,0.11400000005960464])}\nfunction V8(a,b){S8();var c,d,e,f,g,h;c=!b?1:(T8[0]*(b.d>>16&255)+T8[1]*(b.d>>8&255)+T8[2]*(b.d&255))/255;f=!a?1:(T8[0]*(a.d>>16&255)+T8[1]*(a.d>>8&255)+T8[2]*(a.d&255))/255;e=PO(c-f);if(0.30000001192092896>16&255,b.d>>8&255,b.d&255,d);g=C(U8,Vu,-1,3,1);W8(a.d>>16&255,a.d>>8&255,a.d&255,g);h=PO(g[0]-d[0]);0.5d[1]?g[1]:d[1]);d=PO(f+c-1);h=Math.cos(9.42477796076938*h);h=0.30000001192092896*(g>(d>h?d:h)?g:d>h?d:h);if(e>h)c=a;else if(e=(f>c?1<\nf+h:0>24&255)/255,f=c,null==f&&(f=C(U8,Vu,-1,3,1)),null!=a.b?(f[2]=a.b[2],f[1]=a.b[1],f[0]=a.b[0]):(f[2]=(a.d&255)/255,f[1]=(a.d>>8&255)/255,f[0]=(a.d>>16&255)/255),f=!a?1:(T8[0]*(a.d>>16&255)+T8[1]*(a.d>>8&255)+T8[2]*(a.d&255))/255,0==f)c=new X8(f,f,f,c[3]);else{d=e/(!a?1:(T8[0]*(a.d>>16&255)+T8[1]*(a.d>>8&255)+T8[2]*(a.d&255))/255);for(e=f=h=0;3>e;++e)c[e]*=d,1>c[e]?f+=T8[e]:(h+=(c[e]-1)*T8[e],c[e]=1);if(0!=h){for(e=\nd=0;3>e;++e)1>c[e]&&(c[e]+=h/f,1e;++e)1>c[e]&&(c[e]+=d/T8[e],1(a>b?a:b)?c:a>b?a:b;l=c<(ag&&++g);d[0]=g;d[1]=h;d[2]=j/255}w(473,1,{58:1,67:1,70:1},X8,Y8);var Y7=null;function a7(){}function d7(a,b){this.a=a;this.b=b}w(523,496,{77:1,78:1},a7,d7);_.vf=tH;_.wf=RJ;_.tS=function(){return Z8.d+"[x="+this.a+",y="+this.b+Lm};_.a=0;_.b=0;\nfunction Q6(a,b){var c,d,e,f;c=new R6;d=a.c;e=b.vf();d=dg?f:g;var g=a.d+a.a,h=b.wf()+b.xf();c.c=d;c.d=e;c.b=f-d;c.a=(g>h?g:h)-e;return c}function R6(){}function i7(a,b,c,d){this.c=a;this.d=b;this.b=c;this.a=d}w(524,499,av,R6,i7);_.xf=tH;_.yf=RJ;_.vf=function(){return this.c};_.wf=function(){return this.d};_.tS=function(){return ila.d+"[x="+this.c+",y="+this.d+",width="+this.b+",height="+this.a+Lm};_.a=0;_.b=0;_.c=0;_.d=0;\nfunction $8(a){var b,c;c=new d_;var d=new b8,e=WS(iG(a)),f,g,h,j,l,n,o,r,t,z,v,E,s,F,P,M,$,da,Z,ca,Hb,aa,sb,Mb,K,Ja,$c,Ub,tb,N,za,mc,rd,qa,dd,Zd,Ya;d.b=c;lZ(d.b);sb=null;j=C(A,u,-1,64,1);j[0]=-1;Ja=C(A,u,-1,64,1);$c=C(A,u,-1,64,1);for(s=0;64>s;++s)Ja[s]=-1;g=K=0;Ub=Mb=N=!1;n=0;tb=e.length;for(l=1;32>=e[K];)++K;for(;K>24;var pa=d.b,Ab=f,G=o;null!=G&&0==G.length&&(G=null);null==G?null!=pa.r&&(pa.r[Ab]=null):(null==pa.r&&(pa.r=C(eZ,q,3,pa.G,0)),pa.r[Ab]=G)}E=j[n];-1!=j[n]&&128!=l&&kZ(d.b,f,j[n],l);l=1;j[n]=f;0!=g&&(yZ(d.b,f,g),g=0);(ca=!sb?null:RZ(sb,oP(E)))&&c8(ca,f,K,1==h);aa&&(!sb&&(sb=new ZZ),$Z(sb,oP(f),new d8(d,f,E,v,K,F)))}else if(46==za)l=128;else if(61==\nza)l=2;else if(35==za)l=4;else if(SM(za))if(Z=za-48,N){for(;Ks;++s)if(-1!=Ja[s])throw new Ny(nka);var Sa=d.b,ob,Pc,hc,ga,tc,Y;Y=C(A,u,-1,Sa.o,1);ga=C(tz,Ou,-1,Sa.o,2);for(Pc=0;Pchc;++hc)MZ(Sa,Sa.y[hc][Pc])&&!MZ(Sa,Sa.y[1-hc][Pc])&&(ga[Sa.y[hc][Pc]]=!0);for(tc=Sa.o-1;0<=tc&&ga[tc];)Y[tc]=tc,--tc;for(ob=0;ob<=tc;++ob)if(ga[ob]){Y[ob]=tc;Y[tc]=ob;for(--tc;0<=tc&&ga[tc];)Y[tc]=tc,--tc}else Y[ob]=ob;d.b.J=!0;jY(d.b,1);for(f=0;fCb[ld[Sd]];){ic=ld[Sd];for(ae=0;ae=Ta.b.q[Na]||6==Ta.b.x[Na]&&0!=Ta.b.q[Na]||!I7(Ta.b,Na)?be=!1:(Fc=null==yY(Ta.b,Na)?0:(null==Ta.b.r?null:Ta.b.r[Na])[0],be=1>pZ(Ta.b,Na)-tY(Ta.b,Na)-Fc||5!=Ta.b.x[Na]&&6!=Ta.b.x[Na]&&7!=Ta.b.x[Na]&&8!=Ta.b.x[Na]&&15!=Ta.b.x[Na]&&16!=Ta.b.x[Na]&&33!=Ta.b.x[Na]&&34!=Ta.b.x[Na]?!1:!0);if(!be){K7(d.b,fd[ub],!1);\nfor(Ec=0;Ecub;++ub){Qc=W(d.b,ub,Wa);for(Ec=0;EcOb;++Ob){Gc[Ob]=-1;jc[Ob]=-1;xc=W(d.b,Ob,kb);for(yd=0;ydOb;++Ob)-1!=jc[Ob]&&jc[Ob]c-d+(b-1));return fA(d)}throw new lK;}\nfunction h9(a){var b,c,d;c=15525485*a.a+1502*a.b;d=15525485*a.b+11;b=Math.floor(5.9604644775390625E-8*d);a.a=(c+b)%16777216;a.b=d-16777216*b;a=128*a.a+Math.floor(a.b*g9[31]);2147483648<=a&&(a-=4294967296);return a}function z8(){e9();var a,b;b=jla++ +(new Date).getTime();a=fA(Math.floor(5.9604644775390625E-8*b))&16777215;b=fA(b-16777216*a);this.a=a^1502;this.b=b^15525485}function i9(){e9();this.a=6122;this.b=12230397}w(643,1,{},z8,i9);_.a=0;_.b=0;var f9,g9,jla=0;w(683,679,bv);\n_.Ad=function(){var a,b,c,d,e;a=b=d=null;if(this.b.a==(xP(),yP)&&this.b.i==(zP(),AP))try{var f=this.b.b,g,h,j;j=null;h=new d_;UZ(new a_,h,new l2(new o2(f)))&&(g=new X7(h),j=Uz(g.a.a));b=j;if(null==b)throw new Ny("V3000 read failed.");a=Rs;this.a.ic.a="V3000 conversion provided by OpenChemLib"}catch(l){if(l=Az(l),H(l,96))c=l,d=c.yd();else throw l;}else if(this.b.a==hU)try{var n=this.b.b,o,r,t,z;b=-1!=n.indexOf(Wf)?(o=VS(n,Wf),r=$8(o[0]),t=$8(o[2]),z=m,z+=rc,z+=fQ(1,3)+fQ(1,3)+ba,z+=gc+r,z+=gc+t,z):\n$8(n);this.b.f==(vP(),eU)?a="readSMIRKS":this.b.f==fU&&(a="readSMILES");this.a.ic.a="SMILES conversion provided by OpenChemLib"}catch(v){if(v=Az(v),H(v,96))c=v,d=c.yd();else throw v;}else if(d="Invalid or unsupported input",this.a.zc&&!this.b.d)try{var E,s=new U7,F=iG(this.b.b),P;if(null==F||0==F.length)P=null;else{var M=WS(F),$,da,Z,ca,Hb;if(null==M)P=null;else{S7(s,M,0);$=X(s,4);ca=X(s,4);8<$&&($=ca);da=X(s,$);Z=X(s,ca);Hb=new XZ(da,Z);var aa=null,sb,Mb,K,Ja,$c,Ub,tb,N,za,mc,rd,qa,dd,Zd,Ya,pa,Ab,\nG,Sa,ob,Pc,hc,ga,tc,Y,O,db,Bb,Nb,T,Aa,Wa,Xc,Da,Qc,ub,Fd,ie,Ec,ed,Vb,eb,fd,Yb,Yc,I,pb,wc,Gd,uc,$d,Sd,ld,Zb,Cb,oa,Ld,ae,gd,ic,be,Ta,Na,Fc,xc,kb,yc,Ob,xd,sd,yd,jc;kb=8;s.f=Hb;lZ(s.f);if(!(null==M||0==M.length))if(null!=aa&&0==aa.length&&(aa=null),S7(s,M,0),K=X(s,4),pa=X(s,4),82*Ja-2&&39==aa[2*Ja-2]||aa.length>3*Ja-3&&39==aa[3*Ja-3]?(T=!0,pb=(Nb=aa.length==3*Ja-3+9)?3*Ja-3:2*Ja-2,Zd=86*(aa[pb+1]-40)+aa[pb+2]-40,xc=Math.pow(10,Zd/2E3-1),pb+=2,yc=86*(aa[pb+1]-40)+aa[pb+2]-40,Ob=Math.pow(10,yc/1500-1),pb+=2,xd=86*(aa[pb+1]-40)+aa[pb+2]-40,sd=Math.pow(10,xd/1500-1),Nb&&(pb+=2,yd=86*(aa[pb+1]-40)+aa[pb+2]-\n40,jc=Math.pow(10,yd/1500-1))):Nb=aa.length==3*Ja-3);s.b&&Nb&&(aa=null,Da=!1);for(I=1;I>24;var zd=s.f,Pb=N,Qb=mZ($d,0,$d.length),ce=void 0;if(null!=Qb)if(0==Qb.length)Qb=null;else if(ce=FZ(Qb),0!=ce&&J(Qb,cZ[ce])||J(Qb,Xf))jZ(zd,Pb,ce),Qb=null;\nnull==Qb?null!=zd.r&&(zd.r[Pb]=null):(null==zd.r&&(zd.r=C(eZ,q,3,zd.G,0)),zd.r[Pb]=WS(Qb))}break;case 19:oa=X(s,K);for(I=0;I\nnc;++nc)of[W(V.d,nc,Ra)]||(of[W(V.d,nc,Ra)]=!0,++V.a)}if(0!=V.b){vc=new LZ(V.d,1);if(V.d.E){var le,md,Td,oc,Ic,qb,Ac;for(md=0;mdoc;++oc){qb=W(V.d,oc,md);le=!1;for(Ic=0;Icxe;++xe)if(Bc=W(vc.f,\nxe,lc),7==vc.f.x[Bc]&&2==vc.f.f[Bc]){gb=W(vc.f,1-xe,lc);for(Bd=0;BdHd;++Hd){Sc=W(V.d,Hd,Ba);for(Cd=0;Cdje;++je){zc=\nW(V.d,je,Ra);for(Me=0;Menc;++nc)if(!V.c[ke[nc]]){fb=!1;break}if(fb){for(nc=0;6>nc;nc+=2)y7(V,ke[nc]);Xa=!0;break}}if(!Xa)for(Ra=0;Ras.d+1&&(32==M[s.d+1]||9==M[s.d+1]))aa=M,db=s.d+\n2;if(null!=aa)try{if(33==aa[db]||35==aa[db]){S7(s,aa,db+1);Nb=1==X(s,1);T=1==X(s,1);Ta=2*X(s,4);Ab=1<=b.b||0>=b.a||0>=h||0>=f?e=!1:(j=b.c,n=b.d,l=j+b.b,o=n+b.a,e=j<=e&&e+h<=l&&n<=g&&g+f<=o);e=!e}e&&(b=new G7(a.w,b,d),D7(b,a.K),E7(b,a.w),d=a.x,d.a=d.a*b.c+b.a,d.b=d.b*b.c+b.b,c&&D7(b,c))}if(0!=a.G.o){jY(a.G,0!=(a.B&256)?31:0!=(a.B&512)?47:0!=(a.B&1024)?79:15);G6(a);b=!1;a.r=C(A,u,-1,a.G.o,1);for(c=0;c>16&255)+Jd+(e.d>>8&255)+Jd+(e.d&255)+kd,e7(a,c),L6(a,a.J)):e7(a,c);for(c=new GD(a.N);c.b>6,d=((a.G.A[b]&\n960)>>6)+((a.G.A[b]&15360)>>10),d=e==d?gl+e+Lm:gl+e+zf+d+Lm):0!=(a.G.A[b]&786432)?d=262144==(a.G.A[b]&786432)?$m:32==(a.G.A[b]&48)?"r!a":w6:0!=(a.G.A[b]&48)&&(d=32==(a.G.A[b]&48)?F6:"!r"),e=(a.G.A[b]&114688)>>14,0!=e&&(d=(null==d?m:d)+e),null!=d&&(f=W(a.G,0,b),j=W(a.G,1,b),c||(k7(a,~~((2*a.Q+1)/3)),c=!0),g=(S6(a.K,sX(a.G,f))+S6(a.K,sX(a.G,j)))/2,h=(T6(a.K,tX(a.G,f))+T6(a.K,tX(a.G,j)))/2,e=S6(a.K,sX(a.G,j))-S6(a.K,sX(a.G,f)),j=T6(a.K,tX(a.G,j))-T6(a.K,tX(a.G,f)),f=Math.sqrt(e*e+j*j),n=0.6*g7(a,d),\nl=0.55*a.o,0!=f&&(0>4){switch((a.G.z[b]&48)>>4){case 1:h=2==qX(a.G,b)?JW:0!=(a.G.z[b]&4)?zs:dk;break;case 2:h=2==qX(a.G,b)?"Z":0!=(a.G.z[b]&4)?cr:E6;break;default:h=Xf}k7(a,~~((2*a.Q+1)/3));L6(a,K6(a.G,b)?-3:448);\ne=W(a.G,0,b);g=W(a.G,1,b);c=(S6(a.K,sX(a.G,e))+S6(a.K,sX(a.G,g)))/2;d=(T6(a.K,tX(a.G,e))+T6(a.K,tX(a.G,g)))/2;f=(S6(a.K,sX(a.G,e))-S6(a.K,sX(a.G,g)))/3;e=(T6(a.K,tX(a.G,e))-T6(a.K,tX(a.G,g)))/3;h7(a,c+e,d-f,h,!0);L6(a,a.J);k7(a,a.Q)}if(0!=(a.B&4)){k7(a,~~((2*a.Q+1)/3));L6(a,384);for(b=0;b>16&255)+0.30000001192092896*((d.d>>16&255)-(c.d>>16&255))),fA((c.d>>8&255)+0.30000001192092896*((d.d>>8&255)-(c.d>>8&255))),fA((c.d&255)+0.30000001192092896*((d.d&255)-(c.d&255))));this.v=V8(vv,c);this.C=zv;this.D=yv;this.c=new Zv;this.b=new Zv;this.d=new Jy;this.f=new hL(mi,0,\n12);new hL(mi,0,120);this.k=m;++f7;this.a=b}w(702,28,{},j9);_.fd=function(a){var b;b=m;null!=this.a&&0"+b+"<\/chemical:x-mdl-molfile>\\n");return b};_.gd=function(a){return\'xmlns:chemical="http://www.ch.ic.ac.uk/chemime/"\'+a};_.a=null;var lla=GS(" F");U(626);U(627);var U8=AS(922,lla),Z8=U(523),ila=U(524);U(3);U(28);U(702);var kla=AS(929,Z8);U(4);U(5);U(25);U(24);U(29);U(30);U(33);\nvar mla=U(41),A8=AS(944,mla),nla=U(38),I8=AS(945,nla),ola=U(37),u8=AS(946,ola),hla=AS(947,u8);U(34);U(35);U(36);U(6);U(643);U(39);U(40);U(19);B(sW)(1);function tH(){return this.a}function RJ(){return this.b}function WE(){return m};\n//@ sourceURL=1.js\n') diff --git a/chemprop/web/app/static/jsme/jsme/deferredjs/222ADBFEC322C2723C6ED2C4FB31B217/2.cache.js b/chemprop/web/app/static/jsme/jsme/deferredjs/222ADBFEC322C2723C6ED2C4FB31B217/2.cache.js deleted file mode 100644 index ef24811d6..000000000 --- a/chemprop/web/app/static/jsme/jsme/deferredjs/222ADBFEC322C2723C6ED2C4FB31B217/2.cache.js +++ /dev/null @@ -1 +0,0 @@ -$wnd.jsme.runAsyncCallback2('var pla=" (H\'s don\'t count.)",qla="!#6",rla="!@",sla="#15,",tla="#16,",ula="#6,",vla="#7,",wla="#8,",xla=";!R",yla=";A",zla=";D",Ala=";H",Bla=";R",Cla=";a",Dla="");this.pb[Kg]="gwt-ListBox"}w(400,377,jl,p2);function q2(){q2=x}\nfunction r2(a,b){if(null==b)throw new ju("Missing message: awt.103");var c=-1,d,e,f;f=a.Tc.a.pb;e=Tq(Ri);e.text=b;e.removeAttribute("bidiwrapped");e.value=b;d=f.options.length;(0>c||c>d)&&(c=d);c==d?f.add(e):(c=f.options[c])?f.add(e,c.index):f.add(e)}function s2(){q2();CA.call(this);new Bm;this.Tc=new t2((DA(),this))}w(467,454,{57:1,59:1,66:1,80:1,88:1},s2);_.Le=function(){return IA(this.Tc,this)};\n_.$e=function(){return(null==this.Qc&&(this.Qc=mA(this)),this.Qc)+Pa+this._c+Pa+this.ad+Pa+this.Yc+Ak+this.Nc+(this.Xc?m:",hidden")+",current="+o2(this.Tc.a,this.Tc.a.pb.selectedIndex)};function u2(){vV.call(this,7)}w(481,1,Sl,u2);function v2(a){a.Tc.Ff(a.j);!oA(a)&&UU(a);OU(a)}\nfunction w2(a,b,c){vW.call(this);this.Tc&&this.Tc.Gf(!1);nV(this,!1);RA(this,new vV(0));a=new yV(a,1);QU(this,a,null);a=new WA;QU(a,this.i,null);QU(this,a,null);b&&(this.j=rA(b),mV(this),uW(this.j,~~(Nq(b.Ec.pb,Mi)/2)-~~(this.Yc/2),~~(Nq(b.Ec.pb,Li)/2)-~~(this.Nc/2)));c&&MU(this,c)}w(654,655,vO,w2);_.Fh=function(){return PO};w(679,674,Hl);_.Ad=function(){v2(new w2(this.b,this.a,(kE(),mE)))};w(681,674,Hl);_.Ad=function(){this.a.bc?this.a.bc.Tc.We()?this.a.bc.Tc.If():v2(this.a.bc):this.a.bc=new x2(this.a)};\nfunction y2(a,b){JU(b)==a.a?MU(b,(sB(),CB)):MU(b,a.a)}\nfunction z2(a){var b,c,d,e;e=m;d=!1;JU(A2)!=a.a?(e=Ma,d=!0):JU(B2)!=a.a?(e="!#6",d=!0):JU(C2)!=a.a?(MU(D2,(sB(),CB)),MU(E2,CB),MU(F2,CB),MU(G2,CB),e="F,Cl,Br,I"):(b=JU(H2)!=a.a,c=JU(I2)!=a.a,JU(J2)!=a.a&&(b?e+="c,":c?e+="C,":e+="#6,"),JU(K2)!=a.a&&(b?e+="n,":c?e+="N,":e+="#7,"),JU(L2)!=a.a&&(b?e+="o,":c?e+="O,":e+="#8,"),JU(M2)!=a.a&&(b?e+="s,":c?e+="S,":e+="#16,"),JU(N2)!=a.a&&(b?e+="p,":c?e+="P,":e+="#15,"),JU(D2)!=a.a&&(e+="F,"),JU(E2)!=a.a&&(e+="Cl,"),JU(F2)!=a.a&&(e+="Br,"),JU(G2)!=a.a&&(e+=\n"I,"),dK(e,Pa)&&(e=$C(e,0,e.length-1)),1>e.length&&!a.b&&(b?e=Wf:c?e=od:(MU(A2,(sB(),CB)),e=Ma)));b=m;d&&JU(H2)!=a.a&&(b+=";a");d&&JU(I2)!=a.a&&(b+=";A");JU(O2)!=a.a&&(b+=";R");JU(P2)!=a.a&&(b+=";!R");JU(A2)!=a.a&&0>g,f));return!0}function d3(a,b,c,d,e,f,g){var h,j;for(h=j=0;h>g,f));return!0}\nfunction c3(a,b,c){for(;0!=c;)0==a.p&&(mD(a.q,a.r+64&65535),a.p=6,a.r=0),a.r<<=1,a.r|=b&1,b>>=1,--c,--a.p}function b3(a,b){b||(c3(a,1,1),c3(a,15,4));return!0}function e3(a,b){var c,d,e;if(2>a.H.k[b])return!1;if(2==a.H.f[b])return!0;for(e=c=0;e>=1,++b;return b}\nfunction g3(a,b){var c,d,e,f,g,h,j;e=C(A,u,-1,32,1);for(c=f=0;cg;++g)j>24}for(c=0;ca.c[c]&&(c=d);e=C(hq,ql,-1,a.H.c,2);b=C(hq,ql,-1,a.H.d,2);a.y=C(A,u,-1,a.H.c,1);a.t=C(A,u,-1,a.H.c,1);a.w=C(A,u,-1,a.H.c,1);a.u=C(A,u,-1,a.H.d,1);a.t[0]=c;a.y[c]=0;e[c]=!0;f=1;h=0;j=1;for(c=0;h=iP(a.H,d))g=\nhP(a.H,d,r),!e[g]&&a.c[g]>l&&(n=g,o=xP(a.H,d,r),l=a.c[g]);if(-1==l)break;a.y[n]=j;a.w[j]=h;a.t[j++]=n;a.u[c++]=o;e[n]=!0;b[o]=!0}++h}else{g=0;l=-1;for(d=0;dl&&(g=d,l=a.c[d]);++f;a.y[g]=j;a.w[j]=-1;a.t[j++]=g;e[g]=!0}for(a.v=C(A,u,-1,2*(a.H.d-c),1);;){j=h=a.H.G;l=-1;for(d=0;da.c[f[1]]^a.y[f[0]]a.c[h]&&(c=!c),a.y[f]b;++b)if(j=W(a.H,b,e),3==a.H.f[j]){f=C(A,u,-1,2,1);for(d=h=0;3>d;++d)hP(a.H,j,d)!=W(a.H,1-b,e)&&(f[h++]=hP(a.H,j,d));a.c[f[0]]>a.c[f[1]]&&(c=!c);a.y[f[0]]>4,2))}a.H.E&&(c|=a3(a,22,c,b,268435456,1,-1),c|=d3(a,23,c,b,131072,1,-1),c|=d3(a,24,c,b,786432,2,18));if(0!=(a.G&16))for(d=0;da.t[l[g]]&&(o=a.t[l[g]],n=g);for(;0=a.a.d)break a;b=d[e];c=new FileReader;z3(c,a.a.b);1==a.a.c&&c.readAsText(b)}0==d.length&&(b=(this.a.dataTransfer||null).getData(Yj),a.a.b.a.a.f.pb[sk]=null!=b?b:m)};_.Gd=function(){return x3};var x3;function A3(a,b,c){iu(!a.mb?a.mb=new xu(a):a.mb,c,b)}\nfunction B3(){this.pb=Qq("file");this.pb[Kg]="gwt-FileUpload"}w(381,362,jl,B3);_.Yd=function(a){qx(this,a)};function C3(a){var b=Tq(gh);PR(Nj,PS(b));this.pb=b;this.b=new oU(this.pb);this.pb[Kg]="gwt-HTML";nU(this.b,a,!0);wU(this)}w(385,386,jl,C3);function D3(){Rz();var a=Tq("textarea");!fw&&(fw=new ew);!dw&&(dw=new cw);this.pb=a;Iu();this.pb[Kg]="gwt-TextArea"}w(425,426,jl,D3);\nfunction E3(a,b){var c,d;c=Tq(lk);d=Tq(Xj);d[jg]=a.a.a;d.style[tk]=a.b.a;var e=(hw(),iw(d));c.appendChild(e);gw(a.d,c);Cx(a,b,d)}function F3(){wy.call(this);this.a=(zy(),Gy);this.b=(Hy(),Ky);this.e[Fg]=bc;this.e[Eg]=bc}w(434,378,rl,F3);_.re=function(a){var b;b=Sq(a.pb);(a=Gx(this,a))&&this.d.removeChild(Sq(b));return a};\nfunction G3(a){try{a.w=!1;var b,c,d;d=a.hb;c=a.ab;d||(a.pb.style[uk]=Ih,a.ab=!1,a.Ee());b=a.pb;b.style[Xh]=0+(Cr(),bj);b.style[ek]=dc;eX(a,Pm(er($doc)+(dr()-Nq(a.pb,Mi)>>1),0),Pm(fr($doc)+(cr()-Nq(a.pb,Li)>>1),0));d||((a.ab=c)?(a.pb.style[Ng]=oj,a.pb.style[uk]=vk,qm(a.gb,200)):a.pb.style[uk]=vk)}finally{a.w=!0}}function H3(a){a.i=(new hV(a.j)).Tc.Ef();mx(a.i,new I3(a),(Gs(),Gs(),Hs));a.d=y(dA,q,50,[a.i])}\nfunction J3(){SW();var a,b,c,d,e;qX.call(this,(JX(),KX),null,!0);this.Xh();this.db=!0;a=new C3(this.k);this.f=new D3;this.f.pb.style[zk]=fc;ax(this.f,fc);this.Vh();JW(this,"400px");e=new F3;e.pb.style[Hh]=fc;e.e[Fg]=10;c=(zy(),Ay);e.a=c;E3(e,a);E3(e,this.f);this.e=new Oy;this.e.e[Fg]=20;for(b=this.d,c=0,d=b.length;cb)throw new EJ("Length must be a positive integer. Length: "+b);if(b>Oq(a.pb,sk).length)throw new EJ("From Index: 0 To Index: "+b+" Text Length: "+Oq(a.pb,sk).length);var a=a.pb,c=0;try{var d=a.createTextRange(),e=a.value.substr(c,b).match(/(\\r\\n)/gi);null!=e&&(b-=e.length);var f=a.value.substring(0,c).match(/(\\r\\n)/gi);null!=f&&(c-=f.length);d.collapse(!0);d.moveStart("character",c);d.moveEnd("character",\nb);d.select()}catch(g){}}};_.a=null;function L3(a){H3(a);a.a=(new hV(a.b)).Tc.Ef();mx(a.a,new M3(a),(Gs(),Gs(),Hs));a.d=y(dA,q,50,[a.a,a.i])}function N3(a){a.j=HO;a.k="Paste the text to import into the text area below.";a.b="Accept";IX(a.I.b,"Paste")}function O3(a){SW();J3.call(this);this.c=a}w(760,754,rO,O3);_.Vh=function(){L3(this)};_.Wh=function(){ax(this.f,"150px")};_.Xh=function(){N3(this)};_.Ee=function(){pX(this);Aq((xq(),yq),new P3(this))};_.a=null;_.b=null;_.c=null;\nfunction Q3(a){SW();O3.call(this,a)}w(759,760,rO,Q3);_.Vh=function(){var a;L3(this);a=new B3;mx(a,new R3(this),(bT(),bT(),cT));this.d=y(dA,q,50,[this.a,a,this.i])};_.Wh=function(){ax(this.f,"150px");var a=new S3(this),b=this.f;A3(b,new T3,(q3(),q3(),r3));A3(b,new U3,(m3(),m3(),n3));A3(b,new V3,(t3(),t3(),u3));A3(b,new W3(a),(w3(),w3(),x3))};_.Xh=function(){N3(this);this.k+=" Or drag and drop a file on it."};function R3(a){this.a=a}w(761,1,{},R3);\n_.Id=function(a){var b,c;b=new FileReader;a=(c=a.a.srcElement,c.files[0]);X3(b,new Y3(this));b.readAsText(a)};_.a=null;function Y3(a){this.a=a}w(762,1,{},Y3);_.Yh=function(a){bD();Qz(this.a.a.f,a)};_.a=null;w(765,1,{});w(764,765,{});_.b=null;_.c=1;_.d=-1;function S3(a){this.a=a;this.b=new Z3(this);this.c=this.d=1}w(763,764,{},S3);_.a=null;function Z3(a){this.a=a}w(766,1,{},Z3);_.Yh=function(a){this.a.a.f.pb[sk]=null!=a?a:m};_.a=null;function M3(a){this.a=a}w(770,1,{},M3);\n_.Jd=function(){if(this.a.c){var a=this.a.c,b;b=new XC(a.a,0,Oq(this.a.f.pb,sk));uI(a.a.a,b.a)}ZW(this.a,!1)};_.a=null;function P3(a){this.a=a}w(771,1,{},P3);_.pd=function(){ix(this.a.f.pb,!0);hz(this.a.f.pb)};_.a=null;w(772,1,Hl);_.Ad=function(){var a,b;a=new $3(this.a);void 0!=$wnd.FileReader?b=new Q3(a):b=new O3(a);LW(b);G3(b)};function $3(a){this.a=a}w(773,1,{},$3);_.a=null;w(774,1,Hl);\n_.Ad=function(){var a;a=new J3;var b=this.a,c,d;Qz(a.f,b);c=(d=eK(b,"\\r\\n|\\r|\\n|\\n\\r"),d.length);1>=c&&(c=~~(b.length/16));ax(a.f,20*(10>c+1?c+1:10)+bj);Aq((xq(),yq),new K3(a));LW(a);G3(a)};function X3(a,b){a.onload=function(a){b.Yh(a.target.result)}}function z3(a,b){a.onloadend=function(a){b.Yh(a.target.result)}}function W3(a){this.a=a}w(779,1,{},W3);_.a=null;function T3(){}w(780,1,{},T3);function U3(){}w(781,1,{},U3);function V3(){}w(782,1,{},V3);U(765);U(764);U(779);U(780);U(781);U(782);U(253);\nU(255);U(254);U(256);U(257);U(754);U(760);U(759);U(773);U(757);U(758);U(770);U(771);U(761);U(762);U(763);U(766);U(385);U(434);U(425);U(381);B(qO)(8);\n//@ sourceURL=8.js\n') diff --git a/chemprop/web/app/static/jsme/jsme/deferredjs/6ABB8447ACAB1353A478923AC9C0550B/9.cache.js b/chemprop/web/app/static/jsme/jsme/deferredjs/6ABB8447ACAB1353A478923AC9C0550B/9.cache.js deleted file mode 100644 index 53f7df5d6..000000000 --- a/chemprop/web/app/static/jsme/jsme/deferredjs/6ABB8447ACAB1353A478923AC9C0550B/9.cache.js +++ /dev/null @@ -1 +0,0 @@ -$wnd.jsme.runAsyncCallback9('var dO="runCallbacks",eO="end",fO,gO,hO="West",iO="South",jO="North",kO="First",lO="East",mO="Before",nO="After";function oO(a,b){sp(a.a,b)}function pO(){pO=x;fO=new ru;gO=new xA(0,0);su(fO,mO);su(fO,kO);su(fO,nO);su(fO,"Last");su(fO,Zd);su(fO,jO);su(fO,iO);su(fO,hO);su(fO,lO)}\nfunction qO(a){var b=Tp,c,d,e;e=a==b.f?Yh:lh+a;$stats&&(e=Yp(e,eO,a),$stats(e));ao^0>r?1:2):-1==kP(f)||-1==kP(e)||0!=((kP(f)|kP(e))&1)?3:kP(f)==kP(e)?1:2;c?0!=(a.G&2)&&(f.f&&(1==d?(lP(a.b[f.b],Kk),lP(a.b[f.d],Hk)):2==d&&(lP(a.b[f.b],Hk),lP(a.b[f.d],Kk))),e.f&&(1==d?(lP(a.b[e.b],Kk),lP(a.b[e.d],Hk)):2==d&&(lP(a.b[e.b],Hk),lP(a.b[e.d],Kk)))):a.k[b]=d;return!0}\nfunction vP(a,b,c){var d,e,f,g,h,j,l;if(0!=a.S[b]||6!=a.H.x[b]&&7!=a.H.x[b]&&14!=a.H.x[b]&&15!=a.H.x[b]&&16!=a.H.x[b])return!1;if(0!=a.H.k[b]){if(2==a.H.f[b]&&2==a.H.j[b][0]&&2==a.H.j[b][1])return gP(a,b,c);if(15!=a.H.x[b]&&16!=a.H.x[b])return!1}if(3>a.H.f[b]||4l;++l)d[l][0]=sP(a.H,g[l+1])-sP(a.H,g[0]),d[l][1]=tP(a.H,g[l+1])-tP(a.H,g[0]),d[l][2]=uP(a.H,\ng[l+1])-uP(a.H,g[0]);g=C(XE,Ml,-1,3,1);g[0]=d[0][1]*d[1][2]-d[0][2]*d[1][1];g[1]=d[0][2]*d[1][0]-d[0][0]*d[1][2];g[2]=d[0][0]*d[1][1]-d[0][1]*d[1][0];d=0<(d[2][0]*g[0]+d[2][1]*g[1]+d[2][2]*g[2])/(Math.sqrt(d[2][0]*d[2][0]+d[2][1]*d[2][1]+d[2][2]*d[2][2])*Math.sqrt(g[0]*g[0]+g[1]*g[1]+g[2]*g[2]))?1:2}else{var n,o;l=y(kH,il,86,[y(A,u,-1,[2,1,2,1]),y(A,u,-1,[1,2,2,1]),y(A,u,-1,[1,1,2,2]),y(A,u,-1,[2,1,1,2]),y(A,u,-1,[2,2,1,1]),y(A,u,-1,[1,2,1,2])]);g=C(XE,Ml,-1,iP(a.H,b),1);for(o=0;o>24;if(3!=h)d=h;else{for(o=j=h=0;og[2]-g[1]||g[1]>g[2]&&3.141592653589793g[1]-g[0]&&\n(j=3-j)}d=1==j?2:1}else d=0,g[1]<=g[2]&&g[2]<=g[3]?d=0:g[1]<=g[3]&&g[3]<=g[2]?d=1:g[2]<=g[1]&&g[1]<=g[3]?d=2:g[2]<=g[3]&&g[3]<=g[1]?d=3:g[3]<=g[1]&&g[1]<=g[2]?d=4:g[3]<=g[2]&&g[2]<=g[1]&&(d=5),d=l[d][h]==j?2:1}}}if(c){if(a.M&&0!=(a.G&2)||!a.M&&0!=(a.G&4))1==d?(lP(a.b[e],Tk),lP(a.b[f],Rk)):2==d&&(lP(a.b[e],Rk),lP(a.b[f],Tk))}else a.S[b]=d;return!0}function CP(a){var b,c;b=0;c=a.b;DP(c,c.length,(EP(),EP(),FP));for(c=0;cj;++j)if(f=W(d.H,j,e),3==d.H.f[f]){g=C(A,u,-1,2,1);for(n=h=0;nd.c[g[1]]^JP(d,f,g[0],g[1])&&(l=!l)}}catch(o){o=pq(o);if(H(o,96)){d.e[e]=3;break a}throw o;}1==d.k[e]^l?d.e[e]=1:d.e[e]=2}}d=!0}e=!1;for(c=0;cr;++r)if(j=hP(e.H,f,r),3==e.H.f[j]){l=C(A,u,-1,2,1);for(t=n=0;te.c[l[1]]^JP(e,j,l[0],l[1])&&(h=!h)}}catch(z){z=pq(z);if(H(z,96)){e.N[f]=3;break a}throw z;}else{try{for(var j=e,l=f,v=t=r=n=void 0,E=void 0,s=void 0,v=iP(j.H,l),E=C(A,u,-1,v,1),r=0;r=iP(b.H,d)){l=2*b.c[hP(b.H,d,g)];e=xP(b.H,d,g);2==qP(b.H,e)&&(rP(b.H,e)||++l);for(e=0;ee;--h)f[h]=f[h-1];f[e]=l}OP(b.b[d],d);PP(b.b[d],16,Ev(b.c[d]));for(g=j;ga.H.x[d];if(a.H.v[c]!=a.H.v[d])return g=0==a.H.v[c]?(QP(),RP)[a.H.x[c]]:a.H.v[c],a=0==a.H.v[d]?(QP(),RP)[a.H.x[d]]:a.H.v[d],g>a;h=a.H.c;r=C(A,u,-1,h,1);z=C(A,u,-1,h,1);v=C(A,u,-1,h,1);t=C(hq,ql,-1,h,2);g=C(hq,ql,-1,a.H.o,2);r[0]=b;r[1]=c;r[2]=d;z[0]=-1;z[1]=0;z[2]=0;g[b]=!0;g[c]=!0;g[d]=!0;j=1;E=2;b=C(A,u,-1,64,1);b[1]=1;b[2]=3;for(d=2;j<=E;){for(;j=h&&(h+=a.H.c,r=SP(r,h),z=SP(z,h),v=SP(v,h),t=(e=C(hq,ql,-1,h,2),TP(t,0,e,t.length),e));if(0!=(a.H.z[xP(a.H,l,s)]&512))++n,o+=a.H.x[c];else for(f=1;fv[2];1v[2]}e=h.length;for(c=0;cv[2];e=h.length;for(c=0;cv[2];throw new vp("no distinction applying CIP rules");}\nfunction VP(a,b,c,d){var e,f,g,h;e=c[d];c=c[d+1]-e;h=C(XP,q,5,c,0);for(f=0;fh[f+1].c?1:-1:0)&&++d}}\nfunction WP(a,b,c,d,e,f,g,h){var j,l;for(l=1;l=a.H.c)return!1;if(1==a.S[c]||2==a.S[c])return!0;if(3==a.S[c])return!1;d=mQ(a.H,c);if(-1!=d)return 1==a.k[d]||2==a.k[d];for(d=0;dr;++r){l=xP(this.H,d,r);var Z;a:{for(var ca=l,Hb=void 0,aa=void 0,aa=ww(M.j,$),Hb=0;Hb=za[N[tb]];){cd=N[tb];for(rd=0;rdr;++r)if(d==\nP[r]){F=sQ(M,$,g==P[sQ(M,$,r+2)]?r-2:r+2);s=P[F];var Ya;if(Ya=3<=qQ(this.H,s)){var pa;a:{var Ab=this.H,G=v[1],Sa=s,ob=void 0,Pc=void 0,hc=void 0,ga=void 0,tc=void 0,Y=void 0;if(G==Sa)pa=0;else{oQ(Ab,1);ga=C(A,u,-1,Ab.o,1);hc=C(A,u,-1,Ab.o,1);hc[0]=G;ga[G]=1;for(tc=Pc=0;Pc<=tc&&2>=ga[hc[Pc]];){for(Y=0;Y=da&&3>=f&&(this.I[d]=!0);else switch(da){case 4:!h&&!j&&4>=f&&(this.I[d]=!0);break;case 5:j?3>=f&&(this.I[d]=!0):h||4>=f&&(this.I[d]=!0);break;case 6:2==e?h?4>=f&&(this.I[d]=!0):j||3>=f&&(this.I[d]=!0):3==e&&(h?6>=f&&(this.I[d]=!0):4>=f&&(this.I[d]=!0));break;case 7:3==e&&3>=f&&(this.I[d]=!0)}}}for(c=0;c>>28)-1,eb=xQ(this.H,dd,!1),ed=xQ(this.H,dd,!0),Yb=-1;eb!=ed?-1!=Vb&&Vb>eb?Yb=Vb<<24>>24:Yb=eb<<\n24>>24:-1!=Vb?(Vb>ed||Vb=yQ(this.H,dd))&&(Yb=Vb<<24>>24):!zQ(this.H,dd)&&0!=bQ(this.H,dd)&&(Yb=yQ(this.H,dd),Yb-=AQ(this.H,dd,Yb));var Yc=dd,I=Yb;if(null==this.a)for(var pb=this.a=C(hK,Il,-1,this.H.c,1),wc=pb.length,Gd=void 0,Gd=0;Gd>24;PP(Ec,4,Ev(Yb+1));PP(this.b[O],2,Ev((this.H.s[O]&48)>>4));this.H.E&&(PP(this.b[O],30,Ev(this.H.w[O])),null!=vQ(this.H,O)&&(Bb=!0))}this.J=LP(this);if(this.JXc.length;--Da)PP(this.b[O],21,Gk);for(Da=Xc.length-1;0<=Da;--Da)PP(this.b[O],21,Ev(Xc[Da]))}this.J=LP(this)}if(Bb&&this.JFd;--Da)PP(this.b[O],8,Gk);\nfor(Da=Fd-1;0<=Da;--Da)PP(this.b[O],8,Ev(db[Da]))}this.J=LP(this)}if(Wa&&this.J=iP(this.H,O))Aa[Qc]=Ev(this.c[hP(this.H,O,Da)]),Aa[Qc]=tv(Aa[Qc],20),Aa[Qc]=BQ(Aa[Qc],Ev(this.H.A[xP(this.H,O,Da)])),++Qc;Aa.sort(CQ);for(Da=this.E;Da>Aa.length;--Da)PP(this.b[O],36,Gk);for(Da=Aa.length-1;0<=Da;--Da)PP(this.b[O],36,Aa[Da])}this.J=\nLP(this)}if(0!=(this.G&8)&&this.J>=1,Zb>=Cb)Zb-=kd;else{Sd=FQ(ae,ww(uc.a,Zb));if(0==Sd)break a;if(0==kd)break;0>Sd?Zb-=kd:Zb+=kd}Zb>=1,Ta>=Na)Ta-=ce;else{ic=FQ(fd,ww(be.a,Ta));if(0==ic){Ld=Ta;break a}if(0==ce)break;0>ic?Ta-=ce:Ta+=ce}}Ld=-1}oa=1+Ld}ie=oa;OP(this.b[O],O);PP(this.b[O],16,Ev(this.c[O]));PP(this.b[O],16,Ev(ie))}this.J=LP(this)}if(0!=(this.G&16)&&this.J>24,this.P[Fc]=IQ(this.H,Fc)<<24>>24;this.j=C(hK,Il,-1,this.H.d,1);this.i=C(hK,Il,-1,this.H.d,1);for(xc=0;xc>10<<24>>24,this.i[xc]=JQ(this.H,xc)<<24>>24;var jc,Qa,Gc,gd,zd,Pb;this.C=!0;for(zd=HP(this,!1);this.J>24);vm(Hc.b,new PQ(Ra,1,-1,-1))}0Cd;++Cd){Ba=\nC(kH,il,86,32,0);for(hb=Xf=0;32>hb;++hb)if(null!=Sc[Cd][hb]){Ff=Sc[Cd][hb].length;Ba[hb]=C(A,u,-1,Ff,1);for(Kc=0;Kchb;++hb)if(null!=Ba[hb])if(null==Za||Za.lengthzl?(jk<<16)+zl:(zl<<16)+jk,1==this.k[ib.b[Ga]]||2==this.k[ib.b[Ga]]))++Rg,nd>10||2==(this.H.z[Xb]&3072)>>10)&&(1!=this.H.B[Xb]||1!=this.k[Xb]&&2!=this.k[Xb]))BP(this.H,W(this.H,0,Xb)),BP(this.H,W(this.H,1,Xb))}}w(7,1,{},nQ);_.a=null;_.b=null;_.c=null;_.d=null;_.e=null;_.f=null;_.i=null;_.j=null;_.k=null;_.n=null;_.o=null;_.p=0;_.q=null;_.r=0;_.s=null;_.t=null;_.u=null;_.v=null;_.w=null;_.x=!1;_.y=null;_.z=0;_.A=null;\n_.B=!1;_.C=!1;_.D=null;_.E=0;_.F=null;_.G=0;_.H=null;_.I=null;_.J=0;_.K=null;_.L=null;_.M=!1;_.N=null;_.O=null;_.P=null;_.Q=null;_.R=null;_.S=null;_.T=null;_.U=null;_.V=null;_.W=null;_.X=!1;function eQ(a,b){var c,d,e,f;if(a.d!=b.d)return a.d>b.d?1:-1;e=a.a.length;f=b.a.length;c=eb.a[f]?1:-1;return e!=f?e>f?1:-1:a.b!=b.b?a.b>b.b?1:-1:0}function dQ(){}w(8,1,{},dQ);_.dd=function(a,b){return eQ(a,b)};function aQ(){}w(9,1,{4:1},aQ);_.a=null;\n_.b=0;_.c=0;_.d=0;function ZP(){}w(10,1,{},ZP);_.dd=function(a,b){return a.c!=b.c?a.c>b.c?1:-1:0};function YP(){}w(11,1,{5:1},YP);_.a=0;_.b=0;_.c=0;function PP(a,b,c){0==a.b&&(++a.c,a.b=63);63==a.b?(a.d[a.c]=BQ(a.d[a.c],c),a.b-=b):a.b>=b?(a.d[a.c]=tv(a.d[a.c],b),a.d[a.c]=BQ(a.d[a.c],c),a.b-=b):(a.d[a.c]=tv(a.d[a.c],a.b),a.d[a.c]=BQ(a.d[a.c],pv(c,b-a.b)),b-=a.b,++a.c,a.b=63-b,a.d[a.c]=BQ(a.d[a.c],UQ(c,Ev((1<>22);e=ev(f&4194303,g&4194303,e.h+b.h+(g>>22)&1048575);c[d]=e}function GP(a,b){var c;for(c=0;cn)for(t=0;t>24,d.k[o]=h<<24>>24):d.n[o]==j&&d.k[o]==\nh&&(d.n[o]=0,d.k[o]=-1);d=!0}}else if(1==f.a){d=a;h=b;o=g=n=l=j=void 0;n=d.i[f.b];l=1;for(o=0;oo;++o)null!=g[o]&&cQ(g[o]);h=new aR;DP(g,g.length,h?h:(EP(),EP(),FP));if(0==$Q(g[0],g[1]))d=!1;else{for(o=0;o>24,a.k[e]=c<<24>>24}\nfunction bR(a,b,c){var d,e,f,g,h,j,l,n,o,r,t,z,v;f=C(A,u,-1,a.j.c,1);t=C(A,u,-1,a.j.c,1);l=C(hq,ql,-1,a.j.c,2);n=C(hq,ql,-1,a.j.c,2);g=C(hq,ql,-1,a.j.c,2);C(cR,q,8,a.j.c,0);f[0]=b;t[b]=c;t[c]=-2;l[b]=!0;l[c]=!0;for(h=c=0;c<=h;){e=f[c];if(t[e]==e)for(j=0;ja.j.x[b])f[++h]=b,t[b]=b,g[b]=g[e]||2==a.j.k[b],n[b]=g[e]&&!n[e],l[b]=!0;else if(g[e]&&n[e]){o=WQ(a,b,t[e],l);if(-1==o)return null;f[++h]=b;t[b]=o;t[o]=-2;g[b]=!1;l[b]=!0;l[o]=!0}else if(wP(a.j,\nxP(a.j,e,j))&&(f[++h]=b,t[b]=b,g[b]=!1,l[b]=!0,(6==a.j.x[b]&&0==a.j.k[b]||7==a.j.x[b]&&1==a.j.q[b]||14==a.j.x[b]||15==a.j.x[b]&&2this.j.k[f]||2>24)}}\nfunction eR(a,b){var c,d;d=a.k.n[b];c=a.k.k[b];return 0==d?a.b:1==d?c:a.a+c}\nfunction LQ(a){var b,c,d,e;this.k=a;for(c=0;cthis.k.a[f]+(1==h?65536:0))n=this.k.a[f]+(1==h?65536:0),l=g,o=h,e=d[j];for(f=0;fVF(a.a-this.a)+VF(a.b-this.b)+VF(a.c-this.c)};_.tS=function(){var a;a=new hR;return Mf+iR(a.a,this.a)+Ua+iR(a.a,this.b)+Ua+iR(a.a,this.c)+Tf};_.a=0;_.b=0;_.c=0;function PQ(a,b,c,d){this.b=a;this.a=b;this.c=c;this.d=d}w(20,1,{},PQ);_.a=0;_.b=0;_.c=0;_.d=0;\nfunction kP(a){var b,c,d;if(0!=a.k)return a.k;if(a.j&&15!=a.e.x[a.a]&&16!=a.e.x[a.a])for(c=0;cb)return a.k=-1,a.k;a.k=3.141592653589793>b?4:2}else d=zP(a.e,a.a,a.d),d=a.G){var c=2*a.G,d,e,f;a.x=qR(a.x,c);a.q=qR(a.q,c);a.u=qR(a.u,c);f=a.D.length;e=C(rR,q,7,c,0);for(d=0;d=a.H&&(e=2*a.H,a.y[0]=qR(a.y[0],e),a.y[1]=qR(a.y[1],e),a.B=qR(a.B,e),a.z=qR(a.z,e),a.A=qR(a.A,e),a.H=e);a.y[0][a.p]=b;a.y[1][a.p]=c;a.B[a.p]=d;a.z[a.p]=0;a.A[a.p]=0;a.K=0;return a.p++}function uR(a){a.o=0;a.p=0;a.E=!1;a.F=!1;a.C=0;a.t=null;a.r=null;a.I=null;a.K=0}\nfunction EQ(a,b){return null==a.r?null:null==a.r[b]?null:vR(a.r[b],0,a.r[b].length)}function IQ(a,b){return 1!=(a.s[b]&1572864)>>19&&2!=(a.s[b]&1572864)>>19?-1:(a.s[b]&65011712)>>21}function HQ(a,b){return(a.s[b]&1572864)>>19}function vQ(a,b){return null==a.t?null:a.t[b]}function sP(a,b){return a.D[b].a}function tP(a,b){return a.D[b].b}function uP(a,b){return a.D[b].c}function zP(a,b,c){return wR(a.D[b].a,a.D[b].b,a.D[c].a,a.D[c].b)}function W(a,b,c){return a.y[b][c]}\nfunction JQ(a,b){return 1!=(a.z[b]&3072)>>10&&2!=(a.z[b]&3072)>>10?-1:(a.z[b]&126976)>>12}function qP(a,b){switch(a.B[b]&103){case 1:case 64:return 1;case 2:return 2;case 4:return 3;default:return 0}}function xR(a,b){var c;c=a.x[b]=a.x[b])return 0;e=0;32==(a.s[b]&48)&&(e-=1);(16==(a.s[b]&48)||48==(a.s[b]&48))&&(e-=2);d=a.q[b];0==d&&a.E&&(201326592==(a.w[b]&234881024)&&(d=-1),100663296==(a.w[b]&234881024)&&(d=1));7==a.x[b]||8==a.x[b]||9==a.x[b]?e+=d:6==a.x[b]||14==a.x[b]||32==a.x[b]?e-=0>d?-d:d:15==a.x[b]||33==a.x[b]?3>=c-e-d?e+=d:e-=d:16==a.x[b]||34==a.x[b]||52==a.x[b]?4>=c-e-d?e+=d:e-=0>d?-d:d:17==a.x[b]||35==a.x[b]||53==a.x[b]?5>=c-e-d?e+=d:e-=0>d?-d:d:e-=d;return e}\nfunction yR(a,b){var c,d;c=(d=((a.s[b]&-268435456)>>>28)-1,-1==d&&(d=xR(a,b)),d);return c+AQ(a,b,c)}function zR(a){var b;a.K=0;a.x=C(A,u,-1,a.G,1);a.q=C(A,u,-1,a.G,1);a.u=C(A,u,-1,a.G,1);a.D=C(rR,q,7,a.G,0);for(b=0;b>19==b&&(null==d&&(d=C(hq,ql,-1,32,2)),d[1!=(a.s[c]&1572864)>>19&&2!=(a.s[c]&1572864)>>19?-1:(a.s[c]&65011712)>>21]=!0);for(c=0;c>10==b&&(null==d&&(d=C(hq,ql,-1,32,2)),d[1!=(a.z[c]&3072)>>10&&2!=(a.z[c]&3072)>>10?-1:(a.z[c]&126976)>>12]=!0);f=0;if(null!=d){e=C(A,u,-1,32,1);for(c=0;32>c;++c)d[c]&&(e[c]=f++);for(c=0;c>19==b&&(d=e[1!=(a.s[c]&1572864)>>19&&2!=(a.s[c]&1572864)>>\n19?-1:(a.s[c]&65011712)>>21],a.s[c]&=-65011713,a.s[c]|=d<<21);for(c=0;c>10==b&&(d=e[1!=(a.z[c]&3072)>>10&&2!=(a.z[c]&3072)>>10?-1:(a.z[c]&126976)>>12],a.z[c]&=-126977,a.z[c]|=d<<12)}}}function BR(a,b,c){if(-1<=c&&14>=c&&(a.s[b]&=268435455,c!=xR(a,b)&&(a.s[b]|=1+c<<28),6==a.x[b]&&(-1==c||0==c||2==c||4==c)))a.s[b]&=-49,2==c&&(a.s[b]|=16)}function CR(a,b,c){a.q[b]=c;a.K=0}function DR(a,b){a.s[b]&=-449;a.s[b]|=448}\nfunction ER(a,b,c,d){var e;if(0==c)a.s[b]&=-66584577,a.s[b]|=0;else{if(32<=d)return;if(-1==d){e=-1;for(d=0;d>19&&e<(1!=(a.s[d]&1572864)>>19&&2!=(a.s[d]&1572864)>>19?-1:(a.s[d]&65011712)>>21)&&(e=1!=(a.s[d]&1572864)>>19&&2!=(a.s[d]&1572864)>>19?-1:(a.s[d]&65011712)>>21);for(d=0;d>10&&e<(1!=(a.z[d]&3072)>>10&&2!=(a.z[d]&3072)>>10?-1:(a.z[d]&126976)>>12)&&(e=1!=(a.z[d]&3072)>>10&&2!=(a.z[d]&3072)>>10?-1:(a.z[d]&126976)>>12);d=e+1;if(32<=d)return}a.s[b]&=\n-66584577;a.s[b]|=c<<19|d<<21}a.K&=3}\nfunction FR(a,b,c,d){if(null==c)null!=a.t&&(a.t[b]=null);else if(1==c.length&&!d){c=c[0];if(a.x[b]!=c&&(d=0,!((1==c||151==c||152==c)&&1>>28)-1&&0==(a.s[b]&48))){if(151==c||152==c)d=c-149,c=1;a.s[b]&=960;a.x[b]=c;a.v[b]=d;a.q[b]=0;a.w[b]=0;BR(a,b,-1);GR(a,b,0);c=a.u[b];for(d=0;dc?-c:c)&&(a.u[d]=0);a.K=0}null!=a.t&&(a.t[b]=null)}else null==a.t&&(a.t=C(kH,\nil,86,a.G,0)),a.t[b]=c,d&&(a.w[b]|=1),a.K=0,a.E=!0}function HR(a,b,c){a.v[b]=c;a.K&=3}function IR(a,b,c,d){a.s[b]&=-8;a.s[b]|=c;d&&(a.s[b]|=4)}function JR(a,b,c){a.w[b]|=c;a.K=0;a.E=!0}function GR(a,b,c){a.s[b]&=-49;a.s[b]|=c;a.K&=3}function sR(a,b,c){0<=c&&190>=c&&(151==c||152==c?(a.x[b]=1,a.v[b]=c-149):(a.x[b]=c,a.v[b]=0),a.s[b]&=268435455,a.K=0)}\nfunction KR(a,b,c,d){var e;if(0==c)a.z[b]&=-130049,a.z[b]|=0;else{if(32<=d)return;if(-1==d){e=-1;for(d=0;d>19&&e<(1!=(a.s[d]&1572864)>>19&&2!=(a.s[d]&1572864)>>19?-1:(a.s[d]&65011712)>>21)&&(e=1!=(a.s[d]&1572864)>>19&&2!=(a.s[d]&1572864)>>19?-1:(a.s[d]&65011712)>>21);for(d=0;d>10&&e<(1!=(a.z[d]&3072)>>10&&2!=(a.z[d]&3072)>>10?-1:(a.z[d]&126976)>>12)&&(e=1!=(a.z[d]&3072)>>10&&2!=(a.z[d]&3072)>>10?-1:(a.z[d]&126976)>>12);d=e+1;if(32<=d)return}a.z[b]&=\n-130049;a.z[b]|=c<<10|d<<12}a.K&=3}function LR(a,b,c,d){a.z[b]&=-16777224;a.z[b]|=c;d&&(a.z[b]|=4)}function MR(a,b,c){a.A[b]|=c;a.K=0;a.E=!0}function TQ(a,b,c){a.B[b]=c;a.K=0}function NR(a,b){var c;a.E=b;if(!b){a.t=null;for(c=0;cd&&(0>a?b-=3.141592653589793:b+=3.141592653589793)):b=0e;++e)c=a.y[e][d],b=a.f[2*a.o+c],a.j[c][b]=g,a.e[c][b]=a.y[1-e][d],a.i[c][b]=d,++a.f[2*a.o+c],++a.f[a.o+c],++a.f[c],ce;++e)c=a.y[e][d],b=a.f[2*a.o+c],a.j[c][b]=1,a.e[c][b]=a.y[1-e][d],a.i[c][b]=d,++a.f[2*a.o+c],++a.f[a.o+c],a.y[1-e][d]e;++e)c=a.y[e][d],b=a.f[2*a.o+c],a.j[c][b]=0,a.e[c][b]=a.y[1-e][d],a.i[c][b]=d,++a.f[2*a.o+c];for(c=0;c=yR(a,d)&&(a.w[d]&=-6145);c=!1;for(d=0;da.q[d]^0>a.q[f]&&(0>a.q[d]?(++a.q[d],--a.q[f]):(--a.q[d],++a.q[f])));d=C(A,u,-1,a.o,1);for(e=f=0;ea.f[b]||4=0.7853981633974483-f%1.5707963267948966?0-(0.7853981633974483-f%1.5707963267948966):0.7853981633974483-f%1.5707963267948966))return!1;e[h]=3&Uu(f/1.5707963267948966);if(j[e[h]])return!1;j[e[h]]=!0;if(0==(e[h]&1)){if(1!=a.B[a.i[b][c[h]]])return!1}else if(!jR(a,a.i[b][c[h]],b))return!1}return j[0]&&j[2]}\nfunction AP(a,b,c,d,e){var f,g,h;f=a.f[a.o+b];null==e&&(e=C(A,u,-1,f,1));if(!VR(a,b,c,d,e))return 3;d=-1;for(h=0;ha?-a:a)^e[b]d?b:d}\nfunction bQ(a,b){var c,d,e,f;if(a.E&&0==(a.w[b]&2048)||!zQ(a,b))return 0;oQ(a,1);for(d=e=0;d>1}e-=AQ(a,b,e);c=((a.s[b]&-268435456)>>>28)-1;if(-1==c)if(171<=a.x[b]&&190>=a.x[b])c=2;else if(f=a.x[b]c-e?0:c-e}function MP(a,b){return a.f[2*a.o+b]-a.f[a.o+b]}\nfunction yQ(a,b){var c,d;a.ed(1);for(c=d=0;ce;++e)WR(a,a.y[e][b])&&!WR(a,a.y[1-e][b])&&(f[a.y[e][b]]=!0);e=a.o;do--e;while(0<=e&&f[e]);for(b=0;bj;++j)c.y[j][h]==d?c.y[j][h]=g:c.y[j][h]==g&&(c.y[j][h]=d);c.K=0;c=f[b];f[b]=f[e];f[e]=c;do--e;while(f[e])}a.c=e+1;if(a.o==a.c)a.d=a.p;else{e=C(hq,ql,-1,a.p,2);for(b=0;b(a.n&&b(a.n&&c(a.n&&de)for(f=0;f=c||14<=c&&17>=c||32<=c&&35>=c||52<=c&&53>=c)||13==a.x[b]||171<=a.x[b]}w(22,23,Sl);_.ed=function(a){SR(this,a)};_.c=0;_.d=0;_.e=null;_.f=null;_.i=null;_.j=null;_.k=null;_.n=null;\nfunction XR(a,b,c,d,e,f){var g,h;h=1;g=!1;switch(e){case 1:h=17;break;case 3:h=26;break;case 4:h=17;g=!0;break;case 6:h=9;break;default:switch(d){case 1:h=1;break;case 2:h=2;break;case 3:h=4;break;case 4:h=64;break;case 8:a.d&&(h=32)}}c=tR(a.c,b,c,h);e=0;g&&ER(a.c,b,1,-1);if(4F.length?0:gS(gx(F.substr(60,\n3)));a.c.u[d]=P;t=45>F.length?0:gS(gx(F.substr(42,3)));switch(t){case 0:break;case 1:JR(a.c,d,768);break;case 2:JR(a.c,d,128);break;case 3:JR(a.c,d,384);break;default:JR(a.c,d,896)}48<=F.length&&49==F.charCodeAt(47)&&JR(a.c,d,8192);mc=51>F.length?0:gS(gx(F.substr(48,3)));switch(mc){case 0:break;case 15:BR(a.c,d,0);break;default:BR(a.c,d,mc)}}for(z=0;zF.length?0:gS(gx(F.substr(9,\n3)));N=18>F.length?0:gS(gx(F.substr(15,3)));XR(a,e,f,l,Ja,N)}for(z=0;zUb&&JR(a.c,d,4096)}}F=hS(b)}}catch(Ab){Ab=pq(Ab);if(H(Ab,96))return qp(Ab),!1;throw Ab;}oQ(a.c,7);return!0}\nfunction iS(a,b){var c,d,e;a.a&&(e=a.a,e.b=null,e.c=0);a.b&&(e=a.b,e.b=null,e.c=0);e=0;for(d=hS(b);null!=d&&0==d.indexOf(Xe);){for(d=gx(hx(d,7));dK(d,$a);){c=hS(b);if(0!=c.indexOf(Xe))return!1;d=gx($C(d,0,d.length-1)+hx(c,7))}if(0==d.indexOf("BEGIN"))if(e=gx(hx(d,6)),0==e.indexOf("CTAB"))e=1;else if(0==e.indexOf("ATOM"))e=2;else if(0==e.indexOf("BOND"))e=3;else if(0==e.indexOf("COLLECTION"))e=4;else return!1;else if(0==d.indexOf("END"))e=0;else if(1==e){c=a;var f=void 0,g=void 0,f=void 0;!c.c&&0==\nd.indexOf("COUNTS")&&(f=cS(d,ZR(d,7)),g=qD($C(d,7,ZR(d,7)),10),f=qD($C(d,f,ZR(d,f)),10),c.c=new jS(g,f))}else if(2==e){c=a;var h=void 0,j=f=g=g=f=g=void 0,l=void 0,n=h=void 0,o=n=n=j=g=void 0,r=h=f=void 0,t=void 0,l=YR(d,0),g=qD(d.substr(0,l-0),10),j=cS(d,l),l=YR(d,j),n=d.substr(j,l-j),o=null,f=!1,h=dS(d);if(0!=h){var l=d,z=t=r=r=j=o=void 0,v=t=void 0,t=null,j=l.indexOf(Mf),r=l.indexOf(Tf,j);if(0<=j&&0r;)j=v.indexOf(Pa),-1==j?(t=v,z=\n!1):(t=v.substr(0,j-0),v=hx(v,j+1)),o[r++]=OR(t);t=C(A,u,-1,r,1);TP(o,0,t,r)}o=t;0>h&&(f=!0);l=0>h?-h:h}j=cS(d,l);l=YR(d,j);h=kS(d.substr(j,l-j));j=cS(d,l);l=YR(d,j);r=kS(d.substr(j,l-j));j=cS(d,l);l=YR(d,j);t=kS(d.substr(j,l-j));j=cS(d,l);l=YR(d,j);j=qD(d.substr(j,l-j),10);h=oR(c.c,h,-r,-t);h+1!=g&&(!c.a&&(c.a=new lS),mS(c.a,new iB(g),new iB(h)));null!=o&&FR(c.c,h,o,f);0!=j&&(c.c.u[h]=j);J(n,od)?JR(c.c,h,1):J(n,jf)?(g=C(A,u,-1,1,1),g[0]=6,FR(c.c,h,g,!0)):sR(c.c,h,OR(n));for(;-1!=(j=cS(d,l));)if(l=\nYR(d,j),n=d.substr(j,l-j),f=ex(n,fx(61)),g=n.substr(0,f-0),f=qD(hx(n,f+1),10),J(g,"CHG"))CR(c.c,h,f);else if(J(g,"RAD"))switch(f){case 1:GR(c.c,h,16);break;case 2:GR(c.c,h,32);break;case 3:GR(c.c,h,48)}else if(!J(g,GO))if(J(g,"MASS"))HR(c.c,h,f);else if(J(g,"VAL"))BR(c.c,h,-1==f?0:0==f?-1:f);else if(J(g,"HCOUNT"))switch(f){case 0:break;case -1:JR(c.c,h,1792);break;case 1:JR(c.c,h,128);break;case 2:JR(c.c,h,384);break;default:JR(c.c,h,896)}else if(J(g,"SUBST"))if(-1==f)JR(c.c,h,2048);else{if(0n&&JR(c.c,h,4096)}}else if(J(g,"RBCNT"))switch(f){case 3:case -1:JR(c.c,h,112);break;case 1:JR(c.c,h,8);break;case 2:JR(c.c,h,104);break;case 4:JR(c.c,h,56)}}else if(3==e){c=a;t=j=o=z=h=r=t=r=l=g=f=n=f=void 0;h=YR(d,0);g=qD(d.substr(0,h-0),10);r=cS(d,h);h=YR(d,r);l=qD(d.substr(r,h-r),10);r=cS(d,h);h=YR(d,r);f=$R(c,qD(d.substr(r,h-r),10));r=cS(d,h);h=YR(d,r);n=$R(c,qD(d.substr(r,h-r),10));for(j=o=0;-1!=(r=cS(d,h));)if(h=YR(d,r),z=d.substr(r,h-r),\nt=ex(z,fx(61)),r=z.substr(0,t-0),t=qD(hx(z,t+1),10),J(r,GO))switch(t){case 1:o=1;break;case 2:o=2==l?3:4;break;case 3:o=6}else J(r,"TOPO")&&(j=t);f=XR(c,f,n,l,o,j);f+1!=g&&(!c.b&&(c.b=new lS),mS(c.b,new iB(g),new iB(f)))}else if(4==e){if(c=a,g=f=g=n=n=void 0,g=-1!=d.indexOf("ATOMS=(")?FO:-1!=d.indexOf("BONDS=(")?"BONDS":null,null!=g){f=d;n=g;t=r=j=o=h=l=void 0;j=f.indexOf(n+"=(")+n.length+2;r=oD(f,fx(41),j);o=ZR(f,j);l=qD(f.substr(j,o-j),10);t=C(A,u,-1,l,1);for(h=0;hr)&&(o=r),t[h]=qD(f.substr(j,o-j),10);f=t;if(0==d.indexOf(Ye))if(J(g,FO))for(g=0;ge)&&(a.a[b[d]]=e);for(d=0;de)&&(a.b[c[d]]=e)}function sQ(a,b,c){for(a=ww(a.j,b).length;c>=a;)c-=a;for(;0>c;)c+=a;return c}\nfunction UR(a,b){var c,d,e,f,g,h,j,l,n;this.f=a;this.i=new Bm;this.j=new Bm;this.a=C(A,u,-1,this.f.c,1);this.b=C(A,u,-1,this.f.d,1);this.f.ed(1);j=C(hq,ql,-1,this.f.c,2);l=C(hq,ql,-1,this.f.d,2);do{f=!1;for(c=0;cg){j[c]=!0;for(d=0;do[r]&&($=o[r],da=r);$=C(A,u,-1,M,1);Z=o[0--da&&(da=M-1):++da==M&&(da=0);for(r=0;rh)for(c=0;c=t.length)for(n=0;n>>\n16][v[c]&32767]=h,e[h][n]=v[c]>>>16):v[c]=(h<<16)+32768+n);n=C(hq,ql,-1,this.i.c,2);t=0;for(c=-1;t>c;){c=t;for(h=0;hZ;++Z)if((r&ca[Z])==ca[Z]&&\n(6==this.f.x[M[Z]]&&1==this.f.q[M[Z]]||5==this.f.x[M[Z]]&&0==this.f.q[M[Z]]))z[v]=!0,P[v]=Z,0==(o&ca[Z])&&(da=!1);break;case 5:Z=y(A,u,-1,[10,5,18,9,20]);da=!0;for(ca=0;5>ca;++ca)if((r&Z[ca])==Z[ca])switch(this.f.x[M[ca]]){case 6:-1==this.f.q[M[ca]]&&(z[v]=!0,P[v]=ca,0==(o&Z[ca])&&(da=!1));break;case 7:0>=this.f.q[M[ca]]&&(z[v]=!0,P[v]=ca);break;case 8:z[v]=!0;P[v]=ca;break;case 16:2==this.f.f[M[ca]]&&(z[v]=!0,P[v]=ca)}break;case 6:da=!0;21==(r&21)&&(z[v]=!0,0==(o&21)&&(da=!1));42==(r&42)&&(z[v]=\n!0,0==(o&42)&&(da=!1));break;case 7:ca=y(A,u,-1,[42,21,74,37,82,41,84]);da=!0;for(Z=0;7>Z;++Z)if((r&ca[Z])==ca[Z]&&(6==this.f.x[M[Z]]&&1==this.f.q[M[Z]]||5==this.f.x[M[Z]]&&0==this.f.q[M[Z]]))z[v]=!0,P[v]=Z,0==(o&ca[Z])&&(da=!1)}z[v]&&!da&&(F[v]=!0);v=z[v]?!0:!$}v&&(n[h]=!0,++t)}}}if(0!=(b&2))for(d=0;d\ne.c[h[1]]^h[0]e.c[j]&&(n=!n),hl;++l)if(g=W(e.H,l,f),3==e.H.f[g]){h=C(A,u,-1,2,1);for(o=j=0;3>o;++o)hP(e.H,g,o)!=W(e.H,1-l,f)&&(h[j++]=hP(e.H,g,o));e.c[h[0]]>e.c[h[1]]&&(n=!n);h[0]>19&&(l[e]=!0);for(e=0;ea?1:a;this.H=1>b?1:b;zR(this)}w(32,22,Sl,qS,jS);_.ed=function(a){oQ(this,a)};_.a=!1;_.b=null;function rS(){rS=x;sS=new pp}function tS(a){for(var b,a=new uu(a.j.k);a.b=this.b.d.k?(MS(),-1!=oz(this.b.k,this.b.e)||xS(this.b.d,this.b.e),c=new LS(ES,null),this.b.i=this.f+c.a,this.b.j=this.i+c.d,d+=c.a,a+=c.d,FS(this)):Uq(jw)),1==this.d)return;Uq(jw);CS(this,d,a)};_.nd=function(){var a;this.e&&1==this.d&&(a=new LS(ES,null),this.b.i=this.f+a.a,this.b.j=this.i+a.d,FS(this))};\n_.od=function(a){var b,c,d,e;d=a.f;b=d.pb;e=Cs(a,b);b=Ds(a,b);if(1==(a.a.button||0))if(this.e=!1,ES)try{if(MS(),1==this.d)DS(this,a);else{d!=this.a&&(c=new LS(d,null),e+=c.a,b+=c.d);try{CS(this,e,b),this.b.d.hd(),3!=this.d&&DS(this,a)}finally{var f=this.a.pb;kw&&f==kw&&(kw=null);mw();f.releaseCapture();sx(this.a);this.d=1;this.b.e=null}}}finally{ES=null}};_.a=null;_.b=null;_.d=1;_.e=!1;_.f=0;_.i=0;var ES=null;function KS(){}w(47,1,el,KS);_.pd=function(){MS()};\nfunction vS(a,b,c,d){this.a=a;this.b=b;this.c=d;this.d=c}w(48,1,{},vS);_.a=null;_.b=null;_.c=null;_.d=null;w(49,1,{});w(51,49,{});w(50,51,{});_.a=null;w(52,1,{});_.tS=LB;function LS(a,b){!a||a==(tx(),Fz(null))?this.f=this.e=0:(this.e=a.ae()-Yq(a.pb),this.f=a.be()-(a.pb.scrollTop||0));!b||b==(tx(),Fz(null))?this.c=this.b=0:(this.b=Xq(b.pb)+b.pb.clientLeft,this.c=Zq(b.pb)+b.pb.clientTop);this.a=this.e-this.b;this.d=this.f-this.c}w(55,52,{},LS);_.tS=LB;_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;_.f=0;\nfunction MS(){try{$doc.selection.empty()}catch(a){}}function NS(a){return $wnd.setInterval(B(function(){a.ud()}),100)}function OS(a,b,c,d){var e;e=Lq(a);Jq(a,e.substr(0,b-0));a[a.explicitLength++]=null==d?Ii:d;Jq(a,hx(e,c))}function PS(a){var b;b=a.tagName;a=a.scopeName;return null==a||PR("html",a)?b:a+Nc+b}var HS=!1,GS=!1;w(193,1,{88:1,93:1,95:1});_.cT=function(a){return this.b-a.b};function IS(){IS=x;QS=new RS;SS=new TS;US=new VS;WS=new XS;YS=new ZS;$S=y(aT,q,19,[QS,SS,US,WS,YS])}w(192,193,uO);\nvar $S,US,SS,WS,QS,YS;function RS(){this.b=0}w(194,192,uO,RS);function TS(){this.b=1}w(195,192,uO,TS);function VS(){this.b=2}w(196,192,uO,VS);function XS(){this.b=3}w(197,192,uO,XS);function ZS(){this.b=4}w(198,192,uO,ZS);function bT(){bT=x;cT=new As(Hg,new dT)}function dT(){}w(244,241,{},dT);_.Dd=function(a){a.Id(this)};_.Gd=function(){return cT};var cT;function eT(){eT=x;fT=new As(ah,new gT)}function gT(){}w(252,246,cl,gT);\n_.Dd=function(a){var b=a.a,a=!a.a.I.c,c,d;if(a!=b.I.c)if(b.kb){if(a){if(b.O!=(hT(),iT))a=jT(b.pb),c=new kT(Nq(b.pb,Mi),Nq(b.pb,Li)),d=new kT(Nq(b.T.jb.pb,Mi),Nq(b.T.jb.pb,Li)),b.F.b=a.b-(c.b-d.b),b.F.a=a.a-(c.a-d.a);lT(b.I,!0);a=Nq(b.T.jb.pb,Mi);mT(b,new kT(a,nT(b.T.jb).a));b.J&&b.O!=iT&&oT(b.r,b)}else lT(b.I,!1),b.O!=(hT(),iT)?mT(b,new kT(b.F.b,b.F.a)):pT(b,jT(b.r.pb)),b.J&&b.O!=iT&&qT(b.r,b);rT(b.T.jb)}else lT(b.I,!0)};_.Gd=function(){return fT};var fT;function sT(){sT=x;tT=new As(ph,new uT)}\nfunction uT(){}w(258,241,{},uT);_.Dd=function(a){sx(a.a.a)};_.Gd=function(){return tT};var tT;function vT(a){this.a=a}w(280,242,{},vT);_.Dd=function(a){a.Pd(this)};_.Ed=function(){return wT};var wT=_.a=null;function xT(a){this.a=a}w(282,242,{},xT);_.Dd=function(a){a.Rd(this)};_.Ed=function(){return yT};var yT=_.a=null;function zT(a){a=Oq(a,YO);return PR(yj,a)?(AT(),BT):PR(dP,a)?(AT(),CT):(AT(),DT)}function AT(){AT=x;BT=new ET(0);CT=new ET(1);DT=new ET(2);FT=y(GT,q,29,[BT,CT,DT])}\nfunction ET(a){this.b=a}w(295,193,{29:1,88:1,93:1,95:1},ET);var FT,DT,CT,BT;function HT(){HT=x;var a=(Iu(),Iu(),Ju);!a.a&&(a.a=new IT)}\nfunction iR(a,b){var c,d,e,f;if(isNaN(b))return"NaN";(d=0>b||0==b&&0>1/b)&&(b=-b);c=new Ov;if(!isFinite(b))return oO(c,d?a.r:a.u),sp(c.a,"\\u221e"),oO(c,d?a.s:a.v),Mq(c.a);e=b*=a.q;var g,h;f=Mq(c.a).length;oO(c,e.toPrecision(20));e=0;h=oD(Mq(c.a),aP,f);0>h&&(h=oD(Mq(c.a),IO,f));0<=h&&(g=h+1,ga.p&&0h&&(h+=a.k),a.b=h+1,a.e-=h):(a.e+=a.b-a.p,a.b=a.p);1==a.d&&48==Mq(c.a).charCodeAt(0)&&(a.e=0,a.b=a.p)}if(a.b>a.d)for(;a.da.p){g=a.b-a.p;for(h=0;ha.b+a.j&&53<=GJ(Mq(c.a),a.b+a.j)&&(h=a.b+a.j-1,JT(a,c,h));if(0a.d&&(h=a.d);h>f&&48==GJ(Mq(c.a),h-1);)--h;ha.e&&(a.e=\n-a.e,sp(c.a,$a));e=m+a.e;for(f=e.length;ff&&++j;break;case 48:if(0f&&++j;break;case 44:j=0;break;case 46:if(0<=f)throw new Km(\'Multiple decimal separators in pattern "\'+b+la);f=g+o+h;break;case 69:if(!d){if(a.w)throw new Km(\'Multiple exponential symbols in pattern "\'+b+la);a.w=!0;a.n=0}for(;r+1g+o||1>a.n)throw new Km(\'Malformed exponential pattern "\'+b+la);n=!1;break;default:--r,n=!1}0==o&&0f&&0g+o)||0==j)throw new Km(\'Malformed pattern "\'+b+la);if(d)return r-c;b=g+o+h;a.j=0<=f?b-f:0;0<=f&&(a.o=g+o-f,0>a.o&&(a.o=0));a.p=(0<=f?f:b)-g;a.w&&(a.k=g+a.p,0==a.j&&0==a.p&&(a.p=1));a.f=0>19;d=b.h>>19;if(c!=d)return d-c;c=a.h;d=b.h;if(c!=d)return c-d;c=a.m;d=b.m;return c!=d?c-d:a.l-b.l}function BQ(a,b){return ev(a.l|b.l,a.m|b.m,a.h|b.h)}function NT(a,b,c){var d,e,f,g,h;if(a)for(g=0,h=c.length;g=a.a&&(a.c=0);return b}\nfunction YT(a){HK(a.d.b,a.b);--a.a;a.b<=a.c&&0>--a.c&&(a.c=0);a.b=-1}function XT(a){this.d=a}w(336,1,{},XT);_.Vd=function(){return this.c<\/BUTTON>");this.pb[Kg]="gwt-Button";this.pb.innerHTML=a||m}w(375,376,{26:1,28:1,36:1,38:1,41:1,44:1,48:1,50:1},jU);\nfunction kU(a,b){var c;if(a.f)throw new px("Composite.initWidget() may only be called once.");sx(b);c=b.pb;a.pb=c;var d;hw();try{d=!!c&&!!c.__gwt_resolve}catch(e){d=!1}d&&((hw(),c).__gwt_resolve=lU(a));a.f=b;vx(b,a)}function mU(a){if(-1!=a.lb){var b=a.f,c=a.lb;if(-1==b.lb){var d=b.pb,b=c|(b.pb.__eventBits||0);mw();Xw(d,b)}else b.lb|=c;a.lb=-1}a.f.ne();a.pb.__listener=a;a.pe()}w(379,362,wO);_.me=function(){return this.f?this.f.me():!1};_.ne=function(){mU(this)};_.Yd=function(a){qx(this,a);this.f.Yd(a)};\n_.oe=function(){this.f.oe()};_.ge=function(){return this.pb=this.f.ge()};_.f=null;function nU(a,b,c){a.c=!1;c?a.a.innerHTML=b||m:a.a.innerText=b||m;if(a.d!=a.b)switch(a.d=a.b,b=a.a,a.b.b){case 0:b[YO]=yj;break;case 1:b[YO]=dP;break;case 2:zT(b)!=(AT(),DT)&&(b[YO]=m)}}function oU(a){this.a=a;this.c=!1;this.d=this.b=zT(a)}w(380,1,{},oU);_.a=null;_.b=null;_.c=!1;_.d=null;w(382,367,rl);_.Kd=sK;_.Ld=Sv;_.Md=iJ;_.Nd=EK;\nfunction pU(a,b,c,d){b=a.d.a.c.rows[b].cells[c];var e,c=Rq(b);e=null;c&&(c=eU(c),e=0>c?null:ww(a.i.b,c));e?qU(a,e):d&&(b.innerHTML=m||m);return b}function qU(a,b){var c;if(b.ob!=a)return!1;try{vx(b,null)}finally{c=b.pb;Sq(c).removeChild(c);var d=a.i,e;e=eU(c);c[UO]=null;ZB(d.b,e,null);d.a=new fU(e,d.a)}return!0}w(384,361,rl);_.ue=function(){return new rU(this)};_.re=function(a){return qU(this,a)};_.c=null;_.d=null;_.e=null;_.f=null;\nfunction sU(a){if(0>=a.b)throw new EJ("Row index: 0, Row size: "+a.b);if(0>=a.a)throw new EJ("Column index: 0, Column size: "+a.a);}\nfunction tU(){this.i=new dU;this.f=Tq(Tj);this.c=Tq(Wj);gw(this.f,this.c);this.pb=this.f;this.d=new uU(this);var a=new vU(this);this.e&&(a.a=this.e.a);a=this.e=a;if(!a.a){a.a=Tq("colgroup");var b=a.a;Ww(a.b.f,(hw(),iw(b)),0);gw(a.a,Tq(XO))}var c,d;if(1!=this.a){if(1=d||0>a)throw new EJ("Row index: "+a+", Row size: "+d);if(0>c)throw new EJ("Column "+c+" must be non-negative: "+c);if(this.a<=c)throw new EJ("Column index: "+\nc+", Column size: "+this.a);c=pU(this,a,b,!1);d=this.c.rows[a];d.removeChild(c)}else for(a=0;ab;++b)c=this.c.rows[a],d=Tq(Xj),d.innerHTML=AO||m,Ww(c,(hw(),iw(d)),b);this.a=1;a=this.e;b=1;b=1b)for(;c>b;--c)a.a.removeChild(a.a.lastChild)}if(1!=this.b)if(1>this.b){a=this.c;b=1-this.b;d=this.a;var e=$doc.createElement(Xj);e.innerHTML=AO;c=$doc.createElement(lk);for(var f=0;f=this.d.c)throw new Ix;a=ww(this.d,this.b);this.a=this.b;BU(this);return a};\n_.Xd=function(){var a;if(0>this.a)throw new gA;a=ww(this.d,this.a);sx(a);this.a=-1};_.a=-1;_.b=-1;_.c=null;function uU(a){this.a=a}w(389,1,{},uU);_.a=null;function vU(a){this.b=a}w(390,1,{},vU);_.a=null;_.b=null;function xU(){xU=x;yU=new CU}var yU;function CU(){}w(392,1,{},CU);w(396,362,jl);_.Kd=sK;_.Ld=Sv;_.Md=iJ;_.Nd=EK;function DU(a){this.a=a}w(402,401,Vl,DU);_.Hd=function(){};function lU(a){return function(){this.__gwt_resolve=EU;return a.ge()}}\nfunction EU(){throw"A PotentialElement cannot be resolved twice.";}function FU(a,b){if(0>b||b>=a.c)throw new Fx;return a.a[b]}function GU(a,b,c){hA();iA.call(this,(bw(),new aw(a)),b,0,c,16)}w(439,371,{},GU);function HU(a,b,c,d){0==--a.Oc&&(a.$c!=a.We()&&(d|=4),!a.Zc&&(d|=2),0a.Fc.a.c)throw new Km("Missing message: awt.12A");if(H(b,60)){if(b==a)throw new Km("Missing message: awt.12B");var e;a:{if(a&&!H(a,71))for(e=a.Sc;e;){if(e==b){e=!0;break a}if(H(e,71))break;e=e.Sc}e=!1}if(e)throw new Km("Missing message: awt.12C");if(H(b,71))throw new Km("Missing message: awt.12D");}if(b.Sc){e=b.Sc;if(!b)throw new aD;try{d=oz(e.Fc.a,b);var f;f=ww(e.Fc.a,d);e.Gc&&e.Gc.of(f);RU(e,d);new SU(e,301,f)}catch(g){if(g=pq(g),!H(g,89))throw g;}}d=a.Fc.a.c;KU(b);\npC(a.Fc.a,d,b);d=(b.Sc=a,b.Xe(!0),uA(a),!!a.Gc&&H(a.Gc,65)&&(a.Gc.n=!1),HU(b,b,a,1),d);try{if(a.Gc)if(H(a.Gc,65)){if(!b)throw new ju("Missing message: awt.185");if(null==c||null!=c)TU(a.Gc,c,b);else throw new Km("Missing message: awt.92");}else a.Gc.kf(null==c?null:c,b)}catch(h){h=pq(h);if(H(h,98))throw b=h,RU(a,d),b;throw h;}b.df();new SU(a,300,b)}function PU(a,b){var c;for(c=a.Fc.a.c-1;0<=c;--c)ww(a.Fc.a,c).Xe(b)}\nfunction RU(a,b){var c;c=ww(a.Fc.a,b);KU(c);c.Xe(!1);HK(a.Fc.a,b);c.Sc=null;uA(a);a.Gc&&H(a.Gc,65)&&(a.Gc.n=!1);HU(c,c,a,1)}function UU(a){var b=(aC(),bC);NU(a,b);for(b=0;b=a.b||0>=a.a){var b,c;for(c=0;5>c;++c)(b=this.o[c])&&b.ff(a.c,a.d,0,0)}else{var d,e;b=a.c;e=a.d;this.o[1]&&(this.o[1].ef(a.b,this.i[1].a),this.o[1].gf(a.c,a.d,a.b,this.i[1].a,2,!0),e+=this.i[1].a+this.j);c=a.a-this.i[1].a-this.i[2].a-this.k;c=0a.e&&\nJq(e.a,FV(a.a,a.e,c-a.e-1)),a.e=c+1):(c>a.e&&Jq(e.a,FV(a.a,a.e,c-a.e-1)),a.e=c),Mq(e.a);0==d?Jq(e.a,FV(a.a,a.e,a.b-a.e)):Jq(e.a,FV(a.a,a.e,a.b-a.e-1))}}function GV(a){if(!a)throw new aD;this.c=a;this.a=C(XJ,xl,-1,8192,1)}w(521,522,{},GV);_.a=null;_.b=0;_.c=null;_.d=-1;_.e=0;function EV(a){this.f=a}w(523,137,{81:1,88:1,96:1,105:1},EV);\nfunction DV(a,b,c,d){if(null==a.c)throw new EV("luni.D6");if(0>c||c>b.length)throw new HV(IV("luni.12",y(GK,q,0,[m+c])));if(0>d||d>b.length-c)throw new HV(IV("luni.18",y(GK,q,0,[m+d])));if(0==d)return 0;if(a.b==a.a)return-1;var d=a.b+d>a.a?a.a:a.b+d,e=a.c,f;for(f=a.b;fa.a?1:0};function kS(a){a=RJ(a);return 3.4028234663852886E38a?-Infinity:a}w(592,591,{88:1,93:1,97:1,101:1});_.cT=VJ;w(594,591,{88:1,93:1,99:1,101:1});_.cT=VJ;\nfunction wQ(a,b){return ac)throw new EJ(KO);}f=C(XJ,xl,-1,f,1);for(h=g=j=0;hb||0>e||0>d||b+d>l||e+d>f)throw new Fx;if((0==(h.b&1)||0!=(h.b&4))&&j!=g)if(Tu(a)===Tu(c)&&be;)fq(c,d,a[--b])}else for(d=e+d;ed-c){a=c;for(g=a+1;ga&&0>1),NV(b,a,h,j,-e,f),NV(b,a,j,g,-e,f),0>=f.dd(a[j-1],a[j]))for(;c=g||e=f.dd(a[e],a[h])?fq(b,c++,a[e++]):fq(b,c++,a[h++])}}function cQ(a){a.sort(function(a,c){return a-c})}function EP(){EP=x;FP=new OV}var FP;function OV(){}w(629,1,{},OV);_.dd=function(a,b){return a.cT(b)};\nw(630,1,{88:1,92:1,93:1,106:1});_.cT=function(a){a=zv(L(this.a.getTime()),L(a.a.getTime()));return Bv(a,Gk)?0:!rv(a,Gk)?-1:1};function aV(a,b){var c,d;(0>b||b>a.b)&&zK(b,a.b);if(b>=a.b>>1){d=a.a;for(c=a.b;c>b;--c)d=d.b}else{d=a.a.a;for(c=0;cc?d=d.a[0]:d=d.a[1]}return null}\nfunction WV(a,b,c,d){var e;if(b){e=VV(b.c,c.c);if(0==e)return d.d=b.d,d.b=!0,b.d=c.d,b;e=0d?1:0,0==d&&(!c.c||Cp(l.d,c.d))&&(f=l),(!l||!l.b)&&!XV(l.a[e]))if(XV(l.a[1-e]))n=n.a[j]=YV(l,e);else if(!XV(l.a[1-e])&&(o=n.a[1-j]))!XV(o.a[1-j])&&!XV(o.a[j])?(n.b=!1,o.b=!0,l.b=!0):(d=g.a[1]==n?1:0,XV(o.a[j])?g.a[d]=(n.a[1-j]=YV(n.a[1-j],1-j),YV(n,j)):XV(o.a[1-j])&&(g.a[d]=YV(n,j)),l.b=g.a[d].b=!0,g.a[d].a[0].b=!1,g.a[d].a[1].b=!1);if(f){c.b=\n!0;c.d=f.d;if(l!=f){b=new ZV(l.c,l.d);e=f;j=h;for(g=null==j.c||0VV(d.c,e))&&b.qh(d),d.a[1]&&dW(a,b,c,d.a[1],e,f))}function eW(a){uK(a.a);aW(a.c,a.b.th())}\nfunction fW(a){var b=(gW(),hW),c;this.c=a;c=new Bm;dW(this,c,b,a.b,null,null);this.a=new uu(c)}w(642,1,{},fW);_.Vd=Pt;_.Wd=function(){return this.b=vu(this.a)};_.Xd=function(){eW(this)};_.a=null;_.b=null;_.c=null;function cW(a){this.a=a}w(643,611,Dl,cW);_.rh=function(a){var b;if(!H(a,109))return!1;b=UV(this.a,a.th());return!!b&&tD(b.d,a.uh())};_.ue=function(){return new fW(this.a)};_.sh=function(a){var b;if(!H(a,109))return!1;b=new $V;b.c=!0;b.d=a.uh();return bW(this.a,a.th(),b)};_.Pf=function(){return this.a.c};\n_.a=null;function ZV(a,b){this.c=a;this.d=b;this.a=C(iW,q,112,2,0);this.b=!0}w(644,1,{109:1,112:1},ZV);_.eQ=function(a){return!H(a,109)?!1:tD(this.c,a.th())&&tD(this.d,a.uh())};_.th=KA;_.uh=function(){return this.d};_.hC=function(){var a,b;a=null!=this.c?Fp(this.c):0;b=null!=this.d?Fp(this.d):0;return a^b};_.vh=function(a){var b;b=this.d;this.d=a;return b};_.tS=function(){return this.c+ad+this.d};_.a=null;_.b=!1;_.c=null;_.d=null;function $V(){}w(645,1,{},$V);\n_.tS=function(){return"State: mv="+this.c+" value="+this.d+" done="+this.a+" found="+this.b};_.a=!1;_.b=!1;_.c=!1;_.d=null;function gW(){gW=x;hW=new jW(0);kW=new lW;mW=new nW;oW=new pW;qW=y(rW,q,113,[hW,kW,mW,oW])}function jW(a){this.b=a}w(646,193,sO,jW);_.Dh=xx;_.Eh=xx;var qW,hW,kW,mW,oW;function lW(){this.b=1}w(647,646,sO,lW);_.Eh=jx;function nW(){this.b=2}w(648,646,sO,nW);_.Dh=jx;_.Eh=jx;function pW(){this.b=3}w(649,646,sO,pW);_.Dh=jx;function sW(a){a.Tc.We()&&jV(a)}\nfunction tW(a){var b;if(a.Tc.We()){b=rA(a);var c=a.j,d=b.b;c.a=b.a;c.b=d}lV(a)}function uW(a,b,c){a.a+=b;a.b+=c;a.a=0>a.a?0:a.a;a.b=0>a.b?0:a.b}function vW(){qV.call(this,m);this.i=new hV(this.Fh());lB(this.r,new wW(this))}w(655,478,vO);_.Ie=function(a,b){return Tu(a.f)===Tu(this.i)?(tW(this),!0):this.Gh(a,b)};_.Fh=function(){return"Close"};_.Gh=wx;_.Be=function(){tW(this)};_.i=null;_.j=null;function wW(a){this.a=a}w(671,516,yO,wW);_.zf=function(){tW(this.a)};_.a=null;\nfunction xW(a,b){var c;lt();var d;vW.call(this);this.c=new hV("Help");new hV("Home");this.d=b;MU(this,(kE(),mE));this.Tc&&this.Tc.Gf(!1);nV(this,!1);d=rA(b);if(1==a)this.e||(this.e=new AV(d),uW(this.e,-30,0)),this.j=this.e,c=zE(b),this.q=tf,this.Tc&&this.Tc.Hf(tf),RA(this,new dV(2)),this.f=new BC(c+" "),QU(this,this.f,Zd),d=new WA,QU(d,this.i,null),this.d.gc&&(c=new hV("Submit"),QU(d,c,null)),QU(this,d,iO),BV(this.f,gx(Oq(this.f.Tc.a.pb,sk))),this.Tc&&this.Tc.Gf(!0),nV(this,!0);else if(2==a)this.b||\n(this.b=new AV(d),uW(this.b,-50,13*Uu(b.mb)-80)),this.j=this.b,this.q=OO,this.Tc&&this.Tc.Hf(OO),RA(this,new dV(2)),c=new WA,QU(c,new yV("atomic SMILES",1),null),QU(this,c,jO),c=Ee,mt&&(c=Oq(mt.Tc.a.pb,sk)),mt=new CC(c,8),QU(this,mt,Zd),c=new WA,QU(c,this.i,null),QU(this,c,iO);else{this.a||(this.a=new AV(d),uW(this.a,5*Uu(b.mb),0));var e,f;this.q=d="About "+(kE(),vI);this.Tc&&this.Tc.Hf(d);RA(this,new vV(0));MU(this,mE);QU(this,new yV(vI+" Molecular Editor v2017-02-26",1),null);QU(this,new yV("Peter Ertl and Bruno Bienfait",\n1),null);for(c=lE,d=0,f=c.length;dc.p.c)throw new Fx;d=My(c);Ww(c.b,(hw(),iw(d)),0);Ex(c,a,d,0,!1)}else Ly(b.b,a);QW(b.f,null);mx(this.I.b,new FX(this),(eT(),eT(),fT));mx(this.I.b,this.o,Hs);NW(this,this.I);$w(Sq(Rq(this.pb)),"mosaic-WindowPanel",!0)}w(755,756,rO);_.ze=function(){return 0!=this.I.a.p.c?PW(FU(this.I.a.p,0)):null};_.Ce=function(a){ZW(this,a)};_.ue=function(){return new iU(this.I.a)};_.pe=function(){IW(this);JS(new GX(this))};\n_.re=function(a){return RW(this.I.a,a)};_.Uh=function(a){mT(this,a)};_.De=function(a,b){eX(this,a,b)};_.Ae=function(a){YW(this,a)};_.Ee=function(){pX(this)};_.n=null;_.p=0;_.q=0;_.r=null;_.s=null;_.t=null;_.u=null;_.v=null;_.w=!0;_.x=null;_.y=null;_.C=!1;_.D=null;_.E=null;_.G=null;_.H=null;_.I=null;_.J=!1;_.K=null;_.L=null;_.M=null;_.N=null;_.P=null;var WW;\nfunction rV(a,b){dN();VA.call(this);this.c=new HX(a);this.b=new Oy;this.b.a=(zy(),Ay);Ly(this.b,this.d);XW(this.c,this.b);this.c.a=this;this.a=b}w(784,753,{},rV);_.Ef=KA;_.Kh=function(){return this.b.ob};_.Se=function(){return Xq(this.c.pb)};_.Te=function(){return Zq(this.c.pb)};_.Be=function(){ZW(this.c,!1)};_.We=function(){return this.c.hb};_.Oh=Qv;_.Ff=function(a){eX(this.c,a.a,a.b)};_.Gf=function(a){gX(this.c,a)};_.Hf=function(a){IX(this.c.I.b,a)};\n_.Qh=function(a){EW(this,a);FW(this,a);LW(this.c);pX(this.c)};_.a=null;_.b=null;_.c=null;function HX(a){SW();qX.call(this,(JX(),KX),a,!1)}w(786,755,rO,HX);_.Be=function(){var a=this.a,b=new kV(a.a,201),c;a=a.a.r;a.a?a=new LX(new uu(a.a)):(a=(Du(),Du(),Eu),a=new uu(a));for(;a.Vd();)switch(c=a.Wd(),b.k){case 205:c.xf(b);break;case 202:c.yf(b);break;case 201:c.zf(b);break;case 206:c.Af(b);break;case 204:c.Bf(b);break;case 203:c.Cf(b);break;case 200:c.Df(b)}};_.a=null;\nfunction LX(a){if(!a)throw new aD;this.a=a}w(796,1,{},LX);_.Vd=Pt;_.Wd=function(){return vu(this.a)};_.Xd=function(){throw new vD("Missing message: awt.50");};_.a=null;function VU(){return VU()}\nfunction IV(a,b){var c,d,e,f,g;c=new lD;d=C(Yu,q,1,b.length,0);for(f=0;f":d[f]=Dp(b[f])?b[f].tS():Hp(b[f]);g=0;for(f=oD(a,fx(123),0);0<=f;f=oD(a,fx(123),g))0!=f&&92==a.charCodeAt(f-1)?(1!=f&&oO(c,a.substr(g,f-1-g)),Jq(c.a,Dk),g=f+1):f>a.length-3?(oO(c,$C(a,g,a.length)),g=a.length):(e=HJ(a.charCodeAt(f+1),10)<<24>>24,0>e||125!=a.charCodeAt(f+2)?(oO(c,a.substr(g,f+1-g)),g=f+1):(oO(c,a.substr(g,f-g)),e>=d.length?sp(c.a,""):sp(c.a,d[e]),g=f+3));g<\na.length&&oO(c,$C(a,g,a.length));return Mq(c.a)}function fX(a){var b;b=C(A,u,-1,4,1);a.style[Ck]=ec;b[0]=MX(NX(a,"borderTopWidth"));b[1]=MX(NX(a,"borderRightWidth"));b[2]=MX(NX(a,"borderBottomWidth"));b[3]=MX(NX(a,"borderLeftWidth"));return b}function OX(a){var b,c;c=PX(a);b=fX(a);a=(a.style[Ck]=ec,new kT(a.clientWidth,a.clientHeight));a.b+=b[1]+b[3]+(c[1]+c[3]);a.a+=b[0]+b[2]+(c[0]+c[2]);return a}function jT(a){a.style[Ck]=ec;return new kT(a.clientWidth,a.clientHeight)}\nfunction PX(a){var b;b=C(A,u,-1,4,1);a.style[Ck]=ec;b[0]=MX(NX(a,"marginTop"));b[1]=MX(NX(a,"marginRight"));b[2]=MX(NX(a,hi));b[3]=MX(NX(a,"marginLeft"));return b}function QX(a){var b;b=C(A,u,-1,4,1);a.style[Ck]=ec;b[0]=MX(NX(a,"paddingTop"));b[1]=MX(NX(a,"paddingRight"));b[2]=MX(NX(a,"paddingBottom"));b[3]=MX(NX(a,"paddingLeft"));return b}\nfunction RX(a,b,c){try{switch(b){case eP:a.style.filter=VO+100*c+La;(!a.currentStyle||!a.currentStyle.hasLayout)&&(a.style.zoom=1);break;case cP:b=fP;default:a.style[b]=c}}catch(d){if(d=pq(d),H(d,96))PS(a);else throw d;}}function MW(a,b){var c;SX||(SX=Tq(Nj),RX(SX,Xh,m),RX(SX,ek,m),RX(SX,Zi,bg),RX(SX,uk,Ih),$doc.body.appendChild(SX));RX(SX,zk,a);RX(SX,Hh,a);c=OX(SX);return b?c.b:c.a}var SX=null;function TX(){kT.call(this,0,0)}function kT(a,b){this.b=a;this.a=b}\nfunction mX(a){kT.call(this,a.b,a.a)}w(802,1,Sl,TX,kT,mX);_.eQ=function(a){return this===a?!0:null==a||UX!=Bp(a)||this.a!=a.a||this.b!=a.b?!1:!0};_.hC=LA;_.tS=function(){return"Dimension [height="+this.a+", width="+this.b+Tf};_.a=0;_.b=0;function VX(a){this.d=a[0];this.b=a[3];this.a=a[2];this.c=a[1]}w(803,1,{88:1,92:1,121:1},VX);_.eQ=function(a){return a===this?!0:H(a,121)?a.b==this.b&&a.a==this.a&&a.c==this.c&&a.d==this.d:!1};\n_.hC=function(){var a;a=213+this.d;a=71*a+this.b;a=71*a+this.a;return a=71*a+this.c};_.tS=function(){return WX.d+"[left="+this.b+",top="+this.d+",right="+this.c+",bottom="+this.a+Tf};_.a=0;_.b=0;_.c=0;_.d=0;function XX(a,b){this.a=a;this.b=b}w(804,1,Sl,XX);_.eQ=function(a){return this===a?!0:null==a||YX!=Bp(a)||this.a!=a.a||this.b!=a.b?!1:!0};_.hC=LA;_.tS=function(){return YX.d+"[x="+this.a+",y="+this.b+Tf};_.a=0;_.b=0;function xX(){this.b=this.a=this.d=this.c=0}w(805,1,Sl,xX);\n_.eQ=function(a){return this===a?!0:null==a||ZX!=Bp(a)||this.a!=a.a||this.b!=a.b||this.c!=a.c||this.d!=a.d?!1:!0};_.hC=function(){var a;a=31+this.a;a=31*a+this.b;a=31*a+this.c;return a=31*a+this.d};_.tS=function(){return ZX.d+"[x="+this.c+",y="+this.d+",width="+this.b+",height="+this.a+Tf};_.a=0;_.b=0;_.c=0;_.d=0;\nfunction NX(a,b){var c;if(document.documentElement.currentStyle)switch(b){case eP:c=100;try{c=a.filters["DXImageTransform.Microsoft.Alpha"].opacity}catch(d){try{c=a.filters("alpha").opacity}catch(e){}}return c/100;case cP:b=fP;default:c=(c=a.currentStyle?a.currentStyle[b]:null)||a.style[b]||null}else c=a.style[b]||null;return null==c?null:m+c}w(808,1,{});var $X=-1;function aY(){}w(809,808,{},aY);_.a=-1;_.b=-1;var bY=null;function MX(a){a=parseInt(a,10);a=isNaN(a)?null:uG(a);return!a?0:a.a}\nw(812,379,xO);_.Rh=function(){return nT(this.f)};_.Sh=function(a){QW(this.f,a)};_.Th=sy;_.He=sy;_.he=function(a){var b=this.f;b.pb.style[Hh]=a;b.kb||(b.f=a)};_.je=function(a){var b=this.f;b.pb.style[zk]=a;b.kb||(b.i=a)};function TW(){TW=x;UW()}function IX(a,b){a.a.pb.innerText=b||m;QW(a.f,null)}\nfunction cY(a){TW();var b;kU(this,new sX);this.a=new dY;b=this.f;eY(b,new fY);RX(b.pb,Wi,dc);b.o=0;DX(b,this.a,new EX(0),b.p.c);this.a.ee()[Kg]="mosaic-Caption-text";this.a.pb.innerText=a||m;QW(this.f,null);this.pb[Kg]="mosaic-Caption"}w(811,812,xO,cY);_.Kd=sK;_.Ld=Sv;_.Md=iJ;_.Nd=EK;_.b=null;\nfunction UW(){UW=x;gY=rq()+"40BAF81124143A595056A9CCA0E9DBBA.cache.png";new GU(gY,240,20);new GU(gY,224,16);new GU(gY,208,16);new GU(gY,192,16);new GU(gY,176,16);new GU(gY,160,16);new GU(gY,144,16);new GU(gY,128,16);new GU(gY,112,16);new GU(gY,96,16);new GU(gY,80,16);new GU(gY,64,16);new GU(gY,260,16);VW=new GU(gY,48,16);new GU(gY,32,16);new GU(gY,16,16);new GU(gY,0,16)}var gY,VW;function hY(a,b){ix(a.a.pb,!b);QW(a.f,a.a)}\nfunction lT(a,b){a.c=b;ix(a.a.pb,!b);QW(a.f,a.a);if(a.d){var c;for(c=new uu(a.d);c.b(f>h?f:h)?e:f>h?f:h,c=d>(c>g?c:g)?d:c>g?c:g,0<=f&&(b.pb.style[zk]=f+bj),0<=c&&(b.pb.style[Hh]=c+bj),a.b=e,a.a=d}function EY(){}w(847,846,{},EY);_.a=-1;_.b=-1;function RY(a,b){var c,d,e;if(a.k)return!0;a.x.mg();for(c=new iU(b);c.a.aE?0:E,l=s,f=n,H(z,130)&&(l-=b.b,f-=b.a),this.b==kY?(r.s=this.a==(qZ(),rZ)?t:this.a==tZ?t+~~(F/2)-~~(s/2):t+F-s,r.t=E,r.u=l,r.r=f,E+=n+v):(this.a==(qZ(),rZ)?(r.s=t,r.t=E):this.a==tZ?(r.s=t,r.t=E+~~(o/2)-~~(n/2)):(r.s=t,r.t=E+o-n),r.u=\nl,r.r=f,t+=s+v),a.a&&(z=d.ae()-Xq(a.pb)-YY(this.s,a),-1==r.o&&(r.o=z),z=d.be()-Zq(a.pb)-YY(this.u,a),-1==r.p&&(r.p=z),z=d.de(),-1==r.q&&(r.q=z),d=d.ce(),-1==r.n&&(r.n=d));SY(this,a)}};_.a=null;_.b=null;function qZ(){qZ=x;rZ=new uZ(0);tZ=new uZ(1);vZ=new uZ(2);wZ=y(xZ,q,125,[rZ,tZ,vZ])}function uZ(a){this.b=a}w(866,193,{88:1,93:1,95:1,125:1},uZ);var wZ,tZ,vZ,rZ;function jY(){jY=x;pZ=new yZ(0);kY=new yZ(1);zZ=y(AZ,q,126,[pZ,kY])}function yZ(a){this.b=a}w(867,193,{88:1,93:1,95:1,126:1},yZ);\nvar zZ,pZ,kY;w(869,1,{131:1});_.e=!1;_.f=0;_.i=0;_.j=null;_.k=null;_.n=0;_.o=0;_.p=0;_.q=0;_.r=0;_.s=0;_.t=0;_.u=0;_.v=0;_.w=0;function oZ(){this.e=!1}function EX(a){this.e=!1;0==a?this.c=this.d=!0:1==a?this.d=!0:2==a&&(this.c=!0)}w(868,869,{127:1,131:1},oZ,EX);_.a=0;_.b=0;_.c=!1;_.d=!1;function BZ(a,b){if(a.k)return!0;RY(a,b);if(0b?0:b)+(Cr(),bj)));0<=c&&(c-=d[0]+d[2],a.he((0>c?0:c)+(Cr(),bj)))}function pT(a,b){lX(a,b.b,b.a)}var OZ=QJ(" S");U(471);U(478);U(655);U(691);U(516);U(671);U(466);var PZ=OJ(192,function(){IS();return $S}),aT=KJ(910,PZ);OJ(194,null);OJ(195,null);OJ(196,null);OJ(197,null);OJ(198,null);\nvar QZ=OJ(295,function(){AT();return FT}),GT=KJ(919,QZ);U(486);var wV=U(481);U(464);U(465);PJ();PJ();PJ();U(511);U(23);U(22);U(32);var lR=KJ(925,OZ),nR=KJ(926,hK),RZ=U(18),rR=KJ(927,RZ);U(26);U(749);U(510);U(522);U(521);U(526);U(387);U(386);U(584);U(523);U(517);var gV=U(463),fV=KJ(930,QB);U(756);U(755);U(786);U(753);U(784);var SZ=OJ(845,function(){hT();return PY}),QY=KJ(931,SZ);U(844);U(843);U(835);U(836);U(837);U(838);U(839);U(840);U(841);U(842);U(816);U(743);U(745);U(7);\nvar TZ=U(12),tQ=KJ(932,TZ),gQ=KJ(933,kH),yP=KJ(934,XE),UZ=U(9),$P=KJ(935,UZ),VZ=U(11),XP=KJ(936,VZ);U(21);U(13);U(8);U(10);U(640);U(642);U(643);var WZ=U(644),iW=KJ(937,WZ);U(645);var XZ=OJ(646,function(){gW();return qW}),rW=KJ(938,XZ);OJ(647,null);OJ(648,null);OJ(649,null);U(641);U(623);U(633);U(634);U(635);U(376);U(375);U(380);U(27);U(31);U(14);var YZ=U(null),cR=KJ(945,YZ);U(16);var fR=KJ(946,hq);U(20);U(17);U(15);U(379);U(818);U(44);U(821);U(822);U(820);U(819);U(812);U(811);U(873);U(874);U(875);\nU(876);U(814);U(282);U(608);U(607);U(244);var UX=U(802),YX=U(804);U(280);U(830);U(829);U(297);U(369);U(872);U(333);U(336);U(334);U(335);U(46);U(48);U(47);U(402);U(330);var IY=KJ(948,QN);U(331);U(629);U(831);U(796);U(298);var ZX=U(805);U(815);U(834);U(869);U(868);U(252);U(45);U(848);U(865);var ZZ=OJ(866,function(){qZ();return wZ}),xZ=KJ(949,ZZ),$Z=OJ(867,function(){jY();return zZ}),AZ=KJ(950,$Z);U(851);U(860);U(859);U(863);U(862);U(858);U(857);U(855);U(856);U(854);U(853);U(850);U(852);U(861);U(864);\nU(849);U(817);U(870);U(384);U(383);U(389);U(390);U(388);U(332);U(352);U(353);U(52);U(55);U(871);U(49);U(51);U(50);U(877);U(878);U(823);U(826);U(827);U(828);U(824);U(825);var WX=U(803);U(846);U(847);U(808);U(809);U(258);B(qO)(9);function Sv(a){return mx(this,a,(st(),st(),tt))}function tI(){}function sy(){rT(this.f)}function Qv(){}function sK(a){return mx(this,a,(pt(),pt(),qt))}function iJ(a){return mx(this,a,(vt(),vt(),wt))}function Yl(){rT(this)}\nfunction LA(){var a;a=31+this.a;return a=31*a+this.b}function WJ(){}function MA(){return Xq(this.pb)}function Ms(a){BW(this,a)}function jx(){return!0}function KA(){return this.c}function Tv(){rT(this.T.jb)}function EK(a){return mx(this,a,(Ct(),Ct(),Dt))}function wx(){return!1}function mK(){return!oA(this)?new xA(0,0):IA(this.Tc,this)}function sI(){return Zq(this.pb)}function DC(){return null}function LB(){return Ka+this.a+Ua+this.d+La}function Pt(){return xK(this.a)}\nfunction VJ(a){return this.aa.a?1:0}function uD(){var a,b,c,d,e,f;if(this.e){a=jT(this.pb);for(c=0,d=this.e.a.c;ca.b?a.b:-1,b.a=b.a>a.a?a.a:-1,lX(f,b.b,b.a),f.O==(hT(),iT)&&pT(f,new mX(jT(this.pb))),wm(f.z,1)}}function xx(){return!1}function WB(){return this.a}\nfunction NA(){var a,b;b=this.a;a=this.b;var c,d,e;for(d=new uu(b.x);d.bh;++h)if(g=c.e[f][h],g!=b&&1==c.k[g]){e=f;break}break}c=e;-1!=c&&(b=c,d=W0(a,c))}if(-1==d)return a.r[b];switch(d&255){case 1:return 384;case 2:return 64;default:return 448}}\nfunction W0(a,b){var c,d,e;d=e=-1;if(0!=(a.B&128))return-1;0!=(a.G.s[b]&134217728)&&(e=aS(a.G,b),d=bS(a.G,b));c=GR(a.G,b);-1!=c&&(e=(a.G.z[c]&3072)>>10,d=cS(a.G,c));-1!=e&&0!=e&&(e|=d<<8);return e}function X0(a,b){var c;if(0==CQ(a.G,b))return!1;for(c=0;cg&&(o=!0),2.617993878g&&(g=0.523598776),g<=f&&(f=g,g=a.M*Math.tan(g-1.5707963267948966)/2,e.a=-(g*Math.sin(h)),e.b=-(g*Math.cos(h)))):(3.141592653589793<=g&&(o=!0),3.665191429>g&&(g=3.665191429),5.759586531<\ng&&(g=5.759586531),g>=f&&(f=g,g=a.M*Math.tan(4.712388981-g)/2,e.a=-(g*Math.sin(h)),e.b=-(g*Math.cos(h)))));return o}function a1(a,b,c,d){0==b?(0>c?d.a=a.M:d.a=-a.M,d.b=0):(c=Math.atan(c/b),0>b&&(c+=3.141592653589793),d.a=-(a.M*Math.sin(c)),d.b=a.M*Math.cos(c))}\nfunction b1(a,b,c,d){var e,f,g,h,j,l,o,m;e=new K0;h=new K0;l=new c1;j=new c1;f=Y(a.G,0,c);g=Y(a.G,1,c);d&&(o=b.a,b.a=b.b,b.b=o,o=b.c,b.c=b.d,b.d=o,o=f,f=g,g=o);if(P0(a,b))if(QQ(a.G,c)){e.a=b.a;e.c=b.c;e.b=b.b;e.d=b.d;d=d?-d1(a,c):d1(a,c);0==d&&(d=1);a1(a,b.b-b.a,b.d-b.c,l);if(0\',Dm(a.b,r));h=null;0!=a.G.q[b]&&(r=1==qH(a.G.q[b])?n:n+qH(a.G.q[b]),h=0>a.G.q[b]?r+rb:r+jb);g=null;r=a.G.w[b];0!=r&&(0!=(r&2)&&(g=eg),0!=(r&4)&&(g=null==g?C0:g+",!a"),0!=(r&4096)&&(g=null==g?Fj:g+",s"),0!=(r&1920)&&(e=r&1920,1792==e?g=null==g?"h0":g+",h0":1664==e?g=null==g?"h1":g+",h1":\n1408==e?g=null==g?"h2":g+",h2":128==e?g=null==g?"h>0":g+",h>0":384==e?g=null==g?"h>1":g+",h>1":1024==e?g=null==g?"h<3":g+",h<3":1536==e&&(g=null==g?"h<2":g+",h<2")),0!=(r&234881024)&&(e=r&234881024,167772160==e?g=null==g?"c0":g+",c0":100663296==e?g=null==g?"c+":g+",c+":201326592==e&&(g=null==g?"c-":g+",c-")),0!=(r&114688)&&(e=r&114688,98304==e?g=null==g?"pi0":g+",pi0":81920==e?g=null==g?"pi1":g+",pi1":49152==e?g=null==g?"pi2":g+",pi2":16384==e&&(g=null==g?"pi>0":g+",pi>0")),0!=(r&4063232)&&(e=r&4063232,\n3801088==e?g=null==g?"n1":g+",n1":3538944==e?g=null==g?"n2":g+",n2":3014656==e?g=null==g?"n3":g+",n3":3145728==e?g=null==g?"n<3":g+",n<3":2097152==e?g=null==g?"n<4":g+",n<4":393216==e?g=null==g?"n>1":g+",n>1":917504==e?g=null==g?"n>2":g+",n>2":1966080==e&&(g=null==g?"n>3":g+",n>3")),0!=(r&120)&&(e=r&120,112==e?g=null==g?Mg:g+",c":8==e?g=null==g?G0:g+",r":104==e?g=null==g?"rb2":g+",rb2":88==e?g=null==g?"rb3":g+",rb3":56==e&&(g=null==g?"rb4":g+",rb4")),0!=(r&29360128)&&(g=null==g?"rs"+((r&29360128)>>\n22):g+",rs"+((r&29360128)>>22)),0!=(r&268435456)&&(g=null==g?"sp2":g+",sp2"));0!=a.G.v[b]&&(g=null==g?n+a.G.v[b]:g+kb+(n+a.G.v[b]));r=0;if(0!=(a.G.s[b]&48))switch(a.G.s[b]&48){case 16:h=null==h?Jk:h+",|";break;case 32:r=1;break;case 48:r=2}e=null;if(0==(a.B&64))if(0!=(a.G.s[b]&67108864))e=Gd;else if(0!=(a.G.s[b]&98304)>>15)if(2==a.G.f[b])switch((a.G.s[b]&98304)>>15){case 2:e=0!=(a.G.s[b]&4)?hj:yf;break;case 1:e=0!=(a.G.s[b]&4)?ni:F0;break;default:e=ib}else switch((a.G.s[b]&98304)>>15){case 1:e=0!=\n(a.G.s[b]&4)?G0:Ef;break;case 2:e=0!=(a.G.s[b]&4)?Fj:Hf;break;default:e=ib}0!=(a.B&1792)&&(e=null==e?n+(null==a.G.b.d?-1:a.G.b.d[b]):e+kb+(n+(null==a.G.b.d?-1:a.G.b.d[b])));o=null;0!=(a.B&16)&&0!=qH(a.G.u[b])&&(o=n+qH(a.G.u[b]));l=null;a:{j=a.G;IR(j,1);if(2==j.f[b]&&2==j.j[b][0]&&2==j.j[b][1])for(d=0;2>d;++d)for(c=0;c>8))));j=0;a.G.E?((6!=a.G.x[b]||!a.s[b])&&0!=(a.G.w[b]&2048)&&0!=a.G.q[b]||0!=(a.G.s[b]&48))&&(j=vR(a.G,b)):(6!=a.G.x[b]||!a.s[b]||0!=(a.G.s[b]&48))&&(j=vR(a.G,b));c=YR(a.G,b);if(null!=c)j=0;else if(null!=PR(a.G,b)){d=0!=(a.G.w[b]&1)?"[!":Wf;c=a.G;if(null==c.t||null==c.t[b])c=0!=(c.w[b]&1)?n:ES[c.x[b]];else{t=n;for(m=0;mc;++c)if(2!=a.G.j[b][c]){c=!1;break a}c=!0}c&&(c=T0(a.K,MQ(a.G,b)),f=U0(a.K,NQ(a.G,b)),Dm(a.T,new k1(c-a.O,f-a.O,2*a.O,2*a.O)),a.F||Dm(a.N,new l1(c,f,X0(a,b)?-3:a.r[b])))}null!=h&&(m1(a,~~((2*a.Q+1)/3)),f=T0(a.K,MQ(a.G,b))+\n((d+i1(a,h))/2+1),c=U0(a.K,NQ(a.G,b))-~~((4*a.o-4)/8),j1(a,f,c,h,!0),m1(a,a.Q));0!=(a.B&2)&&(g=n+b);null!=g&&(m1(a,~~((2*a.Q+1)/3)),f=T0(a.K,MQ(a.G,b))-(d+i1(a,g))/2,c=U0(a.K,NQ(a.G,b))-~~((4*a.o-4)/8),j1(a,f,c,g,!0),m1(a,a.Q));null!=e&&(m1(a,~~((2*a.Q+1)/3)),f=T0(a.K,MQ(a.G,b))-(d+i1(a,e))/2,c=U0(a.K,NQ(a.G,b))+~~((4*a.o+4)/8),m=a.z,M0(a,448),j1(a,f,c,e,!1),M0(a,m),m1(a,a.Q));null!=o&&(m1(a,~~((2*a.Q+1)/3)),f=T0(a.K,MQ(a.G,b))+((d+i1(a,o))/2+1),c=U0(a.K,NQ(a.G,b))+~~((4*a.o+4)/8),m=a.z,M0(a,0>a.G.u[b]?\n384:448),j1(a,f,c,o,!0),M0(a,m),m1(a,a.Q));if(null!=l){var y,v;c=D(rG,nl,-1,CQ(a.G,b),1);for(f=0;fm;++m)Y(a.G,m,f)==b&&(t=TQ(a.G,\nY(a.G,m,f),Y(a.G,1-m,f)),-1.5707963267948966>t?(l[0]-=t+1.5707963267948966,l[3]+=t+3.141592653589793):0>t?(l[2]+=t+1.5707963267948966,l[3]-=t):1.5707963267948966>t?(l[1]+=t,l[2]+=1.5707963267948966-t):(l[0]+=t-1.5707963267948966,l[1]+=3.141592653589793-t))}0==a.G.f[b]?jT(a.G.x[b])?l[3]-=0.2:l[1]-=0.2:l[1]-=0.1;(null!=h||null!=o)&&(l[1]+=10);(null!=g||null!=e)&&(l[3]+=10);e=n;0!=j&&(f=i1(a,Pe),o=0,-1==j?(e=Mi,m1(a,~~((2*a.Q+1)/3)),o=i1(a,e)):1l[1]||0.6>\nl[3]?(h=U0(a.K,NQ(a.G,b)),l[1]<=l[3]?(l[1]+=10,g=T0(a.K,MQ(a.G,b))+(d+f)/2):(l[3]+=10,g=T0(a.K,MQ(a.G,b))-(d+f)/2-o)):(g=T0(a.K,MQ(a.G,b)),l[0]c;++c)h=1g&&(e=c,g=l[h]);switch(e){case 0:g=T0(a.K,MQ(a.G,b));h=U0(a.K,NQ(a.G,b))-a.O-d/2;break;case 1:g=T0(a.K,MQ(a.G,b))+\na.O+d/2;h=U0(a.K,NQ(a.G,b));break;case 2:g=T0(a.K,MQ(a.G,b));h=U0(a.K,NQ(a.G,b))+a.O+d/2;break;default:g=T0(a.K,MQ(a.G,b))-a.O-d/2,h=U0(a.K,NQ(a.G,b))}if(1==r)Dm(a.T,new k1(g-a.O,h-a.O,2*a.O,2*a.O)),a.F||Dm(a.N,new l1(g,h,X0(a,b)?-3:a.r[b]));else{switch(e){case 2:case 0:r=2*a.O;e=0;g-=a.O;break;case 1:r=0;e=2*a.O;h-=a.O;break;default:r=0,e=2*a.O,h-=a.O}Dm(a.T,new k1(g-a.O,h-a.O,2*a.O,2*a.O));a.F||Dm(a.N,new l1(g,h,X0(a,b)?-3:a.r[b]));Dm(a.T,new k1(g+r-a.O,h+e-a.O,2*a.O,2*a.O));a.F||Dm(a.N,new l1(g+\nr,h+e,X0(a,b)?-3:a.r[b]))}}}-8==a.z&&M0(a,-9)}\nfunction p1(a,b){var c,d,e,f,g,h,j,l,o,m,r,t;o=new K0;c=new K0;f=new K0;j=new c1;h=new c1;d=Y(a.G,0,b);e=Y(a.G,1,b);var y=U0(a.K,NQ(a.G,d)),v=T0(a.K,MQ(a.G,e)),s=U0(a.K,NQ(a.G,e)),y=\'\';Dm(a.c,y);!$R(a.G,d)&&!$R(a.G,e)&&0!=((a.G.w[d]|a.G.w[e])&536870912)&&M0(a,-8);a.q[d]?(o.a=a.q[d].a,o.c=a.q[d].b):(o.a=T0(a.K,\nMQ(a.G,d)),o.c=U0(a.K,NQ(a.G,d)));a.q[e]?(o.b=a.q[e].a,o.d=a.q[e].b):(o.b=T0(a.K,MQ(a.G,e)),o.d=U0(a.K,NQ(a.G,e)));if(0!=(a.G.A[b]&16320))P0(a,o)&&(g=n+dw(100*o.a)/100,l=n+dw(100*o.b)/100,m=n+dw(100*o.c)/100,r=n+dw(100*o.d)/100,t=\'d;d+=2)c.a=o.a+d*h/17-d*j/128,c.c=o.c+d*j/17+d*h/128,c.b=o.a+d*h/17+d*j/128,c.d=o.c+d*j/17-d*h/128,P0(a,c)&&(M0(a,9>d?e:f),N0(a,c),M0(a,a.J));break;case 32:if(P0(a,o)){f=o.b-o.a;j=o.d-o.c;c=Math.sqrt(f*f+j*j);c=2*P(J(Q(c/(4*a.R))));f/=c-1;j/=c-1;L0(a.G,sS(a.G,d,e))?e=d=-3:(d=a.r[d],e=a.r[e]);h=o.a-a.R/2;o=o.c-a.R/2;M0(a,d);for(d=0;d<~~(c/2);++d)s1(a,h,o,a.R),h+=f,o+=j;M0(a,e);for(d=0;d<~~(c/2);++d)s1(a,h,\no,a.R),h+=f,o+=j;M0(a,a.J)}}break;case 0:case 2:if((a.t[d]||2==a.G.k[d])&&(a.t[e]||2==a.G.k[e])&&!QQ(a.G,b)&&2==g){if(!P0(a,o))break;a1(a,o.b-o.a,o.d-o.c,j);h=j.a/2;j=j.b/2;c.a=o.a+h;c.c=o.c+j;c.b=o.b+h;c.d=o.d+j;f.a=o.a-h;f.c=o.c-j;f.b=o.b-h;f.d=o.d-j;26==a.G.B[b]&&e1(c,f);O0(a,c,d,e);O0(a,f,d,e)}else if((a.t[e]||2==a.G.k[e])&&2==g)b1(a,o,b,!1);else if((a.t[d]||2==a.G.k[d])&&2==g)b1(a,o,b,!0);else{l=d1(a,b);0==l&&(l=1);c.a=o.a;c.c=o.c;c.b=o.b;c.d=o.d;a1(a,o.b-o.a,o.d-o.c,j);if(0c?a-=2*Math.cos(c+0.5235987755982988):a-=0.5*Math.cos(c+0.5235987755982988);return a}function v1(a){var b;b=new S0;a.a<=a.b?(b.c=a.a,b.b=a.b-a.a):(b.c=a.b,b.b=a.a-a.b);a.c<=a.d?(b.d=a.c,b.a=a.d-a.c):(b.d=a.d,b.a=a.c-a.d);return b}function n1(a,b){var c;if(0f.c+f.b||e.d>f.d+f.a||f.c>e.c+e.b||f.d>e.d+e.a)){if(w1(a,g.a,g.c,b)){if(w1(a,g.b,g.d,b))return;x1(a,g,0,b);r1(a,g,c,d);return}if(w1(a,g.b,g.d,b)){x1(a,g,1,b);r1(a,g,c,d);return}}var h,j,l;j=(g.c-g.d)/9;l=(g.b-g.a)/9;b=D(rG,nl,-1,3,1);e=D(rG,nl,-1,3,1);f=D(rG,nl,-1,4,1);h=D(rG,nl,-1,4,1);b[0]=g.a;e[0]=g.c;f[2]=g.b+j;h[2]=g.d+l;f[3]=g.b-j;h[3]=g.d-l;b[1]=\n(b[0]+f[2])/2;e[1]=(e[0]+h[2])/2;b[2]=(b[0]+f[3])/2;e[2]=(e[0]+h[3])/2;f[0]=b[2];h[0]=e[2];f[1]=b[1];h[1]=e[1];L0(a.G,sS(a.G,c,d))?g=d=-3:(d=a.r[c],g=V0(a,c),d==(a.G.s[c]&448)&&(d=g));M0(a,d);a.bd(b,e,3);M0(a,g);a.bd(f,h,4);M0(a,a.J)}}function w1(a,b,c,d){if(0!=(a.B&1))return!1;a=Dx(a.T,d);return b>a.c&&ba.d&&ch;++h){e=Y(a.G,h,b);for(o=0;of[0]?(f[1]=f[0]+3.141592653589793,e=!1):(f[1]=f[0],f[0]=f[1]-3.141592653589793,e=!0);for(h=g=0;hf[0]&&c[h]=e.b||0>=e.a?e=!1:(g=e.c,j=e.d,h=g+e.b,l=j+e.a,e=g<=c&&cb.b&&(u1(b),c=!0);for(d=0;df.c+f.b||e.d>f.d+f.a||f.c>e.c+e.b||f.d>e.d+e.a)){if(w1(a,b.a,b.c,d)){if(w1(a,b.b,b.d,d))return c&&u1(b),!1;x1(a,b,0,d);d=P0(a,b);c&&u1(b);return d}if(w1(a,b.b,b.d,d))return x1(a,b,1,d),d=P0(a,\nb),c&&u1(b),d}c&&u1(b);return!0}function x1(a,b,c,d){var e,f,g,h,j,l;0==c?(j=b.a,l=b.c,g=b.b,f=b.d):(j=b.b,l=b.d,g=b.a,f=b.c);d=Dx(a.T,d);a=g>j?d.c+d.b:d.c;h=f>l?d.d+d.a:d.d;d=g-j;e=f-l;(0>=d?0-d:d)>(0>=e?0-e:e)?l==f?(f=a,g=l):(f=j+d*(h-l)/e,g>j==a>f?g=h:(f=a,g=l+e*(a-j)/d)):j==g?(f=j,g=h):(g=l+e*(a-j)/d,f>l==h>g?f=a:(f=j+d*(h-l)/e,g=h));0==c?(b.a=f,b.c=g):(b.b=f,b.d=g)}\nfunction y1(a,b,c,d){c/=2;switch(d&786432){case 786432:if(b){a.x.a=b.c+b.b/2;a.x.b=b.d+b.a-c;break}case 0:a.x.a=a.w.c+a.w.b/2;a.x.b=a.w.d+a.w.a+c;b&&a.x.b>b.d+b.a-c&&(a.x.b=b.d+b.a-c);break;case 524288:if(b){a.x.a=b.c+b.b/2;a.x.b=b.d+c;break}case 262144:a.x.a=a.w.c+a.w.b/2,a.x.b=a.w.d-c,b&&a.x.bT0(a.K,MQ(a.G,b))&&(e=T0(a.K,MQ(a.G,b))),cU0(a.K,NQ(a.G,b))&&(f=U0(a.K,NQ(a.G,b))),de;++e){c=Y(a.d,e,b);for(f=0;fe;++e){d=Y(a.d,e,c);b=!1;for(g=0;gb)return d;g=1.7976931348623157E308;for(c=1;c=c||11<=c&&13>=c||19<=c&&31>=c||37<=c&&51>=c||55<=c&&84>=c||87<=c&&103>=c}function M1(a,b,c){c?a.s[b]|=262144:a.s[b]&=-262145}function N1(a,b,c){a.D[b].a=c;a.K&=3}function O1(a,b,c){a.D[b].b=c;a.K&=3}function P1(a,b,c){a.D[b].c=c;a.K&=3}function Q1(a,b){var c;for(c=a-b;-3.141592653589793>c;)c+=6.283185307179586;for(;3.141592653589793c.f[c.e[d][0]]||2>c.f[c.e[d][1]]||1!=c.k[c.e[d][0]]||1!=c.k[c.e[d][1]])bT(c,d,0,!1);else{l=t=f=e=-1;for(h=o=0;2>h;++h){g=c.e[d][h];for(r=0;rh;++h)for(r=0;rj&&(g=j);t=D(B,q,-1,2,1);for(h=o=0;ht[1]&&(h=t[0],t[0]=t[1],t[1]=h),h=Q1(j,TQ(c,l,t[0])),l=Q1(j,TQ(c,l,t[1])),l=h-l):l=Q1(j,TQ(c,l,t[0]));0>l^1==(c.s[d]&\n3)^g==f?c.B[e]=17:c.B[e]=9}}}else if(3>c.f[d]||4j)a:{for(var j=c,g=d,s=m=t=m=y=y=o=v=y=o=h=void 0,r=y=r=void 0,h=j.f[j.o+g],o=D(rG,nl,-1,h,1),t=0;tr||3.061592653589793f[2]-f[1]||f[1]>f[2]&&3.141592653589793<\nf[1]-f[2];break;case 1:e=3.141592653589793f[1]-f[0]}f=1==(c.s[d]&3)^e?17:9}else e=0,f[1]<=f[2]&&f[2]<=f[3]?e=0:f[1]<=f[3]&&f[3]<=f[2]?e=1:f[2]<=f[1]&&f[1]<=f[3]?e=2:f[2]<=f[3]&&f[3]<=f[1]?e=3:f[3]<=f[1]&&f[1]<=f[2]?e=4:f[3]<=f[2]&&f[2]<=f[1]&&(e=5),f=1==(c.s[d]&3)^1==l[e][g]?9:17;c.B[j]=f}}}for(b=0;bg;++g){j=d.y[g][c];for(r=0;r<\nd.f[d.o+j];++r)m=d.i[j][r],m!=c&&1==KQ(d,m)&&(t=d.e[j][r],y=R1(d,m,t),og;++g)for(r=0;rt&&(j=t);t=D(B,q,-1,2,1);for(g=o=0;gt[1]&&(h=t[0],t[0]=t[1],t[1]=h),h=Q1(g,TQ(d,\nl,t[0])),l=Q1(g,TQ(d,l,t[1])),l=h-l):l=Q1(g,TQ(d,l,t[0]));0>l^2==(d.z[c]&3)^j==f?d.B[e]=17:d.B[e]=9}}}function Z(a,b){var c,d;c=b;for(d=0;0!=b;)0==a.c&&(a.e=(a.a[++a.d]&63)<<11,a.c=6),d|=(65536&a.e)>>16-c+b,a.e<<=1,--b,--a.c;return d}function U1(a,b,c){a.c=6;a.d=c;a.a=b;a.e=(b[a.d]&63)<<11}function V1(a,b){var c,d;c=~~(b/2);(d=a>=c)&&(a-=c);c=~~(b/32)*a/(c-a);return d?-c:c}function W1(){this.b=!0}w(24,1,{},W1);_.a=null;_.b=!1;_.c=0;_.d=0;_.e=0;_.f=null;\nfunction X1(a,b){var c,d;c=b;var e,f;9.0E-4>(0>=c?0-c:c)&&(c=0);c=P(J(Q(c*Math.pow(10,4))))/Math.pow(10,4);d=n+(new nL(c)).a;e=my(d,ny(46));0>e&&(d+=lc,e=my(d,ny(46)));f=d.length;for(c=1;c<=4-f+e+1;++c)d+=Fc;10c;++c)zE(a.a,32);HP(a.a,d)}function Y1(a,b){var c,d,e;if(0>b||999d;++d)e=~~(b/100),0==e?2==d||c?zE(a.a,48):zE(a.a,32):(zE(a.a,48+e&65535),c=!0),b=10*(b%100)}}\nfunction Z1(a){var b=new yE,c,d,e,f,g,h,j,l;IR(a,7);f=!0;for(c=0;c>19){f=!1;break}l=-1;if(f){d=D(B,q,-1,32,1);for(c=0;c>19){c=1!=(a.s[c]&1572864)>>19&&2!=(a.s[c]&1572864)>>19?-1:(a.s[c]&65011712)>>21;++d[c];0c||3g&&(e=g);d=3/e}for(c=0;c>>28)-1,-1==e?HP(this.a,z0):0==e?HP(this.a," 15"):Y1(this,e),HP(this.a,ka),Y1(this,qH(a.u[c])),HP(this.a," 0 0\\n");for(c=0;cf?(HP(this.a," -"),f=-f):HP(this.a,v0),zE(this.a,48+f&65535));HP(this.a,ea)}for(c=f=0;c\';q1(a,b)}\nfunction i1(a,b){var c;c=$J();if(-1c)return!a.i&&(a.i=(ju(),new CB(a.f))),c=LD(a.i,b),11<=a.f.b&&(c*=1.5714285714285714),c;var d=a.f;c=b;var e=$1;e||($1=e=$doc.createElement("canvas"));d=n+d.b+pj+d.a;e=e.getContext("2d");e.font=d;c=e.measureText(c);return(new k1(0,0,c.width,0)).b}function m1(a,b){a.o!=b&&(a.o=b,a.f=new oD(Ue,0,b))}\nfunction a2(a){var b,c,d;d=\'\\n\';b="

\' +\n \'
\' + summary + \'<\/div>\' +\n \'
\' + details + \'<\/div>\' +\n \'<\/div>\' +\n \'
<\/div>\'\n ;\n topDoc.body.appendChild(outer);\n var glass = outer.firstChild;\n var glassStyle = glass.style;\n\n // Scroll to the top and remove scrollbars.\n topWin.scrollTo(0, 0);\n if (topDoc.compatMode == "BackCompat") {\n topDoc.body.style["overflow"] = "hidden";\n } else {\n topDoc.documentElement.style["overflow"] = "hidden";\n }\n\n // Steal focus.\n glass.focus();\n\n if ((navigator.userAgent.indexOf("MSIE") >= 0) && (topDoc.compatMode == "BackCompat")) {\n // IE quirks mode doesn\'t support right/bottom, but does support this.\n glassStyle.width = "125%";\n glassStyle.height = "100%";\n } else if (navigator.userAgent.indexOf("MSIE 6") >= 0) {\n // IE6 doesn\'t have a real standards mode, so we have to use hacks.\n glassStyle.width = "125%"; // Get past scroll bar area.\n // Nasty CSS; onresize would be better but the outer window won\'t let us add a listener IE.\n glassStyle.setExpression("height", "document.documentElement.clientHeight");\n }\n\n $doc.title = summary + " [" + $doc.title + "]";\n}\n\n\n/******************************************************************************\n * Other functions called by the Plugin\n *****************************************************************************/\nfunction __gwt_makeResult(isException, result) {\n return [isException, result];\n}\n\n//should be prefixed with "__gwt_"\nfunction fireOnModuleLoadStart(className) {\n $sendStats("moduleStartup", "onModuleLoadStart");\n}\n\n\n/******************************************************************************\n * Helper functions for the Development Mode startup code. Listed alphabetically\n *****************************************************************************/\nfunction disconnectPlugin() {\n try {\n // wrap in try/catch since plugins are not required to supply this\n plugin.disconnect();\n } catch (e) {\n }\n}\n\nfunction doBrowserSpecificFixes() {\n var ua = navigator.userAgent.toLowerCase();\n if (ua.indexOf("gecko") != -1) {\n // install eval wrapper on FF to avoid EvalError problem\n var __eval = window.eval;\n window.eval = function(s) {\n return __eval(s);\n }\n }\n if (ua.indexOf("chrome") != -1) {\n // work around __gwt_ObjectId appearing in JS objects\n var hop = window.Object.prototype.hasOwnProperty;\n window.Object.prototype.hasOwnProperty = function(prop) {\n return prop != "__gwt_ObjectId" && hop.call(this, prop);\n };\n var hop2 = window.Object.prototype.propertyIsEnumerable;\n window.Object.prototype.propertyIsEnumerable = function(prop) {\n return prop != "__gwt_ObjectId" && hop2.call(this, prop);\n };\n // do the same in the main window if it is different from our window\n if ($wnd != window) {\n var hop3 = $wnd.Object.prototype.hasOwnProperty;\n $wnd.Object.prototype.hasOwnProperty = function(prop) {\n return prop != "__gwt_ObjectId" && hop3.call(this, prop);\n };\n var hop4 = $wnd.Object.prototype.propertyIsEnumerable;\n $wnd.Object.prototype.propertyIsEnumerable = function(prop) {\n return prop != "__gwt_ObjectId" && hop4.call(this, prop);\n };\n }\n }\n}\n\nfunction embedPlugin() {\n var embed = document.createElement(\'embed\');\n embed.id = \'pluginEmbed\';\n embed.type = \'application/x-gwt-hosted-mode\';\n embed.width = \'10\';\n embed.height = \'20\';\n\n var obj = document.createElement(\'object\');\n obj.id = \'pluginObject\';\n obj.classid = \'clsid:1D6156B6-002B-49E7-B5CA-C138FB843B4E\';\n\n document.body.appendChild(embed);\n document.body.appendChild(obj);\n}\n\nfunction findPluginObject() {\n try {\n return document.getElementById(\'pluginObject\');\n } catch (e) {\n return null;\n }\n}\n\nfunction findPluginEmbed() {\n try {\n return document.getElementById(\'pluginEmbed\')\n } catch (e) {\n return null;\n }\n}\n\nfunction findPluginXPCOM() {\n try {\n return __gwt_HostedModePlugin;\n } catch (e) {\n return null;\n }\n}\n\nfunction getCodeServer() {\n var server = "localhost:9997";\n var query = $wnd.location.search;\n var idx = query.indexOf("gwt.codesvr=");\n if (idx >= 0) {\n idx += 12; // "gwt.codesvr=".length == 12\n } else {\n idx = query.indexOf("gwt.codesvr.jsme=");\n idx += (13 + "jsme".length); // \n }\n if (idx >= 0) {\n var amp = query.indexOf("&", idx);\n if (amp >= 0) {\n server = query.substring(idx, amp);\n } else {\n server = query.substring(idx);\n }\n // According to RFC 3986, some of this component\'s characters (e.g., \':\')\n // are reserved and *may* be escaped.\n return decodeURIComponent(server);\n }\n}\n\nfunction generateSessionId() {\n var ASCII_EXCLAMATION = 33;\n var ASCII_TILDE = 126;\n var chars = [];\n for (var i = 0; i < 16; ++i) {\n chars.push(Math.floor(ASCII_EXCLAMATION\n + Math.random() * (ASCII_TILDE - ASCII_EXCLAMATION + 1)));\n }\n return String.fromCharCode.apply(null, chars);\n}\n\nfunction loadIframe(url) {\n var topDoc = window.top.document;\n\n // create an iframe\n var iframeDiv = topDoc.createElement("div");\n iframeDiv.innerHTML = "