diff --git a/.gitattributes b/.gitattributes index a6344aac8c09253b3b630fb776ae94478aa0275b..b6eb0ebea174c9fb7d59d6095b53a0cfdb1a9469 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,35 +1,48 @@ *.7z filter=lfs diff=lfs merge=lfs -text *.arrow filter=lfs diff=lfs merge=lfs -text *.bin filter=lfs diff=lfs merge=lfs -text +*.bin.* filter=lfs diff=lfs merge=lfs -text *.bz2 filter=lfs diff=lfs merge=lfs -text -*.ckpt filter=lfs diff=lfs merge=lfs -text *.ftz filter=lfs diff=lfs merge=lfs -text *.gz filter=lfs diff=lfs merge=lfs -text *.h5 filter=lfs diff=lfs merge=lfs -text *.joblib filter=lfs diff=lfs merge=lfs -text *.lfs.* filter=lfs diff=lfs merge=lfs -text -*.mlmodel filter=lfs diff=lfs merge=lfs -text *.model filter=lfs diff=lfs merge=lfs -text *.msgpack filter=lfs diff=lfs merge=lfs -text -*.npy filter=lfs diff=lfs merge=lfs -text -*.npz filter=lfs diff=lfs merge=lfs -text *.onnx filter=lfs diff=lfs merge=lfs -text *.ot filter=lfs diff=lfs merge=lfs -text *.parquet filter=lfs diff=lfs merge=lfs -text *.pb filter=lfs diff=lfs merge=lfs -text -*.pickle filter=lfs diff=lfs merge=lfs -text -*.pkl filter=lfs diff=lfs merge=lfs -text *.pt filter=lfs diff=lfs merge=lfs -text *.pth filter=lfs diff=lfs merge=lfs -text *.rar filter=lfs diff=lfs merge=lfs -text -*.safetensors filter=lfs diff=lfs merge=lfs -text saved_model/**/* filter=lfs diff=lfs merge=lfs -text *.tar.* filter=lfs diff=lfs merge=lfs -text -*.tar filter=lfs diff=lfs merge=lfs -text *.tflite filter=lfs diff=lfs merge=lfs -text *.tgz filter=lfs diff=lfs merge=lfs -text -*.wasm filter=lfs diff=lfs merge=lfs -text *.xz filter=lfs diff=lfs merge=lfs -text *.zip filter=lfs diff=lfs merge=lfs -text +*.zstandard filter=lfs diff=lfs merge=lfs -text +*.tfevents* filter=lfs diff=lfs merge=lfs -text +*.db* filter=lfs diff=lfs merge=lfs -text +*.ark* filter=lfs diff=lfs merge=lfs -text +**/*ckpt*data* filter=lfs diff=lfs merge=lfs -text +**/*ckpt*.meta filter=lfs diff=lfs merge=lfs -text +**/*ckpt*.index filter=lfs diff=lfs merge=lfs -text +*.safetensors filter=lfs diff=lfs merge=lfs -text +*.ckpt filter=lfs diff=lfs merge=lfs -text +*.gguf* filter=lfs diff=lfs merge=lfs -text +*.ggml filter=lfs diff=lfs merge=lfs -text +*.llamafile* filter=lfs diff=lfs merge=lfs -text +*.pt2 filter=lfs diff=lfs merge=lfs -text +*.mlmodel filter=lfs diff=lfs merge=lfs -text +*.npy filter=lfs diff=lfs merge=lfs -text +*.npz filter=lfs diff=lfs merge=lfs -text +*.pickle filter=lfs diff=lfs merge=lfs -text +*.pkl filter=lfs diff=lfs merge=lfs -text +*.tar filter=lfs diff=lfs merge=lfs -text +*.wasm filter=lfs diff=lfs merge=lfs -text *.zst filter=lfs diff=lfs merge=lfs -text -*tfevents* filter=lfs diff=lfs merge=lfs -text +*tfevents* filter=lfs diff=lfs merge=lfs -textmodel/data/SupplementaryFileC2EPsPredictions.tsv filter=lfs diff=lfs merge=lfs -text +model/data/SupplementaryMeltingTemperatureSourceData.xlsx filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..38aeff477834193e4ed4160754b9b62fa245b6bf --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +ProtTrans/ +__pycache__/ +update_tests.sh diff --git a/LICENCE.md b/LICENCE.md new file mode 100644 index 0000000000000000000000000000000000000000..89caaed03c2bba0eda8081489e8c63e3b3adc1ff --- /dev/null +++ b/LICENCE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Ieva Pudžiuvelytė + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..6be72fb85523739df808948b4f991329555c09d8 --- /dev/null +++ b/README.md @@ -0,0 +1,314 @@ +--- +license: mit +language: +- en +- zh +tags: +- OneScience +- life-science +- protein +- thermostability +- ProtTrans +- TemStaPro +frameworks: PyTorch +--- + +

+ + TemStaPro + +

+ +# Model Introduction + +TemStaPro (Temperatures of Stability for Proteins) is a protein thermostability prediction tool based on protein language model representations. It takes protein FASTA sequences as input, uses ProtTrans/ProtT5 to generate sequence representations, and applies classifiers for multiple temperature thresholds to predict stability across different temperature ranges. + +Paper: + +> **TemStaPro: protein thermostability prediction using sequence representations from protein language models** +> https://doi.org/10.1093/bioinformatics/btae157 + +# Model Description + +TemStaPro uses ProtT5-XL-Half-UniRef50 to encode protein sequences and predicts thermostability from the resulting mean or per-residue embeddings. The default mode uses binary classifiers to independently assess stability at thresholds of 40, 45, 50, 55, 60, and 65 °C, then combines the classification results to produce a predicted temperature range. + +# Use Cases + +| Use case | Description | +| --- | --- | +| Protein thermostability prediction | Predict the stable temperature range from a protein sequence | +| Multi-temperature threshold classification | Assess protein stability independently at thresholds such as 40–65 °C | +| Per-residue stability analysis | Output local prediction results for each amino acid position | +| Local segment stability analysis | Predict thermostability in different protein regions using a sliding window | +| Protein engineering and screening | Help screen potential thermostable proteins or candidate mutants | + +# Usage + +## 1. Using OneCode + +Experience intelligent one-click AI4S programming in the OneCode online environment: + +[Try intelligent one-click AI4S programming](https://web-2069360198568017922-iaaj.ksai.scnet.cn:58043/home) + +## 2. Manual Installation and Usage + +**Hardware Requirements** + +- TemStaPro supports execution on CPUs and GPUs. +- Most of the computational cost comes from generating ProtT5 embeddings, so a GPU/DCU is recommended for acceleration. +- In the official tests, 1,000 protein sequences with an average length of approximately 1,137 aa took about 10 hours on a standard laptop CPU and about 10 minutes on an RTX 2080 Ti GPU system. An accelerator is therefore recommended for batch prediction. + +### Set Up the Runtime Environment + +#### DCU Environment + +```bash +# Activate DTK and CONDA first +conda create -n onescience311 python=3.11 -y +conda activate onescience311 + +# Install with uv support +pip install onescience[bio] \ + -i http://mirrors.onescience.ai:3141/pypi/simple/ \ + --trusted-host mirrors.onescience.ai +``` + +#### Environment Notes + +- If you encounter missing dependencies or version incompatibilities during execution, refer to the dependency versions specified in `environment_CPU.yml` or `environment_GPU.yml` and install or adjust the relevant dependencies as needed. +### Prepare Weights and Models + +- TemStaPro inference requires two model resources: + +(1) TemStaPro classifier weights. +(2) The ProtT5-XL-Half-UniRef50 pretrained model. + +- TemStaPro inference does not require additional dataset downloads; the standard workflow takes the user's own FASTA file as input. + +#### 1) TemStaPro Classifier Weights + +The current repository provides trained classifier weights in the `weight/` directory, for example: + +```text +weight/ +├── mean_major_imbal-40_s1.pt +├── mean_major_imbal-40_s2.pt +├── ... +├── mean_major_imbal-45_s1.pt +├── ... +├── mean_major_imbal-50_s1.pt +└── ... +``` + +Different files correspond to different temperature thresholds and random seeds. TemStaPro automatically loads the corresponding classifiers from `weight/`, so after downloading the complete Hugging Face model package, separate classifier weight downloads are normally unnecessary. + +#### 2) ProtT5-XL-Half-UniRef50 + +TemStaPro uses ProtT5-XL-Half-UniRef50 to generate protein sequence representations. This model is not included in the current repository and must be prepared separately. + +```text +Rostlab/prot_t5_xl_half_uniref50-enc +``` + +It is recommended to save the ProtTrans model under `ProtTrans/` in the repository root and specify this directory at runtime with `-d/--PT-directory`: + +```bash +python scripts/temstapro \ + -f ./scripts/tests/data/long_sequence.fasta \ + -d ./ProtTrans/ \ + --mean-output ./long_sequence_predictions.tsv +``` + +If `./ProtTrans/` already contains the following model files, the program loads them locally: + +```text +pytorch_model.bin +config.json +tokenizer_config.json +special_tokens_map.json +spiece.model +``` + +If the specified directory does not contain the complete model files, the program attempts to download them automatically from Hugging Face and save them there. For network-restricted or offline environments, download them in advance with the Hugging Face CLI: + +```bash +huggingface-cli download \ + Rostlab/prot_t5_xl_half_uniref50-enc \ + --local-dir ./ProtTrans +``` + +The model page is shown below; you can also download the required files manually: + +```text +https://huggingface.co/Rostlab/prot_t5_xl_half_uniref50-enc/tree/main +``` + +## 3. Quick Start + +### Download the Model Package + +```bash +hf download OneScience-Group/TemStaPro --local-dir ./TemStaPro +cd TemStaPro +``` + +- Complete TemStaPro inference additionally depends on **ProtT5-XL-Half-UniRef50**. Follow "Prepare Weights and Models" to make sure the ProtTrans model is ready first. +- Training, validation, and test datasets from Zenodo are not required for inference-only use. + +### Quick Verification + +First, view the command-line options: + +```bash +python scripts/temstapro --help +``` + +Run the official test files retained in the repository: + +```bash +make -f scripts/makefile all +``` + +The first test run may fail while the ProtTrans model is being downloaded. Clean the outputs and run the tests again: + +```bash +make -f scripts/makefile clean +make -f scripts/makefile all +``` + +In offline environments, prepare the ProtTrans model before running the tests. + +# Example Data + +The official test data is located in `scripts/tests/data/`, primarily using: + +```text +scripts/tests/data/long_sequence.fasta +``` + +as the example input. + +TemStaPro inputs use the standard FASTA format: + +```text +>protein_id +MSEQUENCE... +``` + +For your own prediction tasks, prepare a FASTA file containing one or more protein sequences. No protein structure is required. + +# Inference Examples + +## Protein-Level Thermostability Prediction + +Mean-embedding prediction is recommended by default: + +```bash +python scripts/temstapro \ + -f ./scripts/tests/data/long_sequence.fasta \ + -d ./ProtTrans/ \ + -e ./scripts/tests/outputs/ \ + --mean-output ./long_sequence_predictions.tsv +``` + +Where: + +| Parameter | Description | +| --- | --- | +| `-f` | Input FASTA file | +| `-d` | ProtTrans/ProtT5 model directory | +| `-e` | Embedding cache directory | +| `--mean-output` | Protein-level prediction results in TSV format | + +`-e` is optional, but enabling embedding caching is recommended when running the same sequences multiple times. + +## Per-Residue Prediction + +```bash +python scripts/temstapro \ + -f ./scripts/tests/data/long_sequence.fasta \ + -e ./scripts/tests/outputs/ \ + -d ./ProtTrans/ \ + -p ./ \ + --per-res-output ./long_sequence_predictions_per_res.tsv +``` + +`-p` specifies the output directory for prediction plots. + +## Local Segment Prediction + +TemStaPro uses a window size of 41 for per-segment prediction by default: + +```bash +python scripts/temstapro \ + -f ./scripts/tests/data/long_sequence.fasta \ + -e ./scripts/tests/outputs/ \ + -d ./ProtTrans/ \ + --curve-smoothening \ + -p ./ \ + --per-segment-output ./long_sequence_predictions_k41.tsv +``` + +## Additional Temperature Thresholds + +To enable additional thresholds such as 70, 75, and 80 °C, together with the thermophilicity label, add: + +```bash +--more-thresholds +``` + +# Output Description + +The default protein-level output is a TSV table containing the binary and raw predictions from classifiers at each temperature threshold. It also generates a predicted temperature label from the combined threshold results. + +The default temperature thresholds are: + +```text +40 +45 +50 +55 +60 +65 °C +``` + +The results also contain the: + +```text +clash +``` + +field, which indicates whether the threshold classifiers disagree: + +```text +- No obvious conflict +* Inconsistent classification results +``` + +When per-residue or local-segment prediction is enabled, additional TSV files can be generated. Specifying `-p` also generates SVG prediction plots. + +With `-e`, ProtTrans embedding cache files are saved in the specified directory and can be reused in later runs, reducing repeated ProtT5 feature extraction overhead. + +Typical runtime/intermediate files include: + +```text +*.tsv Final prediction results +*.pt ProtTrans embedding cache +*.svg Per-residue or local-segment prediction plots +``` + +# Official OneScience Information + +| Platform | Main OneScience repository | Skills repository | +| --- | --- | --- | +| Gitee | https://gitee.com/onescience-ai/onescience | https://gitee.com/onescience-ai/oneskills | +| GitHub | https://github.com/onescience-ai/OneScience | https://github.com/onescience-ai/oneskills | + + +# Citation and License + +- Original TemStaPro paper: [TemStaPro: protein thermostability prediction using sequence representations from protein language models](https://doi.org/10.1093/bioinformatics/btae157). +- The official TemStaPro source code is released under the MIT License; see `LICENCE.md` in the repository root. +- TemStaPro uses ProtTrans/ProtT5 to generate protein representations. Use or redistribution of the corresponding model weights must also comply with the license requirements of ProtTrans, the relevant Hugging Face model page, and the associated pretraining data. +- The official training, validation, and test data are published on Zenodo. If you use these data for reproduction, training, or evaluation, cite them as required by the data page. +- If you use this repository in research, cite the original TemStaPro paper and the relevant OneScience project information. diff --git a/config.json b/config.json new file mode 100644 index 0000000000000000000000000000000000000000..f1d0611cfb0d06144b1e98f861e305b4304ad4cb --- /dev/null +++ b/config.json @@ -0,0 +1,14 @@ +{ + "directories": { + "conf": "Environment and configuration files", + "model": "Model definitions and bundled reference data", + "scripts": "Executable and workflow scripts", + "weight": "Pretrained classifier weights" + }, + "entrypoint": "temstapro", + "weights": "weight", + "source": { + "scripts": "scripts", + "model": "model" + } +} diff --git a/environment_CPU.yml b/environment_CPU.yml new file mode 100644 index 0000000000000000000000000000000000000000..8c9a5f3f5efd666c0cad2fea6521778b94f18461 --- /dev/null +++ b/environment_CPU.yml @@ -0,0 +1,73 @@ +name: temstapro_env_CPU +channels: + - pytorch + - conda-forge + - defaults +dependencies: + - _libgcc_mutex=0.1=main + - _openmp_mutex=5.1=1_gnu + - blas=1.0=mkl + - brotlipy=0.7.0=py37h540881e_1004 + - ca-certificates=2022.9.24=ha878542_0 + - certifi=2022.9.24=pyhd8ed1ab_0 + - cffi=1.15.1=py37h5eee18b_2 + - charset-normalizer=2.1.1=pyhd8ed1ab_0 + - colorama=0.4.6=pyhd8ed1ab_0 + - cryptography=3.4.8=py37hf1a17b8_1 + - cycler=0.11.0=pyhd8ed1ab_0 + - filelock=3.8.0=pyhd8ed1ab_0 + - freetype=2.10.4=h0708190_1 + - huggingface_hub=0.11.0=pyhd8ed1ab_0 + - icu=67.1=he1b5a44_0 + - idna=3.4=pyhd8ed1ab_0 + - importlib-metadata=4.11.4=py37h89c1867_0 + - importlib_metadata=4.11.4=hd8ed1ab_0 + - intel-openmp=2022.1.0=h9e868ea_3769 + - kiwisolver=1.4.2=py37h295c915_0 + - ld_impl_linux-64=2.38=h1181459_1 + - libblas=3.9.0=16_linux64_mkl + - libcblas=3.9.0=16_linux64_mkl + - libffi=3.4.2=h6a678d5_6 + - libgcc-ng=11.2.0=h1234567_1 + - libgomp=11.2.0=h1234567_1 + - liblapack=3.9.0=16_linux64_mkl + - libpng=1.6.37=hbc83047_0 + - libstdcxx-ng=11.2.0=h1234567_1 + - matplotlib=3.2.2=1 + - matplotlib-base=3.2.2=py37h1d35a4c_1 + - mkl=2022.1.0=hc2b9512_224 + - ncurses=6.3=h5eee18b_3 + - numpy=1.21.6=py37h976b520_0 + - openssl=1.1.1s=h7f8727e_0 + - packaging=21.3=pyhd8ed1ab_0 + - pip=22.2.2=py37h06a4308_0 + - pycparser=2.21=pyhd8ed1ab_0 + - pyopenssl=20.0.1=pyhd8ed1ab_0 + - pyparsing=3.0.9=pyhd8ed1ab_0 + - pysocks=1.7.1=py37h89c1867_5 + - python=3.7.15=h7a1cb2a_1 + - python-dateutil=2.8.2=pyhd8ed1ab_0 + - python_abi=3.7=2_cp37m + - pytorch=1.13.0=py3.7_cpu_0 + - pytorch-mutex=1.0=cpu + - pyyaml=6.0=py37h540881e_4 + - readline=8.2=h5eee18b_0 + - regex=2022.7.9=py37h5eee18b_0 + - requests=2.28.1=pyhd8ed1ab_1 + - sentencepiece=0.1.96=py37h7cecad7_1 + - setuptools=65.5.0=py37h06a4308_0 + - six=1.16.0=pyh6c4a22f_0 + - sqlite=3.40.0=h5082296_0 + - tk=8.6.12=h1ccaba5_0 + - tokenizers=0.11.4=py37h3dcd8bd_1 + - tornado=6.1=py37h540881e_3 + - tqdm=4.64.1=pyhd8ed1ab_0 + - transformers=4.24.0=py37h06a4308_0 + - typing-extensions=4.3.0=py37h06a4308_0 + - typing_extensions=4.3.0=py37h06a4308_0 + - urllib3=1.26.13=pyhd8ed1ab_0 + - wheel=0.37.1=pyhd3eb1b0_0 + - xz=5.2.6=h5eee18b_0 + - yaml=0.2.5=h7f98852_2 + - zipp=3.10.0=pyhd8ed1ab_0 + - zlib=1.2.13=h5eee18b_0 diff --git a/environment_GPU.yml b/environment_GPU.yml new file mode 100644 index 0000000000000000000000000000000000000000..70fd2d73c8f21a217168ca778ba1336ec2505397 --- /dev/null +++ b/environment_GPU.yml @@ -0,0 +1,268 @@ +name: temstapro_env +channels: + - pytorch + - nvidia + - conda-forge + - defaults +dependencies: + - _libgcc_mutex=0.1=conda_forge + - _openmp_mutex=4.5=2_kmp_llvm + - abseil-cpp=20211102.0=h27087fc_1 + - aiohttp=3.8.1=py37h540881e_1 + - aiosignal=1.3.1=pyhd8ed1ab_0 + - alsa-lib=1.2.7.2=h166bdaf_0 + - arrow-cpp=8.0.0=py37h60b952e_0 + - async-timeout=4.0.2=pyhd8ed1ab_0 + - asynctest=0.13.0=py_0 + - attr=2.5.1=h166bdaf_1 + - attrs=22.1.0=pyh71513ae_1 + - aws-c-common=0.4.57=he6710b0_1 + - aws-c-event-stream=0.1.6=h2531618_5 + - aws-checksums=0.1.9=he6710b0_0 + - aws-sdk-cpp=1.8.185=hce553d0_0 + - blas=1.0=mkl + - boost-cpp=1.78.0=he72f1d9_0 + - bottleneck=1.3.5=py37h7deecbd_0 + - brotli=1.0.9=h166bdaf_7 + - brotli-bin=1.0.9=h166bdaf_7 + - brotlipy=0.7.0=py37h27cfd23_1003 + - bzip2=1.0.8=h7b6447c_0 + - c-ares=1.18.1=h7f98852_0 + - ca-certificates=2022.9.24=ha878542_0 + - certifi=2022.9.24=pyhd8ed1ab_0 + - cffi=1.15.1=py37h5eee18b_2 + - charset-normalizer=2.0.4=pyhd3eb1b0_0 + - click=8.1.3=py37h89c1867_0 + - colorama=0.4.6=pyhd8ed1ab_0 + - cryptography=38.0.1=py37h9ce1e76_0 + - cuda=11.7.1=0 + - cuda-cccl=11.7.91=0 + - cuda-command-line-tools=11.7.1=0 + - cuda-compiler=11.7.1=0 + - cuda-cudart=11.7.99=0 + - cuda-cudart-dev=11.7.99=0 + - cuda-cuobjdump=11.7.91=0 + - cuda-cupti=11.7.101=0 + - cuda-cuxxfilt=11.7.91=0 + - cuda-demo-suite=11.8.86=0 + - cuda-documentation=11.8.86=0 + - cuda-driver-dev=11.7.99=0 + - cuda-gdb=11.8.86=0 + - cuda-libraries=11.7.1=0 + - cuda-libraries-dev=11.7.1=0 + - cuda-memcheck=11.8.86=0 + - cuda-nsight=11.8.86=0 + - cuda-nsight-compute=11.8.0=0 + - cuda-nvcc=11.7.99=0 + - cuda-nvdisasm=11.8.86=0 + - cuda-nvml-dev=11.7.91=0 + - cuda-nvprof=11.8.87=0 + - cuda-nvprune=11.7.91=0 + - cuda-nvrtc=11.7.99=0 + - cuda-nvrtc-dev=11.7.99=0 + - cuda-nvtx=11.7.91=0 + - cuda-nvvp=11.8.87=0 + - cuda-runtime=11.7.1=0 + - cuda-sanitizer-api=11.8.86=0 + - cuda-toolkit=11.7.1=0 + - cuda-tools=11.7.1=0 + - cuda-visual-tools=11.7.1=0 + - cycler=0.11.0=pyhd8ed1ab_0 + - dataclasses=0.8=pyhc8e2a94_3 + - datasets=2.7.1=pyhd8ed1ab_0 + - dbus=1.13.6=h5008d03_3 + - dill=0.3.6=pyhd8ed1ab_1 + - expat=2.5.0=h27087fc_0 + - ffmpeg=4.3=hf484d3e_0 + - fftw=3.3.10=nompi_hf0379b8_105 + - filelock=3.8.0=pyhd8ed1ab_0 + - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 + - font-ttf-inconsolata=3.000=h77eed37_0 + - font-ttf-source-code-pro=2.038=h77eed37_0 + - font-ttf-ubuntu=0.83=hab24e00_0 + - fontconfig=2.14.1=hc2a2eb6_0 + - fonts-conda-ecosystem=1=0 + - fonts-conda-forge=1=0 + - fonttools=4.25.0=pyhd3eb1b0_0 + - freetype=2.12.1=h4a9f257_0 + - frozenlist=1.2.0=py37h7f8727e_0 + - fsspec=2022.11.0=pyhd8ed1ab_0 + - gds-tools=1.4.0.31=0 + - gettext=0.21.1=h27087fc_0 + - gflags=2.2.2=he1b5a44_1004 + - giflib=5.2.1=h7b6447c_0 + - glib=2.74.1=h6239696_1 + - glib-tools=2.74.1=h6239696_1 + - glog=0.6.0=h6f12383_0 + - gmp=6.2.1=h295c915_3 + - gnutls=3.6.15=he1e5248_0 + - grpc-cpp=1.46.1=h33aed49_0 + - gst-plugins-base=1.20.3=h57caac4_1 + - gstreamer=1.20.3=hd4edc92_1 + - huggingface_hub=0.11.0=pyhd8ed1ab_0 + - icu=70.1=h27087fc_0 + - idna=3.4=py37h06a4308_0 + - importlib-metadata=4.11.4=py37h89c1867_0 + - importlib_metadata=4.11.4=hd8ed1ab_0 + - intel-openmp=2021.4.0=h06a4308_3561 + - jack=1.9.21=h2a1e645_0 + - joblib=1.2.0=pyhd8ed1ab_0 + - jpeg=9e=h7f8727e_0 + - keyutils=1.6.1=h166bdaf_0 + - kiwisolver=1.4.4=py37h7cecad7_0 + - krb5=1.19.3=h3790be6_0 + - lame=3.100=h7b6447c_0 + - lcms2=2.12=h3be6417_0 + - ld_impl_linux-64=2.38=h1181459_1 + - lerc=3.0=h295c915_0 + - libbrotlicommon=1.0.9=h166bdaf_7 + - libbrotlidec=1.0.9=h166bdaf_7 + - libbrotlienc=1.0.9=h166bdaf_7 + - libcap=2.66=ha37c62d_0 + - libclang=14.0.6=default_hc1a23ef_0 + - libclang13=14.0.6=default_h31cde19_0 + - libcublas=11.11.3.6=0 + - libcublas-dev=11.11.3.6=0 + - libcufft=10.9.0.58=0 + - libcufft-dev=10.9.0.58=0 + - libcufile=1.4.0.31=0 + - libcufile-dev=1.4.0.31=0 + - libcups=2.3.3=h3e49a29_2 + - libcurand=10.3.0.86=0 + - libcurand-dev=10.3.0.86=0 + - libcurl=7.85.0=h91b91d3_0 + - libcusolver=11.4.1.48=0 + - libcusolver-dev=11.4.1.48=0 + - libcusparse=11.7.5.86=0 + - libcusparse-dev=11.7.5.86=0 + - libdb=6.2.32=h9c3ff4c_0 + - libdeflate=1.8=h7f8727e_5 + - libedit=3.1.20191231=he28a2e2_2 + - libev=4.33=h516909a_1 + - libevent=2.1.10=h9b69904_4 + - libffi=3.4.2=h6a678d5_6 + - libflac=1.4.2=h27087fc_0 + - libgcc-ng=12.2.0=h65d4601_19 + - libgfortran-ng=12.2.0=h69a702a_19 + - libgfortran5=12.2.0=h337968e_19 + - libglib=2.74.1=h606061b_1 + - libiconv=1.17=h166bdaf_0 + - libidn2=2.3.2=h7f8727e_0 + - libllvm14=14.0.6=he0ac6c6_1 + - libnghttp2=1.46.0=hce63b2e_0 + - libnpp=11.8.0.86=0 + - libnpp-dev=11.8.0.86=0 + - libnvjpeg=11.9.0.86=0 + - libnvjpeg-dev=11.9.0.86=0 + - libogg=1.3.4=h7f98852_1 + - libopus=1.3.1=h7f98852_1 + - libpng=1.6.37=hbc83047_0 + - libpq=14.5=hd77ab85_1 + - libprotobuf=3.20.1=h4ff587b_0 + - libsndfile=1.1.0=h27087fc_0 + - libsqlite=3.40.0=h753d276_0 + - libssh2=1.10.0=ha56f1ee_2 + - libstdcxx-ng=12.2.0=h46fd767_19 + - libtasn1=4.16.0=h27cfd23_0 + - libthrift=0.15.0=he6d91bd_0 + - libtiff=4.4.0=hecacb30_2 + - libtool=2.4.6=h9c3ff4c_1008 + - libudev1=252=h166bdaf_0 + - libunistring=0.9.10=h27cfd23_0 + - libuuid=2.32.1=h7f98852_1000 + - libvorbis=1.3.7=h9c3ff4c_0 + - libwebp=1.2.4=h11a3e52_0 + - libwebp-base=1.2.4=h5eee18b_0 + - libxcb=1.13=h7f98852_1004 + - libxkbcommon=1.0.3=he3ba5ed_0 + - libxml2=2.10.3=h7463322_0 + - libzlib=1.2.13=h166bdaf_4 + - llvm-openmp=15.0.5=he0ac6c6_0 + - lz4-c=1.9.3=h295c915_1 + - matplotlib=3.5.3=py37h89c1867_2 + - matplotlib-base=3.5.3=py37hf395dca_2 + - mkl=2021.4.0=h06a4308_640 + - mkl-service=2.4.0=py37h7f8727e_0 + - mkl_fft=1.3.1=py37hd3c417c_0 + - mkl_random=1.2.2=py37h51133e4_0 + - mpg123=1.30.2=h27087fc_1 + - multidict=6.0.2=py37h540881e_1 + - multiprocess=0.70.12.2=py37h540881e_2 + - munkres=1.1.4=pyh9f0ad1d_0 + - mysql-common=8.0.31=haf5c9bc_0 + - mysql-libs=8.0.31=h28c427c_0 + - ncurses=6.3=h5eee18b_3 + - nettle=3.7.3=hbbd107a_1 + - nsight-compute=2022.3.0.22=0 + - nspr=4.32=h9c3ff4c_1 + - nss=3.78=h2350873_0 + - numexpr=2.8.4=py37he184ba9_0 + - numpy=1.21.5=py37h6c91a56_3 + - numpy-base=1.21.5=py37ha15fc14_3 + - openh264=2.1.1=h4ff587b_0 + - openssl=1.1.1s=h166bdaf_0 + - orc=1.7.4=h07ed6aa_0 + - packaging=21.3=pyhd8ed1ab_0 + - pandas=1.3.5=py37h8c16a72_0 + - pcre2=10.40=hc3806b6_0 + - pillow=9.2.0=py37hace64e9_1 + - pip=22.2.2=py37h06a4308_0 + - ply=3.11=py_1 + - pthread-stubs=0.4=h36c2ea0_1001 + - pulseaudio=14.0=habe0971_10 + - pyarrow=8.0.0=py37h992f0b0_0 + - pycparser=2.21=pyhd3eb1b0_0 + - pyopenssl=22.0.0=pyhd3eb1b0_0 + - pyparsing=3.0.9=pyhd8ed1ab_0 + - pyqt=5.15.7=py37hf30b843_0 + - pyqt5-sip=12.11.0=py37hd23a5d3_0 + - pysocks=1.7.1=py37_1 + - python=3.7.15=h7a1cb2a_1 + - python-dateutil=2.8.2=pyhd8ed1ab_0 + - python-xxhash=3.0.0=py37h540881e_1 + - python_abi=3.7=2_cp37m + - pytorch=1.13.0=py3.7_cuda11.7_cudnn8.5.0_0 + - pytorch-cuda=11.7=h67b0de4_0 + - pytorch-mutex=1.0=cuda + - pytz=2022.6=pyhd8ed1ab_0 + - pyyaml=6.0=py37h540881e_4 + - qt-main=5.15.6=hc525480_0 + - re2=2022.04.01=h27087fc_0 + - readline=8.2=h5eee18b_0 + - regex=2022.7.9=py37h5eee18b_0 + - requests=2.28.1=py37h06a4308_0 + - responses=0.18.0=pyhd8ed1ab_0 + - sacremoses=0.0.53=pyhd8ed1ab_0 + - sentencepiece=0.1.96=py37h7cecad7_1 + - setuptools=65.5.0=py37h06a4308_0 + - sip=6.6.2=py37hd23a5d3_0 + - six=1.16.0=pyhd3eb1b0_1 + - snappy=1.1.9=hbd366e4_1 + - sqlite=3.40.0=h5082296_0 + - tk=8.6.12=h1ccaba5_0 + - tokenizers=0.11.4=py37h3dcd8bd_1 + - toml=0.10.2=pyhd8ed1ab_0 + - torchaudio=0.13.0=py37_cu117 + - torchvision=0.14.0=py37_cu117 + - tornado=6.2=py37h540881e_0 + - tqdm=4.64.1=pyhd8ed1ab_0 + - transformers=4.24.0=pyhd8ed1ab_0 + - typing-extensions=4.3.0=py37h06a4308_0 + - typing_extensions=4.3.0=py37h06a4308_0 + - urllib3=1.26.12=py37h06a4308_0 + - utf8proc=2.6.1=h27cfd23_0 + - wheel=0.37.1=pyhd3eb1b0_0 + - xcb-util=0.4.0=h166bdaf_0 + - xcb-util-image=0.4.0=h166bdaf_0 + - xcb-util-keysyms=0.4.0=h166bdaf_0 + - xcb-util-renderutil=0.3.9=h166bdaf_0 + - xcb-util-wm=0.4.1=h166bdaf_0 + - xorg-libxau=1.0.9=h7f98852_0 + - xorg-libxdmcp=1.1.3=h7f98852_0 + - xxhash=0.8.0=h7f98852_3 + - xz=5.2.6=h5eee18b_0 + - yaml=0.2.5=h7f98852_2 + - yarl=1.7.2=py37h540881e_2 + - zipp=3.10.0=pyhd8ed1ab_0 + - zlib=1.2.13=h166bdaf_4 + - zstd=1.5.2=ha4553b6_0 diff --git a/model/MLP.py b/model/MLP.py new file mode 100644 index 0000000000000000000000000000000000000000..52d0c64a84505e4a512837d8f32307b1dcf09d9a --- /dev/null +++ b/model/MLP.py @@ -0,0 +1,41 @@ +""" +Definition of the class of models with 2 hidden layers. +""" +import torch +from torch import nn + +class MLP_C2H2(nn.Module): + def __init__(self, + input_size=1024, + hidden_size_1=512, + hidden_size_2=256 + ): + super().__init__() + self.input_size = input_size + self.hidden_size_1 = hidden_size_1 + self.hidden_size_2 = hidden_size_2 + + self.model = torch.nn.ModuleList( + [ + nn.Linear(self.input_size, self.hidden_size_1), + nn.ReLU(), + ] + + [ + nn.Linear(self.hidden_size_1, self.hidden_size_2), + nn.ReLU(), + ] + + [ + nn.Linear(self.hidden_size_2, 1), + nn.Sigmoid() + ] + ) + self.loss_function = nn.BCELoss() + + def forward(self, point): + for layer in self.model: + point = layer(point) + return point + + def calculate_loss(self, point, label): + return self.loss_function(point, label) + diff --git a/model/data/README.md b/model/data/README.md new file mode 100644 index 0000000000000000000000000000000000000000..b9a83383de63f46ecc7eed09ec53f572c03a06a7 --- /dev/null +++ b/model/data/README.md @@ -0,0 +1,19 @@ +# TemStaPro data + +This directory contains data related to TemStaPro development. + +`SupplementaryFileC2EPsPredictions.tsv` file contains global +thermostability predictions made by TemStaPro using mean embeddings +for Class II effector proteins(C2EP), which is a collection of +proteins from Cas9, Cas12, Cas13, and TnpB groups. + +`SupplementaryTableCharacterizedC2EPs.xlsx` file contains the +full table experimentally characterized and predicted temperatures +of C2EP proteins. + +`SupplementaryMeltingTemperatureSourceData.xlsx` file contains +raw traces of nanoDSF assays. + +Datasets that were used to train, validate, and test TemStaPro are +available in [Zenodo.](https://doi.org/10.5281/zenodo.7743637) + diff --git a/model/data/SupplementaryFileC2EPsPredictions.tsv b/model/data/SupplementaryFileC2EPsPredictions.tsv new file mode 100644 index 0000000000000000000000000000000000000000..6c8351459e81c3434a7a7c192d9088545fae00fa --- /dev/null +++ b/model/data/SupplementaryFileC2EPsPredictions.tsv @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fbd799c81c7045f4cef6056856167425035abf1c9a0592718a0d13f8dea258c5 +size 14642598 diff --git a/model/data/SupplementaryMeltingTemperatureSourceData.xlsx b/model/data/SupplementaryMeltingTemperatureSourceData.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..af3c2a9fa5928b99c6aa248577f91318d75196e2 --- /dev/null +++ b/model/data/SupplementaryMeltingTemperatureSourceData.xlsx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:46c799629826e3f03b5257fe721dd06131a56a7effdf5a6229b0a6d992722b41 +size 764484 diff --git a/model/data/SupplementaryTableCharacterizedC2EPs.xlsx b/model/data/SupplementaryTableCharacterizedC2EPs.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..fa50f5da0e10b501afb56484817710c6ac3f5752 Binary files /dev/null and b/model/data/SupplementaryTableCharacterizedC2EPs.xlsx differ diff --git a/model/model_flow.py b/model/model_flow.py new file mode 100644 index 0000000000000000000000000000000000000000..a8e8f1a253464e938c7cba22e2287c439816df00 --- /dev/null +++ b/model/model_flow.py @@ -0,0 +1,151 @@ +""" +Workflow regarding the inference making process. +""" + +from torch.utils.data import DataLoader +from torch.utils.data import TensorDataset +import numpy +from MLP import MLP_C2H2 +import torch + +def prepare_data_loaders(datasets, keyword): + """ + Preparing and returning DataLoader objects. + + datasets - LIST of dictionaries that hold data sets + keyword - STRING the suffix of keywords of the dictionary + run_mode - STRING that determines the running mode of the program + + returns (DataLoader, DataLoader) + """ + test_dataset = TensorDataset(datasets[0]['x_'+keyword], + datasets[0]['y_'+keyword]) + test_loader = DataLoader(test_dataset, shuffle=False) + + per_res_test_loader = None + if(datasets[1]): + per_res_test_dataset = TensorDataset(datasets[1]['x_'+keyword], + datasets[1]['y_'+keyword]) + per_res_test_loader = DataLoader(per_res_test_dataset, shuffle=False) + + return (test_loader, per_res_test_loader) + +def prepare_inference_dictionaries(sequences_list, is_npz=False): + """ + Initialising dictionaries to save inferences. + + sequences_lists - LIST of dictionaries with information about sequences + is_npz - BOOLEAN that indicates whether an NPZ file or a FASTA file is + processed + + returns (LIST, LIST, LIST, LIST) + """ + averaged_inferences = [] + binary_inferences = [] + labels = [] + clashes = [] + + if(is_npz): + averaged_inferences.append({}) + binary_inferences.append({}) + labels.append({}) + clashes.append({}) + for seq in sequences_list[0]: + averaged_inferences[0][seq[0].split("|")[1]] = [] + binary_inferences[0][seq[0].split("|")[1]] = [] + labels[0][seq[0].split("|")[1]] = [] + clashes[0][seq[0].split("|")[1]] = [] + else: + for i, seq_dict in enumerate(sequences_list): + if(seq_dict is None): break + averaged_inferences.append({}) + binary_inferences.append({}) + labels.append({}) + clashes.append({}) + for seq in seq_dict.keys(): + averaged_inferences[i][seq] = [] + binary_inferences[i][seq] = [] + labels[i][seq] = [] + clashes[i][seq] = [] + + return (averaged_inferences, binary_inferences, labels, clashes) + +def inference_epoch(model, test_loader, identifiers=[], device="cpu"): + """ + Making inferences for each given protein sequence. + + model - torch.nn.Module with a defined architecture + test_loader - DataLoader with a dataset loaded for inferences + identifiers - LIST with sequence identifiers used as keys in inferences DICT + device - STRING that determines the processor used + + returns DICT with inferences + """ + inferences = {} + for i, data in enumerate(test_loader, 0): + inputs, targets = data + inputs, targets = inputs.to(device), targets.to(device) + outputs = model(inputs.float()) + outputs = outputs.detach().cpu().numpy() + + seq_id = identifiers[i] + + for output in outputs: + inferences[seq_id] = output[0] + + return inferences + +def make_inferences(sequences, per_res_sequences, mean_loader, per_res_loader, + parameters, thresholds_range): + """ + Making inferences. + + sequences - DICT with the sequences' ids as keys and amino acid sequences as values + per_res_sequences - DICT with the sequences' ids as keys and amino acid sequences as values + mean_loader - DataLoader to load mean embeddings data + per_res_loader - DataLoader to load per-reside embeddings data + hidden_layer_sizes - LIST with sizes (INT) of the hidden layers of classifiers + parameters - DICT with values of keys: THRESHOLDS, SEEDS, HIDDEN_LAYER_SIZES, CLASSIFIERS_DIR, EMB_TYPE, DATASET, CLASSIFIER_TYPE + thresholds_range - STRING to determine, which thresholds to choose + + returns (DICT, DICT, DICT, DICT) + """ + averaged_inferences, binary_inferences, labels, clashes = prepare_inference_dictionaries( + [sequences, per_res_sequences]) + + for j, loader in enumerate([mean_loader, per_res_loader]): + if(loader is None): break + for threshold in parameters["THRESHOLDS"][thresholds_range]: + threshold_inferences = {} + for seed in parameters["SEEDS"]: + classifier = MLP_C2H2(parameters["INPUT_SIZE"], + parameters["HIDDEN_LAYER_SIZES"][0], + parameters["HIDDEN_LAYER_SIZES"][1]) + model_path = "%s/%s_%s_%s-%s_s%s.pt" % ( + parameters["CLASSIFIERS_DIR"], parameters["EMB_TYPE"], + parameters["DATASET"], parameters["CLASSIFIER_TYPE"], + threshold, seed) + + # Adjustment to load state_dict from ckpt generated by PyTorch-Lightning + state_dict = torch.load(model_path, map_location=torch.device(parameters['DEVICE']))['state_dict'] + + for key in list(state_dict.keys()): + state_dict[key.replace('model.model.', 'model.')] = state_dict.pop(key) + + classifier.load_state_dict(state_dict) + classifier.eval() + + classifier.to(parameters["DEVICE"]) + + threshold_inferences[seed] = inference_epoch(classifier, + loader, + identifiers=list(averaged_inferences[j].keys()), device=parameters["DEVICE"]) + # Taking average of the predictions + for seq in threshold_inferences["1"].keys(): + mean_prediction = 0 + for seed in parameters["SEEDS"]: + mean_prediction += threshold_inferences[seed][seq] + mean_prediction /= len(parameters["SEEDS"]) + averaged_inferences[j][seq].append(mean_prediction) + binary_inferences[j][seq].append(round(mean_prediction)) + return (averaged_inferences, binary_inferences, labels, clashes) diff --git a/model/prottrans_models.py b/model/prottrans_models.py new file mode 100644 index 0000000000000000000000000000000000000000..764f65c75d5380df2cde72728da3e940f566509c --- /dev/null +++ b/model/prottrans_models.py @@ -0,0 +1,212 @@ +""" +A module that works with ProtTrans models. Functions were +adapted from ProtTrans authors' Google Colab notebook +""" + +from transformers import T5EncoderModel, T5Tokenizer +import torch +import os +import sys +from hashlib import sha256 +from transformers import logging as hf_logging + +hf_logging.set_verbosity_error() +hf_logging.disable_progress_bar() + +def get_pretrained_model(model_path): + """ + Fetches the model accordingly to the model_path + model_path - STRING that identifies the model to fetch + Returns model. + """ + + device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu') + if(os.path.exists(model_path+'/pytorch_model.bin') and + os.path.exists(model_path+'/config.json')): + model = T5EncoderModel.from_pretrained(model_path+'/pytorch_model.bin', + config=model_path+'/config.json') + else: + model = T5EncoderModel.from_pretrained(model_path) + model = model.to(device) + model = model.eval() + + return model + +def get_tokenizer(model_path): + """ + Fetches the tokenizer accordingly to the model_path + model_path - STRING that identifies the model whose tokenizer + should be fetched + returns tokenizer + """ + + tokenizer = T5Tokenizer.from_pretrained(model_path, do_lower_case=False) + return tokenizer + +def load_model_and_tokenizer(pt_dir, pt_server_path): + """ + Load ProtTrans model and tokenizer. + + pt_dir - STRING to determine the path to the directory with ProtTrans + "pytorch_model.bin" file + pt_server_path - STRING of the path to ProtTrans model in its server + + returns (ProtT5-XL model, tokenizer) + """ + if(not os.path.exists(f"{pt_dir}/")): + os.system(f"mkdir -p {pt_dir}/") + + if(os.path.isfile(f"{pt_dir}/pytorch_model.bin")): + # Only loading the model + model = get_pretrained_model(pt_dir) + else: + # Downloading and saving the model + model = get_pretrained_model(pt_server_path) + model.save_pretrained(pt_dir) + + if(os.path.isfile(f"{pt_dir}/tokenizer_config.json")): + # Only loading the tokenizer + tokenizer = get_tokenizer(pt_dir) + else: + # Downloading and saving the tokenizer + tokenizer = get_tokenizer(pt_server_path) + tokenizer.save_pretrained(pt_dir) + + return (model, tokenizer) + +def process_FASTA(fasta_path, split_char="!", id_field=0): + """ + Reads in fasta file containing multiple sequences. + Split_char and id_field allow to control identifier extraction from header. + E.g.: set split_char="|" and id_field=1 for SwissProt/UniProt Headers. + Returns dictionary holding multiple sequences or only single + sequence, depending on input file. + """ + + seqs = dict() + orig_seq_headers = dict() + orig_seqs = dict() + with open(fasta_path, 'r') as fasta_f: + for line in fasta_f: + if line.startswith('>'): + uniprot_id = line.replace('>', '').strip().split(split_char)[id_field] + uniprot_id = uniprot_id.replace("/", "_").replace(".", "_") + seqs[uniprot_id] = '' + orig_seq_headers[uniprot_id] = line.replace('>', '').strip() + orig_seqs[uniprot_id] = '' + else: + orig_seqs[uniprot_id] += line.strip() + seq = ''.join(line.split()).upper().replace("-", "") + seq = seq.replace('U','X').replace('Z', 'X').replace('O', 'X') + seqs[uniprot_id] += seq + example_id = next(iter(seqs)) + + return (seqs, orig_seq_headers, orig_seqs) + +def get_embeddings(model, tokenizer, seqs, per_residue, per_protein, + max_residues=4000, # number of cumulative residues per batch + max_seq_len=2000, # max length after which we switch to single-sequence processing to avoid OOM + max_batch=100 # max number of sequences per single batch + ): + """ + Generation of embeddings via batch-processing. + per_residue indicates that embeddings for each residue in a protein + should be returned. + per_protein indicates that embeddings for a whole protein should be + returned (average-pooling). + + returns results depending on the option in the input. + """ + + device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu') + + results = {'per_res_representations': dict(), + 'mean_representations': dict()} + seq_dict = sorted(seqs.items(), key=lambda kv: len(seqs[kv[0]]), + reverse=True) + batch = list() + + for seq_idx, (pdb_id, seq) in enumerate(seq_dict, 1): + seq_len = len(seq) + seq = ' '.join(list(seq)) + batch.append((pdb_id, seq, seq_len)) + + n_res_batch = sum([s_len for _, _, s_len in batch]) + seq_len + + if (len(batch) >= max_batch) or (n_res_batch >= max_residues) or (seq_idx == len(seq_dict)) or (seq_len > max_seq_len): + pdb_ids, seqs, seq_lens = zip(*batch) + batch = list() + + token_encoding = tokenizer(seqs, + add_special_tokens=True, padding='longest') + input_ids = torch.tensor(token_encoding['input_ids']).to(device) + attention_mask = torch.tensor( + token_encoding['attention_mask']).to(device) + + try: + with torch.no_grad(): + embedding_repr = model(input_ids, + attention_mask=attention_mask) + except RuntimeError: + print(f"{sys.argv[0]}: runtime error generating embedding for {pdb_id} (L={seq_len}). "+\ + f"Try lowering batch size. If single sequence processing does not work, you need "+\ + f"more vRAM to process your protein.", file=sys.stderr) + continue + + for batch_idx, identifier in enumerate(pdb_ids): + s_len = seq_lens[batch_idx] + emb = embedding_repr.last_hidden_state[batch_idx,:s_len] + if per_residue: + results["per_res_representations"][identifier] = \ + emb.detach().cpu().numpy().squeeze() + if per_protein: + protein_emb = emb.mean(dim=0) + results["mean_representations"][identifier] = \ + protein_emb.detach().cpu().numpy().squeeze() + + return results + +def save_embeddings(sequences, embeddings, embeddings_directory, embedding_type="mean"): + """ + Saving embeddings to PT files for later use. + + sequences - DICT with sequence ids as keys and sequences themselves + as values + embeddings - DICT with generated embeddings for each sequence + embeddings_directory - STRING that determines the path to directory for embeddings + embedding_type - STRING that determines, which type of embeddings to save + """ + embedding_type_key = embedding_type+"_representations" + for seq_id in list(sequences.keys()): + seq_data = {"label": seq_id} + if(seq_id in embeddings[embedding_type_key].keys()): + seq_data["sequence"] = sequences[seq_id] + seq_data[embedding_type_key] = torch.from_numpy( + embeddings[embedding_type_key][seq_id]) + seq_code = sha256(sequences[seq_id].encode('utf-8')).hexdigest() + torch.save(seq_data, f"{embeddings_directory}/{embedding_type}_{seq_code}.pt") + +def print_embeddings_generation_stats(iteration, portion_size, embeddings, + seqs_wo_emb, start_time, end_time): + """ + Printing embeddings generation statistics. + + iteration - INT index of the iteration (indexing from zero) + portion_size - INT size of the processed portion + embeddings - DICT with keys 'mean_representations' and 'per_res_representations' + seqs_wo_emb - DICT with a portion of sequence ids as keys and amino acid sequences as values + start_time - datetime object of the beginning of embeddings' generation + end_time - datetime object of the end of embeddings' generation + """ + print(f"Portion {int(iteration/portion_size)+1}.", file=sys.stderr) + print(f"{len(embeddings['mean_representations'].keys())}/{len(list(seqs_wo_emb.keys()))}: "+\ + "sequences with generated mean embeddings", + file=sys.stderr) + print(f"{len(embeddings['per_res_representations'].keys())}/{len(list(seqs_wo_emb.keys()))}: "+\ + "sequences with generated per-residue embeddings", + file=sys.stderr) + print("%s: time to generate embeddings" % (end_time - start_time), + file=sys.stderr) + print("%s: time to generate embeddings per protein" % ((end_time - \ + start_time)/len(embeddings["mean_representations"])), + file=sys.stderr) diff --git a/scripts/data_process.py b/scripts/data_process.py new file mode 100644 index 0000000000000000000000000000000000000000..311dd8751af24941e284bc5b40055994ea6a5b7b --- /dev/null +++ b/scripts/data_process.py @@ -0,0 +1,134 @@ +""" +Process the data set before the inference process. +""" + +import numpy +import torch +from hashlib import sha256 +from os import path + +def get_sequences_without_embeddings(sequences, emb_dir, per_res=False): + """ + Collecting sequences that do not have generated embeddings. + + sequences - DICT of all sequences in the input (keys are sequence ids, + values are protein sequences + emb_dir - STRING that defines the directory where embeddings are saved + per_res - BOOL that determines whether per-residue embeddings are needed + + returns DICT with sequences that lack embeddings + """ + seqs_wo_emb = {} + for seq_id in list(sequences.keys()): + seq_code = sha256(sequences[seq_id].encode('utf-8')).hexdigest() + if(not path.exists(f"{emb_dir}/mean_{seq_code}.pt")): + seqs_wo_emb[seq_id] = sequences[seq_id] + if(per_res and not path.exists(f"{emb_dir}/per_res_{seq_code}.pt")): + seqs_wo_emb[seq_id] = sequences[seq_id] + return seqs_wo_emb + +def collect_mean_embeddings(sequences, embeddings, emb_dir, input_size=1024): + """ + Collecting mean embeddings into a dictionary. + + sequences - DICT of all sequences in the input (keys are sequence ids, + values are protein sequences + embeddings - DICT with generated embeddings. Keys are "mean_representations" + and "per_res_representations", which have [DICT] values, which keys are + sequence ids and values are embeddings torch tensor + emb_dir - STRING that determines the path to the embeddings 'cache' + directory + input_size - INT that notes the dimension of each embeddings vector + + returns DICT with keys "x_test" (values are embeddings tensors) and + "y_test" (values are (irrelevant) temperature labels) + """ + dataset = {} + dataset['y_test'] = torch.tensor((), dtype=torch.int32) + for i, seq_id in enumerate(sequences): + if(emb_dir and path.exists(emb_dir)): + # Loading sequences from cache + embedding = torch.load("%s/mean_%s.pt" % (emb_dir, + sha256(sequences[seq_id].encode('utf-8')).hexdigest()))["mean_representations"] + else: + # Taking freshly-generated embeddings + embedding = torch.from_numpy(embeddings["mean_representations"][seq_id]) + if(i): + dataset["x_test"] = torch.vstack((dataset["x_test"], torch.flatten(embedding))) + else: + dataset["x_test"] = torch.reshape(embedding, (1, input_size)) + dataset["y_test"] = torch.cat((dataset["y_test"], torch.tensor([999]).int()), 0) + return dataset + +def collect_per_res_embeddings(sequences, original_sequences, embeddings, emb_dir, + input_size=1024, smoothen=False, window_size=21): + """ + Collecting per-residue embeddings into a dictionary. + + sequences - DICT of all sequences in the input (keys are sequence ids, + values are protein sequences + embeddings - DICT with generated embeddings. Keys are "mean_representations" + and "per_res_representations", which have [DICT] values, which keys are + sequence ids and values are embeddings torch tensor + emb_dir - STRING that determines the path to the embeddings 'cache' + directory + input_size - INT that notes the dimension of each embeddings vector + smoothen - BOOL indicates whether to make average smoothing of embeddings + + returns DICT with keys "x_test" (values are embeddings tensors) and + "y_test" (values are fake temperature labels) + """ + dataset = {} + dataset['y_test'] = torch.tensor((), dtype=torch.int32) + dataset['z_test'] = {} + + for i, seq_id in enumerate(sequences): + + iterations_for_seq = len(sequences[seq_id]) + + if(emb_dir and path.exists(emb_dir)): + embedding = torch.load("%s/per_res_%s.pt" % (emb_dir, + sha256(sequences[seq_id].encode('utf-8')).hexdigest()))["per_res_representations"] + else: + # Taking freshly-generated embeddings + embedding = torch.from_numpy(embeddings["per_res_representations"][seq_id]) + + for j in range(iterations_for_seq): + if(i == 0 and j == 0): + dataset["x_test"] = torch.reshape(embedding[j], (1, input_size)) + else: + dataset["x_test"] = torch.vstack((dataset["x_test"], torch.flatten(embedding[j]))) + if(not smoothen): dataset["y_test"] = torch.cat((dataset["y_test"], torch.tensor([999]).int()), 0) + if(not smoothen): dataset["z_test"]['%s_%d' % (seq_id, j)] = original_sequences[seq_id][j] + + if(smoothen): + WINDOW_SIZE = window_size + smoothened_seqs = {} + j = 0 + while(j < iterations_for_seq-WINDOW_SIZE+1): + smoothened_embedding = dataset["x_test"][range(j, j+WINDOW_SIZE)].mean(dim=0) + if(not j and not i): + smoothened_embeddings = smoothened_embedding + else: + smoothened_embeddings = torch.vstack((smoothened_embeddings, smoothened_embedding)) + dataset['z_test']['%s_%d-%d' % (seq_id, j, j+WINDOW_SIZE)] = ''.join(original_sequences[seq_id][j:j+WINDOW_SIZE]) + dataset["y_test"] = torch.cat((dataset["y_test"], torch.tensor([999]).int()), 0) + j += 1 + + if(smoothen): dataset["x_test"] = smoothened_embeddings + return dataset + +def load_tensor_from_NPZ(NPZ_file, keywords): + """ + Loading embeddings from file to dictionary. + + NPZ_file - STRING path to the NPZ file + keywords - LIST with keywords to identify which subset of file to load + + returns DICT with keys as given keywords, values in tensors + """ + dataset = {} + with numpy.load(NPZ_file, allow_pickle=True) as data_loaded: + for i in range(len(keywords)): + dataset[keywords[i]] = torch.from_numpy(data_loaded[keywords[i]]) + return dataset diff --git a/scripts/makefile b/scripts/makefile new file mode 100644 index 0000000000000000000000000000000000000000..e59a5cb32c3abc081d83b801aa223582af19d616 --- /dev/null +++ b/scripts/makefile @@ -0,0 +1,39 @@ +# Makefile to test TemStaPro program. + +MAKEFILE_DIR := $(dir $(lastword $(MAKEFILE_LIST))) + +TEST_DIR = $(MAKEFILE_DIR)tests + +INPUT_TEST_DIR = ${TEST_DIR}/cases + +OUTPUT_TEST_DIR = ${TEST_DIR}/outputs + +TEST_CASE_SCRIPTS = $(sort $(wildcard ${INPUT_TEST_DIR}/*.sh)) +TEST_CASE_OUTPUTS = ${TEST_CASE_SCRIPTS:${INPUT_TEST_DIR}/%.sh=${OUTPUT_TEST_DIR}/%.out} +TEST_CASE_DIFFS = ${TEST_CASE_SCRIPTS:${INPUT_TEST_DIR}/%.sh=${OUTPUT_TEST_DIR}/%.diff} + +PT_FILES = $(wildcard ${OUTPUT_TEST_DIR}/*.pt) +SVG_FILES = $(wildcard ${OUTPUT_TEST_DIR}/*.svg) + +.PHONY: all test check tests checks clean distclean mostlyclean cleanAll + +all: tests + +.PHONY: display + +display: + @echo ${TEST_CASE_DIFFS} + +test tests: ${TEST_CASE_DIFFS} + +${OUTPUT_TEST_DIR}/%.diff: ${INPUT_TEST_DIR}/%.sh ${OUTPUT_TEST_DIR}/%.out + @$< 2>&1 | sed 's/at \(.*\) line [0-9][0-9]*\./at \1 line 999\./' | \ + sed 's/\(.*\): beginning/2000-01-01: beginning/' | \ + sed 's/\(.*\): finished/2000-01-01: finished/' | \ + sed 's/\(.*\): time to/0:00:00.0001: time to/' | diff - $(word 2,$^) | tee $@ + @if [ -s $@ ]; then echo "Test $< did not pass:"; cat $@; else echo "Test $< passed."; fi + +clean: + rm -f ${TEST_CASE_DIFFS} + rm ${PT_FILES} + rm ${SVG_FILES} diff --git a/scripts/results.py b/scripts/results.py new file mode 100644 index 0000000000000000000000000000000000000000..1f4ff347b82764f8054524d679e215cc0b8e316c --- /dev/null +++ b/scripts/results.py @@ -0,0 +1,244 @@ +""" +Representing the output of the program. +""" + +import numpy +import matplotlib.pyplot as plt + +def get_temperature_label(predictions, temperature_ranges, left_hand=True): + """ + Process the raw output of the inference model to get temperature range + labels. + + predictions - LIST that contains predictions for each temperature range + temperature_ranges - LIST with temperature ranges' labels + left_hand - BOOLEAN that indicates to find the left-hand + (True) or right-hand (False) limit + + returns STRING that is the label of the limiting temperature range + """ + if(left_hand): + for j, pred in enumerate(predictions): + if(float(pred) < 0.5): + return temperature_ranges[j] + elif(float(pred) >= 0.5 and j != len(predictions)-1): + continue + else: + return temperature_ranges[-1] + else: + for j, pred in enumerate(predictions[::-1]): + if(float(pred) >= 0.5): + return temperature_ranges[len(predictions)-j] + elif(float(pred) < 0.5 and j != len(predictions)-1): + continue + else: + return temperature_ranges[0] + +def detect_clash(predictions, left_hand=True): + """ + Detecting the conflicting predictions of the ensemble. + + predictions - LIST that contains predictions for each temperature range + left_hand - BOOLEAN that indicates to find the clash from left-hand + (True) or right-hand (False) + + returns STRING '-' if clash was not detected, '*' if it was + """ + if(left_hand): + for j, pred in enumerate(predictions): + if(j and round(float(predictions[j-1])) < + round(float(predictions[j]))): + return "*" + elif(j and round(float(predictions[j-1])) >= + round(float(predictions[j])) and j != len(predictions)-1): + continue + elif(j and round(float(predictions[j-1])) >= + round(float(predictions[j])) and j == len(predictions)-1): + return "-" + elif(len(predictions) == 1): + return "-" + + else: + for j, pred in enumerate(predictions[::-1]): + if(j != len(predictions)-1 and round(float(predictions[j-1])) < + round(float(predictions[j]))): + return "*" + elif(j != len(predictions)-1 and round(float(predictions[j-1])) >= + round(float(predictions[j])) and j != len(predictions)-2): + continue + elif(j != len(predictions)-1 and round(float(predictions[j-1])) >= + round(float(predictions[j])) and j == len(predictions)-2): + return "-" + elif(len(predictions) == 1): + return "-" + +def print_inferences_header(file_handle, thresholds, + print_thermophilicity=False): + """ + Print inferences table header. + + file_handle - FILE to which the results will be printed + thresholds - LIST of thresholds that are used + print_thermophilicity - BOOLEAN that determines whether to print the + thermophilicity column + """ + + predictions_columns_names = "" + for threshold in thresholds: + predictions_columns_names += f"t{threshold}_binary\tt{threshold}_raw\t" + + header = f"protein_id\tposition\tsequence\tlength\t{predictions_columns_names}"+\ + f"left_hand_label\tright_hand_label\tclash" + if(print_thermophilicity): header += "\tthermophilicity" + + print(header, file=file_handle) + +def print_inferences(averaged_inferences, binary_inferences, original_headers, + labels, clashes, thermophilicity_labels, file_handle, sequences=None, + run_mode='mean', print_thermophilicity=False): + """ + Print results. + + averaged_inferences - LIST of DICT that keeps each sequence's mean inferences + binary_inferences - LIST of DICT that keeps each sequence's binary inferences + original_headers - DICT of original sequences' headers for printing + labels - LIST of DICT that keeps each sequence's left-hand and right-hand + temperature prediction labels + clashes - LIST of DICT that keeps each sequence's clash labels + thermophilicity_labels - DICT with possible thermophilicity labels + sequences - LIST of DICT that keeps sequence ids as keys and sequences as values + file_handle - FILE to which the results will be printed + run_mode - STRING that determines which run mode is executed: + 'mean', 'per-res', 'per-segment' + print_thermophilicity - BOOLEAN that determines to print the + thermophilicity column + """ + + if(sequences is None): return + + for proc_header in averaged_inferences.keys(): + merged_inferences = [] + for i, inf in enumerate(binary_inferences[proc_header]): + merged_inferences.append("%d" % binary_inferences[proc_header][i]) + merged_inferences.append("%.3e" % averaged_inferences[proc_header][i]) + + # Setting the default values for run_mode 'mean' + if(run_mode == "mean"): + out_header = original_headers[proc_header] + position = '-' + elif(run_mode == "per-segment"): + out_header = original_headers["_".join(proc_header.split("_")[0:-1])] + pos_range = proc_header.split("_")[-1].split("-") + range_length = int(pos_range[1])-int(pos_range[0]) + + # Calculating the position (numerated from 1) + position = str(int(pos_range[0])+int(range_length/2)+1) + elif(run_mode == "per-res"): + out_header = original_headers["_".join(proc_header.split("_")[0:-1])] + position = str(int(proc_header.split("_")[-1])+1) + + output_line = "%s\t%s\t%s\t%d\t%s\t%s\t%s" % (out_header, position, + sequences[proc_header], + len(sequences[proc_header]), "\t".join(merged_inferences), + "\t".join(labels[proc_header]), clashes[proc_header][0]) + + # Choosing the thermophilicity label + if(print_thermophilicity): + thermophilicity = "undetermined" + if(labels[proc_header][0] == labels[proc_header][1]): + for t in list(thermophilicity_labels.keys()): + if(labels[proc_header][0] in thermophilicity_labels[t]): + thermophilicity = t + break + output_line += f"\t{thermophilicity}" + + print(output_line, file=file_handle) + +def plot_per_res_inferences(averaged_inferences, thresholds, plot_dir, + smoothen=True, window_size=21, x_label="residue index", + title="Per-residue predictions"): + """ + Plotting per-residue inferences. + + averaged_inferences - DICT that keeps each sequence's inferences + (averaged of all threshold models)) + thresholds - LIST with binary models' temperature thresholds + plot_dir - STRING that determines the directory where plots should + be saved + smoothen - BOOL indicates to plot smoothened curve + """ + WINDOW_SIZE = window_size + + original_seq_ids = set() + for seq_id in averaged_inferences.keys(): + original_seq_ids.add("_".join(seq_id.split("_")[0:-1])) + original_seq_ids = list(original_seq_ids) + + offset = 0 + for or_seq_id in sorted(original_seq_ids): + x_values = [] + y_values = [] + + # Python3.7+: DICT has the keys sorted by the insertion order + for i, seq_id in enumerate(list(averaged_inferences.keys())): + if(or_seq_id == "_".join(seq_id.split("_")[0:-1])): + x_values.append(i-offset) + y_values.append(averaged_inferences[seq_id]) + + y_values = numpy.array(y_values).T + + for i, threshold in enumerate(thresholds): + plt.figure(f"t{threshold} models' per-residue inferences for {seq_id}") + color = "lightgrey" if(smoothen) else "navy" + plt.plot(x_values, y_values[i], linewidth=1, color=color) + plt.xlabel(x_label) + plt.ylabel("prediction") + plt.title(f"{title} of {or_seq_id} using threshold {threshold}", wrap=True) + plt.ylim(bottom=0, top=1) + j = 0 + y_smoothened_values = [] + + if(smoothen): + while j < len(y_values[i])-WINDOW_SIZE+1: + window_average = round(numpy.sum( + y_values[i][j:j+WINDOW_SIZE])/WINDOW_SIZE, 2) + + y_smoothened_values.append(window_average) + j += 1 + + plt.plot(x_values[int(WINDOW_SIZE/2):-int(WINDOW_SIZE/2)], + y_smoothened_values, linewidth=1, color="navy") + + plt.savefig(f"{plot_dir}/{or_seq_id}_per_residue_plot_t{threshold}.svg", format="svg") + + offset += len(x_values) + +def plot_inferences(per_res_out, per_segment_out, averaged_inferences, thresholds, plot_dir, + window_size, segment_size, smoothen): + """ + Deciding and calling, which inferences to plot. + + per_res_out - STRING or None to determine whether per-residue predictions + are required + per_segment_out - STRING or None to determine whether per-segment + predictions are required + averaged_inferences - DICT that keeps each sequence's inferences + (averaged of all threshold models)) + thresholds - LIST with binary models' temperature thresholds + plot_dir - STRING that determines the directory where plots should + be saved + window_size - INT of the window size for curve smoothening + segment_size - INT of the segment size of combined residues + smoothen - BOOL indicates to plot smoothened curve + """ + if(plot_dir is None): return + if(per_res_out): + plot_per_res_inferences(averaged_inferences, thresholds, + plot_dir, window_size=window_size) + + if(per_segment_out): + plot_per_res_inferences(averaged_inferences, thresholds, + plot_dir, smoothen=smoothen, + window_size=window_size, + x_label=f"segment (k={segment_size}) index", + title="Per-segment predictions") diff --git a/scripts/temstapro b/scripts/temstapro new file mode 100644 index 0000000000000000000000000000000000000000..decdea21dd7f6dd87481ff8b6fbfbb0185352c36 --- /dev/null +++ b/scripts/temstapro @@ -0,0 +1,308 @@ +#!/usr/bin/env python3 + +# Program that makes thermostability predictions + +from optparse import OptionParser +from datetime import datetime +import sys +import os +import numpy +from torch.utils.data import DataLoader +from torch.utils.data import TensorDataset +import torch + +PARAMETERS = { + "PT_MODEL_PATH": "Rostlab/prot_t5_xl_half_uniref50-enc", + "DATASET": "major", + "EMB_TYPE": "mean", + "CLASSIFIER_TYPE": "imbal", + "THRESHOLDS": { + ":(40-65]:": ["40", "45", "50", "55", "60", "65"], + ":(40-80]:": ["40", "45", "50", "55", "60", "65", "70", "75", "80"], + }, + "SEEDS": ["1", "2", "3", "4", "5"], + "INPUT_SIZE": 1024, + "HIDDEN_LAYER_SIZES": [256, 128], + "DEVICE": torch.device("cuda:0" if torch.cuda.is_available() else "cpu"), + "THRESHOLDS_RANGE": ":(40-65]:", + "TEMPERATURE_RANGES": { + ":(40-65]:": ["<40", "[40-45)", "[45-50)", "[50-55)", "[55-60)", + "[60-65)", "65<="], + ":(40-80]:": ["<40", "[40-45)", "[45-50)", "[50-55)", "[55-60)", + "[60-65)", "[65-70)", "[70-75)", "[75-80)", "80<="], + }, + "THERMOPHILICITY_LABELS": { + "mesophilic": ["<40", "[40-45)", "<45"], + "thermophilic": ["[45-50)", "[50-55)", "[55-60)", "[60-65)", + "65<=", "[65-70)", "[70-75)", "<75"], + "hyperthermophilic": ["[75-80)", "80<="] + }, + "PRINT_THERMOPHILICITY": { + ":(40-65]:": False, + ":(40-80]:": True + } +} + +SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) +PROJECT_DIR = os.path.dirname(SCRIPT_DIR) + +parser = OptionParser() + +parser.add_option("--input-fasta", "-f", dest="fasta", + default=None, help="path to the input FASTA file.") + +parser.add_option("--embeddings-dir", "-e", dest="emb_dir", + default=None, help="path to the directory to which embeddings "+\ + "files will be saved (cache).") + +parser.add_option("--PT-directory", "-d", dest="pt_dir", + default=None, help="path to the directory of ProtTrans model.") + +parser.add_option("--temstapro-directory", "-t", dest="tsp_dir", + default=PROJECT_DIR, help="path to the directory of TemStaPro program "+\ + "with its dependencies.") + +parser.add_option("--more-thresholds", dest="more_thresholds", + action="store_true", help="option for the mode that outputs "+\ + "additional predictions for upper temperature thresholds and the "+\ + "thremophilicity label") + +parser.add_option("--mean-output", dest="mean_out", + default=None, help="path to the output TSV file with mean predictions. "+\ + "Predictions made from the mean embeddings are always printed to STDOUT."+\ + " If this option is given, the output is directed to the given file") + +parser.add_option("--per-res-output", dest="per_res_out", + default=None, help="path to the output TSV file with per-residue "+\ + "predictions.") + +parser.add_option("--per-segment-output", dest="per_segment_out", + default=None, help="path to the output TSV file with per-residue "+\ + "predictions made for each segment of the sequence.") + +parser.add_option("--segment-size", dest="segment_size", + default=41, help="option to set the window size for average smoothening "+\ + "of per residue embeddings ('per-segment-output' option). Default: 41.") + +parser.add_option("--window-size-predictions", "-w", + dest="window_size_predictions", + default=81, help="option to set the window size for average smoothening "+\ + "of per residue predictions for plotting (option for 'per-res-output' "+\ + "and 'per-segment-output'). Default: 81.") + +parser.add_option("--per-residue-plot-dir", "-p", dest="plot_dir", + default=None, help="path to the directory to which inferences "+\ + "plots will be saved (option for 'per-res-output' and "+\ + "'per-res-segment-output' modes. Default: './'.") + +parser.add_option("--curve-smoothening", "-c", dest="curve_smoothening", + default=False, action="store_true", + help="option for 'per-segment-output' run mode, which adjusts the "+\ + "plot by making an additional smoothening of the curve.") + +parser.add_option("--portion-size", dest="portion_size", + default=1000, + help="option to set the portions', into which to divide the input "+\ + "of sequences, maximum size. If no division is needed, set the "+\ + "option to 0. Default: 1000.") + +parser.add_option("--version", "-v", dest="version", + default=False, action="store_true", + help="print version of the program and exit.") + +(options, args) = parser.parse_args() + +if(options.version): + print(f"TemStaPro 0.2.{int(os.popen('git rev-list --count HEAD').read().strip())-61}") + exit() + +options.window_size_predictions = int(options.window_size_predictions) +options.segment_size = int(options.segment_size) +if(options.more_thresholds): PARAMETERS['THRESHOLDS_RANGE'] = ":(40-80]:" + +try: + assert (options.fasta != None), f"{sys.argv[0]}: a FASTA file is required." +except AssertionError as message: + print(message, file=sys.stderr) + exit() + +try: + assert (options.pt_dir != None), ( + f"{sys.argv[0]}: a path to the ProtTrans model location is required." + ) +except AssertionError as message: + print(message, file=sys.stderr) + exit() + +temstapro_dir = os.path.abspath(options.tsp_dir) +PARAMETERS["CLASSIFIERS_DIR"] = os.path.join(temstapro_dir, "weight") + +# Importing local modules + +sys.path.append(os.path.join(temstapro_dir, "scripts")) +sys.path.append(os.path.join(temstapro_dir, "model")) + +import prottrans_models +import data_process +import model_flow +import results + +# Standardization of the FASTA file +(sequences, orig_headers, orig_seqs) = prottrans_models.process_FASTA(options.fasta) + +# Loading the ProtTrans model +print("%s: beginning to load the model " % datetime.now(), file=sys.stderr) + +pt_model, tokenizer = prottrans_models.load_model_and_tokenizer(options.pt_dir, + PARAMETERS["PT_MODEL_PATH"]) + +print("%s: finished loading the model" % datetime.now(), file=sys.stderr) + +# Dividing sequences into portions +options.portion_size = int(options.portion_size) +if(options.portion_size == 0): options.portion_size = len(sequences) + +per_res_mode = (options.per_res_out or options.per_segment_out) + +for i in range(0, len(list(sequences.keys())), options.portion_size): + portion_keys = list(sequences.keys())[i:i+options.portion_size] + + sequences_portion = {} + for key in portion_keys: + sequences_portion[key] = sequences[key] + + # Check which sequences do not have embeddings generated + if(options.emb_dir and os.path.exists(options.emb_dir)): + seqs_wo_emb_portion = data_process.get_sequences_without_embeddings( + sequences_portion, options.emb_dir, per_res=per_res_mode) + else: + seqs_wo_emb_portion = sequences_portion + + embeddings = {} + per_res_dataset = {} + per_res_sequences_portion = {} + + if(len(seqs_wo_emb_portion)): + gen_emb_start = datetime.now() + print(f"{datetime.now()}: beginning to generate embeddings", file=sys.stderr) + + # Generating embeddings + embeddings = prottrans_models.get_embeddings(pt_model, tokenizer, + seqs_wo_emb_portion, + per_residue=per_res_mode, + per_protein=True) + + gen_emb_end = datetime.now() + + # If cache given, save embeddings + if(options.emb_dir and os.path.exists(options.emb_dir)): + if(per_res_mode): + prottrans_models.save_embeddings(seqs_wo_emb_portion, embeddings, + options.emb_dir, "per_res") + prottrans_models.save_embeddings(seqs_wo_emb_portion, embeddings, + options.emb_dir, "mean") + elif(options.emb_dir and not os.path.exists(options.emb_dir)): + print("The given directory (option -e) does not exist, "+\ + "embeddings' PT files will not be saved.", file=sys.stderr) + + try: + prottrans_models.print_embeddings_generation_stats(i, + options.portion_size, embeddings, seqs_wo_emb_portion, + gen_emb_start, gen_emb_end) + except ZeroDivisionError: + print(f"{sys.argv[0]}: no embeddings were generated.", file=sys.stderr) + sys.exit(1) + + # Collecting the required type of embeddings + dataset = data_process.collect_mean_embeddings(sequences_portion, + embeddings=embeddings, emb_dir=options.emb_dir, + input_size=PARAMETERS["INPUT_SIZE"]) + + if(options.per_res_out): + per_res_dataset = data_process.collect_per_res_embeddings(sequences_portion, + orig_seqs, embeddings=embeddings, emb_dir=options.emb_dir, + input_size=PARAMETERS["INPUT_SIZE"]) + per_res_sequences_portion = per_res_dataset["z_test"] + elif(options.per_segment_out): + per_res_dataset = data_process.collect_per_res_embeddings(sequences_portion, + orig_seqs, embeddings=embeddings, + emb_dir=options.emb_dir, input_size=PARAMETERS["INPUT_SIZE"], smoothen=True, + window_size=options.segment_size) + per_res_sequences_portion = per_res_dataset["z_test"] + + test_loader, per_res_test_loader = model_flow.prepare_data_loaders([ + dataset, per_res_dataset], 'test') + + print("%s: beginning to make inferences" % datetime.now(), + file=sys.stderr) + + averaged_inferences, binary_inferences, labels, clashes = model_flow.make_inferences( + sequences_portion, per_res_sequences_portion, test_loader, + per_res_test_loader, PARAMETERS, PARAMETERS["THRESHOLDS_RANGE"]) + + print("%s: finished making inferences" % datetime.now(), file=sys.stderr) + + # Processing results + for j, loader in enumerate([test_loader, per_res_test_loader]): + if(loader is None): break + for seq in averaged_inferences[j].keys(): + labels[j][seq].append(results.get_temperature_label( + averaged_inferences[j][seq], + PARAMETERS["TEMPERATURE_RANGES"][PARAMETERS["THRESHOLDS_RANGE"]], left_hand=True)) + labels[j][seq].append(results.get_temperature_label( + averaged_inferences[j][seq], + PARAMETERS["TEMPERATURE_RANGES"][PARAMETERS["THRESHOLDS_RANGE"]], left_hand=False)) + clashes[j][seq].append(results.detect_clash(averaged_inferences[j][seq], + left_hand=True)) + + # Processing printing of mean predictions + if(options.mean_out): + os.system(f"mkdir -p {os.path.dirname(options.mean_out)}") + f_mean = open(options.mean_out, "w") if i == 0 else open(options.mean_out, "a") + else: + f_mean = sys.stdout + + if(i == 0): results.print_inferences_header(f_mean, + PARAMETERS["THRESHOLDS"][PARAMETERS["THRESHOLDS_RANGE"]], + PARAMETERS["PRINT_THERMOPHILICITY"][PARAMETERS["THRESHOLDS_RANGE"]]) + + results.print_inferences(averaged_inferences[0], binary_inferences[0], + orig_headers, labels[0], clashes[0], + PARAMETERS["THERMOPHILICITY_LABELS"], f_mean, orig_seqs, + "mean", PARAMETERS["PRINT_THERMOPHILICITY"][PARAMETERS["THRESHOLDS_RANGE"]]) + + # Printing per-residue inferences + if(options.per_res_out): + os.system(f"mkdir -p {os.path.dirname(options.per_res_out)}") + f_per_res = open(options.per_res_out, "w") if i == 0 else open(options.per_res_out, "a") + if(i == 0): results.print_inferences_header(f_per_res, + PARAMETERS["THRESHOLDS"][PARAMETERS["THRESHOLDS_RANGE"]], + PARAMETERS["PRINT_THERMOPHILICITY"][PARAMETERS["THRESHOLDS_RANGE"]]) + + results.print_inferences(averaged_inferences[1], binary_inferences[1], + orig_headers, labels[1], + clashes[1], PARAMETERS["THERMOPHILICITY_LABELS"], + f_per_res, per_res_sequences_portion, "per-res", + PARAMETERS["PRINT_THERMOPHILICITY"][PARAMETERS["THRESHOLDS_RANGE"]]) + elif(options.per_segment_out): + os.system(f"mkdir -p {os.path.dirname(options.per_segment_out)}") + f_per_res = open(options.per_segment_out, "w") if i == 0 else open(options.per_segment_out, "a") + if(i == 0): results.print_inferences_header(f_per_res, + PARAMETERS["THRESHOLDS"][PARAMETERS["THRESHOLDS_RANGE"]], + PARAMETERS["PRINT_THERMOPHILICITY"][PARAMETERS["THRESHOLDS_RANGE"]]) + + results.print_inferences(averaged_inferences[1], binary_inferences[1], + orig_headers, labels[1], + clashes[1], PARAMETERS["THERMOPHILICITY_LABELS"], f_per_res, + per_res_sequences_portion, "per-segment", + PARAMETERS["PRINT_THERMOPHILICITY"][PARAMETERS["THRESHOLDS_RANGE"]]) + + # Plotting inferences + if(options.plot_dir): + os.system(f"mkdir -p {options.plot_dir}") + results.plot_inferences( + options.per_res_out, options.per_segment_out, + averaged_inferences[1], + PARAMETERS["THRESHOLDS"][PARAMETERS["THRESHOLDS_RANGE"]], options.plot_dir, + options.window_size_predictions, options.segment_size, + options.curve_smoothening) diff --git a/scripts/temstapro_launcher.py b/scripts/temstapro_launcher.py new file mode 100644 index 0000000000000000000000000000000000000000..cbb26a1fc6e4d2603317a2ae758d5fd35528f821 --- /dev/null +++ b/scripts/temstapro_launcher.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python3 + +import os +import runpy + +SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) +runpy.run_path(os.path.join(SCRIPT_DIR, "temstapro"), run_name="__main__") diff --git a/scripts/tests/cases/temstapro_001.sh b/scripts/tests/cases/temstapro_001.sh new file mode 100644 index 0000000000000000000000000000000000000000..5f1c4818271fd96f8b9acd2020b2b17f4610ee74 --- /dev/null +++ b/scripts/tests/cases/temstapro_001.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +# Testing case with replaced symbols of the sequence + +python scripts/temstapro -f scripts/tests/data/replaced_symbol_sequence.fasta -e './scripts/tests/outputs/' \ + -d './ProtTrans/' --per-res-output ./scripts/tests/outputs/001_mean.tmp + +rm -f ./scripts/tests/outputs/001_mean.tmp + diff --git a/scripts/tests/cases/temstapro_002.sh b/scripts/tests/cases/temstapro_002.sh new file mode 100644 index 0000000000000000000000000000000000000000..b7fd40bd8c6e20626d695eb988d2bc57874a8398 --- /dev/null +++ b/scripts/tests/cases/temstapro_002.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +# Testing passing FASTA sequence as '-f' option and embeddings generation with +# cache + +python scripts/temstapro -f ./scripts/tests/data/long_sequence_2.fasta -e 'scripts/tests/outputs/' -d './ProtTrans/' \ + --mean-out scripts/tests/outputs/002.tmp + +rm -f scripts/tests/outputs/mean_52ae55d4fc194abf0e65abc9d740ffc7f84972ddacefb62e931131655083857e.pt + +rm -f scripts/tests/outputs/002.tmp diff --git a/scripts/tests/cases/temstapro_003.sh b/scripts/tests/cases/temstapro_003.sh new file mode 100644 index 0000000000000000000000000000000000000000..02bb50086613751c86fcc7a5f90eff5b8b35cf29 --- /dev/null +++ b/scripts/tests/cases/temstapro_003.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +# Testing handling of an empty input + +python scripts/temstapro -d './ProtTrans/' diff --git a/scripts/tests/cases/temstapro_004.sh b/scripts/tests/cases/temstapro_004.sh new file mode 100644 index 0000000000000000000000000000000000000000..d3d2fd8b628abcf3f1b98d76c54802ee18e70601 --- /dev/null +++ b/scripts/tests/cases/temstapro_004.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +# Testing downloading of the ProtTrans model + +rm -f ./ProtTrans/* + +python scripts/temstapro -f ./scripts/tests/data/long_sequence_2.fasta \ + -e 'scripts/tests/outputs' -d './ProtTrans/' --mean-out scripts/tests/outputs/004.tmp + +rm -f scripts/tests/outputs/mean_52ae55d4fc194abf0e65abc9d740ffc7f84972ddacefb62e931131655083857e.pt +rm -f scripts/tests/outputs/004.tmp diff --git a/scripts/tests/cases/temstapro_005.sh b/scripts/tests/cases/temstapro_005.sh new file mode 100644 index 0000000000000000000000000000000000000000..3a528a6041f780b7f7f50d10c318690dbb531bec --- /dev/null +++ b/scripts/tests/cases/temstapro_005.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +# Testing passing multiple FASTA sequences + +rm -f scripts/tests/outputs/mean_5d817ae8188e00eca8913c80312e2669d6551777fbed0d1764e1c09386638c0a.pt +rm -f scripts/tests/outputs/mean_adc7fcd839ba2802998088a0c7b2310d3abdef0229cc020c55fcb82a492c2d8d.pt +rm -f scripts/tests/outputs/mean_c425721d82cb786570760210076eaa21403b210aa6566882a41c4ac70df2defd.pt + +python scripts/temstapro -f ./scripts/tests/data/multiple_sequences.fasta -e scripts/tests/outputs/ -d './ProtTrans/' diff --git a/scripts/tests/cases/temstapro_006.sh b/scripts/tests/cases/temstapro_006.sh new file mode 100644 index 0000000000000000000000000000000000000000..9a759d693a977101fdfb1ffa57b010ddad1fc833 --- /dev/null +++ b/scripts/tests/cases/temstapro_006.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +# Testing making per-residue inferences + +rm -f scripts/tests/outputs/mean_b6f8b4d2f6602ee040278b1d64ab7cf588baa33d74a126030e252fd91ac00601.pt +rm -f scripts/tests/outputs/per_res_b6f8b4d2f6602ee040278b1d64ab7cf588baa33d74a126030e252fd91ac00601.pt + +python scripts/temstapro -f scripts/tests/data/long_sequence.fasta -e './scripts/tests/outputs/' \ + -d './ProtTrans/' --mean-output ./scripts/tests/outputs/006_mean.tmp \ + --per-segment-output ./scripts/tests/outputs/006_per_res_smooth.tmp \ + -c --segment-size 41 --window-size-predictions 81 -p './scripts/tests/outputs/' + +rm -f ./scripts/tests/outputs/006_mean.tmp +rm -f ./scripts/tests/outputs/006_per_res_smooth.tmp diff --git a/scripts/tests/cases/temstapro_007.sh b/scripts/tests/cases/temstapro_007.sh new file mode 100644 index 0000000000000000000000000000000000000000..c004a494f070f9e61720fdc77603060a5a4f22d3 --- /dev/null +++ b/scripts/tests/cases/temstapro_007.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +# Testing passing loading sequences' embeddings from cache + +rm -f scripts/tests/outputs/mean_5d817ae8188e00eca8913c80312e2669d6551777fbed0d1764e1c09386638c0a.pt +rm -f scripts/tests/outputs/mean_adc7fcd839ba2802998088a0c7b2310d3abdef0229cc020c55fcb82a492c2d8d.pt +rm -f scripts/tests/outputs/mean_c425721d82cb786570760210076eaa21403b210aa6566882a41c4ac70df2defd.pt + +python scripts/temstapro -f ./scripts/tests/data/multiple_sequences.fasta -e scripts/tests/outputs/ -d './ProtTrans/' + +python scripts/temstapro -f ./scripts/tests/data/multiple_sequences.fasta -e scripts/tests/outputs/ -d './ProtTrans/' + diff --git a/scripts/tests/cases/temstapro_008.sh b/scripts/tests/cases/temstapro_008.sh new file mode 100644 index 0000000000000000000000000000000000000000..4836b8ae2ccf31864fbf934ac1ebc35405f3d48a --- /dev/null +++ b/scripts/tests/cases/temstapro_008.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +# Testing passing multiple FASTA sequences and not saving to cache + +python scripts/temstapro -f ./scripts/tests/data/multiple_sequences.fasta -d './ProtTrans/' diff --git a/scripts/tests/cases/temstapro_009.sh b/scripts/tests/cases/temstapro_009.sh new file mode 100644 index 0000000000000000000000000000000000000000..5b30e73c8a267bf52c3cb64e694915c2376bda1a --- /dev/null +++ b/scripts/tests/cases/temstapro_009.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +# Testing passing FASTA sequence as '-f' option and embeddings generation with no cache used + +python scripts/temstapro -f ./scripts/tests/data/long_sequence.fasta -d './ProtTrans/' + diff --git a/scripts/tests/cases/temstapro_010.sh b/scripts/tests/cases/temstapro_010.sh new file mode 100644 index 0000000000000000000000000000000000000000..df065d7c275a858ab0b172f7b6f8d4994dc48fb7 --- /dev/null +++ b/scripts/tests/cases/temstapro_010.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +# Testing making per-residue inferences and plotting + +rm -f scripts/tests/outputs/mean_519c2e9a42194ade71c697d64ed3bced3175a6324803a940ebdf69bb65f301ec.pt +rm -f scripts/tests/outputs/per_res_519c2e9a42194ade71c697d64ed3bced3175a6324803a940ebdf69bb65f301ec.pt +rm -f scripts/tests/outputs/mean_7bdb2d9587a23bb7f744bcffba509cc7adf8c69667a9d954c3be1a4aa09f7c0a.pt +rm -f scripts/tests/outputs/per_res_7bdb2d9587a23bb7f744bcffba509cc7adf8c69667a9d954c3be1a4aa09f7c0a.pt +rm -f scripts/tests/outputs/mean_d2a3c93ce60d9c7ed923bda5def8fa46267df336f7310cc3e951a20f092df979.pt +rm -f scripts/tests/outputs/per_res_d2a3c93ce60d9c7ed923bda5def8fa46267df336f7310cc3e951a20f092df979.pt + +python scripts/temstapro -f scripts/tests/data/multiple_short_sequences.fasta \ + -e './scripts/tests/outputs/' -d './ProtTrans/' \ + -p './scripts/tests/outputs/' --mean-output ./scripts/tests/outputs/010_mean.tmp \ + --per-res-output ./scripts/tests/outputs/010_per_res.tmp + +rm -f ./scripts/tests/outputs/short_seq_?_per_residue_plot_?.svg +rm -f ./scripts/tests/outputs/010_mean.tmp ./scripts/tests/outputs/010_per_res.tmp diff --git a/scripts/tests/cases/temstapro_011.sh b/scripts/tests/cases/temstapro_011.sh new file mode 100644 index 0000000000000000000000000000000000000000..e1b9033f0c54245f75b605847b510bd763b7dd91 --- /dev/null +++ b/scripts/tests/cases/temstapro_011.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +# Testing making per-residue inferences + +rm -f scripts/tests/outputs/mean_b6f8b4d2f6602ee040278b1d64ab7cf588baa33d74a126030e252fd91ac00601.pt +rm -f scripts/tests/outputs/per_res_b6f8b4d2f6602ee040278b1d64ab7cf588baa33d74a126030e252fd91ac00601.pt + +python scripts/temstapro -f scripts/tests/data/long_sequence.fasta -e './scripts/tests/outputs/' \ + -d './ProtTrans/' --mean-output scripts/tests/outputs/011_mean.tmp \ + --per-res-output scripts/tests/outputs/011_per_res.tmp + +rm -f ./scripts/tests/outputs/011_mean.tmp scripts/tests/outputs/011_per_res.tmp diff --git a/scripts/tests/cases/temstapro_012.sh b/scripts/tests/cases/temstapro_012.sh new file mode 100644 index 0000000000000000000000000000000000000000..0b3bb963d54ba98953ac8619e487497ad6cb5b00 --- /dev/null +++ b/scripts/tests/cases/temstapro_012.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +# Testing making per-residue inferences + +rm -f scripts/tests/outputs/5d817ae8188e00eca8913c80312e2669d6551777fbed0d1764e1c09386638c0a.pt +rm -f scripts/tests/outputs/adc7fcd839ba2802998088a0c7b2310d3abdef0229cc020c55fcb82a492c2d8d.pt +rm -f scripts/tests/outputs/c425721d82cb786570760210076eaa21403b210aa6566882a41c4ac70df2defd.pt + +python scripts/temstapro -f scripts/tests/data/multiple_sequences.fasta -e './scripts/tests/outputs/' \ + -d './ProtTrans/' --mean-output scripts/tests/outputs/012_mean.tmp \ + --per-res-output scripts/tests/outputs/012_per_res.tmp + +rm -f ./scripts/tests/outputs/012_mean.tmp +rm -f ./scripts/tests/outputs/012_per_res.tmp diff --git a/scripts/tests/cases/temstapro_013.sh b/scripts/tests/cases/temstapro_013.sh new file mode 100644 index 0000000000000000000000000000000000000000..36f8bc46603a3b5015e9beb456dd8628382809ad --- /dev/null +++ b/scripts/tests/cases/temstapro_013.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Testing passing loading some sequences' embeddings from cache and some generating on the spot + +rm -f scripts/tests/outputs/mean_5d817ae8188e00eca8913c80312e2669d6551777fbed0d1764e1c09386638c0a.pt +rm -f scripts/tests/outputs/mean_adc7fcd839ba2802998088a0c7b2310d3abdef0229cc020c55fcb82a492c2d8d.pt +rm -f scripts/tests/outputs/mean_c425721d82cb786570760210076eaa21403b210aa6566882a41c4ac70df2defd.pt + +python scripts/temstapro -f ./scripts/tests/data/multiple_sequences.fasta -e scripts/tests/outputs/ -d './ProtTrans/' + +rm -f scripts/tests/outputs/mean_5d817ae8188e00eca8913c80312e2669d6551777fbed0d1764e1c09386638c0a.pt +rm -f scripts/tests/outputs/mean_adc7fcd839ba2802998088a0c7b2310d3abdef0229cc020c55fcb82a492c2d8d.pt + +python scripts/temstapro -f ./scripts/tests/data/multiple_sequences.fasta -e scripts/tests/outputs/ -d './ProtTrans/' + diff --git a/scripts/tests/cases/temstapro_014.sh b/scripts/tests/cases/temstapro_014.sh new file mode 100644 index 0000000000000000000000000000000000000000..c8d1a711533f294d7af857968a208ed731372ac3 --- /dev/null +++ b/scripts/tests/cases/temstapro_014.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +# Testing passing FASTA sequence as '-f' option and getting predictions of t20 +# classifier + +python scripts/temstapro -f ./scripts/tests/data/long_sequence_2.fasta -e 'scripts/tests/outputs/' -d './ProtTrans/' \ + --more-thresholds + +rm -f scripts/tests/outputs/mean_52ae55d4fc194abf0e65abc9d740ffc7f84972ddacefb62e931131655083857e.pt diff --git a/scripts/tests/data/extra_long_sequence.fasta b/scripts/tests/data/extra_long_sequence.fasta new file mode 100644 index 0000000000000000000000000000000000000000..10069aadc7ec56cc6335eec707c787a066f35f0a --- /dev/null +++ b/scripts/tests/data/extra_long_sequence.fasta @@ -0,0 +1,1457 @@ +>MGYP003385177403__Cas9-C3M5__1.6e-51 FL=0 +MRNEATLWLAKYMEDHGISTEKISRELHIPKKKLIPGTKESLDADEFLALCSYLQINPQT +IPIGQGEKXLHIYAYNKDIKTGEDLPCTNTVCKTSICPSCGQRADAGSQIYWCKSCKTLY +MRKSALSVIRKERSWQRICVRSFRKRGCCXSSFWGHPMHFXRSLCGMVQEITIMXMGREF +LFPXRIXNNXILIKCGKNIRNIRKKIQTGILKNRWRYSYRQTESVMRHWWKRQMSISAEW +QQIITLWKCLFRSAVEKTLPLFLIWSCGHSEIRKCSTFLVIRHWNFHLPMNMXNVLSRSI +RRHQSLPLATKRRILRNSVVXSVSSRVMRWCCTVFKTGSIQKTIKSLFRNKKEILTFYGI +RRSESASRSKYDRDSDSPKITKQRIISPIIDWMDFDIWLYLLTTGIDFNRAYRLGYARVG +CWCCPNNSGWSEFLSKIHMKEQSTHFREMLLEFAREIGKEDAEVYVDEGYWKARQGGNGV +AYAQKSVIAFEPCATQENTYNYELQKPIETELYELFRPFGYLNYELGNERLGEVYILGKN +GVPQLKLQGRIGTKKLKVTLLGSEDYGRXDKVSDYQIPDVYGMSCMXERMQAXCDFHKRR +RRWEHPLSDFGXKMCKVQGMCQSFFCRMLYEKGTGNXKEINRXRNHDKDKIPFXRAXKLY +FAGGLAQXRHEGSEKXSVCFFAELWSRCARGGSEHGKGDPLLDANLRVIRRAGKTGCIPF +KARRAIWEYDKYLEETFSLWIIHCNIVKKSXAGNRVESFLMNMMKWNLPKTNWXRSXXTK +QKIWTDLKNFRKNPXKQTERHCFVCMXESRSGEAIRRKRTSARLASLNWXNKRAVFTGKA +SRRCICFRQRSSGIFXKTARPKKELSVSMIFXQERIRRAGSXIXRGPVWXKNLKSXNKKI +IYKXTGQQAWTWYIXTSLXQEKKLLKNTSDHREEGEKRQMKNFVNVDTRFQKSINLTLDT +GDMALVNRYIPTRSSVSILKQYLTNIVRGQGEHATILIGPYGKGKSHLLLVLLALLCKSK +DETAEIQKKIIEADNSTKLLFMELAEVGRPFLPVIVSSFQGDLNESFIFALQEALKRPVS +EICRPSEYSEAVRTMESWKEFYPDTYQRFEKMLEERGCTASLFKERLKNKKKLHSXNSKN +FTRYXHPEVFSIQWCKKKHFGSMKRSTVCFVQSTDMPAFISSLMNSVSIXKDMKQKNFCK +GYEDFAGYVRIGRQPERRADVSDLCGAXEYPXVCQKYXFGNDPGIPWGRRAAERDPVCSF +FPEXLXTDRACTAXERGILYLGNTGKGRSVLSACLFFTSFEKEDFNQIVAKGCYPLTPVC +AYALLNISEKIGQNERTVFTFLAGNEPGSLNRIMEGRNRENLIGVEYVYDYFKNLFRETV +DETYIHNEWLKAEYALTKADTEIEKRIIKAMAIIRMIHPWKSXRYXISRSVWRXISKKEE +CDKAMRELMKKSDLFSAQVLVPMHLRTISVLISRRRLKKNPAAASXHQYLXSVKRDFRTD +LCRSKTVQSGPCNDKIFPIXIHXIXRLPFHWQCKGLFRAPFFRWIYLSDRDSRQGRKGKS +AASSAGIRGXTYYRVTAXRRIFIGMGAFCVLRQSEALQRMSILLKRIKRSVRNXTSMKRT +SAMRXMRDXREILCRKTAAVMYFIQAEKSRISGPEWNLTGIXARSVKTTIRXHRGSTMSF +XISRMCRDSTXRQEMMWXEPFXMEKIXRNMSRAAVLRQWCIVRHFFGQDLPEKISRXTRL +SKDHGGDRRLFCESKWKAGIFSDALXTLAGQRLWGAKRCASAVSCVEILSARRHAGAVPW +KXGTADHGRSAEQYQPVSGKLXSLYRKERYGKRALFTGNGGYLLXCADGKDHTFQPTFRH +YGKYAEMVPFPAAVYAGQXTLSAGNALCGQKFPKVIKADGVKSERIFVXAASECHGFFXK +SYDRALSQGNEAEHGYAFXKCDRRYGKGDQKNIWCKKKATVSRHVCRTGMADSKTVPNAM +YXTKRSRVLWNMWENXIPTTSRRLLPYYPNVWKISILRTGMTDYRKNFCVTLQRYAKRQR +RQRKMPVXRTDKKRFSXRRRMERRSTNIMMRMXKTAPVNFXKIXSKRHWITLETAXRQIR +KWLFXRRHXKNYYSRGNIMEEYIYLDNAATTFPKPEAVYRALDRANRNAAVNAGRGSYAL +AEQAKQLIEDSRGLLLTLTKAKPAAEVVFTPSATFACNQIFGGLPWKREDIVYVSPYEHN +AVMRTLHFLQQRYGFAIEELSVDAGTLELDLEKNPLSVYPKPSNGSCHDTYQQCHRVYSS +GXRSGSFDRYGKRRRXSWMVRRHWDXSLSVWNKAALITIYLRVIRHFTDRLESAVISHNL +QEMQKNXDLXSQEEPEAIHXIXRCRSFFPTVMNREVRTYRRSRDXKRRXKHLEVIMKKCV +RPXRSIIKKNGNXRNCXRQSFKKYRESILIFHRIRKKGAASVPLRSKDILRMMXECCSMK +IIISQSGAAITVHRXSINTXRINHTGGRCVWASDSLIQKKTSGNSYTQWKKSQGVTKVND +DLKRVNLRDIVDRISENTIVLPDFQRGFTWKENNRQKALLASVLTKLPIGTVLFLNVKTE +DYGYKKIGKNEKKHXQFRGKAGSKGAVRRSAEDHGLNGIPFHETSKRKYXRSRITDTGAA +VFLESSKFSKCDRXQKEDLFGGTILSFPNSFRGNYPEISSEEMKERITFVHDRKKAFLYE +KAETKDTREIREYCRNIDNSEDGDAYLLPLFYLLDACEPGSSGAVILEDVVKEIGAEYEK +SIGSWLQAEEYPIEEKEQYLEKFGLEDAQREAVLEEIKTGTLFYQKKKEKIIFLTVXRNG +KCSGECTFVNIXENVLRISGFMRLQFPSMIKSAPLISMKTXTWEENPXVSLIRSXQRHPD +IRRRREISLHRSXMTXSVTTGRNIPHLXKNAQRVRRTVIKITLQTATNHIRQWDGSAAGI +NLKKSFLLPTXRHXXTFWVSLTIFQKEIRDLVCVMLRRSKTXTXKSQKRISAADSIRKNI +RLCGGGMSGLRPRSLIFTDAVWNPKAWXNTLQSDVGYLRYGIFRXSMVXGQXSLRLYGSL +VLECDFIGRVQDRAEPGIYPESSECFIXDPKHQRIXXEIHKSPLQXRTDRXKICRPXHCF +NEKSIRISGGGNWEYHLSILFIRDIFGYFKTASGEKRLSATNTECIEQFREAAKTSHYAD +RKSXRKVXGMPIKRQKAGEKTTAVRIIHRXISCXYRKKRMGXSKIVHXRNTLNFAIRPHX +IMXTSKTIHLPICRSGNRIPDRXRSIAAFSRKKIXRFXEPYYVEVSEFIELSRHLLRRGR +KLIWKRIGTAXCRHXSLKFCIWKRRICEARQRQISACQRNCRKSSRNMQEDNGIGGQVYE +IXKYYHGKFHAVXGQESYRIQLXXCKKCNSSIRRQYGWKNDDSAGIPLGTVWCVNGKRDK +KCRRFSAFKYGYLRNDGCQQSCXGKSRDCSSXRGKTLYHHKRDNLYQSISKVREPGVSEE +MCDADYRVRGHGKLCRGRQQRDRDIDQXTVSKELVPLFFVXWRTVEXCQCRRCPGKYQRI +GTYFNGIICISRGEEPFKRYGKQFRYQKFRSEIEDRVQSMIIXKQNEKIRAXYRKAPGXD +XGTGSQYPELXEKEXRYRTFLSRKPQYGRIAKEKRNIXSYCVSPRESKVFILTRHWXMPL +AIKPIWYLPGQCSVQVWNYXKVRKWNDVISHICVRQRXITSLRTNGVSAVMRLKRQQRVF +CTDGAAKLSRRRQMSVPXXGTLRELQTAGTAKVMSCXKRLMIMQKEVDENVRGISXFLXP +LXKTAKAVRXTYXFCREKEDTAFLXIGDSAFFXGKGRKKKDGSKPVKREXKPRKKRCKAX +KQEMSGIGSWQRLEIAEELYRQLDKEFSEQENKIFWSXTGRYRRISAKCLTQRIKRLNXH +RSMRFRCFTVRSRDTGKRKSVRRRENSKELCVYCNDHGFQQKKETGKDRAXDSRQXHPSD +RIGRTVFXAGRXKYRIDRKGAATGFGTGHYLYVEKKTGSIQSXILTLEADITLIKNRKNH +LQRSNRQGGDSLMENYKFFNDPYKFSGKHARMVSELWSLNDYEHSYFKRLIDIYIVAAIL +GFRIDRKAKRDYAPVEQRTVFGEQMRQASEDLEFILQMMLLLEPAGQGIHEECIRRAFKG +VETEEEFKRYNELFESYMLGGVEELYERLVLQKEEIDTDYSDDKTANLMMLFERFAPKKT +SXNFYKISELLKNQFTKYGKNGIIKNELYYTKKXSVIAVWXAKPKLXSHSSEWDYLLYGF +YRNSKKTNFXYTKCSAQAVLGGEKFMGEMSKTNMDRHRSYRIGLDIGIASVGWAVLENNS +QDEPIRILDLGVRIFEAAEVPKTGAALAAERRDARTARRSDPQKTSSFRKDXVAVXKRRT +DPNRFFYGAVSFTKSAGCLXTSLXRFRTEAEQXGICTGTVTYCKTSWFPLDKKGGVKRRG +QWKSLKSNRREPQTYGRAWLPYRWRNDIXRCLFSYXVCVGRQWISVNTXKXSRXLFPHNA +PGAVRRGGSHPFXMSEKVWKXKGDXKIRSRNIXKLCCHSVLLIWDRDSRQTERRALMQWR +DLEIRSDIVHXKENPANVVRQKQPIRQSYLLHCRRSHIXNWYIWMAHPDFFRKRSGTFYX +KCFRPKKEIKYAAVRKKLNLPLEEKFNTLNYNMKRKGKDNKEEEVDEAAIIAATEKATLS +VCPIVMNTAKESENIXRPCRKKNNRICXMKLERFXPVIRTMTAVXTVXRRQVCRRNWRIL +CXSXHLRSSSTFLXKQXKKSCLIXKKVWYMIKHVKQRAMILKMIIMERKXSCXKAKILQK +PLMRLRTRLXKRSVSQTVKVINAIILKYGSPQAVSIELAREMSKNFEERRKAEKQMEENR +KKNEMAKKGNSGTGQTFAERSGYFEIPFMAXSTGNMPLYRXKDTVRRTVSAGIXYXPHSS +LQYHFXXQLPEQGACYFTGKPXERKPHPIXVFWSGXGPLECLXSKSXSFYQGLXEASQFV +KTGIYKRRPQGIQRAXFKXYKVYYTRDLXYDPSEFRDGAFESGRQEETGLCCQWFHNSLF +KKKMGTDAKRPFYRHSSCNGCCSSSLLYRWYDSKNFQKYTVSXGLIQRTESPGLXDCGCG +DRRNHFFRRPFKRRVGRALRSTGTAAMGAFXRRVRSPYGKXSEEXSGHTSGYVPVVPLSG +RCVXQYPANLCVKDAKSQGDRCSTCRYNTKSGDITKTVERYLRMVAMYYHEPILKIXNWI +RMERLKITTIRTVTDYYMKHXGHDWQNMMVMEKRHLPKSFISQKQMVHRVLLXKKXKPIK +KMSLGVEINKDEAGVGRGIAENANGGMIRVDVFRENGKYYFVPIYIADALKKRLPNKAAM +QNKPYSEWKEMKDENFLFSLYSRDLIGFKNQKGKKVHCTDGTEIVLTNEIVYYIGANIRT +ASISCKAHDNQYEFGSFGIQSLQELKKYQVDVLGNVTEVRQEKRRGFQXMGYRNIKIETS +QQLNIKNSQLLIGSSGEVQIPLEDINSILIESQAVTLSSYLLQKMAEMGIAVYVCDEKHL +PNAVLLPMVRHSRHFKLLKCQMNLGKPKQKGFGSRLXSGKLKINQPVLDSXIXRVPKSFX +KCQNRYNPVIKQMLKQRQQLFIFAGYMVWDFPEVMIISLTQRXITDMQLCVEXLRVLSFV +MDXSLLWDYFIVANXIVITXQMILLRYFVRLXICMFPVVLTYQRLIGHXRLKXKENYMEX +XIMTCWXEERSIYXVIALTKQLQVIAVHCRETVKNWNFRFXWSYRYIVMSKFMRMIVFFD +LPVGTARERKAATKFRNFLIKDGYHMVQYSVYSRICNGNDAVEMHETRLKQHLPSRGSIR +LLTITEKQYESIHILLGEAVFDDTSEATELINIFMRNEATLWLAKYMEDHGISTEKISRELHIPKKKLIPGTKESLDADEFLALCSYLQINPQT +IPIGQGEKXLHIYAYNKDIKTGEDLPCTNTVCKTSICPSCGQRADAGSQIYWCKSCKTLY +MRKSALSVIRKERSWQRICVRSFRKRGCCXSSFWGHPMHFXRSLCGMVQEITIMXMGREF +LFPXRIXNNXILIKCGKNIRNIRKKIQTGILKNRWRYSYRQTESVMRHWWKRQMSISAEW +QQIITLWKCLFRSAVEKTLPLFLIWSCGHSEIRKCSTFLVIRHWNFHLPMNMXNVLSRSI +RRHQSLPLATKRRILRNSVVXSVSSRVMRWCCTVFKTGSIQKTIKSLFRNKKEILTFYGI +RRSESASRSKYDRDSDSPKITKQRIISPIIDWMDFDIWLYLLTTGIDFNRAYRLGYARVG +CWCCPNNSGWSEFLSKIHMKEQSTHFREMLLEFAREIGKEDAEVYVDEGYWKARQGGNGV +AYAQKSVIAFEPCATQENTYNYELQKPIETELYELFRPFGYLNYELGNERLGEVYILGKN +GVPQLKLQGRIGTKKLKVTLLGSEDYGRXDKVSDYQIPDVYGMSCMXERMQAXCDFHKRR +RRWEHPLSDFGXKMCKVQGMCQSFFCRMLYEKGTGNXKEINRXRNHDKDKIPFXRAXKLY +FAGGLAQXRHEGSEKXSVCFFAELWSRCARGGSEHGKGDPLLDANLRVIRRAGKTGCIPF +KARRAIWEYDKYLEETFSLWIIHCNIVKKSXAGNRVESFLMNMMKWNLPKTNWXRSXXTK +QKIWTDLKNFRKNPXKQTERHCFVCMXESRSGEAIRRKRTSARLASLNWXNKRAVFTGKA +SRRCICFRQRSSGIFXKTARPKKELSVSMIFXQERIRRAGSXIXRGPVWXKNLKSXNKKI +IYKXTGQQAWTWYIXTSLXQEKKLLKNTSDHREEGEKRQMKNFVNVDTRFQKSINLTLDT +GDMALVNRYIPTRSSVSILKQYLTNIVRGQGEHATILIGPYGKGKSHLLLVLLALLCKSK +DETAEIQKKIIEADNSTKLLFMELAEVGRPFLPVIVSSFQGDLNESFIFALQEALKRPVS +EICRPSEYSEAVRTMESWKEFYPDTYQRFEKMLEERGCTASLFKERLKNKKKLHSXNSKN +FTRYXHPEVFSIQWCKKKHFGSMKRSTVCFVQSTDMPAFISSLMNSVSIXKDMKQKNFCK +GYEDFAGYVRIGRQPERRADVSDLCGAXEYPXVCQKYXFGNDPGIPWGRRAAERDPVCSF +FPEXLXTDRACTAXERGILYLGNTGKGRSVLSACLFFTSFEKEDFNQIVAKGCYPLTPVC +AYALLNISEKIGQNERTVFTFLAGNEPGSLNRIMEGRNRENLIGVEYVYDYFKNLFRETV +DETYIHNEWLKAEYALTKADTEIEKRIIKAMAIIRMIHPWKSXRYXISRSVWRXISKKEE +CDKAMRELMKKSDLFSAQVLVPMHLRTISVLISRRRLKKNPAAASXHQYLXSVKRDFRTD +LCRSKTVQSGPCNDKIFPIXIHXIXRLPFHWQCKGLFRAPFFRWIYLSDRDSRQGRKGKS +AASSAGIRGXTYYRVTAXRRIFIGMGAFCVLRQSEALQRMSILLKRIKRSVRNXTSMKRT +SAMRXMRDXREILCRKTAAVMYFIQAEKSRISGPEWNLTGIXARSVKTTIRXHRGSTMSF +XISRMCRDSTXRQEMMWXEPFXMEKIXRNMSRAAVLRQWCIVRHFFGQDLPEKISRXTRL +SKDHGGDRRLFCESKWKAGIFSDALXTLAGQRLWGAKRCASAVSCVEILSARRHAGAVPW +KXGTADHGRSAEQYQPVSGKLXSLYRKERYGKRALFTGNGGYLLXCADGKDHTFQPTFRH +YGKYAEMVPFPAAVYAGQXTLSAGNALCGQKFPKVIKADGVKSERIFVXAASECHGFFXK +SYDRALSQGNEAEHGYAFXKCDRRYGKGDQKNIWCKKKATVSRHVCRTGMADSKTVPNAM +YXTKRSRVLWNMWENXIPTTSRRLLPYYPNVWKISILRTGMTDYRKNFCVTLQRYAKRQR +RQRKMPVXRTDKKRFSXRRRMERRSTNIMMRMXKTAPVNFXKIXSKRHWITLETAXRQIR +KWLFXRRHXKNYYSRGNIMEEYIYLDNAATTFPKPEAVYRALDRANRNAAVNAGRGSYAL +AEQAKQLIEDSRGLLLTLTKAKPAAEVVFTPSATFACNQIFGGLPWKREDIVYVSPYEHN +AVMRTLHFLQQRYGFAIEELSVDAGTLELDLEKNPLSVYPKPSNGSCHDTYQQCHRVYSS +GXRSGSFDRYGKRRRXSWMVRRHWDXSLSVWNKAALITIYLRVIRHFTDRLESAVISHNL +QEMQKNXDLXSQEEPEAIHXIXRCRSFFPTVMNREVRTYRRSRDXKRRXKHLEVIMKKCV +RPXRSIIKKNGNXRNCXRQSFKKYRESILIFHRIRKKGAASVPLRSKDILRMMXECCSMK +IIISQSGAAITVHRXSINTXRINHTGGRCVWASDSLIQKKTSGNSYTQWKKSQGVTKVND +DLKRVNLRDIVDRISENTIVLPDFQRGFTWKENNRQKALLASVLTKLPIGTVLFLNVKTE +DYGYKKIGKNEKKHXQFRGKAGSKGAVRRSAEDHGLNGIPFHETSKRKYXRSRITDTGAA +VFLESSKFSKCDRXQKEDLFGGTILSFPNSFRGNYPEISSEEMKERITFVHDRKKAFLYE +KAETKDTREIREYCRNIDNSEDGDAYLLPLFYLLDACEPGSSGAVILEDVVKEIGAEYEK +SIGSWLQAEEYPIEEKEQYLEKFGLEDAQREAVLEEIKTGTLFYQKKKEKIIFLTVXRNG +KCSGECTFVNIXENVLRISGFMRLQFPSMIKSAPLISMKTXTWEENPXVSLIRSXQRHPD +IRRRREISLHRSXMTXSVTTGRNIPHLXKNAQRVRRTVIKITLQTATNHIRQWDGSAAGI +NLKKSFLLPTXRHXXTFWVSLTIFQKEIRDLVCVMLRRSKTXTXKSQKRISAADSIRKNI +RLCGGGMSGLRPRSLIFTDAVWNPKAWXNTLQSDVGYLRYGIFRXSMVXGQXSLRLYGSL +VLECDFIGRVQDRAEPGIYPESSECFIXDPKHQRIXXEIHKSPLQXRTDRXKICRPXHCF +NEKSIRISGGGNWEYHLSILFIRDIFGYFKTASGEKRLSATNTECIEQFREAAKTSHYAD +RKSXRKVXGMPIKRQKAGEKTTAVRIIHRXISCXYRKKRMGXSKIVHXRNTLNFAIRPHX +IMXTSKTIHLPICRSGNRIPDRXRSIAAFSRKKIXRFXEPYYVEVSEFIELSRHLLRRGR +KLIWKRIGTAXCRHXSLKFCIWKRRICEARQRQISACQRNCRKSSRNMQEDNGIGGQVYE +IXKYYHGKFHAVXGQESYRIQLXXCKKCNSSIRRQYGWKNDDSAGIPLGTVWCVNGKRDK +KCRRFSAFKYGYLRNDGCQQSCXGKSRDCSSXRGKTLYHHKRDNLYQSISKVREPGVSEE +MCDADYRVRGHGKLCRGRQQRDRDIDQXTVSKELVPLFFVXWRTVEXCQCRRCPGKYQRI +GTYFNGIICISRGEEPFKRYGKQFRYQKFRSEIEDRVQSMIIXKQNEKIRAXYRKAPGXD +XGTGSQYPELXEKEXRYRTFLSRKPQYGRIAKEKRNIXSYCVSPRESKVFILTRHWXMPL +AIKPIWYLPGQCSVQVWNYXKVRKWNDVISHICVRQRXITSLRTNGVSAVMRLKRQQRVF +CTDGAAKLSRRRQMSVPXXGTLRELQTAGTAKVMSCXKRLMIMQKEVDENVRGISXFLXP +LXKTAKAVRXTYXFCREKEDTAFLXIGDSAFFXGKGRKKKDGSKPVKREXKPRKKRCKAX +KQEMSGIGSWQRLEIAEELYRQLDKEFSEQENKIFWSXTGRYRRISAKCLTQRIKRLNXH +RSMRFRCFTVRSRDTGKRKSVRRRENSKELCVYCNDHGFQQKKETGKDRAXDSRQXHPSD +RIGRTVFXAGRXKYRIDRKGAATGFGTGHYLYVEKKTGSIQSXILTLEADITLIKNRKNH +LQRSNRQGGDSLMENYKFFNDPYKFSGKHARMVSELWSLNDYEHSYFKRLIDIYIVAAIL +GFRIDRKAKRDYAPVEQRTVFGEQMRQASEDLEFILQMMLLLEPAGQGIHEECIRRAFKG +VETEEEFKRYNELFESYMLGGVEELYERLVLQKEEIDTDYSDDKTANLMMLFERFAPKKT +SXNFYKISELLKNQFTKYGKNGIIKNELYYTKKXSVIAVWXAKPKLXSHSSEWDYLLYGF +YRNSKKTNFXYTKCSAQAVLGGEKFMGEMSKTNMDRHRSYRIGLDIGIASVGWAVLENNS +QDEPIRILDLGVRIFEAAEVPKTGAALAAERRDARTARRSDPQKTSSFRKDXVAVXKRRT +DPNRFFYGAVSFTKSAGCLXTSLXRFRTEAEQXGICTGTVTYCKTSWFPLDKKGGVKRRG +QWKSLKSNRREPQTYGRAWLPYRWRNDIXRCLFSYXVCVGRQWISVNTXKXSRXLFPHNA +PGAVRRGGSHPFXMSEKVWKXKGDXKIRSRNIXKLCCHSVLLIWDRDSRQTERRALMQWR +DLEIRSDIVHXKENPANVVRQKQPIRQSYLLHCRRSHIXNWYIWMAHPDFFRKRSGTFYX +KCFRPKKEIKYAAVRKKLNLPLEEKFNTLNYNMKRKGKDNKEEEVDEAAIIAATEKATLS +VCPIVMNTAKESENIXRPCRKKNNRICXMKLERFXPVIRTMTAVXTVXRRQVCRRNWRIL +CXSXHLRSSSTFLXKQXKKSCLIXKKVWYMIKHVKQRAMILKMIIMERKXSCXKAKILQK +PLMRLRTRLXKRSVSQTVKVINAIILKYGSPQAVSIELAREMSKNFEERRKAEKQMEENR +KKNEMAKKGNSGTGQTFAERSGYFEIPFMAXSTGNMPLYRXKDTVRRTVSAGIXYXPHSS +LQYHFXXQLPEQGACYFTGKPXERKPHPIXVFWSGXGPLECLXSKSXSFYQGLXEASQFV +KTGIYKRRPQGIQRAXFKXYKVYYTRDLXYDPSEFRDGAFESGRQEETGLCCQWFHNSLF +KKKMGTDAKRPFYRHSSCNGCCSSSLLYRWYDSKNFQKYTVSXGLIQRTESPGLXDCGCG +DRRNHFFRRPFKRRVGRALRSTGTAAMGAFXRRVRSPYGKXSEEXSGHTSGYVPVVPLSG +RCVXQYPANLCVKDAKSQGDRCSTCRYNTKSGDITKTVERYLRMVAMYYHEPILKIXNWI +RMERLKITTIRTVTDYYMKHXGHDWQNMMVMEKRHLPKSFISQKQMVHRVLLXKKXKPIK +KMSLGVEINKDEAGVGRGIAENANGGMIRVDVFRENGKYYFVPIYIADALKKRLPNKAAM +QNKPYSEWKEMKDENFLFSLYSRDLIGFKNQKGKKVHCTDGTEIVLTNEIVYYIGANIRT +ASISCKAHDNQYEFGSFGIQSLQELKKYQVDVLGNVTEVRQEKRRGFQXMGYRNIKIETS +QQLNIKNSQLLIGSSGEVQIPLEDINSILIESQAVTLSSYLLQKMAEMGIAVYVCDEKHL +PNAVLLPMVRHSRHFKLLKCQMNLGKPKQKGFGSRLXSGKLKINQPVLDSXIXRVPKSFX +KCQNRYNPVIKQMLKQRQQLFIFAGYMVWDFPEVMIISLTQRXITDMQLCVEXLRVLSFV +MDXSLLWDYFIVANXIVITXQMILLRYFVRLXICMFPVVLTYQRLIGHXRLKXKENYMEX +XIMTCWXEERSIYXVIALTKQLQVIAVHCRETVKNWNFRFXWSYRYIVMSKFMRMIVFFD +LPVGTARERKAATKFRNFLIKDGYHMVQYSVYSRICNGNDAVEMHETRLKQHLPSRGSIR +LLTITEKQYESIHILLGEAVFDDTSEATELINIFMRNEATLWLAKYMEDHGISTEKISRELHIPKKKLIPGTKESLDADEFLALCSYLQINPQT +IPIGQGEKXLHIYAYNKDIKTGEDLPCTNTVCKTSICPSCGQRADAGSQIYWCKSCKTLY +MRKSALSVIRKERSWQRICVRSFRKRGCCXSSFWGHPMHFXRSLCGMVQEITIMXMGREF +LFPXRIXNNXILIKCGKNIRNIRKKIQTGILKNRWRYSYRQTESVMRHWWKRQMSISAEW +QQIITLWKCLFRSAVEKTLPLFLIWSCGHSEIRKCSTFLVIRHWNFHLPMNMXNVLSRSI +RRHQSLPLATKRRILRNSVVXSVSSRVMRWCCTVFKTGSIQKTIKSLFRNKKEILTFYGI +RRSESASRSKYDRDSDSPKITKQRIISPIIDWMDFDIWLYLLTTGIDFNRAYRLGYARVG +CWCCPNNSGWSEFLSKIHMKEQSTHFREMLLEFAREIGKEDAEVYVDEGYWKARQGGNGV +AYAQKSVIAFEPCATQENTYNYELQKPIETELYELFRPFGYLNYELGNERLGEVYILGKN +GVPQLKLQGRIGTKKLKVTLLGSEDYGRXDKVSDYQIPDVYGMSCMXERMQAXCDFHKRR +RRWEHPLSDFGXKMCKVQGMCQSFFCRMLYEKGTGNXKEINRXRNHDKDKIPFXRAXKLY +FAGGLAQXRHEGSEKXSVCFFAELWSRCARGGSEHGKGDPLLDANLRVIRRAGKTGCIPF +KARRAIWEYDKYLEETFSLWIIHCNIVKKSXAGNRVESFLMNMMKWNLPKTNWXRSXXTK +QKIWTDLKNFRKNPXKQTERHCFVCMXESRSGEAIRRKRTSARLASLNWXNKRAVFTGKA +SRRCICFRQRSSGIFXKTARPKKELSVSMIFXQERIRRAGSXIXRGPVWXKNLKSXNKKI +IYKXTGQQAWTWYIXTSLXQEKKLLKNTSDHREEGEKRQMKNFVNVDTRFQKSINLTLDT +GDMALVNRYIPTRSSVSILKQYLTNIVRGQGEHATILIGPYGKGKSHLLLVLLALLCKSK +DETAEIQKKIIEADNSTKLLFMELAEVGRPFLPVIVSSFQGDLNESFIFALQEALKRPVS +EICRPSEYSEAVRTMESWKEFYPDTYQRFEKMLEERGCTASLFKERLKNKKKLHSXNSKN +FTRYXHPEVFSIQWCKKKHFGSMKRSTVCFVQSTDMPAFISSLMNSVSIXKDMKQKNFCK +GYEDFAGYVRIGRQPERRADVSDLCGAXEYPXVCQKYXFGNDPGIPWGRRAAERDPVCSF +FPEXLXTDRACTAXERGILYLGNTGKGRSVLSACLFFTSFEKEDFNQIVAKGCYPLTPVC +AYALLNISEKIGQNERTVFTFLAGNEPGSLNRIMEGRNRENLIGVEYVYDYFKNLFRETV +DETYIHNEWLKAEYALTKADTEIEKRIIKAMAIIRMIHPWKSXRYXISRSVWRXISKKEE +CDKAMRELMKKSDLFSAQVLVPMHLRTISVLISRRRLKKNPAAASXHQYLXSVKRDFRTD +LCRSKTVQSGPCNDKIFPIXIHXIXRLPFHWQCKGLFRAPFFRWIYLSDRDSRQGRKGKS +AASSAGIRGXTYYRVTAXRRIFIGMGAFCVLRQSEALQRMSILLKRIKRSVRNXTSMKRT +SAMRXMRDXREILCRKTAAVMYFIQAEKSRISGPEWNLTGIXARSVKTTIRXHRGSTMSF +XISRMCRDSTXRQEMMWXEPFXMEKIXRNMSRAAVLRQWCIVRHFFGQDLPEKISRXTRL +SKDHGGDRRLFCESKWKAGIFSDALXTLAGQRLWGAKRCASAVSCVEILSARRHAGAVPW +KXGTADHGRSAEQYQPVSGKLXSLYRKERYGKRALFTGNGGYLLXCADGKDHTFQPTFRH +YGKYAEMVPFPAAVYAGQXTLSAGNALCGQKFPKVIKADGVKSERIFVXAASECHGFFXK +SYDRALSQGNEAEHGYAFXKCDRRYGKGDQKNIWCKKKATVSRHVCRTGMADSKTVPNAM +YXTKRSRVLWNMWENXIPTTSRRLLPYYPNVWKISILRTGMTDYRKNFCVTLQRYAKRQR +RQRKMPVXRTDKKRFSXRRRMERRSTNIMMRMXKTAPVNFXKIXSKRHWITLETAXRQIR +KWLFXRRHXKNYYSRGNIMEEYIYLDNAATTFPKPEAVYRALDRANRNAAVNAGRGSYAL +AEQAKQLIEDSRGLLLTLTKAKPAAEVVFTPSATFACNQIFGGLPWKREDIVYVSPYEHN +AVMRTLHFLQQRYGFAIEELSVDAGTLELDLEKNPLSVYPKPSNGSCHDTYQQCHRVYSS +GXRSGSFDRYGKRRRXSWMVRRHWDXSLSVWNKAALITIYLRVIRHFTDRLESAVISHNL +QEMQKNXDLXSQEEPEAIHXIXRCRSFFPTVMNREVRTYRRSRDXKRRXKHLEVIMKKCV +RPXRSIIKKNGNXRNCXRQSFKKYRESILIFHRIRKKGAASVPLRSKDILRMMXECCSMK +IIISQSGAAITVHRXSINTXRINHTGGRCVWASDSLIQKKTSGNSYTQWKKSQGVTKVND +DLKRVNLRDIVDRISENTIVLPDFQRGFTWKENNRQKALLASVLTKLPIGTVLFLNVKTE +DYGYKKIGKNEKKHXQFRGKAGSKGAVRRSAEDHGLNGIPFHETSKRKYXRSRITDTGAA +VFLESSKFSKCDRXQKEDLFGGTILSFPNSFRGNYPEISSEEMKERITFVHDRKKAFLYE +KAETKDTREIREYCRNIDNSEDGDAYLLPLFYLLDACEPGSSGAVILEDVVKEIGAEYEK +SIGSWLQAEEYPIEEKEQYLEKFGLEDAQREAVLEEIKTGTLFYQKKKEKIIFLTVXRNG +KCSGECTFVNIXENVLRISGFMRLQFPSMIKSAPLISMKTXTWEENPXVSLIRSXQRHPD +IRRRREISLHRSXMTXSVTTGRNIPHLXKNAQRVRRTVIKITLQTATNHIRQWDGSAAGI +NLKKSFLLPTXRHXXTFWVSLTIFQKEIRDLVCVMLRRSKTXTXKSQKRISAADSIRKNI +RLCGGGMSGLRPRSLIFTDAVWNPKAWXNTLQSDVGYLRYGIFRXSMVXGQXSLRLYGSL +VLECDFIGRVQDRAEPGIYPESSECFIXDPKHQRIXXEIHKSPLQXRTDRXKICRPXHCF +NEKSIRISGGGNWEYHLSILFIRDIFGYFKTASGEKRLSATNTECIEQFREAAKTSHYAD +RKSXRKVXGMPIKRQKAGEKTTAVRIIHRXISCXYRKKRMGXSKIVHXRNTLNFAIRPHX +IMXTSKTIHLPICRSGNRIPDRXRSIAAFSRKKIXRFXEPYYVEVSEFIELSRHLLRRGR +KLIWKRIGTAXCRHXSLKFCIWKRRICEARQRQISACQRNCRKSSRNMQEDNGIGGQVYE +IXKYYHGKFHAVXGQESYRIQLXXCKKCNSSIRRQYGWKNDDSAGIPLGTVWCVNGKRDK +KCRRFSAFKYGYLRNDGCQQSCXGKSRDCSSXRGKTLYHHKRDNLYQSISKVREPGVSEE +MCDADYRVRGHGKLCRGRQQRDRDIDQXTVSKELVPLFFVXWRTVEXCQCRRCPGKYQRI +GTYFNGIICISRGEEPFKRYGKQFRYQKFRSEIEDRVQSMIIXKQNEKIRAXYRKAPGXD +XGTGSQYPELXEKEXRYRTFLSRKPQYGRIAKEKRNIXSYCVSPRESKVFILTRHWXMPL +AIKPIWYLPGQCSVQVWNYXKVRKWNDVISHICVRQRXITSLRTNGVSAVMRLKRQQRVF +CTDGAAKLSRRRQMSVPXXGTLRELQTAGTAKVMSCXKRLMIMQKEVDENVRGISXFLXP +LXKTAKAVRXTYXFCREKEDTAFLXIGDSAFFXGKGRKKKDGSKPVKREXKPRKKRCKAX +KQEMSGIGSWQRLEIAEELYRQLDKEFSEQENKIFWSXTGRYRRISAKCLTQRIKRLNXH +RSMRFRCFTVRSRDTGKRKSVRRRENSKELCVYCNDHGFQQKKETGKDRAXDSRQXHPSD +RIGRTVFXAGRXKYRIDRKGAATGFGTGHYLYVEKKTGSIQSXILTLEADITLIKNRKNH +LQRSNRQGGDSLMENYKFFNDPYKFSGKHARMVSELWSLNDYEHSYFKRLIDIYIVAAIL +GFRIDRKAKRDYAPVEQRTVFGEQMRQASEDLEFILQMMLLLEPAGQGIHEECIRRAFKG +VETEEEFKRYNELFESYMLGGVEELYERLVLQKEEIDTDYSDDKTANLMMLFERFAPKKT +SXNFYKISELLKNQFTKYGKNGIIKNELYYTKKXSVIAVWXAKPKLXSHSSEWDYLLYGF +YRNSKKTNFXYTKCSAQAVLGGEKFMGEMSKTNMDRHRSYRIGLDIGIASVGWAVLENNS +QDEPIRILDLGVRIFEAAEVPKTGAALAAERRDARTARRSDPQKTSSFRKDXVAVXKRRT +DPNRFFYGAVSFTKSAGCLXTSLXRFRTEAEQXGICTGTVTYCKTSWFPLDKKGGVKRRG +QWKSLKSNRREPQTYGRAWLPYRWRNDIXRCLFSYXVCVGRQWISVNTXKXSRXLFPHNA +PGAVRRGGSHPFXMSEKVWKXKGDXKIRSRNIXKLCCHSVLLIWDRDSRQTERRALMQWR +DLEIRSDIVHXKENPANVVRQKQPIRQSYLLHCRRSHIXNWYIWMAHPDFFRKRSGTFYX +KCFRPKKEIKYAAVRKKLNLPLEEKFNTLNYNMKRKGKDNKEEEVDEAAIIAATEKATLS +VCPIVMNTAKESENIXRPCRKKNNRICXMKLERFXPVIRTMTAVXTVXRRQVCRRNWRIL +CXSXHLRSSSTFLXKQXKKSCLIXKKVWYMIKHVKQRAMILKMIIMERKXSCXKAKILQK +PLMRLRTRLXKRSVSQTVKVINAIILKYGSPQAVSIELAREMSKNFEERRKAEKQMEENR +KKNEMAKKGNSGTGQTFAERSGYFEIPFMAXSTGNMPLYRXKDTVRRTVSAGIXYXPHSS +LQYHFXXQLPEQGACYFTGKPXERKPHPIXVFWSGXGPLECLXSKSXSFYQGLXEASQFV +KTGIYKRRPQGIQRAXFKXYKVYYTRDLXYDPSEFRDGAFESGRQEETGLCCQWFHNSLF +KKKMGTDAKRPFYRHSSCNGCCSSSLLYRWYDSKNFQKYTVSXGLIQRTESPGLXDCGCG +DRRNHFFRRPFKRRVGRALRSTGTAAMGAFXRRVRSPYGKXSEEXSGHTSGYVPVVPLSG +RCVXQYPANLCVKDAKSQGDRCSTCRYNTKSGDITKTVERYLRMVAMYYHEPILKIXNWI +RMERLKITTIRTVTDYYMKHXGHDWQNMMVMEKRHLPKSFISQKQMVHRVLLXKKXKPIK +KMSLGVEINKDEAGVGRGIAENANGGMIRVDVFRENGKYYFVPIYIADALKKRLPNKAAM +QNKPYSEWKEMKDENFLFSLYSRDLIGFKNQKGKKVHCTDGTEIVLTNEIVYYIGANIRT +ASISCKAHDNQYEFGSFGIQSLQELKKYQVDVLGNVTEVRQEKRRGFQXMGYRNIKIETS +QQLNIKNSQLLIGSSGEVQIPLEDINSILIESQAVTLSSYLLQKMAEMGIAVYVCDEKHL +PNAVLLPMVRHSRHFKLLKCQMNLGKPKQKGFGSRLXSGKLKINQPVLDSXIXRVPKSFX +KCQNRYNPVIKQMLKQRQQLFIFAGYMVWDFPEVMIISLTQRXITDMQLCVEXLRVLSFV +MDXSLLWDYFIVANXIVITXQMILLRYFVRLXICMFPVVLTYQRLIGHXRLKXKENYMEX +XIMTCWXEERSIYXVIALTKQLQVIAVHCRETVKNWNFRFXWSYRYIVMSKFMRMIVFFD +LPVGTARERKAATKFRNFLIKDGYHMVQYSVYSRICNGNDAVEMHETRLKQHLPSRGSIR +LLTITEKQYESIHILLGEAVFDDTSEATELINIFMRNEATLWLAKYMEDHGISTEKISRELHIPKKKLIPGTKESLDADEFLALCSYLQINPQT +IPIGQGEKXLHIYAYNKDIKTGEDLPCTNTVCKTSICPSCGQRADAGSQIYWCKSCKTLY +MRKSALSVIRKERSWQRICVRSFRKRGCCXSSFWGHPMHFXRSLCGMVQEITIMXMGREF +LFPXRIXNNXILIKCGKNIRNIRKKIQTGILKNRWRYSYRQTESVMRHWWKRQMSISAEW +QQIITLWKCLFRSAVEKTLPLFLIWSCGHSEIRKCSTFLVIRHWNFHLPMNMXNVLSRSI +RRHQSLPLATKRRILRNSVVXSVSSRVMRWCCTVFKTGSIQKTIKSLFRNKKEILTFYGI +RRSESASRSKYDRDSDSPKITKQRIISPIIDWMDFDIWLYLLTTGIDFNRAYRLGYARVG +CWCCPNNSGWSEFLSKIHMKEQSTHFREMLLEFAREIGKEDAEVYVDEGYWKARQGGNGV +AYAQKSVIAFEPCATQENTYNYELQKPIETELYELFRPFGYLNYELGNERLGEVYILGKN +GVPQLKLQGRIGTKKLKVTLLGSEDYGRXDKVSDYQIPDVYGMSCMXERMQAXCDFHKRR +RRWEHPLSDFGXKMCKVQGMCQSFFCRMLYEKGTGNXKEINRXRNHDKDKIPFXRAXKLY +FAGGLAQXRHEGSEKXSVCFFAELWSRCARGGSEHGKGDPLLDANLRVIRRAGKTGCIPF +KARRAIWEYDKYLEETFSLWIIHCNIVKKSXAGNRVESFLMNMMKWNLPKTNWXRSXXTK +QKIWTDLKNFRKNPXKQTERHCFVCMXESRSGEAIRRKRTSARLASLNWXNKRAVFTGKA +SRRCICFRQRSSGIFXKTARPKKELSVSMIFXQERIRRAGSXIXRGPVWXKNLKSXNKKI +IYKXTGQQAWTWYIXTSLXQEKKLLKNTSDHREEGEKRQMKNFVNVDTRFQKSINLTLDT +GDMALVNRYIPTRSSVSILKQYLTNIVRGQGEHATILIGPYGKGKSHLLLVLLALLCKSK +DETAEIQKKIIEADNSTKLLFMELAEVGRPFLPVIVSSFQGDLNESFIFALQEALKRPVS +EICRPSEYSEAVRTMESWKEFYPDTYQRFEKMLEERGCTASLFKERLKNKKKLHSXNSKN +FTRYXHPEVFSIQWCKKKHFGSMKRSTVCFVQSTDMPAFISSLMNSVSIXKDMKQKNFCK +GYEDFAGYVRIGRQPERRADVSDLCGAXEYPXVCQKYXFGNDPGIPWGRRAAERDPVCSF +FPEXLXTDRACTAXERGILYLGNTGKGRSVLSACLFFTSFEKEDFNQIVAKGCYPLTPVC +AYALLNISEKIGQNERTVFTFLAGNEPGSLNRIMEGRNRENLIGVEYVYDYFKNLFRETV +DETYIHNEWLKAEYALTKADTEIEKRIIKAMAIIRMIHPWKSXRYXISRSVWRXISKKEE +CDKAMRELMKKSDLFSAQVLVPMHLRTISVLISRRRLKKNPAAASXHQYLXSVKRDFRTD +LCRSKTVQSGPCNDKIFPIXIHXIXRLPFHWQCKGLFRAPFFRWIYLSDRDSRQGRKGKS +AASSAGIRGXTYYRVTAXRRIFIGMGAFCVLRQSEALQRMSILLKRIKRSVRNXTSMKRT +SAMRXMRDXREILCRKTAAVMYFIQAEKSRISGPEWNLTGIXARSVKTTIRXHRGSTMSF +XISRMCRDSTXRQEMMWXEPFXMEKIXRNMSRAAVLRQWCIVRHFFGQDLPEKISRXTRL +SKDHGGDRRLFCESKWKAGIFSDALXTLAGQRLWGAKRCASAVSCVEILSARRHAGAVPW +KXGTADHGRSAEQYQPVSGKLXSLYRKERYGKRALFTGNGGYLLXCADGKDHTFQPTFRH +YGKYAEMVPFPAAVYAGQXTLSAGNALCGQKFPKVIKADGVKSERIFVXAASECHGFFXK +SYDRALSQGNEAEHGYAFXKCDRRYGKGDQKNIWCKKKATVSRHVCRTGMADSKTVPNAM +YXTKRSRVLWNMWENXIPTTSRRLLPYYPNVWKISILRTGMTDYRKNFCVTLQRYAKRQR +RQRKMPVXRTDKKRFSXRRRMERRSTNIMMRMXKTAPVNFXKIXSKRHWITLETAXRQIR +KWLFXRRHXKNYYSRGNIMEEYIYLDNAATTFPKPEAVYRALDRANRNAAVNAGRGSYAL +AEQAKQLIEDSRGLLLTLTKAKPAAEVVFTPSATFACNQIFGGLPWKREDIVYVSPYEHN +AVMRTLHFLQQRYGFAIEELSVDAGTLELDLEKNPLSVYPKPSNGSCHDTYQQCHRVYSS +GXRSGSFDRYGKRRRXSWMVRRHWDXSLSVWNKAALITIYLRVIRHFTDRLESAVISHNL +QEMQKNXDLXSQEEPEAIHXIXRCRSFFPTVMNREVRTYRRSRDXKRRXKHLEVIMKKCV +RPXRSIIKKNGNXRNCXRQSFKKYRESILIFHRIRKKGAASVPLRSKDILRMMXECCSMK +IIISQSGAAITVHRXSINTXRINHTGGRCVWASDSLIQKKTSGNSYTQWKKSQGVTKVND +DLKRVNLRDIVDRISENTIVLPDFQRGFTWKENNRQKALLASVLTKLPIGTVLFLNVKTE +DYGYKKIGKNEKKHXQFRGKAGSKGAVRRSAEDHGLNGIPFHETSKRKYXRSRITDTGAA +VFLESSKFSKCDRXQKEDLFGGTILSFPNSFRGNYPEISSEEMKERITFVHDRKKAFLYE +KAETKDTREIREYCRNIDNSEDGDAYLLPLFYLLDACEPGSSGAVILEDVVKEIGAEYEK +SIGSWLQAEEYPIEEKEQYLEKFGLEDAQREAVLEEIKTGTLFYQKKKEKIIFLTVXRNG +KCSGECTFVNIXENVLRISGFMRLQFPSMIKSAPLISMKTXTWEENPXVSLIRSXQRHPD +IRRRREISLHRSXMTXSVTTGRNIPHLXKNAQRVRRTVIKITLQTATNHIRQWDGSAAGI +NLKKSFLLPTXRHXXTFWVSLTIFQKEIRDLVCVMLRRSKTXTXKSQKRISAADSIRKNI +RLCGGGMSGLRPRSLIFTDAVWNPKAWXNTLQSDVGYLRYGIFRXSMVXGQXSLRLYGSL +VLECDFIGRVQDRAEPGIYPESSECFIXDPKHQRIXXEIHKSPLQXRTDRXKICRPXHCF +NEKSIRISGGGNWEYHLSILFIRDIFGYFKTASGEKRLSATNTECIEQFREAAKTSHYAD +RKSXRKVXGMPIKRQKAGEKTTAVRIIHRXISCXYRKKRMGXSKIVHXRNTLNFAIRPHX +IMXTSKTIHLPICRSGNRIPDRXRSIAAFSRKKIXRFXEPYYVEVSEFIELSRHLLRRGR +KLIWKRIGTAXCRHXSLKFCIWKRRICEARQRQISACQRNCRKSSRNMQEDNGIGGQVYE +IXKYYHGKFHAVXGQESYRIQLXXCKKCNSSIRRQYGWKNDDSAGIPLGTVWCVNGKRDK +KCRRFSAFKYGYLRNDGCQQSCXGKSRDCSSXRGKTLYHHKRDNLYQSISKVREPGVSEE +MCDADYRVRGHGKLCRGRQQRDRDIDQXTVSKELVPLFFVXWRTVEXCQCRRCPGKYQRI +GTYFNGIICISRGEEPFKRYGKQFRYQKFRSEIEDRVQSMIIXKQNEKIRAXYRKAPGXD +XGTGSQYPELXEKEXRYRTFLSRKPQYGRIAKEKRNIXSYCVSPRESKVFILTRHWXMPL +AIKPIWYLPGQCSVQVWNYXKVRKWNDVISHICVRQRXITSLRTNGVSAVMRLKRQQRVF +CTDGAAKLSRRRQMSVPXXGTLRELQTAGTAKVMSCXKRLMIMQKEVDENVRGISXFLXP +LXKTAKAVRXTYXFCREKEDTAFLXIGDSAFFXGKGRKKKDGSKPVKREXKPRKKRCKAX +KQEMSGIGSWQRLEIAEELYRQLDKEFSEQENKIFWSXTGRYRRISAKCLTQRIKRLNXH +RSMRFRCFTVRSRDTGKRKSVRRRENSKELCVYCNDHGFQQKKETGKDRAXDSRQXHPSD +RIGRTVFXAGRXKYRIDRKGAATGFGTGHYLYVEKKTGSIQSXILTLEADITLIKNRKNH +LQRSNRQGGDSLMENYKFFNDPYKFSGKHARMVSELWSLNDYEHSYFKRLIDIYIVAAIL +GFRIDRKAKRDYAPVEQRTVFGEQMRQASEDLEFILQMMLLLEPAGQGIHEECIRRAFKG +VETEEEFKRYNELFESYMLGGVEELYERLVLQKEEIDTDYSDDKTANLMMLFERFAPKKT +SXNFYKISELLKNQFTKYGKNGIIKNELYYTKKXSVIAVWXAKPKLXSHSSEWDYLLYGF +YRNSKKTNFXYTKCSAQAVLGGEKFMGEMSKTNMDRHRSYRIGLDIGIASVGWAVLENNS +QDEPIRILDLGVRIFEAAEVPKTGAALAAERRDARTARRSDPQKTSSFRKDXVAVXKRRT +DPNRFFYGAVSFTKSAGCLXTSLXRFRTEAEQXGICTGTVTYCKTSWFPLDKKGGVKRRG +QWKSLKSNRREPQTYGRAWLPYRWRNDIXRCLFSYXVCVGRQWISVNTXKXSRXLFPHNA +PGAVRRGGSHPFXMSEKVWKXKGDXKIRSRNIXKLCCHSVLLIWDRDSRQTERRALMQWR +DLEIRSDIVHXKENPANVVRQKQPIRQSYLLHCRRSHIXNWYIWMAHPDFFRKRSGTFYX +KCFRPKKEIKYAAVRKKLNLPLEEKFNTLNYNMKRKGKDNKEEEVDEAAIIAATEKATLS +VCPIVMNTAKESENIXRPCRKKNNRICXMKLERFXPVIRTMTAVXTVXRRQVCRRNWRIL +CXSXHLRSSSTFLXKQXKKSCLIXKKVWYMIKHVKQRAMILKMIIMERKXSCXKAKILQK +PLMRLRTRLXKRSVSQTVKVINAIILKYGSPQAVSIELAREMSKNFEERRKAEKQMEENR +KKNEMAKKGNSGTGQTFAERSGYFEIPFMAXSTGNMPLYRXKDTVRRTVSAGIXYXPHSS +LQYHFXXQLPEQGACYFTGKPXERKPHPIXVFWSGXGPLECLXSKSXSFYQGLXEASQFV +KTGIYKRRPQGIQRAXFKXYKVYYTRDLXYDPSEFRDGAFESGRQEETGLCCQWFHNSLF +KKKMGTDAKRPFYRHSSCNGCCSSSLLYRWYDSKNFQKYTVSXGLIQRTESPGLXDCGCG +DRRNHFFRRPFKRRVGRALRSTGTAAMGAFXRRVRSPYGKXSEEXSGHTSGYVPVVPLSG +RCVXQYPANLCVKDAKSQGDRCSTCRYNTKSGDITKTVERYLRMVAMYYHEPILKIXNWI +RMERLKITTIRTVTDYYMKHXGHDWQNMMVMEKRHLPKSFISQKQMVHRVLLXKKXKPIK +KMSLGVEINKDEAGVGRGIAENANGGMIRVDVFRENGKYYFVPIYIADALKKRLPNKAAM +QNKPYSEWKEMKDENFLFSLYSRDLIGFKNQKGKKVHCTDGTEIVLTNEIVYYIGANIRT +ASISCKAHDNQYEFGSFGIQSLQELKKYQVDVLGNVTEVRQEKRRGFQXMGYRNIKIETS +QQLNIKNSQLLIGSSGEVQIPLEDINSILIESQAVTLSSYLLQKMAEMGIAVYVCDEKHL +PNAVLLPMVRHSRHFKLLKCQMNLGKPKQKGFGSRLXSGKLKINQPVLDSXIXRVPKSFX +KCQNRYNPVIKQMLKQRQQLFIFAGYMVWDFPEVMIISLTQRXITDMQLCVEXLRVLSFV +MDXSLLWDYFIVANXIVITXQMILLRYFVRLXICMFPVVLTYQRLIGHXRLKXKENYMEX +XIMTCWXEERSIYXVIALTKQLQVIAVHCRETVKNWNFRFXWSYRYIVMSKFMRMIVFFD +LPVGTARERKAATKFRNFLIKDGYHMVQYSVYSRICNGNDAVEMHETRLKQHLPSRGSIR +LLTITEKQYESIHILLGEAVFDDTSEATELINIFMRNEATLWLAKYMEDHGISTEKISRELHIPKKKLIPGTKESLDADEFLALCSYLQINPQT +IPIGQGEKXLHIYAYNKDIKTGEDLPCTNTVCKTSICPSCGQRADAGSQIYWCKSCKTLY +MRKSALSVIRKERSWQRICVRSFRKRGCCXSSFWGHPMHFXRSLCGMVQEITIMXMGREF +LFPXRIXNNXILIKCGKNIRNIRKKIQTGILKNRWRYSYRQTESVMRHWWKRQMSISAEW +QQIITLWKCLFRSAVEKTLPLFLIWSCGHSEIRKCSTFLVIRHWNFHLPMNMXNVLSRSI +RRHQSLPLATKRRILRNSVVXSVSSRVMRWCCTVFKTGSIQKTIKSLFRNKKEILTFYGI +RRSESASRSKYDRDSDSPKITKQRIISPIIDWMDFDIWLYLLTTGIDFNRAYRLGYARVG +CWCCPNNSGWSEFLSKIHMKEQSTHFREMLLEFAREIGKEDAEVYVDEGYWKARQGGNGV +AYAQKSVIAFEPCATQENTYNYELQKPIETELYELFRPFGYLNYELGNERLGEVYILGKN +GVPQLKLQGRIGTKKLKVTLLGSEDYGRXDKVSDYQIPDVYGMSCMXERMQAXCDFHKRR +RRWEHPLSDFGXKMCKVQGMCQSFFCRMLYEKGTGNXKEINRXRNHDKDKIPFXRAXKLY +FAGGLAQXRHEGSEKXSVCFFAELWSRCARGGSEHGKGDPLLDANLRVIRRAGKTGCIPF +KARRAIWEYDKYLEETFSLWIIHCNIVKKSXAGNRVESFLMNMMKWNLPKTNWXRSXXTK +QKIWTDLKNFRKNPXKQTERHCFVCMXESRSGEAIRRKRTSARLASLNWXNKRAVFTGKA +SRRCICFRQRSSGIFXKTARPKKELSVSMIFXQERIRRAGSXIXRGPVWXKNLKSXNKKI +IYKXTGQQAWTWYIXTSLXQEKKLLKNTSDHREEGEKRQMKNFVNVDTRFQKSINLTLDT +GDMALVNRYIPTRSSVSILKQYLTNIVRGQGEHATILIGPYGKGKSHLLLVLLALLCKSK +DETAEIQKKIIEADNSTKLLFMELAEVGRPFLPVIVSSFQGDLNESFIFALQEALKRPVS +EICRPSEYSEAVRTMESWKEFYPDTYQRFEKMLEERGCTASLFKERLKNKKKLHSXNSKN +FTRYXHPEVFSIQWCKKKHFGSMKRSTVCFVQSTDMPAFISSLMNSVSIXKDMKQKNFCK +GYEDFAGYVRIGRQPERRADVSDLCGAXEYPXVCQKYXFGNDPGIPWGRRAAERDPVCSF +FPEXLXTDRACTAXERGILYLGNTGKGRSVLSACLFFTSFEKEDFNQIVAKGCYPLTPVC +AYALLNISEKIGQNERTVFTFLAGNEPGSLNRIMEGRNRENLIGVEYVYDYFKNLFRETV +DETYIHNEWLKAEYALTKADTEIEKRIIKAMAIIRMIHPWKSXRYXISRSVWRXISKKEE +CDKAMRELMKKSDLFSAQVLVPMHLRTISVLISRRRLKKNPAAASXHQYLXSVKRDFRTD +LCRSKTVQSGPCNDKIFPIXIHXIXRLPFHWQCKGLFRAPFFRWIYLSDRDSRQGRKGKS +AASSAGIRGXTYYRVTAXRRIFIGMGAFCVLRQSEALQRMSILLKRIKRSVRNXTSMKRT +SAMRXMRDXREILCRKTAAVMYFIQAEKSRISGPEWNLTGIXARSVKTTIRXHRGSTMSF +XISRMCRDSTXRQEMMWXEPFXMEKIXRNMSRAAVLRQWCIVRHFFGQDLPEKISRXTRL +SKDHGGDRRLFCESKWKAGIFSDALXTLAGQRLWGAKRCASAVSCVEILSARRHAGAVPW +KXGTADHGRSAEQYQPVSGKLXSLYRKERYGKRALFTGNGGYLLXCADGKDHTFQPTFRH +YGKYAEMVPFPAAVYAGQXTLSAGNALCGQKFPKVIKADGVKSERIFVXAASECHGFFXK +SYDRALSQGNEAEHGYAFXKCDRRYGKGDQKNIWCKKKATVSRHVCRTGMADSKTVPNAM +YXTKRSRVLWNMWENXIPTTSRRLLPYYPNVWKISILRTGMTDYRKNFCVTLQRYAKRQR +RQRKMPVXRTDKKRFSXRRRMERRSTNIMMRMXKTAPVNFXKIXSKRHWITLETAXRQIR +KWLFXRRHXKNYYSRGNIMEEYIYLDNAATTFPKPEAVYRALDRANRNAAVNAGRGSYAL +AEQAKQLIEDSRGLLLTLTKAKPAAEVVFTPSATFACNQIFGGLPWKREDIVYVSPYEHN +AVMRTLHFLQQRYGFAIEELSVDAGTLELDLEKNPLSVYPKPSNGSCHDTYQQCHRVYSS +GXRSGSFDRYGKRRRXSWMVRRHWDXSLSVWNKAALITIYLRVIRHFTDRLESAVISHNL +QEMQKNXDLXSQEEPEAIHXIXRCRSFFPTVMNREVRTYRRSRDXKRRXKHLEVIMKKCV +RPXRSIIKKNGNXRNCXRQSFKKYRESILIFHRIRKKGAASVPLRSKDILRMMXECCSMK +IIISQSGAAITVHRXSINTXRINHTGGRCVWASDSLIQKKTSGNSYTQWKKSQGVTKVND +DLKRVNLRDIVDRISENTIVLPDFQRGFTWKENNRQKALLASVLTKLPIGTVLFLNVKTE +DYGYKKIGKNEKKHXQFRGKAGSKGAVRRSAEDHGLNGIPFHETSKRKYXRSRITDTGAA +VFLESSKFSKCDRXQKEDLFGGTILSFPNSFRGNYPEISSEEMKERITFVHDRKKAFLYE +KAETKDTREIREYCRNIDNSEDGDAYLLPLFYLLDACEPGSSGAVILEDVVKEIGAEYEK +SIGSWLQAEEYPIEEKEQYLEKFGLEDAQREAVLEEIKTGTLFYQKKKEKIIFLTVXRNG +KCSGECTFVNIXENVLRISGFMRLQFPSMIKSAPLISMKTXTWEENPXVSLIRSXQRHPD +IRRRREISLHRSXMTXSVTTGRNIPHLXKNAQRVRRTVIKITLQTATNHIRQWDGSAAGI +NLKKSFLLPTXRHXXTFWVSLTIFQKEIRDLVCVMLRRSKTXTXKSQKRISAADSIRKNI +RLCGGGMSGLRPRSLIFTDAVWNPKAWXNTLQSDVGYLRYGIFRXSMVXGQXSLRLYGSL +VLECDFIGRVQDRAEPGIYPESSECFIXDPKHQRIXXEIHKSPLQXRTDRXKICRPXHCF +NEKSIRISGGGNWEYHLSILFIRDIFGYFKTASGEKRLSATNTECIEQFREAAKTSHYAD +RKSXRKVXGMPIKRQKAGEKTTAVRIIHRXISCXYRKKRMGXSKIVHXRNTLNFAIRPHX +IMXTSKTIHLPICRSGNRIPDRXRSIAAFSRKKIXRFXEPYYVEVSEFIELSRHLLRRGR +KLIWKRIGTAXCRHXSLKFCIWKRRICEARQRQISACQRNCRKSSRNMQEDNGIGGQVYE +IXKYYHGKFHAVXGQESYRIQLXXCKKCNSSIRRQYGWKNDDSAGIPLGTVWCVNGKRDK +KCRRFSAFKYGYLRNDGCQQSCXGKSRDCSSXRGKTLYHHKRDNLYQSISKVREPGVSEE +MCDADYRVRGHGKLCRGRQQRDRDIDQXTVSKELVPLFFVXWRTVEXCQCRRCPGKYQRI +GTYFNGIICISRGEEPFKRYGKQFRYQKFRSEIEDRVQSMIIXKQNEKIRAXYRKAPGXD +XGTGSQYPELXEKEXRYRTFLSRKPQYGRIAKEKRNIXSYCVSPRESKVFILTRHWXMPL +AIKPIWYLPGQCSVQVWNYXKVRKWNDVISHICVRQRXITSLRTNGVSAVMRLKRQQRVF +CTDGAAKLSRRRQMSVPXXGTLRELQTAGTAKVMSCXKRLMIMQKEVDENVRGISXFLXP +LXKTAKAVRXTYXFCREKEDTAFLXIGDSAFFXGKGRKKKDGSKPVKREXKPRKKRCKAX +KQEMSGIGSWQRLEIAEELYRQLDKEFSEQENKIFWSXTGRYRRISAKCLTQRIKRLNXH +RSMRFRCFTVRSRDTGKRKSVRRRENSKELCVYCNDHGFQQKKETGKDRAXDSRQXHPSD +RIGRTVFXAGRXKYRIDRKGAATGFGTGHYLYVEKKTGSIQSXILTLEADITLIKNRKNH +LQRSNRQGGDSLMENYKFFNDPYKFSGKHARMVSELWSLNDYEHSYFKRLIDIYIVAAIL +GFRIDRKAKRDYAPVEQRTVFGEQMRQASEDLEFILQMMLLLEPAGQGIHEECIRRAFKG +VETEEEFKRYNELFESYMLGGVEELYERLVLQKEEIDTDYSDDKTANLMMLFERFAPKKT +SXNFYKISELLKNQFTKYGKNGIIKNELYYTKKXSVIAVWXAKPKLXSHSSEWDYLLYGF +YRNSKKTNFXYTKCSAQAVLGGEKFMGEMSKTNMDRHRSYRIGLDIGIASVGWAVLENNS +QDEPIRILDLGVRIFEAAEVPKTGAALAAERRDARTARRSDPQKTSSFRKDXVAVXKRRT +DPNRFFYGAVSFTKSAGCLXTSLXRFRTEAEQXGICTGTVTYCKTSWFPLDKKGGVKRRG +QWKSLKSNRREPQTYGRAWLPYRWRNDIXRCLFSYXVCVGRQWISVNTXKXSRXLFPHNA +PGAVRRGGSHPFXMSEKVWKXKGDXKIRSRNIXKLCCHSVLLIWDRDSRQTERRALMQWR +DLEIRSDIVHXKENPANVVRQKQPIRQSYLLHCRRSHIXNWYIWMAHPDFFRKRSGTFYX +KCFRPKKEIKYAAVRKKLNLPLEEKFNTLNYNMKRKGKDNKEEEVDEAAIIAATEKATLS +VCPIVMNTAKESENIXRPCRKKNNRICXMKLERFXPVIRTMTAVXTVXRRQVCRRNWRIL +CXSXHLRSSSTFLXKQXKKSCLIXKKVWYMIKHVKQRAMILKMIIMERKXSCXKAKILQK +PLMRLRTRLXKRSVSQTVKVINAIILKYGSPQAVSIELAREMSKNFEERRKAEKQMEENR +KKNEMAKKGNSGTGQTFAERSGYFEIPFMAXSTGNMPLYRXKDTVRRTVSAGIXYXPHSS +LQYHFXXQLPEQGACYFTGKPXERKPHPIXVFWSGXGPLECLXSKSXSFYQGLXEASQFV +KTGIYKRRPQGIQRAXFKXYKVYYTRDLXYDPSEFRDGAFESGRQEETGLCCQWFHNSLF +KKKMGTDAKRPFYRHSSCNGCCSSSLLYRWYDSKNFQKYTVSXGLIQRTESPGLXDCGCG +DRRNHFFRRPFKRRVGRALRSTGTAAMGAFXRRVRSPYGKXSEEXSGHTSGYVPVVPLSG +RCVXQYPANLCVKDAKSQGDRCSTCRYNTKSGDITKTVERYLRMVAMYYHEPILKIXNWI +RMERLKITTIRTVTDYYMKHXGHDWQNMMVMEKRHLPKSFISQKQMVHRVLLXKKXKPIK +KMSLGVEINKDEAGVGRGIAENANGGMIRVDVFRENGKYYFVPIYIADALKKRLPNKAAM +QNKPYSEWKEMKDENFLFSLYSRDLIGFKNQKGKKVHCTDGTEIVLTNEIVYYIGANIRT +ASISCKAHDNQYEFGSFGIQSLQELKKYQVDVLGNVTEVRQEKRRGFQXMGYRNIKIETS +QQLNIKNSQLLIGSSGEVQIPLEDINSILIESQAVTLSSYLLQKMAEMGIAVYVCDEKHL +PNAVLLPMVRHSRHFKLLKCQMNLGKPKQKGFGSRLXSGKLKINQPVLDSXIXRVPKSFX +KCQNRYNPVIKQMLKQRQQLFIFAGYMVWDFPEVMIISLTQRXITDMQLCVEXLRVLSFV +MDXSLLWDYFIVANXIVITXQMILLRYFVRLXICMFPVVLTYQRLIGHXRLKXKENYMEX +XIMTCWXEERSIYXVIALTKQLQVIAVHCRETVKNWNFRFXWSYRYIVMSKFMRMIVFFD +LPVGTARERKAATKFRNFLIKDGYHMVQYSVYSRICNGNDAVEMHETRLKQHLPSRGSIR +LLTITEKQYESIHILLGEAVFDDTSEATELINIFMRNEATLWLAKYMEDHGISTEKISRELHIPKKKLIPGTKESLDADEFLALCSYLQINPQT +IPIGQGEKXLHIYAYNKDIKTGEDLPCTNTVCKTSICPSCGQRADAGSQIYWCKSCKTLY +MRKSALSVIRKERSWQRICVRSFRKRGCCXSSFWGHPMHFXRSLCGMVQEITIMXMGREF +LFPXRIXNNXILIKCGKNIRNIRKKIQTGILKNRWRYSYRQTESVMRHWWKRQMSISAEW +QQIITLWKCLFRSAVEKTLPLFLIWSCGHSEIRKCSTFLVIRHWNFHLPMNMXNVLSRSI +RRHQSLPLATKRRILRNSVVXSVSSRVMRWCCTVFKTGSIQKTIKSLFRNKKEILTFYGI +RRSESASRSKYDRDSDSPKITKQRIISPIIDWMDFDIWLYLLTTGIDFNRAYRLGYARVG +CWCCPNNSGWSEFLSKIHMKEQSTHFREMLLEFAREIGKEDAEVYVDEGYWKARQGGNGV +AYAQKSVIAFEPCATQENTYNYELQKPIETELYELFRPFGYLNYELGNERLGEVYILGKN +GVPQLKLQGRIGTKKLKVTLLGSEDYGRXDKVSDYQIPDVYGMSCMXERMQAXCDFHKRR +RRWEHPLSDFGXKMCKVQGMCQSFFCRMLYEKGTGNXKEINRXRNHDKDKIPFXRAXKLY +FAGGLAQXRHEGSEKXSVCFFAELWSRCARGGSEHGKGDPLLDANLRVIRRAGKTGCIPF +KARRAIWEYDKYLEETFSLWIIHCNIVKKSXAGNRVESFLMNMMKWNLPKTNWXRSXXTK +QKIWTDLKNFRKNPXKQTERHCFVCMXESRSGEAIRRKRTSARLASLNWXNKRAVFTGKA +SRRCICFRQRSSGIFXKTARPKKELSVSMIFXQERIRRAGSXIXRGPVWXKNLKSXNKKI +IYKXTGQQAWTWYIXTSLXQEKKLLKNTSDHREEGEKRQMKNFVNVDTRFQKSINLTLDT +GDMALVNRYIPTRSSVSILKQYLTNIVRGQGEHATILIGPYGKGKSHLLLVLLALLCKSK +DETAEIQKKIIEADNSTKLLFMELAEVGRPFLPVIVSSFQGDLNESFIFALQEALKRPVS +EICRPSEYSEAVRTMESWKEFYPDTYQRFEKMLEERGCTASLFKERLKNKKKLHSXNSKN +FTRYXHPEVFSIQWCKKKHFGSMKRSTVCFVQSTDMPAFISSLMNSVSIXKDMKQKNFCK +GYEDFAGYVRIGRQPERRADVSDLCGAXEYPXVCQKYXFGNDPGIPWGRRAAERDPVCSF +FPEXLXTDRACTAXERGILYLGNTGKGRSVLSACLFFTSFEKEDFNQIVAKGCYPLTPVC +AYALLNISEKIGQNERTVFTFLAGNEPGSLNRIMEGRNRENLIGVEYVYDYFKNLFRETV +DETYIHNEWLKAEYALTKADTEIEKRIIKAMAIIRMIHPWKSXRYXISRSVWRXISKKEE +CDKAMRELMKKSDLFSAQVLVPMHLRTISVLISRRRLKKNPAAASXHQYLXSVKRDFRTD +LCRSKTVQSGPCNDKIFPIXIHXIXRLPFHWQCKGLFRAPFFRWIYLSDRDSRQGRKGKS +AASSAGIRGXTYYRVTAXRRIFIGMGAFCVLRQSEALQRMSILLKRIKRSVRNXTSMKRT +SAMRXMRDXREILCRKTAAVMYFIQAEKSRISGPEWNLTGIXARSVKTTIRXHRGSTMSF +XISRMCRDSTXRQEMMWXEPFXMEKIXRNMSRAAVLRQWCIVRHFFGQDLPEKISRXTRL +SKDHGGDRRLFCESKWKAGIFSDALXTLAGQRLWGAKRCASAVSCVEILSARRHAGAVPW +KXGTADHGRSAEQYQPVSGKLXSLYRKERYGKRALFTGNGGYLLXCADGKDHTFQPTFRH +YGKYAEMVPFPAAVYAGQXTLSAGNALCGQKFPKVIKADGVKSERIFVXAASECHGFFXK +SYDRALSQGNEAEHGYAFXKCDRRYGKGDQKNIWCKKKATVSRHVCRTGMADSKTVPNAM +YXTKRSRVLWNMWENXIPTTSRRLLPYYPNVWKISILRTGMTDYRKNFCVTLQRYAKRQR +RQRKMPVXRTDKKRFSXRRRMERRSTNIMMRMXKTAPVNFXKIXSKRHWITLETAXRQIR +KWLFXRRHXKNYYSRGNIMEEYIYLDNAATTFPKPEAVYRALDRANRNAAVNAGRGSYAL +AEQAKQLIEDSRGLLLTLTKAKPAAEVVFTPSATFACNQIFGGLPWKREDIVYVSPYEHN +AVMRTLHFLQQRYGFAIEELSVDAGTLELDLEKNPLSVYPKPSNGSCHDTYQQCHRVYSS +GXRSGSFDRYGKRRRXSWMVRRHWDXSLSVWNKAALITIYLRVIRHFTDRLESAVISHNL +QEMQKNXDLXSQEEPEAIHXIXRCRSFFPTVMNREVRTYRRSRDXKRRXKHLEVIMKKCV +RPXRSIIKKNGNXRNCXRQSFKKYRESILIFHRIRKKGAASVPLRSKDILRMMXECCSMK +IIISQSGAAITVHRXSINTXRINHTGGRCVWASDSLIQKKTSGNSYTQWKKSQGVTKVND +DLKRVNLRDIVDRISENTIVLPDFQRGFTWKENNRQKALLASVLTKLPIGTVLFLNVKTE +DYGYKKIGKNEKKHXQFRGKAGSKGAVRRSAEDHGLNGIPFHETSKRKYXRSRITDTGAA +VFLESSKFSKCDRXQKEDLFGGTILSFPNSFRGNYPEISSEEMKERITFVHDRKKAFLYE +KAETKDTREIREYCRNIDNSEDGDAYLLPLFYLLDACEPGSSGAVILEDVVKEIGAEYEK +SIGSWLQAEEYPIEEKEQYLEKFGLEDAQREAVLEEIKTGTLFYQKKKEKIIFLTVXRNG +KCSGECTFVNIXENVLRISGFMRLQFPSMIKSAPLISMKTXTWEENPXVSLIRSXQRHPD +IRRRREISLHRSXMTXSVTTGRNIPHLXKNAQRVRRTVIKITLQTATNHIRQWDGSAAGI +NLKKSFLLPTXRHXXTFWVSLTIFQKEIRDLVCVMLRRSKTXTXKSQKRISAADSIRKNI +RLCGGGMSGLRPRSLIFTDAVWNPKAWXNTLQSDVGYLRYGIFRXSMVXGQXSLRLYGSL +VLECDFIGRVQDRAEPGIYPESSECFIXDPKHQRIXXEIHKSPLQXRTDRXKICRPXHCF +NEKSIRISGGGNWEYHLSILFIRDIFGYFKTASGEKRLSATNTECIEQFREAAKTSHYAD +RKSXRKVXGMPIKRQKAGEKTTAVRIIHRXISCXYRKKRMGXSKIVHXRNTLNFAIRPHX +IMXTSKTIHLPICRSGNRIPDRXRSIAAFSRKKIXRFXEPYYVEVSEFIELSRHLLRRGR +KLIWKRIGTAXCRHXSLKFCIWKRRICEARQRQISACQRNCRKSSRNMQEDNGIGGQVYE +IXKYYHGKFHAVXGQESYRIQLXXCKKCNSSIRRQYGWKNDDSAGIPLGTVWCVNGKRDK +KCRRFSAFKYGYLRNDGCQQSCXGKSRDCSSXRGKTLYHHKRDNLYQSISKVREPGVSEE +MCDADYRVRGHGKLCRGRQQRDRDIDQXTVSKELVPLFFVXWRTVEXCQCRRCPGKYQRI +GTYFNGIICISRGEEPFKRYGKQFRYQKFRSEIEDRVQSMIIXKQNEKIRAXYRKAPGXD +XGTGSQYPELXEKEXRYRTFLSRKPQYGRIAKEKRNIXSYCVSPRESKVFILTRHWXMPL +AIKPIWYLPGQCSVQVWNYXKVRKWNDVISHICVRQRXITSLRTNGVSAVMRLKRQQRVF +CTDGAAKLSRRRQMSVPXXGTLRELQTAGTAKVMSCXKRLMIMQKEVDENVRGISXFLXP +LXKTAKAVRXTYXFCREKEDTAFLXIGDSAFFXGKGRKKKDGSKPVKREXKPRKKRCKAX +KQEMSGIGSWQRLEIAEELYRQLDKEFSEQENKIFWSXTGRYRRISAKCLTQRIKRLNXH +RSMRFRCFTVRSRDTGKRKSVRRRENSKELCVYCNDHGFQQKKETGKDRAXDSRQXHPSD +RIGRTVFXAGRXKYRIDRKGAATGFGTGHYLYVEKKTGSIQSXILTLEADITLIKNRKNH +LQRSNRQGGDSLMENYKFFNDPYKFSGKHARMVSELWSLNDYEHSYFKRLIDIYIVAAIL +GFRIDRKAKRDYAPVEQRTVFGEQMRQASEDLEFILQMMLLLEPAGQGIHEECIRRAFKG +VETEEEFKRYNELFESYMLGGVEELYERLVLQKEEIDTDYSDDKTANLMMLFERFAPKKT +SXNFYKISELLKNQFTKYGKNGIIKNELYYTKKXSVIAVWXAKPKLXSHSSEWDYLLYGF +YRNSKKTNFXYTKCSAQAVLGGEKFMGEMSKTNMDRHRSYRIGLDIGIASVGWAVLENNS +QDEPIRILDLGVRIFEAAEVPKTGAALAAERRDARTARRSDPQKTSSFRKDXVAVXKRRT +DPNRFFYGAVSFTKSAGCLXTSLXRFRTEAEQXGICTGTVTYCKTSWFPLDKKGGVKRRG +QWKSLKSNRREPQTYGRAWLPYRWRNDIXRCLFSYXVCVGRQWISVNTXKXSRXLFPHNA +PGAVRRGGSHPFXMSEKVWKXKGDXKIRSRNIXKLCCHSVLLIWDRDSRQTERRALMQWR +DLEIRSDIVHXKENPANVVRQKQPIRQSYLLHCRRSHIXNWYIWMAHPDFFRKRSGTFYX +KCFRPKKEIKYAAVRKKLNLPLEEKFNTLNYNMKRKGKDNKEEEVDEAAIIAATEKATLS +VCPIVMNTAKESENIXRPCRKKNNRICXMKLERFXPVIRTMTAVXTVXRRQVCRRNWRIL +CXSXHLRSSSTFLXKQXKKSCLIXKKVWYMIKHVKQRAMILKMIIMERKXSCXKAKILQK +PLMRLRTRLXKRSVSQTVKVINAIILKYGSPQAVSIELAREMSKNFEERRKAEKQMEENR +KKNEMAKKGNSGTGQTFAERSGYFEIPFMAXSTGNMPLYRXKDTVRRTVSAGIXYXPHSS +LQYHFXXQLPEQGACYFTGKPXERKPHPIXVFWSGXGPLECLXSKSXSFYQGLXEASQFV +KTGIYKRRPQGIQRAXFKXYKVYYTRDLXYDPSEFRDGAFESGRQEETGLCCQWFHNSLF +KKKMGTDAKRPFYRHSSCNGCCSSSLLYRWYDSKNFQKYTVSXGLIQRTESPGLXDCGCG +DRRNHFFRRPFKRRVGRALRSTGTAAMGAFXRRVRSPYGKXSEEXSGHTSGYVPVVPLSG +RCVXQYPANLCVKDAKSQGDRCSTCRYNTKSGDITKTVERYLRMVAMYYHEPILKIXNWI +RMERLKITTIRTVTDYYMKHXGHDWQNMMVMEKRHLPKSFISQKQMVHRVLLXKKXKPIK +KMSLGVEINKDEAGVGRGIAENANGGMIRVDVFRENGKYYFVPIYIADALKKRLPNKAAM +QNKPYSEWKEMKDENFLFSLYSRDLIGFKNQKGKKVHCTDGTEIVLTNEIVYYIGANIRT +ASISCKAHDNQYEFGSFGIQSLQELKKYQVDVLGNVTEVRQEKRRGFQXMGYRNIKIETS +QQLNIKNSQLLIGSSGEVQIPLEDINSILIESQAVTLSSYLLQKMAEMGIAVYVCDEKHL +PNAVLLPMVRHSRHFKLLKCQMNLGKPKQKGFGSRLXSGKLKINQPVLDSXIXRVPKSFX +KCQNRYNPVIKQMLKQRQQLFIFAGYMVWDFPEVMIISLTQRXITDMQLCVEXLRVLSFV +MDXSLLWDYFIVANXIVITXQMILLRYFVRLXICMFPVVLTYQRLIGHXRLKXKENYMEX +XIMTCWXEERSIYXVIALTKQLQVIAVHCRETVKNWNFRFXWSYRYIVMSKFMRMIVFFD +LPVGTARERKAATKFRNFLIKDGYHMVQYSVYSRICNGNDAVEMHETRLKQHLPSRGSIR +LLTITEKQYESIHILLGEAVFDDTSEATELINIFMRNEATLWLAKYMEDHGISTEKISRELHIPKKKLIPGTKESLDADEFLALCSYLQINPQT +IPIGQGEKXLHIYAYNKDIKTGEDLPCTNTVCKTSICPSCGQRADAGSQIYWCKSCKTLY +MRKSALSVIRKERSWQRICVRSFRKRGCCXSSFWGHPMHFXRSLCGMVQEITIMXMGREF +LFPXRIXNNXILIKCGKNIRNIRKKIQTGILKNRWRYSYRQTESVMRHWWKRQMSISAEW +QQIITLWKCLFRSAVEKTLPLFLIWSCGHSEIRKCSTFLVIRHWNFHLPMNMXNVLSRSI +RRHQSLPLATKRRILRNSVVXSVSSRVMRWCCTVFKTGSIQKTIKSLFRNKKEILTFYGI +RRSESASRSKYDRDSDSPKITKQRIISPIIDWMDFDIWLYLLTTGIDFNRAYRLGYARVG +CWCCPNNSGWSEFLSKIHMKEQSTHFREMLLEFAREIGKEDAEVYVDEGYWKARQGGNGV +AYAQKSVIAFEPCATQENTYNYELQKPIETELYELFRPFGYLNYELGNERLGEVYILGKN +GVPQLKLQGRIGTKKLKVTLLGSEDYGRXDKVSDYQIPDVYGMSCMXERMQAXCDFHKRR +RRWEHPLSDFGXKMCKVQGMCQSFFCRMLYEKGTGNXKEINRXRNHDKDKIPFXRAXKLY +FAGGLAQXRHEGSEKXSVCFFAELWSRCARGGSEHGKGDPLLDANLRVIRRAGKTGCIPF +KARRAIWEYDKYLEETFSLWIIHCNIVKKSXAGNRVESFLMNMMKWNLPKTNWXRSXXTK +QKIWTDLKNFRKNPXKQTERHCFVCMXESRSGEAIRRKRTSARLASLNWXNKRAVFTGKA +SRRCICFRQRSSGIFXKTARPKKELSVSMIFXQERIRRAGSXIXRGPVWXKNLKSXNKKI +IYKXTGQQAWTWYIXTSLXQEKKLLKNTSDHREEGEKRQMKNFVNVDTRFQKSINLTLDT +GDMALVNRYIPTRSSVSILKQYLTNIVRGQGEHATILIGPYGKGKSHLLLVLLALLCKSK +DETAEIQKKIIEADNSTKLLFMELAEVGRPFLPVIVSSFQGDLNESFIFALQEALKRPVS +EICRPSEYSEAVRTMESWKEFYPDTYQRFEKMLEERGCTASLFKERLKNKKKLHSXNSKN +FTRYXHPEVFSIQWCKKKHFGSMKRSTVCFVQSTDMPAFISSLMNSVSIXKDMKQKNFCK +GYEDFAGYVRIGRQPERRADVSDLCGAXEYPXVCQKYXFGNDPGIPWGRRAAERDPVCSF +FPEXLXTDRACTAXERGILYLGNTGKGRSVLSACLFFTSFEKEDFNQIVAKGCYPLTPVC +AYALLNISEKIGQNERTVFTFLAGNEPGSLNRIMEGRNRENLIGVEYVYDYFKNLFRETV +DETYIHNEWLKAEYALTKADTEIEKRIIKAMAIIRMIHPWKSXRYXISRSVWRXISKKEE +CDKAMRELMKKSDLFSAQVLVPMHLRTISVLISRRRLKKNPAAASXHQYLXSVKRDFRTD +LCRSKTVQSGPCNDKIFPIXIHXIXRLPFHWQCKGLFRAPFFRWIYLSDRDSRQGRKGKS +AASSAGIRGXTYYRVTAXRRIFIGMGAFCVLRQSEALQRMSILLKRIKRSVRNXTSMKRT +SAMRXMRDXREILCRKTAAVMYFIQAEKSRISGPEWNLTGIXARSVKTTIRXHRGSTMSF +XISRMCRDSTXRQEMMWXEPFXMEKIXRNMSRAAVLRQWCIVRHFFGQDLPEKISRXTRL +SKDHGGDRRLFCESKWKAGIFSDALXTLAGQRLWGAKRCASAVSCVEILSARRHAGAVPW +KXGTADHGRSAEQYQPVSGKLXSLYRKERYGKRALFTGNGGYLLXCADGKDHTFQPTFRH +YGKYAEMVPFPAAVYAGQXTLSAGNALCGQKFPKVIKADGVKSERIFVXAASECHGFFXK +SYDRALSQGNEAEHGYAFXKCDRRYGKGDQKNIWCKKKATVSRHVCRTGMADSKTVPNAM +YXTKRSRVLWNMWENXIPTTSRRLLPYYPNVWKISILRTGMTDYRKNFCVTLQRYAKRQR +RQRKMPVXRTDKKRFSXRRRMERRSTNIMMRMXKTAPVNFXKIXSKRHWITLETAXRQIR +KWLFXRRHXKNYYSRGNIMEEYIYLDNAATTFPKPEAVYRALDRANRNAAVNAGRGSYAL +AEQAKQLIEDSRGLLLTLTKAKPAAEVVFTPSATFACNQIFGGLPWKREDIVYVSPYEHN +AVMRTLHFLQQRYGFAIEELSVDAGTLELDLEKNPLSVYPKPSNGSCHDTYQQCHRVYSS +GXRSGSFDRYGKRRRXSWMVRRHWDXSLSVWNKAALITIYLRVIRHFTDRLESAVISHNL +QEMQKNXDLXSQEEPEAIHXIXRCRSFFPTVMNREVRTYRRSRDXKRRXKHLEVIMKKCV +RPXRSIIKKNGNXRNCXRQSFKKYRESILIFHRIRKKGAASVPLRSKDILRMMXECCSMK +IIISQSGAAITVHRXSINTXRINHTGGRCVWASDSLIQKKTSGNSYTQWKKSQGVTKVND +DLKRVNLRDIVDRISENTIVLPDFQRGFTWKENNRQKALLASVLTKLPIGTVLFLNVKTE +DYGYKKIGKNEKKHXQFRGKAGSKGAVRRSAEDHGLNGIPFHETSKRKYXRSRITDTGAA +VFLESSKFSKCDRXQKEDLFGGTILSFPNSFRGNYPEISSEEMKERITFVHDRKKAFLYE +KAETKDTREIREYCRNIDNSEDGDAYLLPLFYLLDACEPGSSGAVILEDVVKEIGAEYEK +SIGSWLQAEEYPIEEKEQYLEKFGLEDAQREAVLEEIKTGTLFYQKKKEKIIFLTVXRNG +KCSGECTFVNIXENVLRISGFMRLQFPSMIKSAPLISMKTXTWEENPXVSLIRSXQRHPD +IRRRREISLHRSXMTXSVTTGRNIPHLXKNAQRVRRTVIKITLQTATNHIRQWDGSAAGI +NLKKSFLLPTXRHXXTFWVSLTIFQKEIRDLVCVMLRRSKTXTXKSQKRISAADSIRKNI +RLCGGGMSGLRPRSLIFTDAVWNPKAWXNTLQSDVGYLRYGIFRXSMVXGQXSLRLYGSL +VLECDFIGRVQDRAEPGIYPESSECFIXDPKHQRIXXEIHKSPLQXRTDRXKICRPXHCF +NEKSIRISGGGNWEYHLSILFIRDIFGYFKTASGEKRLSATNTECIEQFREAAKTSHYAD +RKSXRKVXGMPIKRQKAGEKTTAVRIIHRXISCXYRKKRMGXSKIVHXRNTLNFAIRPHX +IMXTSKTIHLPICRSGNRIPDRXRSIAAFSRKKIXRFXEPYYVEVSEFIELSRHLLRRGR +KLIWKRIGTAXCRHXSLKFCIWKRRICEARQRQISACQRNCRKSSRNMQEDNGIGGQVYE +IXKYYHGKFHAVXGQESYRIQLXXCKKCNSSIRRQYGWKNDDSAGIPLGTVWCVNGKRDK +KCRRFSAFKYGYLRNDGCQQSCXGKSRDCSSXRGKTLYHHKRDNLYQSISKVREPGVSEE +MCDADYRVRGHGKLCRGRQQRDRDIDQXTVSKELVPLFFVXWRTVEXCQCRRCPGKYQRI +GTYFNGIICISRGEEPFKRYGKQFRYQKFRSEIEDRVQSMIIXKQNEKIRAXYRKAPGXD +XGTGSQYPELXEKEXRYRTFLSRKPQYGRIAKEKRNIXSYCVSPRESKVFILTRHWXMPL +AIKPIWYLPGQCSVQVWNYXKVRKWNDVISHICVRQRXITSLRTNGVSAVMRLKRQQRVF +CTDGAAKLSRRRQMSVPXXGTLRELQTAGTAKVMSCXKRLMIMQKEVDENVRGISXFLXP +LXKTAKAVRXTYXFCREKEDTAFLXIGDSAFFXGKGRKKKDGSKPVKREXKPRKKRCKAX +KQEMSGIGSWQRLEIAEELYRQLDKEFSEQENKIFWSXTGRYRRISAKCLTQRIKRLNXH +RSMRFRCFTVRSRDTGKRKSVRRRENSKELCVYCNDHGFQQKKETGKDRAXDSRQXHPSD +RIGRTVFXAGRXKYRIDRKGAATGFGTGHYLYVEKKTGSIQSXILTLEADITLIKNRKNH +LQRSNRQGGDSLMENYKFFNDPYKFSGKHARMVSELWSLNDYEHSYFKRLIDIYIVAAIL +GFRIDRKAKRDYAPVEQRTVFGEQMRQASEDLEFILQMMLLLEPAGQGIHEECIRRAFKG +VETEEEFKRYNELFESYMLGGVEELYERLVLQKEEIDTDYSDDKTANLMMLFERFAPKKT +SXNFYKISELLKNQFTKYGKNGIIKNELYYTKKXSVIAVWXAKPKLXSHSSEWDYLLYGF +YRNSKKTNFXYTKCSAQAVLGGEKFMGEMSKTNMDRHRSYRIGLDIGIASVGWAVLENNS +QDEPIRILDLGVRIFEAAEVPKTGAALAAERRDARTARRSDPQKTSSFRKDXVAVXKRRT +DPNRFFYGAVSFTKSAGCLXTSLXRFRTEAEQXGICTGTVTYCKTSWFPLDKKGGVKRRG +QWKSLKSNRREPQTYGRAWLPYRWRNDIXRCLFSYXVCVGRQWISVNTXKXSRXLFPHNA +PGAVRRGGSHPFXMSEKVWKXKGDXKIRSRNIXKLCCHSVLLIWDRDSRQTERRALMQWR +DLEIRSDIVHXKENPANVVRQKQPIRQSYLLHCRRSHIXNWYIWMAHPDFFRKRSGTFYX +KCFRPKKEIKYAAVRKKLNLPLEEKFNTLNYNMKRKGKDNKEEEVDEAAIIAATEKATLS +VCPIVMNTAKESENIXRPCRKKNNRICXMKLERFXPVIRTMTAVXTVXRRQVCRRNWRIL +CXSXHLRSSSTFLXKQXKKSCLIXKKVWYMIKHVKQRAMILKMIIMERKXSCXKAKILQK +PLMRLRTRLXKRSVSQTVKVINAIILKYGSPQAVSIELAREMSKNFEERRKAEKQMEENR +KKNEMAKKGNSGTGQTFAERSGYFEIPFMAXSTGNMPLYRXKDTVRRTVSAGIXYXPHSS +LQYHFXXQLPEQGACYFTGKPXERKPHPIXVFWSGXGPLECLXSKSXSFYQGLXEASQFV +KTGIYKRRPQGIQRAXFKXYKVYYTRDLXYDPSEFRDGAFESGRQEETGLCCQWFHNSLF +KKKMGTDAKRPFYRHSSCNGCCSSSLLYRWYDSKNFQKYTVSXGLIQRTESPGLXDCGCG +DRRNHFFRRPFKRRVGRALRSTGTAAMGAFXRRVRSPYGKXSEEXSGHTSGYVPVVPLSG +RCVXQYPANLCVKDAKSQGDRCSTCRYNTKSGDITKTVERYLRMVAMYYHEPILKIXNWI +RMERLKITTIRTVTDYYMKHXGHDWQNMMVMEKRHLPKSFISQKQMVHRVLLXKKXKPIK +KMSLGVEINKDEAGVGRGIAENANGGMIRVDVFRENGKYYFVPIYIADALKKRLPNKAAM +QNKPYSEWKEMKDENFLFSLYSRDLIGFKNQKGKKVHCTDGTEIVLTNEIVYYIGANIRT +ASISCKAHDNQYEFGSFGIQSLQELKKYQVDVLGNVTEVRQEKRRGFQXMGYRNIKIETS +QQLNIKNSQLLIGSSGEVQIPLEDINSILIESQAVTLSSYLLQKMAEMGIAVYVCDEKHL +PNAVLLPMVRHSRHFKLLKCQMNLGKPKQKGFGSRLXSGKLKINQPVLDSXIXRVPKSFX +KCQNRYNPVIKQMLKQRQQLFIFAGYMVWDFPEVMIISLTQRXITDMQLCVEXLRVLSFV +MDXSLLWDYFIVANXIVITXQMILLRYFVRLXICMFPVVLTYQRLIGHXRLKXKENYMEX +XIMTCWXEERSIYXVIALTKQLQVIAVHCRETVKNWNFRFXWSYRYIVMSKFMRMIVFFD +LPVGTARERKAATKFRNFLIKDGYHMVQYSVYSRICNGNDAVEMHETRLKQHLPSRGSIR +LLTITEKQYESIHILLGEAVFDDTSEATELINIFMRNEATLWLAKYMEDHGISTEKISRELHIPKKKLIPGTKESLDADEFLALCSYLQINPQT +IPIGQGEKXLHIYAYNKDIKTGEDLPCTNTVCKTSICPSCGQRADAGSQIYWCKSCKTLY +MRKSALSVIRKERSWQRICVRSFRKRGCCXSSFWGHPMHFXRSLCGMVQEITIMXMGREF +LFPXRIXNNXILIKCGKNIRNIRKKIQTGILKNRWRYSYRQTESVMRHWWKRQMSISAEW +QQIITLWKCLFRSAVEKTLPLFLIWSCGHSEIRKCSTFLVIRHWNFHLPMNMXNVLSRSI +RRHQSLPLATKRRILRNSVVXSVSSRVMRWCCTVFKTGSIQKTIKSLFRNKKEILTFYGI +RRSESASRSKYDRDSDSPKITKQRIISPIIDWMDFDIWLYLLTTGIDFNRAYRLGYARVG +CWCCPNNSGWSEFLSKIHMKEQSTHFREMLLEFAREIGKEDAEVYVDEGYWKARQGGNGV +AYAQKSVIAFEPCATQENTYNYELQKPIETELYELFRPFGYLNYELGNERLGEVYILGKN +GVPQLKLQGRIGTKKLKVTLLGSEDYGRXDKVSDYQIPDVYGMSCMXERMQAXCDFHKRR +RRWEHPLSDFGXKMCKVQGMCQSFFCRMLYEKGTGNXKEINRXRNHDKDKIPFXRAXKLY +FAGGLAQXRHEGSEKXSVCFFAELWSRCARGGSEHGKGDPLLDANLRVIRRAGKTGCIPF +KARRAIWEYDKYLEETFSLWIIHCNIVKKSXAGNRVESFLMNMMKWNLPKTNWXRSXXTK +QKIWTDLKNFRKNPXKQTERHCFVCMXESRSGEAIRRKRTSARLASLNWXNKRAVFTGKA +SRRCICFRQRSSGIFXKTARPKKELSVSMIFXQERIRRAGSXIXRGPVWXKNLKSXNKKI +IYKXTGQQAWTWYIXTSLXQEKKLLKNTSDHREEGEKRQMKNFVNVDTRFQKSINLTLDT +GDMALVNRYIPTRSSVSILKQYLTNIVRGQGEHATILIGPYGKGKSHLLLVLLALLCKSK +DETAEIQKKIIEADNSTKLLFMELAEVGRPFLPVIVSSFQGDLNESFIFALQEALKRPVS +EICRPSEYSEAVRTMESWKEFYPDTYQRFEKMLEERGCTASLFKERLKNKKKLHSXNSKN +FTRYXHPEVFSIQWCKKKHFGSMKRSTVCFVQSTDMPAFISSLMNSVSIXKDMKQKNFCK +GYEDFAGYVRIGRQPERRADVSDLCGAXEYPXVCQKYXFGNDPGIPWGRRAAERDPVCSF +FPEXLXTDRACTAXERGILYLGNTGKGRSVLSACLFFTSFEKEDFNQIVAKGCYPLTPVC +AYALLNISEKIGQNERTVFTFLAGNEPGSLNRIMEGRNRENLIGVEYVYDYFKNLFRETV +DETYIHNEWLKAEYALTKADTEIEKRIIKAMAIIRMIHPWKSXRYXISRSVWRXISKKEE +CDKAMRELMKKSDLFSAQVLVPMHLRTISVLISRRRLKKNPAAASXHQYLXSVKRDFRTD +LCRSKTVQSGPCNDKIFPIXIHXIXRLPFHWQCKGLFRAPFFRWIYLSDRDSRQGRKGKS +AASSAGIRGXTYYRVTAXRRIFIGMGAFCVLRQSEALQRMSILLKRIKRSVRNXTSMKRT +SAMRXMRDXREILCRKTAAVMYFIQAEKSRISGPEWNLTGIXARSVKTTIRXHRGSTMSF +XISRMCRDSTXRQEMMWXEPFXMEKIXRNMSRAAVLRQWCIVRHFFGQDLPEKISRXTRL +SKDHGGDRRLFCESKWKAGIFSDALXTLAGQRLWGAKRCASAVSCVEILSARRHAGAVPW +KXGTADHGRSAEQYQPVSGKLXSLYRKERYGKRALFTGNGGYLLXCADGKDHTFQPTFRH +YGKYAEMVPFPAAVYAGQXTLSAGNALCGQKFPKVIKADGVKSERIFVXAASECHGFFXK +SYDRALSQGNEAEHGYAFXKCDRRYGKGDQKNIWCKKKATVSRHVCRTGMADSKTVPNAM +YXTKRSRVLWNMWENXIPTTSRRLLPYYPNVWKISILRTGMTDYRKNFCVTLQRYAKRQR +RQRKMPVXRTDKKRFSXRRRMERRSTNIMMRMXKTAPVNFXKIXSKRHWITLETAXRQIR +KWLFXRRHXKNYYSRGNIMEEYIYLDNAATTFPKPEAVYRALDRANRNAAVNAGRGSYAL +AEQAKQLIEDSRGLLLTLTKAKPAAEVVFTPSATFACNQIFGGLPWKREDIVYVSPYEHN +AVMRTLHFLQQRYGFAIEELSVDAGTLELDLEKNPLSVYPKPSNGSCHDTYQQCHRVYSS +GXRSGSFDRYGKRRRXSWMVRRHWDXSLSVWNKAALITIYLRVIRHFTDRLESAVISHNL +QEMQKNXDLXSQEEPEAIHXIXRCRSFFPTVMNREVRTYRRSRDXKRRXKHLEVIMKKCV +RPXRSIIKKNGNXRNCXRQSFKKYRESILIFHRIRKKGAASVPLRSKDILRMMXECCSMK +IIISQSGAAITVHRXSINTXRINHTGGRCVWASDSLIQKKTSGNSYTQWKKSQGVTKVND +DLKRVNLRDIVDRISENTIVLPDFQRGFTWKENNRQKALLASVLTKLPIGTVLFLNVKTE +DYGYKKIGKNEKKHXQFRGKAGSKGAVRRSAEDHGLNGIPFHETSKRKYXRSRITDTGAA +VFLESSKFSKCDRXQKEDLFGGTILSFPNSFRGNYPEISSEEMKERITFVHDRKKAFLYE +KAETKDTREIREYCRNIDNSEDGDAYLLPLFYLLDACEPGSSGAVILEDVVKEIGAEYEK +SIGSWLQAEEYPIEEKEQYLEKFGLEDAQREAVLEEIKTGTLFYQKKKEKIIFLTVXRNG +KCSGECTFVNIXENVLRISGFMRLQFPSMIKSAPLISMKTXTWEENPXVSLIRSXQRHPD +IRRRREISLHRSXMTXSVTTGRNIPHLXKNAQRVRRTVIKITLQTATNHIRQWDGSAAGI +NLKKSFLLPTXRHXXTFWVSLTIFQKEIRDLVCVMLRRSKTXTXKSQKRISAADSIRKNI +RLCGGGMSGLRPRSLIFTDAVWNPKAWXNTLQSDVGYLRYGIFRXSMVXGQXSLRLYGSL +VLECDFIGRVQDRAEPGIYPESSECFIXDPKHQRIXXEIHKSPLQXRTDRXKICRPXHCF +NEKSIRISGGGNWEYHLSILFIRDIFGYFKTASGEKRLSATNTECIEQFREAAKTSHYAD +RKSXRKVXGMPIKRQKAGEKTTAVRIIHRXISCXYRKKRMGXSKIVHXRNTLNFAIRPHX +IMXTSKTIHLPICRSGNRIPDRXRSIAAFSRKKIXRFXEPYYVEVSEFIELSRHLLRRGR +KLIWKRIGTAXCRHXSLKFCIWKRRICEARQRQISACQRNCRKSSRNMQEDNGIGGQVYE +IXKYYHGKFHAVXGQESYRIQLXXCKKCNSSIRRQYGWKNDDSAGIPLGTVWCVNGKRDK +KCRRFSAFKYGYLRNDGCQQSCXGKSRDCSSXRGKTLYHHKRDNLYQSISKVREPGVSEE +MCDADYRVRGHGKLCRGRQQRDRDIDQXTVSKELVPLFFVXWRTVEXCQCRRCPGKYQRI +GTYFNGIICISRGEEPFKRYGKQFRYQKFRSEIEDRVQSMIIXKQNEKIRAXYRKAPGXD +XGTGSQYPELXEKEXRYRTFLSRKPQYGRIAKEKRNIXSYCVSPRESKVFILTRHWXMPL +AIKPIWYLPGQCSVQVWNYXKVRKWNDVISHICVRQRXITSLRTNGVSAVMRLKRQQRVF +CTDGAAKLSRRRQMSVPXXGTLRELQTAGTAKVMSCXKRLMIMQKEVDENVRGISXFLXP +LXKTAKAVRXTYXFCREKEDTAFLXIGDSAFFXGKGRKKKDGSKPVKREXKPRKKRCKAX +KQEMSGIGSWQRLEIAEELYRQLDKEFSEQENKIFWSXTGRYRRISAKCLTQRIKRLNXH +RSMRFRCFTVRSRDTGKRKSVRRRENSKELCVYCNDHGFQQKKETGKDRAXDSRQXHPSD +RIGRTVFXAGRXKYRIDRKGAATGFGTGHYLYVEKKTGSIQSXILTLEADITLIKNRKNH +LQRSNRQGGDSLMENYKFFNDPYKFSGKHARMVSELWSLNDYEHSYFKRLIDIYIVAAIL +GFRIDRKAKRDYAPVEQRTVFGEQMRQASEDLEFILQMMLLLEPAGQGIHEECIRRAFKG +VETEEEFKRYNELFESYMLGGVEELYERLVLQKEEIDTDYSDDKTANLMMLFERFAPKKT +SXNFYKISELLKNQFTKYGKNGIIKNELYYTKKXSVIAVWXAKPKLXSHSSEWDYLLYGF +YRNSKKTNFXYTKCSAQAVLGGEKFMGEMSKTNMDRHRSYRIGLDIGIASVGWAVLENNS +QDEPIRILDLGVRIFEAAEVPKTGAALAAERRDARTARRSDPQKTSSFRKDXVAVXKRRT +DPNRFFYGAVSFTKSAGCLXTSLXRFRTEAEQXGICTGTVTYCKTSWFPLDKKGGVKRRG +QWKSLKSNRREPQTYGRAWLPYRWRNDIXRCLFSYXVCVGRQWISVNTXKXSRXLFPHNA +PGAVRRGGSHPFXMSEKVWKXKGDXKIRSRNIXKLCCHSVLLIWDRDSRQTERRALMQWR +DLEIRSDIVHXKENPANVVRQKQPIRQSYLLHCRRSHIXNWYIWMAHPDFFRKRSGTFYX +KCFRPKKEIKYAAVRKKLNLPLEEKFNTLNYNMKRKGKDNKEEEVDEAAIIAATEKATLS +VCPIVMNTAKESENIXRPCRKKNNRICXMKLERFXPVIRTMTAVXTVXRRQVCRRNWRIL +CXSXHLRSSSTFLXKQXKKSCLIXKKVWYMIKHVKQRAMILKMIIMERKXSCXKAKILQK +PLMRLRTRLXKRSVSQTVKVINAIILKYGSPQAVSIELAREMSKNFEERRKAEKQMEENR +KKNEMAKKGNSGTGQTFAERSGYFEIPFMAXSTGNMPLYRXKDTVRRTVSAGIXYXPHSS +LQYHFXXQLPEQGACYFTGKPXERKPHPIXVFWSGXGPLECLXSKSXSFYQGLXEASQFV +KTGIYKRRPQGIQRAXFKXYKVYYTRDLXYDPSEFRDGAFESGRQEETGLCCQWFHNSLF +KKKMGTDAKRPFYRHSSCNGCCSSSLLYRWYDSKNFQKYTVSXGLIQRTESPGLXDCGCG +DRRNHFFRRPFKRRVGRALRSTGTAAMGAFXRRVRSPYGKXSEEXSGHTSGYVPVVPLSG +RCVXQYPANLCVKDAKSQGDRCSTCRYNTKSGDITKTVERYLRMVAMYYHEPILKIXNWI +RMERLKITTIRTVTDYYMKHXGHDWQNMMVMEKRHLPKSFISQKQMVHRVLLXKKXKPIK +KMSLGVEINKDEAGVGRGIAENANGGMIRVDVFRENGKYYFVPIYIADALKKRLPNKAAM +QNKPYSEWKEMKDENFLFSLYSRDLIGFKNQKGKKVHCTDGTEIVLTNEIVYYIGANIRT +ASISCKAHDNQYEFGSFGIQSLQELKKYQVDVLGNVTEVRQEKRRGFQXMGYRNIKIETS +QQLNIKNSQLLIGSSGEVQIPLEDINSILIESQAVTLSSYLLQKMAEMGIAVYVCDEKHL +PNAVLLPMVRHSRHFKLLKCQMNLGKPKQKGFGSRLXSGKLKINQPVLDSXIXRVPKSFX +KCQNRYNPVIKQMLKQRQQLFIFAGYMVWDFPEVMIISLTQRXITDMQLCVEXLRVLSFV +MDXSLLWDYFIVANXIVITXQMILLRYFVRLXICMFPVVLTYQRLIGHXRLKXKENYMEX +XIMTCWXEERSIYXVIALTKQLQVIAVHCRETVKNWNFRFXWSYRYIVMSKFMRMIVFFD +LPVGTARERKAATKFRNFLIKDGYHMVQYSVYSRICNGNDAVEMHETRLKQHLPSRGSIR +LLTITEKQYESIHILLGEAVFDDTSEATELINIFMRNEATLWLAKYMEDHGISTEKISRELHIPKKKLIPGTKESLDADEFLALCSYLQINPQT +IPIGQGEKXLHIYAYNKDIKTGEDLPCTNTVCKTSICPSCGQRADAGSQIYWCKSCKTLY +MRKSALSVIRKERSWQRICVRSFRKRGCCXSSFWGHPMHFXRSLCGMVQEITIMXMGREF +LFPXRIXNNXILIKCGKNIRNIRKKIQTGILKNRWRYSYRQTESVMRHWWKRQMSISAEW +QQIITLWKCLFRSAVEKTLPLFLIWSCGHSEIRKCSTFLVIRHWNFHLPMNMXNVLSRSI +RRHQSLPLATKRRILRNSVVXSVSSRVMRWCCTVFKTGSIQKTIKSLFRNKKEILTFYGI +RRSESASRSKYDRDSDSPKITKQRIISPIIDWMDFDIWLYLLTTGIDFNRAYRLGYARVG +CWCCPNNSGWSEFLSKIHMKEQSTHFREMLLEFAREIGKEDAEVYVDEGYWKARQGGNGV +AYAQKSVIAFEPCATQENTYNYELQKPIETELYELFRPFGYLNYELGNERLGEVYILGKN +GVPQLKLQGRIGTKKLKVTLLGSEDYGRXDKVSDYQIPDVYGMSCMXERMQAXCDFHKRR +RRWEHPLSDFGXKMCKVQGMCQSFFCRMLYEKGTGNXKEINRXRNHDKDKIPFXRAXKLY +FAGGLAQXRHEGSEKXSVCFFAELWSRCARGGSEHGKGDPLLDANLRVIRRAGKTGCIPF +KARRAIWEYDKYLEETFSLWIIHCNIVKKSXAGNRVESFLMNMMKWNLPKTNWXRSXXTK +QKIWTDLKNFRKNPXKQTERHCFVCMXESRSGEAIRRKRTSARLASLNWXNKRAVFTGKA +SRRCICFRQRSSGIFXKTARPKKELSVSMIFXQERIRRAGSXIXRGPVWXKNLKSXNKKI +IYKXTGQQAWTWYIXTSLXQEKKLLKNTSDHREEGEKRQMKNFVNVDTRFQKSINLTLDT +GDMALVNRYIPTRSSVSILKQYLTNIVRGQGEHATILIGPYGKGKSHLLLVLLALLCKSK +DETAEIQKKIIEADNSTKLLFMELAEVGRPFLPVIVSSFQGDLNESFIFALQEALKRPVS +EICRPSEYSEAVRTMESWKEFYPDTYQRFEKMLEERGCTASLFKERLKNKKKLHSXNSKN +FTRYXHPEVFSIQWCKKKHFGSMKRSTVCFVQSTDMPAFISSLMNSVSIXKDMKQKNFCK +GYEDFAGYVRIGRQPERRADVSDLCGAXEYPXVCQKYXFGNDPGIPWGRRAAERDPVCSF +FPEXLXTDRACTAXERGILYLGNTGKGRSVLSACLFFTSFEKEDFNQIVAKGCYPLTPVC +AYALLNISEKIGQNERTVFTFLAGNEPGSLNRIMEGRNRENLIGVEYVYDYFKNLFRETV +DETYIHNEWLKAEYALTKADTEIEKRIIKAMAIIRMIHPWKSXRYXISRSVWRXISKKEE +CDKAMRELMKKSDLFSAQVLVPMHLRTISVLISRRRLKKNPAAASXHQYLXSVKRDFRTD +LCRSKTVQSGPCNDKIFPIXIHXIXRLPFHWQCKGLFRAPFFRWIYLSDRDSRQGRKGKS +AASSAGIRGXTYYRVTAXRRIFIGMGAFCVLRQSEALQRMSILLKRIKRSVRNXTSMKRT +SAMRXMRDXREILCRKTAAVMYFIQAEKSRISGPEWNLTGIXARSVKTTIRXHRGSTMSF +XISRMCRDSTXRQEMMWXEPFXMEKIXRNMSRAAVLRQWCIVRHFFGQDLPEKISRXTRL +SKDHGGDRRLFCESKWKAGIFSDALXTLAGQRLWGAKRCASAVSCVEILSARRHAGAVPW +KXGTADHGRSAEQYQPVSGKLXSLYRKERYGKRALFTGNGGYLLXCADGKDHTFQPTFRH +YGKYAEMVPFPAAVYAGQXTLSAGNALCGQKFPKVIKADGVKSERIFVXAASECHGFFXK +SYDRALSQGNEAEHGYAFXKCDRRYGKGDQKNIWCKKKATVSRHVCRTGMADSKTVPNAM +YXTKRSRVLWNMWENXIPTTSRRLLPYYPNVWKISILRTGMTDYRKNFCVTLQRYAKRQR +RQRKMPVXRTDKKRFSXRRRMERRSTNIMMRMXKTAPVNFXKIXSKRHWITLETAXRQIR +KWLFXRRHXKNYYSRGNIMEEYIYLDNAATTFPKPEAVYRALDRANRNAAVNAGRGSYAL +AEQAKQLIEDSRGLLLTLTKAKPAAEVVFTPSATFACNQIFGGLPWKREDIVYVSPYEHN +AVMRTLHFLQQRYGFAIEELSVDAGTLELDLEKNPLSVYPKPSNGSCHDTYQQCHRVYSS +GXRSGSFDRYGKRRRXSWMVRRHWDXSLSVWNKAALITIYLRVIRHFTDRLESAVISHNL +QEMQKNXDLXSQEEPEAIHXIXRCRSFFPTVMNREVRTYRRSRDXKRRXKHLEVIMKKCV +RPXRSIIKKNGNXRNCXRQSFKKYRESILIFHRIRKKGAASVPLRSKDILRMMXECCSMK +IIISQSGAAITVHRXSINTXRINHTGGRCVWASDSLIQKKTSGNSYTQWKKSQGVTKVND +DLKRVNLRDIVDRISENTIVLPDFQRGFTWKENNRQKALLASVLTKLPIGTVLFLNVKTE +DYGYKKIGKNEKKHXQFRGKAGSKGAVRRSAEDHGLNGIPFHETSKRKYXRSRITDTGAA +VFLESSKFSKCDRXQKEDLFGGTILSFPNSFRGNYPEISSEEMKERITFVHDRKKAFLYE +KAETKDTREIREYCRNIDNSEDGDAYLLPLFYLLDACEPGSSGAVILEDVVKEIGAEYEK +SIGSWLQAEEYPIEEKEQYLEKFGLEDAQREAVLEEIKTGTLFYQKKKEKIIFLTVXRNG +KCSGECTFVNIXENVLRISGFMRLQFPSMIKSAPLISMKTXTWEENPXVSLIRSXQRHPD +IRRRREISLHRSXMTXSVTTGRNIPHLXKNAQRVRRTVIKITLQTATNHIRQWDGSAAGI +NLKKSFLLPTXRHXXTFWVSLTIFQKEIRDLVCVMLRRSKTXTXKSQKRISAADSIRKNI +RLCGGGMSGLRPRSLIFTDAVWNPKAWXNTLQSDVGYLRYGIFRXSMVXGQXSLRLYGSL +VLECDFIGRVQDRAEPGIYPESSECFIXDPKHQRIXXEIHKSPLQXRTDRXKICRPXHCF +NEKSIRISGGGNWEYHLSILFIRDIFGYFKTASGEKRLSATNTECIEQFREAAKTSHYAD +RKSXRKVXGMPIKRQKAGEKTTAVRIIHRXISCXYRKKRMGXSKIVHXRNTLNFAIRPHX +IMXTSKTIHLPICRSGNRIPDRXRSIAAFSRKKIXRFXEPYYVEVSEFIELSRHLLRRGR +KLIWKRIGTAXCRHXSLKFCIWKRRICEARQRQISACQRNCRKSSRNMQEDNGIGGQVYE +IXKYYHGKFHAVXGQESYRIQLXXCKKCNSSIRRQYGWKNDDSAGIPLGTVWCVNGKRDK +KCRRFSAFKYGYLRNDGCQQSCXGKSRDCSSXRGKTLYHHKRDNLYQSISKVREPGVSEE +MCDADYRVRGHGKLCRGRQQRDRDIDQXTVSKELVPLFFVXWRTVEXCQCRRCPGKYQRI +GTYFNGIICISRGEEPFKRYGKQFRYQKFRSEIEDRVQSMIIXKQNEKIRAXYRKAPGXD +XGTGSQYPELXEKEXRYRTFLSRKPQYGRIAKEKRNIXSYCVSPRESKVFILTRHWXMPL +AIKPIWYLPGQCSVQVWNYXKVRKWNDVISHICVRQRXITSLRTNGVSAVMRLKRQQRVF +CTDGAAKLSRRRQMSVPXXGTLRELQTAGTAKVMSCXKRLMIMQKEVDENVRGISXFLXP +LXKTAKAVRXTYXFCREKEDTAFLXIGDSAFFXGKGRKKKDGSKPVKREXKPRKKRCKAX +KQEMSGIGSWQRLEIAEELYRQLDKEFSEQENKIFWSXTGRYRRISAKCLTQRIKRLNXH +RSMRFRCFTVRSRDTGKRKSVRRRENSKELCVYCNDHGFQQKKETGKDRAXDSRQXHPSD +RIGRTVFXAGRXKYRIDRKGAATGFGTGHYLYVEKKTGSIQSXILTLEADITLIKNRKNH +LQRSNRQGGDSLMENYKFFNDPYKFSGKHARMVSELWSLNDYEHSYFKRLIDIYIVAAIL +GFRIDRKAKRDYAPVEQRTVFGEQMRQASEDLEFILQMMLLLEPAGQGIHEECIRRAFKG +VETEEEFKRYNELFESYMLGGVEELYERLVLQKEEIDTDYSDDKTANLMMLFERFAPKKT +SXNFYKISELLKNQFTKYGKNGIIKNELYYTKKXSVIAVWXAKPKLXSHSSEWDYLLYGF +YRNSKKTNFXYTKCSAQAVLGGEKFMGEMSKTNMDRHRSYRIGLDIGIASVGWAVLENNS +QDEPIRILDLGVRIFEAAEVPKTGAALAAERRDARTARRSDPQKTSSFRKDXVAVXKRRT +DPNRFFYGAVSFTKSAGCLXTSLXRFRTEAEQXGICTGTVTYCKTSWFPLDKKGGVKRRG +QWKSLKSNRREPQTYGRAWLPYRWRNDIXRCLFSYXVCVGRQWISVNTXKXSRXLFPHNA +PGAVRRGGSHPFXMSEKVWKXKGDXKIRSRNIXKLCCHSVLLIWDRDSRQTERRALMQWR +DLEIRSDIVHXKENPANVVRQKQPIRQSYLLHCRRSHIXNWYIWMAHPDFFRKRSGTFYX +KCFRPKKEIKYAAVRKKLNLPLEEKFNTLNYNMKRKGKDNKEEEVDEAAIIAATEKATLS +VCPIVMNTAKESENIXRPCRKKNNRICXMKLERFXPVIRTMTAVXTVXRRQVCRRNWRIL +CXSXHLRSSSTFLXKQXKKSCLIXKKVWYMIKHVKQRAMILKMIIMERKXSCXKAKILQK +PLMRLRTRLXKRSVSQTVKVINAIILKYGSPQAVSIELAREMSKNFEERRKAEKQMEENR +KKNEMAKKGNSGTGQTFAERSGYFEIPFMAXSTGNMPLYRXKDTVRRTVSAGIXYXPHSS +LQYHFXXQLPEQGACYFTGKPXERKPHPIXVFWSGXGPLECLXSKSXSFYQGLXEASQFV +KTGIYKRRPQGIQRAXFKXYKVYYTRDLXYDPSEFRDGAFESGRQEETGLCCQWFHNSLF +KKKMGTDAKRPFYRHSSCNGCCSSSLLYRWYDSKNFQKYTVSXGLIQRTESPGLXDCGCG +DRRNHFFRRPFKRRVGRALRSTGTAAMGAFXRRVRSPYGKXSEEXSGHTSGYVPVVPLSG +RCVXQYPANLCVKDAKSQGDRCSTCRYNTKSGDITKTVERYLRMVAMYYHEPILKIXNWI +RMERLKITTIRTVTDYYMKHXGHDWQNMMVMEKRHLPKSFISQKQMVHRVLLXKKXKPIK +KMSLGVEINKDEAGVGRGIAENANGGMIRVDVFRENGKYYFVPIYIADALKKRLPNKAAM +QNKPYSEWKEMKDENFLFSLYSRDLIGFKNQKGKKVHCTDGTEIVLTNEIVYYIGANIRT +ASISCKAHDNQYEFGSFGIQSLQELKKYQVDVLGNVTEVRQEKRRGFQXMGYRNIKIETS +QQLNIKNSQLLIGSSGEVQIPLEDINSILIESQAVTLSSYLLQKMAEMGIAVYVCDEKHL +PNAVLLPMVRHSRHFKLLKCQMNLGKPKQKGFGSRLXSGKLKINQPVLDSXIXRVPKSFX +KCQNRYNPVIKQMLKQRQQLFIFAGYMVWDFPEVMIISLTQRXITDMQLCVEXLRVLSFV +MDXSLLWDYFIVANXIVITXQMILLRYFVRLXICMFPVVLTYQRLIGHXRLKXKENYMEX +XIMTCWXEERSIYXVIALTKQLQVIAVHCRETVKNWNFRFXWSYRYIVMSKFMRMIVFFD +LPVGTARERKAATKFRNFLIKDGYHMVQYSVYSRICNGNDAVEMHETRLKQHLPSRGSIR +LLTITEKQYESIHILLGEAVFDDTSEATELINIFMRNEATLWLAKYMEDHGISTEKISRELHIPKKKLIPGTKESLDADEFLALCSYLQINPQT +IPIGQGEKXLHIYAYNKDIKTGEDLPCTNTVCKTSICPSCGQRADAGSQIYWCKSCKTLY +MRKSALSVIRKERSWQRICVRSFRKRGCCXSSFWGHPMHFXRSLCGMVQEITIMXMGREF +LFPXRIXNNXILIKCGKNIRNIRKKIQTGILKNRWRYSYRQTESVMRHWWKRQMSISAEW +QQIITLWKCLFRSAVEKTLPLFLIWSCGHSEIRKCSTFLVIRHWNFHLPMNMXNVLSRSI +RRHQSLPLATKRRILRNSVVXSVSSRVMRWCCTVFKTGSIQKTIKSLFRNKKEILTFYGI +RRSESASRSKYDRDSDSPKITKQRIISPIIDWMDFDIWLYLLTTGIDFNRAYRLGYARVG +CWCCPNNSGWSEFLSKIHMKEQSTHFREMLLEFAREIGKEDAEVYVDEGYWKARQGGNGV +AYAQKSVIAFEPCATQENTYNYELQKPIETELYELFRPFGYLNYELGNERLGEVYILGKN +GVPQLKLQGRIGTKKLKVTLLGSEDYGRXDKVSDYQIPDVYGMSCMXERMQAXCDFHKRR +RRWEHPLSDFGXKMCKVQGMCQSFFCRMLYEKGTGNXKEINRXRNHDKDKIPFXRAXKLY +FAGGLAQXRHEGSEKXSVCFFAELWSRCARGGSEHGKGDPLLDANLRVIRRAGKTGCIPF +KARRAIWEYDKYLEETFSLWIIHCNIVKKSXAGNRVESFLMNMMKWNLPKTNWXRSXXTK +QKIWTDLKNFRKNPXKQTERHCFVCMXESRSGEAIRRKRTSARLASLNWXNKRAVFTGKA +SRRCICFRQRSSGIFXKTARPKKELSVSMIFXQERIRRAGSXIXRGPVWXKNLKSXNKKI +IYKXTGQQAWTWYIXTSLXQEKKLLKNTSDHREEGEKRQMKNFVNVDTRFQKSINLTLDT +GDMALVNRYIPTRSSVSILKQYLTNIVRGQGEHATILIGPYGKGKSHLLLVLLALLCKSK +DETAEIQKKIIEADNSTKLLFMELAEVGRPFLPVIVSSFQGDLNESFIFALQEALKRPVS +EICRPSEYSEAVRTMESWKEFYPDTYQRFEKMLEERGCTASLFKERLKNKKKLHSXNSKN +FTRYXHPEVFSIQWCKKKHFGSMKRSTVCFVQSTDMPAFISSLMNSVSIXKDMKQKNFCK +GYEDFAGYVRIGRQPERRADVSDLCGAXEYPXVCQKYXFGNDPGIPWGRRAAERDPVCSF +FPEXLXTDRACTAXERGILYLGNTGKGRSVLSACLFFTSFEKEDFNQIVAKGCYPLTPVC +AYALLNISEKIGQNERTVFTFLAGNEPGSLNRIMEGRNRENLIGVEYVYDYFKNLFRETV +DETYIHNEWLKAEYALTKADTEIEKRIIKAMAIIRMIHPWKSXRYXISRSVWRXISKKEE +CDKAMRELMKKSDLFSAQVLVPMHLRTISVLISRRRLKKNPAAASXHQYLXSVKRDFRTD +LCRSKTVQSGPCNDKIFPIXIHXIXRLPFHWQCKGLFRAPFFRWIYLSDRDSRQGRKGKS +AASSAGIRGXTYYRVTAXRRIFIGMGAFCVLRQSEALQRMSILLKRIKRSVRNXTSMKRT +SAMRXMRDXREILCRKTAAVMYFIQAEKSRISGPEWNLTGIXARSVKTTIRXHRGSTMSF +XISRMCRDSTXRQEMMWXEPFXMEKIXRNMSRAAVLRQWCIVRHFFGQDLPEKISRXTRL +SKDHGGDRRLFCESKWKAGIFSDALXTLAGQRLWGAKRCASAVSCVEILSARRHAGAVPW +KXGTADHGRSAEQYQPVSGKLXSLYRKERYGKRALFTGNGGYLLXCADGKDHTFQPTFRH +YGKYAEMVPFPAAVYAGQXTLSAGNALCGQKFPKVIKADGVKSERIFVXAASECHGFFXK +SYDRALSQGNEAEHGYAFXKCDRRYGKGDQKNIWCKKKATVSRHVCRTGMADSKTVPNAM +YXTKRSRVLWNMWENXIPTTSRRLLPYYPNVWKISILRTGMTDYRKNFCVTLQRYAKRQR +RQRKMPVXRTDKKRFSXRRRMERRSTNIMMRMXKTAPVNFXKIXSKRHWITLETAXRQIR +KWLFXRRHXKNYYSRGNIMEEYIYLDNAATTFPKPEAVYRALDRANRNAAVNAGRGSYAL +AEQAKQLIEDSRGLLLTLTKAKPAAEVVFTPSATFACNQIFGGLPWKREDIVYVSPYEHN +AVMRTLHFLQQRYGFAIEELSVDAGTLELDLEKNPLSVYPKPSNGSCHDTYQQCHRVYSS +GXRSGSFDRYGKRRRXSWMVRRHWDXSLSVWNKAALITIYLRVIRHFTDRLESAVISHNL +QEMQKNXDLXSQEEPEAIHXIXRCRSFFPTVMNREVRTYRRSRDXKRRXKHLEVIMKKCV +RPXRSIIKKNGNXRNCXRQSFKKYRESILIFHRIRKKGAASVPLRSKDILRMMXECCSMK +IIISQSGAAITVHRXSINTXRINHTGGRCVWASDSLIQKKTSGNSYTQWKKSQGVTKVND +DLKRVNLRDIVDRISENTIVLPDFQRGFTWKENNRQKALLASVLTKLPIGTVLFLNVKTE +DYGYKKIGKNEKKHXQFRGKAGSKGAVRRSAEDHGLNGIPFHETSKRKYXRSRITDTGAA +VFLESSKFSKCDRXQKEDLFGGTILSFPNSFRGNYPEISSEEMKERITFVHDRKKAFLYE +KAETKDTREIREYCRNIDNSEDGDAYLLPLFYLLDACEPGSSGAVILEDVVKEIGAEYEK +SIGSWLQAEEYPIEEKEQYLEKFGLEDAQREAVLEEIKTGTLFYQKKKEKIIFLTVXRNG +KCSGECTFVNIXENVLRISGFMRLQFPSMIKSAPLISMKTXTWEENPXVSLIRSXQRHPD +IRRRREISLHRSXMTXSVTTGRNIPHLXKNAQRVRRTVIKITLQTATNHIRQWDGSAAGI +NLKKSFLLPTXRHXXTFWVSLTIFQKEIRDLVCVMLRRSKTXTXKSQKRISAADSIRKNI +RLCGGGMSGLRPRSLIFTDAVWNPKAWXNTLQSDVGYLRYGIFRXSMVXGQXSLRLYGSL +VLECDFIGRVQDRAEPGIYPESSECFIXDPKHQRIXXEIHKSPLQXRTDRXKICRPXHCF +NEKSIRISGGGNWEYHLSILFIRDIFGYFKTASGEKRLSATNTECIEQFREAAKTSHYAD +RKSXRKVXGMPIKRQKAGEKTTAVRIIHRXISCXYRKKRMGXSKIVHXRNTLNFAIRPHX +IMXTSKTIHLPICRSGNRIPDRXRSIAAFSRKKIXRFXEPYYVEVSEFIELSRHLLRRGR +KLIWKRIGTAXCRHXSLKFCIWKRRICEARQRQISACQRNCRKSSRNMQEDNGIGGQVYE +IXKYYHGKFHAVXGQESYRIQLXXCKKCNSSIRRQYGWKNDDSAGIPLGTVWCVNGKRDK +KCRRFSAFKYGYLRNDGCQQSCXGKSRDCSSXRGKTLYHHKRDNLYQSISKVREPGVSEE +MCDADYRVRGHGKLCRGRQQRDRDIDQXTVSKELVPLFFVXWRTVEXCQCRRCPGKYQRI +GTYFNGIICISRGEEPFKRYGKQFRYQKFRSEIEDRVQSMIIXKQNEKIRAXYRKAPGXD +XGTGSQYPELXEKEXRYRTFLSRKPQYGRIAKEKRNIXSYCVSPRESKVFILTRHWXMPL +AIKPIWYLPGQCSVQVWNYXKVRKWNDVISHICVRQRXITSLRTNGVSAVMRLKRQQRVF +CTDGAAKLSRRRQMSVPXXGTLRELQTAGTAKVMSCXKRLMIMQKEVDENVRGISXFLXP +LXKTAKAVRXTYXFCREKEDTAFLXIGDSAFFXGKGRKKKDGSKPVKREXKPRKKRCKAX +KQEMSGIGSWQRLEIAEELYRQLDKEFSEQENKIFWSXTGRYRRISAKCLTQRIKRLNXH +RSMRFRCFTVRSRDTGKRKSVRRRENSKELCVYCNDHGFQQKKETGKDRAXDSRQXHPSD +RIGRTVFXAGRXKYRIDRKGAATGFGTGHYLYVEKKTGSIQSXILTLEADITLIKNRKNH +LQRSNRQGGDSLMENYKFFNDPYKFSGKHARMVSELWSLNDYEHSYFKRLIDIYIVAAIL +GFRIDRKAKRDYAPVEQRTVFGEQMRQASEDLEFILQMMLLLEPAGQGIHEECIRRAFKG +VETEEEFKRYNELFESYMLGGVEELYERLVLQKEEIDTDYSDDKTANLMMLFERFAPKKT +SXNFYKISELLKNQFTKYGKNGIIKNELYYTKKXSVIAVWXAKPKLXSHSSEWDYLLYGF +YRNSKKTNFXYTKCSAQAVLGGEKFMGEMSKTNMDRHRSYRIGLDIGIASVGWAVLENNS +QDEPIRILDLGVRIFEAAEVPKTGAALAAERRDARTARRSDPQKTSSFRKDXVAVXKRRT +DPNRFFYGAVSFTKSAGCLXTSLXRFRTEAEQXGICTGTVTYCKTSWFPLDKKGGVKRRG +QWKSLKSNRREPQTYGRAWLPYRWRNDIXRCLFSYXVCVGRQWISVNTXKXSRXLFPHNA +PGAVRRGGSHPFXMSEKVWKXKGDXKIRSRNIXKLCCHSVLLIWDRDSRQTERRALMQWR +DLEIRSDIVHXKENPANVVRQKQPIRQSYLLHCRRSHIXNWYIWMAHPDFFRKRSGTFYX +KCFRPKKEIKYAAVRKKLNLPLEEKFNTLNYNMKRKGKDNKEEEVDEAAIIAATEKATLS +VCPIVMNTAKESENIXRPCRKKNNRICXMKLERFXPVIRTMTAVXTVXRRQVCRRNWRIL +CXSXHLRSSSTFLXKQXKKSCLIXKKVWYMIKHVKQRAMILKMIIMERKXSCXKAKILQK +PLMRLRTRLXKRSVSQTVKVINAIILKYGSPQAVSIELAREMSKNFEERRKAEKQMEENR +KKNEMAKKGNSGTGQTFAERSGYFEIPFMAXSTGNMPLYRXKDTVRRTVSAGIXYXPHSS +LQYHFXXQLPEQGACYFTGKPXERKPHPIXVFWSGXGPLECLXSKSXSFYQGLXEASQFV +KTGIYKRRPQGIQRAXFKXYKVYYTRDLXYDPSEFRDGAFESGRQEETGLCCQWFHNSLF +KKKMGTDAKRPFYRHSSCNGCCSSSLLYRWYDSKNFQKYTVSXGLIQRTESPGLXDCGCG +DRRNHFFRRPFKRRVGRALRSTGTAAMGAFXRRVRSPYGKXSEEXSGHTSGYVPVVPLSG +RCVXQYPANLCVKDAKSQGDRCSTCRYNTKSGDITKTVERYLRMVAMYYHEPILKIXNWI +RMERLKITTIRTVTDYYMKHXGHDWQNMMVMEKRHLPKSFISQKQMVHRVLLXKKXKPIK +KMSLGVEINKDEAGVGRGIAENANGGMIRVDVFRENGKYYFVPIYIADALKKRLPNKAAM +QNKPYSEWKEMKDENFLFSLYSRDLIGFKNQKGKKVHCTDGTEIVLTNEIVYYIGANIRT +ASISCKAHDNQYEFGSFGIQSLQELKKYQVDVLGNVTEVRQEKRRGFQXMGYRNIKIETS +QQLNIKNSQLLIGSSGEVQIPLEDINSILIESQAVTLSSYLLQKMAEMGIAVYVCDEKHL +PNAVLLPMVRHSRHFKLLKCQMNLGKPKQKGFGSRLXSGKLKINQPVLDSXIXRVPKSFX +KCQNRYNPVIKQMLKQRQQLFIFAGYMVWDFPEVMIISLTQRXITDMQLCVEXLRVLSFV +MDXSLLWDYFIVANXIVITXQMILLRYFVRLXICMFPVVLTYQRLIGHXRLKXKENYMEX +XIMTCWXEERSIYXVIALTKQLQVIAVHCRETVKNWNFRFXWSYRYIVMSKFMRMIVFFD +LPVGTARERKAATKFRNFLIKDGYHMVQYSVYSRICNGNDAVEMHETRLKQHLPSRGSIR +LLTITEKQYESIHILLGEAVFDDTSEATELINIFMRNEATLWLAKYMEDHGISTEKISRELHIPKKKLIPGTKESLDADEFLALCSYLQINPQT +IPIGQGEKXLHIYAYNKDIKTGEDLPCTNTVCKTSICPSCGQRADAGSQIYWCKSCKTLY +MRKSALSVIRKERSWQRICVRSFRKRGCCXSSFWGHPMHFXRSLCGMVQEITIMXMGREF +LFPXRIXNNXILIKCGKNIRNIRKKIQTGILKNRWRYSYRQTESVMRHWWKRQMSISAEW +QQIITLWKCLFRSAVEKTLPLFLIWSCGHSEIRKCSTFLVIRHWNFHLPMNMXNVLSRSI +RRHQSLPLATKRRILRNSVVXSVSSRVMRWCCTVFKTGSIQKTIKSLFRNKKEILTFYGI +RRSESASRSKYDRDSDSPKITKQRIISPIIDWMDFDIWLYLLTTGIDFNRAYRLGYARVG +CWCCPNNSGWSEFLSKIHMKEQSTHFREMLLEFAREIGKEDAEVYVDEGYWKARQGGNGV +AYAQKSVIAFEPCATQENTYNYELQKPIETELYELFRPFGYLNYELGNERLGEVYILGKN +GVPQLKLQGRIGTKKLKVTLLGSEDYGRXDKVSDYQIPDVYGMSCMXERMQAXCDFHKRR +RRWEHPLSDFGXKMCKVQGMCQSFFCRMLYEKGTGNXKEINRXRNHDKDKIPFXRAXKLY +FAGGLAQXRHEGSEKXSVCFFAELWSRCARGGSEHGKGDPLLDANLRVIRRAGKTGCIPF +KARRAIWEYDKYLEETFSLWIIHCNIVKKSXAGNRVESFLMNMMKWNLPKTNWXRSXXTK +QKIWTDLKNFRKNPXKQTERHCFVCMXESRSGEAIRRKRTSARLASLNWXNKRAVFTGKA +SRRCICFRQRSSGIFXKTARPKKELSVSMIFXQERIRRAGSXIXRGPVWXKNLKSXNKKI +IYKXTGQQAWTWYIXTSLXQEKKLLKNTSDHREEGEKRQMKNFVNVDTRFQKSINLTLDT +GDMALVNRYIPTRSSVSILKQYLTNIVRGQGEHATILIGPYGKGKSHLLLVLLALLCKSK +DETAEIQKKIIEADNSTKLLFMELAEVGRPFLPVIVSSFQGDLNESFIFALQEALKRPVS +EICRPSEYSEAVRTMESWKEFYPDTYQRFEKMLEERGCTASLFKERLKNKKKLHSXNSKN +FTRYXHPEVFSIQWCKKKHFGSMKRSTVCFVQSTDMPAFISSLMNSVSIXKDMKQKNFCK +GYEDFAGYVRIGRQPERRADVSDLCGAXEYPXVCQKYXFGNDPGIPWGRRAAERDPVCSF +FPEXLXTDRACTAXERGILYLGNTGKGRSVLSACLFFTSFEKEDFNQIVAKGCYPLTPVC +AYALLNISEKIGQNERTVFTFLAGNEPGSLNRIMEGRNRENLIGVEYVYDYFKNLFRETV +DETYIHNEWLKAEYALTKADTEIEKRIIKAMAIIRMIHPWKSXRYXISRSVWRXISKKEE +CDKAMRELMKKSDLFSAQVLVPMHLRTISVLISRRRLKKNPAAASXHQYLXSVKRDFRTD +LCRSKTVQSGPCNDKIFPIXIHXIXRLPFHWQCKGLFRAPFFRWIYLSDRDSRQGRKGKS +AASSAGIRGXTYYRVTAXRRIFIGMGAFCVLRQSEALQRMSILLKRIKRSVRNXTSMKRT +SAMRXMRDXREILCRKTAAVMYFIQAEKSRISGPEWNLTGIXARSVKTTIRXHRGSTMSF +XISRMCRDSTXRQEMMWXEPFXMEKIXRNMSRAAVLRQWCIVRHFFGQDLPEKISRXTRL +SKDHGGDRRLFCESKWKAGIFSDALXTLAGQRLWGAKRCASAVSCVEILSARRHAGAVPW +KXGTADHGRSAEQYQPVSGKLXSLYRKERYGKRALFTGNGGYLLXCADGKDHTFQPTFRH +YGKYAEMVPFPAAVYAGQXTLSAGNALCGQKFPKVIKADGVKSERIFVXAASECHGFFXK +SYDRALSQGNEAEHGYAFXKCDRRYGKGDQKNIWCKKKATVSRHVCRTGMADSKTVPNAM +YXTKRSRVLWNMWENXIPTTSRRLLPYYPNVWKISILRTGMTDYRKNFCVTLQRYAKRQR +RQRKMPVXRTDKKRFSXRRRMERRSTNIMMRMXKTAPVNFXKIXSKRHWITLETAXRQIR +KWLFXRRHXKNYYSRGNIMEEYIYLDNAATTFPKPEAVYRALDRANRNAAVNAGRGSYAL +AEQAKQLIEDSRGLLLTLTKAKPAAEVVFTPSATFACNQIFGGLPWKREDIVYVSPYEHN +AVMRTLHFLQQRYGFAIEELSVDAGTLELDLEKNPLSVYPKPSNGSCHDTYQQCHRVYSS +GXRSGSFDRYGKRRRXSWMVRRHWDXSLSVWNKAALITIYLRVIRHFTDRLESAVISHNL +QEMQKNXDLXSQEEPEAIHXIXRCRSFFPTVMNREVRTYRRSRDXKRRXKHLEVIMKKCV +RPXRSIIKKNGNXRNCXRQSFKKYRESILIFHRIRKKGAASVPLRSKDILRMMXECCSMK +IIISQSGAAITVHRXSINTXRINHTGGRCVWASDSLIQKKTSGNSYTQWKKSQGVTKVND +DLKRVNLRDIVDRISENTIVLPDFQRGFTWKENNRQKALLASVLTKLPIGTVLFLNVKTE +DYGYKKIGKNEKKHXQFRGKAGSKGAVRRSAEDHGLNGIPFHETSKRKYXRSRITDTGAA +VFLESSKFSKCDRXQKEDLFGGTILSFPNSFRGNYPEISSEEMKERITFVHDRKKAFLYE +KAETKDTREIREYCRNIDNSEDGDAYLLPLFYLLDACEPGSSGAVILEDVVKEIGAEYEK +SIGSWLQAEEYPIEEKEQYLEKFGLEDAQREAVLEEIKTGTLFYQKKKEKIIFLTVXRNG +KCSGECTFVNIXENVLRISGFMRLQFPSMIKSAPLISMKTXTWEENPXVSLIRSXQRHPD +IRRRREISLHRSXMTXSVTTGRNIPHLXKNAQRVRRTVIKITLQTATNHIRQWDGSAAGI +NLKKSFLLPTXRHXXTFWVSLTIFQKEIRDLVCVMLRRSKTXTXKSQKRISAADSIRKNI +RLCGGGMSGLRPRSLIFTDAVWNPKAWXNTLQSDVGYLRYGIFRXSMVXGQXSLRLYGSL +VLECDFIGRVQDRAEPGIYPESSECFIXDPKHQRIXXEIHKSPLQXRTDRXKICRPXHCF +NEKSIRISGGGNWEYHLSILFIRDIFGYFKTASGEKRLSATNTECIEQFREAAKTSHYAD +RKSXRKVXGMPIKRQKAGEKTTAVRIIHRXISCXYRKKRMGXSKIVHXRNTLNFAIRPHX +IMXTSKTIHLPICRSGNRIPDRXRSIAAFSRKKIXRFXEPYYVEVSEFIELSRHLLRRGR +KLIWKRIGTAXCRHXSLKFCIWKRRICEARQRQISACQRNCRKSSRNMQEDNGIGGQVYE +IXKYYHGKFHAVXGQESYRIQLXXCKKCNSSIRRQYGWKNDDSAGIPLGTVWCVNGKRDK +KCRRFSAFKYGYLRNDGCQQSCXGKSRDCSSXRGKTLYHHKRDNLYQSISKVREPGVSEE +MCDADYRVRGHGKLCRGRQQRDRDIDQXTVSKELVPLFFVXWRTVEXCQCRRCPGKYQRI +GTYFNGIICISRGEEPFKRYGKQFRYQKFRSEIEDRVQSMIIXKQNEKIRAXYRKAPGXD +XGTGSQYPELXEKEXRYRTFLSRKPQYGRIAKEKRNIXSYCVSPRESKVFILTRHWXMPL +AIKPIWYLPGQCSVQVWNYXKVRKWNDVISHICVRQRXITSLRTNGVSAVMRLKRQQRVF +CTDGAAKLSRRRQMSVPXXGTLRELQTAGTAKVMSCXKRLMIMQKEVDENVRGISXFLXP +LXKTAKAVRXTYXFCREKEDTAFLXIGDSAFFXGKGRKKKDGSKPVKREXKPRKKRCKAX +KQEMSGIGSWQRLEIAEELYRQLDKEFSEQENKIFWSXTGRYRRISAKCLTQRIKRLNXH +RSMRFRCFTVRSRDTGKRKSVRRRENSKELCVYCNDHGFQQKKETGKDRAXDSRQXHPSD +RIGRTVFXAGRXKYRIDRKGAATGFGTGHYLYVEKKTGSIQSXILTLEADITLIKNRKNH +LQRSNRQGGDSLMENYKFFNDPYKFSGKHARMVSELWSLNDYEHSYFKRLIDIYIVAAIL +GFRIDRKAKRDYAPVEQRTVFGEQMRQASEDLEFILQMMLLLEPAGQGIHEECIRRAFKG +VETEEEFKRYNELFESYMLGGVEELYERLVLQKEEIDTDYSDDKTANLMMLFERFAPKKT +SXNFYKISELLKNQFTKYGKNGIIKNELYYTKKXSVIAVWXAKPKLXSHSSEWDYLLYGF +YRNSKKTNFXYTKCSAQAVLGGEKFMGEMSKTNMDRHRSYRIGLDIGIASVGWAVLENNS +QDEPIRILDLGVRIFEAAEVPKTGAALAAERRDARTARRSDPQKTSSFRKDXVAVXKRRT +DPNRFFYGAVSFTKSAGCLXTSLXRFRTEAEQXGICTGTVTYCKTSWFPLDKKGGVKRRG +QWKSLKSNRREPQTYGRAWLPYRWRNDIXRCLFSYXVCVGRQWISVNTXKXSRXLFPHNA +PGAVRRGGSHPFXMSEKVWKXKGDXKIRSRNIXKLCCHSVLLIWDRDSRQTERRALMQWR +DLEIRSDIVHXKENPANVVRQKQPIRQSYLLHCRRSHIXNWYIWMAHPDFFRKRSGTFYX +KCFRPKKEIKYAAVRKKLNLPLEEKFNTLNYNMKRKGKDNKEEEVDEAAIIAATEKATLS +VCPIVMNTAKESENIXRPCRKKNNRICXMKLERFXPVIRTMTAVXTVXRRQVCRRNWRIL +CXSXHLRSSSTFLXKQXKKSCLIXKKVWYMIKHVKQRAMILKMIIMERKXSCXKAKILQK +PLMRLRTRLXKRSVSQTVKVINAIILKYGSPQAVSIELAREMSKNFEERRKAEKQMEENR +KKNEMAKKGNSGTGQTFAERSGYFEIPFMAXSTGNMPLYRXKDTVRRTVSAGIXYXPHSS +LQYHFXXQLPEQGACYFTGKPXERKPHPIXVFWSGXGPLECLXSKSXSFYQGLXEASQFV +KTGIYKRRPQGIQRAXFKXYKVYYTRDLXYDPSEFRDGAFESGRQEETGLCCQWFHNSLF +KKKMGTDAKRPFYRHSSCNGCCSSSLLYRWYDSKNFQKYTVSXGLIQRTESPGLXDCGCG +DRRNHFFRRPFKRRVGRALRSTGTAAMGAFXRRVRSPYGKXSEEXSGHTSGYVPVVPLSG +RCVXQYPANLCVKDAKSQGDRCSTCRYNTKSGDITKTVERYLRMVAMYYHEPILKIXNWI +RMERLKITTIRTVTDYYMKHXGHDWQNMMVMEKRHLPKSFISQKQMVHRVLLXKKXKPIK +KMSLGVEINKDEAGVGRGIAENANGGMIRVDVFRENGKYYFVPIYIADALKKRLPNKAAM +QNKPYSEWKEMKDENFLFSLYSRDLIGFKNQKGKKVHCTDGTEIVLTNEIVYYIGANIRT +ASISCKAHDNQYEFGSFGIQSLQELKKYQVDVLGNVTEVRQEKRRGFQXMGYRNIKIETS +QQLNIKNSQLLIGSSGEVQIPLEDINSILIESQAVTLSSYLLQKMAEMGIAVYVCDEKHL +PNAVLLPMVRHSRHFKLLKCQMNLGKPKQKGFGSRLXSGKLKINQPVLDSXIXRVPKSFX +KCQNRYNPVIKQMLKQRQQLFIFAGYMVWDFPEVMIISLTQRXITDMQLCVEXLRVLSFV +MDXSLLWDYFIVANXIVITXQMILLRYFVRLXICMFPVVLTYQRLIGHXRLKXKENYMEX +XIMTCWXEERSIYXVIALTKQLQVIAVHCRETVKNWNFRFXWSYRYIVMSKFMRMIVFFD +LPVGTARERKAATKFRNFLIKDGYHMVQYSVYSRICNGNDAVEMHETRLKQHLPSRGSIR +LLTITEKQYESIHILLGEAVFDDTSEATELINIFMRNEATLWLAKYMEDHGISTEKISRELHIPKKKLIPGTKESLDADEFLALCSYLQINPQT +IPIGQGEKXLHIYAYNKDIKTGEDLPCTNTVCKTSICPSCGQRADAGSQIYWCKSCKTLY +MRKSALSVIRKERSWQRICVRSFRKRGCCXSSFWGHPMHFXRSLCGMVQEITIMXMGREF +LFPXRIXNNXILIKCGKNIRNIRKKIQTGILKNRWRYSYRQTESVMRHWWKRQMSISAEW +QQIITLWKCLFRSAVEKTLPLFLIWSCGHSEIRKCSTFLVIRHWNFHLPMNMXNVLSRSI +RRHQSLPLATKRRILRNSVVXSVSSRVMRWCCTVFKTGSIQKTIKSLFRNKKEILTFYGI +RRSESASRSKYDRDSDSPKITKQRIISPIIDWMDFDIWLYLLTTGIDFNRAYRLGYARVG +CWCCPNNSGWSEFLSKIHMKEQSTHFREMLLEFAREIGKEDAEVYVDEGYWKARQGGNGV +AYAQKSVIAFEPCATQENTYNYELQKPIETELYELFRPFGYLNYELGNERLGEVYILGKN +GVPQLKLQGRIGTKKLKVTLLGSEDYGRXDKVSDYQIPDVYGMSCMXERMQAXCDFHKRR +RRWEHPLSDFGXKMCKVQGMCQSFFCRMLYEKGTGNXKEINRXRNHDKDKIPFXRAXKLY +FAGGLAQXRHEGSEKXSVCFFAELWSRCARGGSEHGKGDPLLDANLRVIRRAGKTGCIPF +KARRAIWEYDKYLEETFSLWIIHCNIVKKSXAGNRVESFLMNMMKWNLPKTNWXRSXXTK +QKIWTDLKNFRKNPXKQTERHCFVCMXESRSGEAIRRKRTSARLASLNWXNKRAVFTGKA +SRRCICFRQRSSGIFXKTARPKKELSVSMIFXQERIRRAGSXIXRGPVWXKNLKSXNKKI +IYKXTGQQAWTWYIXTSLXQEKKLLKNTSDHREEGEKRQMKNFVNVDTRFQKSINLTLDT +GDMALVNRYIPTRSSVSILKQYLTNIVRGQGEHATILIGPYGKGKSHLLLVLLALLCKSK +DETAEIQKKIIEADNSTKLLFMELAEVGRPFLPVIVSSFQGDLNESFIFALQEALKRPVS +EICRPSEYSEAVRTMESWKEFYPDTYQRFEKMLEERGCTASLFKERLKNKKKLHSXNSKN +FTRYXHPEVFSIQWCKKKHFGSMKRSTVCFVQSTDMPAFISSLMNSVSIXKDMKQKNFCK +GYEDFAGYVRIGRQPERRADVSDLCGAXEYPXVCQKYXFGNDPGIPWGRRAAERDPVCSF +FPEXLXTDRACTAXERGILYLGNTGKGRSVLSACLFFTSFEKEDFNQIVAKGCYPLTPVC +AYALLNISEKIGQNERTVFTFLAGNEPGSLNRIMEGRNRENLIGVEYVYDYFKNLFRETV +DETYIHNEWLKAEYALTKADTEIEKRIIKAMAIIRMIHPWKSXRYXISRSVWRXISKKEE +CDKAMRELMKKSDLFSAQVLVPMHLRTISVLISRRRLKKNPAAASXHQYLXSVKRDFRTD +LCRSKTVQSGPCNDKIFPIXIHXIXRLPFHWQCKGLFRAPFFRWIYLSDRDSRQGRKGKS +AASSAGIRGXTYYRVTAXRRIFIGMGAFCVLRQSEALQRMSILLKRIKRSVRNXTSMKRT +SAMRXMRDXREILCRKTAAVMYFIQAEKSRISGPEWNLTGIXARSVKTTIRXHRGSTMSF +XISRMCRDSTXRQEMMWXEPFXMEKIXRNMSRAAVLRQWCIVRHFFGQDLPEKISRXTRL +SKDHGGDRRLFCESKWKAGIFSDALXTLAGQRLWGAKRCASAVSCVEILSARRHAGAVPW +KXGTADHGRSAEQYQPVSGKLXSLYRKERYGKRALFTGNGGYLLXCADGKDHTFQPTFRH +YGKYAEMVPFPAAVYAGQXTLSAGNALCGQKFPKVIKADGVKSERIFVXAASECHGFFXK +SYDRALSQGNEAEHGYAFXKCDRRYGKGDQKNIWCKKKATVSRHVCRTGMADSKTVPNAM +YXTKRSRVLWNMWENXIPTTSRRLLPYYPNVWKISILRTGMTDYRKNFCVTLQRYAKRQR +RQRKMPVXRTDKKRFSXRRRMERRSTNIMMRMXKTAPVNFXKIXSKRHWITLETAXRQIR +KWLFXRRHXKNYYSRGNIMEEYIYLDNAATTFPKPEAVYRALDRANRNAAVNAGRGSYAL +AEQAKQLIEDSRGLLLTLTKAKPAAEVVFTPSATFACNQIFGGLPWKREDIVYVSPYEHN +AVMRTLHFLQQRYGFAIEELSVDAGTLELDLEKNPLSVYPKPSNGSCHDTYQQCHRVYSS +GXRSGSFDRYGKRRRXSWMVRRHWDXSLSVWNKAALITIYLRVIRHFTDRLESAVISHNL +QEMQKNXDLXSQEEPEAIHXIXRCRSFFPTVMNREVRTYRRSRDXKRRXKHLEVIMKKCV +RPXRSIIKKNGNXRNCXRQSFKKYRESILIFHRIRKKGAASVPLRSKDILRMMXECCSMK +IIISQSGAAITVHRXSINTXRINHTGGRCVWASDSLIQKKTSGNSYTQWKKSQGVTKVND +DLKRVNLRDIVDRISENTIVLPDFQRGFTWKENNRQKALLASVLTKLPIGTVLFLNVKTE +DYGYKKIGKNEKKHXQFRGKAGSKGAVRRSAEDHGLNGIPFHETSKRKYXRSRITDTGAA +VFLESSKFSKCDRXQKEDLFGGTILSFPNSFRGNYPEISSEEMKERITFVHDRKKAFLYE +KAETKDTREIREYCRNIDNSEDGDAYLLPLFYLLDACEPGSSGAVILEDVVKEIGAEYEK +SIGSWLQAEEYPIEEKEQYLEKFGLEDAQREAVLEEIKTGTLFYQKKKEKIIFLTVXRNG +KCSGECTFVNIXENVLRISGFMRLQFPSMIKSAPLISMKTXTWEENPXVSLIRSXQRHPD +IRRRREISLHRSXMTXSVTTGRNIPHLXKNAQRVRRTVIKITLQTATNHIRQWDGSAAGI +NLKKSFLLPTXRHXXTFWVSLTIFQKEIRDLVCVMLRRSKTXTXKSQKRISAADSIRKNI +RLCGGGMSGLRPRSLIFTDAVWNPKAWXNTLQSDVGYLRYGIFRXSMVXGQXSLRLYGSL +VLECDFIGRVQDRAEPGIYPESSECFIXDPKHQRIXXEIHKSPLQXRTDRXKICRPXHCF +NEKSIRISGGGNWEYHLSILFIRDIFGYFKTASGEKRLSATNTECIEQFREAAKTSHYAD +RKSXRKVXGMPIKRQKAGEKTTAVRIIHRXISCXYRKKRMGXSKIVHXRNTLNFAIRPHX +IMXTSKTIHLPICRSGNRIPDRXRSIAAFSRKKIXRFXEPYYVEVSEFIELSRHLLRRGR +KLIWKRIGTAXCRHXSLKFCIWKRRICEARQRQISACQRNCRKSSRNMQEDNGIGGQVYE +IXKYYHGKFHAVXGQESYRIQLXXCKKCNSSIRRQYGWKNDDSAGIPLGTVWCVNGKRDK +KCRRFSAFKYGYLRNDGCQQSCXGKSRDCSSXRGKTLYHHKRDNLYQSISKVREPGVSEE +MCDADYRVRGHGKLCRGRQQRDRDIDQXTVSKELVPLFFVXWRTVEXCQCRRCPGKYQRI +GTYFNGIICISRGEEPFKRYGKQFRYQKFRSEIEDRVQSMIIXKQNEKIRAXYRKAPGXD +XGTGSQYPELXEKEXRYRTFLSRKPQYGRIAKEKRNIXSYCVSPRESKVFILTRHWXMPL +AIKPIWYLPGQCSVQVWNYXKVRKWNDVISHICVRQRXITSLRTNGVSAVMRLKRQQRVF +CTDGAAKLSRRRQMSVPXXGTLRELQTAGTAKVMSCXKRLMIMQKEVDENVRGISXFLXP +LXKTAKAVRXTYXFCREKEDTAFLXIGDSAFFXGKGRKKKDGSKPVKREXKPRKKRCKAX +KQEMSGIGSWQRLEIAEELYRQLDKEFSEQENKIFWSXTGRYRRISAKCLTQRIKRLNXH +RSMRFRCFTVRSRDTGKRKSVRRRENSKELCVYCNDHGFQQKKETGKDRAXDSRQXHPSD +RIGRTVFXAGRXKYRIDRKGAATGFGTGHYLYVEKKTGSIQSXILTLEADITLIKNRKNH +LQRSNRQGGDSLMENYKFFNDPYKFSGKHARMVSELWSLNDYEHSYFKRLIDIYIVAAIL +GFRIDRKAKRDYAPVEQRTVFGEQMRQASEDLEFILQMMLLLEPAGQGIHEECIRRAFKG +VETEEEFKRYNELFESYMLGGVEELYERLVLQKEEIDTDYSDDKTANLMMLFERFAPKKT +SXNFYKISELLKNQFTKYGKNGIIKNELYYTKKXSVIAVWXAKPKLXSHSSEWDYLLYGF +YRNSKKTNFXYTKCSAQAVLGGEKFMGEMSKTNMDRHRSYRIGLDIGIASVGWAVLENNS +QDEPIRILDLGVRIFEAAEVPKTGAALAAERRDARTARRSDPQKTSSFRKDXVAVXKRRT +DPNRFFYGAVSFTKSAGCLXTSLXRFRTEAEQXGICTGTVTYCKTSWFPLDKKGGVKRRG +QWKSLKSNRREPQTYGRAWLPYRWRNDIXRCLFSYXVCVGRQWISVNTXKXSRXLFPHNA +PGAVRRGGSHPFXMSEKVWKXKGDXKIRSRNIXKLCCHSVLLIWDRDSRQTERRALMQWR +DLEIRSDIVHXKENPANVVRQKQPIRQSYLLHCRRSHIXNWYIWMAHPDFFRKRSGTFYX +KCFRPKKEIKYAAVRKKLNLPLEEKFNTLNYNMKRKGKDNKEEEVDEAAIIAATEKATLS +VCPIVMNTAKESENIXRPCRKKNNRICXMKLERFXPVIRTMTAVXTVXRRQVCRRNWRIL +CXSXHLRSSSTFLXKQXKKSCLIXKKVWYMIKHVKQRAMILKMIIMERKXSCXKAKILQK +PLMRLRTRLXKRSVSQTVKVINAIILKYGSPQAVSIELAREMSKNFEERRKAEKQMEENR +KKNEMAKKGNSGTGQTFAERSGYFEIPFMAXSTGNMPLYRXKDTVRRTVSAGIXYXPHSS +LQYHFXXQLPEQGACYFTGKPXERKPHPIXVFWSGXGPLECLXSKSXSFYQGLXEASQFV +KTGIYKRRPQGIQRAXFKXYKVYYTRDLXYDPSEFRDGAFESGRQEETGLCCQWFHNSLF +KKKMGTDAKRPFYRHSSCNGCCSSSLLYRWYDSKNFQKYTVSXGLIQRTESPGLXDCGCG +DRRNHFFRRPFKRRVGRALRSTGTAAMGAFXRRVRSPYGKXSEEXSGHTSGYVPVVPLSG +RCVXQYPANLCVKDAKSQGDRCSTCRYNTKSGDITKTVERYLRMVAMYYHEPILKIXNWI +RMERLKITTIRTVTDYYMKHXGHDWQNMMVMEKRHLPKSFISQKQMVHRVLLXKKXKPIK +KMSLGVEINKDEAGVGRGIAENANGGMIRVDVFRENGKYYFVPIYIADALKKRLPNKAAM +QNKPYSEWKEMKDENFLFSLYSRDLIGFKNQKGKKVHCTDGTEIVLTNEIVYYIGANIRT +ASISCKAHDNQYEFGSFGIQSLQELKKYQVDVLGNVTEVRQEKRRGFQXMGYRNIKIETS +QQLNIKNSQLLIGSSGEVQIPLEDINSILIESQAVTLSSYLLQKMAEMGIAVYVCDEKHL +PNAVLLPMVRHSRHFKLLKCQMNLGKPKQKGFGSRLXSGKLKINQPVLDSXIXRVPKSFX +KCQNRYNPVIKQMLKQRQQLFIFAGYMVWDFPEVMIISLTQRXITDMQLCVEXLRVLSFV +MDXSLLWDYFIVANXIVITXQMILLRYFVRLXICMFPVVLTYQRLIGHXRLKXKENYMEX +XIMTCWXEERSIYXVIALTKQLQVIAVHCRETVKNWNFRFXWSYRYIVMSKFMRMIVFFD +LPVGTARERKAATKFRNFLIKDGYHMVQYSVYSRICNGNDAVEMHETRLKQHLPSRGSIR +LLTITEKQYESIHILLGEAVFDDTSEATELINIFMRNEATLWLAKYMEDHGISTEKISRELHIPKKKLIPGTKESLDADEFLALCSYLQINPQT +IPIGQGEKXLHIYAYNKDIKTGEDLPCTNTVCKTSICPSCGQRADAGSQIYWCKSCKTLY +MRKSALSVIRKERSWQRICVRSFRKRGCCXSSFWGHPMHFXRSLCGMVQEITIMXMGREF +LFPXRIXNNXILIKCGKNIRNIRKKIQTGILKNRWRYSYRQTESVMRHWWKRQMSISAEW +QQIITLWKCLFRSAVEKTLPLFLIWSCGHSEIRKCSTFLVIRHWNFHLPMNMXNVLSRSI +RRHQSLPLATKRRILRNSVVXSVSSRVMRWCCTVFKTGSIQKTIKSLFRNKKEILTFYGI +RRSESASRSKYDRDSDSPKITKQRIISPIIDWMDFDIWLYLLTTGIDFNRAYRLGYARVG +CWCCPNNSGWSEFLSKIHMKEQSTHFREMLLEFAREIGKEDAEVYVDEGYWKARQGGNGV +AYAQKSVIAFEPCATQENTYNYELQKPIETELYELFRPFGYLNYELGNERLGEVYILGKN +GVPQLKLQGRIGTKKLKVTLLGSEDYGRXDKVSDYQIPDVYGMSCMXERMQAXCDFHKRR +RRWEHPLSDFGXKMCKVQGMCQSFFCRMLYEKGTGNXKEINRXRNHDKDKIPFXRAXKLY +FAGGLAQXRHEGSEKXSVCFFAELWSRCARGGSEHGKGDPLLDANLRVIRRAGKTGCIPF +KARRAIWEYDKYLEETFSLWIIHCNIVKKSXAGNRVESFLMNMMKWNLPKTNWXRSXXTK +QKIWTDLKNFRKNPXKQTERHCFVCMXESRSGEAIRRKRTSARLASLNWXNKRAVFTGKA +SRRCICFRQRSSGIFXKTARPKKELSVSMIFXQERIRRAGSXIXRGPVWXKNLKSXNKKI +IYKXTGQQAWTWYIXTSLXQEKKLLKNTSDHREEGEKRQMKNFVNVDTRFQKSINLTLDT +GDMALVNRYIPTRSSVSILKQYLTNIVRGQGEHATILIGPYGKGKSHLLLVLLALLCKSK +DETAEIQKKIIEADNSTKLLFMELAEVGRPFLPVIVSSFQGDLNESFIFALQEALKRPVS +EICRPSEYSEAVRTMESWKEFYPDTYQRFEKMLEERGCTASLFKERLKNKKKLHSXNSKN +FTRYXHPEVFSIQWCKKKHFGSMKRSTVCFVQSTDMPAFISSLMNSVSIXKDMKQKNFCK +GYEDFAGYVRIGRQPERRADVSDLCGAXEYPXVCQKYXFGNDPGIPWGRRAAERDPVCSF +FPEXLXTDRACTAXERGILYLGNTGKGRSVLSACLFFTSFEKEDFNQIVAKGCYPLTPVC +AYALLNISEKIGQNERTVFTFLAGNEPGSLNRIMEGRNRENLIGVEYVYDYFKNLFRETV +DETYIHNEWLKAEYALTKADTEIEKRIIKAMAIIRMIHPWKSXRYXISRSVWRXISKKEE +CDKAMRELMKKSDLFSAQVLVPMHLRTISVLISRRRLKKNPAAASXHQYLXSVKRDFRTD +LCRSKTVQSGPCNDKIFPIXIHXIXRLPFHWQCKGLFRAPFFRWIYLSDRDSRQGRKGKS +AASSAGIRGXTYYRVTAXRRIFIGMGAFCVLRQSEALQRMSILLKRIKRSVRNXTSMKRT +SAMRXMRDXREILCRKTAAVMYFIQAEKSRISGPEWNLTGIXARSVKTTIRXHRGSTMSF +XISRMCRDSTXRQEMMWXEPFXMEKIXRNMSRAAVLRQWCIVRHFFGQDLPEKISRXTRL +SKDHGGDRRLFCESKWKAGIFSDALXTLAGQRLWGAKRCASAVSCVEILSARRHAGAVPW +KXGTADHGRSAEQYQPVSGKLXSLYRKERYGKRALFTGNGGYLLXCADGKDHTFQPTFRH +YGKYAEMVPFPAAVYAGQXTLSAGNALCGQKFPKVIKADGVKSERIFVXAASECHGFFXK +SYDRALSQGNEAEHGYAFXKCDRRYGKGDQKNIWCKKKATVSRHVCRTGMADSKTVPNAM +YXTKRSRVLWNMWENXIPTTSRRLLPYYPNVWKISILRTGMTDYRKNFCVTLQRYAKRQR +RQRKMPVXRTDKKRFSXRRRMERRSTNIMMRMXKTAPVNFXKIXSKRHWITLETAXRQIR +KWLFXRRHXKNYYSRGNIMEEYIYLDNAATTFPKPEAVYRALDRANRNAAVNAGRGSYAL +AEQAKQLIEDSRGLLLTLTKAKPAAEVVFTPSATFACNQIFGGLPWKREDIVYVSPYEHN +AVMRTLHFLQQRYGFAIEELSVDAGTLELDLEKNPLSVYPKPSNGSCHDTYQQCHRVYSS +GXRSGSFDRYGKRRRXSWMVRRHWDXSLSVWNKAALITIYLRVIRHFTDRLESAVISHNL +QEMQKNXDLXSQEEPEAIHXIXRCRSFFPTVMNREVRTYRRSRDXKRRXKHLEVIMKKCV +RPXRSIIKKNGNXRNCXRQSFKKYRESILIFHRIRKKGAASVPLRSKDILRMMXECCSMK +IIISQSGAAITVHRXSINTXRINHTGGRCVWASDSLIQKKTSGNSYTQWKKSQGVTKVND +DLKRVNLRDIVDRISENTIVLPDFQRGFTWKENNRQKALLASVLTKLPIGTVLFLNVKTE +DYGYKKIGKNEKKHXQFRGKAGSKGAVRRSAEDHGLNGIPFHETSKRKYXRSRITDTGAA +VFLESSKFSKCDRXQKEDLFGGTILSFPNSFRGNYPEISSEEMKERITFVHDRKKAFLYE +KAETKDTREIREYCRNIDNSEDGDAYLLPLFYLLDACEPGSSGAVILEDVVKEIGAEYEK +SIGSWLQAEEYPIEEKEQYLEKFGLEDAQREAVLEEIKTGTLFYQKKKEKIIFLTVXRNG +KCSGECTFVNIXENVLRISGFMRLQFPSMIKSAPLISMKTXTWEENPXVSLIRSXQRHPD +IRRRREISLHRSXMTXSVTTGRNIPHLXKNAQRVRRTVIKITLQTATNHIRQWDGSAAGI +NLKKSFLLPTXRHXXTFWVSLTIFQKEIRDLVCVMLRRSKTXTXKSQKRISAADSIRKNI +RLCGGGMSGLRPRSLIFTDAVWNPKAWXNTLQSDVGYLRYGIFRXSMVXGQXSLRLYGSL +VLECDFIGRVQDRAEPGIYPESSECFIXDPKHQRIXXEIHKSPLQXRTDRXKICRPXHCF +NEKSIRISGGGNWEYHLSILFIRDIFGYFKTASGEKRLSATNTECIEQFREAAKTSHYAD +RKSXRKVXGMPIKRQKAGEKTTAVRIIHRXISCXYRKKRMGXSKIVHXRNTLNFAIRPHX +IMXTSKTIHLPICRSGNRIPDRXRSIAAFSRKKIXRFXEPYYVEVSEFIELSRHLLRRGR +KLIWKRIGTAXCRHXSLKFCIWKRRICEARQRQISACQRNCRKSSRNMQEDNGIGGQVYE +IXKYYHGKFHAVXGQESYRIQLXXCKKCNSSIRRQYGWKNDDSAGIPLGTVWCVNGKRDK +KCRRFSAFKYGYLRNDGCQQSCXGKSRDCSSXRGKTLYHHKRDNLYQSISKVREPGVSEE +MCDADYRVRGHGKLCRGRQQRDRDIDQXTVSKELVPLFFVXWRTVEXCQCRRCPGKYQRI +GTYFNGIICISRGEEPFKRYGKQFRYQKFRSEIEDRVQSMIIXKQNEKIRAXYRKAPGXD +XGTGSQYPELXEKEXRYRTFLSRKPQYGRIAKEKRNIXSYCVSPRESKVFILTRHWXMPL +AIKPIWYLPGQCSVQVWNYXKVRKWNDVISHICVRQRXITSLRTNGVSAVMRLKRQQRVF +CTDGAAKLSRRRQMSVPXXGTLRELQTAGTAKVMSCXKRLMIMQKEVDENVRGISXFLXP +LXKTAKAVRXTYXFCREKEDTAFLXIGDSAFFXGKGRKKKDGSKPVKREXKPRKKRCKAX +KQEMSGIGSWQRLEIAEELYRQLDKEFSEQENKIFWSXTGRYRRISAKCLTQRIKRLNXH +RSMRFRCFTVRSRDTGKRKSVRRRENSKELCVYCNDHGFQQKKETGKDRAXDSRQXHPSD +RIGRTVFXAGRXKYRIDRKGAATGFGTGHYLYVEKKTGSIQSXILTLEADITLIKNRKNH +LQRSNRQGGDSLMENYKFFNDPYKFSGKHARMVSELWSLNDYEHSYFKRLIDIYIVAAIL +GFRIDRKAKRDYAPVEQRTVFGEQMRQASEDLEFILQMMLLLEPAGQGIHEECIRRAFKG +VETEEEFKRYNELFESYMLGGVEELYERLVLQKEEIDTDYSDDKTANLMMLFERFAPKKT +SXNFYKISELLKNQFTKYGKNGIIKNELYYTKKXSVIAVWXAKPKLXSHSSEWDYLLYGF +YRNSKKTNFXYTKCSAQAVLGGEKFMGEMSKTNMDRHRSYRIGLDIGIASVGWAVLENNS +QDEPIRILDLGVRIFEAAEVPKTGAALAAERRDARTARRSDPQKTSSFRKDXVAVXKRRT +DPNRFFYGAVSFTKSAGCLXTSLXRFRTEAEQXGICTGTVTYCKTSWFPLDKKGGVKRRG +QWKSLKSNRREPQTYGRAWLPYRWRNDIXRCLFSYXVCVGRQWISVNTXKXSRXLFPHNA +PGAVRRGGSHPFXMSEKVWKXKGDXKIRSRNIXKLCCHSVLLIWDRDSRQTERRALMQWR +DLEIRSDIVHXKENPANVVRQKQPIRQSYLLHCRRSHIXNWYIWMAHPDFFRKRSGTFYX +KCFRPKKEIKYAAVRKKLNLPLEEKFNTLNYNMKRKGKDNKEEEVDEAAIIAATEKATLS +VCPIVMNTAKESENIXRPCRKKNNRICXMKLERFXPVIRTMTAVXTVXRRQVCRRNWRIL +CXSXHLRSSSTFLXKQXKKSCLIXKKVWYMIKHVKQRAMILKMIIMERKXSCXKAKILQK +PLMRLRTRLXKRSVSQTVKVINAIILKYGSPQAVSIELAREMSKNFEERRKAEKQMEENR +KKNEMAKKGNSGTGQTFAERSGYFEIPFMAXSTGNMPLYRXKDTVRRTVSAGIXYXPHSS +LQYHFXXQLPEQGACYFTGKPXERKPHPIXVFWSGXGPLECLXSKSXSFYQGLXEASQFV +KTGIYKRRPQGIQRAXFKXYKVYYTRDLXYDPSEFRDGAFESGRQEETGLCCQWFHNSLF +KKKMGTDAKRPFYRHSSCNGCCSSSLLYRWYDSKNFQKYTVSXGLIQRTESPGLXDCGCG +DRRNHFFRRPFKRRVGRALRSTGTAAMGAFXRRVRSPYGKXSEEXSGHTSGYVPVVPLSG +RCVXQYPANLCVKDAKSQGDRCSTCRYNTKSGDITKTVERYLRMVAMYYHEPILKIXNWI +RMERLKITTIRTVTDYYMKHXGHDWQNMMVMEKRHLPKSFISQKQMVHRVLLXKKXKPIK +KMSLGVEINKDEAGVGRGIAENANGGMIRVDVFRENGKYYFVPIYIADALKKRLPNKAAM +QNKPYSEWKEMKDENFLFSLYSRDLIGFKNQKGKKVHCTDGTEIVLTNEIVYYIGANIRT +ASISCKAHDNQYEFGSFGIQSLQELKKYQVDVLGNVTEVRQEKRRGFQXMGYRNIKIETS +QQLNIKNSQLLIGSSGEVQIPLEDINSILIESQAVTLSSYLLQKMAEMGIAVYVCDEKHL +PNAVLLPMVRHSRHFKLLKCQMNLGKPKQKGFGSRLXSGKLKINQPVLDSXIXRVPKSFX +KCQNRYNPVIKQMLKQRQQLFIFAGYMVWDFPEVMIISLTQRXITDMQLCVEXLRVLSFV +MDXSLLWDYFIVANXIVITXQMILLRYFVRLXICMFPVVLTYQRLIGHXRLKXKENYMEX +XIMTCWXEERSIYXVIALTKQLQVIAVHCRETVKNWNFRFXWSYRYIVMSKFMRMIVFFD +LPVGTARERKAATKFRNFLIKDGYHMVQYSVYSRICNGNDAVEMHETRLKQHLPSRGSIR +LLTITEKQYESIHILLGEAVFDDTSEATELINIFMRNEATLWLAKYMEDHGISTEKISRELHIPKKKLIPGTKESLDADEFLALCSYLQINPQT +IPIGQGEKXLHIYAYNKDIKTGEDLPCTNTVCKTSICPSCGQRADAGSQIYWCKSCKTLY +MRKSALSVIRKERSWQRICVRSFRKRGCCXSSFWGHPMHFXRSLCGMVQEITIMXMGREF +LFPXRIXNNXILIKCGKNIRNIRKKIQTGILKNRWRYSYRQTESVMRHWWKRQMSISAEW +QQIITLWKCLFRSAVEKTLPLFLIWSCGHSEIRKCSTFLVIRHWNFHLPMNMXNVLSRSI +RRHQSLPLATKRRILRNSVVXSVSSRVMRWCCTVFKTGSIQKTIKSLFRNKKEILTFYGI +RRSESASRSKYDRDSDSPKITKQRIISPIIDWMDFDIWLYLLTTGIDFNRAYRLGYARVG +CWCCPNNSGWSEFLSKIHMKEQSTHFREMLLEFAREIGKEDAEVYVDEGYWKARQGGNGV +AYAQKSVIAFEPCATQENTYNYELQKPIETELYELFRPFGYLNYELGNERLGEVYILGKN +GVPQLKLQGRIGTKKLKVTLLGSEDYGRXDKVSDYQIPDVYGMSCMXERMQAXCDFHKRR +RRWEHPLSDFGXKMCKVQGMCQSFFCRMLYEKGTGNXKEINRXRNHDKDKIPFXRAXKLY +FAGGLAQXRHEGSEKXSVCFFAELWSRCARGGSEHGKGDPLLDANLRVIRRAGKTGCIPF +KARRAIWEYDKYLEETFSLWIIHCNIVKKSXAGNRVESFLMNMMKWNLPKTNWXRSXXTK +QKIWTDLKNFRKNPXKQTERHCFVCMXESRSGEAIRRKRTSARLASLNWXNKRAVFTGKA +SRRCICFRQRSSGIFXKTARPKKELSVSMIFXQERIRRAGSXIXRGPVWXKNLKSXNKKI +IYKXTGQQAWTWYIXTSLXQEKKLLKNTSDHREEGEKRQMKNFVNVDTRFQKSINLTLDT +GDMALVNRYIPTRSSVSILKQYLTNIVRGQGEHATILIGPYGKGKSHLLLVLLALLCKSK +DETAEIQKKIIEADNSTKLLFMELAEVGRPFLPVIVSSFQGDLNESFIFALQEALKRPVS +EICRPSEYSEAVRTMESWKEFYPDTYQRFEKMLEERGCTASLFKERLKNKKKLHSXNSKN +FTRYXHPEVFSIQWCKKKHFGSMKRSTVCFVQSTDMPAFISSLMNSVSIXKDMKQKNFCK +GYEDFAGYVRIGRQPERRADVSDLCGAXEYPXVCQKYXFGNDPGIPWGRRAAERDPVCSF +FPEXLXTDRACTAXERGILYLGNTGKGRSVLSACLFFTSFEKEDFNQIVAKGCYPLTPVC +AYALLNISEKIGQNERTVFTFLAGNEPGSLNRIMEGRNRENLIGVEYVYDYFKNLFRETV +DETYIHNEWLKAEYALTKADTEIEKRIIKAMAIIRMIHPWKSXRYXISRSVWRXISKKEE +CDKAMRELMKKSDLFSAQVLVPMHLRTISVLISRRRLKKNPAAASXHQYLXSVKRDFRTD +LCRSKTVQSGPCNDKIFPIXIHXIXRLPFHWQCKGLFRAPFFRWIYLSDRDSRQGRKGKS +AASSAGIRGXTYYRVTAXRRIFIGMGAFCVLRQSEALQRMSILLKRIKRSVRNXTSMKRT +SAMRXMRDXREILCRKTAAVMYFIQAEKSRISGPEWNLTGIXARSVKTTIRXHRGSTMSF +XISRMCRDSTXRQEMMWXEPFXMEKIXRNMSRAAVLRQWCIVRHFFGQDLPEKISRXTRL +SKDHGGDRRLFCESKWKAGIFSDALXTLAGQRLWGAKRCASAVSCVEILSARRHAGAVPW +KXGTADHGRSAEQYQPVSGKLXSLYRKERYGKRALFTGNGGYLLXCADGKDHTFQPTFRH +YGKYAEMVPFPAAVYAGQXTLSAGNALCGQKFPKVIKADGVKSERIFVXAASECHGFFXK +SYDRALSQGNEAEHGYAFXKCDRRYGKGDQKNIWCKKKATVSRHVCRTGMADSKTVPNAM +YXTKRSRVLWNMWENXIPTTSRRLLPYYPNVWKISILRTGMTDYRKNFCVTLQRYAKRQR +RQRKMPVXRTDKKRFSXRRRMERRSTNIMMRMXKTAPVNFXKIXSKRHWITLETAXRQIR +KWLFXRRHXKNYYSRGNIMEEYIYLDNAATTFPKPEAVYRALDRANRNAAVNAGRGSYAL +AEQAKQLIEDSRGLLLTLTKAKPAAEVVFTPSATFACNQIFGGLPWKREDIVYVSPYEHN +AVMRTLHFLQQRYGFAIEELSVDAGTLELDLEKNPLSVYPKPSNGSCHDTYQQCHRVYSS +GXRSGSFDRYGKRRRXSWMVRRHWDXSLSVWNKAALITIYLRVIRHFTDRLESAVISHNL +QEMQKNXDLXSQEEPEAIHXIXRCRSFFPTVMNREVRTYRRSRDXKRRXKHLEVIMKKCV +RPXRSIIKKNGNXRNCXRQSFKKYRESILIFHRIRKKGAASVPLRSKDILRMMXECCSMK +IIISQSGAAITVHRXSINTXRINHTGGRCVWASDSLIQKKTSGNSYTQWKKSQGVTKVND +DLKRVNLRDIVDRISENTIVLPDFQRGFTWKENNRQKALLASVLTKLPIGTVLFLNVKTE +DYGYKKIGKNEKKHXQFRGKAGSKGAVRRSAEDHGLNGIPFHETSKRKYXRSRITDTGAA +VFLESSKFSKCDRXQKEDLFGGTILSFPNSFRGNYPEISSEEMKERITFVHDRKKAFLYE +KAETKDTREIREYCRNIDNSEDGDAYLLPLFYLLDACEPGSSGAVILEDVVKEIGAEYEK +SIGSWLQAEEYPIEEKEQYLEKFGLEDAQREAVLEEIKTGTLFYQKKKEKIIFLTVXRNG +KCSGECTFVNIXENVLRISGFMRLQFPSMIKSAPLISMKTXTWEENPXVSLIRSXQRHPD +IRRRREISLHRSXMTXSVTTGRNIPHLXKNAQRVRRTVIKITLQTATNHIRQWDGSAAGI +NLKKSFLLPTXRHXXTFWVSLTIFQKEIRDLVCVMLRRSKTXTXKSQKRISAADSIRKNI +RLCGGGMSGLRPRSLIFTDAVWNPKAWXNTLQSDVGYLRYGIFRXSMVXGQXSLRLYGSL +VLECDFIGRVQDRAEPGIYPESSECFIXDPKHQRIXXEIHKSPLQXRTDRXKICRPXHCF +NEKSIRISGGGNWEYHLSILFIRDIFGYFKTASGEKRLSATNTECIEQFREAAKTSHYAD +RKSXRKVXGMPIKRQKAGEKTTAVRIIHRXISCXYRKKRMGXSKIVHXRNTLNFAIRPHX +IMXTSKTIHLPICRSGNRIPDRXRSIAAFSRKKIXRFXEPYYVEVSEFIELSRHLLRRGR +KLIWKRIGTAXCRHXSLKFCIWKRRICEARQRQISACQRNCRKSSRNMQEDNGIGGQVYE +IXKYYHGKFHAVXGQESYRIQLXXCKKCNSSIRRQYGWKNDDSAGIPLGTVWCVNGKRDK +KCRRFSAFKYGYLRNDGCQQSCXGKSRDCSSXRGKTLYHHKRDNLYQSISKVREPGVSEE +MCDADYRVRGHGKLCRGRQQRDRDIDQXTVSKELVPLFFVXWRTVEXCQCRRCPGKYQRI +GTYFNGIICISRGEEPFKRYGKQFRYQKFRSEIEDRVQSMIIXKQNEKIRAXYRKAPGXD +XGTGSQYPELXEKEXRYRTFLSRKPQYGRIAKEKRNIXSYCVSPRESKVFILTRHWXMPL +AIKPIWYLPGQCSVQVWNYXKVRKWNDVISHICVRQRXITSLRTNGVSAVMRLKRQQRVF +CTDGAAKLSRRRQMSVPXXGTLRELQTAGTAKVMSCXKRLMIMQKEVDENVRGISXFLXP +LXKTAKAVRXTYXFCREKEDTAFLXIGDSAFFXGKGRKKKDGSKPVKREXKPRKKRCKAX +KQEMSGIGSWQRLEIAEELYRQLDKEFSEQENKIFWSXTGRYRRISAKCLTQRIKRLNXH +RSMRFRCFTVRSRDTGKRKSVRRRENSKELCVYCNDHGFQQKKETGKDRAXDSRQXHPSD +RIGRTVFXAGRXKYRIDRKGAATGFGTGHYLYVEKKTGSIQSXILTLEADITLIKNRKNH +LQRSNRQGGDSLMENYKFFNDPYKFSGKHARMVSELWSLNDYEHSYFKRLIDIYIVAAIL +GFRIDRKAKRDYAPVEQRTVFGEQMRQASEDLEFILQMMLLLEPAGQGIHEECIRRAFKG +VETEEEFKRYNELFESYMLGGVEELYERLVLQKEEIDTDYSDDKTANLMMLFERFAPKKT +SXNFYKISELLKNQFTKYGKNGIIKNELYYTKKXSVIAVWXAKPKLXSHSSEWDYLLYGF +YRNSKKTNFXYTKCSAQAVLGGEKFMGEMSKTNMDRHRSYRIGLDIGIASVGWAVLENNS +QDEPIRILDLGVRIFEAAEVPKTGAALAAERRDARTARRSDPQKTSSFRKDXVAVXKRRT +DPNRFFYGAVSFTKSAGCLXTSLXRFRTEAEQXGICTGTVTYCKTSWFPLDKKGGVKRRG +QWKSLKSNRREPQTYGRAWLPYRWRNDIXRCLFSYXVCVGRQWISVNTXKXSRXLFPHNA +PGAVRRGGSHPFXMSEKVWKXKGDXKIRSRNIXKLCCHSVLLIWDRDSRQTERRALMQWR +DLEIRSDIVHXKENPANVVRQKQPIRQSYLLHCRRSHIXNWYIWMAHPDFFRKRSGTFYX +KCFRPKKEIKYAAVRKKLNLPLEEKFNTLNYNMKRKGKDNKEEEVDEAAIIAATEKATLS +VCPIVMNTAKESENIXRPCRKKNNRICXMKLERFXPVIRTMTAVXTVXRRQVCRRNWRIL +CXSXHLRSSSTFLXKQXKKSCLIXKKVWYMIKHVKQRAMILKMIIMERKXSCXKAKILQK +PLMRLRTRLXKRSVSQTVKVINAIILKYGSPQAVSIELAREMSKNFEERRKAEKQMEENR +KKNEMAKKGNSGTGQTFAERSGYFEIPFMAXSTGNMPLYRXKDTVRRTVSAGIXYXPHSS +LQYHFXXQLPEQGACYFTGKPXERKPHPIXVFWSGXGPLECLXSKSXSFYQGLXEASQFV +KTGIYKRRPQGIQRAXFKXYKVYYTRDLXYDPSEFRDGAFESGRQEETGLCCQWFHNSLF +KKKMGTDAKRPFYRHSSCNGCCSSSLLYRWYDSKNFQKYTVSXGLIQRTESPGLXDCGCG +DRRNHFFRRPFKRRVGRALRSTGTAAMGAFXRRVRSPYGKXSEEXSGHTSGYVPVVPLSG +RCVXQYPANLCVKDAKSQGDRCSTCRYNTKSGDITKTVERYLRMVAMYYHEPILKIXNWI +RMERLKITTIRTVTDYYMKHXGHDWQNMMVMEKRHLPKSFISQKQMVHRVLLXKKXKPIK +KMSLGVEINKDEAGVGRGIAENANGGMIRVDVFRENGKYYFVPIYIADALKKRLPNKAAM +QNKPYSEWKEMKDENFLFSLYSRDLIGFKNQKGKKVHCTDGTEIVLTNEIVYYIGANIRT +ASISCKAHDNQYEFGSFGIQSLQELKKYQVDVLGNVTEVRQEKRRGFQXMGYRNIKIETS +QQLNIKNSQLLIGSSGEVQIPLEDINSILIESQAVTLSSYLLQKMAEMGIAVYVCDEKHL +PNAVLLPMVRHSRHFKLLKCQMNLGKPKQKGFGSRLXSGKLKINQPVLDSXIXRVPKSFX +KCQNRYNPVIKQMLKQRQQLFIFAGYMVWDFPEVMIISLTQRXITDMQLCVEXLRVLSFV +MDXSLLWDYFIVANXIVITXQMILLRYFVRLXICMFPVVLTYQRLIGHXRLKXKENYMEX +XIMTCWXEERSIYXVIALTKQLQVIAVHCRETVKNWNFRFXWSYRYIVMSKFMRMIVFFD +LPVGTARERKAATKFRNFLIKDGYHMVQYSVYSRICNGNDAVEMHETRLKQHLPSRGSIR +LLTITEKQYESIHILLGEAVFDDTSEATELINIFMRNEATLWLAKYMEDHGISTEKISRELHIPKKKLIPGTKESLDADEFLALCSYLQINPQT +IPIGQGEKXLHIYAYNKDIKTGEDLPCTNTVCKTSICPSCGQRADAGSQIYWCKSCKTLY +MRKSALSVIRKERSWQRICVRSFRKRGCCXSSFWGHPMHFXRSLCGMVQEITIMXMGREF +LFPXRIXNNXILIKCGKNIRNIRKKIQTGILKNRWRYSYRQTESVMRHWWKRQMSISAEW +QQIITLWKCLFRSAVEKTLPLFLIWSCGHSEIRKCSTFLVIRHWNFHLPMNMXNVLSRSI +RRHQSLPLATKRRILRNSVVXSVSSRVMRWCCTVFKTGSIQKTIKSLFRNKKEILTFYGI +RRSESASRSKYDRDSDSPKITKQRIISPIIDWMDFDIWLYLLTTGIDFNRAYRLGYARVG +CWCCPNNSGWSEFLSKIHMKEQSTHFREMLLEFAREIGKEDAEVYVDEGYWKARQGGNGV +AYAQKSVIAFEPCATQENTYNYELQKPIETELYELFRPFGYLNYELGNERLGEVYILGKN +GVPQLKLQGRIGTKKLKVTLLGSEDYGRXDKVSDYQIPDVYGMSCMXERMQAXCDFHKRR +RRWEHPLSDFGXKMCKVQGMCQSFFCRMLYEKGTGNXKEINRXRNHDKDKIPFXRAXKLY +FAGGLAQXRHEGSEKXSVCFFAELWSRCARGGSEHGKGDPLLDANLRVIRRAGKTGCIPF +KARRAIWEYDKYLEETFSLWIIHCNIVKKSXAGNRVESFLMNMMKWNLPKTNWXRSXXTK +QKIWTDLKNFRKNPXKQTERHCFVCMXESRSGEAIRRKRTSARLASLNWXNKRAVFTGKA +SRRCICFRQRSSGIFXKTARPKKELSVSMIFXQERIRRAGSXIXRGPVWXKNLKSXNKKI +IYKXTGQQAWTWYIXTSLXQEKKLLKNTSDHREEGEKRQMKNFVNVDTRFQKSINLTLDT +GDMALVNRYIPTRSSVSILKQYLTNIVRGQGEHATILIGPYGKGKSHLLLVLLALLCKSK +DETAEIQKKIIEADNSTKLLFMELAEVGRPFLPVIVSSFQGDLNESFIFALQEALKRPVS +EICRPSEYSEAVRTMESWKEFYPDTYQRFEKMLEERGCTASLFKERLKNKKKLHSXNSKN +FTRYXHPEVFSIQWCKKKHFGSMKRSTVCFVQSTDMPAFISSLMNSVSIXKDMKQKNFCK +GYEDFAGYVRIGRQPERRADVSDLCGAXEYPXVCQKYXFGNDPGIPWGRRAAERDPVCSF +FPEXLXTDRACTAXERGILYLGNTGKGRSVLSACLFFTSFEKEDFNQIVAKGCYPLTPVC +AYALLNISEKIGQNERTVFTFLAGNEPGSLNRIMEGRNRENLIGVEYVYDYFKNLFRETV +DETYIHNEWLKAEYALTKADTEIEKRIIKAMAIIRMIHPWKSXRYXISRSVWRXISKKEE +CDKAMRELMKKSDLFSAQVLVPMHLRTISVLISRRRLKKNPAAASXHQYLXSVKRDFRTD +LCRSKTVQSGPCNDKIFPIXIHXIXRLPFHWQCKGLFRAPFFRWIYLSDRDSRQGRKGKS +AASSAGIRGXTYYRVTAXRRIFIGMGAFCVLRQSEALQRMSILLKRIKRSVRNXTSMKRT +SAMRXMRDXREILCRKTAAVMYFIQAEKSRISGPEWNLTGIXARSVKTTIRXHRGSTMSF +XISRMCRDSTXRQEMMWXEPFXMEKIXRNMSRAAVLRQWCIVRHFFGQDLPEKISRXTRL +SKDHGGDRRLFCESKWKAGIFSDALXTLAGQRLWGAKRCASAVSCVEILSARRHAGAVPW +KXGTADHGRSAEQYQPVSGKLXSLYRKERYGKRALFTGNGGYLLXCADGKDHTFQPTFRH +YGKYAEMVPFPAAVYAGQXTLSAGNALCGQKFPKVIKADGVKSERIFVXAASECHGFFXK +SYDRALSQGNEAEHGYAFXKCDRRYGKGDQKNIWCKKKATVSRHVCRTGMADSKTVPNAM +YXTKRSRVLWNMWENXIPTTSRRLLPYYPNVWKISILRTGMTDYRKNFCVTLQRYAKRQR +RQRKMPVXRTDKKRFSXRRRMERRSTNIMMRMXKTAPVNFXKIXSKRHWITLETAXRQIR +KWLFXRRHXKNYYSRGNIMEEYIYLDNAATTFPKPEAVYRALDRANRNAAVNAGRGSYAL +AEQAKQLIEDSRGLLLTLTKAKPAAEVVFTPSATFACNQIFGGLPWKREDIVYVSPYEHN +AVMRTLHFLQQRYGFAIEELSVDAGTLELDLEKNPLSVYPKPSNGSCHDTYQQCHRVYSS +GXRSGSFDRYGKRRRXSWMVRRHWDXSLSVWNKAALITIYLRVIRHFTDRLESAVISHNL +QEMQKNXDLXSQEEPEAIHXIXRCRSFFPTVMNREVRTYRRSRDXKRRXKHLEVIMKKCV +RPXRSIIKKNGNXRNCXRQSFKKYRESILIFHRIRKKGAASVPLRSKDILRMMXECCSMK +IIISQSGAAITVHRXSINTXRINHTGGRCVWASDSLIQKKTSGNSYTQWKKSQGVTKVND +DLKRVNLRDIVDRISENTIVLPDFQRGFTWKENNRQKALLASVLTKLPIGTVLFLNVKTE +DYGYKKIGKNEKKHXQFRGKAGSKGAVRRSAEDHGLNGIPFHETSKRKYXRSRITDTGAA +VFLESSKFSKCDRXQKEDLFGGTILSFPNSFRGNYPEISSEEMKERITFVHDRKKAFLYE +KAETKDTREIREYCRNIDNSEDGDAYLLPLFYLLDACEPGSSGAVILEDVVKEIGAEYEK +SIGSWLQAEEYPIEEKEQYLEKFGLEDAQREAVLEEIKTGTLFYQKKKEKIIFLTVXRNG +KCSGECTFVNIXENVLRISGFMRLQFPSMIKSAPLISMKTXTWEENPXVSLIRSXQRHPD +IRRRREISLHRSXMTXSVTTGRNIPHLXKNAQRVRRTVIKITLQTATNHIRQWDGSAAGI +NLKKSFLLPTXRHXXTFWVSLTIFQKEIRDLVCVMLRRSKTXTXKSQKRISAADSIRKNI +RLCGGGMSGLRPRSLIFTDAVWNPKAWXNTLQSDVGYLRYGIFRXSMVXGQXSLRLYGSL +VLECDFIGRVQDRAEPGIYPESSECFIXDPKHQRIXXEIHKSPLQXRTDRXKICRPXHCF +NEKSIRISGGGNWEYHLSILFIRDIFGYFKTASGEKRLSATNTECIEQFREAAKTSHYAD +RKSXRKVXGMPIKRQKAGEKTTAVRIIHRXISCXYRKKRMGXSKIVHXRNTLNFAIRPHX +IMXTSKTIHLPICRSGNRIPDRXRSIAAFSRKKIXRFXEPYYVEVSEFIELSRHLLRRGR +KLIWKRIGTAXCRHXSLKFCIWKRRICEARQRQISACQRNCRKSSRNMQEDNGIGGQVYE +IXKYYHGKFHAVXGQESYRIQLXXCKKCNSSIRRQYGWKNDDSAGIPLGTVWCVNGKRDK +KCRRFSAFKYGYLRNDGCQQSCXGKSRDCSSXRGKTLYHHKRDNLYQSISKVREPGVSEE +MCDADYRVRGHGKLCRGRQQRDRDIDQXTVSKELVPLFFVXWRTVEXCQCRRCPGKYQRI +GTYFNGIICISRGEEPFKRYGKQFRYQKFRSEIEDRVQSMIIXKQNEKIRAXYRKAPGXD +XGTGSQYPELXEKEXRYRTFLSRKPQYGRIAKEKRNIXSYCVSPRESKVFILTRHWXMPL +AIKPIWYLPGQCSVQVWNYXKVRKWNDVISHICVRQRXITSLRTNGVSAVMRLKRQQRVF +CTDGAAKLSRRRQMSVPXXGTLRELQTAGTAKVMSCXKRLMIMQKEVDENVRGISXFLXP +LXKTAKAVRXTYXFCREKEDTAFLXIGDSAFFXGKGRKKKDGSKPVKREXKPRKKRCKAX +KQEMSGIGSWQRLEIAEELYRQLDKEFSEQENKIFWSXTGRYRRISAKCLTQRIKRLNXH +RSMRFRCFTVRSRDTGKRKSVRRRENSKELCVYCNDHGFQQKKETGKDRAXDSRQXHPSD +RIGRTVFXAGRXKYRIDRKGAATGFGTGHYLYVEKKTGSIQSXILTLEADITLIKNRKNH +LQRSNRQGGDSLMENYKFFNDPYKFSGKHARMVSELWSLNDYEHSYFKRLIDIYIVAAIL +GFRIDRKAKRDYAPVEQRTVFGEQMRQASEDLEFILQMMLLLEPAGQGIHEECIRRAFKG +VETEEEFKRYNELFESYMLGGVEELYERLVLQKEEIDTDYSDDKTANLMMLFERFAPKKT +SXNFYKISELLKNQFTKYGKNGIIKNELYYTKKXSVIAVWXAKPKLXSHSSEWDYLLYGF +YRNSKKTNFXYTKCSAQAVLGGEKFMGEMSKTNMDRHRSYRIGLDIGIASVGWAVLENNS +QDEPIRILDLGVRIFEAAEVPKTGAALAAERRDARTARRSDPQKTSSFRKDXVAVXKRRT +DPNRFFYGAVSFTKSAGCLXTSLXRFRTEAEQXGICTGTVTYCKTSWFPLDKKGGVKRRG +QWKSLKSNRREPQTYGRAWLPYRWRNDIXRCLFSYXVCVGRQWISVNTXKXSRXLFPHNA +PGAVRRGGSHPFXMSEKVWKXKGDXKIRSRNIXKLCCHSVLLIWDRDSRQTERRALMQWR +DLEIRSDIVHXKENPANVVRQKQPIRQSYLLHCRRSHIXNWYIWMAHPDFFRKRSGTFYX +KCFRPKKEIKYAAVRKKLNLPLEEKFNTLNYNMKRKGKDNKEEEVDEAAIIAATEKATLS +VCPIVMNTAKESENIXRPCRKKNNRICXMKLERFXPVIRTMTAVXTVXRRQVCRRNWRIL +CXSXHLRSSSTFLXKQXKKSCLIXKKVWYMIKHVKQRAMILKMIIMERKXSCXKAKILQK +PLMRLRTRLXKRSVSQTVKVINAIILKYGSPQAVSIELAREMSKNFEERRKAEKQMEENR +KKNEMAKKGNSGTGQTFAERSGYFEIPFMAXSTGNMPLYRXKDTVRRTVSAGIXYXPHSS +LQYHFXXQLPEQGACYFTGKPXERKPHPIXVFWSGXGPLECLXSKSXSFYQGLXEASQFV +KTGIYKRRPQGIQRAXFKXYKVYYTRDLXYDPSEFRDGAFESGRQEETGLCCQWFHNSLF +KKKMGTDAKRPFYRHSSCNGCCSSSLLYRWYDSKNFQKYTVSXGLIQRTESPGLXDCGCG +DRRNHFFRRPFKRRVGRALRSTGTAAMGAFXRRVRSPYGKXSEEXSGHTSGYVPVVPLSG +RCVXQYPANLCVKDAKSQGDRCSTCRYNTKSGDITKTVERYLRMVAMYYHEPILKIXNWI +RMERLKITTIRTVTDYYMKHXGHDWQNMMVMEKRHLPKSFISQKQMVHRVLLXKKXKPIK +KMSLGVEINKDEAGVGRGIAENANGGMIRVDVFRENGKYYFVPIYIADALKKRLPNKAAM +QNKPYSEWKEMKDENFLFSLYSRDLIGFKNQKGKKVHCTDGTEIVLTNEIVYYIGANIRT +ASISCKAHDNQYEFGSFGIQSLQELKKYQVDVLGNVTEVRQEKRRGFQXMGYRNIKIETS +QQLNIKNSQLLIGSSGEVQIPLEDINSILIESQAVTLSSYLLQKMAEMGIAVYVCDEKHL +PNAVLLPMVRHSRHFKLLKCQMNLGKPKQKGFGSRLXSGKLKINQPVLDSXIXRVPKSFX +KCQNRYNPVIKQMLKQRQQLFIFAGYMVWDFPEVMIISLTQRXITDMQLCVEXLRVLSFV +MDXSLLWDYFIVANXIVITXQMILLRYFVRLXICMFPVVLTYQRLIGHXRLKXKENYMEX +XIMTCWXEERSIYXVIALTKQLQVIAVHCRETVKNWNFRFXWSYRYIVMSKFMRMIVFFD +LPVGTARERKAATKFRNFLIKDGYHMVQYSVYSRICNGNDAVEMHETRLKQHLPSRGSIR +LLTITEKQYESIHILLGEAVFDDTSEATELINIF diff --git a/scripts/tests/data/long_sequence.fasta b/scripts/tests/data/long_sequence.fasta new file mode 100644 index 0000000000000000000000000000000000000000..de53b38adc1d3ed550a7fc233f97c8a49bc1d54d --- /dev/null +++ b/scripts/tests/data/long_sequence.fasta @@ -0,0 +1,19 @@ +>WP_117970347_1 +MESNNKIFTETIGTSSIAKTMRNSLVPTESTKRNIEKNGIIIDDQLRAEKRQQLKEIMDEYYRTYIDNKL +SNVALTRTIDWKELFQAIEDNYKQNTTKTKNELEKKQKEKRTEIYKILSDDEKFKQLFNAKLLTNVLPEF +IKNQNIDNEEKQEKISTVELFQRFTSSFTDFFKNRKNVFSKDEISTSICYRVVQENAWIFYQNLLAFEEI +KKTAEQEIEKIEAENRDSISDYSLKEIFDFDFYGLLLNQGGIRFYNDVCGKINYHMNLYGQKHNIKSNKF +KMKRMHKQILSIDESTFEVPTMFENDKEVYQVLNEFLSDLASKKILERVEKIGENVSEYEINKIYIQSKN +FEKFSSFMCGNWQIINDSLKTYYNEKIKSKGKAKEEKVKKAIKAIEYKSLADINQLVERYNNDELNRKAE +EYISAINEKIKDLDVNEIEYDEKINLIENETKSEEIKSKLDSIMEIMHWTKMFIIEEEIEKDVNFYNEIE +EIYDELQPLVTIYNRIRNYVTQKPYSEEKIKLNFGIPTLANGWSKTKEYDNNAIIMIRDGKYYLGIFNAK +NKPDKKIMEGHQSEENGDYKKMIYRLLPGPNKMLPKVFMSKTGIAEYKPSQYILECYEQNKHIKSDKNFD +IKFCRDLIDFFKTSINRHPEWSKFNFKFSETSEYEDISTFYREVEKQGYKIEWTYISEKEIKELDENGQL +YLFQIYNKDFSEKSKGKENLHTMYLKNLFSEENLKNIVLKLNGEAEVFFRKSSIKKPIIHKKGSVLVNKT +YNENGERKSIPEEQYTEIYKYLNSIGTNELSEKSKKLMEEGKVEYYKANYDIVKDYRYSVDKFFIHLPMT +INFKAAGFSPINNIALKNIALKDDMHIIGIDRGERNLIYVSVIDTKGNIVEQRNFNIVNGIDYKEKLKQK +ELDRDNARKNWKEIGKIKDLKEGYLSLVVHEIAKLVVKYNAIITMEDLNQGFKRGRFKVERQVYQKFETM +LINKLNYLVDKDLAVDQEGGLLRGYQLTYIPESLKVLGRQCGYIFYVPAAYTSKIDPTTGFVAIFNYKGM +TDKDFVTSFDSIKYDDERGLFAFEFDYENFVTHKVEMARNKWTVYTYGERIKRKFKNGSWDTAEKVDLTY +QMRSILEKYEIEYNKGQDILEQIEELDEKAQNGICKEIKYLVKDIVQMRNSLPDNAAEDYDAIISPVINN +NGEFFDSTRGDEDKPLDADANGAYCIALKGLYEVMQIKKNWNEETEFPRKELKIRHQDWFDFIQNKRYL diff --git a/scripts/tests/data/long_sequence_2.fasta b/scripts/tests/data/long_sequence_2.fasta new file mode 100644 index 0000000000000000000000000000000000000000..6627487ce4a0f84f52bb77a4feab46414c491c02 --- /dev/null +++ b/scripts/tests/data/long_sequence_2.fasta @@ -0,0 +1,62 @@ +>MGYP003385177403__Cas9-C3M5__1.6e-51 FL=0 (part) +MRNEATLWLAKYMEDHGISTEKISRELHIPKKKLIPGTKESLDADEFLALCSYLQINPQT +IPIGQGEKXLHIYAYNKDIKTGEDLPCTNTVCKTSICPSCGQRADAGSQIYWCKSCKTLY +MRKSALSVIRKERSWQRICVRSFRKRGCCXSSFWGHPMHFXRSLCGMVQEITIMXMGREF +LFPXRIXNNXILIKCGKNIRNIRKKIQTGILKNRWRYSYRQTESVMRHWWKRQMSISAEW +QQIITLWKCLFRSAVEKTLPLFLIWSCGHSEIRKCSTFLVIRHWNFHLPMNMXNVLSRSI +RRHQSLPLATKRRILRNSVVXSVSSRVMRWCCTVFKTGSIQKTIKSLFRNKKEILTFYGI +RRSESASRSKYDRDSDSPKITKQRIISPIIDWMDFDIWLYLLTTGIDFNRAYRLGYARVG +CWCCPNNSGWSEFLSKIHMKEQSTHFREMLLEFAREIGKEDAEVYVDEGYWKARQGGNGV +AYAQKSVIAFEPCATQENTYNYELQKPIETELYELFRPFGYLNYELGNERLGEVYILGKN +GVPQLKLQGRIGTKKLKVTLLGSEDYGRXDKVSDYQIPDVYGMSCMXERMQAXCDFHKRR +RRWEHPLSDFGXKMCKVQGMCQSFFCRMLYEKGTGNXKEINRXRNHDKDKIPFXRAXKLY +FAGGLAQXRHEGSEKXSVCFFAELWSRCARGGSEHGKGDPLLDANLRVIRRAGKTGCIPF +KARRAIWEYDKYLEETFSLWIIHCNIVKKSXAGNRVESFLMNMMKWNLPKTNWXRSXXTK +QKIWTDLKNFRKNPXKQTERHCFVCMXESRSGEAIRRKRTSARLASLNWXNKRAVFTGKA +SRRCICFRQRSSGIFXKTARPKKELSVSMIFXQERIRRAGSXIXRGPVWXKNLKSXNKKI +IYKXTGQQAWTWYIXTSLXQEKKLLKNTSDHREEGEKRQMKNFVNVDTRFQKSINLTLDT +GDMALVNRYIPTRSSVSILKQYLTNIVRGQGEHATILIGPYGKGKSHLLLVLLALLCKSK +DETAEIQKKIIEADNSTKLLFMELAEVGRPFLPVIVSSFQGDLNESFIFALQEALKRPVS +EICRPSEYSEAVRTMESWKEFYPDTYQRFEKMLEERGCTASLFKERLKNKKKLHSXNSKN +FTRYXHPEVFSIQWCKKKHFGSMKRSTVCFVQSTDMPAFISSLMNSVSIXKDMKQKNFCK +GYEDFAGYVRIGRQPERRADVSDLCGAXEYPXVCQKYXFGNDPGIPWGRRAAERDPVCSF +FPEXLXTDRACTAXERGILYLGNTGKGRSVLSACLFFTSFEKEDFNQIVAKGCYPLTPVC +AYALLNISEKIGQNERTVFTFLAGNEPGSLNRIMEGRNRENLIGVEYVYDYFKNLFRETV +DETYIHNEWLKAEYALTKADTEIEKRIIKAMAIIRMIHPWKSXRYXISRSVWRXISKKEE +CDKAMRELMKKSDLFSAQVLVPMHLRTISVLISRRRLKKNPAAASXHQYLXSVKRDFRTD +LCRSKTVQSGPCNDKIFPIXIHXIXRLPFHWQCKGLFRAPFFRWIYLSDRDSRQGRKGKS +AASSAGIRGXTYYRVTAXRRIFIGMGAFCVLRQSEALQRMSILLKRIKRSVRNXTSMKRT +SAMRXMRDXREILCRKTAAVMYFIQAEKSRISGPEWNLTGIXARSVKTTIRXHRGSTMSF +XISRMCRDSTXRQEMMWXEPFXMEKIXRNMSRAAVLRQWCIVRHFFGQDLPEKISRXTRL +SKDHGGDRRLFCESKWKAGIFSDALXTLAGQRLWGAKRCASAVSCVEILSARRHAGAVPW +KXGTADHGRSAEQYQPVSGKLXSLYRKERYGKRALFTGNGGYLLXCADGKDHTFQPTFRH +YGKYAEMVPFPAAVYAGQXTLSAGNALCGQKFPKVIKADGVKSERIFVXAASECHGFFXK +SYDRALSQGNEAEHGYAFXKCDRRYGKGDQKNIWCKKKATVSRHVCRTGMADSKTVPNAM +YXTKRSRVLWNMWENXIPTTSRRLLPYYPNVWKISILRTGMTDYRKNFCVTLQRYAKRQR +RQRKMPVXRTDKKRFSXRRRMERRSTNIMMRMXKTAPVNFXKIXSKRHWITLETAXRQIR +KWLFXRRHXKNYYSRGNIMEEYIYLDNAATTFPKPEAVYRALDRANRNAAVNAGRGSYAL +AEQAKQLIEDSRGLLLTLTKAKPAAEVVFTPSATFACNQIFGGLPWKREDIVYVSPYEHN +AVMRTLHFLQQRYGFAIEELSVDAGTLELDLEKNPLSVYPKPSNGSCHDTYQQCHRVYSS +GXRSGSFDRYGKRRRXSWMVRRHWDXSLSVWNKAALITIYLRVIRHFTDRLESAVISHNL +QEMQKNXDLXSQEEPEAIHXIXRCRSFFPTVMNREVRTYRRSRDXKRRXKHLEVIMKKCV +RPXRSIIKKNGNXRNCXRQSFKKYRESILIFHRIRKKGAASVPLRSKDILRMMXECCSMK +IIISQSGAAITVHRXSINTXRINHTGGRCVWASDSLIQKKTSGNSYTQWKKSQGVTKVND +DLKRVNLRDIVDRISENTIVLPDFQRGFTWKENNRQKALLASVLTKLPIGTVLFLNVKTE +DYGYKKIGKNEKKHXQFRGKAGSKGAVRRSAEDHGLNGIPFHETSKRKYXRSRITDTGAA +VFLESSKFSKCDRXQKEDLFGGTILSFPNSFRGNYPEISSEEMKERITFVHDRKKAFLYE +KAETKDTREIREYCRNIDNSEDGDAYLLPLFYLLDACEPGSSGAVILEDVVKEIGAEYEK +SIGSWLQAEEYPIEEKEQYLEKFGLEDAQREAVLEEIKTGTLFYQKKKEKIIFLTVXRNG +KCSGECTFVNIXENVLRISGFMRLQFPSMIKSAPLISMKTXTWEENPXVSLIRSXQRHPD +IRRRREISLHRSXMTXSVTTGRNIPHLXKNAQRVRRTVIKITLQTATNHIRQWDGSAAGI +NLKKSFLLPTXRHXXTFWVSLTIFQKEIRDLVCVMLRRSKTXTXKSQKRISAADSIRKNI +RLCGGGMSGLRPRSLIFTDAVWNPKAWXNTLQSDVGYLRYGIFRXSMVXGQXSLRLYGSL +VLECDFIGRVQDRAEPGIYPESSECFIXDPKHQRIXXEIHKSPLQXRTDRXKICRPXHCF +NEKSIRISGGGNWEYHLSILFIRDIFGYFKTASGEKRLSATNTECIEQFREAAKTSHYAD +RKSXRKVXGMPIKRQKAGEKTTAVRIIHRXISCXYRKKRMGXSKIVHXRNTLNFAIRPHX +IMXTSKTIHLPICRSGNRIPDRXRSIAAFSRKKIXRFXEPYYVEVSEFIELSRHLLRRGR +KLIWKRIGTAXCRHXSLKFCIWKRRICEARQRQISACQRNCRKSSRNMQEDNGIGGQVYE +IXKYYHGKFHAVXGQESYRIQLXXCKKCNSSIRRQYGWKNDDSAGIPLGTVWCVNGKRDK +KCRRFSAFKYGYLRNDGCQQSCXGKSRDCSSXRGKTLYHHKRDNLYQSISKVREPGVSEE +MCDADYRVRGHGKLCRGRQQRDRDIDQXTVSKELVPLFFVXWRTVEXCQCRRCPGKYQRI +GTYFNGIICISRGEEPFKRYGKQFRYQKFRSEIEDRVQSMIIXKQNEKIRAXYRKAPGXD + diff --git a/scripts/tests/data/multiple_sequences.fasta b/scripts/tests/data/multiple_sequences.fasta new file mode 100644 index 0000000000000000000000000000000000000000..9336f8d3d71d7154b6ff10dad596462853898746 --- /dev/null +++ b/scripts/tests/data/multiple_sequences.fasta @@ -0,0 +1,9 @@ +>AaCas12b +MAVKSMKVKLRLDNMPEIRAGLWKLHTEVNAGVRYYTEWLSLLRQENLYRRSPNGDGEQECYKTAEECKAELLERLRARQVENGHCGPAGSDDELLQLARQLYELLVPQAIGAKGDAQQIARKFLSPLADKDAVGGLGIAKAGNKPRWVRMREAGEPGWEEEKAKAEARKSTDRTADVLRALADFGLKPLMRVYTDSDMSSVQWKPLRKGQAVRTWDRDMFQQAIERMMSWESWNQRVGEAYAKLVEQKSRFEQKNFVGQEHLVQLVNQLQQDMKEASHGLESKEQTAHYLTGRALRGSDKVFEKWEKLDPDAPFDLYDTEIKNVQRRNTRRFGSHDLFAKLAEPKYQALWREDASFLTRYAVYNSIVRKLNHAKMFATFTLPDATAHPIWTRFDKLGGNLHQYTFLFNEFGEGRHAIRFQKLLTVEDGVAKEVDDVTVPISMSAQLDDLLPRDPHELVALYFQDYGAEQHLAGEFGGAKIQYRRDQLNHLHARRGARDVYLNLSVRVQSQSEARGERRPPYAAVFRLVGDNHRAFVHFDKLSDYLAEHPDDGKLGSEGLLSGLRVMSVDLGLRTSASISVFRVARKDELKPNSEGRVPFCFPIEGNENLVAVHERSQLLKLPGETESKDLRAIREERQRTLRQLRTQLAYLRLLVRCGSEDVGRRERSWAKLIEQPMDANQMTPDWREAFEDELQKLKSLYGICGDREWTEAVYESVRRVWRHMGKQVRDWRKDVRSGERPKIRGYQKDVVGGNSIEQIEYLERQYKFLKSWSFFGKVSGQVIRAEKGSRFAITLREHIDHAKEDRLKKLADRIIMEALGYVYALDDERGKGKWVAKYPPCQLILLEELSEYQFNNDRPPSENNQLMQWSHRGVFQELLNQAQVHDLLVGTMYAAFSSRFDARTGAPGIRCRRVPARCAREQNPEPFPWWLNKFVAEHKLDGCPLRADDLIPTGEGEFFVSPFSAEEGDFHQIHADLNAAQNLQRRLWSDFDISQIRLRCDWGEVDGEPVLIPRTTGKRTADSYGNKVFYTKTGVTYYERERGKKRRKVFAQEELSEEEAELLVEADEAREKSVVLMRDPSGIINRGDWTRQKEFWSMVNQRIEGYLVKQIRSRVRLQESACENTGDI + +>WP_206918966_1 +MTVKSIKVKLRLDNMPEIRAGLWKLHTEVNAGVRYYTEWLSLLRQENLYRRSPNGDGEQECYKTAEECKAELLERLRARQVENGHRGPAGSDDELLQLARQLYELLVPQAIGAKGDAQQIARKFLSPLADKDAVGGLGIAKAGNKPRWVRMRDAGEPGWEEEKAKAEARKSTDRTADVLRALADFGLKPLMRVYTDSDMSSVQWKPLRKGQAVRTWDRDMFQQAIERMMSWESWNQRVGEAYAKLVEQKSRFEQKNFVGQEHLVQLVNQLQQDMKEASHGLESKEQTAHYLTGRALRGSDKVFEKWEKLDPDAPFDLYDTEIKNVQRRNMRRFGSHDLFAKLAEPKYQALWREDASFLTRYAAYNSILRKLNHAKMFATFTLPDATAHPIWTRFDKLGGNLHQYTFLFNEFGEGRHAIRFQKLLTIEHGVAKEVDDVTVPISMSAQLDDLLPGESNEPTELSFRDHGTDQHFTGEFGGAKIQYRRDQLDHVHRRRGARDVYLNLSVRVQSQSEARGERRPPYAAVFRLVGDTHRAFAHFDKLSNYLAEHPDDGKLGSEGLLSGLRVMSVDLGLRTSASISVFRVARKDELKPNSEGRVPFFFPIKGNDNLVAVHERSQLLKLPGETESKDLRAIREERQRILRQLRTQLAYLRLLVRCGSEDVGRRERSWAKLIEQSVDAANHMTPDWREAFEGELQKLKSLYGICGDREWTEAVYESVRRVWRHMGKQVRDWRKDVRSGERPKIRGYQKDVVGGNSIEQIEYLERQYKFLKSWSFFGKVSGQVIRAEKGSRFATTLREHIDHAKEDRLKKLADRIIMEALGYVYALDAERGKGTWVAKYPPCQLILLEELSEYRFNNDRPPSENNQLMQWSHRGVFQELLNQAQVHDLLVGTMYAAFSSRFDARTGAPGIRCRRVPARCAREQNPEPFPWWLNKFVAEHKLDGCPLRADDLIPTGEGEFFVSPFSAEEGDFHQIHADLNAAQNLQRRLWSDFDISQIRLRCDWGEVDGEPVLIPRLTGKRTADSYGNKVFYTNTGVTYYERERGKKRRKAFAQEELSEEEAELLVEADEAREKSVVLMRDPSGIINRGDWTRQKEFWSMVNQRIEGYLVKQIRSRVRLPESACENTGDI + +>WP_206922773_1 +MTVKSIKVKLRLDNMPEIRAGLWKLHTEVNAGVRYYTEWLSLLRQENLYRRSPNGDGEQECYKTAEECKVELLERLRARQVENGHRDPAGSDDELLQLARQLYELLVPQAIGAKGDAQQIARKFLSPLADKDAVGGLGIAKAGNKPRWVRMRDAGEPGWEEEKAKAEARKSTDRTADVLRALADFGLKPLMRVYTDSDMSSVQWKPLRKGQAVRTWDRDMFQQAIERMMSWESWNQRVGEAYAKLVEQKSRFEQKNFVGQEHLVQLVNQLQQDMKEASHGLESKEQTAHYLTGRALRGSDKVFEKWEKLDPDAPFDLYDTEIKNVQRRNTRRFGSHDLFAKLAEPKYQALWREDASFLTRYAAYNSILRKLNHAKMFATFTLPDATAHPIWTRFDKLGGNLHQYTFLFNEFGEGRHAIRFQKLLTIEHGVAKEVDDVTVPISMSAQLDDLLPGESNEPTELSFRDHGTDQHFTGEFGGAKIQYRRDQLDHVHRRRGARDVYLNLSVRVQSQSEARGERRPPYAAVFRLVGDTHRAFAHFDKLSNYLAEHPDDGKLGSEGLLSGLRVMSVDLGLRTSASISVFRVARKDELKPNSEGRVPFFFPIKGNDNLVAVHERSQLLKLPGETESKDLRAIREERQRILRQLRTQLAYLRLLVRCGSEDVGRRERSWAKLIEQSVDAANHMTPDWREAFEGELQKLKSLYGICGDREWTEAVYESVRRVWRHMGKQVRDWRKDVRSGERPKIRGYQKDVVGGNSIEQIEYLERQYKFLKSWSFFGKVSGQVIRAEKGSRFATTLREHIDHAKEDRLKKLADRIIMEALGYVYALDAERGKGTWVAKYPPCQLILLEELSEYRFNNDRPPSENNQLMQWSHRGVFQELLNQAQVHDLLVGTMYAAFSSRFDARTGAPGIRCRRVPARCAREQNPEPFPWWLNKFVAEHKLDGCPLRADDLIPTGEGEFFVSPFSAEEGDFHQIHADLNAAQNLQRRLWSDFDISQIRLRCDWGEVDGEPVLIPRLTGKRTADSYGNKVFYTNTGVTYYERERGKKRRKAFAQEELSEEEAELLVEADEAREKSVVLMRDPSGIINRGDWTRQKEFWSMVNQRIEGYLVKQIRSRVCLPESACENTGDI + diff --git a/scripts/tests/data/multiple_short_sequences.fasta b/scripts/tests/data/multiple_short_sequences.fasta new file mode 100644 index 0000000000000000000000000000000000000000..f4fe96a3c285472e831e9fba7ebdba46888a390e --- /dev/null +++ b/scripts/tests/data/multiple_short_sequences.fasta @@ -0,0 +1,9 @@ +>short_seq_1 +MAVKSMKVKLRLDNMPEIR + +>short_seq_2 +MTVKSIKVKLRLDNMPEIRAGLWKLHTEVNAGVRYYTEWLSLLRQEN + +>short_seq_3 +MTVKSIKVKLRLDNMPEIRAGLWKLHTEVNAGVRYYTEWLSLLRQENLYRRSPNGDGEQECYKTAEECKVELLERLRARQVENGHRD + diff --git a/scripts/tests/data/replaced_symbol_sequence.fasta b/scripts/tests/data/replaced_symbol_sequence.fasta new file mode 100644 index 0000000000000000000000000000000000000000..cb70f805262f91a99728cb4ef93dd4dc22e6287c --- /dev/null +++ b/scripts/tests/data/replaced_symbol_sequence.fasta @@ -0,0 +1,3 @@ +>artificial_sequence +UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU +OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO diff --git a/scripts/tests/outputs/mean_5d817ae8188e00eca8913c80312e2669d6551777fbed0d1764e1c09386638c0a.pt b/scripts/tests/outputs/mean_5d817ae8188e00eca8913c80312e2669d6551777fbed0d1764e1c09386638c0a.pt new file mode 100644 index 0000000000000000000000000000000000000000..40b7ea56cc42096e3157b795c086e8e74e8367ea --- /dev/null +++ b/scripts/tests/outputs/mean_5d817ae8188e00eca8913c80312e2669d6551777fbed0d1764e1c09386638c0a.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f701549f9f8945f3a1d7f3d269fd985c9d7f14e0a66ebcdb2c7774fb7114769f +size 7058 diff --git a/scripts/tests/outputs/mean_adc7fcd839ba2802998088a0c7b2310d3abdef0229cc020c55fcb82a492c2d8d.pt b/scripts/tests/outputs/mean_adc7fcd839ba2802998088a0c7b2310d3abdef0229cc020c55fcb82a492c2d8d.pt new file mode 100644 index 0000000000000000000000000000000000000000..3ef8f3c54c3855373fc6727c24b5f070f0901a1f --- /dev/null +++ b/scripts/tests/outputs/mean_adc7fcd839ba2802998088a0c7b2310d3abdef0229cc020c55fcb82a492c2d8d.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f8ace46e292c8c1b9f5de6ba71f42e3489104a477421dfd1c5d60ea1990dd09f +size 7058 diff --git a/scripts/tests/outputs/mean_b6f8b4d2f6602ee040278b1d64ab7cf588baa33d74a126030e252fd91ac00601.pt b/scripts/tests/outputs/mean_b6f8b4d2f6602ee040278b1d64ab7cf588baa33d74a126030e252fd91ac00601.pt new file mode 100644 index 0000000000000000000000000000000000000000..3bbfc2d59fceb48c46baafdb0e3a4340d733f3fd --- /dev/null +++ b/scripts/tests/outputs/mean_b6f8b4d2f6602ee040278b1d64ab7cf588baa33d74a126030e252fd91ac00601.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4552bed4e01d1e4d47c0cb8106d6a2390de545ea4e27683c3376d4f18984cb1b +size 7186 diff --git a/scripts/tests/outputs/mean_c425721d82cb786570760210076eaa21403b210aa6566882a41c4ac70df2defd.pt b/scripts/tests/outputs/mean_c425721d82cb786570760210076eaa21403b210aa6566882a41c4ac70df2defd.pt new file mode 100644 index 0000000000000000000000000000000000000000..e0f61016904086e5c86b8cf70e216ea5f31bf1d2 --- /dev/null +++ b/scripts/tests/outputs/mean_c425721d82cb786570760210076eaa21403b210aa6566882a41c4ac70df2defd.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7f90b869cbeaddd6e8e8ba5e73cf5f1b64e9cf4ff9ad673b668d59eb4baa60f +size 7058 diff --git a/scripts/tests/outputs/multiple.tsv b/scripts/tests/outputs/multiple.tsv new file mode 100644 index 0000000000000000000000000000000000000000..b08e5f12c71d250c903a87c6aae28b4bf947da49 --- /dev/null +++ b/scripts/tests/outputs/multiple.tsv @@ -0,0 +1,4 @@ +protein_id position sequence length t40_binary t40_raw t45_binary t45_raw t50_binary t50_raw t55_binary t55_raw t60_binary t60_raw t65_binary t65_raw left_hand_label right_hand_label clash +AaCas12b - MAVKSMKVKLRLDNMPEIRAGLWKLHTEVNAGVRYYTEWLSLLRQENLYRRSPNGDGEQECYKTAEECKAELLERLRARQVENGHCGPAGSDDELLQLARQLYELLVPQAIGAKGDAQQIARKFLSPLADKDAVGGLGIAKAGNKPRWVRMREAGEPGWEEEKAKAEARKSTDRTADVLRALADFGLKPLMRVYTDSDMSSVQWKPLRKGQAVRTWDRDMFQQAIERMMSWESWNQRVGEAYAKLVEQKSRFEQKNFVGQEHLVQLVNQLQQDMKEASHGLESKEQTAHYLTGRALRGSDKVFEKWEKLDPDAPFDLYDTEIKNVQRRNTRRFGSHDLFAKLAEPKYQALWREDASFLTRYAVYNSIVRKLNHAKMFATFTLPDATAHPIWTRFDKLGGNLHQYTFLFNEFGEGRHAIRFQKLLTVEDGVAKEVDDVTVPISMSAQLDDLLPRDPHELVALYFQDYGAEQHLAGEFGGAKIQYRRDQLNHLHARRGARDVYLNLSVRVQSQSEARGERRPPYAAVFRLVGDNHRAFVHFDKLSDYLAEHPDDGKLGSEGLLSGLRVMSVDLGLRTSASISVFRVARKDELKPNSEGRVPFCFPIEGNENLVAVHERSQLLKLPGETESKDLRAIREERQRTLRQLRTQLAYLRLLVRCGSEDVGRRERSWAKLIEQPMDANQMTPDWREAFEDELQKLKSLYGICGDREWTEAVYESVRRVWRHMGKQVRDWRKDVRSGERPKIRGYQKDVVGGNSIEQIEYLERQYKFLKSWSFFGKVSGQVIRAEKGSRFAITLREHIDHAKEDRLKKLADRIIMEALGYVYALDDERGKGKWVAKYPPCQLILLEELSEYQFNNDRPPSENNQLMQWSHRGVFQELLNQAQVHDLLVGTMYAAFSSRFDARTGAPGIRCRRVPARCAREQNPEPFPWWLNKFVAEHKLDGCPLRADDLIPTGEGEFFVSPFSAEEGDFHQIHADLNAAQNLQRRLWSDFDISQIRLRCDWGEVDGEPVLIPRTTGKRTADSYGNKVFYTKTGVTYYERERGKKRRKVFAQEELSEEEAELLVEADEAREKSVVLMRDPSGIINRGDWTRQKEFWSMVNQRIEGYLVKQIRSRVRLQESACENTGDI 1129 1 8.508e-01 1 8.293e-01 0 4.436e-01 0 3.482e-01 0 6.153e-02 0 1.086e-03 [45-50) [45-50) - +WP_206918966_1 - MTVKSIKVKLRLDNMPEIRAGLWKLHTEVNAGVRYYTEWLSLLRQENLYRRSPNGDGEQECYKTAEECKAELLERLRARQVENGHRGPAGSDDELLQLARQLYELLVPQAIGAKGDAQQIARKFLSPLADKDAVGGLGIAKAGNKPRWVRMRDAGEPGWEEEKAKAEARKSTDRTADVLRALADFGLKPLMRVYTDSDMSSVQWKPLRKGQAVRTWDRDMFQQAIERMMSWESWNQRVGEAYAKLVEQKSRFEQKNFVGQEHLVQLVNQLQQDMKEASHGLESKEQTAHYLTGRALRGSDKVFEKWEKLDPDAPFDLYDTEIKNVQRRNMRRFGSHDLFAKLAEPKYQALWREDASFLTRYAAYNSILRKLNHAKMFATFTLPDATAHPIWTRFDKLGGNLHQYTFLFNEFGEGRHAIRFQKLLTIEHGVAKEVDDVTVPISMSAQLDDLLPGESNEPTELSFRDHGTDQHFTGEFGGAKIQYRRDQLDHVHRRRGARDVYLNLSVRVQSQSEARGERRPPYAAVFRLVGDTHRAFAHFDKLSNYLAEHPDDGKLGSEGLLSGLRVMSVDLGLRTSASISVFRVARKDELKPNSEGRVPFFFPIKGNDNLVAVHERSQLLKLPGETESKDLRAIREERQRILRQLRTQLAYLRLLVRCGSEDVGRRERSWAKLIEQSVDAANHMTPDWREAFEGELQKLKSLYGICGDREWTEAVYESVRRVWRHMGKQVRDWRKDVRSGERPKIRGYQKDVVGGNSIEQIEYLERQYKFLKSWSFFGKVSGQVIRAEKGSRFATTLREHIDHAKEDRLKKLADRIIMEALGYVYALDAERGKGTWVAKYPPCQLILLEELSEYRFNNDRPPSENNQLMQWSHRGVFQELLNQAQVHDLLVGTMYAAFSSRFDARTGAPGIRCRRVPARCAREQNPEPFPWWLNKFVAEHKLDGCPLRADDLIPTGEGEFFVSPFSAEEGDFHQIHADLNAAQNLQRRLWSDFDISQIRLRCDWGEVDGEPVLIPRLTGKRTADSYGNKVFYTNTGVTYYERERGKKRRKAFAQEELSEEEAELLVEADEAREKSVVLMRDPSGIINRGDWTRQKEFWSMVNQRIEGYLVKQIRSRVRLPESACENTGDI 1130 1 8.075e-01 1 7.639e-01 0 3.578e-01 0 2.891e-01 0 4.220e-02 0 7.351e-04 [45-50) [45-50) - +WP_206922773_1 - MTVKSIKVKLRLDNMPEIRAGLWKLHTEVNAGVRYYTEWLSLLRQENLYRRSPNGDGEQECYKTAEECKVELLERLRARQVENGHRDPAGSDDELLQLARQLYELLVPQAIGAKGDAQQIARKFLSPLADKDAVGGLGIAKAGNKPRWVRMRDAGEPGWEEEKAKAEARKSTDRTADVLRALADFGLKPLMRVYTDSDMSSVQWKPLRKGQAVRTWDRDMFQQAIERMMSWESWNQRVGEAYAKLVEQKSRFEQKNFVGQEHLVQLVNQLQQDMKEASHGLESKEQTAHYLTGRALRGSDKVFEKWEKLDPDAPFDLYDTEIKNVQRRNTRRFGSHDLFAKLAEPKYQALWREDASFLTRYAAYNSILRKLNHAKMFATFTLPDATAHPIWTRFDKLGGNLHQYTFLFNEFGEGRHAIRFQKLLTIEHGVAKEVDDVTVPISMSAQLDDLLPGESNEPTELSFRDHGTDQHFTGEFGGAKIQYRRDQLDHVHRRRGARDVYLNLSVRVQSQSEARGERRPPYAAVFRLVGDTHRAFAHFDKLSNYLAEHPDDGKLGSEGLLSGLRVMSVDLGLRTSASISVFRVARKDELKPNSEGRVPFFFPIKGNDNLVAVHERSQLLKLPGETESKDLRAIREERQRILRQLRTQLAYLRLLVRCGSEDVGRRERSWAKLIEQSVDAANHMTPDWREAFEGELQKLKSLYGICGDREWTEAVYESVRRVWRHMGKQVRDWRKDVRSGERPKIRGYQKDVVGGNSIEQIEYLERQYKFLKSWSFFGKVSGQVIRAEKGSRFATTLREHIDHAKEDRLKKLADRIIMEALGYVYALDAERGKGTWVAKYPPCQLILLEELSEYRFNNDRPPSENNQLMQWSHRGVFQELLNQAQVHDLLVGTMYAAFSSRFDARTGAPGIRCRRVPARCAREQNPEPFPWWLNKFVAEHKLDGCPLRADDLIPTGEGEFFVSPFSAEEGDFHQIHADLNAAQNLQRRLWSDFDISQIRLRCDWGEVDGEPVLIPRLTGKRTADSYGNKVFYTNTGVTYYERERGKKRRKAFAQEELSEEEAELLVEADEAREKSVVLMRDPSGIINRGDWTRQKEFWSMVNQRIEGYLVKQIRSRVCLPESACENTGDI 1130 1 7.686e-01 1 7.065e-01 0 2.926e-01 0 2.502e-01 0 3.175e-02 0 6.099e-04 [45-50) [45-50) - diff --git a/scripts/tests/outputs/per_res_b6f8b4d2f6602ee040278b1d64ab7cf588baa33d74a126030e252fd91ac00601.pt b/scripts/tests/outputs/per_res_b6f8b4d2f6602ee040278b1d64ab7cf588baa33d74a126030e252fd91ac00601.pt new file mode 100644 index 0000000000000000000000000000000000000000..a500382bfffd936c87b0f5259cc18e8fa882d95a --- /dev/null +++ b/scripts/tests/outputs/per_res_b6f8b4d2f6602ee040278b1d64ab7cf588baa33d74a126030e252fd91ac00601.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e635a6f2cb9002811f3ce70e834bf87ce4461715336fcf3415f98e5745aa904 +size 5160033 diff --git a/scripts/tests/outputs/temstapro_001.out b/scripts/tests/outputs/temstapro_001.out new file mode 100644 index 0000000000000000000000000000000000000000..a5843d920714373c20a7c9b980604653af4a1646 --- /dev/null +++ b/scripts/tests/outputs/temstapro_001.out @@ -0,0 +1,12 @@ +2000-01-01: beginning to load the model +2000-01-01: finished loading the model +2000-01-01: beginning to generate embeddings +Portion 1. +1/1: sequences with generated mean embeddings +1/1: sequences with generated per-residue embeddings +0:00:00.0001: time to generate embeddings +0:00:00.0001: time to generate embeddings per protein +2000-01-01: beginning to make inferences +2000-01-01: finished making inferences +protein_id position sequence length t40_binary t40_raw t45_binary t45_raw t50_binary t50_raw t55_binary t55_raw t60_binary t60_raw t65_binary t65_raw left_hand_label right_hand_label clash +artificial_sequence - UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO 158 1 9.803e-01 1 6.874e-01 1 6.388e-01 1 7.543e-01 0 3.063e-01 0 1.685e-03 [55-60) [55-60) - diff --git a/scripts/tests/outputs/temstapro_002.out b/scripts/tests/outputs/temstapro_002.out new file mode 100644 index 0000000000000000000000000000000000000000..b6383e56e452f7ee2c3c0049c182ea159763e441 --- /dev/null +++ b/scripts/tests/outputs/temstapro_002.out @@ -0,0 +1,10 @@ +2000-01-01: beginning to load the model +2000-01-01: finished loading the model +2000-01-01: beginning to generate embeddings +Portion 1. +1/1: sequences with generated mean embeddings +0/1: sequences with generated per-residue embeddings +0:00:00.0001: time to generate embeddings +0:00:00.0001: time to generate embeddings per protein +2000-01-01: beginning to make inferences +2000-01-01: finished making inferences diff --git a/scripts/tests/outputs/temstapro_003.out b/scripts/tests/outputs/temstapro_003.out new file mode 100644 index 0000000000000000000000000000000000000000..0876845d3ae48a68eb283beef5ef95d8caad031a --- /dev/null +++ b/scripts/tests/outputs/temstapro_003.out @@ -0,0 +1 @@ +scripts/temstapro: a FASTA file is required. diff --git a/scripts/tests/outputs/temstapro_004.out b/scripts/tests/outputs/temstapro_004.out new file mode 100644 index 0000000000000000000000000000000000000000..b6383e56e452f7ee2c3c0049c182ea159763e441 --- /dev/null +++ b/scripts/tests/outputs/temstapro_004.out @@ -0,0 +1,10 @@ +2000-01-01: beginning to load the model +2000-01-01: finished loading the model +2000-01-01: beginning to generate embeddings +Portion 1. +1/1: sequences with generated mean embeddings +0/1: sequences with generated per-residue embeddings +0:00:00.0001: time to generate embeddings +0:00:00.0001: time to generate embeddings per protein +2000-01-01: beginning to make inferences +2000-01-01: finished making inferences diff --git a/scripts/tests/outputs/temstapro_005.out b/scripts/tests/outputs/temstapro_005.out new file mode 100644 index 0000000000000000000000000000000000000000..5e9bb9a0488055ef523f3fcd91e6f92cba4f5f3e --- /dev/null +++ b/scripts/tests/outputs/temstapro_005.out @@ -0,0 +1,14 @@ +2000-01-01: beginning to load the model +2000-01-01: finished loading the model +2000-01-01: beginning to generate embeddings +Portion 1. +3/3: sequences with generated mean embeddings +0/3: sequences with generated per-residue embeddings +0:00:00.0001: time to generate embeddings +0:00:00.0001: time to generate embeddings per protein +2000-01-01: beginning to make inferences +2000-01-01: finished making inferences +protein_id position sequence length t40_binary t40_raw t45_binary t45_raw t50_binary t50_raw t55_binary t55_raw t60_binary t60_raw t65_binary t65_raw left_hand_label right_hand_label clash +AaCas12b - MAVKSMKVKLRLDNMPEIRAGLWKLHTEVNAGVRYYTEWLSLLRQENLYRRSPNGDGEQECYKTAEECKAELLERLRARQVENGHCGPAGSDDELLQLARQLYELLVPQAIGAKGDAQQIARKFLSPLADKDAVGGLGIAKAGNKPRWVRMREAGEPGWEEEKAKAEARKSTDRTADVLRALADFGLKPLMRVYTDSDMSSVQWKPLRKGQAVRTWDRDMFQQAIERMMSWESWNQRVGEAYAKLVEQKSRFEQKNFVGQEHLVQLVNQLQQDMKEASHGLESKEQTAHYLTGRALRGSDKVFEKWEKLDPDAPFDLYDTEIKNVQRRNTRRFGSHDLFAKLAEPKYQALWREDASFLTRYAVYNSIVRKLNHAKMFATFTLPDATAHPIWTRFDKLGGNLHQYTFLFNEFGEGRHAIRFQKLLTVEDGVAKEVDDVTVPISMSAQLDDLLPRDPHELVALYFQDYGAEQHLAGEFGGAKIQYRRDQLNHLHARRGARDVYLNLSVRVQSQSEARGERRPPYAAVFRLVGDNHRAFVHFDKLSDYLAEHPDDGKLGSEGLLSGLRVMSVDLGLRTSASISVFRVARKDELKPNSEGRVPFCFPIEGNENLVAVHERSQLLKLPGETESKDLRAIREERQRTLRQLRTQLAYLRLLVRCGSEDVGRRERSWAKLIEQPMDANQMTPDWREAFEDELQKLKSLYGICGDREWTEAVYESVRRVWRHMGKQVRDWRKDVRSGERPKIRGYQKDVVGGNSIEQIEYLERQYKFLKSWSFFGKVSGQVIRAEKGSRFAITLREHIDHAKEDRLKKLADRIIMEALGYVYALDDERGKGKWVAKYPPCQLILLEELSEYQFNNDRPPSENNQLMQWSHRGVFQELLNQAQVHDLLVGTMYAAFSSRFDARTGAPGIRCRRVPARCAREQNPEPFPWWLNKFVAEHKLDGCPLRADDLIPTGEGEFFVSPFSAEEGDFHQIHADLNAAQNLQRRLWSDFDISQIRLRCDWGEVDGEPVLIPRTTGKRTADSYGNKVFYTKTGVTYYERERGKKRRKVFAQEELSEEEAELLVEADEAREKSVVLMRDPSGIINRGDWTRQKEFWSMVNQRIEGYLVKQIRSRVRLQESACENTGDI 1129 1 8.508e-01 1 8.293e-01 0 4.436e-01 0 3.482e-01 0 6.153e-02 0 1.086e-03 [45-50) [45-50) - +WP_206918966_1 - MTVKSIKVKLRLDNMPEIRAGLWKLHTEVNAGVRYYTEWLSLLRQENLYRRSPNGDGEQECYKTAEECKAELLERLRARQVENGHRGPAGSDDELLQLARQLYELLVPQAIGAKGDAQQIARKFLSPLADKDAVGGLGIAKAGNKPRWVRMRDAGEPGWEEEKAKAEARKSTDRTADVLRALADFGLKPLMRVYTDSDMSSVQWKPLRKGQAVRTWDRDMFQQAIERMMSWESWNQRVGEAYAKLVEQKSRFEQKNFVGQEHLVQLVNQLQQDMKEASHGLESKEQTAHYLTGRALRGSDKVFEKWEKLDPDAPFDLYDTEIKNVQRRNMRRFGSHDLFAKLAEPKYQALWREDASFLTRYAAYNSILRKLNHAKMFATFTLPDATAHPIWTRFDKLGGNLHQYTFLFNEFGEGRHAIRFQKLLTIEHGVAKEVDDVTVPISMSAQLDDLLPGESNEPTELSFRDHGTDQHFTGEFGGAKIQYRRDQLDHVHRRRGARDVYLNLSVRVQSQSEARGERRPPYAAVFRLVGDTHRAFAHFDKLSNYLAEHPDDGKLGSEGLLSGLRVMSVDLGLRTSASISVFRVARKDELKPNSEGRVPFFFPIKGNDNLVAVHERSQLLKLPGETESKDLRAIREERQRILRQLRTQLAYLRLLVRCGSEDVGRRERSWAKLIEQSVDAANHMTPDWREAFEGELQKLKSLYGICGDREWTEAVYESVRRVWRHMGKQVRDWRKDVRSGERPKIRGYQKDVVGGNSIEQIEYLERQYKFLKSWSFFGKVSGQVIRAEKGSRFATTLREHIDHAKEDRLKKLADRIIMEALGYVYALDAERGKGTWVAKYPPCQLILLEELSEYRFNNDRPPSENNQLMQWSHRGVFQELLNQAQVHDLLVGTMYAAFSSRFDARTGAPGIRCRRVPARCAREQNPEPFPWWLNKFVAEHKLDGCPLRADDLIPTGEGEFFVSPFSAEEGDFHQIHADLNAAQNLQRRLWSDFDISQIRLRCDWGEVDGEPVLIPRLTGKRTADSYGNKVFYTNTGVTYYERERGKKRRKAFAQEELSEEEAELLVEADEAREKSVVLMRDPSGIINRGDWTRQKEFWSMVNQRIEGYLVKQIRSRVRLPESACENTGDI 1130 1 8.075e-01 1 7.639e-01 0 3.578e-01 0 2.891e-01 0 4.220e-02 0 7.351e-04 [45-50) [45-50) - +WP_206922773_1 - MTVKSIKVKLRLDNMPEIRAGLWKLHTEVNAGVRYYTEWLSLLRQENLYRRSPNGDGEQECYKTAEECKVELLERLRARQVENGHRDPAGSDDELLQLARQLYELLVPQAIGAKGDAQQIARKFLSPLADKDAVGGLGIAKAGNKPRWVRMRDAGEPGWEEEKAKAEARKSTDRTADVLRALADFGLKPLMRVYTDSDMSSVQWKPLRKGQAVRTWDRDMFQQAIERMMSWESWNQRVGEAYAKLVEQKSRFEQKNFVGQEHLVQLVNQLQQDMKEASHGLESKEQTAHYLTGRALRGSDKVFEKWEKLDPDAPFDLYDTEIKNVQRRNTRRFGSHDLFAKLAEPKYQALWREDASFLTRYAAYNSILRKLNHAKMFATFTLPDATAHPIWTRFDKLGGNLHQYTFLFNEFGEGRHAIRFQKLLTIEHGVAKEVDDVTVPISMSAQLDDLLPGESNEPTELSFRDHGTDQHFTGEFGGAKIQYRRDQLDHVHRRRGARDVYLNLSVRVQSQSEARGERRPPYAAVFRLVGDTHRAFAHFDKLSNYLAEHPDDGKLGSEGLLSGLRVMSVDLGLRTSASISVFRVARKDELKPNSEGRVPFFFPIKGNDNLVAVHERSQLLKLPGETESKDLRAIREERQRILRQLRTQLAYLRLLVRCGSEDVGRRERSWAKLIEQSVDAANHMTPDWREAFEGELQKLKSLYGICGDREWTEAVYESVRRVWRHMGKQVRDWRKDVRSGERPKIRGYQKDVVGGNSIEQIEYLERQYKFLKSWSFFGKVSGQVIRAEKGSRFATTLREHIDHAKEDRLKKLADRIIMEALGYVYALDAERGKGTWVAKYPPCQLILLEELSEYRFNNDRPPSENNQLMQWSHRGVFQELLNQAQVHDLLVGTMYAAFSSRFDARTGAPGIRCRRVPARCAREQNPEPFPWWLNKFVAEHKLDGCPLRADDLIPTGEGEFFVSPFSAEEGDFHQIHADLNAAQNLQRRLWSDFDISQIRLRCDWGEVDGEPVLIPRLTGKRTADSYGNKVFYTNTGVTYYERERGKKRRKAFAQEELSEEEAELLVEADEAREKSVVLMRDPSGIINRGDWTRQKEFWSMVNQRIEGYLVKQIRSRVCLPESACENTGDI 1130 1 7.686e-01 1 7.065e-01 0 2.926e-01 0 2.502e-01 0 3.175e-02 0 6.099e-04 [45-50) [45-50) - diff --git a/scripts/tests/outputs/temstapro_006.out b/scripts/tests/outputs/temstapro_006.out new file mode 100644 index 0000000000000000000000000000000000000000..e83e2f1772de0c0e85a0baaec50a0bf3479b657b --- /dev/null +++ b/scripts/tests/outputs/temstapro_006.out @@ -0,0 +1,10 @@ +2000-01-01: beginning to load the model +2000-01-01: finished loading the model +2000-01-01: beginning to generate embeddings +Portion 1. +1/1: sequences with generated mean embeddings +1/1: sequences with generated per-residue embeddings +0:00:00.0001: time to generate embeddings +0:00:00.0001: time to generate embeddings per protein +2000-01-01: beginning to make inferences +2000-01-01: finished making inferences diff --git a/scripts/tests/outputs/temstapro_007.out b/scripts/tests/outputs/temstapro_007.out new file mode 100644 index 0000000000000000000000000000000000000000..9c010047dfe5c0df5c8c0552d89e9239a5db594e --- /dev/null +++ b/scripts/tests/outputs/temstapro_007.out @@ -0,0 +1,22 @@ +2000-01-01: beginning to load the model +2000-01-01: finished loading the model +2000-01-01: beginning to generate embeddings +Portion 1. +3/3: sequences with generated mean embeddings +0/3: sequences with generated per-residue embeddings +0:00:00.0001: time to generate embeddings +0:00:00.0001: time to generate embeddings per protein +2000-01-01: beginning to make inferences +2000-01-01: finished making inferences +protein_id position sequence length t40_binary t40_raw t45_binary t45_raw t50_binary t50_raw t55_binary t55_raw t60_binary t60_raw t65_binary t65_raw left_hand_label right_hand_label clash +AaCas12b - MAVKSMKVKLRLDNMPEIRAGLWKLHTEVNAGVRYYTEWLSLLRQENLYRRSPNGDGEQECYKTAEECKAELLERLRARQVENGHCGPAGSDDELLQLARQLYELLVPQAIGAKGDAQQIARKFLSPLADKDAVGGLGIAKAGNKPRWVRMREAGEPGWEEEKAKAEARKSTDRTADVLRALADFGLKPLMRVYTDSDMSSVQWKPLRKGQAVRTWDRDMFQQAIERMMSWESWNQRVGEAYAKLVEQKSRFEQKNFVGQEHLVQLVNQLQQDMKEASHGLESKEQTAHYLTGRALRGSDKVFEKWEKLDPDAPFDLYDTEIKNVQRRNTRRFGSHDLFAKLAEPKYQALWREDASFLTRYAVYNSIVRKLNHAKMFATFTLPDATAHPIWTRFDKLGGNLHQYTFLFNEFGEGRHAIRFQKLLTVEDGVAKEVDDVTVPISMSAQLDDLLPRDPHELVALYFQDYGAEQHLAGEFGGAKIQYRRDQLNHLHARRGARDVYLNLSVRVQSQSEARGERRPPYAAVFRLVGDNHRAFVHFDKLSDYLAEHPDDGKLGSEGLLSGLRVMSVDLGLRTSASISVFRVARKDELKPNSEGRVPFCFPIEGNENLVAVHERSQLLKLPGETESKDLRAIREERQRTLRQLRTQLAYLRLLVRCGSEDVGRRERSWAKLIEQPMDANQMTPDWREAFEDELQKLKSLYGICGDREWTEAVYESVRRVWRHMGKQVRDWRKDVRSGERPKIRGYQKDVVGGNSIEQIEYLERQYKFLKSWSFFGKVSGQVIRAEKGSRFAITLREHIDHAKEDRLKKLADRIIMEALGYVYALDDERGKGKWVAKYPPCQLILLEELSEYQFNNDRPPSENNQLMQWSHRGVFQELLNQAQVHDLLVGTMYAAFSSRFDARTGAPGIRCRRVPARCAREQNPEPFPWWLNKFVAEHKLDGCPLRADDLIPTGEGEFFVSPFSAEEGDFHQIHADLNAAQNLQRRLWSDFDISQIRLRCDWGEVDGEPVLIPRTTGKRTADSYGNKVFYTKTGVTYYERERGKKRRKVFAQEELSEEEAELLVEADEAREKSVVLMRDPSGIINRGDWTRQKEFWSMVNQRIEGYLVKQIRSRVRLQESACENTGDI 1129 1 8.508e-01 1 8.293e-01 0 4.436e-01 0 3.482e-01 0 6.153e-02 0 1.086e-03 [45-50) [45-50) - +WP_206918966_1 - MTVKSIKVKLRLDNMPEIRAGLWKLHTEVNAGVRYYTEWLSLLRQENLYRRSPNGDGEQECYKTAEECKAELLERLRARQVENGHRGPAGSDDELLQLARQLYELLVPQAIGAKGDAQQIARKFLSPLADKDAVGGLGIAKAGNKPRWVRMRDAGEPGWEEEKAKAEARKSTDRTADVLRALADFGLKPLMRVYTDSDMSSVQWKPLRKGQAVRTWDRDMFQQAIERMMSWESWNQRVGEAYAKLVEQKSRFEQKNFVGQEHLVQLVNQLQQDMKEASHGLESKEQTAHYLTGRALRGSDKVFEKWEKLDPDAPFDLYDTEIKNVQRRNMRRFGSHDLFAKLAEPKYQALWREDASFLTRYAAYNSILRKLNHAKMFATFTLPDATAHPIWTRFDKLGGNLHQYTFLFNEFGEGRHAIRFQKLLTIEHGVAKEVDDVTVPISMSAQLDDLLPGESNEPTELSFRDHGTDQHFTGEFGGAKIQYRRDQLDHVHRRRGARDVYLNLSVRVQSQSEARGERRPPYAAVFRLVGDTHRAFAHFDKLSNYLAEHPDDGKLGSEGLLSGLRVMSVDLGLRTSASISVFRVARKDELKPNSEGRVPFFFPIKGNDNLVAVHERSQLLKLPGETESKDLRAIREERQRILRQLRTQLAYLRLLVRCGSEDVGRRERSWAKLIEQSVDAANHMTPDWREAFEGELQKLKSLYGICGDREWTEAVYESVRRVWRHMGKQVRDWRKDVRSGERPKIRGYQKDVVGGNSIEQIEYLERQYKFLKSWSFFGKVSGQVIRAEKGSRFATTLREHIDHAKEDRLKKLADRIIMEALGYVYALDAERGKGTWVAKYPPCQLILLEELSEYRFNNDRPPSENNQLMQWSHRGVFQELLNQAQVHDLLVGTMYAAFSSRFDARTGAPGIRCRRVPARCAREQNPEPFPWWLNKFVAEHKLDGCPLRADDLIPTGEGEFFVSPFSAEEGDFHQIHADLNAAQNLQRRLWSDFDISQIRLRCDWGEVDGEPVLIPRLTGKRTADSYGNKVFYTNTGVTYYERERGKKRRKAFAQEELSEEEAELLVEADEAREKSVVLMRDPSGIINRGDWTRQKEFWSMVNQRIEGYLVKQIRSRVRLPESACENTGDI 1130 1 8.075e-01 1 7.639e-01 0 3.578e-01 0 2.891e-01 0 4.220e-02 0 7.351e-04 [45-50) [45-50) - +WP_206922773_1 - MTVKSIKVKLRLDNMPEIRAGLWKLHTEVNAGVRYYTEWLSLLRQENLYRRSPNGDGEQECYKTAEECKVELLERLRARQVENGHRDPAGSDDELLQLARQLYELLVPQAIGAKGDAQQIARKFLSPLADKDAVGGLGIAKAGNKPRWVRMRDAGEPGWEEEKAKAEARKSTDRTADVLRALADFGLKPLMRVYTDSDMSSVQWKPLRKGQAVRTWDRDMFQQAIERMMSWESWNQRVGEAYAKLVEQKSRFEQKNFVGQEHLVQLVNQLQQDMKEASHGLESKEQTAHYLTGRALRGSDKVFEKWEKLDPDAPFDLYDTEIKNVQRRNTRRFGSHDLFAKLAEPKYQALWREDASFLTRYAAYNSILRKLNHAKMFATFTLPDATAHPIWTRFDKLGGNLHQYTFLFNEFGEGRHAIRFQKLLTIEHGVAKEVDDVTVPISMSAQLDDLLPGESNEPTELSFRDHGTDQHFTGEFGGAKIQYRRDQLDHVHRRRGARDVYLNLSVRVQSQSEARGERRPPYAAVFRLVGDTHRAFAHFDKLSNYLAEHPDDGKLGSEGLLSGLRVMSVDLGLRTSASISVFRVARKDELKPNSEGRVPFFFPIKGNDNLVAVHERSQLLKLPGETESKDLRAIREERQRILRQLRTQLAYLRLLVRCGSEDVGRRERSWAKLIEQSVDAANHMTPDWREAFEGELQKLKSLYGICGDREWTEAVYESVRRVWRHMGKQVRDWRKDVRSGERPKIRGYQKDVVGGNSIEQIEYLERQYKFLKSWSFFGKVSGQVIRAEKGSRFATTLREHIDHAKEDRLKKLADRIIMEALGYVYALDAERGKGTWVAKYPPCQLILLEELSEYRFNNDRPPSENNQLMQWSHRGVFQELLNQAQVHDLLVGTMYAAFSSRFDARTGAPGIRCRRVPARCAREQNPEPFPWWLNKFVAEHKLDGCPLRADDLIPTGEGEFFVSPFSAEEGDFHQIHADLNAAQNLQRRLWSDFDISQIRLRCDWGEVDGEPVLIPRLTGKRTADSYGNKVFYTNTGVTYYERERGKKRRKAFAQEELSEEEAELLVEADEAREKSVVLMRDPSGIINRGDWTRQKEFWSMVNQRIEGYLVKQIRSRVCLPESACENTGDI 1130 1 7.686e-01 1 7.065e-01 0 2.926e-01 0 2.502e-01 0 3.175e-02 0 6.099e-04 [45-50) [45-50) - +2000-01-01: beginning to load the model +2000-01-01: finished loading the model +2000-01-01: beginning to make inferences +2000-01-01: finished making inferences +protein_id position sequence length t40_binary t40_raw t45_binary t45_raw t50_binary t50_raw t55_binary t55_raw t60_binary t60_raw t65_binary t65_raw left_hand_label right_hand_label clash +AaCas12b - MAVKSMKVKLRLDNMPEIRAGLWKLHTEVNAGVRYYTEWLSLLRQENLYRRSPNGDGEQECYKTAEECKAELLERLRARQVENGHCGPAGSDDELLQLARQLYELLVPQAIGAKGDAQQIARKFLSPLADKDAVGGLGIAKAGNKPRWVRMREAGEPGWEEEKAKAEARKSTDRTADVLRALADFGLKPLMRVYTDSDMSSVQWKPLRKGQAVRTWDRDMFQQAIERMMSWESWNQRVGEAYAKLVEQKSRFEQKNFVGQEHLVQLVNQLQQDMKEASHGLESKEQTAHYLTGRALRGSDKVFEKWEKLDPDAPFDLYDTEIKNVQRRNTRRFGSHDLFAKLAEPKYQALWREDASFLTRYAVYNSIVRKLNHAKMFATFTLPDATAHPIWTRFDKLGGNLHQYTFLFNEFGEGRHAIRFQKLLTVEDGVAKEVDDVTVPISMSAQLDDLLPRDPHELVALYFQDYGAEQHLAGEFGGAKIQYRRDQLNHLHARRGARDVYLNLSVRVQSQSEARGERRPPYAAVFRLVGDNHRAFVHFDKLSDYLAEHPDDGKLGSEGLLSGLRVMSVDLGLRTSASISVFRVARKDELKPNSEGRVPFCFPIEGNENLVAVHERSQLLKLPGETESKDLRAIREERQRTLRQLRTQLAYLRLLVRCGSEDVGRRERSWAKLIEQPMDANQMTPDWREAFEDELQKLKSLYGICGDREWTEAVYESVRRVWRHMGKQVRDWRKDVRSGERPKIRGYQKDVVGGNSIEQIEYLERQYKFLKSWSFFGKVSGQVIRAEKGSRFAITLREHIDHAKEDRLKKLADRIIMEALGYVYALDDERGKGKWVAKYPPCQLILLEELSEYQFNNDRPPSENNQLMQWSHRGVFQELLNQAQVHDLLVGTMYAAFSSRFDARTGAPGIRCRRVPARCAREQNPEPFPWWLNKFVAEHKLDGCPLRADDLIPTGEGEFFVSPFSAEEGDFHQIHADLNAAQNLQRRLWSDFDISQIRLRCDWGEVDGEPVLIPRTTGKRTADSYGNKVFYTKTGVTYYERERGKKRRKVFAQEELSEEEAELLVEADEAREKSVVLMRDPSGIINRGDWTRQKEFWSMVNQRIEGYLVKQIRSRVRLQESACENTGDI 1129 1 8.508e-01 1 8.293e-01 0 4.436e-01 0 3.482e-01 0 6.153e-02 0 1.086e-03 [45-50) [45-50) - +WP_206918966_1 - MTVKSIKVKLRLDNMPEIRAGLWKLHTEVNAGVRYYTEWLSLLRQENLYRRSPNGDGEQECYKTAEECKAELLERLRARQVENGHRGPAGSDDELLQLARQLYELLVPQAIGAKGDAQQIARKFLSPLADKDAVGGLGIAKAGNKPRWVRMRDAGEPGWEEEKAKAEARKSTDRTADVLRALADFGLKPLMRVYTDSDMSSVQWKPLRKGQAVRTWDRDMFQQAIERMMSWESWNQRVGEAYAKLVEQKSRFEQKNFVGQEHLVQLVNQLQQDMKEASHGLESKEQTAHYLTGRALRGSDKVFEKWEKLDPDAPFDLYDTEIKNVQRRNMRRFGSHDLFAKLAEPKYQALWREDASFLTRYAAYNSILRKLNHAKMFATFTLPDATAHPIWTRFDKLGGNLHQYTFLFNEFGEGRHAIRFQKLLTIEHGVAKEVDDVTVPISMSAQLDDLLPGESNEPTELSFRDHGTDQHFTGEFGGAKIQYRRDQLDHVHRRRGARDVYLNLSVRVQSQSEARGERRPPYAAVFRLVGDTHRAFAHFDKLSNYLAEHPDDGKLGSEGLLSGLRVMSVDLGLRTSASISVFRVARKDELKPNSEGRVPFFFPIKGNDNLVAVHERSQLLKLPGETESKDLRAIREERQRILRQLRTQLAYLRLLVRCGSEDVGRRERSWAKLIEQSVDAANHMTPDWREAFEGELQKLKSLYGICGDREWTEAVYESVRRVWRHMGKQVRDWRKDVRSGERPKIRGYQKDVVGGNSIEQIEYLERQYKFLKSWSFFGKVSGQVIRAEKGSRFATTLREHIDHAKEDRLKKLADRIIMEALGYVYALDAERGKGTWVAKYPPCQLILLEELSEYRFNNDRPPSENNQLMQWSHRGVFQELLNQAQVHDLLVGTMYAAFSSRFDARTGAPGIRCRRVPARCAREQNPEPFPWWLNKFVAEHKLDGCPLRADDLIPTGEGEFFVSPFSAEEGDFHQIHADLNAAQNLQRRLWSDFDISQIRLRCDWGEVDGEPVLIPRLTGKRTADSYGNKVFYTNTGVTYYERERGKKRRKAFAQEELSEEEAELLVEADEAREKSVVLMRDPSGIINRGDWTRQKEFWSMVNQRIEGYLVKQIRSRVRLPESACENTGDI 1130 1 8.075e-01 1 7.639e-01 0 3.578e-01 0 2.891e-01 0 4.220e-02 0 7.351e-04 [45-50) [45-50) - +WP_206922773_1 - MTVKSIKVKLRLDNMPEIRAGLWKLHTEVNAGVRYYTEWLSLLRQENLYRRSPNGDGEQECYKTAEECKVELLERLRARQVENGHRDPAGSDDELLQLARQLYELLVPQAIGAKGDAQQIARKFLSPLADKDAVGGLGIAKAGNKPRWVRMRDAGEPGWEEEKAKAEARKSTDRTADVLRALADFGLKPLMRVYTDSDMSSVQWKPLRKGQAVRTWDRDMFQQAIERMMSWESWNQRVGEAYAKLVEQKSRFEQKNFVGQEHLVQLVNQLQQDMKEASHGLESKEQTAHYLTGRALRGSDKVFEKWEKLDPDAPFDLYDTEIKNVQRRNTRRFGSHDLFAKLAEPKYQALWREDASFLTRYAAYNSILRKLNHAKMFATFTLPDATAHPIWTRFDKLGGNLHQYTFLFNEFGEGRHAIRFQKLLTIEHGVAKEVDDVTVPISMSAQLDDLLPGESNEPTELSFRDHGTDQHFTGEFGGAKIQYRRDQLDHVHRRRGARDVYLNLSVRVQSQSEARGERRPPYAAVFRLVGDTHRAFAHFDKLSNYLAEHPDDGKLGSEGLLSGLRVMSVDLGLRTSASISVFRVARKDELKPNSEGRVPFFFPIKGNDNLVAVHERSQLLKLPGETESKDLRAIREERQRILRQLRTQLAYLRLLVRCGSEDVGRRERSWAKLIEQSVDAANHMTPDWREAFEGELQKLKSLYGICGDREWTEAVYESVRRVWRHMGKQVRDWRKDVRSGERPKIRGYQKDVVGGNSIEQIEYLERQYKFLKSWSFFGKVSGQVIRAEKGSRFATTLREHIDHAKEDRLKKLADRIIMEALGYVYALDAERGKGTWVAKYPPCQLILLEELSEYRFNNDRPPSENNQLMQWSHRGVFQELLNQAQVHDLLVGTMYAAFSSRFDARTGAPGIRCRRVPARCAREQNPEPFPWWLNKFVAEHKLDGCPLRADDLIPTGEGEFFVSPFSAEEGDFHQIHADLNAAQNLQRRLWSDFDISQIRLRCDWGEVDGEPVLIPRLTGKRTADSYGNKVFYTNTGVTYYERERGKKRRKAFAQEELSEEEAELLVEADEAREKSVVLMRDPSGIINRGDWTRQKEFWSMVNQRIEGYLVKQIRSRVCLPESACENTGDI 1130 1 7.686e-01 1 7.065e-01 0 2.926e-01 0 2.502e-01 0 3.175e-02 0 6.099e-04 [45-50) [45-50) - diff --git a/scripts/tests/outputs/temstapro_008.out b/scripts/tests/outputs/temstapro_008.out new file mode 100644 index 0000000000000000000000000000000000000000..5e9bb9a0488055ef523f3fcd91e6f92cba4f5f3e --- /dev/null +++ b/scripts/tests/outputs/temstapro_008.out @@ -0,0 +1,14 @@ +2000-01-01: beginning to load the model +2000-01-01: finished loading the model +2000-01-01: beginning to generate embeddings +Portion 1. +3/3: sequences with generated mean embeddings +0/3: sequences with generated per-residue embeddings +0:00:00.0001: time to generate embeddings +0:00:00.0001: time to generate embeddings per protein +2000-01-01: beginning to make inferences +2000-01-01: finished making inferences +protein_id position sequence length t40_binary t40_raw t45_binary t45_raw t50_binary t50_raw t55_binary t55_raw t60_binary t60_raw t65_binary t65_raw left_hand_label right_hand_label clash +AaCas12b - MAVKSMKVKLRLDNMPEIRAGLWKLHTEVNAGVRYYTEWLSLLRQENLYRRSPNGDGEQECYKTAEECKAELLERLRARQVENGHCGPAGSDDELLQLARQLYELLVPQAIGAKGDAQQIARKFLSPLADKDAVGGLGIAKAGNKPRWVRMREAGEPGWEEEKAKAEARKSTDRTADVLRALADFGLKPLMRVYTDSDMSSVQWKPLRKGQAVRTWDRDMFQQAIERMMSWESWNQRVGEAYAKLVEQKSRFEQKNFVGQEHLVQLVNQLQQDMKEASHGLESKEQTAHYLTGRALRGSDKVFEKWEKLDPDAPFDLYDTEIKNVQRRNTRRFGSHDLFAKLAEPKYQALWREDASFLTRYAVYNSIVRKLNHAKMFATFTLPDATAHPIWTRFDKLGGNLHQYTFLFNEFGEGRHAIRFQKLLTVEDGVAKEVDDVTVPISMSAQLDDLLPRDPHELVALYFQDYGAEQHLAGEFGGAKIQYRRDQLNHLHARRGARDVYLNLSVRVQSQSEARGERRPPYAAVFRLVGDNHRAFVHFDKLSDYLAEHPDDGKLGSEGLLSGLRVMSVDLGLRTSASISVFRVARKDELKPNSEGRVPFCFPIEGNENLVAVHERSQLLKLPGETESKDLRAIREERQRTLRQLRTQLAYLRLLVRCGSEDVGRRERSWAKLIEQPMDANQMTPDWREAFEDELQKLKSLYGICGDREWTEAVYESVRRVWRHMGKQVRDWRKDVRSGERPKIRGYQKDVVGGNSIEQIEYLERQYKFLKSWSFFGKVSGQVIRAEKGSRFAITLREHIDHAKEDRLKKLADRIIMEALGYVYALDDERGKGKWVAKYPPCQLILLEELSEYQFNNDRPPSENNQLMQWSHRGVFQELLNQAQVHDLLVGTMYAAFSSRFDARTGAPGIRCRRVPARCAREQNPEPFPWWLNKFVAEHKLDGCPLRADDLIPTGEGEFFVSPFSAEEGDFHQIHADLNAAQNLQRRLWSDFDISQIRLRCDWGEVDGEPVLIPRTTGKRTADSYGNKVFYTKTGVTYYERERGKKRRKVFAQEELSEEEAELLVEADEAREKSVVLMRDPSGIINRGDWTRQKEFWSMVNQRIEGYLVKQIRSRVRLQESACENTGDI 1129 1 8.508e-01 1 8.293e-01 0 4.436e-01 0 3.482e-01 0 6.153e-02 0 1.086e-03 [45-50) [45-50) - +WP_206918966_1 - MTVKSIKVKLRLDNMPEIRAGLWKLHTEVNAGVRYYTEWLSLLRQENLYRRSPNGDGEQECYKTAEECKAELLERLRARQVENGHRGPAGSDDELLQLARQLYELLVPQAIGAKGDAQQIARKFLSPLADKDAVGGLGIAKAGNKPRWVRMRDAGEPGWEEEKAKAEARKSTDRTADVLRALADFGLKPLMRVYTDSDMSSVQWKPLRKGQAVRTWDRDMFQQAIERMMSWESWNQRVGEAYAKLVEQKSRFEQKNFVGQEHLVQLVNQLQQDMKEASHGLESKEQTAHYLTGRALRGSDKVFEKWEKLDPDAPFDLYDTEIKNVQRRNMRRFGSHDLFAKLAEPKYQALWREDASFLTRYAAYNSILRKLNHAKMFATFTLPDATAHPIWTRFDKLGGNLHQYTFLFNEFGEGRHAIRFQKLLTIEHGVAKEVDDVTVPISMSAQLDDLLPGESNEPTELSFRDHGTDQHFTGEFGGAKIQYRRDQLDHVHRRRGARDVYLNLSVRVQSQSEARGERRPPYAAVFRLVGDTHRAFAHFDKLSNYLAEHPDDGKLGSEGLLSGLRVMSVDLGLRTSASISVFRVARKDELKPNSEGRVPFFFPIKGNDNLVAVHERSQLLKLPGETESKDLRAIREERQRILRQLRTQLAYLRLLVRCGSEDVGRRERSWAKLIEQSVDAANHMTPDWREAFEGELQKLKSLYGICGDREWTEAVYESVRRVWRHMGKQVRDWRKDVRSGERPKIRGYQKDVVGGNSIEQIEYLERQYKFLKSWSFFGKVSGQVIRAEKGSRFATTLREHIDHAKEDRLKKLADRIIMEALGYVYALDAERGKGTWVAKYPPCQLILLEELSEYRFNNDRPPSENNQLMQWSHRGVFQELLNQAQVHDLLVGTMYAAFSSRFDARTGAPGIRCRRVPARCAREQNPEPFPWWLNKFVAEHKLDGCPLRADDLIPTGEGEFFVSPFSAEEGDFHQIHADLNAAQNLQRRLWSDFDISQIRLRCDWGEVDGEPVLIPRLTGKRTADSYGNKVFYTNTGVTYYERERGKKRRKAFAQEELSEEEAELLVEADEAREKSVVLMRDPSGIINRGDWTRQKEFWSMVNQRIEGYLVKQIRSRVRLPESACENTGDI 1130 1 8.075e-01 1 7.639e-01 0 3.578e-01 0 2.891e-01 0 4.220e-02 0 7.351e-04 [45-50) [45-50) - +WP_206922773_1 - MTVKSIKVKLRLDNMPEIRAGLWKLHTEVNAGVRYYTEWLSLLRQENLYRRSPNGDGEQECYKTAEECKVELLERLRARQVENGHRDPAGSDDELLQLARQLYELLVPQAIGAKGDAQQIARKFLSPLADKDAVGGLGIAKAGNKPRWVRMRDAGEPGWEEEKAKAEARKSTDRTADVLRALADFGLKPLMRVYTDSDMSSVQWKPLRKGQAVRTWDRDMFQQAIERMMSWESWNQRVGEAYAKLVEQKSRFEQKNFVGQEHLVQLVNQLQQDMKEASHGLESKEQTAHYLTGRALRGSDKVFEKWEKLDPDAPFDLYDTEIKNVQRRNTRRFGSHDLFAKLAEPKYQALWREDASFLTRYAAYNSILRKLNHAKMFATFTLPDATAHPIWTRFDKLGGNLHQYTFLFNEFGEGRHAIRFQKLLTIEHGVAKEVDDVTVPISMSAQLDDLLPGESNEPTELSFRDHGTDQHFTGEFGGAKIQYRRDQLDHVHRRRGARDVYLNLSVRVQSQSEARGERRPPYAAVFRLVGDTHRAFAHFDKLSNYLAEHPDDGKLGSEGLLSGLRVMSVDLGLRTSASISVFRVARKDELKPNSEGRVPFFFPIKGNDNLVAVHERSQLLKLPGETESKDLRAIREERQRILRQLRTQLAYLRLLVRCGSEDVGRRERSWAKLIEQSVDAANHMTPDWREAFEGELQKLKSLYGICGDREWTEAVYESVRRVWRHMGKQVRDWRKDVRSGERPKIRGYQKDVVGGNSIEQIEYLERQYKFLKSWSFFGKVSGQVIRAEKGSRFATTLREHIDHAKEDRLKKLADRIIMEALGYVYALDAERGKGTWVAKYPPCQLILLEELSEYRFNNDRPPSENNQLMQWSHRGVFQELLNQAQVHDLLVGTMYAAFSSRFDARTGAPGIRCRRVPARCAREQNPEPFPWWLNKFVAEHKLDGCPLRADDLIPTGEGEFFVSPFSAEEGDFHQIHADLNAAQNLQRRLWSDFDISQIRLRCDWGEVDGEPVLIPRLTGKRTADSYGNKVFYTNTGVTYYERERGKKRRKAFAQEELSEEEAELLVEADEAREKSVVLMRDPSGIINRGDWTRQKEFWSMVNQRIEGYLVKQIRSRVCLPESACENTGDI 1130 1 7.686e-01 1 7.065e-01 0 2.926e-01 0 2.502e-01 0 3.175e-02 0 6.099e-04 [45-50) [45-50) - diff --git a/scripts/tests/outputs/temstapro_009.out b/scripts/tests/outputs/temstapro_009.out new file mode 100644 index 0000000000000000000000000000000000000000..4c652c8d7490f8cab3fff06eede12adef0aa61ed --- /dev/null +++ b/scripts/tests/outputs/temstapro_009.out @@ -0,0 +1,12 @@ +2000-01-01: beginning to load the model +2000-01-01: finished loading the model +2000-01-01: beginning to generate embeddings +Portion 1. +1/1: sequences with generated mean embeddings +0/1: sequences with generated per-residue embeddings +0:00:00.0001: time to generate embeddings +0:00:00.0001: time to generate embeddings per protein +2000-01-01: beginning to make inferences +2000-01-01: finished making inferences +protein_id position sequence length t40_binary t40_raw t45_binary t45_raw t50_binary t50_raw t55_binary t55_raw t60_binary t60_raw t65_binary t65_raw left_hand_label right_hand_label clash +WP_117970347_1 - MESNNKIFTETIGTSSIAKTMRNSLVPTESTKRNIEKNGIIIDDQLRAEKRQQLKEIMDEYYRTYIDNKLSNVALTRTIDWKELFQAIEDNYKQNTTKTKNELEKKQKEKRTEIYKILSDDEKFKQLFNAKLLTNVLPEFIKNQNIDNEEKQEKISTVELFQRFTSSFTDFFKNRKNVFSKDEISTSICYRVVQENAWIFYQNLLAFEEIKKTAEQEIEKIEAENRDSISDYSLKEIFDFDFYGLLLNQGGIRFYNDVCGKINYHMNLYGQKHNIKSNKFKMKRMHKQILSIDESTFEVPTMFENDKEVYQVLNEFLSDLASKKILERVEKIGENVSEYEINKIYIQSKNFEKFSSFMCGNWQIINDSLKTYYNEKIKSKGKAKEEKVKKAIKAIEYKSLADINQLVERYNNDELNRKAEEYISAINEKIKDLDVNEIEYDEKINLIENETKSEEIKSKLDSIMEIMHWTKMFIIEEEIEKDVNFYNEIEEIYDELQPLVTIYNRIRNYVTQKPYSEEKIKLNFGIPTLANGWSKTKEYDNNAIIMIRDGKYYLGIFNAKNKPDKKIMEGHQSEENGDYKKMIYRLLPGPNKMLPKVFMSKTGIAEYKPSQYILECYEQNKHIKSDKNFDIKFCRDLIDFFKTSINRHPEWSKFNFKFSETSEYEDISTFYREVEKQGYKIEWTYISEKEIKELDENGQLYLFQIYNKDFSEKSKGKENLHTMYLKNLFSEENLKNIVLKLNGEAEVFFRKSSIKKPIIHKKGSVLVNKTYNENGERKSIPEEQYTEIYKYLNSIGTNELSEKSKKLMEEGKVEYYKANYDIVKDYRYSVDKFFIHLPMTINFKAAGFSPINNIALKNIALKDDMHIIGIDRGERNLIYVSVIDTKGNIVEQRNFNIVNGIDYKEKLKQKELDRDNARKNWKEIGKIKDLKEGYLSLVVHEIAKLVVKYNAIITMEDLNQGFKRGRFKVERQVYQKFETMLINKLNYLVDKDLAVDQEGGLLRGYQLTYIPESLKVLGRQCGYIFYVPAAYTSKIDPTTGFVAIFNYKGMTDKDFVTSFDSIKYDDERGLFAFEFDYENFVTHKVEMARNKWTVYTYGERIKRKFKNGSWDTAEKVDLTYQMRSILEKYEIEYNKGQDILEQIEELDEKAQNGICKEIKYLVKDIVQMRNSLPDNAAEDYDAIISPVINNNGEFFDSTRGDEDKPLDADANGAYCIALKGLYEVMQIKKNWNEETEFPRKELKIRHQDWFDFIQNKRYL 1259 0 1.240e-01 0 1.016e-01 0 2.559e-02 0 3.469e-02 0 1.229e-02 0 3.449e-03 <40 <40 - diff --git a/scripts/tests/outputs/temstapro_010.out b/scripts/tests/outputs/temstapro_010.out new file mode 100644 index 0000000000000000000000000000000000000000..a32e45659a8133ed83c99a66e4951732d2e5d0db --- /dev/null +++ b/scripts/tests/outputs/temstapro_010.out @@ -0,0 +1,10 @@ +2000-01-01: beginning to load the model +2000-01-01: finished loading the model +2000-01-01: beginning to generate embeddings +Portion 1. +3/3: sequences with generated mean embeddings +3/3: sequences with generated per-residue embeddings +0:00:00.0001: time to generate embeddings +0:00:00.0001: time to generate embeddings per protein +2000-01-01: beginning to make inferences +2000-01-01: finished making inferences diff --git a/scripts/tests/outputs/temstapro_011.out b/scripts/tests/outputs/temstapro_011.out new file mode 100644 index 0000000000000000000000000000000000000000..e83e2f1772de0c0e85a0baaec50a0bf3479b657b --- /dev/null +++ b/scripts/tests/outputs/temstapro_011.out @@ -0,0 +1,10 @@ +2000-01-01: beginning to load the model +2000-01-01: finished loading the model +2000-01-01: beginning to generate embeddings +Portion 1. +1/1: sequences with generated mean embeddings +1/1: sequences with generated per-residue embeddings +0:00:00.0001: time to generate embeddings +0:00:00.0001: time to generate embeddings per protein +2000-01-01: beginning to make inferences +2000-01-01: finished making inferences diff --git a/scripts/tests/outputs/temstapro_012.out b/scripts/tests/outputs/temstapro_012.out new file mode 100644 index 0000000000000000000000000000000000000000..a32e45659a8133ed83c99a66e4951732d2e5d0db --- /dev/null +++ b/scripts/tests/outputs/temstapro_012.out @@ -0,0 +1,10 @@ +2000-01-01: beginning to load the model +2000-01-01: finished loading the model +2000-01-01: beginning to generate embeddings +Portion 1. +3/3: sequences with generated mean embeddings +3/3: sequences with generated per-residue embeddings +0:00:00.0001: time to generate embeddings +0:00:00.0001: time to generate embeddings per protein +2000-01-01: beginning to make inferences +2000-01-01: finished making inferences diff --git a/scripts/tests/outputs/temstapro_013.out b/scripts/tests/outputs/temstapro_013.out new file mode 100644 index 0000000000000000000000000000000000000000..32f77c7640b98c1003bb20d9f7dc32e276e06c77 --- /dev/null +++ b/scripts/tests/outputs/temstapro_013.out @@ -0,0 +1,28 @@ +2000-01-01: beginning to load the model +2000-01-01: finished loading the model +2000-01-01: beginning to generate embeddings +Portion 1. +3/3: sequences with generated mean embeddings +0/3: sequences with generated per-residue embeddings +0:00:00.0001: time to generate embeddings +0:00:00.0001: time to generate embeddings per protein +2000-01-01: beginning to make inferences +2000-01-01: finished making inferences +protein_id position sequence length t40_binary t40_raw t45_binary t45_raw t50_binary t50_raw t55_binary t55_raw t60_binary t60_raw t65_binary t65_raw left_hand_label right_hand_label clash +AaCas12b - MAVKSMKVKLRLDNMPEIRAGLWKLHTEVNAGVRYYTEWLSLLRQENLYRRSPNGDGEQECYKTAEECKAELLERLRARQVENGHCGPAGSDDELLQLARQLYELLVPQAIGAKGDAQQIARKFLSPLADKDAVGGLGIAKAGNKPRWVRMREAGEPGWEEEKAKAEARKSTDRTADVLRALADFGLKPLMRVYTDSDMSSVQWKPLRKGQAVRTWDRDMFQQAIERMMSWESWNQRVGEAYAKLVEQKSRFEQKNFVGQEHLVQLVNQLQQDMKEASHGLESKEQTAHYLTGRALRGSDKVFEKWEKLDPDAPFDLYDTEIKNVQRRNTRRFGSHDLFAKLAEPKYQALWREDASFLTRYAVYNSIVRKLNHAKMFATFTLPDATAHPIWTRFDKLGGNLHQYTFLFNEFGEGRHAIRFQKLLTVEDGVAKEVDDVTVPISMSAQLDDLLPRDPHELVALYFQDYGAEQHLAGEFGGAKIQYRRDQLNHLHARRGARDVYLNLSVRVQSQSEARGERRPPYAAVFRLVGDNHRAFVHFDKLSDYLAEHPDDGKLGSEGLLSGLRVMSVDLGLRTSASISVFRVARKDELKPNSEGRVPFCFPIEGNENLVAVHERSQLLKLPGETESKDLRAIREERQRTLRQLRTQLAYLRLLVRCGSEDVGRRERSWAKLIEQPMDANQMTPDWREAFEDELQKLKSLYGICGDREWTEAVYESVRRVWRHMGKQVRDWRKDVRSGERPKIRGYQKDVVGGNSIEQIEYLERQYKFLKSWSFFGKVSGQVIRAEKGSRFAITLREHIDHAKEDRLKKLADRIIMEALGYVYALDDERGKGKWVAKYPPCQLILLEELSEYQFNNDRPPSENNQLMQWSHRGVFQELLNQAQVHDLLVGTMYAAFSSRFDARTGAPGIRCRRVPARCAREQNPEPFPWWLNKFVAEHKLDGCPLRADDLIPTGEGEFFVSPFSAEEGDFHQIHADLNAAQNLQRRLWSDFDISQIRLRCDWGEVDGEPVLIPRTTGKRTADSYGNKVFYTKTGVTYYERERGKKRRKVFAQEELSEEEAELLVEADEAREKSVVLMRDPSGIINRGDWTRQKEFWSMVNQRIEGYLVKQIRSRVRLQESACENTGDI 1129 1 8.508e-01 1 8.293e-01 0 4.436e-01 0 3.482e-01 0 6.153e-02 0 1.086e-03 [45-50) [45-50) - +WP_206918966_1 - MTVKSIKVKLRLDNMPEIRAGLWKLHTEVNAGVRYYTEWLSLLRQENLYRRSPNGDGEQECYKTAEECKAELLERLRARQVENGHRGPAGSDDELLQLARQLYELLVPQAIGAKGDAQQIARKFLSPLADKDAVGGLGIAKAGNKPRWVRMRDAGEPGWEEEKAKAEARKSTDRTADVLRALADFGLKPLMRVYTDSDMSSVQWKPLRKGQAVRTWDRDMFQQAIERMMSWESWNQRVGEAYAKLVEQKSRFEQKNFVGQEHLVQLVNQLQQDMKEASHGLESKEQTAHYLTGRALRGSDKVFEKWEKLDPDAPFDLYDTEIKNVQRRNMRRFGSHDLFAKLAEPKYQALWREDASFLTRYAAYNSILRKLNHAKMFATFTLPDATAHPIWTRFDKLGGNLHQYTFLFNEFGEGRHAIRFQKLLTIEHGVAKEVDDVTVPISMSAQLDDLLPGESNEPTELSFRDHGTDQHFTGEFGGAKIQYRRDQLDHVHRRRGARDVYLNLSVRVQSQSEARGERRPPYAAVFRLVGDTHRAFAHFDKLSNYLAEHPDDGKLGSEGLLSGLRVMSVDLGLRTSASISVFRVARKDELKPNSEGRVPFFFPIKGNDNLVAVHERSQLLKLPGETESKDLRAIREERQRILRQLRTQLAYLRLLVRCGSEDVGRRERSWAKLIEQSVDAANHMTPDWREAFEGELQKLKSLYGICGDREWTEAVYESVRRVWRHMGKQVRDWRKDVRSGERPKIRGYQKDVVGGNSIEQIEYLERQYKFLKSWSFFGKVSGQVIRAEKGSRFATTLREHIDHAKEDRLKKLADRIIMEALGYVYALDAERGKGTWVAKYPPCQLILLEELSEYRFNNDRPPSENNQLMQWSHRGVFQELLNQAQVHDLLVGTMYAAFSSRFDARTGAPGIRCRRVPARCAREQNPEPFPWWLNKFVAEHKLDGCPLRADDLIPTGEGEFFVSPFSAEEGDFHQIHADLNAAQNLQRRLWSDFDISQIRLRCDWGEVDGEPVLIPRLTGKRTADSYGNKVFYTNTGVTYYERERGKKRRKAFAQEELSEEEAELLVEADEAREKSVVLMRDPSGIINRGDWTRQKEFWSMVNQRIEGYLVKQIRSRVRLPESACENTGDI 1130 1 8.075e-01 1 7.639e-01 0 3.578e-01 0 2.891e-01 0 4.220e-02 0 7.351e-04 [45-50) [45-50) - +WP_206922773_1 - MTVKSIKVKLRLDNMPEIRAGLWKLHTEVNAGVRYYTEWLSLLRQENLYRRSPNGDGEQECYKTAEECKVELLERLRARQVENGHRDPAGSDDELLQLARQLYELLVPQAIGAKGDAQQIARKFLSPLADKDAVGGLGIAKAGNKPRWVRMRDAGEPGWEEEKAKAEARKSTDRTADVLRALADFGLKPLMRVYTDSDMSSVQWKPLRKGQAVRTWDRDMFQQAIERMMSWESWNQRVGEAYAKLVEQKSRFEQKNFVGQEHLVQLVNQLQQDMKEASHGLESKEQTAHYLTGRALRGSDKVFEKWEKLDPDAPFDLYDTEIKNVQRRNTRRFGSHDLFAKLAEPKYQALWREDASFLTRYAAYNSILRKLNHAKMFATFTLPDATAHPIWTRFDKLGGNLHQYTFLFNEFGEGRHAIRFQKLLTIEHGVAKEVDDVTVPISMSAQLDDLLPGESNEPTELSFRDHGTDQHFTGEFGGAKIQYRRDQLDHVHRRRGARDVYLNLSVRVQSQSEARGERRPPYAAVFRLVGDTHRAFAHFDKLSNYLAEHPDDGKLGSEGLLSGLRVMSVDLGLRTSASISVFRVARKDELKPNSEGRVPFFFPIKGNDNLVAVHERSQLLKLPGETESKDLRAIREERQRILRQLRTQLAYLRLLVRCGSEDVGRRERSWAKLIEQSVDAANHMTPDWREAFEGELQKLKSLYGICGDREWTEAVYESVRRVWRHMGKQVRDWRKDVRSGERPKIRGYQKDVVGGNSIEQIEYLERQYKFLKSWSFFGKVSGQVIRAEKGSRFATTLREHIDHAKEDRLKKLADRIIMEALGYVYALDAERGKGTWVAKYPPCQLILLEELSEYRFNNDRPPSENNQLMQWSHRGVFQELLNQAQVHDLLVGTMYAAFSSRFDARTGAPGIRCRRVPARCAREQNPEPFPWWLNKFVAEHKLDGCPLRADDLIPTGEGEFFVSPFSAEEGDFHQIHADLNAAQNLQRRLWSDFDISQIRLRCDWGEVDGEPVLIPRLTGKRTADSYGNKVFYTNTGVTYYERERGKKRRKAFAQEELSEEEAELLVEADEAREKSVVLMRDPSGIINRGDWTRQKEFWSMVNQRIEGYLVKQIRSRVCLPESACENTGDI 1130 1 7.686e-01 1 7.065e-01 0 2.926e-01 0 2.502e-01 0 3.175e-02 0 6.099e-04 [45-50) [45-50) - +2000-01-01: beginning to load the model +2000-01-01: finished loading the model +2000-01-01: beginning to generate embeddings +Portion 1. +2/2: sequences with generated mean embeddings +0/2: sequences with generated per-residue embeddings +0:00:00.0001: time to generate embeddings +0:00:00.0001: time to generate embeddings per protein +2000-01-01: beginning to make inferences +2000-01-01: finished making inferences +protein_id position sequence length t40_binary t40_raw t45_binary t45_raw t50_binary t50_raw t55_binary t55_raw t60_binary t60_raw t65_binary t65_raw left_hand_label right_hand_label clash +AaCas12b - MAVKSMKVKLRLDNMPEIRAGLWKLHTEVNAGVRYYTEWLSLLRQENLYRRSPNGDGEQECYKTAEECKAELLERLRARQVENGHCGPAGSDDELLQLARQLYELLVPQAIGAKGDAQQIARKFLSPLADKDAVGGLGIAKAGNKPRWVRMREAGEPGWEEEKAKAEARKSTDRTADVLRALADFGLKPLMRVYTDSDMSSVQWKPLRKGQAVRTWDRDMFQQAIERMMSWESWNQRVGEAYAKLVEQKSRFEQKNFVGQEHLVQLVNQLQQDMKEASHGLESKEQTAHYLTGRALRGSDKVFEKWEKLDPDAPFDLYDTEIKNVQRRNTRRFGSHDLFAKLAEPKYQALWREDASFLTRYAVYNSIVRKLNHAKMFATFTLPDATAHPIWTRFDKLGGNLHQYTFLFNEFGEGRHAIRFQKLLTVEDGVAKEVDDVTVPISMSAQLDDLLPRDPHELVALYFQDYGAEQHLAGEFGGAKIQYRRDQLNHLHARRGARDVYLNLSVRVQSQSEARGERRPPYAAVFRLVGDNHRAFVHFDKLSDYLAEHPDDGKLGSEGLLSGLRVMSVDLGLRTSASISVFRVARKDELKPNSEGRVPFCFPIEGNENLVAVHERSQLLKLPGETESKDLRAIREERQRTLRQLRTQLAYLRLLVRCGSEDVGRRERSWAKLIEQPMDANQMTPDWREAFEDELQKLKSLYGICGDREWTEAVYESVRRVWRHMGKQVRDWRKDVRSGERPKIRGYQKDVVGGNSIEQIEYLERQYKFLKSWSFFGKVSGQVIRAEKGSRFAITLREHIDHAKEDRLKKLADRIIMEALGYVYALDDERGKGKWVAKYPPCQLILLEELSEYQFNNDRPPSENNQLMQWSHRGVFQELLNQAQVHDLLVGTMYAAFSSRFDARTGAPGIRCRRVPARCAREQNPEPFPWWLNKFVAEHKLDGCPLRADDLIPTGEGEFFVSPFSAEEGDFHQIHADLNAAQNLQRRLWSDFDISQIRLRCDWGEVDGEPVLIPRTTGKRTADSYGNKVFYTKTGVTYYERERGKKRRKVFAQEELSEEEAELLVEADEAREKSVVLMRDPSGIINRGDWTRQKEFWSMVNQRIEGYLVKQIRSRVRLQESACENTGDI 1129 1 8.508e-01 1 8.293e-01 0 4.436e-01 0 3.482e-01 0 6.153e-02 0 1.086e-03 [45-50) [45-50) - +WP_206918966_1 - MTVKSIKVKLRLDNMPEIRAGLWKLHTEVNAGVRYYTEWLSLLRQENLYRRSPNGDGEQECYKTAEECKAELLERLRARQVENGHRGPAGSDDELLQLARQLYELLVPQAIGAKGDAQQIARKFLSPLADKDAVGGLGIAKAGNKPRWVRMRDAGEPGWEEEKAKAEARKSTDRTADVLRALADFGLKPLMRVYTDSDMSSVQWKPLRKGQAVRTWDRDMFQQAIERMMSWESWNQRVGEAYAKLVEQKSRFEQKNFVGQEHLVQLVNQLQQDMKEASHGLESKEQTAHYLTGRALRGSDKVFEKWEKLDPDAPFDLYDTEIKNVQRRNMRRFGSHDLFAKLAEPKYQALWREDASFLTRYAAYNSILRKLNHAKMFATFTLPDATAHPIWTRFDKLGGNLHQYTFLFNEFGEGRHAIRFQKLLTIEHGVAKEVDDVTVPISMSAQLDDLLPGESNEPTELSFRDHGTDQHFTGEFGGAKIQYRRDQLDHVHRRRGARDVYLNLSVRVQSQSEARGERRPPYAAVFRLVGDTHRAFAHFDKLSNYLAEHPDDGKLGSEGLLSGLRVMSVDLGLRTSASISVFRVARKDELKPNSEGRVPFFFPIKGNDNLVAVHERSQLLKLPGETESKDLRAIREERQRILRQLRTQLAYLRLLVRCGSEDVGRRERSWAKLIEQSVDAANHMTPDWREAFEGELQKLKSLYGICGDREWTEAVYESVRRVWRHMGKQVRDWRKDVRSGERPKIRGYQKDVVGGNSIEQIEYLERQYKFLKSWSFFGKVSGQVIRAEKGSRFATTLREHIDHAKEDRLKKLADRIIMEALGYVYALDAERGKGTWVAKYPPCQLILLEELSEYRFNNDRPPSENNQLMQWSHRGVFQELLNQAQVHDLLVGTMYAAFSSRFDARTGAPGIRCRRVPARCAREQNPEPFPWWLNKFVAEHKLDGCPLRADDLIPTGEGEFFVSPFSAEEGDFHQIHADLNAAQNLQRRLWSDFDISQIRLRCDWGEVDGEPVLIPRLTGKRTADSYGNKVFYTNTGVTYYERERGKKRRKAFAQEELSEEEAELLVEADEAREKSVVLMRDPSGIINRGDWTRQKEFWSMVNQRIEGYLVKQIRSRVRLPESACENTGDI 1130 1 8.075e-01 1 7.639e-01 0 3.578e-01 0 2.891e-01 0 4.220e-02 0 7.351e-04 [45-50) [45-50) - +WP_206922773_1 - MTVKSIKVKLRLDNMPEIRAGLWKLHTEVNAGVRYYTEWLSLLRQENLYRRSPNGDGEQECYKTAEECKVELLERLRARQVENGHRDPAGSDDELLQLARQLYELLVPQAIGAKGDAQQIARKFLSPLADKDAVGGLGIAKAGNKPRWVRMRDAGEPGWEEEKAKAEARKSTDRTADVLRALADFGLKPLMRVYTDSDMSSVQWKPLRKGQAVRTWDRDMFQQAIERMMSWESWNQRVGEAYAKLVEQKSRFEQKNFVGQEHLVQLVNQLQQDMKEASHGLESKEQTAHYLTGRALRGSDKVFEKWEKLDPDAPFDLYDTEIKNVQRRNTRRFGSHDLFAKLAEPKYQALWREDASFLTRYAAYNSILRKLNHAKMFATFTLPDATAHPIWTRFDKLGGNLHQYTFLFNEFGEGRHAIRFQKLLTIEHGVAKEVDDVTVPISMSAQLDDLLPGESNEPTELSFRDHGTDQHFTGEFGGAKIQYRRDQLDHVHRRRGARDVYLNLSVRVQSQSEARGERRPPYAAVFRLVGDTHRAFAHFDKLSNYLAEHPDDGKLGSEGLLSGLRVMSVDLGLRTSASISVFRVARKDELKPNSEGRVPFFFPIKGNDNLVAVHERSQLLKLPGETESKDLRAIREERQRILRQLRTQLAYLRLLVRCGSEDVGRRERSWAKLIEQSVDAANHMTPDWREAFEGELQKLKSLYGICGDREWTEAVYESVRRVWRHMGKQVRDWRKDVRSGERPKIRGYQKDVVGGNSIEQIEYLERQYKFLKSWSFFGKVSGQVIRAEKGSRFATTLREHIDHAKEDRLKKLADRIIMEALGYVYALDAERGKGTWVAKYPPCQLILLEELSEYRFNNDRPPSENNQLMQWSHRGVFQELLNQAQVHDLLVGTMYAAFSSRFDARTGAPGIRCRRVPARCAREQNPEPFPWWLNKFVAEHKLDGCPLRADDLIPTGEGEFFVSPFSAEEGDFHQIHADLNAAQNLQRRLWSDFDISQIRLRCDWGEVDGEPVLIPRLTGKRTADSYGNKVFYTNTGVTYYERERGKKRRKAFAQEELSEEEAELLVEADEAREKSVVLMRDPSGIINRGDWTRQKEFWSMVNQRIEGYLVKQIRSRVCLPESACENTGDI 1130 1 7.686e-01 1 7.065e-01 0 2.926e-01 0 2.502e-01 0 3.175e-02 0 6.099e-04 [45-50) [45-50) - diff --git a/scripts/tests/outputs/temstapro_014.out b/scripts/tests/outputs/temstapro_014.out new file mode 100644 index 0000000000000000000000000000000000000000..97871525c9417ba56716c1c7fcdbddd0c7ad2768 --- /dev/null +++ b/scripts/tests/outputs/temstapro_014.out @@ -0,0 +1,12 @@ +2000-01-01: beginning to load the model +2000-01-01: finished loading the model +2000-01-01: beginning to generate embeddings +Portion 1. +1/1: sequences with generated mean embeddings +0/1: sequences with generated per-residue embeddings +0:00:00.0001: time to generate embeddings +0:00:00.0001: time to generate embeddings per protein +2000-01-01: beginning to make inferences +2000-01-01: finished making inferences +protein_id position sequence length t40_binary t40_raw t45_binary t45_raw t50_binary t50_raw t55_binary t55_raw t60_binary t60_raw t65_binary t65_raw t70_binary t70_raw t75_binary t75_raw t80_binary t80_raw left_hand_label right_hand_label clash thermophilicity +MGYP003385177403__Cas9-C3M5__1.6e-51 FL=0 (part) - MRNEATLWLAKYMEDHGISTEKISRELHIPKKKLIPGTKESLDADEFLALCSYLQINPQTIPIGQGEKXLHIYAYNKDIKTGEDLPCTNTVCKTSICPSCGQRADAGSQIYWCKSCKTLYMRKSALSVIRKERSWQRICVRSFRKRGCCXSSFWGHPMHFXRSLCGMVQEITIMXMGREFLFPXRIXNNXILIKCGKNIRNIRKKIQTGILKNRWRYSYRQTESVMRHWWKRQMSISAEWQQIITLWKCLFRSAVEKTLPLFLIWSCGHSEIRKCSTFLVIRHWNFHLPMNMXNVLSRSIRRHQSLPLATKRRILRNSVVXSVSSRVMRWCCTVFKTGSIQKTIKSLFRNKKEILTFYGIRRSESASRSKYDRDSDSPKITKQRIISPIIDWMDFDIWLYLLTTGIDFNRAYRLGYARVGCWCCPNNSGWSEFLSKIHMKEQSTHFREMLLEFAREIGKEDAEVYVDEGYWKARQGGNGVAYAQKSVIAFEPCATQENTYNYELQKPIETELYELFRPFGYLNYELGNERLGEVYILGKNGVPQLKLQGRIGTKKLKVTLLGSEDYGRXDKVSDYQIPDVYGMSCMXERMQAXCDFHKRRRRWEHPLSDFGXKMCKVQGMCQSFFCRMLYEKGTGNXKEINRXRNHDKDKIPFXRAXKLYFAGGLAQXRHEGSEKXSVCFFAELWSRCARGGSEHGKGDPLLDANLRVIRRAGKTGCIPFKARRAIWEYDKYLEETFSLWIIHCNIVKKSXAGNRVESFLMNMMKWNLPKTNWXRSXXTKQKIWTDLKNFRKNPXKQTERHCFVCMXESRSGEAIRRKRTSARLASLNWXNKRAVFTGKASRRCICFRQRSSGIFXKTARPKKELSVSMIFXQERIRRAGSXIXRGPVWXKNLKSXNKKIIYKXTGQQAWTWYIXTSLXQEKKLLKNTSDHREEGEKRQMKNFVNVDTRFQKSINLTLDTGDMALVNRYIPTRSSVSILKQYLTNIVRGQGEHATILIGPYGKGKSHLLLVLLALLCKSKDETAEIQKKIIEADNSTKLLFMELAEVGRPFLPVIVSSFQGDLNESFIFALQEALKRPVSEICRPSEYSEAVRTMESWKEFYPDTYQRFEKMLEERGCTASLFKERLKNKKKLHSXNSKNFTRYXHPEVFSIQWCKKKHFGSMKRSTVCFVQSTDMPAFISSLMNSVSIXKDMKQKNFCKGYEDFAGYVRIGRQPERRADVSDLCGAXEYPXVCQKYXFGNDPGIPWGRRAAERDPVCSFFPEXLXTDRACTAXERGILYLGNTGKGRSVLSACLFFTSFEKEDFNQIVAKGCYPLTPVCAYALLNISEKIGQNERTVFTFLAGNEPGSLNRIMEGRNRENLIGVEYVYDYFKNLFRETVDETYIHNEWLKAEYALTKADTEIEKRIIKAMAIIRMIHPWKSXRYXISRSVWRXISKKEECDKAMRELMKKSDLFSAQVLVPMHLRTISVLISRRRLKKNPAAASXHQYLXSVKRDFRTDLCRSKTVQSGPCNDKIFPIXIHXIXRLPFHWQCKGLFRAPFFRWIYLSDRDSRQGRKGKSAASSAGIRGXTYYRVTAXRRIFIGMGAFCVLRQSEALQRMSILLKRIKRSVRNXTSMKRTSAMRXMRDXREILCRKTAAVMYFIQAEKSRISGPEWNLTGIXARSVKTTIRXHRGSTMSFXISRMCRDSTXRQEMMWXEPFXMEKIXRNMSRAAVLRQWCIVRHFFGQDLPEKISRXTRLSKDHGGDRRLFCESKWKAGIFSDALXTLAGQRLWGAKRCASAVSCVEILSARRHAGAVPWKXGTADHGRSAEQYQPVSGKLXSLYRKERYGKRALFTGNGGYLLXCADGKDHTFQPTFRHYGKYAEMVPFPAAVYAGQXTLSAGNALCGQKFPKVIKADGVKSERIFVXAASECHGFFXKSYDRALSQGNEAEHGYAFXKCDRRYGKGDQKNIWCKKKATVSRHVCRTGMADSKTVPNAMYXTKRSRVLWNMWENXIPTTSRRLLPYYPNVWKISILRTGMTDYRKNFCVTLQRYAKRQRRQRKMPVXRTDKKRFSXRRRMERRSTNIMMRMXKTAPVNFXKIXSKRHWITLETAXRQIRKWLFXRRHXKNYYSRGNIMEEYIYLDNAATTFPKPEAVYRALDRANRNAAVNAGRGSYALAEQAKQLIEDSRGLLLTLTKAKPAAEVVFTPSATFACNQIFGGLPWKREDIVYVSPYEHNAVMRTLHFLQQRYGFAIEELSVDAGTLELDLEKNPLSVYPKPSNGSCHDTYQQCHRVYSSGXRSGSFDRYGKRRRXSWMVRRHWDXSLSVWNKAALITIYLRVIRHFTDRLESAVISHNLQEMQKNXDLXSQEEPEAIHXIXRCRSFFPTVMNREVRTYRRSRDXKRRXKHLEVIMKKCVRPXRSIIKKNGNXRNCXRQSFKKYRESILIFHRIRKKGAASVPLRSKDILRMMXECCSMKIIISQSGAAITVHRXSINTXRINHTGGRCVWASDSLIQKKTSGNSYTQWKKSQGVTKVNDDLKRVNLRDIVDRISENTIVLPDFQRGFTWKENNRQKALLASVLTKLPIGTVLFLNVKTEDYGYKKIGKNEKKHXQFRGKAGSKGAVRRSAEDHGLNGIPFHETSKRKYXRSRITDTGAAVFLESSKFSKCDRXQKEDLFGGTILSFPNSFRGNYPEISSEEMKERITFVHDRKKAFLYEKAETKDTREIREYCRNIDNSEDGDAYLLPLFYLLDACEPGSSGAVILEDVVKEIGAEYEKSIGSWLQAEEYPIEEKEQYLEKFGLEDAQREAVLEEIKTGTLFYQKKKEKIIFLTVXRNGKCSGECTFVNIXENVLRISGFMRLQFPSMIKSAPLISMKTXTWEENPXVSLIRSXQRHPDIRRRREISLHRSXMTXSVTTGRNIPHLXKNAQRVRRTVIKITLQTATNHIRQWDGSAAGINLKKSFLLPTXRHXXTFWVSLTIFQKEIRDLVCVMLRRSKTXTXKSQKRISAADSIRKNIRLCGGGMSGLRPRSLIFTDAVWNPKAWXNTLQSDVGYLRYGIFRXSMVXGQXSLRLYGSLVLECDFIGRVQDRAEPGIYPESSECFIXDPKHQRIXXEIHKSPLQXRTDRXKICRPXHCFNEKSIRISGGGNWEYHLSILFIRDIFGYFKTASGEKRLSATNTECIEQFREAAKTSHYADRKSXRKVXGMPIKRQKAGEKTTAVRIIHRXISCXYRKKRMGXSKIVHXRNTLNFAIRPHXIMXTSKTIHLPICRSGNRIPDRXRSIAAFSRKKIXRFXEPYYVEVSEFIELSRHLLRRGRKLIWKRIGTAXCRHXSLKFCIWKRRICEARQRQISACQRNCRKSSRNMQEDNGIGGQVYEIXKYYHGKFHAVXGQESYRIQLXXCKKCNSSIRRQYGWKNDDSAGIPLGTVWCVNGKRDKKCRRFSAFKYGYLRNDGCQQSCXGKSRDCSSXRGKTLYHHKRDNLYQSISKVREPGVSEEMCDADYRVRGHGKLCRGRQQRDRDIDQXTVSKELVPLFFVXWRTVEXCQCRRCPGKYQRIGTYFNGIICISRGEEPFKRYGKQFRYQKFRSEIEDRVQSMIIXKQNEKIRAXYRKAPGXD 3600 0 8.193e-02 0 1.140e-01 0 2.171e-02 0 2.343e-02 0 6.012e-03 0 9.663e-04 0 1.391e-02 0 5.589e-05 0 3.595e-06 <40 <40 - mesophilic diff --git a/weight/mean_major_imbal-40_s1.pt b/weight/mean_major_imbal-40_s1.pt new file mode 100644 index 0000000000000000000000000000000000000000..ff45af3e1879853bba0bd21bfd13b1ffc8f73dd3 --- /dev/null +++ b/weight/mean_major_imbal-40_s1.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a95982fe2201104f1b13ee464b5bec0e5a82db3246ede6e554378358e79552c +size 3557238 diff --git a/weight/mean_major_imbal-40_s2.pt b/weight/mean_major_imbal-40_s2.pt new file mode 100644 index 0000000000000000000000000000000000000000..b39664714553b3f39c97b999dd8dfa56f77aa4a7 --- /dev/null +++ b/weight/mean_major_imbal-40_s2.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3c0f13d16a0201a18494f89a84b4955aa9f5cd64dd73ce5d3de303e04ac39f5 +size 3557238 diff --git a/weight/mean_major_imbal-40_s3.pt b/weight/mean_major_imbal-40_s3.pt new file mode 100644 index 0000000000000000000000000000000000000000..5e909603fe5d3e63ad1c5255d25e8b62979cbf95 --- /dev/null +++ b/weight/mean_major_imbal-40_s3.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b2a4b79561089f3941509b9953f8235aff2af47504843dcec92328476cf342ac +size 3555906 diff --git a/weight/mean_major_imbal-40_s4.pt b/weight/mean_major_imbal-40_s4.pt new file mode 100644 index 0000000000000000000000000000000000000000..e2bba6817dd3409773772ffc0db46bea31ae109e --- /dev/null +++ b/weight/mean_major_imbal-40_s4.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4aab0bd544835377a92be62ecda445d7cd6ab8f3562045fb0f9b8368857d0c60 +size 3556476 diff --git a/weight/mean_major_imbal-40_s5.pt b/weight/mean_major_imbal-40_s5.pt new file mode 100644 index 0000000000000000000000000000000000000000..ba8fb4fabd20b81d01e82e467fc41a9ca534f550 --- /dev/null +++ b/weight/mean_major_imbal-40_s5.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:331d73aa4734c513bc25d89e558b52cef111aa78f5eb4daf9b7192e34027dfe3 +size 3556921 diff --git a/weight/mean_major_imbal-45_s1.pt b/weight/mean_major_imbal-45_s1.pt new file mode 100644 index 0000000000000000000000000000000000000000..cab66c1e6aeef8d1acc5312b3c2fede8d92b52ab --- /dev/null +++ b/weight/mean_major_imbal-45_s1.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c752672f287e413234cfb98c29e09129a65dfd5c416e0021206d98d48aeacb4f +size 3556476 diff --git a/weight/mean_major_imbal-45_s2.pt b/weight/mean_major_imbal-45_s2.pt new file mode 100644 index 0000000000000000000000000000000000000000..1de76fcb59364eb68bdf764e120f6a1a2c6ae0f4 --- /dev/null +++ b/weight/mean_major_imbal-45_s2.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8427e77afe3c6a25c6b07446e5f6907896394f364b826decf8dffa460a6fe052 +size 3556476 diff --git a/weight/mean_major_imbal-45_s3.pt b/weight/mean_major_imbal-45_s3.pt new file mode 100644 index 0000000000000000000000000000000000000000..03117276e7ce756999d8fbcb2f7661719bd1df9a --- /dev/null +++ b/weight/mean_major_imbal-45_s3.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a5d4bd7df969e8f4889c5a304a4b11bf743ceacda2ef91f3f9a858b575275cb +size 3556159 diff --git a/weight/mean_major_imbal-45_s4.pt b/weight/mean_major_imbal-45_s4.pt new file mode 100644 index 0000000000000000000000000000000000000000..e771a0380f7fe0515f7502665c074c1deb2620ca --- /dev/null +++ b/weight/mean_major_imbal-45_s4.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba3ad52f491cb18c26e4a2983208184b23376a34573040ccba38022caaec35ff +size 3557238 diff --git a/weight/mean_major_imbal-45_s5.pt b/weight/mean_major_imbal-45_s5.pt new file mode 100644 index 0000000000000000000000000000000000000000..0c1f12a6c9a133e193997649b5528728c5fa983b --- /dev/null +++ b/weight/mean_major_imbal-45_s5.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7415bb1d555c4e7ffde9fd1af404ff2bd032965a6c6d34483971a91946586143 +size 3556476 diff --git a/weight/mean_major_imbal-50_s1.pt b/weight/mean_major_imbal-50_s1.pt new file mode 100644 index 0000000000000000000000000000000000000000..adc54cdd03101e4cbd99f04337e223c2a8abb0dc --- /dev/null +++ b/weight/mean_major_imbal-50_s1.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5e0825663788e20c73666c0ac7f6ad42c422fadd8f78248f914957d30dac63f +size 3556159 diff --git a/weight/mean_major_imbal-50_s2.pt b/weight/mean_major_imbal-50_s2.pt new file mode 100644 index 0000000000000000000000000000000000000000..7c2138628476a8237ec3d1f1477545f0a9fd53f8 --- /dev/null +++ b/weight/mean_major_imbal-50_s2.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b0de409381c6b7e79151535808b9e20357025ac2beb323fb924b9a40276b301 +size 3556921 diff --git a/weight/mean_major_imbal-50_s3.pt b/weight/mean_major_imbal-50_s3.pt new file mode 100644 index 0000000000000000000000000000000000000000..1fe43e27cfc547983fea45572fd8c9447824d37e --- /dev/null +++ b/weight/mean_major_imbal-50_s3.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c906fa19281d1299f3da182c8c816c1757c652662e90db10173100b8689a97b2 +size 3555906 diff --git a/weight/mean_major_imbal-50_s4.pt b/weight/mean_major_imbal-50_s4.pt new file mode 100644 index 0000000000000000000000000000000000000000..4a0549301ef53ec58f3413cfa32f828f8518bc79 --- /dev/null +++ b/weight/mean_major_imbal-50_s4.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cffcf04e1eb11b53966d1ac3bc061a147ff75e978933bbbba30c256401edbba7 +size 3556159 diff --git a/weight/mean_major_imbal-50_s5.pt b/weight/mean_major_imbal-50_s5.pt new file mode 100644 index 0000000000000000000000000000000000000000..e56bb48fdf6f1ad2e46fa0bb862486aef8fd5f86 --- /dev/null +++ b/weight/mean_major_imbal-50_s5.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eb9b4c0ec8fcb41ad34777bdece2139cbce58ba994af3b6465de2bf1a99f7128 +size 3556159 diff --git a/weight/mean_major_imbal-55_s1.pt b/weight/mean_major_imbal-55_s1.pt new file mode 100644 index 0000000000000000000000000000000000000000..3918883d8d2304346c7e9b8333bf82e989b9bdb8 --- /dev/null +++ b/weight/mean_major_imbal-55_s1.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca1802239072c537afebe1c689bab284fb82da8c0c616410ec1e82c6d46b529d +size 3556476 diff --git a/weight/mean_major_imbal-55_s2.pt b/weight/mean_major_imbal-55_s2.pt new file mode 100644 index 0000000000000000000000000000000000000000..cdadef9eb3d488afe2bc72fec1a86d979fdf0d1e --- /dev/null +++ b/weight/mean_major_imbal-55_s2.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78adb9f0cfff77786e040d289865af3fd3de081ae707f4a9a51c28a41017a049 +size 3555906 diff --git a/weight/mean_major_imbal-55_s3.pt b/weight/mean_major_imbal-55_s3.pt new file mode 100644 index 0000000000000000000000000000000000000000..70850844f9547bb4ee683cb50dafb02d13f9d71c --- /dev/null +++ b/weight/mean_major_imbal-55_s3.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6fffbe65c6b3ad4e4376c977ddb3c4424d02bf6dc3697ca8c5ba8ddad6544c0c +size 3556159 diff --git a/weight/mean_major_imbal-55_s4.pt b/weight/mean_major_imbal-55_s4.pt new file mode 100644 index 0000000000000000000000000000000000000000..e79b932ea218776c8ce35c89ae8cda229ed4a546 --- /dev/null +++ b/weight/mean_major_imbal-55_s4.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63de1cea7a1b2f74b05d27030e19b4594afb148d584acea1029dab534c14fb3f +size 3555906 diff --git a/weight/mean_major_imbal-55_s5.pt b/weight/mean_major_imbal-55_s5.pt new file mode 100644 index 0000000000000000000000000000000000000000..791e0a0c3bc55b48f6a2d6b3861c4c021bc6b169 --- /dev/null +++ b/weight/mean_major_imbal-55_s5.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7cc144c5ae79e36ec06527add01785a349663deaa7982ea28df346815a612f6a +size 3555906 diff --git a/weight/mean_major_imbal-60_s1.pt b/weight/mean_major_imbal-60_s1.pt new file mode 100644 index 0000000000000000000000000000000000000000..c735c863b3709c8b95b9eeb6a9ce056e539fc91a --- /dev/null +++ b/weight/mean_major_imbal-60_s1.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5eaa7d25f3d95b26d7382a130f2c306da21e44831719a83033078696b9abcd7 +size 3555525 diff --git a/weight/mean_major_imbal-60_s2.pt b/weight/mean_major_imbal-60_s2.pt new file mode 100644 index 0000000000000000000000000000000000000000..dec76df6c3c3bb1ef919410b75500590ae731858 --- /dev/null +++ b/weight/mean_major_imbal-60_s2.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:364a2e2831b0ac64cc11e6ee435527f3555cdc2e7ffb4b75379e5426353c2715 +size 3555525 diff --git a/weight/mean_major_imbal-60_s3.pt b/weight/mean_major_imbal-60_s3.pt new file mode 100644 index 0000000000000000000000000000000000000000..d0cac29e0951ce973e9752cc8578084d5ebeb0a2 --- /dev/null +++ b/weight/mean_major_imbal-60_s3.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e2056b06c859ee5f8bf29cab777eb02d981d69ed95d157cdda258dac2b8acaa +size 3555906 diff --git a/weight/mean_major_imbal-60_s4.pt b/weight/mean_major_imbal-60_s4.pt new file mode 100644 index 0000000000000000000000000000000000000000..c9ea372521d392166d0a385dd254fee8cf206285 --- /dev/null +++ b/weight/mean_major_imbal-60_s4.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b410f0e430f251fc90f1e1fe52fbf1d8c38a12ea71d7fd08f5da3b767ed8dc5 +size 3555525 diff --git a/weight/mean_major_imbal-60_s5.pt b/weight/mean_major_imbal-60_s5.pt new file mode 100644 index 0000000000000000000000000000000000000000..64cbbbc533a51afef140cfaa2c90ea7481e1fd41 --- /dev/null +++ b/weight/mean_major_imbal-60_s5.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9509227a57a9a42107724e788e6d9582df4ed6568c7b2403b090b636d371ab20 +size 3555525 diff --git a/weight/mean_major_imbal-65_s1.pt b/weight/mean_major_imbal-65_s1.pt new file mode 100644 index 0000000000000000000000000000000000000000..68ec89dfd6410984e86855d1ccd4600df43af61d --- /dev/null +++ b/weight/mean_major_imbal-65_s1.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fab379d4de68432941969c5a1d4c6ea29ea85701dc12edfc2475692e34b5b6c1 +size 3555525 diff --git a/weight/mean_major_imbal-65_s2.pt b/weight/mean_major_imbal-65_s2.pt new file mode 100644 index 0000000000000000000000000000000000000000..ed324b0d9557d1247cbd5e33c09b7c226405fc4c --- /dev/null +++ b/weight/mean_major_imbal-65_s2.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9da746e5a1b3b2985826f3614577dda3654d18ca59a463a168eb22368455d4f1 +size 3555525 diff --git a/weight/mean_major_imbal-65_s3.pt b/weight/mean_major_imbal-65_s3.pt new file mode 100644 index 0000000000000000000000000000000000000000..7b5793f1598d98d9d1ea404e13751b3c85d5eb5d --- /dev/null +++ b/weight/mean_major_imbal-65_s3.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:26543c7f25ab3c7bf34c59953d2f79a62d6d301bf9d4d7b8beb971f5e71cffa0 +size 3555080 diff --git a/weight/mean_major_imbal-65_s4.pt b/weight/mean_major_imbal-65_s4.pt new file mode 100644 index 0000000000000000000000000000000000000000..d01e464f067e7acac5aeae0feeddcf2da70ea716 --- /dev/null +++ b/weight/mean_major_imbal-65_s4.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ba87748e9697c22555fe9345bde308119ffd959cd18a6057625f2ce71b119cc +size 3555525 diff --git a/weight/mean_major_imbal-65_s5.pt b/weight/mean_major_imbal-65_s5.pt new file mode 100644 index 0000000000000000000000000000000000000000..76b1c20d0dd26b93e9831fd0540ebe314a2be1c5 --- /dev/null +++ b/weight/mean_major_imbal-65_s5.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a7a9d3c13f55d588034931008f5a0bf1c97726ce0efe8e7fa51d87be99c638bc +size 3555525 diff --git a/weight/mean_major_imbal-70_s1.pt b/weight/mean_major_imbal-70_s1.pt new file mode 100644 index 0000000000000000000000000000000000000000..12b616b88de6b9991834d31bbc2a2ee58d1f020b --- /dev/null +++ b/weight/mean_major_imbal-70_s1.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b172df891b0f4fd200b59329b29703f7c66c3696dd0e24ba1f2ec9664883c9bd +size 3555080 diff --git a/weight/mean_major_imbal-70_s2.pt b/weight/mean_major_imbal-70_s2.pt new file mode 100644 index 0000000000000000000000000000000000000000..bc9cb702d40b3b7f0ff8998755606881321d4983 --- /dev/null +++ b/weight/mean_major_imbal-70_s2.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96849294cb7e7d74cb3257cca0849520fd6b9be13319a2a23c19a10abe36a19f +size 3555525 diff --git a/weight/mean_major_imbal-70_s3.pt b/weight/mean_major_imbal-70_s3.pt new file mode 100644 index 0000000000000000000000000000000000000000..c0841ca413883a4f3510b63ff9d55ee43a2fbc43 --- /dev/null +++ b/weight/mean_major_imbal-70_s3.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72dd70d0c6aa9c4265d2fbd682093d77bc9ab6d3dac5ffc79cf3218d595c684d +size 3555080 diff --git a/weight/mean_major_imbal-70_s4.pt b/weight/mean_major_imbal-70_s4.pt new file mode 100644 index 0000000000000000000000000000000000000000..331bf333b03d398a2bec217e0c69a1260cc6ff89 --- /dev/null +++ b/weight/mean_major_imbal-70_s4.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a78321b59666a7b10b5743427264fa457d2c08f7493e7639338a96393a0a833 +size 3555525 diff --git a/weight/mean_major_imbal-70_s5.pt b/weight/mean_major_imbal-70_s5.pt new file mode 100644 index 0000000000000000000000000000000000000000..d8d7d25dae8fa27743f0de2285ab2d82cd1b84f9 --- /dev/null +++ b/weight/mean_major_imbal-70_s5.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5967fb8973346c7f476432f158a9a09c8866945e6629c92a403e0850c77b1d0 +size 3555080 diff --git a/weight/mean_major_imbal-75_s1.pt b/weight/mean_major_imbal-75_s1.pt new file mode 100644 index 0000000000000000000000000000000000000000..10b454ecfadb399f78d0af8a5814e84855ec8bd6 --- /dev/null +++ b/weight/mean_major_imbal-75_s1.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f12be44e4344ccdef171561fc8e63d0092d07dde0ac2fe8d6de2adc89ae836f8 +size 3555080 diff --git a/weight/mean_major_imbal-75_s2.pt b/weight/mean_major_imbal-75_s2.pt new file mode 100644 index 0000000000000000000000000000000000000000..bc6c3f59cb4472b1ae1cb3138b46669d682f64df --- /dev/null +++ b/weight/mean_major_imbal-75_s2.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dfb165fc677e5c75ac7104ecd80afc9be8bb6f7f086246c9a0136979e8edbb9c +size 3555080 diff --git a/weight/mean_major_imbal-75_s3.pt b/weight/mean_major_imbal-75_s3.pt new file mode 100644 index 0000000000000000000000000000000000000000..d2bae31f04c4809dbdcfb4b07834b1c3eee08d81 --- /dev/null +++ b/weight/mean_major_imbal-75_s3.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:50660520970526c4c9e8149137fd9b35a92f40064467524d26cdb850af6de5bf +size 3555080 diff --git a/weight/mean_major_imbal-75_s4.pt b/weight/mean_major_imbal-75_s4.pt new file mode 100644 index 0000000000000000000000000000000000000000..a0c65ea1125d384d9bc3e3cf8e9830543618ed44 --- /dev/null +++ b/weight/mean_major_imbal-75_s4.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd5dfabf6cf9f0befbd07ad2af2ed52596223667a94dacd146967a4347538eb0 +size 3555080 diff --git a/weight/mean_major_imbal-75_s5.pt b/weight/mean_major_imbal-75_s5.pt new file mode 100644 index 0000000000000000000000000000000000000000..c56eb73e7d60339df12a5b1b4175135c087aeb4c --- /dev/null +++ b/weight/mean_major_imbal-75_s5.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9680a3eeaae9c05de2cafb02967f80fe6d2b53a219253c724112d023dfafdb42 +size 3555080 diff --git a/weight/mean_major_imbal-80_s1.pt b/weight/mean_major_imbal-80_s1.pt new file mode 100644 index 0000000000000000000000000000000000000000..13555f317bd596a49f7a88a842e08bb851a5f89c --- /dev/null +++ b/weight/mean_major_imbal-80_s1.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6469387e06442cbc919f2f164005c925bc74fb50ed8fa722fef3662022f0f2e5 +size 3555080 diff --git a/weight/mean_major_imbal-80_s2.pt b/weight/mean_major_imbal-80_s2.pt new file mode 100644 index 0000000000000000000000000000000000000000..3fa317fd700a8eb0a740a5fd1f2d36ec1c03a9da --- /dev/null +++ b/weight/mean_major_imbal-80_s2.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a51edcd391f7884a8771ffd26e8248339a4dbe4f22ff8d4bcc03bb8ee36e11c4 +size 3555080 diff --git a/weight/mean_major_imbal-80_s3.pt b/weight/mean_major_imbal-80_s3.pt new file mode 100644 index 0000000000000000000000000000000000000000..067efadcff9004ecee8ba5d75f50a581735c61f3 --- /dev/null +++ b/weight/mean_major_imbal-80_s3.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6526f5719b7657f6d96588491d4d434a8ffeb2da229287dd03ead39ec671f22c +size 3555080 diff --git a/weight/mean_major_imbal-80_s4.pt b/weight/mean_major_imbal-80_s4.pt new file mode 100644 index 0000000000000000000000000000000000000000..7cd597c1848c56c9302d726b570c932a1c2da2d3 --- /dev/null +++ b/weight/mean_major_imbal-80_s4.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d204047d0bafcbba669909e607f41b9dc4fac8b20d0567ca76028ac0749927ba +size 3555080 diff --git a/weight/mean_major_imbal-80_s5.pt b/weight/mean_major_imbal-80_s5.pt new file mode 100644 index 0000000000000000000000000000000000000000..d9299d2365ba707af5a4b90643280cb3651233c1 --- /dev/null +++ b/weight/mean_major_imbal-80_s5.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e594984700947a5e207db1aca5b628ceda3f9da63294351d499b79f3faa99c3 +size 3555080