[med-svn] [python-biopython] 01/03: Imported Upstream version 1.68+dfsg

Andreas Tille tille at debian.org
Mon Aug 29 12:16:53 UTC 2016


This is an automated email from the git hooks/post-receive script.

tille pushed a commit to branch master
in repository python-biopython.

commit 9511db1fb157c7c798cb40fd8adbfb7c4037701f
Author: Andreas Tille <tille at debian.org>
Date:   Mon Aug 29 13:22:45 2016 +0200

    Imported Upstream version 1.68+dfsg
---
 .codecov.yml                                       |    7 +
 .gitattributes                                     |    3 +
 .travis-tox.ini                                    |  110 +
 .travis.yml                                        |   76 +-
 Bio/Align/Applications/_Muscle.py                  |    7 +-
 Bio/Align/Applications/_TCoffee.py                 |  108 +-
 Bio/Align/Generic.py                               |   12 +-
 Bio/Align/__init__.py                              |   18 +-
 Bio/AlignIO/ClustalIO.py                           |   42 +-
 Bio/AlignIO/NexusIO.py                             |    4 +-
 Bio/AlignIO/PhylipIO.py                            |   44 +-
 Bio/Alphabet/Reduced.py                            |    3 +-
 Bio/Blast/Applications.py                          |   14 +-
 Bio/Blast/NCBIStandalone.py                        |   55 +-
 Bio/Blast/NCBIWWW.py                               |    5 +-
 Bio/Compass/__init__.py                            |    2 +-
 Bio/Data/CodonTable.py                             |  248 +-
 Bio/Emboss/Applications.py                         | 1801 +++----
 Bio/Entrez/DTDs/NCBI_Systems.dtd                   |   86 +
 Bio/Entrez/Parser.py                               |   14 +-
 Bio/Entrez/__init__.py                             |  118 +-
 Bio/File.py                                        |   12 +-
 Bio/GenBank/Scanner.py                             |   15 +-
 Bio/GenBank/__init__.py                            |   70 +-
 Bio/Graphics/BasicChromosome.py                    |   55 +-
 Bio/Graphics/Comparative.py                        |   10 +-
 Bio/Graphics/DisplayRepresentation.py              |    2 +-
 Bio/Graphics/__init__.py                           |    2 +-
 Bio/HMM/DynamicProgramming.py                      |    6 +-
 Bio/MarkovModel.py                                 |   24 +-
 Bio/Nexus/Nexus.py                                 |   29 +-
 Bio/Nexus/Trees.py                                 |    4 +-
 Bio/PDB/DSSP.py                                    |  174 +-
 Bio/PDB/HSExposure.py                              |    6 +-
 Bio/PDB/QCPSuperimposer/__init__.py                |   11 +-
 Bio/PDB/mmtf/DefaultParser.py                      |  162 +
 Bio/PDB/mmtf/__init__.py                           |   36 +
 Bio/PDB/parse_pdb_header.py                        |    3 +-
 Bio/Phylo/Applications/_Fasttree.py                |  424 +-
 Bio/Phylo/Applications/_Phyml.py                   |  316 +-
 Bio/Phylo/Applications/_Raxml.py                   |  251 +-
 Bio/Phylo/BaseTree.py                              |   66 +-
 Bio/Phylo/NewickIO.py                              |   16 +-
 Bio/Phylo/PAML/_parse_baseml.py                    |   32 +-
 Bio/Phylo/PAML/_parse_codeml.py                    |   30 +-
 Bio/Phylo/_cdao_owl.py                             |  448 +-
 Bio/PopGen/Async/Local.py                          |    6 +-
 Bio/PopGen/Async/__init__.py                       |   10 +-
 Bio/PopGen/FDist/Async.py                          |    3 +-
 Bio/PopGen/FDist/Controller.py                     |    2 +-
 Bio/PopGen/FDist/Utils.py                          |    1 +
 Bio/PopGen/FDist/__init__.py                       |   13 +-
 Bio/PopGen/SimCoal/Async.py                        |    4 +-
 Bio/PopGen/SimCoal/Cache.py                        |    2 +-
 Bio/PopGen/SimCoal/Controller.py                   |    5 +-
 Bio/PopGen/SimCoal/Template.py                     |    2 +
 Bio/PopGen/SimCoal/__init__.py                     |   10 +-
 Bio/Restriction/Restriction.py                     |  354 +-
 Bio/Restriction/Restriction_Dictionary.py          |  936 +++-
 Bio/Seq.py                                         |   10 +-
 Bio/SeqFeature.py                                  |  101 +-
 Bio/SeqIO/InsdcIO.py                               |  125 +-
 Bio/SeqIO/PdbIO.py                                 |    6 +-
 Bio/SeqIO/__init__.py                              |    9 +-
 Bio/SeqRecord.py                                   |   40 +-
 Bio/SeqUtils/CodonUsage.py                         |    4 +-
 Bio/SeqUtils/ProtParamData.py                      |   24 +-
 Bio/SeqUtils/__init__.py                           |    2 +-
 Bio/Sequencing/Applications/_Novoalign.py          |    3 +-
 Bio/Sequencing/Applications/_bwa.py                |  429 +-
 Bio/SubsMat/MatrixInfo.py                          | 5052 ++++++++++----------
 Bio/UniProt/GOA.py                                 |   31 +-
 Bio/__init__.py                                    |    2 +-
 Bio/_utils.py                                      |    7 +-
 Bio/bgzf.py                                        |   47 +-
 Bio/codonalign/__init__.py                         |    2 +-
 Bio/codonalign/codonalignment.py                   |    2 +-
 Bio/codonalign/codonseq.py                         |   49 +-
 Bio/cpairwise2module.c                             |  464 +-
 Bio/motifs/__init__.py                             |    5 +-
 Bio/motifs/_pwm.c                                  |    4 +
 Bio/motifs/jaspar/db.py                            |   29 +-
 Bio/motifs/matrix.py                               |    5 +-
 Bio/motifs/transfac.py                             |    2 +-
 Bio/pairwise2.py                                   |  937 ++--
 BioSQL/BioSeq.py                                   |   39 +-
 BioSQL/BioSeqDatabase.py                           |   10 +-
 BioSQL/Loader.py                                   |  114 +-
 CONTRIB                                            |  145 +-
 DEPRECATED                                         |   17 +-
 Doc/Tutorial.tex                                   |    3 +-
 Doc/Tutorial/chapter_align.tex                     |  155 +-
 Doc/Tutorial/chapter_introduction.tex              |   19 +-
 Doc/Tutorial/chapter_pdb.tex                       |   32 +
 Doc/Tutorial/chapter_popgen.tex                    |  475 --
 Doc/Tutorial/chapter_seq_annot.tex                 |    2 +-
 Doc/Tutorial/chapter_testing.tex                   |   84 +-
 Doc/examples/ACT_example.py                        |    4 +-
 Doc/examples/Proux_et_al_2002_Figure_6.py          |   26 +-
 Doc/examples/alpha.faa                             |    4 +
 Doc/examples/beta.faa                              |    4 +
 Doc/examples/getgene.py                            |   40 +-
 Doc/examples/nmr/simplepredict.py                  |    6 +-
 Doc/images/bottle.png                              |  Bin 1589 -> 0 bytes
 MANIFEST.in                                        |    1 +
 NEWS                                               |   56 +
 Scripts/GenBank/check_output.py                    |    4 +-
 Scripts/Performance/biosql_performance_load.py     |    2 +-
 Scripts/Performance/biosql_performance_read.py     |    2 +-
 Scripts/Restriction/ranacompiler.py                |   14 +-
 Scripts/SeqGui/SeqGui.py                           |  412 +-
 Scripts/scop_pdb.py                                |    4 +-
 Scripts/update_ncbi_codon_table.py                 |   96 +
 Scripts/xbbtools/nextorf.py                        |   25 +-
 Scripts/xbbtools/test.fas                          |    2 +-
 Scripts/xbbtools/testrp.fas                        |    2 +-
 Scripts/xbbtools/xbb_blast.py                      |  273 +-
 Scripts/xbbtools/xbb_blastbg.py                    |  148 +-
 Scripts/xbbtools/xbb_help.py                       |   66 +-
 Scripts/xbbtools/xbb_search.py                     |   92 +-
 Scripts/xbbtools/xbb_translations.py               |  111 +-
 Scripts/xbbtools/xbb_utils.py                      |   50 +-
 Scripts/xbbtools/xbb_widget.py                     |  352 +-
 Scripts/xbbtools/xbbtools.py                       |   26 +-
 Tests/EMBL/embl_with_0_line.embl                   |   48 +
 Tests/PAML/gen_results.py                          |    6 +-
 Tests/PDB/1A8O.mmtf                                |  Bin 0 -> 12510 bytes
 Tests/PDB/4CUP.cif                                 | 3305 +++++++++++++
 Tests/PDB/4CUP.mmtf                                |  Bin 0 -> 19438 bytes
 Tests/PDB/{4zhl.cif => 4ZHL.cif}                   |    0
 Tests/PDB/4ZHL.mmtf                                |  Bin 0 -> 27073 bytes
 Tests/PDB/Miller_RASA.txt                          |  130 +
 Tests/PDB/Sander_RASA.txt                          |  130 +
 Tests/PDB/Wilke_RASA.txt                           |  130 +
 Tests/PDB/dssp_xtra_Sander.txt                     |  130 +
 Tests/common_BioSQL.py                             |   95 +-
 Tests/common_BioSQL_online.py                      |  111 +
 Tests/output/test_GenBank                          | 1267 +----
 Tests/output/test_SeqIO                            |   24 +-
 Tests/seq_tests_common.py                          |   62 +-
 Tests/test_AlignIO_ClustalIO.py                    |    7 +-
 Tests/test_AlignIO_EmbossIO.py                     |    6 +-
 Tests/test_BioSQL_MySQLdb.py                       |    2 +-
 ...QL_MySQLdb.py => test_BioSQL_MySQLdb_online.py} |   13 +-
 Tests/test_BioSQL_mysql_connector.py               |    2 +-
 ...or.py => test_BioSQL_mysql_connector_online.py} |   13 +-
 Tests/test_BioSQL_psycopg2.py                      |    2 +-
 ..._psycopg2.py => test_BioSQL_psycopg2_online.py} |   13 +-
 Tests/test_BioSQL_sqlite3.py                       |    2 +-
 ...QL_MySQLdb.py => test_BioSQL_sqlite3_online.py} |   23 +-
 Tests/test_CAPS.py                                 |   49 +-
 Tests/test_CelFile.py                              |   58 +-
 Tests/test_Cluster.py                              |    2 +-
 Tests/test_CodonTable.py                           |    8 +
 Tests/test_Compass.py                              |    7 +-
 Tests/test_EMBL_unittest.py                        |   11 +
 Tests/test_EmbossPrimer.py                         |   36 +-
 Tests/test_Entrez.py                               | 4306 +----------------
 Tests/test_Entrez_online.py                        |   29 +-
 Tests/{test_Entrez.py => test_Entrez_parser.py}    |  185 +-
 Tests/test_GAQueens.py                             |    6 +-
 Tests/test_GenBank.py                              |    4 +-
 Tests/test_GenBank_unittest.py                     |  109 +-
 Tests/test_KGML_nographics.py                      |   30 +-
 Tests/test_MMCIF.py                                |    2 +-
 Tests/test_NCBITextParser.py                       |    8 +-
 Tests/test_NCBIXML.py                              |    2 +-
 Tests/test_NCBI_BLAST_tools.py                     |    3 +-
 Tests/test_Nexus.py                                |    2 +-
 Tests/test_PAML_codeml.py                          |    1 -
 Tests/test_PAML_yn00.py                            |    8 +-
 Tests/test_PDB.py                                  |  143 +-
 Tests/test_Phylo.py                                |   40 +-
 Tests/test_PhyloXML.py                             |  103 +-
 ...st_Phylo_depend.py => test_Phylo_matplotlib.py} |   34 +-
 Tests/test_Phylo_networkx.py                       |   40 +
 Tests/test_PopGen_DFDist.py                        |   10 +-
 Tests/test_PopGen_FDist.py                         |   11 +-
 Tests/test_PopGen_FastSimCoal.py                   |   10 +-
 Tests/test_PopGen_SimCoal.py                       |   10 +-
 Tests/test_PopGen_SimCoal_nodepend.py              |    8 +-
 Tests/test_QCPSuperimposer.py                      |    6 +-
 Tests/test_RCSBFormats.py                          |   13 +-
 Tests/test_Restriction.py                          |   12 +-
 Tests/test_SCOP_Residues.py                        |   24 +-
 Tests/test_SearchIO_hmmer2_text_index.py           |   10 +-
 Tests/test_SearchIO_hmmer3_domtab.py               |    4 +-
 Tests/test_SearchIO_hmmer3_text_index.py           |    6 +-
 Tests/test_SeqIO_AbiIO.py                          |    2 +-
 Tests/test_SeqIO_Insdc.py                          |   18 +
 Tests/test_SeqIO_QualityIO.py                      |    2 +-
 Tests/test_SeqIO_SeqXML.py                         |    7 +-
 Tests/test_SeqIO_features.py                       |   70 +-
 Tests/test_SeqIO_write.py                          |    9 +-
 Tests/test_SeqRecord.py                            |   19 +-
 Tests/test_SeqUtils.py                             |    2 +-
 Tests/test_Seq_objs.py                             |   53 +-
 Tests/test_TreeConstruction.py                     |   20 +-
 Tests/test_Tutorial.py                             |   43 +-
 Tests/test_Uniprot.py                              |    2 +-
 Tests/test_mmtf.py                                 |  100 +
 Tests/test_pairwise2.py                            |  280 +-
 Tests/test_prosite1.py                             |    2 +-
 Tests/test_raxml_tool.py                           |    2 +-
 setup.py                                           |   29 +-
 205 files changed, 14448 insertions(+), 13720 deletions(-)

diff --git a/.codecov.yml b/.codecov.yml
new file mode 100644
index 0000000..527e44b
--- /dev/null
+++ b/.codecov.yml
@@ -0,0 +1,7 @@
+# See https://github.com/codecov/support/wiki/Codecov-Yaml
+# and https://codecov.io/gh/biopython/biopython which is
+# updated via our TravisCI configuration
+
+coverage:
+  ignore:
+   - "Tests/*"
diff --git a/.gitattributes b/.gitattributes
index 12f3515..51d4546 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -18,3 +18,6 @@ Tests/Blast/wnts.xml binary
 # _pickle.UnpicklingError: the STRING opcode argument must be quoted
 
 Tests/SubsMat/acc_rep_mat.pik binary
+
+# MMTF is a binary file format,
+Tests/PDB/4CUP.mmtf binary
diff --git a/.travis-tox.ini b/.travis-tox.ini
new file mode 100644
index 0000000..2c9025f
--- /dev/null
+++ b/.travis-tox.ini
@@ -0,0 +1,110 @@
+# This is a configuration file for tox, used to test
+# Biopython on various versions of Python etc under
+# the Travis Continous Integration service which is
+# configured in the file .travis.yml
+#
+# By default tox will look for tox.ini, so this file
+# will not conflict with any personal tox setup.
+#
+# You can explicitly use this tox configuration on your
+# own machine (via the -c setting), PROVIDED you have
+# all the relevant versions of Python installed. e.g.
+# specifying a specific target envronment (via -e):
+#
+# $ pip install tox
+# $ tox -c .travis-tox.ini -e py35-nocov
+#
+# Or with test coverage:
+#
+# $ pip install tox coverage
+# $ tox -c .travis-tox.ini -e py35-cover
+#
+# Or to run the pep8 Python coding style checks:
+#
+# $ pip install tox pep8
+# $ tox -c .travis-tox.ini -e pep8
+#
+# See the envlist setting for other valid arguments.
+
+[tox]
+minversion = 2.0
+skipsdist = True
+envlist =
+    pep8
+    sdist
+    bdist_wheel
+    {py26,py27,py33,py34,py35,pypy,pypy3}-cover
+    {py26,py27,py33,py34,py35,pypy,pypy3}-nocov
+
+[testenv]
+# TODO: Try tox default sdist based install instead:
+skip_install = True
+sitepackages = True
+passenv =
+    CI
+    TRAVIS
+    TRAVIS_*
+    TOXENV
+    CODECOV_*
+whitelist_externals =
+    bash
+    echo
+# Want to avoid overhead of compiling numpy or scipy:
+install_command = pip install --only-binary=numpy,scipy {opts} {packages}
+deps =
+    #Lines startings xxx: are filtered by the environment.
+    #Leaving py34 without any soft dependencies (just numpy)
+    cover: coverage
+    cover: codecov
+    py26: unittest2
+    {py26,py27}: mysql-python
+    {py26,py27,py33,py35}: mmtf-python
+    {py26,py27,py33,py35}: reportlab
+    {py26,py27,py33,py35}: psycopg2
+    {py26,py27,py33,py35,pypy}: mysql-connector-python-rf
+    {py26,py27,py33,py35,pypy}: rdflib
+    {py26,py27,py33,py34,py35}: numpy
+    {py26,py35}: scipy
+    py27: networkx
+    py35: matplotlib
+commands =
+    #The bash call is a work around for the pipe character
+    #The yes is in case we get our prompt about missing NumPy
+    #The /dev/null is to hide the verbose output but leave warnings
+    bash -c \'/usr/bin/yes | python setup.py install > /dev/null\'
+    #The bash call is a work around for the cd command
+    nocov: bash -c \'cd Tests && python run_tests.py --offline\'
+    #See https://codecov.io/ and https://github.com/codecov/example-python
+    cover: bash -c \'rm -rf Tests/coverage.xml\'
+    cover: bash -c \'cd Tests && coverage run run_tests.py --offline && coverage xml\'
+    cover: codecov --file Tests/coverage.xml -X pycov -X gcov
+
+[testenv:pep8]
+# This does not need to install Biopython or any of its dependencies
+skip_install = True
+whitelist_externals =
+    pep8
+deps =
+    pep8
+commands =
+    pep8 --max-line-length 92 BioSQL/
+    pep8 --ignore E402 --max-line-length 90 Scripts/
+    pep8 --max-line-length 90 Doc/examples/
+    pep8 --ignore E122,E123,E126,E127,E128,E129,E501,E731 Bio/
+    pep8 --ignore E122,E123,E126,E127,E128,E241,E402,E501,E731 Tests/
+
+[testenv:sdist]
+# This does not need to install Biopython or any of its dependencies
+skip_install = True
+deps =
+commands =
+    python setup.py sdist --manifest-only
+    python setup.py sdist --formats=gztar,zip
+
+[testenv:bdist_wheel]
+# This should use NumPy while compiling our C code...
+skip_install = True
+deps =
+    numpy
+commands =
+    python setup.py bdist_wheel
diff --git a/.travis.yml b/.travis.yml
index cfee4f5..4a35900 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,34 +1,35 @@
 # Special configuration file to run tests on Travis-CI via GitHub notifications
 # See https://travis-ci.org/biopython/biopython/builds for results
 #
-# The tests are run via the coverage script, and if the tests pass the coverage
-# information is pushed to https://codecov.io/github/biopython/biopython
+# Using TravisCI's configuration alone became too complicated once we wanted
+# to cover more than just running the unit tests on different versions of
+# Python, so this now does all the complicated test configuration via TOX
+# See file .travis-tox.ini
+#
+# Environment variables setup here:
+# - TOXENV = environment used in Tox (conventionally uses py35 etc)
 #
-# Note when testing Python 3, the 'python' command will invoke Python 3
-# and similarly for PyPy too.
 
-# Environment variables setup via the matrix
-# - DEP = list of python packages to install via default pip install
-# - EXT = list of python packages to install via pip install --allow-all-external
-# - BIN = list of python packages to install via pip install --only-binary
-# - COV = yes/no; should tests be run with coverage metric collection
 language: python
 matrix:
   include:
-    - python: "2.6"
-      env: DEP="reportlab psycopg2 mysql-python unittest2" EXT=mysql-connector-python-rf BIN=scipy COV=yes
-    - python: "2.7"
-      env: DEP="reportlab psycopg2 mysql-python" EXT=mysql-connector-python-rf COV=yes
-    - python: "3.3"
-      env: DEP="reportlab psycopg2" EXT=mysql-connector-python-rf COV=yes
-    - python: "3.4"
-      env: DEP="reportlab psycopg2" EXT=mysql-connector-python-rf COV=yes
-    - python: "3.5"
-      env: DEP=reportlab psycopg2" EXT=mysql-connector-python-rf BIN=scipy COV=yes
-    - python: "pypy"
-      env: EXT="mysql-connector-python-rf" COV=yes
-    - python: "pypy3"
-      env: COV=no
+    - env: TOXENV=pep8
+    - env: TOXENV=sdist
+    - env: TOXENV=bdist_wheel
+    - python: 2.6
+      env: TOXENV=py26-cover
+    - python: 2.7
+      env: TOXENV=py27-cover
+    - python: 3.3
+      env: TOXENV=py33-cover
+    - python: 3.4
+      env: TOXENV=py34-cover
+    - python: 3.5
+      env: TOXENV=py35-cover
+    - python: pypy
+      env: TOXENV=pypy-nocov
+    - python: pypy3
+      env: TOXENV=pypy3-nocov
 
 sudo: false
 addons:
@@ -44,33 +45,14 @@ addons:
     - samtools
     - wise
 
-before_install:
-  - "pip install --upgrade pip"
-  - "pip install rdflib"
-  - "pip install $DEP"
-  - "pip install --only-binary=:all: $BIN"
-  - "pip install --allow-all-external $EXT"
-  - "if [[ $COV == 'yes' ]]; then pip install coverage; fi"
-
-
 install:
-#The yes is in case we get our prompt about missing NumPy
-  - "/usr/bin/yes | python setup.py install"
-
-before_script:
-  - cd Tests
-  - cp biosql.ini.sample biosql.ini
+  - "cp Tests/biosql.ini.sample Tests/biosql.ini"
+  - "pip install --upgrade pip setuptools"
+  - "pip install tox"
+  - "tox -c .travis-tox.ini -e $TOXENV --notest"
 
 script:
-#Using just coverage should match up to the current Python version:
-  - "if [[ $COV == 'yes' ]]; then coverage run --source=Bio,BioSQL run_tests.py --offline; fi"
-  - "if [[ $COV != 'yes' ]]; then python run_tests.py --offline; fi"
-
-after_success:
-#See https://codecov.io/ and https://github.com/codecov/example-python
-  - "if [[ $COV == 'yes' ]]; then pip install codecov; fi"
-  - "if [[ $COV == 'yes' ]]; then codecov; fi"
+  - "tox -c .travis-tox.ini -e $TOXENV"
 
-#The email defaults are too talkative
 notifications:
   email: false
diff --git a/Bio/Align/Applications/_Muscle.py b/Bio/Align/Applications/_Muscle.py
index 8a7ab88..6235971 100644
--- a/Bio/Align/Applications/_Muscle.py
+++ b/Bio/Align/Applications/_Muscle.py
@@ -45,13 +45,12 @@ class MuscleCommandline(AbstractCommandline):
         DISTANCE_MEASURES_ITER1 = ["kmer6_6", "kmer20_3", "kmer20_4", "kbit20_3",
                                    "kmer4_6"]
         DISTANCE_MEASURES_ITER2 = DISTANCE_MEASURES_ITER1 + \
-                                  ["pctid_kimura", "pctid_log"]
+            ["pctid_kimura", "pctid_log"]
         OBJECTIVE_SCORES = ["sp", "ps", "dp", "xp", "spf", "spm"]
         TREE_ROOT_METHODS = ["pseudo", "midlongestspan", "minavgleafdist"]
         SEQUENCE_TYPES = ["protein", "nucleo", "auto"]
         WEIGHTING_SCHEMES = ["none", "clustalw", "henikoff", "henikoffpb", "gsc", "threeway"]
-        self.parameters = \
-           [
+        self.parameters = [
             # Can't use "in" as the final alias as this is a reserved word in python:
             _Option(["-in", "in", "input"],
                     "Input filename",
@@ -462,7 +461,7 @@ class MuscleCommandline(AbstractCommandline):
             # version            no              Write version string to stdout and exit.
             _Switch(["-version", "version"],
                     "Write version string to stdout and exit"),
-           ]
+            ]
         AbstractCommandline.__init__(self, cmd, **kwargs)
 
 
diff --git a/Bio/Align/Applications/_TCoffee.py b/Bio/Align/Applications/_TCoffee.py
index 18f3bc2..f872c70 100644
--- a/Bio/Align/Applications/_TCoffee.py
+++ b/Bio/Align/Applications/_TCoffee.py
@@ -2,8 +2,7 @@
 # This code is part of the Biopython distribution and governed by its
 # license.  Please see the LICENSE file that should have been included
 # as part of this package.
-"""Command line wrapper for the multiple alignment program TCOFFEE.
-"""
+"""Command line wrapper for the multiple alignment program TCOFFEE."""
 
 from __future__ import print_function
 
@@ -47,58 +46,59 @@ class TCoffeeCommandline(AbstractCommandline):
 
     def __init__(self, cmd="t_coffee", **kwargs):
         self.parameters = [
-           _Option(["-output", "output"],
-                   """Specify the output type.
-                   One (or more separated by a comma) of:
-                   'clustalw_aln', 'clustalw', 'gcg', 'msf_aln',
-                   'pir_aln', 'fasta_aln', 'phylip', 'pir_seq', 'fasta_seq'
-
-                   Note that of these Biopython's AlignIO module will only
-                   read clustalw, pir, and fasta.
-                   """,  # TODO - Can we read the PHYLIP output?
-                   equate=False),
-           _Option(["-infile", "infile"],
-                   "Specify the input file.",
-                   filename=True,
-                   is_required=True,
-                   equate=False),
-           # Indicates the name of the alignment output by t_coffee. If the
-           # default is used, the alignment is named <your sequences>.aln
-           _Option(["-outfile", "outfile"],
-                   "Specify the output file. Default: <your sequences>.aln",
-                   filename=True,
-                   equate=False),
-           _Switch(["-convert", "convert"],
-                   "Specify you want to perform a file conversion"),
-           _Option(["-type", "type"],
-                   "Specify the type of sequence being aligned",
-                   checker_function=lambda x: x in self.SEQ_TYPES,
-                   equate=False),
-           _Option(["-outorder", "outorder"],
-                   "Specify the order of sequence to output"
-                   "Either 'input', 'aligned' or <filename> of "
-                   "Fasta file with sequence order",
-                   equate=False),
-           _Option(["-matrix", "matrix"],
-                   "Specify the filename of the substitution matrix to use."
-                   "Default: blosum62mt",
-                   equate=False),
-           _Option(["-gapopen", "gapopen"],
-                   "Indicates the penalty applied for opening a gap "
-                   "(negative integer)",
-                   checker_function=lambda x: isinstance(x, int),
-                   equate=False),
-           _Option(["-gapext", "gapext"],
-                   "Indicates the penalty applied for extending a "
-                   "gap. (negative integer)",
-                   checker_function=lambda x: isinstance(x, int),
-                   equate=False),
-           _Switch(["-quiet", "quiet"],
-                   "Turn off log output"),
-           _Option(["-mode", "mode"],
-                   "Specifies a special mode: genome, quickaln, dali, 3dcoffee",
-                   equate=False),
-           ]
+            _Option(["-output", "output"],
+                    """Specify the output type.
+
+                    One (or more separated by a comma) of:
+                    'clustalw_aln', 'clustalw', 'gcg', 'msf_aln',
+                    'pir_aln', 'fasta_aln', 'phylip', 'pir_seq', 'fasta_seq'
+
+                    Note that of these Biopython's AlignIO module will only
+                    read clustalw, pir, and fasta.
+                    """,  # TODO - Can we read the PHYLIP output?
+                    equate=False),
+            _Option(["-infile", "infile"],
+                    "Specify the input file.",
+                    filename=True,
+                    is_required=True,
+                    equate=False),
+            # Indicates the name of the alignment output by t_coffee. If the
+            # default is used, the alignment is named <your sequences>.aln
+            _Option(["-outfile", "outfile"],
+                    "Specify the output file. Default: <your sequences>.aln",
+                    filename=True,
+                    equate=False),
+            _Switch(["-convert", "convert"],
+                    "Specify you want to perform a file conversion"),
+            _Option(["-type", "type"],
+                    "Specify the type of sequence being aligned",
+                    checker_function=lambda x: x in self.SEQ_TYPES,
+                    equate=False),
+            _Option(["-outorder", "outorder"],
+                    "Specify the order of sequence to output"
+                    "Either 'input', 'aligned' or <filename> of "
+                    "Fasta file with sequence order",
+                    equate=False),
+            _Option(["-matrix", "matrix"],
+                    "Specify the filename of the substitution matrix to use."
+                    "Default: blosum62mt",
+                    equate=False),
+            _Option(["-gapopen", "gapopen"],
+                    "Indicates the penalty applied for opening a gap "
+                    "(negative integer)",
+                    checker_function=lambda x: isinstance(x, int),
+                    equate=False),
+            _Option(["-gapext", "gapext"],
+                    "Indicates the penalty applied for extending a gap "
+                    "(negative integer)",
+                    checker_function=lambda x: isinstance(x, int),
+                    equate=False),
+            _Switch(["-quiet", "quiet"],
+                    "Turn off log output"),
+            _Option(["-mode", "mode"],
+                    "Specifies a special mode: genome, quickaln, dali, 3dcoffee",
+                    equate=False),
+            ]
         AbstractCommandline.__init__(self, cmd, **kwargs)
 
 
diff --git a/Bio/Align/Generic.py b/Bio/Align/Generic.py
index 0f1411e..034229a 100644
--- a/Bio/Align/Generic.py
+++ b/Bio/Align/Generic.py
@@ -50,7 +50,10 @@ class Alignment(object):
         """
         import warnings
         import Bio
-        warnings.warn("With the introduction of the MultipleSeqAlignment class in Bio.Align, this base class is deprecated and is likely to be removed in a future release of Biopython.", Bio.BiopythonDeprecationWarning)
+        warnings.warn("With the introduction of the MultipleSeqAlignment "
+                      "class in Bio.Align, this base class is deprecated "
+                      "and is likely to be removed in a future release of "
+                      "Biopython.", Bio.BiopythonDeprecationWarning)
         if not (isinstance(alphabet, Alphabet.Alphabet) or
                 isinstance(alphabet, Alphabet.AlphabetEncoder)):
             raise ValueError("Invalid alphabet argument")
@@ -242,7 +245,12 @@ class Alignment(object):
         """
         import warnings
         import Bio
-        warnings.warn("This is a legacy method and is likely to be removed in a future release of Biopython. In new code where you need to access the rows of the alignment (i.e. the sequences) consider iterating over them or accessing them as SeqRecord objects.", Bio.BiopythonDeprecationWarning)
+        warnings.warn("This is a legacy method and is likely to be removed "
+                      "in a future release of Biopython. In new code where "
+                      "you need to access the rows of the alignment (i.e. the "
+                      "sequences) consider iterating over them or accessing "
+                      "them as SeqRecord objects.",
+                      Bio.BiopythonDeprecationWarning)
         return self._records[number].seq
 
     def __len__(self):
diff --git a/Bio/Align/__init__.py b/Bio/Align/__init__.py
index 2af9ab1..7bdcc92 100644
--- a/Bio/Align/__init__.py
+++ b/Bio/Align/__init__.py
@@ -614,8 +614,12 @@ class MultipleSeqAlignment(_Alignment):
         of Biopython..
         """
         import warnings
-        import Bio
-        warnings.warn("This method is deprecated and is provided for backwards compatibility with the old Bio.Align.Generic.Alignment object. Please use the slice notation instead, as get_column is likely to be removed in a future release of Biopython.", Bio.BiopythonDeprecationWarning)
+        from Bio import BiopythonDeprecationWarning
+        warnings.warn("This method is deprecated and is provided for backwards "
+                      "compatibility with the old Bio.Align.Generic.Alignment "
+                      "object. Please use the slice notation instead, as "
+                      "get_column is likely to be removed in a future release "
+                      "of Biopython.", BiopythonDeprecationWarning)
         return _Alignment.get_column(self, col)
 
     def add_sequence(self, descriptor, sequence, start=None, end=None,
@@ -629,8 +633,14 @@ class MultipleSeqAlignment(_Alignment):
         future release of Biopython.
         """
         import warnings
-        import Bio
-        warnings.warn("The start, end, and weight arguments are not supported! This method only provides limited backwards compatibility with the old Bio.Align.Generic.Alignment object. Please use the append method with a SeqRecord instead, as the add_sequence method is likely to be removed in a future release of Biopython.", Bio.BiopythonDeprecationWarning)
+        from Bio import BiopythonDeprecationWarning
+        warnings.warn("The start, end, and weight arguments are not supported! "
+                      "This method only provides limited backwards "
+                      "compatibility with the old Bio.Align.Generic.Alignment "
+                      "object. Please use the append method with a SeqRecord "
+                      "instead, as the add_sequence method is likely to be "
+                      "removed in a future release of Biopython.",
+                      BiopythonDeprecationWarning)
         # Should we handle start/end/strand information somehow? What for?
         # TODO - Should we handle weights somehow? See also AlignInfo code...
         if start is not None or end is not None or weight != 1.0:
diff --git a/Bio/AlignIO/ClustalIO.py b/Bio/AlignIO/ClustalIO.py
index aed9489..4ff63ff 100644
--- a/Bio/AlignIO/ClustalIO.py
+++ b/Bio/AlignIO/ClustalIO.py
@@ -1,4 +1,4 @@
-# Copyright 2006-2013 by Peter Cock.  All rights reserved.
+# Copyright 2006-2016 by Peter Cock.  All rights reserved.
 #
 # This code is part of the Biopython distribution and governed by its
 # license.  Please see the LICENSE file that should have been included
@@ -73,7 +73,7 @@ class ClustalWriter(SequentialAlignmentWriter):
             # This was stored by Bio.Clustalw using a ._star_info property.
             if hasattr(alignment, "_star_info") and alignment._star_info != '':
                 output += (" " * 36) + \
-                     alignment._star_info[cur_char:(cur_char + show_num)] + "\n"
+                    alignment._star_info[cur_char:(cur_char + show_num)] + "\n"
 
             output += "\n"
             cur_char += show_num
@@ -146,7 +146,8 @@ class ClustalIterator(AlignmentIterator):
 
                 # Record the sequence position to get the consensus
                 if seq_cols is None:
-                    start = len(fields[0]) + line[len(fields[0]):].find(fields[1])
+                    start = len(fields[0]) + \
+                        line[len(fields[0]):].find(fields[1])
                     end = start + len(fields[1])
                     seq_cols = slice(start, end)
                     del start, end
@@ -157,9 +158,11 @@ class ClustalIterator(AlignmentIterator):
                     try:
                         letters = int(fields[2])
                     except ValueError:
-                        raise ValueError("Could not parse line, bad sequence number:\n%s" % line)
+                        raise ValueError("Could not parse line, "
+                                         "bad sequence number:\n%s" % line)
                     if len(fields[1].replace("-", "")) != letters:
-                        raise ValueError("Could not parse line, invalid sequence number:\n%s" % line)
+                        raise ValueError("Could not parse line, "
+                                         "invalid sequence number:\n%s" % line)
             elif line[0] == " ":
                 # Sequence consensus line...
                 assert len(ids) == len(seqs)
@@ -217,12 +220,15 @@ class ClustalIterator(AlignmentIterator):
                     raise ValueError("Could not parse line:\n%s" % repr(line))
 
                 if fields[0] != ids[i]:
-                    raise ValueError("Identifiers out of order? Got '%s' but expected '%s'"
-                                      % (fields[0], ids[i]))
+                    raise ValueError("Identifiers out of order? "
+                                     "Got '%s' but expected '%s'"
+                                     % (fields[0], ids[i]))
 
                 if fields[1] != line[seq_cols]:
-                    start = len(fields[0]) + line[len(fields[0]):].find(fields[1])
-                    assert start == seq_cols.start, 'Old location %s -> %i:XX' % (seq_cols, start)
+                    start = len(fields[0]) + \
+                        line[len(fields[0]):].find(fields[1])
+                    assert start == seq_cols.start, \
+                        'Old location %s -> %i:XX' % (seq_cols, start)
                     end = start + len(fields[1])
                     seq_cols = slice(start, end)
                     del start, end
@@ -236,9 +242,12 @@ class ClustalIterator(AlignmentIterator):
                     try:
                         letters = int(fields[2])
                     except ValueError:
-                        raise ValueError("Could not parse line, bad sequence number:\n%s" % line)
+                        raise ValueError("Could not parse line, "
+                                         "bad sequence number:\n%s" %
+                                         line)
                     if len(seqs[i].replace("-", "")) != letters:
-                        raise ValueError("Could not parse line, invalid sequence number:\n%s" % line)
+                        raise ValueError("Could not parse line, "
+                                         "invalid sequence number:\n%s" % line)
 
                 # Read in the next line
                 line = handle.readline()
@@ -257,9 +266,10 @@ class ClustalIterator(AlignmentIterator):
         if len(seqs) == 0 or len(seqs[0]) == 0:
             raise StopIteration
 
-        if self.records_per_alignment is not None \
-        and self.records_per_alignment != len(ids):
-            raise ValueError("Found %i records in this alignment, told to expect %i"
+        if self.records_per_alignment is not None and \
+                self.records_per_alignment != len(ids):
+            raise ValueError("Found %i records in this alignment, "
+                             "told to expect %i"
                              % (len(ids), self.records_per_alignment))
 
         records = (SeqRecord(Seq(s, self.alphabet), id=i, description=i)
@@ -272,7 +282,7 @@ class ClustalIterator(AlignmentIterator):
         if consensus:
             alignment_length = len(seqs[0])
             assert len(consensus) == alignment_length, \
-                   "Alignment length is %i, consensus length is %i, '%s'" \
-                   % (alignment_length, len(consensus), consensus)
+                "Alignment length is %i, consensus length is %i, '%s'" \
+                % (alignment_length, len(consensus), consensus)
             alignment._star_info = consensus
         return alignment
diff --git a/Bio/AlignIO/NexusIO.py b/Bio/AlignIO/NexusIO.py
index 544734b..91c05bb 100644
--- a/Bio/AlignIO/NexusIO.py
+++ b/Bio/AlignIO/NexusIO.py
@@ -158,7 +158,7 @@ if __name__ == "__main__":
     CYS1_DICDI          -----MKVIL LFVLAVFTVF VSS------- --------RG IPPEEQ---X
     ;
     end; 
-    """)
+    """)  # noqa for pep8 W291 trailing whitespace
     for a in NexusIterator(handle):
         print(a)
         for r in a:
@@ -188,7 +188,7 @@ if __name__ == "__main__":
     CYS1_DICDI          -----MKVIL LFVLAVFTVF VSS------- --------RG IPPEEQ---X
     ;
     end; 
-    """)
+    """)  # noqa for pep8 W291 trailing whitespace
     for a in NexusIterator(handle):
         print(a)
         for r in a:
diff --git a/Bio/AlignIO/PhylipIO.py b/Bio/AlignIO/PhylipIO.py
index 95c9703..86b9f43 100644
--- a/Bio/AlignIO/PhylipIO.py
+++ b/Bio/AlignIO/PhylipIO.py
@@ -1,4 +1,4 @@
-# Copyright 2006-2013 by Peter Cock.  All rights reserved.
+# Copyright 2006-2016 by Peter Cock.  All rights reserved.
 # Revisions copyright 2011 Brandon Invergo. All rights reserved.
 # This code is part of the Biopython distribution and governed by its
 # license.  Please see the LICENSE file that should have been included
@@ -45,6 +45,7 @@ from .Interfaces import AlignmentIterator, SequentialAlignmentWriter
 
 
 _PHYLIP_ID_WIDTH = 10
+_NO_DOTS = "PHYLIP format no longer allows dots in sequence"
 
 
 class PhylipWriter(SequentialAlignmentWriter):
@@ -111,8 +112,7 @@ class PhylipWriter(SequentialAlignmentWriter):
             sequence = str(record.seq)
             if "." in sequence:
                 # Do this check here (once per record, not once per block)
-                raise ValueError("PHYLIP format no longer allows dots in "
-                                 "sequence")
+                raise ValueError(_NO_DOTS)
             seqs.append(sequence)
 
         # From experimentation, the use of tabs is not understood by the
@@ -215,9 +215,10 @@ class PhylipIterator(AlignmentIterator):
 
         assert self._is_header(line)
 
-        if self.records_per_alignment is not None \
-        and self.records_per_alignment != number_of_seqs:
-            raise ValueError("Found %i records in this alignment, told to expect %i"
+        if self.records_per_alignment is not None and \
+                self.records_per_alignment != number_of_seqs:
+            raise ValueError("Found %i records in this alignment, "
+                             "told to expect %i"
                              % (number_of_seqs, self.records_per_alignment))
 
         ids = []
@@ -230,7 +231,7 @@ class PhylipIterator(AlignmentIterator):
             sequence_id, s = self._split_id(line)
             ids.append(sequence_id)
             if "." in s:
-                raise ValueError("PHYLIP format no longer allows dots in sequence")
+                raise ValueError(_NO_DOTS)
             seqs.append([s])
 
         # Look for further blocks
@@ -253,7 +254,7 @@ class PhylipIterator(AlignmentIterator):
             for i in range(number_of_seqs):
                 s = line.strip().replace(" ", "")
                 if "." in s:
-                    raise ValueError("PHYLIP format no longer allows dots in sequence")
+                    raise ValueError(_NO_DOTS)
                 seqs[i].append(s)
                 line = handle.readline()
                 if (not line) and i + 1 < number_of_seqs:
@@ -281,7 +282,7 @@ class RelaxedPhylipWriter(PhylipWriter):
         for name in (s.id.strip() for s in alignment):
             if any(c in name for c in string.whitespace):
                 raise ValueError("Whitespace not allowed in identifier: %s"
-                        % name)
+                                 % name)
 
         # Calculate a truncation length - maximum length of sequence ID plus a
         # single character for padding
@@ -351,8 +352,7 @@ class SequentialPhylipWriter(SequentialAlignmentWriter):
         for name, record in zip(names, alignment):
             sequence = str(record.seq)
             if "." in sequence:
-                raise ValueError("PHYLIP format no longer allows dots in "
-                                 "sequence")
+                raise ValueError(_NO_DOTS)
             handle.write(name[:id_width].ljust(id_width))
             # Write the entire sequence to one line (see sequential format
             # notes in the SequentialPhylipIterator docstring
@@ -361,14 +361,14 @@ class SequentialPhylipWriter(SequentialAlignmentWriter):
 
 
 class SequentialPhylipIterator(PhylipIterator):
-    """
-    Sequential Phylip format Iterator
+    """Sequential Phylip format Iterator.
 
     The sequential format carries the same restrictions as the normal
     interleaved one, with the difference being that the sequences are listed
     sequentially, each sequence written in its entirety before the start of
-    the next. According to the PHYLIP documentation for input file formatting,
-    newlines and spaces may optionally be entered at any point in the sequences.
+    the next. According to the PHYLIP documentation for input file
+    formatting, newlines and spaces may optionally be entered at any point
+    in the sequences.
     """
 
     _header = None  # for caching lines between __next__ calls
@@ -398,9 +398,10 @@ class SequentialPhylipIterator(PhylipIterator):
 
         assert self._is_header(line)
 
-        if self.records_per_alignment is not None \
-        and self.records_per_alignment != number_of_seqs:
-            raise ValueError("Found %i records in this alignment, told to expect %i"
+        if self.records_per_alignment is not None and \
+                self.records_per_alignment != number_of_seqs:
+            raise ValueError("Found %i records in this alignment, "
+                             "told to expect %i"
                              % (number_of_seqs, self.records_per_alignment))
 
         ids = []
@@ -421,10 +422,11 @@ class SequentialPhylipIterator(PhylipIterator):
                     continue
                 s = "".join([s, line.strip().replace(" ", "")])
                 if len(s) > length_of_seqs:
-                    raise ValueError("Found a record of length %i, should be %i"
-                            % (len(s), length_of_seqs))
+                    raise ValueError("Found a record of length %i, "
+                                     "should be %i"
+                                     % (len(s), length_of_seqs))
             if "." in s:
-                raise ValueError("PHYLIP format no longer allows dots in sequence")
+                raise ValueError(_NO_DOTS)
             seqs.append(s)
         while True:
             # Find other alignments in the file
diff --git a/Bio/Alphabet/Reduced.py b/Bio/Alphabet/Reduced.py
index a375ae5..6a4885c 100644
--- a/Bio/Alphabet/Reduced.py
+++ b/Bio/Alphabet/Reduced.py
@@ -47,8 +47,7 @@ murphy_15_tab = {"L": "L",
                  "Q": "Q",
                  "K": "K",
                  "R": "K",
-                 "H": "H",
-}
+                 "H": "H"}
 
 
 class Murphy15(Alphabet.ProteinAlphabet):
diff --git a/Bio/Blast/Applications.py b/Bio/Blast/Applications.py
index 2d2f388..82d700d 100644
--- a/Bio/Blast/Applications.py
+++ b/Bio/Blast/Applications.py
@@ -59,7 +59,7 @@ class _NcbibaseblastCommandline(AbstractCommandline):
                     "Alignment view.  Integer 0-11.  Use 5 for XML output "
                     "(differs from classic BLAST which used 7 for XML).",
                     equate=False),
-                    # TODO - Document and test the column options
+            # TODO - Document and test the column options
             _Switch(["-show_gis", "show_gis"],
                     "Show NCBI GIs in deflines?"),
             _Option(["-num_descriptions", "num_descriptions"],
@@ -185,10 +185,10 @@ class _NcbiblastCommandline(_NcbibaseblastCommandline):
                     "Effective length of the search space (integer).",
                     equate=False),
             _Option(["-max_hsps_per_subject", "max_hsps_per_subject"],
-                    "Override maximum number of HSPs per subject to save for ungapped searches (integer).",
+                    "Override max number of HSPs per subject saved for ungapped searches (integer).",
                     equate=False),
             _Option(["-max_hsps", "max_hsps"],
-                    "Set maximum number of HSPs per subject sequence to save (default 0 means no limit).",
+                    "Set max number of HSPs saved per subject sequence (default 0 means no limit).",
                     equate=False),
             _Switch(["-sum_statistics", "sum_statistics"],
                     "Use sum statistics."),
@@ -614,8 +614,10 @@ class NcbiblastxCommandline(_NcbiblastMain2SeqCommandline):
                     D or d: default (equivalent to 2 )
                     0 or F or f: no composition-based statistics
                     1: Composition-based statistics as in NAR 29:2994-3005, 2001
-                    2 or T or t : Composition-based score adjustment as in Bioinformatics 21:902-911, 2005, conditioned on sequence properties
-                    3: Composition-based score adjustment as in Bioinformatics 21:902-911, 2005, unconditionally
+                    2 or T or t : Composition-based score adjustment as in
+                    Bioinformatics 21:902-911, 2005, conditioned on sequence properties
+                    3: Composition-based score adjustment as in
+                    Bioinformatics 21:902-911, 2005, unconditionally
 
                     For programs other than tblastn, must either be absent or be D, F or 0
                     Default = `2'
@@ -1166,7 +1168,7 @@ class NcbideltablastCommandline(_Ncbiblast2SeqCommandline):
                     (float, Default is 0.05)""",
                     equate=False),
             _Option(["-inclusion_ethresh", "inclusion_ethresh"],
-                    "E-value inclusion threshold for pairwise alignments (float, Default is 0.002).",
+                    "Pairwise alignment e-value inclusion threshold (float, default 0.002).",
                     equate=False),
             # DELTA-BLAST options
             _Option(["-rpsdb", "rpsdb"],
diff --git a/Bio/Blast/NCBIStandalone.py b/Bio/Blast/NCBIStandalone.py
index d2f1f70..be4e4d0 100644
--- a/Bio/Blast/NCBIStandalone.py
+++ b/Bio/Blast/NCBIStandalone.py
@@ -153,7 +153,7 @@ class _Scanner(object):
 
         # Read the reference(s)
         while attempt_read_and_call(uhandle,
-                                consumer.reference, start='Reference'):
+                                    consumer.reference, start='Reference'):
             # References are normally multiline terminated by a blank line
             # (or, based on the old code, the RID line)
             while True:
@@ -275,7 +275,7 @@ class _Scanner(object):
         # If this happens, the handle will yield no more information.
         if not uhandle.peekline():
             raise ValueError("Unexpected end of blast report.  " +
-                  "Looks suspiciously like a PSI-BLAST crash.")
+                             "Looks suspiciously like a PSI-BLAST crash.")
 
         # BLASTN 2.2.3 sometimes spews a bunch of warnings and errors here:
         # Searching[blastall] WARNING:  [000.000]  AT1G08320: SetUpBlastSearch
@@ -438,8 +438,7 @@ class _Scanner(object):
         read_and_call(uhandle, consumer.title, start='>')
         while True:
             line = safe_readline(uhandle)
-            if line.lstrip().startswith('Length =') \
-            or line.lstrip().startswith('Length='):
+            if line.lstrip().startswith(('Length =', 'Length=')):
                 consumer.length(line)
                 break
             elif is_blank_line(line):
@@ -579,12 +578,12 @@ class _Scanner(object):
         # Sameet Mehta reported seeing output from BLASTN 2.2.9 that
         # was missing the "Database" stanza completely.
         while attempt_read_and_call(uhandle, consumer.database,
-                start='  Database'):
+                                    start='  Database'):
             # BLAT output ends abruptly here, without any of the other
             # information.  Check to see if this is the case.  If so,
             # then end the database report here gracefully.
-            if not uhandle.peekline().strip() \
-            or uhandle.peekline().startswith("BLAST"):
+            if not uhandle.peekline().strip() or \
+                    uhandle.peekline().startswith("BLAST"):
                 consumer.end_database_report()
                 return
 
@@ -592,9 +591,9 @@ class _Scanner(object):
             read_and_call_until(uhandle, consumer.database, start='    Posted')
             read_and_call(uhandle, consumer.posted_date, start='    Posted')
             read_and_call(uhandle, consumer.num_letters_in_database,
-                       start='  Number of letters')
+                          start='  Number of letters')
             read_and_call(uhandle, consumer.num_sequences_in_database,
-                       start='  Number of sequences')
+                          start='  Number of sequences')
             # There may not be a line starting with spaces...
             attempt_read_and_call(uhandle, consumer.noevent, start='  ')
 
@@ -700,16 +699,16 @@ class _Scanner(object):
         attempt_read_and_call(uhandle, consumer.num_sequences,
                               start='Number of Sequences')
         attempt_read_and_call(uhandle, consumer.num_hits,
-                      start='Number of Hits')
+                              start='Number of Hits')
         attempt_read_and_call(uhandle, consumer.num_sequences,
                               start='Number of Sequences')
         attempt_read_and_call(uhandle, consumer.num_extends,
-                      start='Number of extensions')
+                              start='Number of extensions')
         attempt_read_and_call(uhandle, consumer.num_good_extends,
-                      start='Number of successful')
+                              start='Number of successful')
 
         attempt_read_and_call(uhandle, consumer.num_seqs_better_e,
-                      start='Number of sequences')
+                              start='Number of sequences')
 
         # not BLASTN, TBLASTX
         if attempt_read_and_call(uhandle, consumer.hsps_no_gap,
@@ -721,7 +720,7 @@ class _Scanner(object):
                               start="Number of HSP's successfully")
                 # This is omitted in 2.2.15
                 attempt_read_and_call(uhandle, consumer.noevent,
-                              start="Number of extra gapped extensions")
+                                      start="Number of extra gapped extensions")
             else:
                 read_and_call(uhandle, consumer.hsps_prelim_gapped,
                               start="Number of HSP's successfully")
@@ -731,7 +730,7 @@ class _Scanner(object):
                               start="Number of HSP's gapped")
         # e.g. BLASTX 2.2.15 where the "better" line is missing
         elif attempt_read_and_call(uhandle, consumer.noevent,
-                                     start="Number of HSP's gapped"):
+                                   start="Number of HSP's gapped"):
             read_and_call(uhandle, consumer.noevent,
                           start="Number of HSP's successfully")
 
@@ -740,7 +739,7 @@ class _Scanner(object):
                               has_re=re.compile(r"[Ll]ength of query"))
         # Not in BLASTX 2.2.22+
         attempt_read_and_call(uhandle, consumer.database_length,
-                          has_re=re.compile(r"[Ll]ength of \s*[Dd]atabase"))
+                              has_re=re.compile(r"[Ll]ength of \s*[Dd]atabase"))
 
         # BLASTN 2.2.9
         attempt_read_and_call(uhandle, consumer.noevent,
@@ -1423,28 +1422,32 @@ class _ParametersConsumer(object):
             self._params.effective_search_space_used)
 
     def frameshift(self, line):
-        self._params.frameshift = _get_cols(
-           line, (4, 5), ncols=6, expected={0: "frameshift", 2: "decay"})
+        self._params.frameshift = _get_cols(line, (4, 5), ncols=6,
+                                            expected={0: "frameshift", 2: "decay"})
 
     def threshold(self, line):
         if line[:2] == "T:":
             # Assume its an old style line like "T: 123"
-            self._params.threshold, = _get_cols(
-                line, (1,), ncols=2, expected={0: "T:"})
+            self._params.threshold, = _get_cols(line, (1,), ncols=2,
+                                                expected={0: "T:"})
         elif line[:28] == "Neighboring words threshold:":
-            self._params.threshold, = _get_cols(
-                line, (3,), ncols=4, expected={0: "Neighboring", 1: "words", 2: "threshold:"})
+            self._params.threshold, = _get_cols(line, (3,), ncols=4,
+                                                expected={0: "Neighboring",
+                                                          1: "words",
+                                                          2: "threshold:"})
         else:
             raise ValueError("Unrecognised threshold line:\n%s" % line)
         self._params.threshold = _safe_int(self._params.threshold)
 
     def window_size(self, line):
         if line[:2] == "A:":
-            self._params.window_size, = _get_cols(
-                line, (1,), ncols=2, expected={0: "A:"})
+            self._params.window_size, = _get_cols(line, (1,), ncols=2,
+                                                  expected={0: "A:"})
         elif line[:25] == "Window for multiple hits:":
-            self._params.window_size, = _get_cols(
-                line, (4,), ncols=5, expected={0: "Window", 2: "multiple", 3: "hits:"})
+            self._params.window_size, = _get_cols(line, (4,), ncols=5,
+                                                  expected={0: "Window",
+                                                            2: "multiple",
+                                                            3: "hits:"})
         else:
             raise ValueError("Unrecognised window size line:\n%s" % line)
         self._params.window_size = _safe_int(self._params.window_size)
diff --git a/Bio/Blast/NCBIWWW.py b/Bio/Blast/NCBIWWW.py
index 2145027..d275e05 100644
--- a/Bio/Blast/NCBIWWW.py
+++ b/Bio/Blast/NCBIWWW.py
@@ -9,8 +9,7 @@
 """Code to invoke the NCBI BLAST server over the internet.
 
 This module provides code to work with the WWW version of BLAST
-provided by the NCBI.
-http://blast.ncbi.nlm.nih.gov/
+provided by the NCBI. https://blast.ncbi.nlm.nih.gov/
 """
 
 from __future__ import print_function
@@ -22,7 +21,7 @@ from Bio._py3k import urlencode as _urlencode
 from Bio._py3k import Request as _Request
 
 
-NCBI_BLAST_URL = "http://blast.ncbi.nlm.nih.gov/Blast.cgi"
+NCBI_BLAST_URL = "https://blast.ncbi.nlm.nih.gov/Blast.cgi"
 
 
 def qblast(program, database, sequence, url_base=NCBI_BLAST_URL,
diff --git a/Bio/Compass/__init__.py b/Bio/Compass/__init__.py
index 75afe99..8fcc858 100644
--- a/Bio/Compass/__init__.py
+++ b/Bio/Compass/__init__.py
@@ -137,7 +137,7 @@ __regex = {"names": re.compile("Ali1:\s+(\S+)\s+Ali2:\s+(\S+)\s+"),
            "start": re.compile("(\d+)"),
            "align": re.compile("^.{15}(\S+)"),
            "positive_alignment": re.compile("^.{15}(.+)"),
-          }
+           }
 
 
 def __read_names(record, line):
diff --git a/Bio/Data/CodonTable.py b/Bio/Data/CodonTable.py
index 4d96cb2..c0aea76 100644
--- a/Bio/Data/CodonTable.py
+++ b/Bio/Data/CodonTable.py
@@ -3,8 +3,9 @@
 # as part of this package.
 """Codon tables based on those from the NCBI.
 
-These tables are based on parsing the NCBI file:
+These tables are based on parsing the NCBI file
 ftp://ftp.ncbi.nih.gov/entrez/misc/data/gc.prt
+using Scripts/update_ncbi_codon_table.py
 
 Last updated at Version 4.0
 """
@@ -392,8 +393,9 @@ def register_ncbi_table(name, alt_name, id,
                         table, start_codons, stop_codons):
     """Turns codon table data into objects, and stores them in the dictionaries (PRIVATE)."""
     # In most cases names are divided by "; ", however there is also
-    # 'Bacterial and Plant Plastid' (which used to be just 'Bacterial')
-    names = [x.strip() for x in name.replace(" and ", "; ").split("; ")]
+    # Table 11 'Bacterial, Archaeal and Plant Plastid Code', previously
+    # 'Bacterial and Plant Plastid' which used to be just 'Bacterial'
+    names = [x.strip() for x in name.replace(" and ", "; ").replace(", ", "; ").split("; ")]
 
     dna = NCBICodonTableDNA(id, names + [alt_name], table, start_codons,
                             stop_codons)
@@ -472,83 +474,10 @@ def register_ncbi_table(name, alt_name, id,
         ambiguous_generic_by_name[name] = ambig_generic
 
 
-# These tables created from the data file
-#  ftp://ftp.ncbi.nih.gov/entrez/misc/data/gc.prt
-# using the following:
-# import re
-# for line in open("gc.prt").readlines():
-#     if line[:2] == " {":
-#         names = []
-#         id = None
-#         aa = None
-#         start = None
-#         bases = []
-#     elif line[:6] == "  name":
-#         names.append(re.search('"([^"]*)"', line).group(1))
-#     elif line[:8] == "    name":
-#         names.append(re.search('"(.*)$', line).group(1))
-#     elif line == ' Mitochondrial; Mycoplasma; Spiroplasma" ,\n':
-#         names[-1] = names[-1] + " Mitochondrial; Mycoplasma; Spiroplasma"
-#     elif line[:4] == "  id":
-#         id = int(re.search('(\d+)', line).group(1))
-#     elif line[:10] == "  ncbieaa ":
-#         aa = line[12:12+64]
-#     elif line[:10] == "  sncbieaa":
-#         start = line[12:12+64]
-#     elif line[:9] == "  -- Base":
-#         bases.append(line[12:12+64])
-#     elif line[:2] == " }":
-#         assert names != [] and id is not None and aa is not None
-#         assert start is not None and bases != []
-#         if len(names) == 1:
-#             names.append(None)
-#         print("register_ncbi_table(name=%s," % repr(names[0]))
-#         print("                    alt_name=%s, id=%d," % \
-#               (repr(names[1]), id))
-#         print("                    table={")
-#         s = "    "
-#         for i in range(64):
-#             if aa[i] != "*":
-#                 t = " '%s%s%s': '%s'," % (bases[0][i], bases[1][i],
-#                                           bases[2][i], aa[i])
-#                 if len(s) + len(t) > 75:
-#                     print(s)
-#                     s = "    " + t
-#                 else:
-#                     s = s + t
-#         print("%s }," % s)
-
-#         s = "                    stop_codons=["
-#         for i in range(64):
-#             if aa[i] == "*":
-#                 t = "'%s%s%s'," % (bases[0][i], bases[1][i], bases[2][i])
-#                 if len(s) + len(t) > 75:
-#                     s_with_spaces = s.replace("','", "', '")
-#                     print(s_with_spaces)
-#                     s = "                                    " + t
-#                 else:
-#                     s = s + t
-#         s_with_spaces = s.replace("','", "', '")
-#         print("%s ]," % s_with_spaces)
-
-#         s = "                    start_codons=["
-#         for i in range(64):
-#             if start[i] == "M":
-#                 t = "'%s%s%s'," % (bases[0][i], bases[1][i], bases[2][i])
-#                 if len(s) + len(t) > 75:
-#                     s_with_spaces = s.replace("','", "', '")
-#                     print(s_with_spaces)
-#                     s = "                                    " + t
-#                 else:
-#                     s = s + t
-#         s_with_spaces = s.replace("','", "', '")
-#         print("%s ]" % s_with_spaces)
-#         print("                    )")
-#     elif line[:2] == "--" or line == "\n" or line == "}\n" or \
-#          line == 'Genetic-code-table ::= {\n':
-#         pass
-#     else:
-#         raise Exception("Unparsed: " + repr(line))
+##########################################################################
+# Start of auto-generated output from Scripts/update_ncbi_codon_table.py #
+##########################################################################
+
 
 register_ncbi_table(name='Standard',
                     alt_name='SGC0', id=1,
@@ -566,9 +495,9 @@ register_ncbi_table(name='Standard',
      'GCC': 'A', 'GCA': 'A', 'GCG': 'A', 'GAT': 'D', 'GAC': 'D',
      'GAA': 'E', 'GAG': 'E', 'GGT': 'G', 'GGC': 'G', 'GGA': 'G',
      'GGG': 'G', },
-                    stop_codons=['TAA', 'TAG', 'TGA', ],
-                    start_codons=['TTG', 'CTG', 'ATG', ]
-                    )
+                    stop_codons=['TAA', 'TAG', 'TGA'],
+                    start_codons=['TTG', 'CTG', 'ATG'])
+
 register_ncbi_table(name='Vertebrate Mitochondrial',
                     alt_name='SGC1', id=2,
                     table={
@@ -584,9 +513,9 @@ register_ncbi_table(name='Vertebrate Mitochondrial',
      'GTC': 'V', 'GTA': 'V', 'GTG': 'V', 'GCT': 'A', 'GCC': 'A',
      'GCA': 'A', 'GCG': 'A', 'GAT': 'D', 'GAC': 'D', 'GAA': 'E',
      'GAG': 'E', 'GGT': 'G', 'GGC': 'G', 'GGA': 'G', 'GGG': 'G', },
-                    stop_codons=['TAA', 'TAG', 'AGA', 'AGG', ],
-                    start_codons=['ATT', 'ATC', 'ATA', 'ATG', 'GTG', ]
-                    )
+                    stop_codons=['TAA', 'TAG', 'AGA', 'AGG'],
+                    start_codons=['ATT', 'ATC', 'ATA', 'ATG', 'GTG'])
+
 register_ncbi_table(name='Yeast Mitochondrial',
                     alt_name='SGC2', id=3,
                     table={
@@ -603,9 +532,9 @@ register_ncbi_table(name='Yeast Mitochondrial',
      'GCT': 'A', 'GCC': 'A', 'GCA': 'A', 'GCG': 'A', 'GAT': 'D',
      'GAC': 'D', 'GAA': 'E', 'GAG': 'E', 'GGT': 'G', 'GGC': 'G',
      'GGA': 'G', 'GGG': 'G', },
-                    stop_codons=['TAA', 'TAG', ],
-                    start_codons=['ATA', 'ATG', ]
-                    )
+                    stop_codons=['TAA', 'TAG'],
+                    start_codons=['ATA', 'ATG'])
+
 register_ncbi_table(name='Mold Mitochondrial; Protozoan Mitochondrial; Coelenterate Mitochondrial; Mycoplasma; Spiroplasma',
                     alt_name='SGC3', id=4,
                     table={
@@ -622,10 +551,10 @@ register_ncbi_table(name='Mold Mitochondrial; Protozoan Mitochondrial; Coelenter
      'GCT': 'A', 'GCC': 'A', 'GCA': 'A', 'GCG': 'A', 'GAT': 'D',
      'GAC': 'D', 'GAA': 'E', 'GAG': 'E', 'GGT': 'G', 'GGC': 'G',
      'GGA': 'G', 'GGG': 'G', },
-                    stop_codons=['TAA', 'TAG', ],
-                    start_codons=['TTA', 'TTG', 'CTG', 'ATT', 'ATC',
-                                     'ATA', 'ATG', 'GTG', ]
-                    )
+                    stop_codons=['TAA', 'TAG'],
+                    start_codons=['TTA', 'TTG', 'CTG', 'ATT', 'ATC', 'ATA',
+                                  'ATG', 'GTG'])
+
 register_ncbi_table(name='Invertebrate Mitochondrial',
                     alt_name='SGC4', id=5,
                     table={
@@ -642,10 +571,9 @@ register_ncbi_table(name='Invertebrate Mitochondrial',
      'GCT': 'A', 'GCC': 'A', 'GCA': 'A', 'GCG': 'A', 'GAT': 'D',
      'GAC': 'D', 'GAA': 'E', 'GAG': 'E', 'GGT': 'G', 'GGC': 'G',
      'GGA': 'G', 'GGG': 'G', },
-                    stop_codons=['TAA', 'TAG', ],
-                    start_codons=['TTG', 'ATT', 'ATC', 'ATA', 'ATG',
-                                     'GTG', ]
-                    )
+                    stop_codons=['TAA', 'TAG'],
+                    start_codons=['TTG', 'ATT', 'ATC', 'ATA', 'ATG', 'GTG'])
+
 register_ncbi_table(name='Ciliate Nuclear; Dasycladacean Nuclear; Hexamita Nuclear',
                     alt_name='SGC5', id=6,
                     table={
@@ -662,9 +590,9 @@ register_ncbi_table(name='Ciliate Nuclear; Dasycladacean Nuclear; Hexamita Nucle
      'GTG': 'V', 'GCT': 'A', 'GCC': 'A', 'GCA': 'A', 'GCG': 'A',
      'GAT': 'D', 'GAC': 'D', 'GAA': 'E', 'GAG': 'E', 'GGT': 'G',
      'GGC': 'G', 'GGA': 'G', 'GGG': 'G', },
-                    stop_codons=['TGA', ],
-                    start_codons=['ATG', ]
-                    )
+                    stop_codons=['TGA'],
+                    start_codons=['ATG'])
+
 register_ncbi_table(name='Echinoderm Mitochondrial; Flatworm Mitochondrial',
                     alt_name='SGC8', id=9,
                     table={
@@ -681,9 +609,9 @@ register_ncbi_table(name='Echinoderm Mitochondrial; Flatworm Mitochondrial',
      'GCT': 'A', 'GCC': 'A', 'GCA': 'A', 'GCG': 'A', 'GAT': 'D',
      'GAC': 'D', 'GAA': 'E', 'GAG': 'E', 'GGT': 'G', 'GGC': 'G',
      'GGA': 'G', 'GGG': 'G', },
-                    stop_codons=['TAA', 'TAG', ],
-                    start_codons=['ATG', 'GTG', ]
-                    )
+                    stop_codons=['TAA', 'TAG'],
+                    start_codons=['ATG', 'GTG'])
+
 register_ncbi_table(name='Euplotid Nuclear',
                     alt_name='SGC9', id=10,
                     table={
@@ -700,10 +628,10 @@ register_ncbi_table(name='Euplotid Nuclear',
      'GCT': 'A', 'GCC': 'A', 'GCA': 'A', 'GCG': 'A', 'GAT': 'D',
      'GAC': 'D', 'GAA': 'E', 'GAG': 'E', 'GGT': 'G', 'GGC': 'G',
      'GGA': 'G', 'GGG': 'G', },
-                    stop_codons=['TAA', 'TAG', ],
-                    start_codons=['ATG', ]
-                    )
-register_ncbi_table(name='Bacterial and Plant Plastid',
+                    stop_codons=['TAA', 'TAG'],
+                    start_codons=['ATG'])
+
+register_ncbi_table(name='Bacterial, Archaeal and Plant Plastid',
                     alt_name=None, id=11,
                     table={
      'TTT': 'F', 'TTC': 'F', 'TTA': 'L', 'TTG': 'L', 'TCT': 'S',
@@ -719,10 +647,10 @@ register_ncbi_table(name='Bacterial and Plant Plastid',
      'GCC': 'A', 'GCA': 'A', 'GCG': 'A', 'GAT': 'D', 'GAC': 'D',
      'GAA': 'E', 'GAG': 'E', 'GGT': 'G', 'GGC': 'G', 'GGA': 'G',
      'GGG': 'G', },
-                    stop_codons=['TAA', 'TAG', 'TGA', ],
-                    start_codons=['TTG', 'CTG', 'ATT', 'ATC', 'ATA',
-                                     'ATG', 'GTG', ]
-                    )
+                    stop_codons=['TAA', 'TAG', 'TGA'],
+                    start_codons=['TTG', 'CTG', 'ATT', 'ATC', 'ATA', 'ATG',
+                                  'GTG'])
+
 register_ncbi_table(name='Alternative Yeast Nuclear',
                     alt_name=None, id=12,
                     table={
@@ -739,9 +667,9 @@ register_ncbi_table(name='Alternative Yeast Nuclear',
      'GCC': 'A', 'GCA': 'A', 'GCG': 'A', 'GAT': 'D', 'GAC': 'D',
      'GAA': 'E', 'GAG': 'E', 'GGT': 'G', 'GGC': 'G', 'GGA': 'G',
      'GGG': 'G', },
-                    stop_codons=['TAA', 'TAG', 'TGA', ],
-                    start_codons=['CTG', 'ATG', ]
-                    )
+                    stop_codons=['TAA', 'TAG', 'TGA'],
+                    start_codons=['CTG', 'ATG'])
+
 register_ncbi_table(name='Ascidian Mitochondrial',
                     alt_name=None, id=13,
                     table={
@@ -758,9 +686,9 @@ register_ncbi_table(name='Ascidian Mitochondrial',
      'GCT': 'A', 'GCC': 'A', 'GCA': 'A', 'GCG': 'A', 'GAT': 'D',
      'GAC': 'D', 'GAA': 'E', 'GAG': 'E', 'GGT': 'G', 'GGC': 'G',
      'GGA': 'G', 'GGG': 'G', },
-                    stop_codons=['TAA', 'TAG', ],
-                    start_codons=['TTG', 'ATA', 'ATG', 'GTG', ]
-                    )
+                    stop_codons=['TAA', 'TAG'],
+                    start_codons=['TTG', 'ATA', 'ATG', 'GTG'])
+
 register_ncbi_table(name='Alternative Flatworm Mitochondrial',
                     alt_name=None, id=14,
                     table={
@@ -777,9 +705,9 @@ register_ncbi_table(name='Alternative Flatworm Mitochondrial',
      'GTG': 'V', 'GCT': 'A', 'GCC': 'A', 'GCA': 'A', 'GCG': 'A',
      'GAT': 'D', 'GAC': 'D', 'GAA': 'E', 'GAG': 'E', 'GGT': 'G',
      'GGC': 'G', 'GGA': 'G', 'GGG': 'G', },
-                    stop_codons=['TAG', ],
-                    start_codons=['ATG', ]
-                    )
+                    stop_codons=['TAG'],
+                    start_codons=['ATG'])
+
 register_ncbi_table(name='Blepharisma Macronuclear',
                     alt_name=None, id=15,
                     table={
@@ -796,9 +724,9 @@ register_ncbi_table(name='Blepharisma Macronuclear',
      'GCT': 'A', 'GCC': 'A', 'GCA': 'A', 'GCG': 'A', 'GAT': 'D',
      'GAC': 'D', 'GAA': 'E', 'GAG': 'E', 'GGT': 'G', 'GGC': 'G',
      'GGA': 'G', 'GGG': 'G', },
-                    stop_codons=['TAA', 'TGA', ],
-                    start_codons=['ATG', ]
-                    )
+                    stop_codons=['TAA', 'TGA'],
+                    start_codons=['ATG'])
+
 register_ncbi_table(name='Chlorophycean Mitochondrial',
                     alt_name=None, id=16,
                     table={
@@ -815,9 +743,9 @@ register_ncbi_table(name='Chlorophycean Mitochondrial',
      'GCT': 'A', 'GCC': 'A', 'GCA': 'A', 'GCG': 'A', 'GAT': 'D',
      'GAC': 'D', 'GAA': 'E', 'GAG': 'E', 'GGT': 'G', 'GGC': 'G',
      'GGA': 'G', 'GGG': 'G', },
-                    stop_codons=['TAA', 'TGA', ],
-                    start_codons=['ATG', ]
-                    )
+                    stop_codons=['TAA', 'TGA'],
+                    start_codons=['ATG'])
+
 register_ncbi_table(name='Trematode Mitochondrial',
                     alt_name=None, id=21,
                     table={
@@ -834,9 +762,9 @@ register_ncbi_table(name='Trematode Mitochondrial',
      'GCT': 'A', 'GCC': 'A', 'GCA': 'A', 'GCG': 'A', 'GAT': 'D',
      'GAC': 'D', 'GAA': 'E', 'GAG': 'E', 'GGT': 'G', 'GGC': 'G',
      'GGA': 'G', 'GGG': 'G', },
-                    stop_codons=['TAA', 'TAG', ],
-                    start_codons=['ATG', 'GTG', ]
-                    )
+                    stop_codons=['TAA', 'TAG'],
+                    start_codons=['ATG', 'GTG'])
+
 register_ncbi_table(name='Scenedesmus obliquus Mitochondrial',
                     alt_name=None, id=22,
                     table={
@@ -853,9 +781,9 @@ register_ncbi_table(name='Scenedesmus obliquus Mitochondrial',
      'GCC': 'A', 'GCA': 'A', 'GCG': 'A', 'GAT': 'D', 'GAC': 'D',
      'GAA': 'E', 'GAG': 'E', 'GGT': 'G', 'GGC': 'G', 'GGA': 'G',
      'GGG': 'G', },
-                    stop_codons=['TCA', 'TAA', 'TGA', ],
-                    start_codons=['ATG', ]
-                    )
+                    stop_codons=['TCA', 'TAA', 'TGA'],
+                    start_codons=['ATG'])
+
 register_ncbi_table(name='Thraustochytrium Mitochondrial',
                     alt_name=None, id=23,
                     table={
@@ -871,9 +799,9 @@ register_ncbi_table(name='Thraustochytrium Mitochondrial',
      'GTC': 'V', 'GTA': 'V', 'GTG': 'V', 'GCT': 'A', 'GCC': 'A',
      'GCA': 'A', 'GCG': 'A', 'GAT': 'D', 'GAC': 'D', 'GAA': 'E',
      'GAG': 'E', 'GGT': 'G', 'GGC': 'G', 'GGA': 'G', 'GGG': 'G', },
-                    stop_codons=['TTA', 'TAA', 'TAG', 'TGA', ],
-                    start_codons=['ATT', 'ATG', 'GTG', ]
-                    )
+                    stop_codons=['TTA', 'TAA', 'TAG', 'TGA'],
+                    start_codons=['ATT', 'ATG', 'GTG'])
+
 register_ncbi_table(name='Pterobranchia Mitochondrial',
                     alt_name=None, id=24,
                     table={
@@ -890,17 +818,50 @@ register_ncbi_table(name='Pterobranchia Mitochondrial',
      'GCT': 'A', 'GCC': 'A', 'GCA': 'A', 'GCG': 'A', 'GAT': 'D',
      'GAC': 'D', 'GAA': 'E', 'GAG': 'E', 'GGT': 'G', 'GGC': 'G',
      'GGA': 'G', 'GGG': 'G', },
-                    stop_codons=['TAA', 'TAG', ],
-                    start_codons=['TTG', 'CTG', 'ATG', 'GTG', ],
-                    )
+                    stop_codons=['TAA', 'TAG'],
+                    start_codons=['TTG', 'CTG', 'ATG', 'GTG'])
 
 register_ncbi_table(name='Candidate Division SR1 and Gracilibacteria',
                     alt_name=None, id=25,
                     table={
      'TTT': 'F', 'TTC': 'F', 'TTA': 'L', 'TTG': 'L', 'TCT': 'S',
      'TCC': 'S', 'TCA': 'S', 'TCG': 'S', 'TAT': 'Y', 'TAC': 'Y',
+     'TGT': 'C', 'TGC': 'C', 'TGA': 'G', 'TGG': 'W', 'CTT': 'L',
+     'CTC': 'L', 'CTA': 'L', 'CTG': 'L', 'CCT': 'P', 'CCC': 'P',
+     'CCA': 'P', 'CCG': 'P', 'CAT': 'H', 'CAC': 'H', 'CAA': 'Q',
+     'CAG': 'Q', 'CGT': 'R', 'CGC': 'R', 'CGA': 'R', 'CGG': 'R',
+     'ATT': 'I', 'ATC': 'I', 'ATA': 'I', 'ATG': 'M', 'ACT': 'T',
+     'ACC': 'T', 'ACA': 'T', 'ACG': 'T', 'AAT': 'N', 'AAC': 'N',
+     'AAA': 'K', 'AAG': 'K', 'AGT': 'S', 'AGC': 'S', 'AGA': 'R',
+     'AGG': 'R', 'GTT': 'V', 'GTC': 'V', 'GTA': 'V', 'GTG': 'V',
+     'GCT': 'A', 'GCC': 'A', 'GCA': 'A', 'GCG': 'A', 'GAT': 'D',
+     'GAC': 'D', 'GAA': 'E', 'GAG': 'E', 'GGT': 'G', 'GGC': 'G',
+     'GGA': 'G', 'GGG': 'G', },
+                    stop_codons=['TAA', 'TAG'],
+                    start_codons=['TTG', 'ATG', 'GTG'])
+
+
+########################################################################
+# End of auto-generated output from Scripts/update_ncbi_codon_table.py #
+########################################################################
+
+
+# This is currently missing in Version 4.0 of
+# ftp://ftp.ncbi.nih.gov/entrez/misc/data/gc.prt
+# and was entered by hand based on
+# http://www.ncbi.nlm.nih.gov/Taxonomy/Utils/wprintgc.cgi#SG26
+#
+# Code 26 is used so far only for the ascomycete fungus Pachysolen
+# tannophilus. The only difference to the standard code is the
+# translation of CUG as alanine (as opposed to leucine). As of
+# April 2016, there is no publication documenting this code.
+register_ncbi_table(name='Pachysolen tannophilus Nuclear Code',
+                    alt_name=None, id=26,
+                    table={
+     'TTT': 'F', 'TTC': 'F', 'TTA': 'L', 'TTG': 'L', 'TCT': 'S',
+     'TCC': 'S', 'TCA': 'S', 'TCG': 'S', 'TAT': 'Y', 'TAC': 'Y',
      'TGT': 'C', 'TGC': 'C', 'TGG': 'W', 'CTT': 'L', 'CTC': 'L',
-     'CTA': 'L', 'CTG': 'L', 'CCT': 'P', 'CCC': 'P', 'CCA': 'P',
+     'CTA': 'L', 'CTG': 'A', 'CCT': 'P', 'CCC': 'P', 'CCA': 'P',
      'CCG': 'P', 'CAT': 'H', 'CAC': 'H', 'CAA': 'Q', 'CAG': 'Q',
      'CGT': 'R', 'CGC': 'R', 'CGA': 'R', 'CGG': 'R', 'ATT': 'I',
      'ATC': 'I', 'ATA': 'I', 'ATG': 'M', 'ACT': 'T', 'ACC': 'T',
@@ -909,10 +870,10 @@ register_ncbi_table(name='Candidate Division SR1 and Gracilibacteria',
      'GTT': 'V', 'GTC': 'V', 'GTA': 'V', 'GTG': 'V', 'GCT': 'A',
      'GCC': 'A', 'GCA': 'A', 'GCG': 'A', 'GAT': 'D', 'GAC': 'D',
      'GAA': 'E', 'GAG': 'E', 'GGT': 'G', 'GGC': 'G', 'GGA': 'G',
-     'GGG': 'G', 'TGA': 'G', },
-                    stop_codons=['TAA', 'TAG', ],
-                    start_codons=['TTG', 'CTG', 'ATG', ]
-                    )
+     'GGG': 'G', },
+                    stop_codons=['TAA', 'TAG', 'TGA'],
+                    start_codons=['TTG', 'CTG', 'ATG'])
+
 
 # Basic sanity test,
 for key, val in generic_by_name.items():
@@ -943,6 +904,7 @@ del n
 assert ambiguous_generic_by_id[1] == ambiguous_generic_by_name["Standard"]
 assert ambiguous_generic_by_id[4] == ambiguous_generic_by_name["SGC3"]
 assert ambiguous_generic_by_id[11] == ambiguous_generic_by_name["Bacterial"]
+assert ambiguous_generic_by_id[11] == ambiguous_generic_by_name["Archaeal"]
 assert ambiguous_generic_by_id[11] == ambiguous_generic_by_name["Plant Plastid"]
 assert ambiguous_generic_by_id[15] == ambiguous_generic_by_name['Blepharisma Macronuclear']
 assert ambiguous_generic_by_id[24] == ambiguous_generic_by_name["Pterobranchia Mitochondrial"]
diff --git a/Bio/Emboss/Applications.py b/Bio/Emboss/Applications.py
index cc1ed47..41ad5ff 100644
--- a/Bio/Emboss/Applications.py
+++ b/Bio/Emboss/Applications.py
@@ -1,5 +1,5 @@
 # Copyright 2001-2009 Brad Chapman.
-# Revisions copyright 2009-2010 by Peter Cock.
+# Revisions copyright 2009-2016 by Peter Cock.
 # Revisions copyright 2009 by David Winter.
 # Revisions copyright 2009-2010 by Leighton Pritchard.
 # All rights reserved.
@@ -40,39 +40,39 @@ class _EmbossMinimalCommandLine(AbstractCommandline):
     def __init__(self, cmd=None, **kwargs):
         assert cmd is not None
         extra_parameters = [
-           _Switch(["-auto", "auto"],
-                   """Turn off prompts.
-
-                   Automatic mode disables prompting, so we recommend you set
-                   this argument all the time when calling an EMBOSS tool from
-                   Biopython.
-                   """),
-           _Switch(["-stdout", "stdout"],
-                   "Write standard output."),
-           _Switch(["-filter", "filter"],
-                   "Read standard input, write standard output."),
-           _Switch(["-options", "options"],
-                   """Prompt for standard and additional values.
-
-                   If you are calling an EMBOSS tool from within Biopython,
-                   we DO NOT recommend using this option.
-                   """),
-           _Switch(["-debug", "debug"],
-                   "Write debug output to program.dbg."),
-           _Switch(["-verbose", "verbose"],
-                   "Report some/full command line options"),
-           _Switch(["-help", "help"],
-                   """Report command line options.
-
-                   More information on associated and general qualifiers can
-                   be found with -help -verbose
-                   """),
-           _Switch(["-warning", "warning"],
-                   "Report warnings."),
-           _Switch(["-error", "error"],
-                   "Report errors."),
-           _Switch(["-die", "die"],
-                   "Report dying program messages."),
+            _Switch(["-auto", "auto"],
+                    """Turn off prompts.
+
+                    Automatic mode disables prompting, so we recommend you set
+                    this argument all the time when calling an EMBOSS tool from
+                    Biopython.
+                    """),
+            _Switch(["-stdout", "stdout"],
+                    "Write standard output."),
+            _Switch(["-filter", "filter"],
+                    "Read standard input, write standard output."),
+            _Switch(["-options", "options"],
+                    """Prompt for standard and additional values.
+
+                    If you are calling an EMBOSS tool from within Biopython,
+                    we DO NOT recommend using this option.
+                    """),
+            _Switch(["-debug", "debug"],
+                    "Write debug output to program.dbg."),
+            _Switch(["-verbose", "verbose"],
+                    "Report some/full command line options"),
+            _Switch(["-help", "help"],
+                    """Report command line options.
+
+                    More information on associated and general qualifiers can
+                    be found with -help -verbose
+                    """),
+            _Switch(["-warning", "warning"],
+                    "Report warnings."),
+            _Switch(["-error", "error"],
+                    "Report errors."),
+            _Switch(["-die", "die"],
+                    "Report dying program messages."),
             ]
         try:
             # Insert extra parameters - at the start just in case there
@@ -153,333 +153,332 @@ class Primer3Commandline(_EmbossCommandLine):
     """
     def __init__(self, cmd="eprimer3", **kwargs):
         self.parameters = [
-           _Option(["-sequence", "sequence"],
-                   "Sequence to choose primers from.",
-                   is_required=True),
-           _Option(["-task", "task"],
-                   "Tell eprimer3 what task to perform."),
-           _Option(["-hybridprobe", "hybridprobe"],
-                   "Find an internal oligo to use as a hyb probe."),
-           _Option(["-numreturn", "numreturn"],
-                   "Maximum number of primer pairs to return."),
-           _Option(["-includedregion", "includedregion"],
-                   "Subregion of the sequence in which to pick primers."),
-           _Option(["-target", "target"],
-                   "Sequence to target for flanking primers."),
-           _Option(["-excludedregion", "excludedregion"],
-                   "Regions to exclude from primer picking."),
-           _Option(["-forwardinput", "forwardinput"],
-                   "Sequence of a forward primer to check."),
-           _Option(["-reverseinput", "reverseinput"],
-                   "Sequence of a reverse primer to check."),
-           _Option(["-gcclamp", "gcclamp"],
-                   "The required number of Gs and Cs at the 3' of each primer."),
-           _Option(["-osize", "osize"],
-                   "Optimum length of a primer oligo."),
-           _Option(["-minsize", "minsize"],
-                   "Minimum length of a primer oligo."),
-           _Option(["-maxsize", "maxsize"],
-                   "Maximum length of a primer oligo."),
-           _Option(["-otm", "otm"],
-                   """Melting temperature for primer oligo (OBSOLETE).
-
-                   Option replaced in EMBOSS 6.6.0 by -opttm
-                   """),
-           _Option(["-opttm", "opttm"],
-                   """Optimum melting temperature for a primer oligo.
-
-                   Option added in EMBOSS 6.6.0, replacing -otm
-                   """),
-           _Option(["-mintm", "mintm"],
-                   "Minimum melting temperature for a primer oligo."),
-           _Option(["-maxtm", "maxtm"],
-                   "Maximum melting temperature for a primer oligo."),
-           _Option(["-maxdifftm", "maxdifftm"],
-                   "Maximum difference in melting temperatures between "
-                   "forward and reverse primers."),
-           _Option(["-ogcpercent", "ogcpercent"],
-                   "Optimum GC% for a primer."),
-           _Option(["-mingc", "mingc"],
-                   "Minimum GC% for a primer."),
-           _Option(["-maxgc", "maxgc"],
-                   "Maximum GC% for a primer."),
-           _Option(["-saltconc", "saltconc"],
-                   "Millimolar salt concentration in the PCR."),
-           _Option(["-dnaconc", "dnaconc"],
-                   "Nanomolar concentration of annealing oligos in the PCR."),
-           _Option(["-maxpolyx", "maxpolyx"],
-                   "Maximum allowable mononucleotide repeat length in a primer."),
-           # Primer length:
-           _Option(["-productosize", "productosize"],
-                   """Optimum size for the PCR product (OBSOLETE).
-
-                   Option replaced in EMBOSS 6.1.0 by -psizeopt
-                   """),
-           _Option(["-psizeopt", "psizeopt"],
-                   """Optimum size for the PCR product.
-
-                   Option added in EMBOSS 6.1.0, replacing -productosize
-                   """),
-           _Option(["-productsizerange", "productsizerange"],
-                   """Acceptable range of length for the PCR product (OBSOLETE).
-
-                   Option replaced in EMBOSS 6.1.0 by -prange
-                   """),
-           _Option(["-prange", "prange"],
-                   """Acceptable range of length for the PCR product.
-
-                   Option added in EMBOSS 6.1.0, replacing -productsizerange
-                   """),
-           # Primer temperature:
-           _Option(["-productotm", "productotm"],
-                   """Optimum melting temperature for the PCR product (OBSOLETE).
-
-                   Option replaced in EMBOSS 6.1.0 by -ptmopt
-                   """),
-           _Option(["-ptmopt", "ptmopt"],
-                   """Optimum melting temperature for the PCR product.
-
-                   Option added in EMBOSS 6.1.0, replacing -productotm
-                   """),
-           _Option(["-productmintm", "productmintm"],
-                   """Minimum allowed melting temperature for the amplicon (OBSOLETE)
-
-                   Option replaced in EMBOSS 6.1.0 by -ptmmin
-                   """),
-           _Option(["-ptmmin", "ptmmin"],
-                   """Minimum allowed melting temperature for the amplicon."),
-
-                   Option added in EMBOSS 6.1.0, replacing -productmintm
-                   """),
-           _Option(["-productmaxtm", "productmaxtm"],
-                   """Maximum allowed melting temperature for the amplicon (OBSOLETE).
-
-                   Option replaced in EMBOSS 6.1.0 by -ptmmax
-                   """),
-           _Option(["-ptmmax", "ptmmax"],
-                   """Maximum allowed melting temperature for the amplicon."),
-
-                   Option added in EMBOSS 6.1.0, replacing -productmaxtm
-                   """),
-           # Note to self, should be -oexcludedregion not -oexcluderegion
-           _Option(["-oexcludedregion", "oexcludedregion"],
-                   """Do not pick internal oligos in this region."),
-
-                   Option added in EMBOSS 6.1.0, replacing -oligoexcludedregion.
-                   """),
-           _Option(["-oligoexcludedregion", "oligoexcludedregion"],
-                   """Do not pick internal oligos in this region (OBSOLETE)."),
-
-                   Option replaced in EMBOSS 6.1.0 by -oexcluderegion.
-                   """),
-           _Option(["-oligoinput", "oligoinput"],
-                   "Sequence of the internal oligo."),
-           # Oligo length:
-           _Option(["-oligosize", "oligosize"],
-                   """Optimum length of internal oligo (OBSOLETE).
-
-                   Option replaced in EMBOSS 6.1.0 by -osizeopt.
-                   """),
-           _Option(["-osizeopt", "osizeopt"],
-                   """Optimum length of internal oligo.
-
-                   Option added in EMBOSS 6.1.0, replaces -oligosize
-                   """),
-           _Option(["-oligominsize", "oligominsize"],
-                   """Minimum length of internal oligo (OBSOLETE)."),
-
-                   Option replaced in EMBOSS 6.1.0 by -ominsize.
-                   """),
-           _Option(["-ominsize", "ominsize"],
-                   """Minimum length of internal oligo."
-
-                   Option added in EMBOSS 6.1.0, replaces -oligominsize
-                   """),
-           _Option(["-oligomaxsize", "oligomaxsize"],
-                   """Maximum length of internal oligo (OBSOLETE).
-
-                   Option replaced in EMBOSS 6.1.0 by -omaxsize.
-                   """),
-           _Option(["-omaxsize", "omaxsize"],
-                   """Maximum length of internal oligo.
-
-                   Option added in EMBOSS 6.1.0, replaces -oligomaxsize
-                   """),
-           # Oligo GC temperature:
-           _Option(["-oligotm", "oligotm"],
-                   """Optimum melting temperature of internal oligo (OBSOLETE).
-
-                   Option replaced in EMBOSS 6.1.0 by -otmopt.
-                   """),
-           _Option(["-otmopt", "otmopt"],
-                   """Optimum melting temperature of internal oligo.
-
-                   Option added in EMBOSS 6.1.0.
-                   """),
-           _Option(["-oligomintm", "oligomintm"],
-                   """Minimum melting temperature of internal oligo (OBSOLETE).
-
-                   Option replaced in EMBOSS 6.1.0 by -otmmin.
-                   """),
-           _Option(["-otmmin", "otmmin"],
-                   """Minimum melting temperature of internal oligo.
-
-                   Option added in EMBOSS 6.1.0, replacing -oligomintm
-                   """),
-           _Option(["-oligomaxtm", "oligomaxtm"],
-                   """Maximum melting temperature of internal oligo (OBSOLETE).
-
-                   Option replaced in EMBOSS 6.1.0 by -otmmax.
-                   """),
-           _Option(["-otmmax", "otmmax"],
-                   """Maximum melting temperature of internal oligo.
-
-                   Option added in EMBOSS 6.1.0, replacing -oligomaxtm
-                   """),
-           # Oligo GC percent:
-           _Option(["-oligoogcpercent", "oligoogcpercent"],
-                   """Optimum GC% for internal oligo (OBSOLETE).
-
-                   Option replaced in EMBOSS 6.1.0 by -ogcopt.
-                   """),
-           _Option(["-ogcopt", "ogcopt"],
-                   """Optimum GC% for internal oligo."
-
-                   Option added in EMBOSS 6.1.0, replacing -oligoogcpercent
-                   """),
-           _Option(["-oligomingc", "oligomingc"],
-                   """Minimum GC% for internal oligo (OBSOLETE).
-
-                   Option replaced in EMBOSS 6.1.0 by -ogcmin.
-                   """),
-           _Option(["-ogcmin", "ogcmin"],
-                   """Minimum GC% for internal oligo.
-
-                   Option added in EMBOSS 6.1.0, replacing -oligomingc
-                   """),
-           _Option(["-oligomaxgc", "oligomaxgc"],
-                   """Maximum GC% for internal oligo.
-
-                   Option replaced in EMBOSS 6.1.0 by -ogcmax
-                   """),
-           _Option(["-ogcmax", "ogcmax"],
-                   """Maximum GC% for internal oligo."),
-
-                   Option added in EMBOSS 6.1.0, replacing -oligomaxgc
-                   """),
-           # Oligo salt concentration:
-           _Option(["-oligosaltconc", "oligosaltconc"],
-                   """Millimolar concentration of salt in the hybridisation."),
-
-                   Option replaced in EMBOSS 6.1.0 by -osaltconc
-                   """),
-           _Option(["-osaltconc", "osaltconc"],
-                   """Millimolar concentration of salt in the hybridisation."),
-
-                   Option added in EMBOSS 6.1.0, replacing -oligosaltconc
-                   """),
-           _Option(["-oligodnaconc", "oligodnaconc"],
-                   """Nanomolar concentration of internal oligo in the hybridisation.
-
-                   Option replaced in EMBOSS 6.1.0 by -odnaconc
-                   """),
-           _Option(["-odnaconc", "odnaconc"],
-                   """Nanomolar concentration of internal oligo in the hybridisation.
-
-                   Option added in EMBOSS 6.1.0, replacing -oligodnaconc
-                   """),
-           # Oligo self complementarity
-           _Option(["-oligoselfany", "oligoselfany"],
-                   """Maximum allowable alignment score for self-complementarity (OBSOLETE).
-
-                   Option replaced in EMBOSS 6.1.0 by -oanyself
-                   """),
-           _Option(["-oanyself", "oanyself"],
-                   """Maximum allowable alignment score for self-complementarity."),
-
-                   Option added in EMBOSS 6.1.0, replacing -oligoselfany
-                   """),
-           _Option(["-oligoselfend", "oligoselfend"],
-                   """Maximum allowable 3`-anchored global alignment score "
-                   for self-complementarity (OBSOLETE).
-
-                   Option replaced in EMBOSS 6.1.0 by -oendself
-                   """),
-           _Option(["-oendself", "oendself"],
-                   """Max 3`-anchored self-complementarity global alignment score.
-
-                   Option added in EMBOSS 6.1.0, replacing -oligoselfend
-                   """),
-           _Option(["-oligomaxpolyx", "oligomaxpolyx"],
-                   """Maximum length of mononucleotide repeat in internal oligo (OBSOLETE).
-
-                   Option replaced in EMBOSS 6.1.0 by -opolyxmax
-                   """),
-           _Option(["-opolyxmax", "opolyxmax"],
-                   """Maximum length of mononucleotide repeat in internal oligo."),
-
-                   Option added in EMBOSS 6.1.0, replacing -oligomaxpolyx
-                   """),
-           _Option(["-mispriminglibraryfile", "mispriminglibraryfile"],
+            _Option(["-sequence", "sequence"],
+                    "Sequence to choose primers from.",
+                    is_required=True),
+            _Option(["-task", "task"],
+                    "Tell eprimer3 what task to perform."),
+            _Option(["-hybridprobe", "hybridprobe"],
+                    "Find an internal oligo to use as a hyb probe."),
+            _Option(["-numreturn", "numreturn"],
+                    "Maximum number of primer pairs to return."),
+            _Option(["-includedregion", "includedregion"],
+                    "Subregion of the sequence in which to pick primers."),
+            _Option(["-target", "target"],
+                    "Sequence to target for flanking primers."),
+            _Option(["-excludedregion", "excludedregion"],
+                    "Regions to exclude from primer picking."),
+            _Option(["-forwardinput", "forwardinput"],
+                    "Sequence of a forward primer to check."),
+            _Option(["-reverseinput", "reverseinput"],
+                    "Sequence of a reverse primer to check."),
+            _Option(["-gcclamp", "gcclamp"],
+                    "The required number of Gs and Cs at the 3' of each primer."),
+            _Option(["-osize", "osize"],
+                    "Optimum length of a primer oligo."),
+            _Option(["-minsize", "minsize"],
+                    "Minimum length of a primer oligo."),
+            _Option(["-maxsize", "maxsize"],
+                    "Maximum length of a primer oligo."),
+            _Option(["-otm", "otm"],
+                    """Melting temperature for primer oligo (OBSOLETE).
+
+                    Option replaced in EMBOSS 6.6.0 by -opttm
+                    """),
+            _Option(["-opttm", "opttm"],
+                    """Optimum melting temperature for a primer oligo.
+
+                    Option added in EMBOSS 6.6.0, replacing -otm
+                    """),
+            _Option(["-mintm", "mintm"],
+                    "Minimum melting temperature for a primer oligo."),
+            _Option(["-maxtm", "maxtm"],
+                    "Maximum melting temperature for a primer oligo."),
+            _Option(["-maxdifftm", "maxdifftm"],
+                    "Maximum difference in melting temperatures between "
+                    "forward and reverse primers."),
+            _Option(["-ogcpercent", "ogcpercent"],
+                    "Optimum GC% for a primer."),
+            _Option(["-mingc", "mingc"],
+                    "Minimum GC% for a primer."),
+            _Option(["-maxgc", "maxgc"],
+                    "Maximum GC% for a primer."),
+            _Option(["-saltconc", "saltconc"],
+                    "Millimolar salt concentration in the PCR."),
+            _Option(["-dnaconc", "dnaconc"],
+                    "Nanomolar concentration of annealing oligos in the PCR."),
+            _Option(["-maxpolyx", "maxpolyx"],
+                    "Maximum allowable mononucleotide repeat length in a primer."),
+            # Primer length:
+            _Option(["-productosize", "productosize"],
+                    """Optimum size for the PCR product (OBSOLETE).
+
+                    Option replaced in EMBOSS 6.1.0 by -psizeopt
+                    """),
+            _Option(["-psizeopt", "psizeopt"],
+                    """Optimum size for the PCR product.
+
+                    Option added in EMBOSS 6.1.0, replacing -productosize
+                    """),
+            _Option(["-productsizerange", "productsizerange"],
+                    """Acceptable range of length for the PCR product (OBSOLETE).
+
+                    Option replaced in EMBOSS 6.1.0 by -prange
+                    """),
+            _Option(["-prange", "prange"],
+                    """Acceptable range of length for the PCR product.
+
+                    Option added in EMBOSS 6.1.0, replacing -productsizerange
+                    """),
+            # Primer temperature:
+            _Option(["-productotm", "productotm"],
+                    """Optimum melting temperature for the PCR product (OBSOLETE).
+
+                    Option replaced in EMBOSS 6.1.0 by -ptmopt
+                    """),
+            _Option(["-ptmopt", "ptmopt"],
+                    """Optimum melting temperature for the PCR product.
+
+                    Option added in EMBOSS 6.1.0, replacing -productotm
+                    """),
+            _Option(["-productmintm", "productmintm"],
+                    """Minimum allowed melting temperature for the amplicon (OBSOLETE)
+
+                    Option replaced in EMBOSS 6.1.0 by -ptmmin
+                    """),
+            _Option(["-ptmmin", "ptmmin"],
+                    """Minimum allowed melting temperature for the amplicon."),
+
+                    Option added in EMBOSS 6.1.0, replacing -productmintm
+                    """),
+            _Option(["-productmaxtm", "productmaxtm"],
+                    """Maximum allowed melting temperature for the amplicon (OBSOLETE).
+
+                    Option replaced in EMBOSS 6.1.0 by -ptmmax
+                    """),
+            _Option(["-ptmmax", "ptmmax"],
+                    """Maximum allowed melting temperature for the amplicon."),
+
+                    Option added in EMBOSS 6.1.0, replacing -productmaxtm
+                    """),
+            # Note to self, should be -oexcludedregion not -oexcluderegion
+            _Option(["-oexcludedregion", "oexcludedregion"],
+                    """Do not pick internal oligos in this region."),
+
+                    Option added in EMBOSS 6.1.0, replacing -oligoexcludedregion.
+                    """),
+            _Option(["-oligoexcludedregion", "oligoexcludedregion"],
+                    """Do not pick internal oligos in this region (OBSOLETE)."),
+
+                    Option replaced in EMBOSS 6.1.0 by -oexcluderegion.
+                    """),
+            _Option(["-oligoinput", "oligoinput"],
+                    "Sequence of the internal oligo."),
+            # Oligo length:
+            _Option(["-oligosize", "oligosize"],
+                    """Optimum length of internal oligo (OBSOLETE).
+
+                    Option replaced in EMBOSS 6.1.0 by -osizeopt.
+                    """),
+            _Option(["-osizeopt", "osizeopt"],
+                    """Optimum length of internal oligo.
+
+                    Option added in EMBOSS 6.1.0, replaces -oligosize
+                    """),
+            _Option(["-oligominsize", "oligominsize"],
+                    """Minimum length of internal oligo (OBSOLETE)."),
+
+                    Option replaced in EMBOSS 6.1.0 by -ominsize.
+                    """),
+            _Option(["-ominsize", "ominsize"],
+                    """Minimum length of internal oligo."
+
+                    Option added in EMBOSS 6.1.0, replaces -oligominsize
+                    """),
+            _Option(["-oligomaxsize", "oligomaxsize"],
+                    """Maximum length of internal oligo (OBSOLETE).
+
+                    Option replaced in EMBOSS 6.1.0 by -omaxsize.
+                    """),
+            _Option(["-omaxsize", "omaxsize"],
+                    """Maximum length of internal oligo.
+
+                    Option added in EMBOSS 6.1.0, replaces -oligomaxsize
+                    """),
+            # Oligo GC temperature:
+            _Option(["-oligotm", "oligotm"],
+                    """Optimum melting temperature of internal oligo (OBSOLETE).
+
+                    Option replaced in EMBOSS 6.1.0 by -otmopt.
+                    """),
+            _Option(["-otmopt", "otmopt"],
+                    """Optimum melting temperature of internal oligo.
+
+                    Option added in EMBOSS 6.1.0.
+                    """),
+            _Option(["-oligomintm", "oligomintm"],
+                    """Minimum melting temperature of internal oligo (OBSOLETE).
+
+                    Option replaced in EMBOSS 6.1.0 by -otmmin.
+                    """),
+            _Option(["-otmmin", "otmmin"],
+                    """Minimum melting temperature of internal oligo.
+
+                    Option added in EMBOSS 6.1.0, replacing -oligomintm
+                    """),
+            _Option(["-oligomaxtm", "oligomaxtm"],
+                    """Maximum melting temperature of internal oligo (OBSOLETE).
+
+                    Option replaced in EMBOSS 6.1.0 by -otmmax.
+                    """),
+            _Option(["-otmmax", "otmmax"],
+                    """Maximum melting temperature of internal oligo.
+
+                    Option added in EMBOSS 6.1.0, replacing -oligomaxtm
+                    """),
+            # Oligo GC percent:
+            _Option(["-oligoogcpercent", "oligoogcpercent"],
+                    """Optimum GC% for internal oligo (OBSOLETE).
+
+                    Option replaced in EMBOSS 6.1.0 by -ogcopt.
+                    """),
+            _Option(["-ogcopt", "ogcopt"],
+                    """Optimum GC% for internal oligo."
+
+                    Option added in EMBOSS 6.1.0, replacing -oligoogcpercent
+                    """),
+            _Option(["-oligomingc", "oligomingc"],
+                    """Minimum GC% for internal oligo (OBSOLETE).
+
+                    Option replaced in EMBOSS 6.1.0 by -ogcmin.
+                    """),
+            _Option(["-ogcmin", "ogcmin"],
+                    """Minimum GC% for internal oligo.
+
+                    Option added in EMBOSS 6.1.0, replacing -oligomingc
+                    """),
+            _Option(["-oligomaxgc", "oligomaxgc"],
+                    """Maximum GC% for internal oligo.
+
+                    Option replaced in EMBOSS 6.1.0 by -ogcmax
+                    """),
+            _Option(["-ogcmax", "ogcmax"],
+                    """Maximum GC% for internal oligo."),
+
+                    Option added in EMBOSS 6.1.0, replacing -oligomaxgc
+                    """),
+            # Oligo salt concentration:
+            _Option(["-oligosaltconc", "oligosaltconc"],
+                    """Millimolar concentration of salt in the hybridisation."),
+
+                    Option replaced in EMBOSS 6.1.0 by -osaltconc
+                    """),
+            _Option(["-osaltconc", "osaltconc"],
+                    """Millimolar concentration of salt in the hybridisation."),
+
+                    Option added in EMBOSS 6.1.0, replacing -oligosaltconc
+                    """),
+            _Option(["-oligodnaconc", "oligodnaconc"],
+                    """Nanomolar concentration of internal oligo in the hybridisation.
+
+                    Option replaced in EMBOSS 6.1.0 by -odnaconc
+                    """),
+            _Option(["-odnaconc", "odnaconc"],
+                    """Nanomolar concentration of internal oligo in the hybridisation.
+
+                    Option added in EMBOSS 6.1.0, replacing -oligodnaconc
+                    """),
+            # Oligo self complementarity
+            _Option(["-oligoselfany", "oligoselfany"],
+                    """Maximum allowable alignment score for self-complementarity (OBSOLETE).
+
+                    Option replaced in EMBOSS 6.1.0 by -oanyself
+                    """),
+            _Option(["-oanyself", "oanyself"],
+                    """Maximum allowable alignment score for self-complementarity."),
+
+                    Option added in EMBOSS 6.1.0, replacing -oligoselfany
+                    """),
+            _Option(["-oligoselfend", "oligoselfend"],
+                    """Maximum allowable 3`-anchored global alignment score "
+                    for self-complementarity (OBSOLETE).
+
+                    Option replaced in EMBOSS 6.1.0 by -oendself
+                    """),
+            _Option(["-oendself", "oendself"],
+                    """Max 3`-anchored self-complementarity global alignment score.
+
+                    Option added in EMBOSS 6.1.0, replacing -oligoselfend
+                    """),
+            _Option(["-oligomaxpolyx", "oligomaxpolyx"],
+                    """Maximum length of mononucleotide repeat in internal oligo (OBSOLETE).
+
+                    Option replaced in EMBOSS 6.1.0 by -opolyxmax
+                    """),
+            _Option(["-opolyxmax", "opolyxmax"],
+                    """Maximum length of mononucleotide repeat in internal oligo."),
+
+                    Option added in EMBOSS 6.1.0, replacing -oligomaxpolyx
+                    """),
+            _Option(["-mispriminglibraryfile", "mispriminglibraryfile"],
                     "File containing library of sequences to avoid amplifying"),
-           _Option(["-maxmispriming", "maxmispriming"],
-                   "Maximum allowed similarity of primers to sequences in "
-                   "library specified by -mispriminglibrary"),
-           _Option(["-oligomaxmishyb", "oligomaxmishyb"],
-                   """Maximum alignment score for hybridisation of internal oligo to
-                   library specified by -oligomishyblibraryfile (OBSOLETE).
-
-                   Option replaced in EMBOSS 6.1.0 by -omishybmax
-                   """),
-           _Option(["-omishybmax", "omishybmax"],
-                   """Maximum alignment score for hybridisation of internal oligo to
-                   library specified by -mishyblibraryfile.
-
-                   Option added in EMBOSS 6.1.0, replacing -oligomaxmishyb
-                   """),
-           _Option(["-oligomishyblibraryfile", "oligomishyblibraryfile"],
-
+            _Option(["-maxmispriming", "maxmispriming"],
+                    "Maximum allowed similarity of primers to sequences in "
+                    "library specified by -mispriminglibrary"),
+            _Option(["-oligomaxmishyb", "oligomaxmishyb"],
+                    """Maximum alignment score for hybridisation of internal oligo to
+                    library specified by -oligomishyblibraryfile (OBSOLETE).
+
+                    Option replaced in EMBOSS 6.1.0 by -omishybmax
+                    """),
+            _Option(["-omishybmax", "omishybmax"],
+                    """Maximum alignment score for hybridisation of internal oligo to
+                    library specified by -mishyblibraryfile.
+
+                    Option added in EMBOSS 6.1.0, replacing -oligomaxmishyb
+                    """),
+            _Option(["-oligomishyblibraryfile", "oligomishyblibraryfile"],
                     """Library file of seqs to avoid internal oligo hybridisation (OBSOLETE).
 
-                   Option replaced in EMBOSS 6.1.0 by -mishyblibraryfile
-                   """),
-           _Option(["-mishyblibraryfile", "mishyblibraryfile"],
+                    Option replaced in EMBOSS 6.1.0 by -mishyblibraryfile
+                    """),
+            _Option(["-mishyblibraryfile", "mishyblibraryfile"],
                     """Library file of seqs to avoid internal oligo hybridisation.
 
-                   Option added in EMBOSS 6.1.0, replacing -oligomishyblibraryfile
-                   """),
-           _Option(["-explainflag", "explainflag"],
-                   "Produce output tags with eprimer3 statistics"),
-           ]
+                    Option added in EMBOSS 6.1.0, replacing -oligomishyblibraryfile
+                    """),
+            _Option(["-explainflag", "explainflag"],
+                    "Produce output tags with eprimer3 statistics"),
+            ]
         _EmbossCommandLine.__init__(self, cmd, **kwargs)
 
 
 class PrimerSearchCommandline(_EmbossCommandLine):
-    """Commandline object for the primersearch program from EMBOSS.
-    """
+    """Commandline object for the primersearch program from EMBOSS."""
+
     def __init__(self, cmd="primersearch", **kwargs):
         self.parameters = [
-          _Option(["-seqall", "-sequences", "sequences", "seqall"],
-                  "Sequence to look for the primer pairs in.",
-                  is_required=True),
-                  # When this wrapper was written primersearch used -sequences
-                  # as the argument name. Since at least EMBOSS 5.0 (and
-                  # perhaps earlier) this has been -seqall instead.
-          _Option(["-infile", "-primers", "primers", "infile"],
-                  "File containing the primer pairs to search for.",
-                  filename=True,
-                  is_required=True),
-                  # When this wrapper was written primersearch used -primers
-                  # as the argument name. Since at least EMBOSS 5.0 (and
-                  # perhaps earlier) this has been -infile instead.
-          _Option(["-mismatchpercent", "mismatchpercent"],
-                  "Allowed percentage mismatch (any integer value, default 0).",
-                  is_required=True),
-          _Option(["-snucleotide", "snucleotide"],
-                  "Sequences are nucleotide (boolean)"),
-          _Option(["-sprotein", "sprotein"],
-                  "Sequences are protein (boolean)"),
-          ]
+            _Option(["-seqall", "-sequences", "sequences", "seqall"],
+                    "Sequence to look for the primer pairs in.",
+                    is_required=True),
+            # When this wrapper was written primersearch used -sequences
+            # as the argument name. Since at least EMBOSS 5.0 (and
+            # perhaps earlier) this has been -seqall instead.
+            _Option(["-infile", "-primers", "primers", "infile"],
+                    "File containing the primer pairs to search for.",
+                    filename=True,
+                    is_required=True),
+            # When this wrapper was written primersearch used -primers
+            # as the argument name. Since at least EMBOSS 5.0 (and
+            # perhaps earlier) this has been -infile instead.
+            _Option(["-mismatchpercent", "mismatchpercent"],
+                    "Allowed percentage mismatch (any integer value, default 0).",
+                    is_required=True),
+            _Option(["-snucleotide", "snucleotide"],
+                    "Sequences are nucleotide (boolean)"),
+            _Option(["-sprotein", "sprotein"],
+                    "Sequences are protein (boolean)"),
+            ]
         _EmbossCommandLine.__init__(self, cmd, **kwargs)
 
 
@@ -491,35 +490,36 @@ class FDNADistCommandline(_EmbossCommandLine):
     """
     def __init__(self, cmd="fdnadist", **kwargs):
         self.parameters = [
-        _Option(["-sequence", "sequence"],
-                "seq file to use (phylip)",
-                filename=True,
-                is_required=True),
-        _Option(["-method", "method"],
-                 "sub. model [f,k,j,l,s]",
-                is_required=True),
-        _Option(["-gamma", "gamma"],
-                 "gamma [g, i,n]"),
-        _Option(["-ncategories", "ncategories"],
-                 "number of rate catergories (1-9)"),
-        _Option(["-rate", "rate"],
-                 "rate for each category"),
-        _Option(["-categories", "categories"],
-                 "File of substitution rate categories"),
-        _Option(["-weights", "weights"],
-                 "weights file"),
-        _Option(["-gammacoefficient", "gammacoefficient"],
-                 "value for gamma (> 0.001)"),
-        _Option(["-invarfrac", "invarfrac"],
-                 "proportoin of invariant sites"),
-        _Option(["-ttratio", "ttratio"],
-                 "ts/tv ratio"),
-        _Option(["-freqsfrom", "freqsfrom"],
-                 "use emprical base freqs"),
-        _Option(["-basefreq", "basefreq"],
-                 "specify basefreqs"),
-        _Option(["-lower", "lower"],
-                 "lower triangle matrix (y/N)")]
+            _Option(["-sequence", "sequence"],
+                    "seq file to use (phylip)",
+                    filename=True,
+                    is_required=True),
+            _Option(["-method", "method"],
+                    "sub. model [f,k,j,l,s]",
+                    is_required=True),
+            _Option(["-gamma", "gamma"],
+                    "gamma [g, i,n]"),
+            _Option(["-ncategories", "ncategories"],
+                    "number of rate catergories (1-9)"),
+            _Option(["-rate", "rate"],
+                    "rate for each category"),
+            _Option(["-categories", "categories"],
+                    "File of substitution rate categories"),
+            _Option(["-weights", "weights"],
+                    "weights file"),
+            _Option(["-gammacoefficient", "gammacoefficient"],
+                    "value for gamma (> 0.001)"),
+            _Option(["-invarfrac", "invarfrac"],
+                    "proportoin of invariant sites"),
+            _Option(["-ttratio", "ttratio"],
+                    "ts/tv ratio"),
+            _Option(["-freqsfrom", "freqsfrom"],
+                    "use emprical base freqs"),
+            _Option(["-basefreq", "basefreq"],
+                    "specify basefreqs"),
+            _Option(["-lower", "lower"],
+                    "lower triangle matrix (y/N)"),
+            ]
         _EmbossCommandLine.__init__(self, cmd, **kwargs)
 
 
@@ -531,20 +531,21 @@ class FTreeDistCommandline(_EmbossCommandLine):
     """
     def __init__(self, cmd="ftreedist", **kwargs):
         self.parameters = [
-        _Option(["-intreefile", "intreefile"],
-                "tree file to score (phylip)",
-                filename=True,
-                is_required=True),
-        _Option(["-dtype", "dtype"],
-                 "distance type ([S]ymetric, [b]ranch score)"),
-        _Option(["-pairing", "pairing"],
-                 "tree pairing method ([A]djacent pairs, all [p]ossible pairs)"),
-        _Option(["-style", "style"],
-                 "output style - [V]erbose, [f]ill, [s]parse"),
-        _Option(["-noroot", "noroot"],
-                 "treat trees as rooted [N/y]"),
-        _Option(["-outgrno", "outgrno"],
-                 "which taxon to root the trees with (starts from 0)")]
+            _Option(["-intreefile", "intreefile"],
+                    "tree file to score (phylip)",
+                    filename=True,
+                    is_required=True),
+            _Option(["-dtype", "dtype"],
+                    "distance type ([S]ymetric, [b]ranch score)"),
+            _Option(["-pairing", "pairing"],
+                    "tree pairing method ([A]djacent pairs, all [p]ossible pairs)"),
+            _Option(["-style", "style"],
+                    "output style - [V]erbose, [f]ill, [s]parse"),
+            _Option(["-noroot", "noroot"],
+                    "treat trees as rooted [N/y]"),
+            _Option(["-outgrno", "outgrno"],
+                    "which taxon to root the trees with (starts from 0)"),
+            ]
         _EmbossCommandLine.__init__(self, cmd, **kwargs)
 
 
@@ -556,28 +557,29 @@ class FNeighborCommandline(_EmbossCommandLine):
     """
     def __init__(self, cmd="fneighbor", **kwargs):
         self.parameters = [
-        _Option(["-datafile", "datafile"],
-                "dist file to use (phylip)",
-                filename=True,
-                is_required=True),
-        _Option(["-matrixtype", "matrixtype"],
-                 "is martrix [S]quare pr [u]pper or [l]ower"),
-        _Option(["-treetype", "treetype"],
-                 "nj or UPGMA tree (n/u)"),
-        _Option(["-outgrno", "outgrno"],
-                 "taxon to use as OG"),
-        _Option(["-jumble", "jumble"],
-                 "randommise input order (Y/n)"),
-        _Option(["-seed", "seed"],
-                 "provide a random seed"),
-        _Option(["-trout", "trout"],
-                 "write tree (Y/n)"),
-        _Option(["-outtreefile", "outtreefile"],
-                 "filename for output tree"),
-        _Option(["-progress", "progress"],
-                 "print progress (Y/n)"),
-        _Option(["-treeprint", "treeprint"],
-                 "print tree (Y/n)")]
+            _Option(["-datafile", "datafile"],
+                    "dist file to use (phylip)",
+                    filename=True,
+                    is_required=True),
+            _Option(["-matrixtype", "matrixtype"],
+                    "is martrix [S]quare pr [u]pper or [l]ower"),
+            _Option(["-treetype", "treetype"],
+                    "nj or UPGMA tree (n/u)"),
+            _Option(["-outgrno", "outgrno"],
+                    "taxon to use as OG"),
+            _Option(["-jumble", "jumble"],
+                    "randommise input order (Y/n)"),
+            _Option(["-seed", "seed"],
+                    "provide a random seed"),
+            _Option(["-trout", "trout"],
+                    "write tree (Y/n)"),
+            _Option(["-outtreefile", "outtreefile"],
+                    "filename for output tree"),
+            _Option(["-progress", "progress"],
+                    "print progress (Y/n)"),
+            _Option(["-treeprint", "treeprint"],
+                    "print tree (Y/n)"),
+            ]
         _EmbossCommandLine.__init__(self, cmd, **kwargs)
 
 
@@ -589,34 +591,35 @@ class FSeqBootCommandline(_EmbossCommandLine):
     """
     def __init__(self, cmd="fseqboot", **kwargs):
         self.parameters = [
-        _Option(["-sequence", "sequence"],
-                "seq file to sample (phylip)",
-                filename=True,
-                is_required=True),
-        _Option(["-categories", "catergories"],
-                 "file of input categories"),
-        _Option(["-weights", "weights"],
-                 " weights file"),
-        _Option(["-test", "test"],
-                 "specify operation, default is bootstrap"),
-        _Option(["-regular", "regular"],
-                 "absolute number to resample"),
-        _Option(["-fracsample", "fracsample"],
-                 "fraction to resample"),
-        _Option(["-rewriteformat", "rewriteformat"],
-                 "output format ([P]hyilp, [n]exus, [x]ml"),
-        _Option(["-seqtype", "seqtype"],
-                 "output format ([D]na, [p]rotein, [r]na"),
-        _Option(["-blocksize", "blocksize"],
-                 "print progress (Y/n)"),
-        _Option(["-reps", "reps"],
-                 "how many replicates, defaults to 100)"),
-        _Option(["-justweights", "jusweights"],
-                 "what to write out [D]atasets of just [w]eights"),
-        _Option(["-seed", "seed"],
-                 "specify random seed"),
-        _Option(["-dotdiff", "dotdiff"],
-                 "Use dot-differencing? [Y/n]"), ]
+            _Option(["-sequence", "sequence"],
+                    "seq file to sample (phylip)",
+                    filename=True,
+                    is_required=True),
+            _Option(["-categories", "catergories"],
+                    "file of input categories"),
+            _Option(["-weights", "weights"],
+                    " weights file"),
+            _Option(["-test", "test"],
+                    "specify operation, default is bootstrap"),
+            _Option(["-regular", "regular"],
+                    "absolute number to resample"),
+            _Option(["-fracsample", "fracsample"],
+                    "fraction to resample"),
+            _Option(["-rewriteformat", "rewriteformat"],
+                    "output format ([P]hyilp, [n]exus, [x]ml"),
+            _Option(["-seqtype", "seqtype"],
+                    "output format ([D]na, [p]rotein, [r]na"),
+            _Option(["-blocksize", "blocksize"],
+                    "print progress (Y/n)"),
+            _Option(["-reps", "reps"],
+                    "how many replicates, defaults to 100)"),
+            _Option(["-justweights", "jusweights"],
+                    "what to write out [D]atasets of just [w]eights"),
+            _Option(["-seed", "seed"],
+                    "specify random seed"),
+            _Option(["-dotdiff", "dotdiff"],
+                    "Use dot-differencing? [Y/n]"),
+            ]
         _EmbossCommandLine.__init__(self, cmd, **kwargs)
 
 
@@ -631,38 +634,39 @@ class FDNAParsCommandline(_EmbossCommandLine):
     """
     def __init__(self, cmd="fdnapars", **kwargs):
         self.parameters = [
-        _Option(["-sequence", "sequence"],
-                "seq file to use (phylip)",
-                filename=True,
-                is_required=True),
-        _Option(["-intreefile", "intreefile"],
-                 "Phylip tree file"),
-        _Option(["-weights", "weights"],
-                 "weights file"),
-        _Option(["-maxtrees", "maxtrees"],
-                 "max trees to save during run"),
-        _Option(["-thorough", "thorough"],
-                 "more thorough search (Y/n)"),
-        _Option(["-rearrange", "rearrange"],
-                 "Rearrange on just 1 best tree (Y/n)"),
-        _Option(["-transversion", "transversion"],
-                 "Use tranversion parsimony (y/N)"),
-        _Option(["-njumble", "njumble"],
-                 "number of times to randomise input order (default is 0)"),
-        _Option(["-seed", "seed"],
-                 "provide random seed"),
-        _Option(["-outgrno", "outgrno"],
-                 "Specify outgroup"),
-        _Option(["-thresh", "thresh"],
-                 "Use threshold parsimony (y/N)"),
-        _Option(["-threshold", "threshold"],
-                 "Threshold value"),
-        _Option(["-trout", "trout"],
-                 "Write trees to file (Y/n)"),
-        _Option(["-outtreefile", "outtreefile"],
-                 "filename for output tree"),
-        _Option(["-dotdiff", "dotdiff"],
-                 "Use dot-differencing? [Y/n]")]
+            _Option(["-sequence", "sequence"],
+                    "seq file to use (phylip)",
+                    filename=True,
+                    is_required=True),
+            _Option(["-intreefile", "intreefile"],
+                    "Phylip tree file"),
+            _Option(["-weights", "weights"],
+                    "weights file"),
+            _Option(["-maxtrees", "maxtrees"],
+                    "max trees to save during run"),
+            _Option(["-thorough", "thorough"],
+                    "more thorough search (Y/n)"),
+            _Option(["-rearrange", "rearrange"],
+                    "Rearrange on just 1 best tree (Y/n)"),
+            _Option(["-transversion", "transversion"],
+                    "Use tranversion parsimony (y/N)"),
+            _Option(["-njumble", "njumble"],
+                    "number of times to randomise input order (default is 0)"),
+            _Option(["-seed", "seed"],
+                    "provide random seed"),
+            _Option(["-outgrno", "outgrno"],
+                    "Specify outgroup"),
+            _Option(["-thresh", "thresh"],
+                    "Use threshold parsimony (y/N)"),
+            _Option(["-threshold", "threshold"],
+                    "Threshold value"),
+            _Option(["-trout", "trout"],
+                    "Write trees to file (Y/n)"),
+            _Option(["-outtreefile", "outtreefile"],
+                    "filename for output tree"),
+            _Option(["-dotdiff", "dotdiff"],
+                    "Use dot-differencing? [Y/n]"),
+            ]
         _EmbossCommandLine.__init__(self, cmd, **kwargs)
 
 
@@ -677,34 +681,35 @@ class FProtParsCommandline(_EmbossCommandLine):
     """
     def __init__(self, cmd="fprotpars", **kwargs):
         self.parameters = [
-        _Option(["-sequence", "sequence"],
-                "seq file to use (phylip)",
-                filename=True,
-                is_required=True),
-        _Option(["-intreefile", "intreefile"],
-                 "Phylip tree file to score"),
-        _Option(["-outtreefile", "outtreefile"],
-                "phylip tree output file",
-                filename=True,
-                is_required=True),
-        _Option(["-weights", "weights"],
-                 "weights file"),
-        _Option(["-whichcode", "whichcode"],
-                 "which genetic code, [U,M,V,F,Y]]"),
-        _Option(["-njumble", "njumble"],
-                 "number of times to randomise input order (default is 0)"),
-        _Option(["-seed", "seed"],
-                 "provide random seed"),
-        _Option(["-outgrno", "outgrno"],
-                 "Specify outgroup"),
-        _Option(["-thresh", "thresh"],
-                 "Use threshold parsimony (y/N)"),
-        _Option(["-threshold", "threshold"],
-                 "Threshold value"),
-        _Option(["-trout", "trout"],
-                 "Write trees to file (Y/n)"),
-        _Option(["-dotdiff", "dotdiff"],
-                 "Use dot-differencing? [Y/n]")]
+            _Option(["-sequence", "sequence"],
+                    "seq file to use (phylip)",
+                    filename=True,
+                    is_required=True),
+            _Option(["-intreefile", "intreefile"],
+                    "Phylip tree file to score"),
+            _Option(["-outtreefile", "outtreefile"],
+                    "phylip tree output file",
+                    filename=True,
+                    is_required=True),
+            _Option(["-weights", "weights"],
+                    "weights file"),
+            _Option(["-whichcode", "whichcode"],
+                    "which genetic code, [U,M,V,F,Y]]"),
+            _Option(["-njumble", "njumble"],
+                    "number of times to randomise input order (default is 0)"),
+            _Option(["-seed", "seed"],
+                    "provide random seed"),
+            _Option(["-outgrno", "outgrno"],
+                    "Specify outgroup"),
+            _Option(["-thresh", "thresh"],
+                    "Use threshold parsimony (y/N)"),
+            _Option(["-threshold", "threshold"],
+                    "Threshold value"),
+            _Option(["-trout", "trout"],
+                    "Write trees to file (Y/n)"),
+            _Option(["-dotdiff", "dotdiff"],
+                    "Use dot-differencing? [Y/n]"),
+            ]
         _EmbossCommandLine.__init__(self, cmd, **kwargs)
 
 
@@ -716,36 +721,37 @@ class FProtDistCommandline(_EmbossCommandLine):
     """
     def __init__(self, cmd="fprotdist", **kwargs):
         self.parameters = [
-        _Option(["-sequence", "sequence"],
-                "seq file to use (phylip)",
-                filename=True,
-                is_required=True),
-        _Option(["-ncategories", "ncategories"],
-                 "number of rate catergories (1-9)"),
-        _Option(["-rate", "rate"],
-                 "rate for each category"),
-        _Option(["-catergories", "catergories"],
-                 "file of rates"),
-        _Option(["-weights", "weights"],
-                 "weights file"),
-        _Option(["-method", "method"],
-                 "sub. model [j,h,d,k,s,c]"),
-        _Option(["-gamma", "gamma"],
-                 "gamma [g, i,c]"),
-        _Option(["-gammacoefficient", "gammacoefficient"],
-                 "value for gamma (> 0.001)"),
-        _Option(["-invarcoefficient", "invarcoefficient"],
-                 "float for variation of substitution rate among sites"),
-        _Option(["-aacateg", "aacateg"],
-                 "Choose the category to use [G,C,H]"),
-        _Option(["-whichcode", "whichcode"],
-                 "genetic code [c,m,v,f,y]"),
-        _Option(["-ease", "ease"],
-                 "Pob change catergory (float between -0 and 1)"),
-        _Option(["-ttratio", "ttratio"],
-                 "Transition/transversion ratio (0-1)"),
-        _Option(["-basefreq", "basefreq"],
-                 "DNA base frequencies (space separated list)")]
+            _Option(["-sequence", "sequence"],
+                    "seq file to use (phylip)",
+                    filename=True,
+                    is_required=True),
+            _Option(["-ncategories", "ncategories"],
+                    "number of rate catergories (1-9)"),
+            _Option(["-rate", "rate"],
+                    "rate for each category"),
+            _Option(["-catergories", "catergories"],
+                    "file of rates"),
+            _Option(["-weights", "weights"],
+                    "weights file"),
+            _Option(["-method", "method"],
+                    "sub. model [j,h,d,k,s,c]"),
+            _Option(["-gamma", "gamma"],
+                    "gamma [g, i,c]"),
+            _Option(["-gammacoefficient", "gammacoefficient"],
+                    "value for gamma (> 0.001)"),
+            _Option(["-invarcoefficient", "invarcoefficient"],
+                    "float for variation of substitution rate among sites"),
+            _Option(["-aacateg", "aacateg"],
+                    "Choose the category to use [G,C,H]"),
+            _Option(["-whichcode", "whichcode"],
+                    "genetic code [c,m,v,f,y]"),
+            _Option(["-ease", "ease"],
+                    "Pob change catergory (float between -0 and 1)"),
+            _Option(["-ttratio", "ttratio"],
+                    "Transition/transversion ratio (0-1)"),
+            _Option(["-basefreq", "basefreq"],
+                    "DNA base frequencies (space separated list)"),
+            ]
         _EmbossCommandLine.__init__(self, cmd, **kwargs)
 
 
@@ -757,22 +763,23 @@ class FConsenseCommandline(_EmbossCommandLine):
     """
     def __init__(self, cmd="fconsense", **kwargs):
         self.parameters = [
-        _Option(["-intreefile", "intreefile"],
-                "file with phylip trees to make consensus from",
-                filename=True,
-                is_required=True),
-        _Option(["-method", "method"],
-                 "consensus method [s, mr, MRE, ml]"),
-        _Option(["-mlfrac", "mlfrac"],
-                 "cut-off freq for a branch to appear in consensus (0.5-1.0)"),
-        _Option(["-root", "root"],
-                 "treat trees as rooted (YES, no)"),
-        _Option(["-outgrno", "outgrno"],
-                 "OTU to use as outgroup (starts from 0)"),
-        _Option(["-trout", "trout"],
-                 "treat trees as rooted (YES, no)"),
-        _Option(["-outtreefile", "outtreefile"],
-                 "Phylip tree output file (optional)")]
+            _Option(["-intreefile", "intreefile"],
+                    "file with phylip trees to make consensus from",
+                    filename=True,
+                    is_required=True),
+            _Option(["-method", "method"],
+                    "consensus method [s, mr, MRE, ml]"),
+            _Option(["-mlfrac", "mlfrac"],
+                    "cut-off freq for branch to appear in consensus (0.5-1.0)"),
+            _Option(["-root", "root"],
+                    "treat trees as rooted (YES, no)"),
+            _Option(["-outgrno", "outgrno"],
+                    "OTU to use as outgroup (starts from 0)"),
+            _Option(["-trout", "trout"],
+                    "treat trees as rooted (YES, no)"),
+            _Option(["-outtreefile", "outtreefile"],
+                    "Phylip tree output file (optional)"),
+            ]
         _EmbossCommandLine.__init__(self, cmd, **kwargs)
 
 
@@ -781,363 +788,369 @@ class WaterCommandline(_EmbossCommandLine):
     """
     def __init__(self, cmd="water", **kwargs):
         self.parameters = [
-         _Option(["-asequence", "asequence"],
-                 "First sequence to align",
-                 filename=True,
-                 is_required=True),
-         _Option(["-bsequence", "bsequence"],
-                 "Second sequence to align",
-                 filename=True,
-                 is_required=True),
-         _Option(["-gapopen", "gapopen"],
-                 "Gap open penalty",
-                 is_required=True),
-         _Option(["-gapextend", "gapextend"],
-                 "Gap extension penalty",
-                 is_required=True),
-         _Option(["-datafile", "datafile"],
-                 "Matrix file",
-                 filename=True),
-         _Switch(["-nobrief", "nobrief"],
-                 "Display extended identity and similarity"),
-         _Switch(["-brief", "brief"],
-                 "Display brief identity and similarity"),
-         _Option(["-similarity", "similarity"],
-                 "Display percent identity and similarity"),
-         _Option(["-snucleotide", "snucleotide"],
-                 "Sequences are nucleotide (boolean)"),
-         _Option(["-sprotein", "sprotein"],
-                 "Sequences are protein (boolean)"),
-         _Option(["-aformat", "aformat"],
-                 "Display output in a different specified output format")]
+            _Option(["-asequence", "asequence"],
+                    "First sequence to align",
+                    filename=True,
+                    is_required=True),
+            _Option(["-bsequence", "bsequence"],
+                    "Second sequence to align",
+                    filename=True,
+                    is_required=True),
+            _Option(["-gapopen", "gapopen"],
+                    "Gap open penalty",
+                    is_required=True),
+            _Option(["-gapextend", "gapextend"],
+                    "Gap extension penalty",
+                    is_required=True),
+            _Option(["-datafile", "datafile"],
+                    "Matrix file",
+                    filename=True),
+            _Switch(["-nobrief", "nobrief"],
+                    "Display extended identity and similarity"),
+            _Switch(["-brief", "brief"],
+                    "Display brief identity and similarity"),
+            _Option(["-similarity", "similarity"],
+                    "Display percent identity and similarity"),
+            _Option(["-snucleotide", "snucleotide"],
+                    "Sequences are nucleotide (boolean)"),
+            _Option(["-sprotein", "sprotein"],
+                    "Sequences are protein (boolean)"),
+            _Option(["-aformat", "aformat"],
+                    "Display output in a different specified output format"),
+            ]
         _EmbossCommandLine.__init__(self, cmd, **kwargs)
 
 
 class NeedleCommandline(_EmbossCommandLine):
-    """Commandline object for the needle program from EMBOSS.
-    """
+    """Commandline object for the needle program from EMBOSS."""
     def __init__(self, cmd="needle", **kwargs):
         self.parameters = [
-         _Option(["-asequence", "asequence"],
-                 "First sequence to align",
-                 filename=True,
-                 is_required=True),
-         _Option(["-bsequence", "bsequence"],
-                  "Second sequence to align",
-                 filename=True,
-                 is_required=True),
-         _Option(["-gapopen", "gapopen"],
-                 "Gap open penalty",
-                 is_required=True),
-         _Option(["-gapextend", "gapextend"],
-                 "Gap extension penalty",
-                 is_required=True),
-         _Option(["-datafile", "datafile"],
-                 "Matrix file",
-                 filename=True),
-         _Option(["-endweight", "endweight"],
-                 "Apply And gap penalties"),
-         _Option(["-endopen", "endopen"],
-                 "The score taken away when an end gap is created."),
-         _Option(["-endextend", "endextend"],
-                 "The score added to the end gap penality for each base or "
-                 "residue in the end gap."),
-         _Switch(["-nobrief", "nobrief"],
-                 "Display extended identity and similarity"),
-         _Switch(["-brief", "brief"],
-                 "Display brief identity and similarity"),
-         _Option(["-similarity", "similarity"],
-                 "Display percent identity and similarity"),
-         _Option(["-snucleotide", "snucleotide"],
-                 "Sequences are nucleotide (boolean)"),
-         _Option(["-sprotein", "sprotein"],
-                 "Sequences are protein (boolean)"),
-         _Option(["-aformat", "aformat"],
-                 "Display output in a different specified output format")]
+            _Option(["-asequence", "asequence"],
+                    "First sequence to align",
+                    filename=True,
+                    is_required=True),
+            _Option(["-bsequence", "bsequence"],
+                    "Second sequence to align",
+                    filename=True,
+                    is_required=True),
+            _Option(["-gapopen", "gapopen"],
+                    "Gap open penalty",
+                    is_required=True),
+            _Option(["-gapextend", "gapextend"],
+                    "Gap extension penalty",
+                    is_required=True),
+            _Option(["-datafile", "datafile"],
+                    "Matrix file",
+                    filename=True),
+            _Option(["-endweight", "endweight"],
+                    "Apply And gap penalties"),
+            _Option(["-endopen", "endopen"],
+                    "The score taken away when an end gap is created."),
+            _Option(["-endextend", "endextend"],
+                    "The score added to the end gap penality for each base or "
+                    "residue in the end gap."),
+            _Switch(["-nobrief", "nobrief"],
+                    "Display extended identity and similarity"),
+            _Switch(["-brief", "brief"],
+                    "Display brief identity and similarity"),
+            _Option(["-similarity", "similarity"],
+                    "Display percent identity and similarity"),
+            _Option(["-snucleotide", "snucleotide"],
+                    "Sequences are nucleotide (boolean)"),
+            _Option(["-sprotein", "sprotein"],
+                    "Sequences are protein (boolean)"),
+            _Option(["-aformat", "aformat"],
+                    "Display output in a different specified output format"),
+            ]
         _EmbossCommandLine.__init__(self, cmd, **kwargs)
 
 
 class NeedleallCommandline(_EmbossCommandLine):
-    """Commandline object for the needleall program from EMBOSS.
-    """
+    """Commandline object for the needleall program from EMBOSS."""
+
     def __init__(self, cmd="needleall", **kwargs):
         self.parameters = [
-         _Option(["-asequence", "asequence"],
-                 "First sequence to align",
-                 filename=True,
-                 is_required=True),
-         _Option(["-bsequence", "bsequence"],
-                  "Second sequence to align",
-                 filename=True,
-                 is_required=True),
-         _Option(["-gapopen", "gapopen"],
-                 "Gap open penalty",
-                 is_required=True),
-         _Option(["-gapextend", "gapextend"],
-                 "Gap extension penalty",
-                 is_required=True),
-         _Option(["-datafile", "datafile"],
-                 "Matrix file",
-                 filename=True),
-         _Option(["-minscore", "minscore"],
-                 "Exclude alignments with scores below this threshold score."),
-         _Option(["-errorfile", "errorfile"],
-                 "Error file to be written to."),
-         _Option(["-endweight", "endweight"],
-                 "Apply And gap penalties"),
-         _Option(["-endopen", "endopen"],
-                 "The score taken away when an end gap is created."),
-         _Option(["-endextend", "endextend"],
-                 "The score added to the end gap penality for each base or "
-                 "residue in the end gap."),
-         _Switch(["-nobrief", "nobrief"],
-                 "Display extended identity and similarity"),
-         _Switch(["-brief", "brief"],
-                 "Display brief identity and similarity"),
-         _Option(["-similarity", "similarity"],
-                 "Display percent identity and similarity"),
-         _Option(["-snucleotide", "snucleotide"],
-                 "Sequences are nucleotide (boolean)"),
-         _Option(["-sprotein", "sprotein"],
-                 "Sequences are protein (boolean)"),
-         _Option(["-aformat", "aformat"],
-                 "Display output in a different specified output format")]
+            _Option(["-asequence", "asequence"],
+                    "First sequence to align",
+                    filename=True,
+                    is_required=True),
+            _Option(["-bsequence", "bsequence"],
+                    "Second sequence to align",
+                    filename=True,
+                    is_required=True),
+            _Option(["-gapopen", "gapopen"],
+                    "Gap open penalty",
+                    is_required=True),
+            _Option(["-gapextend", "gapextend"],
+                    "Gap extension penalty",
+                    is_required=True),
+            _Option(["-datafile", "datafile"],
+                    "Matrix file",
+                    filename=True),
+            _Option(["-minscore", "minscore"],
+                    "Exclude alignments with scores below this threshold score."),
+            _Option(["-errorfile", "errorfile"],
+                    "Error file to be written to."),
+            _Option(["-endweight", "endweight"],
+                    "Apply And gap penalties"),
+            _Option(["-endopen", "endopen"],
+                    "The score taken away when an end gap is created."),
+            _Option(["-endextend", "endextend"],
+                    "The score added to the end gap penality for each base or "
+                    "residue in the end gap."),
+            _Switch(["-nobrief", "nobrief"],
+                    "Display extended identity and similarity"),
+            _Switch(["-brief", "brief"],
+                    "Display brief identity and similarity"),
+            _Option(["-similarity", "similarity"],
+                    "Display percent identity and similarity"),
+            _Option(["-snucleotide", "snucleotide"],
+                    "Sequences are nucleotide (boolean)"),
+            _Option(["-sprotein", "sprotein"],
+                    "Sequences are protein (boolean)"),
+            _Option(["-aformat", "aformat"],
+                    "Display output in a different specified output format"),
+            ]
         _EmbossCommandLine.__init__(self, cmd, **kwargs)
 
 
 class StretcherCommandline(_EmbossCommandLine):
-    """Commandline object for the stretcher program from EMBOSS.
-    """
+    """Commandline object for the stretcher program from EMBOSS."""
+
     def __init__(self, cmd="stretcher", **kwargs):
         self.parameters = [
-         _Option(["-asequence", "asequence"],
-                 "First sequence to align",
-                 filename=True,
-                 is_required=True),
-         _Option(["-bsequence", "bsequence"],
-                  "Second sequence to align",
-                 filename=True,
-                 is_required=True),
-         _Option(["-gapopen", "gapopen"],
-                 "Gap open penalty",
-                 is_required=True,
-                 checker_function=lambda value: isinstance(value, int)),
-         _Option(["-gapextend", "gapextend"],
-                 "Gap extension penalty",
-                 is_required=True,
-                 checker_function=lambda value: isinstance(value, int)),
-         _Option(["-datafile", "datafile"],
-                 "Matrix file",
-                 filename=True),
-         _Option(["-snucleotide", "snucleotide"],
-                 "Sequences are nucleotide (boolean)"),
-         _Option(["-sprotein", "sprotein"],
-                 "Sequences are protein (boolean)"),
-         _Option(["-aformat", "aformat"],
-                 "Display output in a different specified output format")]
+            _Option(["-asequence", "asequence"],
+                    "First sequence to align",
+                    filename=True,
+                    is_required=True),
+            _Option(["-bsequence", "bsequence"],
+                    "Second sequence to align",
+                    filename=True,
+                    is_required=True),
+            _Option(["-gapopen", "gapopen"],
+                    "Gap open penalty",
+                    is_required=True,
+                    checker_function=lambda value: isinstance(value, int)),
+            _Option(["-gapextend", "gapextend"],
+                    "Gap extension penalty",
+                    is_required=True,
+                    checker_function=lambda value: isinstance(value, int)),
+            _Option(["-datafile", "datafile"],
+                    "Matrix file",
+                    filename=True),
+            _Option(["-snucleotide", "snucleotide"],
+                    "Sequences are nucleotide (boolean)"),
+            _Option(["-sprotein", "sprotein"],
+                    "Sequences are protein (boolean)"),
+            _Option(["-aformat", "aformat"],
+                    "Display output in a different specified output format"),
+            ]
         _EmbossCommandLine.__init__(self, cmd, **kwargs)
 
 
 class FuzznucCommandline(_EmbossCommandLine):
-    """Commandline object for the fuzznuc program from EMBOSS.
-    """
+    """Commandline object for the fuzznuc program from EMBOSS."""
+
     def __init__(self, cmd="fuzznuc", **kwargs):
         self.parameters = [
-         _Option(["-sequence", "sequence"],
-                 "Sequence database USA",
-                 is_required=True),
-         _Option(["-pattern", "pattern"],
-                 "Search pattern, using standard IUPAC one-letter codes",
-                 is_required=True),
-         _Option(["-mismatch", "mismatch"],
-                 "Number of mismatches",
-                 is_required=True),
-         _Option(["-complement", "complement"],
-                 "Search complementary strand"),
-         _Option(["-rformat", "rformat"],
-                 "Specify the report format to output in.")]
+            _Option(["-sequence", "sequence"],
+                    "Sequence database USA",
+                    is_required=True),
+            _Option(["-pattern", "pattern"],
+                    "Search pattern, using standard IUPAC one-letter codes",
+                    is_required=True),
+            _Option(["-mismatch", "mismatch"],
+                    "Number of mismatches",
+                    is_required=True),
+            _Option(["-complement", "complement"],
+                    "Search complementary strand"),
+            _Option(["-rformat", "rformat"],
+                    "Specify the report format to output in."),
+            ]
         _EmbossCommandLine.__init__(self, cmd, **kwargs)
 
 
 class Est2GenomeCommandline(_EmbossCommandLine):
-    """Commandline object for the est2genome program from EMBOSS.
-    """
+    """Commandline object for the est2genome program from EMBOSS."""
+
     def __init__(self, cmd="est2genome", **kwargs):
         self.parameters = [
-         _Option(["-est", "est"],
-                 "EST sequence(s)",
-                 is_required=True),
-         _Option(["-genome", "genome"],
-                 "Genomic sequence",
-                 is_required=True),
-         _Option(["-match", "match"],
-                 "Score for matching two bases"),
-         _Option(["-mismatch", "mismatch"],
-                 "Cost for mismatching two bases"),
-         _Option(["-gappenalty", "gappenalty"],
-                 "Cost for deleting a single base in either sequence, "
-                 "excluding introns"),
-         _Option(["-intronpenalty", "intronpenalty"],
-                 "Cost for an intron, independent of length."),
-         _Option(["-splicepenalty", "splicepenalty"],
-                 "Cost for an intron, independent of length "
-                 "and starting/ending on donor-acceptor sites"),
-         _Option(["-minscore", "minscore"],
-                 "Exclude alignments with scores below this threshold score."),
-         _Option(["-reverse", "reverse"],
-                 "Reverse the orientation of the EST sequence"),
-         _Option(["-splice", "splice"],
-                 "Use donor and acceptor splice sites."),
-         _Option(["-mode", "mode"],
-                 "This determines the comparion mode. 'both', 'forward' "
-                 "'reverse'"),
-         _Option(["-best", "best"],
-                 "You can print out all comparisons instead of just the best"),
-         _Option(["-space", "space"],
-                 "for linear-space recursion."),
-         _Option(["-shuffle", "shuffle"],
-                 "Shuffle"),
-         _Option(["-seed", "seed"],
-                 "Random number seed"),
-         _Option(["-align", "align"],
-                 "Show the alignment."),
-         _Option(["-width", "width"],
-                 "Alignment width")
-        ]
+            _Option(["-est", "est"],
+                    "EST sequence(s)",
+                    is_required=True),
+            _Option(["-genome", "genome"],
+                    "Genomic sequence",
+                    is_required=True),
+            _Option(["-match", "match"],
+                    "Score for matching two bases"),
+            _Option(["-mismatch", "mismatch"],
+                    "Cost for mismatching two bases"),
+            _Option(["-gappenalty", "gappenalty"],
+                    "Cost for deleting a single base in either sequence, "
+                    "excluding introns"),
+            _Option(["-intronpenalty", "intronpenalty"],
+                    "Cost for an intron, independent of length."),
+            _Option(["-splicepenalty", "splicepenalty"],
+                    "Cost for an intron, independent of length "
+                    "and starting/ending on donor-acceptor sites"),
+            _Option(["-minscore", "minscore"],
+                    "Exclude alignments with scores below this threshold score."),
+            _Option(["-reverse", "reverse"],
+                    "Reverse the orientation of the EST sequence"),
+            _Option(["-splice", "splice"],
+                    "Use donor and acceptor splice sites."),
+            _Option(["-mode", "mode"],
+                    "This determines the comparion mode. 'both', 'forward' "
+                    "'reverse'"),
+            _Option(["-best", "best"],
+                    "You can print out all comparisons instead of just the best"),
+            _Option(["-space", "space"],
+                    "for linear-space recursion."),
+            _Option(["-shuffle", "shuffle"],
+                    "Shuffle"),
+            _Option(["-seed", "seed"],
+                    "Random number seed"),
+            _Option(["-align", "align"],
+                    "Show the alignment."),
+            _Option(["-width", "width"],
+                    "Alignment width"),
+            ]
         _EmbossCommandLine.__init__(self, cmd, **kwargs)
 
 
 class ETandemCommandline(_EmbossCommandLine):
-    """Commandline object for the etandem program from EMBOSS.
-    """
+    """Commandline object for the etandem program from EMBOSS."""
+
     def __init__(self, cmd="etandem", **kwargs):
         self.parameters = [
-         _Option(["-sequence", "sequence"],
-                 "Sequence",
-                 filename=True,
-                 is_required=True),
-         _Option(["-minrepeat", "minrepeat"],
-                 "Minimum repeat size",
-                 is_required=True),
-         _Option(["-maxrepeat", "maxrepeat"],
-                 "Maximum repeat size",
-                 is_required=True),
-         _Option(["-threshold", "threshold"],
-                 "Threshold score"),
-         _Option(["-mismatch", "mismatch"],
-                   "Allow N as a mismatch"),
-         _Option(["-uniform", "uniform"],
-                   "Allow uniform consensus"),
-         _Option(["-rformat", "rformat"],
-                 "Output report format")]
+            _Option(["-sequence", "sequence"],
+                    "Sequence",
+                    filename=True,
+                    is_required=True),
+            _Option(["-minrepeat", "minrepeat"],
+                    "Minimum repeat size",
+                    is_required=True),
+            _Option(["-maxrepeat", "maxrepeat"],
+                    "Maximum repeat size",
+                    is_required=True),
+            _Option(["-threshold", "threshold"],
+                    "Threshold score"),
+            _Option(["-mismatch", "mismatch"],
+                    "Allow N as a mismatch"),
+            _Option(["-uniform", "uniform"],
+                    "Allow uniform consensus"),
+            _Option(["-rformat", "rformat"],
+                    "Output report format"),
+            ]
         _EmbossCommandLine.__init__(self, cmd, **kwargs)
 
 
 class EInvertedCommandline(_EmbossCommandLine):
-    """Commandline object for the einverted program from EMBOSS.
-    """
+    """Commandline object for the einverted program from EMBOSS."""
+
     def __init__(self, cmd="einverted", **kwargs):
         self.parameters = [
-         _Option(["-sequence", "sequence"],
-                 "Sequence",
-                 filename=True,
-                 is_required=True),
-         _Option(["-gap", "gap"],
-                 "Gap penalty",
-                 filename=True,
-                 is_required=True),
-         _Option(["-threshold", "threshold"],
-                 "Minimum score threshold",
-                 is_required=True),
-         _Option(["-match", "match"],
-                 "Match score",
-                 is_required=True),
-         _Option(["-mismatch", "mismatch"],
-                 "Mismatch score",
-                 is_required=True),
-         _Option(["-maxrepeat", "maxrepeat"],
-                 "Maximum separation between the start and end of repeat"),
-         ]
+            _Option(["-sequence", "sequence"],
+                    "Sequence",
+                    filename=True,
+                    is_required=True),
+            _Option(["-gap", "gap"],
+                    "Gap penalty",
+                    filename=True,
+                    is_required=True),
+            _Option(["-threshold", "threshold"],
+                    "Minimum score threshold",
+                    is_required=True),
+            _Option(["-match", "match"],
+                    "Match score",
+                    is_required=True),
+            _Option(["-mismatch", "mismatch"],
+                    "Mismatch score",
+                    is_required=True),
+            _Option(["-maxrepeat", "maxrepeat"],
+                    "Maximum separation between the start and end of repeat"),
+            ]
         _EmbossCommandLine.__init__(self, cmd, **kwargs)
 
 
 class PalindromeCommandline(_EmbossCommandLine):
-    """Commandline object for the palindrome program from EMBOSS.
-    """
+    """Commandline object for the palindrome program from EMBOSS."""
+
     def __init__(self, cmd="palindrome", **kwargs):
         self.parameters = [
-         _Option(["-sequence", "sequence"],
-                 "Sequence",
-                 filename=True,
-                 is_required=True),
-         _Option(["-minpallen", "minpallen"],
-                 "Minimum palindrome length",
-                 is_required=True),
-         _Option(["-maxpallen", "maxpallen"],
-                 "Maximum palindrome length",
-                 is_required=True),
-         _Option(["-gaplimit", "gaplimit"],
-                 "Maximum gap between repeats",
-                 is_required=True),
-         _Option(["-nummismatches", "nummismatches"],
-                 "Number of mismatches allowed",
-                 is_required=True),
-         _Option(["-overlap", "overlap"],
-                 "Report overlapping matches",
-                 is_required=True),
-         ]
+            _Option(["-sequence", "sequence"],
+                    "Sequence",
+                    filename=True,
+                    is_required=True),
+            _Option(["-minpallen", "minpallen"],
+                    "Minimum palindrome length",
+                    is_required=True),
+            _Option(["-maxpallen", "maxpallen"],
+                    "Maximum palindrome length",
+                    is_required=True),
+            _Option(["-gaplimit", "gaplimit"],
+                    "Maximum gap between repeats",
+                    is_required=True),
+            _Option(["-nummismatches", "nummismatches"],
+                    "Number of mismatches allowed",
+                    is_required=True),
+            _Option(["-overlap", "overlap"],
+                    "Report overlapping matches",
+                    is_required=True),
+            ]
         _EmbossCommandLine.__init__(self, cmd, **kwargs)
 
 
 class TranalignCommandline(_EmbossCommandLine):
-    """Commandline object for the tranalign program from EMBOSS.
-    """
+    """Commandline object for the tranalign program from EMBOSS."""
+
     def __init__(self, cmd="tranalign", **kwargs):
         self.parameters = [
-         _Option(["-asequence", "asequence"],
-                 "Nucleotide sequences to be aligned.",
-                 filename=True,
-                 is_required=True),
-         _Option(["-bsequence", "bsequence"],
-                 "Protein sequence alignment",
-                 filename=True,
-                 is_required=True),
-         _Option(["-outseq", "outseq"],
-                 "Output sequence file.",
-                 filename=True,
-                 is_required=True),
-         _Option(["-table", "table"],
-                 "Code to use")]
+            _Option(["-asequence", "asequence"],
+                    "Nucleotide sequences to be aligned.",
+                    filename=True,
+                    is_required=True),
+            _Option(["-bsequence", "bsequence"],
+                    "Protein sequence alignment",
+                    filename=True,
+                    is_required=True),
+            _Option(["-outseq", "outseq"],
+                    "Output sequence file.",
+                    filename=True,
+                    is_required=True),
+            _Option(["-table", "table"],
+                    "Code to use"),
+            ]
         _EmbossCommandLine.__init__(self, cmd, **kwargs)
 
 
 class DiffseqCommandline(_EmbossCommandLine):
-    """Commandline object for the diffseq program from EMBOSS.
-    """
+    """Commandline object for the diffseq program from EMBOSS."""
+
     def __init__(self, cmd="diffseq", **kwargs):
         self.parameters = [
-         _Option(["-asequence", "asequence"],
-                 "First sequence to compare",
-                 filename=True,
-                 is_required=True),
-         _Option(["-bsequence", "bsequence"],
-                 "Second sequence to compare",
-                 filename=True,
-                 is_required=True),
-         _Option(["-wordsize", "wordsize"],
-                 "Word size to use for comparisons (10 default)",
-                 is_required=True),
-         _Option(["-aoutfeat", "aoutfeat"],
-                 "File for output of first sequence's features",
-                 filename=True,
-                 is_required=True),
-         _Option(["-boutfeat", "boutfeat"],
-                 "File for output of second sequence's features",
-                 filename=True,
-                 is_required=True),
-         _Option(["-rformat", "rformat"],
-                 "Output report file format")
-         ]
+            _Option(["-asequence", "asequence"],
+                    "First sequence to compare",
+                    filename=True,
+                    is_required=True),
+            _Option(["-bsequence", "bsequence"],
+                    "Second sequence to compare",
+                    filename=True,
+                    is_required=True),
+            _Option(["-wordsize", "wordsize"],
+                    "Word size to use for comparisons (10 default)",
+                    is_required=True),
+            _Option(["-aoutfeat", "aoutfeat"],
+                    "File for output of first sequence's features",
+                    filename=True,
+                    is_required=True),
+            _Option(["-boutfeat", "boutfeat"],
+                    "File for output of second sequence's features",
+                    filename=True,
+                    is_required=True),
+            _Option(["-rformat", "rformat"],
+                    "Output report file format")
+            ]
         _EmbossCommandLine.__init__(self, cmd, **kwargs)
 
 
@@ -1157,34 +1170,34 @@ class IepCommandline(_EmbossCommandLine):
     """
     def __init__(self, cmd="iep", **kwargs):
         self.parameters = [
-         _Option(["-sequence", "sequence"],
-                "Protein sequence(s) filename",
-                 filename=True,
-                 is_required=True),
-         _Option(["-amino", "amino"],
-                 """Number of N-termini
-
-                 Integer 0 (default) or more.
-                 """),
-         _Option(["-carboxyl", "carboxyl"],
-                 """Number of C-termini
-
-                 Integer 0 (default) or more.
-                 """),
-         _Option(["-lysinemodified", "lysinemodified"],
-                 """Number of modified lysines
-
-                 Integer 0 (default) or more.
-                 """),
-         _Option(["-disulphides", "disulphides"],
-                 """Number of disulphide bridges
-
-                 Integer 0 (default) or more.
-                 """),
-         # Should we implement the -termini switch as well?
-         _Option(["-notermini", "notermini"],
-                 "Exclude (True) or include (False) charge at N and C terminus."),
-         ]
+            _Option(["-sequence", "sequence"],
+                    "Protein sequence(s) filename",
+                    filename=True,
+                    is_required=True),
+            _Option(["-amino", "amino"],
+                    """Number of N-termini
+
+                    Integer 0 (default) or more.
+                    """),
+            _Option(["-carboxyl", "carboxyl"],
+                    """Number of C-termini
+
+                    Integer 0 (default) or more.
+                    """),
+            _Option(["-lysinemodified", "lysinemodified"],
+                    """Number of modified lysines
+
+                    Integer 0 (default) or more.
+                    """),
+            _Option(["-disulphides", "disulphides"],
+                    """Number of disulphide bridges
+
+                    Integer 0 (default) or more.
+                    """),
+            # Should we implement the -termini switch as well?
+            _Option(["-notermini", "notermini"],
+                    "Exclude (True) or include (False) charge at N and C terminus."),
+            ]
         _EmbossCommandLine.__init__(self, cmd, **kwargs)
 
 
@@ -1202,17 +1215,17 @@ class SeqretCommandline(_EmbossMinimalCommandLine):
     """
     def __init__(self, cmd="seqret", **kwargs):
         self.parameters = [
-         _Option(["-sequence", "sequence"],
-                 "Input sequence(s) filename",
-                 filename=True),
-         _Option(["-outseq", "outseq"],
-                 "Output sequence file.",
-                 filename=True),
-         _Option(["-sformat", "sformat"],
-                 "Input sequence(s) format (e.g. fasta, genbank)"),
-         _Option(["-osformat", "osformat"],
-                 "Output sequence(s) format (e.g. fasta, genbank)"),
-         ]
+            _Option(["-sequence", "sequence"],
+                    "Input sequence(s) filename",
+                    filename=True),
+            _Option(["-outseq", "outseq"],
+                    "Output sequence file.",
+                    filename=True),
+            _Option(["-sformat", "sformat"],
+                    "Input sequence(s) format (e.g. fasta, genbank)"),
+            _Option(["-osformat", "osformat"],
+                    "Output sequence(s) format (e.g. fasta, genbank)"),
+            ]
         _EmbossMinimalCommandLine.__init__(self, cmd, **kwargs)
 
     def _validate(self):
@@ -1242,15 +1255,15 @@ class SeqmatchallCommandline(_EmbossCommandLine):
     """
     def __init__(self, cmd="seqmatchall", **kwargs):
         self.parameters = [
-          _Option(["-sequence", "sequence"],
-                  "Readable set of sequences",
-                  filename=True,
-                  is_required=True),
-          _Option(["-wordsize", "wordsize"],
-                  "Word size (Integer 2 or more, default 4)"),
-          _Option(["-aformat", "aformat"],
-                  "Display output in a different specified output format"),
-        ]
+            _Option(["-sequence", "sequence"],
+                    "Readable set of sequences",
+                    filename=True,
+                    is_required=True),
+            _Option(["-wordsize", "wordsize"],
+                    "Word size (Integer 2 or more, default 4)"),
+            _Option(["-aformat", "aformat"],
+                    "Display output in a different specified output format"),
+            ]
         _EmbossCommandLine.__init__(self, cmd, **kwargs)
 
 
diff --git a/Bio/Entrez/DTDs/NCBI_Systems.dtd b/Bio/Entrez/DTDs/NCBI_Systems.dtd
new file mode 100644
index 0000000..d1f8c2a
--- /dev/null
+++ b/Bio/Entrez/DTDs/NCBI_Systems.dtd
@@ -0,0 +1,86 @@
+<!-- ============================================
+     ::DATATOOL:: Generated from "systems.asn"
+     ::DATATOOL:: by application DATATOOL version 1.9.3
+     ::DATATOOL:: on 09/17/2009 11:55:41
+     ============================================ -->
+
+<!-- NCBI_Systems.dtd
+  This file is built from a series of basic modules.
+  The actual ELEMENT and ENTITY declarations are in the modules.
+  This file is used to put them together.
+-->
+
+<!ENTITY % NCBI_Entity_module PUBLIC "-//NCBI//NCBI Entity Module//EN" "NCBI_Entity.mod.dtd">
+%NCBI_Entity_module;
+
+<!ENTITY % EMBL_General_module PUBLIC "-//NCBI//EMBL General Module//EN" "EMBL_General.mod.dtd">
+%EMBL_General_module;
+
+<!ENTITY % GenBank_General_module PUBLIC "-//NCBI//GenBank General Module//EN" "GenBank_General.mod.dtd">
+%GenBank_General_module;
+
+<!ENTITY % NCBI_Biblio_module PUBLIC "-//NCBI//NCBI Biblio Module//EN" "NCBI_Biblio.mod.dtd">
+%NCBI_Biblio_module;
+
+<!ENTITY % NCBI_BioSource_module PUBLIC "-//NCBI//NCBI BioSource Module//EN" "NCBI_BioSource.mod.dtd">
+%NCBI_BioSource_module;
+
+<!ENTITY % NCBI_Gene_module PUBLIC "-//NCBI//NCBI Gene Module//EN" "NCBI_Gene.mod.dtd">
+%NCBI_Gene_module;
+
+<!ENTITY % NCBI_General_module PUBLIC "-//NCBI//NCBI General Module//EN" "NCBI_General.mod.dtd">
+%NCBI_General_module;
+
+<!ENTITY % NCBI_Medline_module PUBLIC "-//NCBI//NCBI Medline Module//EN" "NCBI_Medline.mod.dtd">
+%NCBI_Medline_module;
+
+<!ENTITY % NCBI_Organism_module PUBLIC "-//NCBI//NCBI Organism Module//EN" "NCBI_Organism.mod.dtd">
+%NCBI_Organism_module;
+
+<!ENTITY % NCBI_Protein_module PUBLIC "-//NCBI//NCBI Protein Module//EN" "NCBI_Protein.mod.dtd">
+%NCBI_Protein_module;
+
+<!ENTITY % NCBI_Pub_module PUBLIC "-//NCBI//NCBI Pub Module//EN" "NCBI_Pub.mod.dtd">
+%NCBI_Pub_module;
+
+<!ENTITY % NCBI_RNA_module PUBLIC "-//NCBI//NCBI RNA Module//EN" "NCBI_RNA.mod.dtd">
+%NCBI_RNA_module;
+
+<!ENTITY % NCBI_Rsite_module PUBLIC "-//NCBI//NCBI Rsite Module//EN" "NCBI_Rsite.mod.dtd">
+%NCBI_Rsite_module;
+
+<!ENTITY % NCBI_SeqTable_module PUBLIC "-//NCBI//NCBI SeqTable Module//EN" "NCBI_SeqTable.mod.dtd">
+%NCBI_SeqTable_module;
+
+<!ENTITY % NCBI_Seqalign_module PUBLIC "-//NCBI//NCBI Seqalign Module//EN" "NCBI_Seqalign.mod.dtd">
+%NCBI_Seqalign_module;
+
+<!ENTITY % NCBI_Seqfeat_module PUBLIC "-//NCBI//NCBI Seqfeat Module//EN" "NCBI_Seqfeat.mod.dtd">
+%NCBI_Seqfeat_module;
+
+<!ENTITY % NCBI_Seqloc_module PUBLIC "-//NCBI//NCBI Seqloc Module//EN" "NCBI_Seqloc.mod.dtd">
+%NCBI_Seqloc_module;
+
+<!ENTITY % NCBI_Seqres_module PUBLIC "-//NCBI//NCBI Seqres Module//EN" "NCBI_Seqres.mod.dtd">
+%NCBI_Seqres_module;
+
+<!ENTITY % NCBI_Sequence_module PUBLIC "-//NCBI//NCBI Sequence Module//EN" "NCBI_Sequence.mod.dtd">
+%NCBI_Sequence_module;
+
+<!ENTITY % NCBI_Systems_module PUBLIC "-//NCBI//NCBI Systems Module//EN" "NCBI_Systems.mod.dtd">
+%NCBI_Systems_module;
+
+<!ENTITY % NCBI_TxInit_module PUBLIC "-//NCBI//NCBI TxInit Module//EN" "NCBI_TxInit.mod.dtd">
+%NCBI_TxInit_module;
+
+<!ENTITY % PDB_General_module PUBLIC "-//NCBI//PDB General Module//EN" "PDB_General.mod.dtd">
+%PDB_General_module;
+
+<!ENTITY % PIR_General_module PUBLIC "-//NCBI//PIR General Module//EN" "PIR_General.mod.dtd">
+%PIR_General_module;
+
+<!ENTITY % PRF_General_module PUBLIC "-//NCBI//PRF General Module//EN" "PRF_General.mod.dtd">
+%PRF_General_module;
+
+<!ENTITY % SP_General_module PUBLIC "-//NCBI//SP General Module//EN" "SP_General.mod.dtd">
+%SP_General_module;
diff --git a/Bio/Entrez/Parser.py b/Bio/Entrez/Parser.py
index 73e8666..3d9b9e6 100644
--- a/Bio/Entrez/Parser.py
+++ b/Bio/Entrez/Parser.py
@@ -33,7 +33,7 @@ XML, the parser analyzes the DTD referred at the top of (almost) every
 XML file returned by the Entrez Utilities. This is preferred over a hand-
 written solution, since the number of DTDs is rather large and their
 contents may change over time. About half the code in this parser deals
-wih parsing the DTD, and the other half with the XML itself.
+with parsing the DTD, and the other half with the XML itself.
 """
 import sys
 import re
@@ -145,12 +145,20 @@ class CorruptedXMLError(ValueError):
 
 
 class ValidationError(ValueError):
-    """Validating parsers raise this error if the parser finds a tag in the XML that is not defined in the DTD. Non-validating parsers do not raise this error. The Bio.Entrez.read and Bio.Entrez.parse functions use validating parsers by default (see those functions for more information)"""
+    """XML tag found which was not defined in the DTD.
+
+    Validating parsers raise this error if the parser finds a tag in the XML
+    that is not defined in the DTD. Non-validating parsers do not raise this
+    error. The Bio.Entrez.read and Bio.Entrez.parse functions use validating
+    parsers by default (see those functions for more information).
+    """
     def __init__(self, name):
         self.name = name
 
     def __str__(self):
-        return "Failed to find tag '%s' in the DTD. To skip all tags that are not represented in the DTD, please call Bio.Entrez.read or Bio.Entrez.parse with validate=False." % self.name
+        return ("Failed to find tag '%s' in the DTD. To skip all tags that "
+                "are not represented in the DTD, please call Bio.Entrez.read "
+                "or Bio.Entrez.parse with validate=False." % self.name)
 
 
 class DataHandler(object):
diff --git a/Bio/Entrez/__init__.py b/Bio/Entrez/__init__.py
index d2d1f19..40edccc 100644
--- a/Bio/Entrez/__init__.py
+++ b/Bio/Entrez/__init__.py
@@ -1,7 +1,8 @@
 # Copyright 1999-2000 by Jeffrey Chang.  All rights reserved.
 # Copyright 2008-2013 by Michiel de Hoon.  All rights reserved.
-# Revisions copyright 2011-2015 by Peter Cock. All rights reserved.
+# Revisions copyright 2011-2016 by Peter Cock. All rights reserved.
 # Revisions copyright 2015 by Eric Rasche. All rights reserved.
+# Revisions copyright 2015 by Carlos Pena. All rights reserved.
 # This code is part of the Biopython distribution and governed by its
 # license.  Please see the LICENSE file that should have been included
 # as part of this package.
@@ -95,7 +96,6 @@ from __future__ import print_function
 
 import time
 import warnings
-import os.path
 
 # Importing these functions with leading underscore as not intended for reuse
 from Bio._py3k import urlopen as _urlopen
@@ -123,7 +123,7 @@ def epost(db, **keywds):
 
     Raises an IOError exception if there's a network error.
     """
-    cgi = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/epost.fcgi'
+    cgi = 'https://eutils.ncbi.nlm.nih.gov/entrez/eutils/epost.fcgi'
     variables = {'db': db}
     variables.update(keywds)
     return _open(cgi, variables, post=True)
@@ -157,7 +157,7 @@ def efetch(db, **keywords):
     **Warning:** The NCBI changed the default retmode in Feb 2012, so many
     databases which previously returned text output now give XML.
     """
-    cgi = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi'
+    cgi = 'https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi'
     variables = {'db': db}
     variables.update(keywords)
     post = False
@@ -209,7 +209,7 @@ def esearch(db, term, **keywds):
     True
 
     """
-    cgi = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi'
+    cgi = 'https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi'
     variables = {'db': db,
                  'term': term}
     variables.update(keywds)
@@ -249,7 +249,7 @@ def elink(**keywds):
 
     This is explained in much more detail in the Biopython Tutorial.
     """
-    cgi = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi'
+    cgi = 'https://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi'
     variables = {}
     variables.update(keywds)
     return _open(cgi, variables)
@@ -277,7 +277,7 @@ def einfo(**keywds):
     True
 
     """
-    cgi = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/einfo.fcgi'
+    cgi = 'https://eutils.ncbi.nlm.nih.gov/entrez/eutils/einfo.fcgi'
     variables = {}
     variables.update(keywds)
     return _open(cgi, variables)
@@ -309,7 +309,7 @@ def esummary(**keywds):
     Computational biology and chemistry
 
     """
-    cgi = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi'
+    cgi = 'https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi'
     variables = {}
     variables.update(keywds)
     return _open(cgi, variables)
@@ -343,7 +343,7 @@ def egquery(**keywds):
     True
 
     """
-    cgi = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/egquery.fcgi'
+    cgi = 'https://eutils.ncbi.nlm.nih.gov/entrez/eutils/egquery.fcgi'
     variables = {}
     variables.update(keywds)
     return _open(cgi, variables)
@@ -372,12 +372,31 @@ def espell(**keywds):
     biopython
 
     """
-    cgi = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/espell.fcgi'
+    cgi = 'https://eutils.ncbi.nlm.nih.gov/entrez/eutils/espell.fcgi'
     variables = {}
     variables.update(keywds)
     return _open(cgi, variables)
 
 
+def _update_ecitmatch_variables(keywds):
+    # XML is the only supported value, and it actually returns TXT.
+    variables = {'retmode': 'xml'}
+    citation_keys = ('journal_title', 'year', 'volume', 'first_page', 'author_name', 'key')
+
+    # Accept pre-formatted strings
+    if isinstance(keywds['bdata'], str):
+        variables.update(keywds)
+    else:
+        # Alternatively accept a nicer interface
+        variables['db'] = keywds['db']
+        bdata = []
+        for citation in keywds['bdata']:
+            formatted_citation = '|'.join([citation.get(key, "") for key in citation_keys])
+            bdata.append(formatted_citation)
+        variables['bdata'] = '\r'.join(bdata)
+    return variables
+
+
 def ecitmatch(**keywds):
     """ECitMatch retrieves PMIDs-Citation linking
 
@@ -401,23 +420,8 @@ def ecitmatch(**keywds):
     >>> record = Entrez.ecitmatch(db="pubmed", bdata=[citation_1])
     >>> print(record["Query"])
     """
-    cgi = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/ecitmatch.cgi'
-    # XML is the only supported value, and it actually returns TXT.
-    variables = {'retmode': 'xml'}
-    citation_keys = ('journal_title', 'year', 'volume', 'first_page', 'author_name', 'key')
-
-    # Accept pre-formatted strings
-    if isinstance(keywds['bdata'], str):
-        variables.update(keywds)
-    else:
-        # Alternatively accept a nicer interface
-        variables['db'] = keywds['db']
-        bdata = []
-        for citation in keywds['bdata']:
-            formatted_citation = '|'.join([citation.get(key, "") for key in citation_keys])
-            bdata.append(formatted_citation)
-        variables['bdata'] = '\r'.join(bdata)
-
+    cgi = 'https://eutils.ncbi.nlm.nih.gov/entrez/eutils/ecitmatch.cgi'
+    variables = _update_ecitmatch_variables(keywds)
     return _open(cgi, variables, ecitmatch=True)
 
 
@@ -488,17 +492,12 @@ def _open(cgi, params=None, post=None, ecitmatch=False):
 
     The arugment post should be a boolean to explicitly control if an HTTP
     POST should be used rather an HTTP GET based on the query length.
-    By default (post=None), POST is used if the query URL would be over
-    1000 characters long.
-
-    The arugment post should be a boolean to explicitly control if an HTTP
-    POST should be used rather an HTTP GET based on the query length.
+    By default (post=None), POST is used if the URL encoded paramters would
+    be over 1000 characters long.
 
     This function also enforces the "up to three queries per second rule"
     to avoid abusing the NCBI servers.
     """
-    if params is None:
-        params = {}
     # NCBI requirement: At most three queries per second.
     # Equivalently, at least a third of second between queries
     delay = 0.333333334
@@ -509,6 +508,31 @@ def _open(cgi, params=None, post=None, ecitmatch=False):
         _open.previous = current + wait
     else:
         _open.previous = current
+
+    params = _construct_params(params)
+    options = _encode_options(ecitmatch, params)
+
+    # By default, post is None. Set to a boolean to over-ride length choice:
+    if post is None and len(options) > 1000:
+        post = True
+    cgi = _construct_cgi(cgi, post, options)
+
+    try:
+        if post:
+            handle = _urlopen(cgi, data=_as_bytes(options))
+        else:
+            handle = _urlopen(cgi)
+    except _HTTPError as exception:
+        raise exception
+
+    return _binary_to_string_handle(handle)
+_open.previous = 0
+
+
+def _construct_params(params):
+    if params is None:
+        params = {}
+
     # Remove None values from the parameters
     for key, value in list(params.items()):
         if value is None:
@@ -533,31 +557,23 @@ is A.N.Other at example.com, you can specify it as follows:
 In case of excessive usage of the E-utilities, NCBI will attempt to contact
 a user at the email address provided before blocking access to the
 E-utilities.""", UserWarning)
+    return params
+
 
+def _encode_options(ecitmatch, params):
     # Open a handle to Entrez.
     options = _urlencode(params, doseq=True)
     # _urlencode encodes pipes, which NCBI expects in ECitMatch
     if ecitmatch:
         options = options.replace('%7C', '|')
-    # print cgi + "?" + options
-
-    # By default, post is None. Set to a boolean to over-ride length choice:
-    if post is None and len(options) > 1000:
-        post = True
-    try:
-        if post:
-            # HTTP POST
-            handle = _urlopen(cgi, data=_as_bytes(options))
-        else:
-            # HTTP GET
-            cgi += "?" + options
-            handle = _urlopen(cgi)
-    except _HTTPError as exception:
-        raise exception
+    return options
 
-    return _binary_to_string_handle(handle)
 
-_open.previous = 0
+def _construct_cgi(cgi, post, options):
+    if not post:
+        # HTTP GET
+        cgi += "?" + options
+    return cgi
 
 
 def _test():
diff --git a/Bio/File.py b/Bio/File.py
index e5c2014..33e66d3 100644
--- a/Bio/File.py
+++ b/Bio/File.py
@@ -591,7 +591,8 @@ class _SQLiteManySeqFilesDict(_IndexedSeqFileDict):
         # TODO - Record the file size and modified date?
         con.execute(
             "CREATE TABLE file_data (file_number INTEGER, name TEXT);")
-        con.execute("CREATE TABLE offset_data (key TEXT, file_number INTEGER, offset INTEGER, length INTEGER);")
+        con.execute("CREATE TABLE offset_data (key TEXT, "
+                    "file_number INTEGER, offset INTEGER, length INTEGER);")
         count = 0
         for i, filename in enumerate(filenames):
             # Default to storing as an absolute path,
@@ -600,10 +601,11 @@ class _SQLiteManySeqFilesDict(_IndexedSeqFileDict):
                 # Since user gave BOTH filename & index as relative paths,
                 # we will store this relative to the index file even though
                 # if it may now start ../ (meaning up a level)
-                # Note for cross platform use (e.g. shared data drive over SAMBA),
-                # convert any Windows slash into Unix style / for relative paths.
+                # Note for cross platform use (e.g. shared drive over SAMBA),
+                # convert any Windows slash into Unix style for rel paths.
                 f = os.path.relpath(filename, relative_path).replace(os.path.sep, "/")
-            elif (os.path.dirname(os.path.abspath(filename)) + os.path.sep).startswith(relative_path + os.path.sep):
+            elif (os.path.dirname(os.path.abspath(filename)) +
+                  os.path.sep).startswith(relative_path + os.path.sep):
                 # Since sequence file is in same directory or sub directory,
                 # might as well make this into a relative path:
                 f = os.path.relpath(filename, relative_path).replace(os.path.sep, "/")
@@ -656,7 +658,7 @@ class _SQLiteManySeqFilesDict(_IndexedSeqFileDict):
     def __contains__(self, key):
         return bool(
             self._con.execute("SELECT key FROM offset_data WHERE key=?;",
-                   (key,)).fetchone())
+                              (key,)).fetchone())
 
     def __len__(self):
         """How many records are there?"""
diff --git a/Bio/GenBank/Scanner.py b/Bio/GenBank/Scanner.py
index 391e43d..20047d6 100644
--- a/Bio/GenBank/Scanner.py
+++ b/Bio/GenBank/Scanner.py
@@ -609,7 +609,9 @@ class EmblScanner(InsdcScanner):
             assert self.line[:self.HEADER_WIDTH] == " " * self.HEADER_WIDTH, \
                 repr(self.line)
             # Remove tailing number now, remove spaces later
-            seq_lines.append(line.rsplit(None, 1)[0])
+            linersplit = line.rsplit(None, 1)
+            if(len(linersplit) > 1):
+                seq_lines.append(linersplit[0])
             line = self.handle.readline()
         self.line = line
         return (misc_lines, "".join(seq_lines).replace(" ", ""))
@@ -1096,8 +1098,15 @@ class GenBankScanner(InsdcScanner):
             # Should be possible to split them based on position, if
             # a clear definition of the standard exists THAT AGREES with
             # existing files.
-            consumer.locus(name_and_length[0])
-            consumer.size(name_and_length[1])
+            name, length = name_and_length
+            if len(name) > 16:
+                # As long as the sequence is short, can steal its leading spaces
+                # to extend the name over the current 16 character limit.
+                # However, that deserves a warning as it is out of spec.
+                warnings.warn("GenBank LOCUS line identifier over 16 characters",
+                              BiopythonParserWarning)
+            consumer.locus(name)
+            consumer.size(length)
             # consumer.residue_type(line[33:41].strip())
 
             if line[33:51].strip() == "" and line[29:33] == ' aa ':
diff --git a/Bio/GenBank/__init__.py b/Bio/GenBank/__init__.py
index 776d79a..305c33f 100644
--- a/Bio/GenBank/__init__.py
+++ b/Bio/GenBank/__init__.py
@@ -96,7 +96,7 @@ _simple_location = r"\d+\.\.\d+"
 _re_simple_location = re.compile(r"^%s$" % _simple_location)
 _re_simple_compound = re.compile(r"^(join|order|bond)\(%s(,%s)*\)$"
                                  % (_simple_location, _simple_location))
-_complex_location = r"([a-zA-Z][a-zA-Z0-9_\.]*[a-zA-Z0-9]?\:)?(%s|%s|%s|%s|%s)" \
+_complex_location = r"([a-zA-Z][a-zA-Z0-9_\.\|]*[a-zA-Z0-9]?\:)?(%s|%s|%s|%s|%s)" \
                     % (_pair_location, _solo_location, _between_location,
                        _within_location, _oneof_location)
 _re_complex_location = re.compile(r"^%s$" % _complex_location)
@@ -274,7 +274,17 @@ def _loc(loc_str, expected_seq_length, strand):
     Traceback (most recent call last):
        ...
     ValueError: Invalid between location '123^456'
+
+    You can optionally provide a reference name:
+
+    >>> _loc("AL391218.9:105173..108462", 2000000, 1)
+    FeatureLocation(ExactPosition(105172), ExactPosition(108462), strand=1, ref='AL391218.9')
+
     """
+    if ":" in loc_str:
+        ref, loc_str = loc_str.split(":")
+    else:
+        ref = None
     try:
         s, e = loc_str.split("..")
     except ValueError:
@@ -294,12 +304,12 @@ def _loc(loc_str, expected_seq_length, strand):
                 pos = _pos(s)
             else:
                 raise ValueError("Invalid between location %s" % repr(loc_str))
-            return SeqFeature.FeatureLocation(pos, pos, strand)
+            return SeqFeature.FeatureLocation(pos, pos, strand, ref=ref)
         else:
             # e.g. "123"
             s = loc_str
             e = loc_str
-    return SeqFeature.FeatureLocation(_pos(s, -1), _pos(e), strand)
+    return SeqFeature.FeatureLocation(_pos(s, -1), _pos(e), strand, ref=ref)
 
 
 def _split_compound_loc(compound_loc):
@@ -1029,43 +1039,31 @@ class _FeatureConsumer(_BaseGenBankConsumer):
             i = location_line.find("(")
             # cur_feature.location_operator = location_line[:i]
             # we can split on the comma because these are simple locations
-            sub_features = cur_feature.sub_features
+            locs = []
             for part in location_line[i + 1:-1].split(","):
                 s, e = part.split("..")
-                f = SeqFeature.SeqFeature(SeqFeature.FeatureLocation(int(s) - 1,
-                                                                     int(e),
-                                                                     strand),
-                        location_operator=cur_feature.location_operator,
-                        type=cur_feature.type)
-                sub_features.append(f)
-            # s = cur_feature.sub_features[0].location.start
-            # e = cur_feature.sub_features[-1].location.end
-            # cur_feature.location = SeqFeature.FeatureLocation(s,e, strand)
-            # TODO - Remove use of sub_features
+                locs.append(SeqFeature.FeatureLocation(int(s) - 1,
+                                                       int(e),
+                                                       strand))
             if strand == -1:
-                cur_feature.location = SeqFeature.CompoundLocation([f.location for f in sub_features[::-1]],
+                cur_feature.location = SeqFeature.CompoundLocation(locs[::-1],
                                                                    operator=location_line[:i])
             else:
-                cur_feature.location = SeqFeature.CompoundLocation([f.location for f in sub_features],
+                cur_feature.location = SeqFeature.CompoundLocation(locs,
                                                                    operator=location_line[:i])
             return
 
         # Handle the general case with more complex regular expressions
         if _re_complex_location.match(location_line):
             # e.g. "AL121804.2:41..610"
-            if ":" in location_line:
-                location_ref, location_line = location_line.split(":")
-                cur_feature.location = _loc(location_line, self._expected_size, strand)
-                cur_feature.location.ref = location_ref
-            else:
-                cur_feature.location = _loc(location_line, self._expected_size, strand)
+            cur_feature.location = _loc(location_line, self._expected_size, strand)
             return
 
         if _re_complex_compound.match(location_line):
             i = location_line.find("(")
             # cur_feature.location_operator = location_line[:i]
             # Can't split on the comma because of positions like one-of(1,2,3)
-            sub_features = cur_feature.sub_features
+            locs = []
             for part in _split_compound_loc(location_line[i + 1:-1]):
                 if part.startswith("complement("):
                     assert part[-1] == ")"
@@ -1074,39 +1072,29 @@ class _FeatureConsumer(_BaseGenBankConsumer):
                     part_strand = -1
                 else:
                     part_strand = strand
-                if ":" in part:
-                    ref, part = part.split(":")
-                else:
-                    ref = None
                 try:
                     loc = _loc(part, self._expected_size, part_strand)
                 except ValueError as err:
                     print(location_line)
                     print(part)
                     raise err
-                f = SeqFeature.SeqFeature(location=loc, ref=ref,
-                        location_operator=cur_feature.location_operator,
-                        type=cur_feature.type)
-                sub_features.append(f)
+                locs.append(loc)
             # Historically a join on the reverse strand has been represented
             # in Biopython with both the parent SeqFeature and its children
             # (the exons for a CDS) all given a strand of -1.  Likewise, for
             # a join feature on the forward strand they all have strand +1.
             # However, we must also consider evil mixed strand examples like
             # this, join(complement(69611..69724),139856..140087,140625..140650)
-            #
-            # TODO - Remove use of sub_features
-            strands = set(sf.strand for sf in sub_features)
             if strand == -1:
                 # Whole thing was wrapped in complement(...)
-                for sf in sub_features:
-                    assert sf.strand == -1
+                for l in locs:
+                    assert l.strand == -1
                 # Reverse the backwards order used in GenBank files
                 # with complement(join(...))
-                cur_feature.location = SeqFeature.CompoundLocation([f.location for f in sub_features[::-1]],
+                cur_feature.location = SeqFeature.CompoundLocation(locs[::-1],
                                                                    operator=location_line[:i])
             else:
-                cur_feature.location = SeqFeature.CompoundLocation([f.location for f in sub_features],
+                cur_feature.location = SeqFeature.CompoundLocation(locs,
                                                                    operator=location_line[:i])
             return
         # Not recognised
@@ -1253,6 +1241,12 @@ class _FeatureConsumer(_BaseGenBankConsumer):
                 raise ValueError("Could not determine alphabet for seq_type %s"
                                  % self._seq_type)
 
+            # Also save the chomosome layout
+            if 'circular' in self._seq_type.lower():
+                self.data.annotations['topology'] = 'circular'
+            elif 'linear' in self._seq_type.lower():
+                self.data.annotations['topology'] = 'linear'
+
         if not sequence and self.__expected_size:
             self.data.seq = UnknownSeq(self._expected_size, seq_alphabet)
         else:
diff --git a/Bio/Graphics/BasicChromosome.py b/Bio/Graphics/BasicChromosome.py
index 72ebd92..d7c3f23 100644
--- a/Bio/Graphics/BasicChromosome.py
+++ b/Bio/Graphics/BasicChromosome.py
@@ -68,7 +68,7 @@ class _ChromosomeComponent(Widget):
         """Add a sub_component to the list of components under this item.
         """
         assert isinstance(component, _ChromosomeComponent), \
-               "Expected a _ChromosomeComponent object, got %s" % component
+            "Expected a _ChromosomeComponent object, got %s" % component
 
         self._sub_components.append(component)
 
@@ -313,15 +313,16 @@ class Chromosome(_ChromosomeComponent):
         color_label = self._color_labels
 
         segment_width = (self.end_x_position - self.start_x_position) \
-                        * self.chr_percent
+            * self.chr_percent
         label_sep = (self.end_x_position - self.start_x_position) \
-                        * self.label_sep_percent
+            * self.label_sep_percent
         segment_x = self.start_x_position \
-                  + 0.5 * (self.end_x_position - self.start_x_position - segment_width)
+            + 0.5 * (self.end_x_position - self.start_x_position - segment_width)
 
         y_limits = []
         for sub_component in self._sub_components:
-            y_limits.extend((sub_component.start_y_position, sub_component.end_y_position))
+            y_limits.extend((sub_component.start_y_position,
+                             sub_component.end_y_position))
         y_min = min(y_limits)
         y_max = max(y_limits)
         del y_limits
@@ -339,7 +340,7 @@ class Chromosome(_ChromosomeComponent):
                  segment_x + segment_width + label_sep,
                  _place_labels(right_labels, y_min, y_max, h),
                  "start"),
-            ]:
+                ]:
             for (y1, y2, color, back_color, name) in labels:
                 cur_drawing.add(Line(x1, y1, x2, y2,
                                      strokeColor=color,
@@ -351,7 +352,9 @@ class Chromosome(_ChromosomeComponent):
                 if color_label:
                     label_string.fillColor = color
                 if back_color:
-                    w = stringWidth(name, label_string.fontName, label_string.fontSize)
+                    w = stringWidth(name,
+                                    label_string.fontName,
+                                    label_string.fontSize)
                     if x1 > x2:
                         w = w * -1.0
                     cur_drawing.add(Rect(x2, y2 - 0.1 * h, w, h,
@@ -438,10 +441,10 @@ class ChromosomeSegment(_ChromosomeComponent):
         # of the space we have.
         segment_y = self.end_y_position
         segment_width = (self.end_x_position - self.start_x_position) \
-                        * self.chr_percent
+            * self.chr_percent
         segment_height = self.start_y_position - self.end_y_position
         segment_x = self.start_x_position \
-                  + 0.5 * (self.end_x_position - self.start_x_position - segment_width)
+            + 0.5 * (self.end_x_position - self.start_x_position - segment_width)
 
         # first draw the sides of the segment
         right_line = Line(segment_x, segment_y,
@@ -538,7 +541,11 @@ def _spring_layout(desired, minimum, maximum, gap=0):
         return desired
 
     span = maximum - minimum
-    for split in [0.5 * span, span / 3.0, 2 * span / 3.0, 0.25 * span, 0.75 * span]:
+    for split in [0.5 * span,
+                  span / 3.0,
+                  2 * span / 3.0,
+                  0.25 * span,
+                  0.75 * span]:
         midpoint = minimum + split
         low = [x for x in desired if x <= midpoint - 0.5 * gap]
         high = [x for x in desired if x > midpoint + 0.5 * gap]
@@ -551,8 +558,8 @@ def _spring_layout(desired, minimum, maximum, gap=0):
         elif not high and len(low) * gap <= split + 0.5 * gap:
             # Give a little of the unused highspace to the low points
             return _spring_layout(low, minimum, midpoint - 0.5 * gap, gap)
-        elif len(low) * gap <= split - 0.5 * gap \
-        and len(high) * gap <= (span - split) - 0.5 * gap:
+        elif (len(low) * gap <= split - 0.5 * gap and
+              len(high) * gap <= (span - split) - 0.5 * gap):
             return _spring_layout(low, minimum, midpoint - 0.5 * gap, gap) + \
                    _spring_layout(high, midpoint + 0.5 * gap, maximum, gap)
 
@@ -578,8 +585,11 @@ def _spring_layout(desired, minimum, maximum, gap=0):
     return [minimum + i * equal_step for i in range(count)]
 
 # assert False, _spring_layout([0.10,0.12,0.13,0.14,0.5,0.75, 1.0], 0, 1, 0.1)
-# assert _spring_layout([0.10,0.12,0.13,0.14,0.5,0.75, 1.0], 0, 1, 0.1) == [0.0, 0.125, 0.25, 0.375, 0.5, 0.75, 1.0]
-# assert _spring_layout([0.10,0.12,0.13,0.14,0.5,0.75, 1.0], 0, 1, 0.1) == [0.0, 0.16666666666666666, 0.33333333333333331, 0.5, 0.66666666666666663, 0.83333333333333326, 1.0]
+# assert _spring_layout([0.10,0.12,0.13,0.14,0.5,0.75, 1.0], 0, 1, 0.1) == \
+#     [0.0, 0.125, 0.25, 0.375, 0.5, 0.75, 1.0]
+# assert _spring_layout([0.10,0.12,0.13,0.14,0.5,0.75, 1.0], 0, 1, 0.1) == \
+#     [0.0, 0.16666666666666666, 0.33333333333333331, 0.5,
+#      0.66666666666666663, 0.83333333333333326, 1.0]
 
 
 def _place_labels(desired_etc, minimum, maximum, gap=0):
@@ -640,12 +650,12 @@ class AnnotatedChromosomeSegment(ChromosomeSegment):
         # of the space we have.
         segment_y = self.end_y_position
         segment_width = (self.end_x_position - self.start_x_position) \
-                        * self.chr_percent
+            * self.chr_percent
         label_sep = (self.end_x_position - self.start_x_position) \
-                        * self.label_sep_percent
+            * self.label_sep_percent
         segment_height = self.start_y_position - self.end_y_position
         segment_x = self.start_x_position \
-                  + 0.5 * (self.end_x_position - self.start_x_position - segment_width)
+            + 0.5 * (self.end_x_position - self.start_x_position - segment_width)
 
         left_labels = []
         right_labels = []
@@ -688,8 +698,10 @@ class AnnotatedChromosomeSegment(ChromosomeSegment):
                 x = segment_x
                 w = segment_width
             local_scale = segment_height / self.bp_length
-            fill_rectangle = Rect(x, segment_y + segment_height - local_scale * start,
-                                  w, local_scale * (start - end))
+            fill_rectangle = Rect(x,
+                                  segment_y + segment_height - local_scale * start,
+                                  w,
+                                  local_scale * (start - end))
             fill_rectangle.fillColor = fill_color
             fill_rectangle.strokeColor = color
             cur_drawing.add(fill_rectangle)
@@ -698,7 +710,8 @@ class AnnotatedChromosomeSegment(ChromosomeSegment):
                     back_color = None
                 else:
                     back_color = fill_color
-                value = (segment_y + segment_height - local_scale * start, color, back_color, name)
+                value = (segment_y + segment_height - local_scale * start,
+                         color, back_color, name)
                 if strand == -1:
                     self._left_labels.append(value)
                 else:
@@ -734,7 +747,7 @@ class TelomereSegment(ChromosomeSegment):
         # set the coordinates of the segment -- it'll take up the MIDDLE part
         # of the space we have.
         width = (self.end_x_position - self.start_x_position) \
-                * self.chr_percent
+            * self.chr_percent
         height = self.start_y_position - self.end_y_position
         center_x = 0.5 * (self.end_x_position + self.start_x_position)
         start_x = center_x - 0.5 * width
diff --git a/Bio/Graphics/Comparative.py b/Bio/Graphics/Comparative.py
index e44d786..3f804f3 100644
--- a/Bio/Graphics/Comparative.py
+++ b/Bio/Graphics/Comparative.py
@@ -17,8 +17,8 @@ from reportlab.lib.units import inch
 
 from reportlab.graphics.shapes import Drawing, String
 from reportlab.graphics.charts.markers import makeEmptySquare, makeFilledSquare
-from reportlab.graphics.charts.markers import makeFilledDiamond, makeEmptyCircle
-from reportlab.graphics.charts.markers import makeFilledCircle, makeSmiley
+from reportlab.graphics.charts.markers import makeFilledDiamond, makeSmiley
+from reportlab.graphics.charts.markers import makeFilledCircle, makeEmptyCircle
 
 from Bio.Graphics import _write
 
@@ -142,12 +142,12 @@ class ComparativeScatterPlot(object):
             # otherwise just use the last number
             else:
                 scatter_plot.lines[value_num].strokeColor = \
-                  self.color_choices[-1]
+                    self.color_choices[-1]
                 scatter_plot.lines[value_num].symbol = \
-                  self.shape_choices[-1]
+                    self.shape_choices[-1]
 
     def _find_min_max(self, info):
-        """Find the min and max for the x and y coordinates in the given data."""
+        """Find min and max for x and y coordinates in the given data."""
         x_min = info[0][0][0]
         x_max = info[0][0][0]
         y_min = info[0][0][1]
diff --git a/Bio/Graphics/DisplayRepresentation.py b/Bio/Graphics/DisplayRepresentation.py
index a72f55c..859c8d7 100644
--- a/Bio/Graphics/DisplayRepresentation.py
+++ b/Bio/Graphics/DisplayRepresentation.py
@@ -87,7 +87,7 @@ class ChromosomeCounts(object):
         """
         try:
             self._count_info[segment_name] = \
-              float(self._count_info[segment_name]) / float(scale_value)
+                float(self._count_info[segment_name]) / float(scale_value)
         except KeyError:
             raise KeyError("Segment name %s not found." % segment_name)
 
diff --git a/Bio/Graphics/__init__.py b/Bio/Graphics/__init__.py
index 19818b9..6c2764a 100644
--- a/Bio/Graphics/__init__.py
+++ b/Bio/Graphics/__init__.py
@@ -58,7 +58,7 @@ def _write(drawing, output_file, format, dpi=72):
                   'PNG': renderPM,
                   'TIFF': renderPM,
                   'TIF': renderPM
-                 }
+                  }
     try:
         # If output is not a string, then .upper() will trigger
         # an attribute error...
diff --git a/Bio/HMM/DynamicProgramming.py b/Bio/HMM/DynamicProgramming.py
index d48c4a3..a16c743 100644
--- a/Bio/HMM/DynamicProgramming.py
+++ b/Bio/HMM/DynamicProgramming.py
@@ -139,7 +139,7 @@ class AbstractDPAlgorithms(object):
         # b_{k}(L) = a_{k0} for all k
         for state in state_letters:
             backward_var[(state, len(self._seq.emissions) - 1)] = \
-              self._mm.transition_prob[(state, state_letters[0])]
+                self._mm.transition_prob[(state, state_letters[0])]
 
         # -- recursion
         # first loop over the training sequence backwards
@@ -245,7 +245,7 @@ class ScaledDPAlgorithms(AbstractDPAlgorithms):
         # a previous forward or backward recursion)
         if sequence_pos not in self._s_values:
             self._s_values[sequence_pos] = \
-              self._calculate_s_value(sequence_pos, forward_vars)
+                self._calculate_s_value(sequence_pos, forward_vars)
 
         # e_{l}(x_{i})
         seq_letter = self._seq.emissions[sequence_pos]
@@ -292,7 +292,7 @@ class ScaledDPAlgorithms(AbstractDPAlgorithms):
         # a previous forward or backward recursion)
         if sequence_pos not in self._s_values:
             self._s_values[sequence_pos] = \
-              self._calculate_s_value(sequence_pos, backward_vars)
+                self._calculate_s_value(sequence_pos, backward_vars)
 
         # loop over all of the possible states at the position
         state_pos_sum = 0
diff --git a/Bio/MarkovModel.py b/Bio/MarkovModel.py
index 632f88b..163ef8c 100644
--- a/Bio/MarkovModel.py
+++ b/Bio/MarkovModel.py
@@ -284,10 +284,10 @@ def _baum_welch_one(N, M, outputs,
                 # P(making this transition)
                 # P(emitting this character)
                 # P(going to the end)
-                lp = fmat[i][t] + \
-                     lp_transition[i][j] + \
-                     lp_emission[i][k] + \
-                     bmat[j][t + 1]
+                lp = (fmat[i][t] +
+                      lp_transition[i][j] +
+                      lp_emission[i][k] +
+                      bmat[j][t + 1])
                 lp_traverse[i][j] = lp
         # Normalize the probability for this time step.
         lp_arc[:, :, t] = lp_traverse - _logsum(lp_traverse)
@@ -360,9 +360,7 @@ def _forward(N, T, lp_initial, lp_transition, lp_emission, outputs):
             # transitions from all the states from time t-1.
             lprob = LOG0
             for i in range(N):
-                lp = matrix[i][t - 1] + \
-                     lp_transition[i][j] + \
-                     lp_emission[i][k]
+                lp = matrix[i][t - 1] + lp_transition[i][j] + lp_emission[i][k]
                 lprob = logaddexp(lprob, lp)
             matrix[j][t] = lprob
     return matrix
@@ -377,9 +375,9 @@ def _backward(N, T, lp_transition, lp_emission, outputs):
             # transitions from all the states from time t+1.
             lprob = LOG0
             for j in range(N):
-                lp = matrix[j][t + 1] + \
-                     lp_transition[i][j] + \
-                     lp_emission[i][k]
+                lp = (matrix[j][t + 1] +
+                      lp_transition[i][j] +
+                      lp_emission[i][k])
                 lprob = logaddexp(lprob, lp)
             matrix[i][t] = lprob
     return matrix
@@ -522,9 +520,9 @@ def _viterbi(N, lp_initial, lp_transition, lp_emission, output):
         k = output[t]
         for j in range(N):
             # Find the most likely place it came from.
-            i_scores = scores[:, t - 1] + \
-                       lp_transition[:, j] + \
-                       lp_emission[j, k]
+            i_scores = (scores[:, t - 1] +
+                        lp_transition[:, j] +
+                        lp_emission[j, k])
             indexes = _argmaxes(i_scores)
             scores[j, t] = i_scores[indexes[0]]
             backtrace[j][t] = indexes
diff --git a/Bio/Nexus/Nexus.py b/Bio/Nexus/Nexus.py
index f4231f7..2a40e46 100644
--- a/Bio/Nexus/Nexus.py
+++ b/Bio/Nexus/Nexus.py
@@ -719,8 +719,8 @@ class Nexus(object):
         # adjust symbols to for respectcase
         if 'symbols' in options:
             self.symbols = ''.join(options['symbols'].split())
-            if (self.symbols.startswith('"') and self.symbols.endswith('"')) or\
-                (self.symbols.startswith("'") and self.symbols.endswith("'")):
+            if (self.symbols.startswith('"') and self.symbols.endswith('"')) or \
+                    (self.symbols.startswith("'") and self.symbols.endswith("'")):
                 self.symbols = self.symbols[1:-1]
             if not self.respectcase:
                 self.symbols = list(self.symbols.upper())
@@ -997,12 +997,12 @@ class Nexus(object):
                 for i, c in enumerate(iupac_seq):
                     # Go through each coding for each character
                     for coding in c['d']:
-                        if (coding not in self.valid_characters and
-                            coding != self.gap and coding != self.missing):
-                            raise NexusError("Taxon %s: Illegal character %s "
-                                             "in sequence %s "
-                                             "(check dimensions/interleaving)"
-                                             % (id, coding, iupac_seq))
+                        if coding not in self.valid_characters:
+                            if coding != self.gap and coding != self.missing:
+                                raise NexusError("Taxon %s: Illegal character %s "
+                                                 "in sequence %s "
+                                                 "(check dimensions/interleaving)"
+                                                 % (id, coding, iupac_seq))
 
             # add sequence to matrix
             if first_matrix_block:
@@ -1620,10 +1620,9 @@ class Nexus(object):
                 # print '%d (paup=%d)' % (site[0],site[0]+1),
                 seqsite = matrix[taxon][site[0]].upper()
                 # print seqsite,'checked against',site[1],'\t',
-                if (seqsite == self.missing or
-                    (seqsite == self.gap and
-                     self.options['gapmode'].lower() == 'missing') or
-                    seqsite == site[1]):
+                if seqsite == self.missing or \
+                   (seqsite == self.gap and self.options['gapmode'].lower() == 'missing') or \
+                   seqsite == site[1]:
                     # missing or same as before  -> ok
                     newconstant.append(site)
                 elif (seqsite in site[1] or
@@ -1746,7 +1745,8 @@ class Nexus(object):
         else:
             unique_name = name
 
-        assert unique_name not in self.matrix, "ERROR. There is a discrepancy between taxlabels and matrix keys. Report this as a bug."
+        assert unique_name not in self.matrix, \
+            "ERROR. There is a discrepancy between taxlabels and matrix keys. Report this as a bug."
 
         self.matrix[unique_name] = Seq(sequence, self.alphabet)
         self.ntax += 1
@@ -1860,7 +1860,8 @@ class Nexus(object):
             else:
                 sequence = sequence[:end + 1] + missing * (length - end - 1)
                 sequence = start * missing + sequence[start:]
-            assert length == len(sequence), 'Illegal sequence manipulation in Nexus.terminal_gap_to_missing in taxon %s' % taxon
+            assert length == len(sequence), \
+                "Illegal sequence manipulation in Nexus.terminal_gap_to_missing in taxon %s" % taxon
             self.matrix[taxon] = Seq(sequence, self.alphabet)
 
 
diff --git a/Bio/Nexus/Trees.py b/Bio/Nexus/Trees.py
index 9d00ff8..af8c540 100755
--- a/Bio/Nexus/Trees.py
+++ b/Bio/Nexus/Trees.py
@@ -558,7 +558,9 @@ class Tree(Nodes.Chain):
         print('\n'.join('%3s %32s %15s %15s %8s %10s %8s %20s' % l for l in table))
         print('\nRoot:  %s' % self.root)
 
-    def to_string(self, support_as_branchlengths=False, branchlengths_only=False, plain=True, plain_newick=False, ladderize=None, ignore_comments=True):
+    def to_string(self, support_as_branchlengths=False,
+                  branchlengths_only=False, plain=True, plain_newick=False,
+                  ladderize=None, ignore_comments=True):
         """Return a paup compatible tree line."""
         # if there's a conflict in the arguments, we override plain=True
         if support_as_branchlengths or branchlengths_only:
diff --git a/Bio/PDB/DSSP.py b/Bio/PDB/DSSP.py
index 152f461..0350d4d 100644
--- a/Bio/PDB/DSSP.py
+++ b/Bio/PDB/DSSP.py
@@ -10,14 +10,33 @@ use) in order to use this. For DSSP, see U{http://swift.cmbi.ru.nl/gv/dssp/}.
 
 The DSSP codes for secondary structure used here are:
 
-    - H        Alpha helix (4-12)
-    - B        Isolated beta-bridge residue
-    - E        Strand
-    - G        3-10 helix
-    - I        pi helix
-    - T        Turn
-    - S        Bend
-    - -        None
+    H
+        Alpha helix (4-12)
+    B
+        Isolated beta-bridge residue
+    E
+        Strand
+    G
+        3-10 helix
+    I
+        pi helix
+    T
+        Turn
+    S
+        Bend
+    \-
+        None
+
+The following Accessible surface area (ASA) values can be used, defaulting
+to the Sander and Rost values:
+
+    Miller
+        Miller et al. 1987 http://dx.doi.org/10.1016/0022-2836(87)90038-6
+    Sander
+        Sander and Rost 1994 http://dx.doi.org/10.1002/prot.340200303
+    Wilke
+        Tien et al. 2013 http://dx.doi.org/10.1371/journal.pone.0080635
+
 """
 
 from __future__ import print_function
@@ -38,34 +57,39 @@ from Bio.PDB.PDBParser import PDBParser
 _dssp_cys = re.compile('[a-z]')
 
 # Maximal ASA of amino acids
-# Values from Sander & Rost, (1994), Proteins, 20:216-226
 # Used for relative accessibility
-MAX_ACC = {}
-MAX_ACC["ALA"] = 106.0
-MAX_ACC["CYS"] = 135.0
-MAX_ACC["ASP"] = 163.0
-MAX_ACC["GLU"] = 194.0
-MAX_ACC["PHE"] = 197.0
-MAX_ACC["GLY"] = 84.0
-MAX_ACC["HIS"] = 184.0
-MAX_ACC["ILE"] = 169.0
-MAX_ACC["LYS"] = 205.0
-MAX_ACC["LEU"] = 164.0
-MAX_ACC["MET"] = 188.0
-MAX_ACC["ASN"] = 157.0
-MAX_ACC["PRO"] = 136.0
-MAX_ACC["GLN"] = 198.0
-MAX_ACC["ARG"] = 248.0
-MAX_ACC["SER"] = 130.0
-MAX_ACC["THR"] = 142.0
-MAX_ACC["VAL"] = 142.0
-MAX_ACC["TRP"] = 227.0
-MAX_ACC["TYR"] = 222.0
+
+residue_max_acc = {
+    # Miller max acc: Miller et al. 1987 http://dx.doi.org/10.1016/0022-2836(87)90038-6
+    # Wilke: Tien et al. 2013 http://dx.doi.org/10.1371/journal.pone.0080635
+    # Sander: Sander & Rost 1994 http://dx.doi.org/10.1002/prot.340200303
+    'Miller': {
+        'ALA': 113.0, 'ARG': 241.0, 'ASN': 158.0, 'ASP': 151.0,
+        'CYS': 140.0, 'GLN': 189.0, 'GLU': 183.0, 'GLY': 85.0,
+        'HIS': 194.0, 'ILE': 182.0, 'LEU': 180.0, 'LYS': 211.0,
+        'MET': 204.0, 'PHE': 218.0, 'PRO': 143.0, 'SER': 122.0,
+        'THR': 146.0, 'TRP': 259.0, 'TYR': 229.0, 'VAL': 160.0
+    },
+    'Wilke': {
+        'ALA': 129.0, 'ARG': 274.0, 'ASN': 195.0, 'ASP': 193.0,
+        'CYS': 167.0, 'GLN': 225.0, 'GLU': 223.0, 'GLY': 104.0,
+        'HIS': 224.0, 'ILE': 197.0, 'LEU': 201.0, 'LYS': 236.0,
+        'MET': 224.0, 'PHE': 240.0, 'PRO': 159.0, 'SER': 155.0,
+        'THR': 172.0, 'TRP': 285.0, 'TYR': 263.0, 'VAL': 174.0
+    },
+    'Sander': {
+        'ALA': 106.0, 'ARG': 248.0, 'ASN': 157.0, 'ASP': 163.0,
+        'CYS': 135.0, 'GLN': 198.0, 'GLU': 194.0, 'GLY': 84.0,
+        'HIS': 184.0, 'ILE': 169.0, 'LEU': 164.0, 'LYS': 205.0,
+        'MET': 188.0, 'PHE': 197.0, 'PRO': 136.0, 'SER': 130.0,
+        'THR': 142.0, 'TRP': 227.0, 'TYR': 222.0, 'VAL': 142.0
+    }
+}
 
 
 def ss_to_index(ss):
-    """
-    Secondary structure symbol to index.
+    """Secondary structure symbol to index.
+
     H=0
     E=1
     C=2
@@ -80,26 +104,27 @@ def ss_to_index(ss):
 
 
 def dssp_dict_from_pdb_file(in_file, DSSP="dssp"):
-    """
-    Create a DSSP dictionary from a PDB file.
+    """Create a DSSP dictionary from a PDB file.
 
     Example:
     --------
     >>> dssp_dict=dssp_dict_from_pdb_file("1fat.pdb")
     >>> aa, ss, acc=dssp_dict[('A', 1)]
 
-    ::
-
-        @param in_file: pdb file
-        @type in_file: string ::
+    Parameters
+    ----------
+    in_file : string
+        pdb file
 
-        @param DSSP: DSSP executable (argument to os.system)
-        @type DSSP: string ::
+    DSSP : string
+        DSSP executable (argument to os.system)
 
-        @return: a dictionary that maps (chainid, resid) to
-            amino acid type, secondary structure code and
-            accessibility.
-        @rtype: {}
+    Returns
+    -------
+    (out_dict, keys) : tuple
+        a dictionary that maps (chainid, resid) to
+        amino acid type, secondary structure code and
+        accessibility.
     """
     # Using universal newlines is important on Python 3, this
     # gives unicode handles rather than bytes handles.
@@ -118,26 +143,32 @@ def dssp_dict_from_pdb_file(in_file, DSSP="dssp"):
 
 
 def make_dssp_dict(filename):
-    """
+    """DSSP dictionary mapping identifers to properties.
+
     Return a DSSP dictionary that maps (chainid, resid) to
     aa, ss and accessibility, from a DSSP file. ::
 
-    @param filename: the DSSP output file
-    @type filename: string
+    Parameters
+    ----------
+    filename : string
+        the DSSP output file
     """
     with open(filename, "r") as handle:
         return _make_dssp_dict(handle)
 
 
 def _make_dssp_dict(handle):
-    """
+    """Internal function used by mask_dssp_dict (PRIVATE).
+
     Return a DSSP dictionary that maps (chainid, resid) to an amino acid,
     secondary structure symbol, solvent accessibility value, and hydrogen bond
     information (relative dssp indices and hydrogen bond energies) from an open
     DSSP file object. ::
 
-    @param handle: the open DSSP output file handle
-    @type handle: file
+    Parameters
+    ----------
+    handle : file
+        the open DSSP output file handle
     """
     dssp = {}
     start = 0
@@ -209,7 +240,8 @@ def _make_dssp_dict(handle):
 
 
 class DSSP(AbstractResiduePropertyMap):
-    """
+    """Run DSSP and parse secondary structure and accessibility.
+
     Run DSSP on a pdb file, and provide a handle to the
     DSSP secondary structure and accessibility.
 
@@ -235,21 +267,37 @@ class DSSP(AbstractResiduePropertyMap):
     -42.399999999999999)
     """
 
-    def __init__(self, model, pdb_file, dssp="dssp"):
+    def __init__(self, model, in_file, dssp="dssp", acc_array="Sander", file_type='PDB'):
+        """Create a DSSP object.
+
+        Parameters
+        ----------
+        model : Model
+            The first model of the structure
+        in_file : string
+            Either a PDB file or a DSSP file.
+        dssp : string
+            The dssp executable (ie. the argument to os.system)
+        acc_array : string
+            Accessible surface area (ASA) from either Miller et al. (1987),
+            Sander & Rost (1994), or Wilke: Tien et al. 2013, as string
+            Sander/Wilke/Miller. Defaults to Sander.
+        file_type: string
+            File type switch, either PDB or DSSP with PDB as default.
         """
-        ::
 
-        @param model: the first model of the structure
-        @type model: L{Model} ::
+        self.residue_max_acc = residue_max_acc[acc_array]
 
-        @param pdb_file: a PDB file
-        @type pdb_file: string ::
-
-        @param dssp: the dssp executable (ie. the argument to os.system)
-        @type dssp: string
-        """
         # create DSSP dictionary
-        dssp_dict, dssp_keys = dssp_dict_from_pdb_file(pdb_file, dssp)
+        file_type = file_type.upper()
+        assert(file_type in ['PDB', 'DSSP'])
+        # If the input file is a PDB file run DSSP and parse output:
+        if file_type == 'PDB':
+            dssp_dict, dssp_keys = dssp_dict_from_pdb_file(in_file, dssp)
+        # If the input file is a DSSP file just parse it directly:
+        elif file_type == 'DSSP':
+            dssp_dict, dssp_keys = make_dssp_dict(in_file)
+
         dssp_map = {}
         dssp_list = []
 
@@ -346,7 +394,7 @@ class DSSP(AbstractResiduePropertyMap):
             # Relative accessibility
             resname = res.get_resname()
             try:
-                rel_acc = acc / MAX_ACC[resname]
+                rel_acc = acc / self.residue_max_acc[resname]
             except KeyError:
                 # Invalid value for resname
                 rel_acc = 'NA'
diff --git a/Bio/PDB/HSExposure.py b/Bio/PDB/HSExposure.py
index bbcab07..7ece35e 100644
--- a/Bio/PDB/HSExposure.py
+++ b/Bio/PDB/HSExposure.py
@@ -147,7 +147,7 @@ class HSExposureCA(_AbstractHSExposure):
         @param radius: radius of the sphere (centred at the CA atom)
         @type radius: float
 
-        @param offset: number of flanking residues that are ignored in the calculation            of the number of neighbors
+        @param offset: number of flanking residues that are ignored in the calculation of the number of neighbors
         @type offset: int
         """
         _AbstractHSExposure.__init__(self, model, radius, offset,
@@ -236,7 +236,7 @@ class HSExposureCB(_AbstractHSExposure):
         @param radius: radius of the sphere (centred at the CA atom)
         @type radius: float
 
-        @param offset: number of flanking residues that are ignored in the calculation            of the number of neighbors
+        @param offset: number of flanking residues that are ignored in the calculation of the number of neighbors
         @type offset: int
         """
         _AbstractHSExposure.__init__(self, model, radius, offset,
@@ -272,7 +272,7 @@ class ExposureCN(AbstractPropertyMap):
         @param radius: radius of the sphere (centred at the CA atom)
         @type radius: float
 
-        @param offset: number of flanking residues that are ignored in the calculation            of the number of neighbors
+        @param offset: number of flanking residues that are ignored in the calculation of the number of neighbors
         @type offset: int
 
         """
diff --git a/Bio/PDB/QCPSuperimposer/__init__.py b/Bio/PDB/QCPSuperimposer/__init__.py
index 220a332..09194bc 100644
--- a/Bio/PDB/QCPSuperimposer/__init__.py
+++ b/Bio/PDB/QCPSuperimposer/__init__.py
@@ -11,18 +11,10 @@ Quaternion Characteristic Polynomial, which is used in the algorithm.
 
 from __future__ import print_function
 
-import warnings
-
-from Bio import BiopythonExperimentalWarning
 from numpy import dot, sqrt, array, matrix, inner, zeros
 from .qcprotmodule import FastCalcRMSDAndRotation
 
 
-warnings.warn('Bio.PDB.QCPSuperimposer is an experimental submodule which may undergo '
-              'significant changes prior to its future official release.',
-              BiopythonExperimentalWarning)
-
-
 class QCPSuperimposer(object):
 
     """
@@ -69,7 +61,8 @@ class QCPSuperimposer(object):
     def _align(self, centered_coords1, centered_coords2):
         (E0, A) = self._inner_product(centered_coords1, centered_coords2)
         (rmsd, r0, r1, r2, r3, r4, r5, r6, r7, r8, q1, q2, q3, q4) = FastCalcRMSDAndRotation(
-            A[0][0], A[0][1], A[0][2], A[1][0], A[1][1], A[1][2], A[2][0], A[2][1], A[2][2], E0, len(centered_coords1), -1.0)
+            A[0][0], A[0][1], A[0][2], A[1][0], A[1][1], A[1][2], A[2][0], A[2][1], A[2][2],
+            E0, len(centered_coords1), -1.0)
         rot = array([r0, r1, r2, r3, r4, r5, r6, r7, r8]).reshape(3, 3)
         return (rmsd, rot.T, [q1, q2, q3, q4])
 
diff --git a/Bio/PDB/mmtf/DefaultParser.py b/Bio/PDB/mmtf/DefaultParser.py
new file mode 100644
index 0000000..6d3af7a
--- /dev/null
+++ b/Bio/PDB/mmtf/DefaultParser.py
@@ -0,0 +1,162 @@
+from Bio.PDB.StructureBuilder import StructureBuilder
+
+
+class StructureDecoder(object):
+    """Class to pass the data from mmtf-python into a BioPython data structure."""
+
+    def __init__(self):
+        self.this_type = ""
+
+    def init_structure(self, total_num_bonds, total_num_atoms,
+                       total_num_groups, total_num_chains, total_num_models,
+                       structure_id):
+        """Initialise the structure object.
+
+        :param total_num_bonds: the number of bonds in the structure
+        :param total_num_atoms: the number of atoms in the structure
+        :param total_num_groups: the number of groups in the structure
+        :param total_num_chains: the number of chains in the structure
+        :param total_num_models: the number of models in the structure
+        :param structure_id the: id of the structure (e.g. PDB id)
+        """
+        self.structure_bulder = StructureBuilder()
+        self.structure_bulder.init_structure(structure_id=structure_id)
+        self.chain_index_to_type_map = {}
+        self.chain_index_to_seq_map = {}
+        self.chain_index_to_description_map = {}
+        self.chain_counter = 0
+
+    def set_atom_info(self, atom_name, serial_number, alternative_location_id,
+                      x, y, z, occupancy, temperature_factor, element, charge):
+        """Create an atom object an set the information.
+
+        :param atom_name: the atom name, e.g. CA for this atom
+        :param serial_number: the serial id of the atom (e.g. 1)
+        :param alternative_location_id: the alternative location id for the atom, if present
+        :param x: the x coordiante of the atom
+        :param y: the y coordinate of the atom
+        :param z: the z coordinate of the atom
+        :param occupancy: the occupancy of the atom
+        :param temperature_factor: the temperature factor of the atom
+        :param element: the element of the atom, e.g. C for carbon. According to IUPAC. Calcium  is Ca
+        :param charge: the formal atomic charge of the atom
+        """
+        # Atom_name is in twice - the full_name is with spaces
+        self.structure_bulder.init_atom(str(atom_name), [x, y, z],
+                                        temperature_factor, occupancy,
+                                        alternative_location_id, str(atom_name),
+                                        serial_number=serial_number,
+                                        element=str(element).upper())
+
+    def set_chain_info(self, chain_id, chain_name, num_groups):
+        """Set the chain information.
+
+        :param chain_id: the asym chain id from mmCIF
+        :param chain_name: the auth chain id from mmCIF
+        :param num_groups: the number of groups this chain has
+        """
+        # A Bradley - chose to use chain_name (auth_id) as it complies
+        # with current BioPython. Chain_id might be better.
+        self.structure_bulder.init_chain(chain_id=chain_name)
+        if self.chain_index_to_type_map[self.chain_counter] == "polymer":
+            self.this_type = ""
+        elif self.chain_index_to_type_map[self.chain_counter] == "non-polymer":
+            self.this_type = "H"
+        elif self.chain_index_to_type_map[self.chain_counter] == "water":
+            self.this_type = "W"
+        self.chain_counter += 1
+
+    def set_entity_info(self, chain_indices, sequence, description, entity_type):
+        """Set the entity level information for the structure.
+
+        :param chain_indices: the indices of the chains for this entity
+        :param sequence: the one letter code sequence for this entity
+        :param description: the description for this entity
+        :param entity_type: the entity type (polymer,non-polymer,water)
+        """
+        for chain_ind in chain_indices:
+            self.chain_index_to_type_map[chain_ind] = entity_type
+            self.chain_index_to_seq_map[chain_ind] = sequence
+            self.chain_index_to_description_map[chain_ind] = description
+
+    def set_group_info(self, group_name, group_number, insertion_code,
+                       group_type, atom_count, bond_count, single_letter_code,
+                       sequence_index, secondary_structure_type):
+        """Set the information for a group
+
+        :param group_name: the name of this group,e.g. LYS
+        :param group_number: the residue number of this group
+        :param insertion_code: the insertion code for this group
+        :param group_type: a string indicating the type of group (as found in the chemcomp dictionary.
+        Empty string if none available.
+        :param atom_count: the number of atoms in the group
+        :param bond_count: the number of unique bonds in the group
+        :param single_letter_code: the single letter code of the group
+        :param sequence_index: the index of this group in the sequence defined by the enttiy
+        :param secondary_structure_type: the type of secondary structure used (types are according to DSSP and
+        number to type mappings are defined in the specification)
+        """
+        self.structure_bulder.init_seg(' ')
+        self.structure_bulder.init_residue(group_name, self.this_type,
+                                           group_number, insertion_code)
+
+    def set_model_info(self, model_id, chain_count):
+        """Set the information for a model.
+
+        :param model_id: the index for the model
+        :param chain_count: the number of chains in the model
+        """
+        self.structure_bulder.init_model(model_id)
+
+    def set_xtal_info(self, space_group, unit_cell):
+        """Set the crystallographic information for the structure
+
+        :param space_group: the space group name, e.g. "P 21 21 21"
+        :param unit_cell: an array of length 6 with the unit cell parameters in order: a, b, c, alpha, beta, gamma
+        """
+        self.structure_bulder.set_symmetry(space_group, unit_cell)
+
+    def set_header_info(self, r_free, r_work, resolution, title,
+                        deposition_date, release_date, experimnetal_methods):
+        """Sets the header information.
+
+        :param r_free: the measured R-Free for the structure
+        :param r_work: the measure R-Work for the structure
+        :param resolution: the resolution of the structure
+        :param title: the title of the structure
+        :param deposition_date: the deposition date of the structure
+        :param release_date: the release date of the structure
+        :param experimnetal_methods: the list of experimental methods in the structure
+        """
+        pass
+
+    def set_bio_assembly_trans(self, bio_assembly_index, input_chain_indices,
+                               input_transform):
+        """Set the Bioassembly transformation information. A single bioassembly can have multiple transforms,
+
+        :param bio_assembly_index: the integer index of the bioassembly
+        :param input_chain_indices: the list of integer indices for the chains of this bioassembly
+        :param input_transformation: the list of doubles for  the transform of this bioassmbly transform"""
+        pass
+
+    def finalize_structure(self):
+        """Any functions needed to cleanup the structure."""
+        pass
+
+    def set_group_bond(self, atom_index_one, atom_index_two, bond_order):
+        """Add bonds within a group.
+
+        :param atom_index_one: the integer atom index (in the group) of the first partner in the bond
+        :param atom_index_two: the integer atom index (in the group) of the second partner in the bond
+        :param bond_order: the integer bond order
+        """
+        pass
+
+    def set_inter_group_bond(self, atom_index_one, atom_index_two, bond_order):
+        """Add bonds between groups.
+
+        :param atom_index_one: the integer atom index (in the structure) of the first partner in the bond
+        :param atom_index_two: the integer atom index (in the structure) of the second partner in the bond
+        :param bond_order the bond order
+        """
+        pass
diff --git a/Bio/PDB/mmtf/__init__.py b/Bio/PDB/mmtf/__init__.py
new file mode 100644
index 0000000..c0650e6
--- /dev/null
+++ b/Bio/PDB/mmtf/__init__.py
@@ -0,0 +1,36 @@
+try:
+    from mmtf import fetch, parse
+except ImportError:
+    from Bio import MissingPythonDependencyError
+    raise MissingPythonDependencyError("Install mmtf to use Bio.PDB.mmtf "
+                                       "(e.g. pip install mmtf-python)")
+from Bio.PDB.mmtf.DefaultParser import StructureDecoder
+
+
+def get_from_decoded(decoder):
+    structure_decoder = StructureDecoder()
+    decoder.pass_data_on(structure_decoder)
+    return structure_decoder.structure_bulder.get_structure()
+
+
+class MMTFParser(object):
+    """Class to get a BioPython structure from a URL or a filename."""
+    @staticmethod
+    def get_structure_from_url(pdb_id):
+        """Get a structure from a URL - given a PDB id.
+
+        :param pdb_id: the input PDB id
+        :return the structure
+        """
+        decoder = fetch(pdb_id)
+        return get_from_decoded(decoder)
+
+    @staticmethod
+    def get_structure(file_path):
+        """Get a structrue from a file - given a file path.
+
+        :param file_path: the input file path
+        :return the structure
+        """
+        decoder = parse(file_path)
+        return get_from_decoded(decoder)
diff --git a/Bio/PDB/parse_pdb_header.py b/Bio/PDB/parse_pdb_header.py
index 3799dfc..8de971c 100644
--- a/Bio/PDB/parse_pdb_header.py
+++ b/Bio/PDB/parse_pdb_header.py
@@ -123,8 +123,7 @@ def parse_pdb_header(infile):
     with File.as_handle(infile, 'r') as f:
         for l in f:
             record_type = l[0:6]
-            if (record_type == 'ATOM  ' or record_type == 'HETATM' or
-                record_type == 'MODEL '):
+            if record_type in ("ATOM  ", "HETATM", "MODEL "):
                 break
             else:
                 header.append(l)
diff --git a/Bio/Phylo/Applications/_Fasttree.py b/Bio/Phylo/Applications/_Fasttree.py
index 5796f1e..62b3011 100644
--- a/Bio/Phylo/Applications/_Fasttree.py
+++ b/Bio/Phylo/Applications/_Fasttree.py
@@ -56,35 +56,38 @@ class FastTreeCommandline(AbstractCommandline):
     def __init__(self, cmd='fasttree', **kwargs):
         self.parameters = [
             _Switch(['-nt', 'nt'],
-                """By default FastTree expects protein alignments, use -nt for nucleotides""",
-                ),
+                    "By default FastTree expects protein alignments, use -nt for nucleotides",
+                    ),
             _Option(['-n', 'n'],
-                """-n -- read N multiple alignments in.
+                    """-n -- read N multiple alignments in.
 
                     This only works with phylip interleaved format. For example, you can
                     use it with the output from phylip's seqboot. If you use -n, FastTree
-                    will write 1 tree per line to standard output.""",
-                checker_function=_is_int,
-                equate=False,
-                ),
+                    will write 1 tree per line to standard output.
+                    """,
+                    checker_function=_is_int,
+                    equate=False,
+                    ),
             _Switch(['-quote', 'quote'],
-                """-quote -- add quotes to sequence names in output.
+                    """-quote -- add quotes to sequence names in output.
 
                     Quote sequence names in the output and allow spaces, commas,
-                    parentheses, and colons in them but not ' characters (fasta files only).""",
-                ),
+                    parentheses, and colons in them but not ' characters (fasta files only).
+                    """,
+                    ),
             _Option(['-pseudo', 'pseudo'],
-                """-pseudo [weight] -- Pseudocounts are used with sequence distance estimation.
+                    """-pseudo [weight] -- Pseudocounts are used with sequence distance estimation.
 
                     Use pseudocounts to estimate distances between sequences with little or no
                     overlap. (Off by default.) Recommended if analyzing the alignment has
                     sequences with little or no overlap.
-                    If the weight is not specified, it is 1.0 """,
-                checker_function=_is_numeric,
-                equate=False,
-                ),
+                    If the weight is not specified, it is 1.0
+                    """,
+                    checker_function=_is_numeric,
+                    equate=False,
+                    ),
             _Option(['-boot', 'boot'],
-                """Specify the number of resamples for support values.
+                    """Specify the number of resamples for support values.
 
                     Support value options:
                     By default, FastTree computes local support values by resampling the site
@@ -92,12 +95,13 @@ class FastTreeCommandline(AbstractCommandline):
                     it will compute minimum-evolution bootstrap supports instead
                     In either case, the support values are proportions ranging from 0 to 1
 
-                    Use -nosupport to turn off support values or -boot 100 to use just 100 resamples.""",
-                checker_function=_is_int,
-                equate=False,
-                ),
+                    Use -nosupport to turn off support values or -boot 100 to use just 100 resamples.
+                    """,
+                    checker_function=_is_int,
+                    equate=False,
+                    ),
             _Switch(['-nosupport', 'nosupport'],
-                """Turn off support values.
+                    """Turn off support values.
 
                     Support value options:
                     By default, FastTree computes local support values by resampling the site
@@ -105,31 +109,34 @@ class FastTreeCommandline(AbstractCommandline):
                     it will compute minimum-evolution bootstrap supports instead
                     In either case, the support values are proportions ranging from 0 to 1
 
-                    Use -nosupport to turn off support values or -boot 100 to use just 100 resamples.""",
-                ),
+                    Use -nosupport to turn off support values or -boot 100 to use just 100 resamples.
+                    """,
+                    ),
             _Option(['-intree', 'intree'],
-                """-intree newickfile -- read the starting tree in from newickfile.
+                    """-intree newickfile -- read the starting tree in from newickfile.
 
                     Any branch lengths in the starting trees are ignored.
-                    -intree with -n will read a separate starting tree for each alignment.""",
-                filename=True,
-                equate=False,
-                ),
+                    -intree with -n will read a separate starting tree for each alignment.
+                    """,
+                    filename=True,
+                    equate=False,
+                    ),
             _Option(['-intree1', 'intree1'],
-                """-intree1 newickfile -- read the same starting tree for each alignment.""",
-                filename=True,
-                equate=False,
-                ),
+                    "intree1 newickfile -- read the same starting tree for each alignment.",
+                    filename=True,
+                    equate=False,
+                    ),
             _Switch(['-quiet', 'quiet'],
-                """-quiet -- do not write to standard error during normal operation
+                    """-quiet -- do not write to standard error during normal operation
 
-                    (no progress indicator, no options summary, no likelihood values, etc.)""",
-                ),
+                    (no progress indicator, no options summary, no likelihood values, etc.)
+                    """,
+                    ),
             _Switch(['-nopr', 'nopr'],
-                """-nopr -- do not write the progress indicator to stderr.""",
-                ),
+                    "-nopr -- do not write the progress indicator to stderr.",
+                    ),
             _Option(['-nni', 'nni'],
-                """Set the rounds of minimum-evolution nearest-neighbor interchanges
+                    """Set the rounds of minimum-evolution nearest-neighbor interchanges
 
                     Topology refinement:
                     By default, FastTree tries to improve the tree with up to 4*log2(N)
@@ -137,12 +144,13 @@ class FastTreeCommandline(AbstractCommandline):
                     where N is the number of unique sequences, 2 rounds of
                     subtree-prune-regraft (SPR) moves (also min. evo.), and
                     up to 2*log(N) rounds of maximum-likelihood NNIs.
-                    Use -nni to set the number of rounds of min. evo. NNIs.""",
-                checker_function=_is_int,
-                equate=False,
-                ),
+                    Use -nni to set the number of rounds of min. evo. NNIs.
+                    """,
+                    checker_function=_is_int,
+                    equate=False,
+                    ),
             _Option(['-spr', 'spr'],
-                """Set the rounds of subtree-prune-regraft moves
+                    """Set the rounds of subtree-prune-regraft moves
 
                     Topology refinement:
                     By default, FastTree tries to improve the tree with up to 4*log2(N)
@@ -151,12 +159,13 @@ class FastTreeCommandline(AbstractCommandline):
                     subtree-prune-regraft (SPR) moves (also min. evo.), and
                     up to 2*log(N) rounds of maximum-likelihood NNIs.
                     Use -nni to set the number of rounds of min. evo. NNIs,
-                    and -spr to set the rounds of SPRs.""",
-                checker_function=_is_int,
-                equate=False,
-                ),
+                    and -spr to set the rounds of SPRs.
+                    """,
+                    checker_function=_is_int,
+                    equate=False,
+                    ),
             _Switch(['-noml', 'noml'],
-                """Deactivate min-evo NNIs and SPRs.
+                    """Deactivate min-evo NNIs and SPRs.
 
                     Topology refinement:
                     By default, FastTree tries to improve the tree with up to 4*log2(N)
@@ -167,10 +176,11 @@ class FastTreeCommandline(AbstractCommandline):
                     Use -nni to set the number of rounds of min. evo. NNIs,
                     and -spr to set the rounds of SPRs.
                     Use -noml to turn off both min-evo NNIs and SPRs (useful if refining
-                    an approximately maximum-likelihood tree with further NNIs) """,
-                ),
+                    an approximately maximum-likelihood tree with further NNIs).
+                    """,
+                    ),
             _Switch(['-mllen', 'mllen'],
-                """Optimize branch lengths on a fixed topology.
+                    """Optimize branch lengths on a fixed topology.
 
                     Topology refinement:
                     By default, FastTree tries to improve the tree with up to 4*log2(N)
@@ -181,10 +191,11 @@ class FastTreeCommandline(AbstractCommandline):
                     Use -nni to set the number of rounds of min. evo. NNIs,
                     and -spr to set the rounds of SPRs.
                     Use -mllen to optimize branch lengths without ML NNIs
-                    Use -mllen -nome with -intree to optimize branch lengths on a fixed topology.""",
-                ),
+                    Use -mllen -nome with -intree to optimize branch lengths on a fixed topology.
+                    """,
+                    ),
             _Switch(['-nome', 'nome'],
-                """Changes support values calculation to a minimum-evolution bootstrap method.
+                    """Changes support values calculation to a minimum-evolution bootstrap method.
 
                     Topology refinement:
                     By default, FastTree tries to improve the tree with up to 4*log2(N)
@@ -201,10 +212,11 @@ class FastTreeCommandline(AbstractCommandline):
                     By default, FastTree computes local support values by resampling the site
                     likelihoods 1,000 times and the Shimodaira Hasegawa test. If you specify -nome,
                     it will compute minimum-evolution bootstrap supports instead
-                    In either case, the support values are proportions ranging from 0 to 1.""",
-                ),
+                    In either case, the support values are proportions ranging from 0 to 1.
+                    """,
+                    ),
             _Option(['-mlnni', 'mlnni'],
-                """Set the number of rounds of maximum-likelihood NNIs.
+                    """Set the number of rounds of maximum-likelihood NNIs.
 
                     Topology refinement:
                     By default, FastTree tries to improve the tree with up to 4*log2(N)
@@ -214,12 +226,13 @@ class FastTreeCommandline(AbstractCommandline):
                     up to 2*log(N) rounds of maximum-likelihood NNIs.
                     Use -nni to set the number of rounds of min. evo. NNIs,
                     and -spr to set the rounds of SPRs.
-                    Use -mlnni to set the number of rounds of maximum-likelihood NNIs.""",
-                checker_function=_is_int,
-                equate=False,
-                ),
+                    Use -mlnni to set the number of rounds of maximum-likelihood NNIs.
+                    """,
+                    checker_function=_is_int,
+                    equate=False,
+                    ),
             _Option(['-mlacc', 'mlacc'],
-                """Option for optimization of branches at each NNI.
+                    """Option for optimization of branches at each NNI.
 
                     Topology refinement:
                     By default, FastTree tries to improve the tree with up to 4*log2(N)
@@ -230,12 +243,13 @@ class FastTreeCommandline(AbstractCommandline):
                     Use -nni to set the number of rounds of min. evo. NNIs,
                     and -spr to set the rounds of SPRs.
                     Use -mlacc 2 or -mlacc 3 to always optimize all 5 branches at each NNI,
-                    and to optimize all 5 branches in 2 or 3 rounds.""",
-                checker_function=_is_int,
-                equate=False,
-                ),
+                    and to optimize all 5 branches in 2 or 3 rounds.
+                    """,
+                    checker_function=_is_int,
+                    equate=False,
+                    ),
             _Switch(['-slownni', 'slownni'],
-                """Turn off heuristics to avoid constant subtrees with NNIs.
+                    """Turn off heuristics to avoid constant subtrees with NNIs.
 
                     Topology refinement:
                     By default, FastTree tries to improve the tree with up to 4*log2(N)
@@ -245,25 +259,36 @@ class FastTreeCommandline(AbstractCommandline):
                     up to 2*log(N) rounds of maximum-likelihood NNIs.
                     Use -nni to set the number of rounds of min. evo. NNIs,
                     and -spr to set the rounds of SPRs.
-                    Use -slownni to turn off heuristics to avoid constant subtrees (affects both
-                    ML and ME NNIs).""",
-                ),
+                    Use -slownni to turn off heuristics to avoid constant subtrees
+                    (affects both ML and ME NNIs).
+                    """,
+                    ),
             _Switch(['-wag', 'wag'],
-                """Maximum likelihood model options: Whelan-And-Goldman 2001 model instead of (default) Jones-Taylor-Thorton 1992 model (a.a. only)""",
-                ),
+                    """Maximum likelihood model options.
+
+                    Whelan-And-Goldman 2001 model instead of (default)
+                    Jones-Taylor-Thorton 1992 model (a.a. only)
+                    """,
+                    ),
             _Switch(['-gtr', 'gtr'],
-                """Maximum likelihood model options: Use generalized time-reversible instead of (default) Jukes-Cantor (nt only)""",
-                ),
+                    """Maximum likelihood model options.
+
+                    Use generalized time-reversible instead of (default)
+                    Jukes-Cantor (nt only)
+                    """,
+                    ),
             _Option(['-cat', 'cat'],
-                """Maximum likelihood model options: Specify the number of rate categories of sites (default 20).""",
-                checker_function=_is_int,
-                equate=False,
-                ),
+                    """Maximum likelihood model options.
+
+                    Specify the number of rate categories of sites (default 20).""",
+                    checker_function=_is_int,
+                    equate=False,
+                    ),
             _Switch(['-nocat', 'nocat'],
-                """Maximum likelihood model options: No CAT model (just 1 category)""",
-                ),
+                    "Maximum likelihood model options: No CAT model (just 1 category)",
+                    ),
             _Switch(['-gamma', 'gamma'],
-                """Report the likelihood under the discrete gamma model.
+                    """Report the likelihood under the discrete gamma model.
 
                     Maximum likelihood model options:
                     -gamma -- after the final round of optimizing branch lengths with the CAT model,
@@ -272,19 +297,21 @@ class FastTreeCommandline(AbstractCommandline):
                     optimizes the gamma shape parameter and the scale of the lengths.
                     The final tree will have rescaled lengths. Used with -log, this
                     also generates per-site likelihoods for use with CONSEL, see
-                    GammaLogToPaup.pl and documentation on the FastTree web site.""",
-                ),
+                    GammaLogToPaup.pl and documentation on the FastTree web site.
+                    """,
+                    ),
             _Switch(['-slow', 'slow'],
-                """Use an exhaustive search.
+                    """Use an exhaustive search.
 
                     Searching for the best join:
                     By default, FastTree combines the 'visible set' of fast neighbor-joining with
                     local hill-climbing as in relaxed neighbor-joining
                     -slow -- exhaustive search (like NJ or BIONJ, but different gap handling)
-                    -slow takes half an hour instead of 8 seconds for 1,250 proteins""",
-                ),
+                    -slow takes half an hour instead of 8 seconds for 1,250 proteins
+                    """,
+                    ),
             _Switch(['-fastest', 'fastest'],
-                """Search the visible set (the top hit for each node) only.
+                    """Search the visible set (the top hit for each node) only.
 
                     Searching for the best join:
                     By default, FastTree combines the 'visible set' of fast neighbor-joining with
@@ -293,10 +320,11 @@ class FastTreeCommandline(AbstractCommandline):
                     Unlike the original fast neighbor-joining, -fastest updates visible(C)
                     after joining A and B if join(AB,C) is better than join(C,visible(C))
                     -fastest also updates out-distances in a very lazy way,
-                    -fastest sets -2nd on as well, use -fastest -no2nd to avoid this""",
-                ),
+                    -fastest sets -2nd on as well, use -fastest -no2nd to avoid this
+                    """,
+                    ),
             _Switch(['-2nd', 'second'],
-                """Turn 2nd-level top hits heuristic on.
+                    """Turn 2nd-level top hits heuristic on.
 
                     Top-hit heuristics:
                     By default, FastTree uses a top-hit list to speed up search
@@ -307,10 +335,11 @@ class FastTreeCommandline(AbstractCommandline):
                     -2nd or -no2nd to turn 2nd-level top hits heuristic on or off
                     This reduces memory usage and running time but may lead to
                     marginal reductions in tree quality.
-                    (By default, -fastest turns on -2nd.)""",
-                ),
+                    (By default, -fastest turns on -2nd.)
+                    """,
+                    ),
             _Switch(['-no2nd', 'no2nd'],
-                """Turn 2nd-level top hits heuristic off.
+                    """Turn 2nd-level top hits heuristic off.
 
                     Top-hit heuristics:
                     By default, FastTree uses a top-hit list to speed up search
@@ -321,39 +350,43 @@ class FastTreeCommandline(AbstractCommandline):
                     -2nd or -no2nd to turn 2nd-level top hits heuristic on or off
                     This reduces memory usage and running time but may lead to
                     marginal reductions in tree quality.
-                    (By default, -fastest turns on -2nd.)""",
-                ),
+                    (By default, -fastest turns on -2nd.)
+                    """,
+                    ),
             _Option(['-seed', 'seed'],
-                """Use -seed to initialize the random number generator.
+                    """Use -seed to initialize the random number generator.
 
                     Support value options:
                     By default, FastTree computes local support values by resampling the site
                     likelihoods 1,000 times and the Shimodaira Hasegawa test. If you specify -nome,
                     it will compute minimum-evolution bootstrap supports instead
-                    In either case, the support values are proportions ranging from 0 to 1""",
-                checker_function=_is_int,
-                equate=False,
-                ),
+                    In either case, the support values are proportions ranging from 0 to 1.
+                    """,
+                    checker_function=_is_int,
+                    equate=False,
+                    ),
             _Switch(['-top', 'top'],
-                """Top-hit list to speed up search
+                    """Top-hit list to speed up search
 
                     Top-hit heuristics:
                     By default, FastTree uses a top-hit list to speed up search
                     Use -notop (or -slow) to turn this feature off
                     and compare all leaves to each other,
-                    and all new joined nodes to each other""",
-                ),
+                    and all new joined nodes to each other.
+                    """,
+                    ),
             _Switch(['-notop', 'notop'],
-                """Turn off top-hit list to speed up search
+                    """Turn off top-hit list to speed up search
 
                     Top-hit heuristics:
                     By default, FastTree uses a top-hit list to speed up search
                     Use -notop (or -slow) to turn this feature off
                     and compare all leaves to each other,
-                    and all new joined nodes to each other""",
-                ),
+                    and all new joined nodes to each other.
+                    """,
+                    ),
             _Option(['-topm', 'topm'],
-                """Change the top hits calculation method
+                    """Change the top hits calculation method
 
                     Top-hit heuristics:
                     By default, FastTree uses a top-hit list to speed up search
@@ -361,110 +394,125 @@ class FastTreeCommandline(AbstractCommandline):
                     FastTree estimates the top m hits of a leaf from the
                     top 2*m hits of a 'close' neighbor, where close is
                     defined as d(seed,close) < 0.75 * d(seed, hit of rank 2*m),
-                    and updates the top-hits as joins proceed""",
-                checker_function=_is_numeric,
-                equate=False,
-                ),
+                    and updates the top-hits as joins proceed.
+                    """,
+                    checker_function=_is_numeric,
+                    equate=False,
+                    ),
             _Option(['-close', 'close'],
-                """Modify the close heuristic for the top-hit list
+                    """Modify the close heuristic for the top-hit list
 
                     Top-hit heuristics:
                     By default, FastTree uses a top-hit list to speed up search
-                    -close 0.75 -- modify the close heuristic, lower is more conservative""",
-                checker_function=_is_numeric,
-                equate=False,
-                ),
+                    -close 0.75 -- modify the close heuristic, lower is more conservative.
+                    """,
+                    checker_function=_is_numeric,
+                    equate=False,
+                    ),
             _Option(['-refresh', 'refresh'],
-                """Parameter for conditions that joined nodes are compared to other nodes
+                    """Parameter for conditions that joined nodes are compared to other nodes
 
                     Top-hit heuristics:
                     By default, FastTree uses a top-hit list to speed up search
                     -refresh 0.8 -- compare a joined node to all other nodes if its
                     top-hit list is less than 80% of the desired length,
-                    or if the age of the top-hit list is log2(m) or greater""",
-                checker_function=_is_numeric,
-                equate=False,
-                ),
+                    or if the age of the top-hit list is log2(m) or greater.
+                    """,
+                    checker_function=_is_numeric,
+                    equate=False,
+                    ),
             _Option(['-matrix', 'matrix'],
-                """Specify a matrix for nucleotide or amino acid distances
+                    """Specify a matrix for nucleotide or amino acid distances
 
                     Distances:
                     Default: For protein sequences, log-corrected distances and an
                     amino acid dissimilarity matrix derived from BLOSUM45
                     or for nucleotide sequences, Jukes-Cantor distances
-                    To specify a different matrix, use -matrix FilePrefix or -nomatrix""",
-                filename=True,
-                equate=False,
-                ),
+                    To specify a different matrix, use -matrix FilePrefix or -nomatrix
+                    """,
+                    filename=True,
+                    equate=False,
+                    ),
             _Switch(['-nomatrix', 'nomatrix'],
-                """Specify that no matrix should be used for nucleotide or amino acid distances
+                    """Specify that no matrix should be used for nucleotide or amino acid distances
 
                     Distances:
                     Default: For protein sequences, log-corrected distances and an
                     amino acid dissimilarity matrix derived from BLOSUM45
                     or for nucleotide sequences, Jukes-Cantor distances
-                    To specify a different matrix, use -matrix FilePrefix or -nomatrix""",
-                ),
+                    To specify a different matrix, use -matrix FilePrefix or -nomatrix
+                    """,
+                    ),
             _Switch(['-nj', 'nj'],
-                """Join options: regular (unweighted) neighbor-joining (default)""",
-                ),
+                    "Join options: regular (unweighted) neighbor-joining (default)",
+                    ),
             _Switch(['-bionj', 'bionj'],
-                """Join options: weighted joins as in BIONJ.  FastTree will also weight joins during NNIs""",
-                ),
+                    """Join options: weighted joins as in BIONJ.
+
+                    FastTree will also weight joins during NNIs.
+                    """,
+                    ),
             _Option(['-gtrrates', 'gtrrates'],
-                """-gtrrates ac ag at cg ct gt""",
-                equate=False,
-                ),
+                    "-gtrrates ac ag at cg ct gt",
+                    equate=False,
+                    ),
             _Option(['-gtrfreq', 'gtrfreq'],
-                """-gtrfreq A C G T""",
-                equate=False,
-                ),
+                    "-gtrfreq A C G T",
+                    equate=False,
+                    ),
             _Option(['-constraints', 'constraints'],
-                """Specifies an alignment file for use with constrained topology searching
+                    """Specifies an alignment file for use with constrained topology searching
 
                     Constrained topology search options:
                     -constraints alignmentfile -- an alignment with values of 0, 1, and -
                     Not all sequences need be present. A column of 0s and 1s defines a
                     constrained split. Some constraints may be violated
-                    (see 'violating constraints:' in standard error).""",
-                filename=True,
-                equate=False,
-                ),
+                    (see 'violating constraints:' in standard error).
+                    """,
+                    filename=True,
+                    equate=False,
+                    ),
             _Option(['-constraintWeight', 'constraintWeight'],
-                """Weight strength of contraints in topology searching
+                    """Weight strength of contraints in topology searching.
 
                     Constrained topology search options:
                     -constraintWeight -- how strongly to weight the constraints. A value of 1
                     means a penalty of 1 in tree length for violating a constraint
-                    Default: 100.0""",
-                checker_function=_is_numeric,
-                equate=False,
-                ),
+                    Default: 100.0
+                    """,
+                    checker_function=_is_numeric,
+                    equate=False,
+                    ),
             _Option(['-log', 'log'],
-                """Create log files of data such as intermediate trees and per-site rates
+                    """Create log files of data such as intermediate trees and per-site rates
 
                     -log logfile -- save intermediate trees so you can extract
                     the trees and restart long-running jobs if they crash
-                    -log also reports the per-site rates (1 means slowest category).""",
-                filename=True,
-                equate=False,
-                ),
+                    -log also reports the per-site rates (1 means slowest category).
+                    """,
+                    filename=True,
+                    equate=False,
+                    ),
             _Option(['-makematrix', 'makematrix'],
-                """-makematrix [alignment]""",
-                filename=True,
-                equate=False,
-                ),
+                    "-makematrix [alignment]",
+                    filename=True,
+                    equate=False,
+                    ),
             _Switch(['-rawdist', 'rawdist'],
-                """Use -rawdist to turn the log-correction off or to use %different instead of Jukes-Cantor in AA or NT distances
+                    """Turn off or adjust log-correction in AA or NT distances.
+
+                    Use -rawdist to turn the log-correction off or to use
+                    %different instead of Jukes-Cantor in AA or NT distances
 
                     Distances:
                     Default: For protein sequences, log-corrected distances and an
                     amino acid dissimilarity matrix derived from BLOSUM45
                     or for nucleotide sequences, Jukes-Cantor distances
-                    To specify a different matrix, use -matrix FilePrefix or -nomatrix""",
-                ),
+                    To specify a different matrix, use -matrix FilePrefix or -nomatrix
+                    """,
+                    ),
             _Option(['-sprlength', 'sprlength'],
-                """Use -sprlength set the maximum length of a SPR move (default 10) in topology refinement
+                    """Set maximum SPR move length in topology refinement (default 10).
 
                     Topology refinement:
                     By default, FastTree tries to improve the tree with up to 4*log2(N)
@@ -473,31 +521,31 @@ class FastTreeCommandline(AbstractCommandline):
                     subtree-prune-regraft (SPR) moves (also min. evo.), and
                     up to 2*log(N) rounds of maximum-likelihood NNIs.
                     Use -nni to set the number of rounds of min. evo. NNIs,
-                    and -spr to set the rounds of SPRs.""",
-                checker_function=_is_int,
-                equate=False,
-                ),
-             _Switch(['-help', 'help'],
-                """Show the help"""
-                ),
-             _Switch(['-expert', 'expert'],
-                """Show the expert level help"""
-                ),
-             _Option(['-out', 'out'],
-                """Enter <output file>
-
-                    The path to a Newick Tree output file needs to be specified.""",
-                filename=True,
-                equate=False,
-                ),
-             _Argument(['input'],
-                """Enter <input file>
-
-                    An input file of sequence alignments in fasta or phylip format is needed.  By default FastTree expects protein
-                    alignments, use -nt for nucleotides""",
-                filename=True,
-                is_required=True,
-                ),
-                ]
+                    and -spr to set the rounds of SPRs.
+                    """,
+                    checker_function=_is_int,
+                    equate=False,
+                    ),
+            _Switch(['-help', 'help'], "Show the help."),
+            _Switch(['-expert', 'expert'], "Show the expert level help."),
+            _Option(['-out', 'out'],
+                    """Enter <output file>
+
+                    The path to a Newick Tree output file needs to be specified.
+                    """,
+                    filename=True,
+                    equate=False,
+                    ),
+            _Argument(['input'],
+                      """Enter <input file>
+
+                      An input file of sequence alignments in fasta or phylip format
+                      is needed.  By default FastTree expects protein
+                      alignments, use -nt for nucleotides.
+                      """,
+                      filename=True,
+                      is_required=True,
+                      ),
+            ]
 
         AbstractCommandline.__init__(self, cmd, **kwargs)
diff --git a/Bio/Phylo/Applications/_Phyml.py b/Bio/Phylo/Applications/_Phyml.py
index 54e1823..2971f3c 100644
--- a/Bio/Phylo/Applications/_Phyml.py
+++ b/Bio/Phylo/Applications/_Phyml.py
@@ -32,227 +32,223 @@ class PhymlCommandline(AbstractCommandline):
     def __init__(self, cmd='phyml', **kwargs):
         self.parameters = [
             _Option(['-i', '--input', 'input'],
-                """Name of the nucleotide or amino-acid sequence file in PHYLIP
-                format.""",
-                filename=True,
-                is_required=True,
-                equate=False,
-                ),
+                    "PHYLIP format input nucleotide or amino-acid sequence filenam.",
+                    filename=True,
+                    is_required=True,
+                    equate=False,
+                    ),
 
             _Option(['-d', '--datatype', 'datatype'],
-                """Data type is 'nt' for nucleotide (default) and 'aa' for
-                amino-acid sequences.""",
-                checker_function=lambda x: x in ('nt', 'aa'),
-                equate=False,
-                ),
+                    "Datatype 'nt' for nucleotide (default) or 'aa' for amino-acids.",
+                    checker_function=lambda x: x in ('nt', 'aa'),
+                    equate=False,
+                    ),
 
             _Switch(['-q', '--sequential', 'sequential'],
-                "Changes interleaved format (default) to sequential format."
-                ),
+                    "Changes interleaved format (default) to sequential format."
+                    ),
 
             _Option(['-n', '--multiple', 'multiple'],
-                "Number of data sets to analyse (integer).",
-                checker_function=(lambda x:
-                    isinstance(x, int) or x.isdigit()),
-                equate=False,
-                ),
+                    "Number of data sets to analyse (integer).",
+                    checker_function=(lambda x: isinstance(x, int) or x.isdigit()),
+                    equate=False,
+                    ),
 
             _Switch(['-p', '--pars', 'pars'],
-                """Use a minimum parsimony starting tree.
+                    """Use a minimum parsimony starting tree.
 
-                This option is taken into account when the '-u' option is absent
-                and when tree topology modifications are to be done.
-                """
-                ),
+                    This option is taken into account when the '-u' option is absent
+                    and when tree topology modifications are to be done.
+                    """
+                    ),
 
             _Option(['-b', '--bootstrap', 'bootstrap'],
-                """Number of bootstrap replicates, if value is > 0.
+                    """Number of bootstrap replicates, if value is > 0.
 
-                Otherwise:
+                    Otherwise:
 
-                 0: neither approximate likelihood ratio test nor bootstrap
-                    values are computed.
-                -1: approximate likelihood ratio test returning aLRT statistics.
-                -2: approximate likelihood ratio test returning Chi2-based
-                    parametric branch supports.
-                -4: SH-like branch supports alone.
-                """,
-                equate=False,
-                ),
+                    0: neither approximate likelihood ratio test nor bootstrap
+                       values are computed.
+                    -1: approximate likelihood ratio test returning aLRT statistics.
+                    -2: approximate likelihood ratio test returning Chi2-based
+                        parametric branch supports.
+                    -4: SH-like branch supports alone.
+                    """,
+                    equate=False,
+                    ),
 
             _Option(['-m', '--model', 'model'],
-                """Substitution model name.
-
-                Nucleotide-based models:
-
-                HKY85 (default) | JC69 | K80 | F81 | F84 | TN93 | GTR | custom
-
-                For the custom option, a string of six digits identifies the
-                model. For instance, 000000 corresponds to F81 (or JC69,
-                provided the distribution of nucleotide frequencies is uniform).
-                012345 corresponds to GTR. This option can be used for encoding
-                any model that is a nested within GTR.
-
-                Amino-acid based models:
-
-                LG (default) | WAG | JTT | MtREV | Dayhoff | DCMut | RtREV |
-                CpREV | VT | Blosum62 | MtMam | MtArt | HIVw | HIVb | custom
-                """,
-                checker_function=(lambda x: x in (
-                    # Nucleotide models:
-                    'HKY85', 'JC69', 'K80', 'F81', 'F84', 'TN93', 'GTR',
-                    # Amino acid models:
-                    'LG', 'WAG', 'JTT', 'MtREV', 'Dayhoff', 'DCMut',
-                    'RtREV', 'CpREV', 'VT', 'Blosum62', 'MtMam', 'MtArt',
-                    'HIVw', 'HIVb') or
-                    isinstance(x, int)),
-                equate=False,
-                ),
+                    """Substitution model name.
+
+                    Nucleotide-based models:
+
+                    HKY85 (default) | JC69 | K80 | F81 | F84 | TN93 | GTR | custom
+
+                    For the custom option, a string of six digits identifies the
+                    model. For instance, 000000 corresponds to F81 (or JC69,
+                    provided the distribution of nucleotide frequencies is uniform).
+                    012345 corresponds to GTR. This option can be used for encoding
+                    any model that is a nested within GTR.
+
+                    Amino-acid based models:
+
+                    LG (default) | WAG | JTT | MtREV | Dayhoff | DCMut | RtREV |
+                    CpREV | VT | Blosum62 | MtMam | MtArt | HIVw | HIVb | custom
+                    """,
+                    checker_function=(lambda x: x in (
+                        # Nucleotide models:
+                        'HKY85', 'JC69', 'K80', 'F81', 'F84', 'TN93', 'GTR',
+                        # Amino acid models:
+                        'LG', 'WAG', 'JTT', 'MtREV', 'Dayhoff', 'DCMut',
+                        'RtREV', 'CpREV', 'VT', 'Blosum62', 'MtMam', 'MtArt',
+                        'HIVw', 'HIVb') or isinstance(x, int)),
+                    equate=False,
+                    ),
 
             _Option(['-f', 'frequencies'],
-                """Character frequencies.
+                    """Character frequencies.
 
-                -f e, m, or "fA fC fG fT"
+                    -f e, m, or "fA fC fG fT"
 
-                e : Empirical frequencies, determined as follows :
+                    e : Empirical frequencies, determined as follows :
 
-                    - Nucleotide sequences: (Empirical) the equilibrium base
-                      frequencies are estimated by counting the occurrence of the
-                      different bases in the alignment.
-                    - Amino-acid sequences: (Empirical) the equilibrium
-                      amino-acid frequencies are estimated by counting the
-                      occurrence of the different amino-acids in the alignment.
+                        - Nucleotide sequences: (Empirical) the equilibrium base
+                          frequencies are estimated by counting the occurrence
+                          of the different bases in the alignment.
+                        - Amino-acid sequences: (Empirical) the equilibrium
+                          amino-acid frequencies are estimated by counting the
+                          occurrence of the different amino-acids in the alignment.
 
-                m : ML/model-based frequencies, determined as follows :
+                    m : ML/model-based frequencies, determined as follows :
 
-                    - Nucleotide sequences: (ML) the equilibrium base
-                      frequencies are estimated using maximum likelihood
-                    - Amino-acid sequences: (Model) the equilibrium amino-acid
-                      frequencies are estimated using the frequencies defined by
-                      the substitution model.
+                        - Nucleotide sequences: (ML) the equilibrium base
+                          frequencies are estimated using maximum likelihood
+                        - Amino-acid sequences: (Model) the equilibrium amino-acid
+                          frequencies are estimated using the frequencies defined by
+                          the substitution model.
 
-                "fA fC fG fT" : only valid for nucleotide-based models.
-                    fA, fC, fG and fT are floating-point numbers that correspond
-                    to the frequencies of A, C, G and T, respectively.
-                """,
-                filename=True,  # ensure ".25 .25 .25 .25" stays quoted
-                equate=False,
-                ),
+                    "fA fC fG fT" : only valid for nucleotide-based models.
+                        fA, fC, fG and fT are floating-point numbers that correspond
+                        to the frequencies of A, C, G and T, respectively.
+                    """,
+                    filename=True,  # ensure ".25 .25 .25 .25" stays quoted
+                    equate=False,
+                    ),
 
             _Option(['-t', '--ts/tv', 'ts_tv_ratio'],
-                """Transition/transversion ratio. (DNA sequences only.)
+                    """Transition/transversion ratio. (DNA sequences only.)
 
-                Can be a fixed positive value (ex:4.0) or e to get the
-                maximum-likelihood estimate.
-                """,
-                equate=False,
-                ),
+                    Can be a fixed positive value (ex:4.0) or e to get the
+                    maximum-likelihood estimate.
+                    """,
+                    equate=False,
+                    ),
 
             _Option(['-v', '--pinv', 'prop_invar'],
-                """Proportion of invariable sites.
+                    """Proportion of invariable sites.
 
-                Can be a fixed value in the range [0,1], or 'e' to get the
-                maximum-likelihood estimate.
-                """,
-                equate=False,
-                ),
+                    Can be a fixed value in the range [0,1], or 'e' to get the
+                    maximum-likelihood estimate.
+                    """,
+                    equate=False,
+                    ),
 
             _Option(['-c', '--nclasses', 'nclasses'],
-                """Number of relative substitution rate categories.
+                    """Number of relative substitution rate categories.
 
-                Default 1. Must be a positive integer.
-                """,
-                equate=False,
-                ),
+                    Default 1. Must be a positive integer.
+                    """,
+                    equate=False,
+                    ),
 
             _Option(['-a', '--alpha', 'alpha'],
-                """Distribution of the gamma distribution shape parameter.
+                    """Distribution of the gamma distribution shape parameter.
 
-                Can be a fixed positive value, or 'e' to get the
-                maximum-likelihood estimate.
-                """,
-                equate=False,
-                ),
+                    Can be a fixed positive value, or 'e' to get the
+                    maximum-likelihood estimate.
+                    """,
+                    equate=False,
+                    ),
 
             _Option(['-s', '--search', 'search'],
-                """Tree topology search operation option.
+                    """Tree topology search operation option.
 
-                Can be one of:
+                    Can be one of:
 
-                    NNI : default, fast
-                    SPR : a bit slower than NNI
-                    BEST : best of NNI and SPR search
-                """,
-                checker_function=lambda x: x in ('NNI', 'SPR', 'BEST'),
-                equate=False,
-                ),
+                        NNI : default, fast
+                        SPR : a bit slower than NNI
+                        BEST : best of NNI and SPR search
+                    """,
+                    checker_function=lambda x: x in ('NNI', 'SPR', 'BEST'),
+                    equate=False,
+                    ),
 
             # alt name: user_tree_file
             _Option(['-u', '--inputtree', 'input_tree'],
-                "Starting tree filename. The tree must be in Newick format.",
-                filename=True,
-                equate=False,
-                ),
+                    "Starting tree filename. The tree must be in Newick format.",
+                    filename=True,
+                    equate=False,
+                    ),
 
             _Option(['-o', 'optimize'],
-                """Specific parameter optimisation.
-
-                tlr : tree topology (t), branch length (l) and
-                      rate parameters (r) are optimised.
-                tl  : tree topology and branch length are optimised.
-                lr  : branch length and rate parameters are optimised.
-                l   : branch length are optimised.
-                r   : rate parameters are optimised.
-                n   : no parameter is optimised.
-                """,
-                equate=False,
-                ),
+                    """Specific parameter optimisation.
+
+                    tlr : tree topology (t), branch length (l) and
+                          rate parameters (r) are optimised.
+                    tl  : tree topology and branch length are optimised.
+                    lr  : branch length and rate parameters are optimised.
+                    l   : branch length are optimised.
+                    r   : rate parameters are optimised.
+                    n   : no parameter is optimised.
+                    """,
+                    equate=False,
+                    ),
 
             _Switch(['--rand_start', 'rand_start'],
-                """Sets the initial tree to random.
+                    """Sets the initial tree to random.
 
-                Only valid if SPR searches are to be performed.
-                """,
-                ),
+                    Only valid if SPR searches are to be performed.
+                    """,
+                    ),
 
             _Option(['--n_rand_starts', 'n_rand_starts'],
-                """Number of initial random trees to be used.
+                    """Number of initial random trees to be used.
 
-                Only valid if SPR searches are to be performed.
-                """,
-                equate=False,
-                ),
+                    Only valid if SPR searches are to be performed.
+                    """,
+                    equate=False,
+                    ),
 
             _Option(['--r_seed', 'r_seed'],
-                """Seed used to initiate the random number generator.
+                    """Seed used to initiate the random number generator.
 
-                Must be an integer.
-                """,
-                equate=False,
-                ),
+                    Must be an integer.
+                    """,
+                    equate=False,
+                    ),
 
             _Switch(['--print_site_lnl', 'print_site_lnl'],
-                "Print the likelihood for each site in file *_phyml_lk.txt."
-                ),
+                    "Print the likelihood for each site in file *_phyml_lk.txt."
+                    ),
 
             _Switch(['--print_trace', 'print_trace'],
-                """Print each phylogeny explored during the tree search process
-                in file *_phyml_trace.txt."""
-                ),
+                    """Print each phylogeny explored during the tree search process
+                    in file *_phyml_trace.txt."""
+                    ),
 
             _Option(['--run_id', 'run_id'],
-                """Append the given string at the end of each PhyML output file.
+                    """Append the given string at the end of each PhyML output file.
 
-                This option may be useful when running simulations involving
-                PhyML.
-                """,
-                checker_function=lambda x: isinstance(x, basestring),
-                equate=False,
-                ),
+                    This option may be useful when running simulations involving
+                    PhyML.
+                    """,
+                    checker_function=lambda x: isinstance(x, basestring),
+                    equate=False,
+                    ),
 
             # XXX should this always be set to True?
             _Switch(['--quiet', 'quiet'],
-                "No interactive questions (for running in batch mode)."
-                ),
-                ]
+                    "No interactive questions (for running in batch mode)."
+                    ),
+            ]
         AbstractCommandline.__init__(self, cmd, **kwargs)
diff --git a/Bio/Phylo/Applications/_Raxml.py b/Bio/Phylo/Applications/_Raxml.py
index 19d40b4..941c159 100644
--- a/Bio/Phylo/Applications/_Raxml.py
+++ b/Bio/Phylo/Applications/_Raxml.py
@@ -44,98 +44,99 @@ class RaxmlCommandline(AbstractCommandline):
     def __init__(self, cmd='raxmlHPC', **kwargs):
         self.parameters = [
                 _Option(['-a', 'weight_filename'],
-                    "Name of a column weight file to assign individual weights "
-                    "to each column of the alignment. Those weights must be "
-                    "integers separated by any type and number of whitespaces "
-                    "within a separate file.",
-                    filename=True,
-                    equate=False,
-                    ),
+                        "Name of a column weight file to assign individual weights "
+                        "to each column of the alignment. Those weights must be "
+                        "integers separated by any type and number of whitespaces "
+                        "within a separate file.",
+                        filename=True,
+                        equate=False,
+                        ),
 
                 _Option(['-b', 'bootstrap_seed'],
-                    "Random seed for bootstrapping.",
-                    equate=False,
-                    ),
+                        "Random seed for bootstrapping.",
+                        equate=False,
+                        ),
 
                 _Option(['-c', 'num_categories'],
-                    "Number of distinct rate categories for RAxML when "
-                    "evolution model is set to GTRCAT or GTRMIX."
-                    "Individual per-site rates are categorized into this "
-                    "many rate categories to accelerate computations. "
-                    "Default: 25.",
-                    equate=False,
-                    ),
+                        "Number of distinct rate categories for RAxML when "
+                        "evolution model is set to GTRCAT or GTRMIX."
+                        "Individual per-site rates are categorized into this "
+                        "many rate categories to accelerate computations. "
+                        "Default: 25.",
+                        equate=False,
+                        ),
 
                 _Switch(['-d', 'random_starting_tree'],
-                    "Start ML optimization from random starting tree."
-                    ),
+                        "Start ML optimization from random starting tree."
+                        ),
 
                 _Option(['-e', 'epsilon'],
-                    "Set model optimization precision in log likelihood units "
-                    "for final optimization of tree topology under MIX/MIXI "
-                    "or GAMMA/GAMMAI."
-                    "Default: 0.1 for models not using proportion of "
-                    "invariant sites estimate; 0.001 for models using "
-                    "proportion of invariant sites estimate.",
-                    equate=False,
-                    ),
+                        "Set model optimization precision in log likelihood units "
+                        "for final optimization of tree topology under MIX/MIXI "
+                        "or GAMMA/GAMMAI."
+                        "Default: 0.1 for models not using proportion of "
+                        "invariant sites estimate; 0.001 for models using "
+                        "proportion of invariant sites estimate.",
+                        equate=False,
+                        ),
 
                 _Option(['-E', 'exclude_filename'],
-                    "An exclude file name, containing a specification of "
-                    "alignment positions you wish to exclude.  Format is "
-                    "similar to Nexus, the file shall contain entries like "
-                    "'100-200 300-400'; to exclude a single column write, "
-                    "e.g., '100-100'. If you use a mixed model, an "
-                    "appropriately adapted model file will be written.",
-                    filename=True,
-                    equate=False,
-                    ),
+                        "An exclude file name, containing a specification of "
+                        "alignment positions you wish to exclude.  Format is "
+                        "similar to Nexus, the file shall contain entries like "
+                        "'100-200 300-400'; to exclude a single column write, "
+                        "e.g., '100-100'. If you use a mixed model, an "
+                        "appropriately adapted model file will be written.",
+                        filename=True,
+                        equate=False,
+                        ),
 
                 _Option(['-f', 'algorithm'],
-                    """Select algorithm:
-                    a: Rapid Bootstrap analysis and search for best-scoring ML
-                       tree in one program run.
-                    b: Draw bipartition information on a tree provided with '-t'
-                       based on multiple trees (e.g. form a bootstrap) in a file
-                       specifed by '-z'.
-                    c: Check if the alignment can be properly read by RAxML.
-                    d: New rapid hill-climbing (DEFAULT).
-                    e: Optimize model+branch lengths for given input tree under
-                       GAMMA/GAMMAI only.
-                    g: Compute per site log Likelihoods for one ore more trees
-                       passed via '-z' and write them to a file that can be read
-                       by CONSEL.
-                    h: Compute log likelihood test (SH-test) between best tree
-                       passed via '-t' and a bunch of other trees passed via '-z'.
-                    i: Perform a really thorough bootstrap, refinement of final
-                       bootstrap tree under GAMMA and a more exhaustive algorithm.
-                    j: Generate a bunch of bootstrapped alignment files from an
-                       original alignemnt file.
-                    m: Compare bipartitions between two bunches of trees passed
-                       via '-t' and '-z' respectively. This will return the
-                       Pearson correlation between all bipartitions found in the
-                       two tree files. A file called
-                       RAxML_bipartitionFrequencies.outputFileName will be
-                       printed that contains the pair-wise bipartition
-                       frequencies of the two sets.
-                    n: Compute the log likelihood score of all trees contained
-                       in a tree file provided by '-z' under GAMMA or
-                       GAMMA+P-Invar.
-                    o: Old and slower rapid hill-climbing.
-                    p: Perform pure stepwise MP addition of new sequences to an
-                       incomplete starting tree.
-                    s: Split up a multi-gene partitioned alignment into the
-                       respective subalignments.
-                    t: Do randomized tree searches on one fixed starting tree.
-                    w: Compute ELW test on a bunch of trees passed via '-z'.
-                    x: Compute pair-wise ML distances, ML model parameters will
-                       be estimated on an MP starting tree or a user-defined
-                       tree passed via '-t', only allowed for GAMMA-based models
-                       of rate heterogeneity.""",
-                    checker_function=(lambda x:
-                        isinstance(x, basestring) and len(x) == 1),
-                    equate=False,
-                    ),
+                        """Select algorithm:
+
+                        a: Rapid Bootstrap analysis and search for best-scoring ML
+                           tree in one program run.
+                        b: Draw bipartition information on a tree provided with '-t'
+                           based on multiple trees (e.g. form a bootstrap) in a file
+                           specifed by '-z'.
+                        c: Check if the alignment can be properly read by RAxML.
+                        d: New rapid hill-climbing (DEFAULT).
+                        e: Optimize model+branch lengths for given input tree under
+                           GAMMA/GAMMAI only.
+                        g: Compute per site log Likelihoods for one ore more trees
+                           passed via '-z' and write them to a file that can be read
+                           by CONSEL.
+                        h: Compute log likelihood test (SH-test) between best tree
+                           passed via '-t' and a bunch of other trees passed via '-z'.
+                        i: Perform a really thorough bootstrap, refinement of final
+                           bootstrap tree under GAMMA and a more exhaustive algorithm.
+                        j: Generate a bunch of bootstrapped alignment files from an
+                           original alignemnt file.
+                        m: Compare bipartitions between two bunches of trees passed
+                           via '-t' and '-z' respectively. This will return the
+                           Pearson correlation between all bipartitions found in the
+                           two tree files. A file called
+                           RAxML_bipartitionFrequencies.outputFileName will be
+                           printed that contains the pair-wise bipartition
+                           frequencies of the two sets.
+                        n: Compute the log likelihood score of all trees contained
+                           in a tree file provided by '-z' under GAMMA or
+                           GAMMA+P-Invar.
+                        o: Old and slower rapid hill-climbing.
+                        p: Perform pure stepwise MP addition of new sequences to an
+                           incomplete starting tree.
+                        s: Split up a multi-gene partitioned alignment into the
+                           respective subalignments.
+                        t: Do randomized tree searches on one fixed starting tree.
+                        w: Compute ELW test on a bunch of trees passed via '-z'.
+                        x: Compute pair-wise ML distances, ML model parameters will
+                           be estimated on an MP starting tree or a user-defined
+                           tree passed via '-t', only allowed for GAMMA-based models
+                           of rate heterogeneity.""",
+                        checker_function=(lambda x:
+                                          isinstance(x, basestring) and len(x) == 1),
+                        equate=False,
+                        ),
 
                 _Option(['-g', 'grouping_constraint'],
                         "File name of a multifurcating constraint tree. "
@@ -186,49 +187,49 @@ class RaxmlCommandline(AbstractCommandline):
                 _Option(['-m', 'model'],
                         """Model of Nucleotide or Amino Acid Substitution:
 
-              NUCLEOTIDES:
-
-                    GTRCAT         : GTR + Optimization of substitution rates + Optimization of site-specific
-                                     evolutionary rates which are categorized into numberOfCategories distinct
-                                     rate categories for greater computational efficiency
-                                     if you do a multiple analysis with  '-#' or '-N' but without bootstrapping the program
-                                     will use GTRMIX instead
-                    GTRGAMMA       : GTR + Optimization of substitution rates + GAMMA model of rate
-                                     heterogeneity (alpha parameter will be estimated)
-                    GTRMIX         : Inference of the tree under GTRCAT
-                                     and thereafter evaluation of the final tree topology under GTRGAMMA
-                    GTRCAT_GAMMA   : Inference of the tree with site-specific evolutionary rates.
-                                     However, here rates are categorized using the 4 discrete GAMMA rates.
-                                     Evaluation of the final tree topology under GTRGAMMA
-                    GTRGAMMAI      : Same as GTRGAMMA, but with estimate of proportion of invariable sites
-                    GTRMIXI        : Same as GTRMIX, but with estimate of proportion of invariable sites
-                    GTRCAT_GAMMAI  : Same as GTRCAT_GAMMA, but with estimate of proportion of invariable sites
-
-              AMINO ACIDS:
-
-                    PROTCATmatrixName[F]        : specified AA matrix + Optimization of substitution rates + Optimization of site-specific
+                        NUCLEOTIDES:
+
+                        GTRCAT         : GTR + Optimization of substitution rates + Optimization of site-specific
+                                         evolutionary rates which are categorized into numberOfCategories distinct
+                                         rate categories for greater computational efficiency
+                                         if you do a multiple analysis with  '-#' or '-N' but without bootstrapping the program
+                                         will use GTRMIX instead
+                        GTRGAMMA       : GTR + Optimization of substitution rates + GAMMA model of rate
+                                         heterogeneity (alpha parameter will be estimated)
+                        GTRMIX         : Inference of the tree under GTRCAT
+                                         and thereafter evaluation of the final tree topology under GTRGAMMA
+                        GTRCAT_GAMMA   : Inference of the tree with site-specific evolutionary rates.
+                                         However, here rates are categorized using the 4 discrete GAMMA rates.
+                                         Evaluation of the final tree topology under GTRGAMMA
+                        GTRGAMMAI      : Same as GTRGAMMA, but with estimate of proportion of invariable sites
+                        GTRMIXI        : Same as GTRMIX, but with estimate of proportion of invariable sites
+                        GTRCAT_GAMMAI  : Same as GTRCAT_GAMMA, but with estimate of proportion of invariable sites
+
+                        AMINO ACIDS:
+
+                        PROTCATmatrixName[F]    : specified AA matrix + Optimization of substitution rates + Optimization of site-specific
                                                   evolutionary rates which are categorized into numberOfCategories distinct
                                                   rate categories for greater computational efficiency
                                                   if you do a multiple analysis with  '-#' or '-N' but without bootstrapping the program
                                                   will use PROTMIX... instead
-                    PROTGAMMAmatrixName[F]      : specified AA matrix + Optimization of substitution rates + GAMMA model of rate
+                        PROTGAMMAmatrixName[F]  : specified AA matrix + Optimization of substitution rates + GAMMA model of rate
                                                   heterogeneity (alpha parameter will be estimated)
-                    PROTMIXmatrixName[F]        : Inference of the tree under specified AA matrix + CAT
+                        PROTMIXmatrixName[F]    : Inference of the tree under specified AA matrix + CAT
                                                   and thereafter evaluation of the final tree topology under specified AA matrix + GAMMA
-                    PROTCAT_GAMMAmatrixName[F]  : Inference of the tree under specified AA matrix and site-specific evolutionary rates.
+                        PROTCAT_GAMMAmatrixName[F] : Inference of the tree under specified AA matrix and site-specific evolutionary rates.
                                                   However, here rates are categorized using the 4 discrete GAMMA rates.
                                                   Evaluation of the final tree topology under specified AA matrix + GAMMA
-                    PROTGAMMAImatrixName[F]     : Same as PROTGAMMAmatrixName[F], but with estimate of proportion of invariable sites
-                    PROTMIXImatrixName[F]       : Same as PROTMIXmatrixName[F], but with estimate of proportion of invariable sites
-                    PROTCAT_GAMMAImatrixName[F] : Same as PROTCAT_GAMMAmatrixName[F], but with estimate of proportion of invariable sites
-
-                Available AA substitution models: DAYHOFF, DCMUT, JTT, MTREV, WAG, RTREV, CPREV, VT, BLOSUM62, MTMAM, GTR
-                With the optional 'F' appendix you can specify if you want to use empirical base frequencies
-                Please not that for mixed models you can in addition specify the per-gene AA model in
-                the mixed model file (see manual for details)
-                """,
-                equate=False,
-                ),
+                        PROTGAMMAImatrixName[F] : Same as PROTGAMMAmatrixName[F], but with estimate of proportion of invariable sites
+                        PROTMIXImatrixName[F]   : Same as PROTMIXmatrixName[F], but with estimate of proportion of invariable sites
+                        PROTCAT_GAMMAImatrixName[F] : Same as PROTCAT_GAMMAmatrixName[F], but with estimate of proportion of invariable sites
+
+                        Available AA substitution models: DAYHOFF, DCMUT, JTT, MTREV, WAG, RTREV, CPREV, VT, BLOSUM62, MTMAM, GTR
+                        With the optional 'F' appendix you can specify if you want to use empirical base frequencies
+                        Please not that for mixed models you can in addition specify the per-gene AA model in
+                        the mixed model file (see manual for details)
+                        """,
+                        equate=False,
+                        ),
 
                 _Switch(['-M', 'partition_branch_lengths'],
                         "Switch on estimation of individual per-partition "
@@ -353,16 +354,16 @@ class RaxmlCommandline(AbstractCommandline):
                         ),
 
                 _Option(['-N', '-#', 'num_replicates'],
-                    "Number of alternative runs on distinct starting trees. "
-                    "In combination with the '-b' option, this will invoke a "
-                    "multiple bootstrap analysis. "
-                    "DEFAULT: 1 single analysis."
-                    "Note that '-N' has been added as an alternative since "
-                    "'-#' sometimes caused problems with certain MPI job "
-                    "submission systems, since '-#' is often used to start "
-                    "comments. ",
-                    equate=False,
-                    ),
+                        "Number of alternative runs on distinct starting trees. "
+                        "In combination with the '-b' option, this will invoke a "
+                        "multiple bootstrap analysis. "
+                        "DEFAULT: 1 single analysis."
+                        "Note that '-N' has been added as an alternative since "
+                        "'-#' sometimes caused problems with certain MPI job "
+                        "submission systems, since '-#' is often used to start "
+                        "comments. ",
+                        equate=False,
+                        ),
                 ]
         AbstractCommandline.__init__(self, cmd, **kwargs)
         # ENH: enforce -s, -n and -m
diff --git a/Bio/Phylo/BaseTree.py b/Bio/Phylo/BaseTree.py
index 362f3a2..d82436f 100644
--- a/Bio/Phylo/BaseTree.py
+++ b/Bio/Phylo/BaseTree.py
@@ -1100,42 +1100,42 @@ class BranchColor(object):
     """
 
     color_names = {
-        'red':     (255,   0,   0),
-        'r':       (255,   0,   0),
-        'yellow':  (255, 255,   0),
-        'y':       (255, 255,   0),
-        'green':   (  0, 128,   0),
-        'g':       (  0, 128,   0),
-        'cyan':    (  0, 255, 255),
-        'c':       (  0, 255, 255),
-        'blue':    (  0,   0, 255),
-        'b':       (  0,   0, 255),
-        'magenta': (255,   0, 255),
-        'm':       (255,   0, 255),
-        'black':   (  0,   0,   0),
-        'k':       (  0,   0,   0),
-        'white':   (255, 255, 255),
-        'w':       (255, 255, 255),
+        'red': (255, 0, 0),
+        'r': (255, 0, 0),
+        'yellow': (255, 255, 0),
+        'y': (255, 255, 0),
+        'green': (0, 128, 0),
+        'g': (0, 128, 0),
+        'cyan': (0, 255, 255),
+        'c': (0, 255, 255),
+        'blue': (0, 0, 255),
+        'b': (0, 0, 255),
+        'magenta': (255, 0, 255),
+        'm': (255, 0, 255),
+        'black': (0, 0, 0),
+        'k': (0, 0, 0),
+        'white': (255, 255, 255),
+        'w': (255, 255, 255),
         # Names standardized in HTML/CSS spec
         # http://w3schools.com/html/html_colornames.asp
-        'maroon':  (128,   0,   0),
-        'olive':   (128, 128,   0),
-        'lime':    (  0, 255,   0),
-        'aqua':    (  0, 255, 255),
-        'teal':    (  0, 128, 128),
-        'navy':    (  0,   0, 128),
-        'fuchsia': (255,   0, 255),
-        'purple':  (128,   0, 128),
-        'silver':  (192, 192, 192),
-        'gray':    (128, 128, 128),
+        'maroon': (128, 0, 0),
+        'olive': (128, 128, 0),
+        'lime': (0, 255, 0),
+        'aqua': (0, 255, 255),
+        'teal': (0, 128, 128),
+        'navy': (0, 0, 128),
+        'fuchsia': (255, 0, 255),
+        'purple': (128, 0, 128),
+        'silver': (192, 192, 192),
+        'gray': (128, 128, 128),
         # More definitions from matplotlib/gcolor2
-        'grey':    (128, 128, 128),
-        'pink':    (255, 192, 203),
-        'salmon':  (250, 128, 114),
-        'orange':  (255, 165,   0),
-        'gold':    (255, 215,   0),
-        'tan':     (210, 180, 140),
-        'brown':   (165,  42,  42),
+        'grey': (128, 128, 128),
+        'pink': (255, 192, 203),
+        'salmon': (250, 128, 114),
+        'orange': (255, 165, 0),
+        'gold': (255, 215, 0),
+        'tan': (210, 180, 140),
+        'brown': (165, 42, 42),
         }
 
     def __init__(self, red, green, blue):
diff --git a/Bio/Phylo/NewickIO.py b/Bio/Phylo/NewickIO.py
index 8f2f5b5..cdf5803 100644
--- a/Bio/Phylo/NewickIO.py
+++ b/Bio/Phylo/NewickIO.py
@@ -22,15 +22,15 @@ class NewickError(Exception):
 
 
 tokens = [
-    (r"\(",                                       'open parens'),
-    (r"\)",                                       'close parens'),
-    (r"[^\s\(\)\[\]\'\:\;\,]+",                   'unquoted node label'),
+    (r"\(", 'open parens'),
+    (r"\)", 'close parens'),
+    (r"[^\s\(\)\[\]\'\:\;\,]+", 'unquoted node label'),
     (r"\:[+-]?[0-9]*\.?[0-9]+([eE][+-]?[0-9]+)?", 'edge length'),
-    (r"\,",                                       'comma'),
-    (r"\[(\\.|[^\]])*\]",                         'comment'),
-    (r"\'(\\.|[^\'])*\'",                         'quoted node label'),
-    (r"\;",                                       'semicolon'),
-    (r"\n",                                       'newline'),
+    (r"\,", 'comma'),
+    (r"\[(\\.|[^\]])*\]", 'comment'),
+    (r"\'(\\.|[^\'])*\'", 'quoted node label'),
+    (r"\;", 'semicolon'),
+    (r"\n", 'newline'),
 ]
 tokenizer = re.compile('(%s)' % '|'.join(token[0] for token in tokens))
 token_dict = dict((name, re.compile(token)) for (token, name) in tokens)
diff --git a/Bio/Phylo/PAML/_parse_baseml.py b/Bio/Phylo/PAML/_parse_baseml.py
index edd6973..5d55854 100644
--- a/Bio/Phylo/PAML/_parse_baseml.py
+++ b/Bio/Phylo/PAML/_parse_baseml.py
@@ -33,7 +33,7 @@ def parse_basics(lines, results):
         # Find lnL values.
         # Example match (lnL = -2021.348300):
         # "lnL(ntime: 19  np: 22):  -2021.348300      +0.000000"
-        elif "lnL(ntime:" in line and len(line_floats) > 0:
+        elif "lnL(ntime:" in line and line_floats:
             results["lnL"] = line_floats[0]
             np_res = np_re.match(line)
             if np_res is not None:
@@ -105,7 +105,7 @@ def parse_kappas(lines, parameters):
         #    3.00749"
         if "Parameters (kappa)" in line:
             kappa_found = True
-        elif kappa_found and len(line_floats) > 0:
+        elif kappa_found and line_floats:
             branch_res = re.match("\s(\d+\.\.\d+)", line)
             if branch_res is None:
                 if len(line_floats) == 1:
@@ -117,14 +117,14 @@ def parse_kappas(lines, parameters):
                 if parameters.get("branches") is None:
                     parameters["branches"] = {}
                 branch = branch_res.group(1)
-                if len(line_floats) > 0:
+                if line_floats:
                     parameters["branches"][branch] = \
                         {"t": line_floats[0], "kappa": line_floats[1],
                         "TS": line_floats[2], "TV": line_floats[3]}
         # Find kappa under REV
         # Example match:
         # kappa under REV: 999.00000 145.76453  0.00001  0.00001  0.00001
-        elif "kappa under" in line and len(line_floats) > 0:
+        elif "kappa under" in line and line_floats:
             if len(line_floats) == 1:
                 parameters["kappa"] = line_floats[0]
             else:
@@ -144,12 +144,12 @@ def parse_rates(lines, parameters):
         # Find rate parameters
         # Example match:
         # "Rate parameters:   999.00000 145.59775  0.00001  0.00001  0.00001"
-        if "Rate parameters:" in line and len(line_floats) > 0:
+        if "Rate parameters:" in line and line_floats:
             parameters["rate parameters"] = line_floats
         # Find rates
         # Example match:
         # "rate:   0.90121  0.96051  0.99831  1.03711  1.10287"
-        elif "rate: " in line and len(line_floats) > 0:
+        elif "rate: " in line and line_floats:
             parameters["rates"] = line_floats
         # Find Rate matrix Q & average kappa (REV model)
         # Example match:
@@ -160,25 +160,25 @@ def parse_rates(lines, parameters):
         #   0.000000    0.000000    0.004241   -0.004241
         elif "matrix Q" in line:
             parameters["Q matrix"] = {"matrix": []}
-            if len(line_floats) > 0:
+            if line_floats:
                 parameters["Q matrix"]["average Ts/Tv"] = \
                     line_floats[0]
             Q_mat_found = True
-        elif Q_mat_found and len(line_floats) > 0:
+        elif Q_mat_found and line_floats:
             parameters["Q matrix"]["matrix"].append(line_floats)
             if len(parameters["Q matrix"]["matrix"]) == 4:
                 Q_mat_found = False
         # Find alpha (gamma shape parameter for variable rates)
         # Example match: "alpha (gamma, K=5) = 192.47918"
-        elif "alpha" in line and len(line_floats) > 0:
+        elif "alpha" in line and line_floats:
             parameters["alpha"] = line_floats[0]
         # Find rho for auto-discrete-gamma model
-        elif "rho" in line and len(line_floats) > 0:
+        elif "rho" in line and line_floats:
             parameters["rho"] = line_floats[0]
         elif "transition probabilities" in line:
             parameters["transition probs."] = []
             trans_probs_found = True
-        elif trans_probs_found and len(line_floats) > 0:
+        elif trans_probs_found and line_floats:
             parameters["transition probs."].append(line_floats)
             if len(parameters["transition probs."]) == len(parameters["rates"]):
                 trans_probs_found = False
@@ -198,7 +198,7 @@ def parse_freqs(lines, parameters):
         # Find base frequencies from baseml 4.3
         # Example match:
         # "Base frequencies:   0.20090  0.16306  0.37027  0.26577"
-        if "Base frequencies" in line and len(line_floats) > 0:
+        if "Base frequencies" in line and line_floats:
             base_frequencies = {}
             base_frequencies["T"] = line_floats[0]
             base_frequencies["C"] = line_floats[1]
@@ -213,9 +213,9 @@ def parse_freqs(lines, parameters):
             base_freqs_found = True
         # baseml 4.4 returns to having the base frequencies on the next line
         # but the heading changed
-        elif "Base frequencies" in line and len(line_floats) == 0:
+        elif "Base frequencies" in line and not line_floats:
             base_freqs_found = True
-        elif base_freqs_found and len(line_floats) > 0:
+        elif base_freqs_found and line_floats:
             base_frequencies = {}
             base_frequencies["T"] = line_floats[0]
             base_frequencies["C"] = line_floats[1]
@@ -226,7 +226,7 @@ def parse_freqs(lines, parameters):
         # Find frequencies
         # Example match:
         # "freq:   0.90121  0.96051  0.99831  1.03711  1.10287"
-        elif "freq: " in line and len(line_floats) > 0:
+        elif "freq: " in line and line_floats:
             parameters["rate frequencies"] = line_floats
         # Find branch-specific frequency parameters
         # Example match (note: I think it's possible to have 4 more
@@ -240,7 +240,7 @@ def parse_freqs(lines, parameters):
             parameters["nodes"] = {}
             branch_freqs_found = True
         elif branch_freqs_found:
-            if len(line_floats) > 0:
+            if line_floats:
                 node_res = re.match("Node \#(\d+)", line)
                 node_num = int(node_res.group(1))
                 node = {"root": False}
diff --git a/Bio/Phylo/PAML/_parse_codeml.py b/Bio/Phylo/PAML/_parse_codeml.py
index 7b8bca1..db2a174 100644
--- a/Bio/Phylo/PAML/_parse_codeml.py
+++ b/Bio/Phylo/PAML/_parse_codeml.py
@@ -81,7 +81,7 @@ def parse_basics(lines, results):
             else:
                 multi_models = True
         # Get the maximum log-likelihood
-        if "ln Lmax" in line and len(line_floats) > 0:
+        if "ln Lmax" in line and line_floats:
             results["lnL max"] = line_floats[0]
     return (results, multi_models, multi_genes)
 
@@ -187,7 +187,7 @@ def parse_model(lines, results):
         # Find lnL values.
         # Example match (lnL = -2021.348300):
         # "lnL(ntime: 19  np: 22):  -2021.348300      +0.000000"
-        if "lnL(ntime:" in line and len(line_floats) > 0:
+        if "lnL(ntime:" in line and line_floats:
             results["lnL"] = line_floats[0]
             np_res = re.match("lnL\(ntime:\s+\d+\s+np:\s+(\d+)\)", line)
             if np_res is not None:
@@ -213,7 +213,7 @@ def parse_model(lines, results):
             SEs_flag = False
         # Find tree lengths.
         # Example match: "tree length =   1.71931"
-        elif "tree length =" in line and len(line_floats) > 0:
+        elif "tree length =" in line and line_floats:
             results["tree length"] = line_floats[0]
         # Find the estimated trees only taking the tree if it has
         # lengths or rate estimates on the branches
@@ -238,18 +238,18 @@ def parse_model(lines, results):
                 w_tree_flag = True
         # Find rates for multiple genes
         # Example match: "rates for 2 genes:     1  2.75551"
-        elif "rates for" in line and len(line_floats) > 0:
+        elif "rates for" in line and line_floats:
             line_floats.insert(0, 1.0)
             parameters["rates"] = line_floats
         # Find kappa values.
         # Example match: "kappa (ts/tv) =  2.77541"
-        elif "kappa (ts/tv)" in line and len(line_floats) > 0:
+        elif "kappa (ts/tv)" in line and line_floats:
             parameters["kappa"] = line_floats[0]
         # Find omega values.
         # Example match: "omega (dN/dS) =  0.25122"
-        elif "omega (dN/dS)" in line and len(line_floats) > 0:
+        elif "omega (dN/dS)" in line and line_floats:
             parameters["omega"] = line_floats[0]
-        elif "w (dN/dS)" in line and len(line_floats) > 0:
+        elif "w (dN/dS)" in line and line_floats:
             parameters["omega"] = line_floats
         # Find omega and kappa values for multi-gene files
         # Example match: "gene # 1: kappa =   1.72615 omega =   0.39333"
@@ -261,11 +261,11 @@ def parse_model(lines, results):
                                              "omega": line_floats[1]}
         # Find dN values.
         # Example match: "tree length for dN:       0.2990"
-        elif "tree length for dN" in line and len(line_floats) > 0:
+        elif "tree length for dN" in line and line_floats:
             parameters["dN"] = line_floats[0]
         # Find dS values
         # Example match: "tree length for dS:       1.1901"
-        elif "tree length for dS" in line and len(line_floats) > 0:
+        elif "tree length for dS" in line and line_floats:
             parameters["dS"] = line_floats[0]
         # Find site class distributions.
         # Example match 1 (normal model, 2 site classes):
@@ -314,7 +314,7 @@ def parse_model(lines, results):
         # method.
         # Example row (some spaces removed to make it smaller...).
         # " 6..7   0.000  167.7  54.3  0.0000  0.0000  0.0000  0.0  0.0"
-        elif branch_res is not None and len(line_floats) > 0:
+        elif branch_res is not None and line_floats:
             branch = branch_res.group(1)
             if parameters.get("branches") is None:
                 parameters["branches"] = {}
@@ -335,12 +335,12 @@ def parse_model(lines, results):
         # Example matches:
         # "  p0=  0.99043  p=  0.36657 q=  1.04445
         # "  (p1=  0.00957) w=  3.25530"
-        elif len(model_params) > 0:
+        elif model_params:
             float_model_params = []
             for param in model_params:
                 float_model_params.append((param[0], _nan_float(param[1])))
             parameters.update(dict(float_model_params))
-    if len(parameters) > 0:
+    if parameters:
         results["parameters"] = parameters
     return results
 
@@ -350,7 +350,7 @@ def parse_siteclass_proportions(line_floats):
     alignment assigned to each class.
     """
     site_classes = {}
-    if len(line_floats) > 0:
+    if line_floats:
         for n in range(len(line_floats)):
             site_classes[n] = {"proportion": line_floats[n]}
     return site_classes
@@ -435,7 +435,7 @@ def parse_pairwise(lines, results):
                                         "dN": line_floats[4],
                                         "dS": line_floats[5]}
                 pairwise[seq2][seq1] = pairwise[seq1][seq2]
-    if len(pairwise) > 0:
+    if pairwise:
         results["pairwise"] = pairwise
     return results
 
@@ -481,6 +481,6 @@ def parse_distances(lines, results):
                 for i in range(0, len(line_floats)):
                     distances["ml"][seq_name][sequences[i]] = line_floats[i]
                     distances["ml"][sequences[i]][seq_name] = line_floats[i]
-    if len(distances) > 0:
+    if distances:
         results["distances"] = distances
     return results
diff --git a/Bio/Phylo/_cdao_owl.py b/Bio/Phylo/_cdao_owl.py
index ca386d0..ab1c20d 100644
--- a/Bio/Phylo/_cdao_owl.py
+++ b/Bio/Phylo/_cdao_owl.py
@@ -61,7 +61,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <owl:versionIRI rdf:resource="&obo;cdao/2012-06-06/cdao.owl"/>
         <owl:imports rdf:resource="&obo;iao/ontology-metadata.owl"/>
     </owl:Ontology>
-    
+
 
 
     <!--
@@ -82,10 +82,10 @@ cdao_owl = '''<?xml version="1.0"?>
     <owl:AnnotationProperty rdf:about="&dc;source"/>
     <owl:AnnotationProperty rdf:about="&dc;title"/>
     <owl:AnnotationProperty rdf:about="&dc;rights"/>
-    
 
 
-    
+
+
 
 
     <!--
@@ -96,7 +96,7 @@ cdao_owl = '''<?xml version="1.0"?>
     ///////////////////////////////////////////////////////////////////////////////////////
      -->
 
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000142 -->
@@ -108,7 +108,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:range rdf:resource="&obo;CDAO_0000071"/>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000178"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000143 -->
@@ -121,7 +121,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000146"/>
         <owl:inverseOf rdf:resource="&obo;CDAO_0000209"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000144 -->
@@ -135,7 +135,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <owl:inverseOf rdf:resource="&obo;CDAO_0000174"/>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000178"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000145 -->
@@ -154,7 +154,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Class>
         </rdfs:range>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000146 -->
@@ -166,7 +166,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:domain rdf:resource="&obo;CDAO_0000140"/>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000190"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000147 -->
@@ -184,7 +184,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Class>
         </rdfs:domain>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000148 -->
@@ -197,7 +197,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:range rdf:resource="&obo;CDAO_0000140"/>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000178"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000149 -->
@@ -214,7 +214,7 @@ cdao_owl = '''<?xml version="1.0"?>
             <rdf:Description rdf:about="&obo;CDAO_0000209"/>
         </owl:propertyChainAxiom>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000150 -->
@@ -233,7 +233,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Class>
         </rdfs:range>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000151 -->
@@ -244,7 +244,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:domain rdf:resource="&obo;CDAO_0000098"/>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000178"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000152 -->
@@ -256,7 +256,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:range rdf:resource="&obo;CDAO_0000068"/>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000205"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000153 -->
@@ -275,7 +275,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Class>
         </rdfs:domain>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000154 -->
@@ -293,7 +293,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Class>
         </rdfs:domain>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000155 -->
@@ -304,7 +304,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:range rdf:resource="&obo;CDAO_0000006"/>
         <rdfs:domain rdf:resource="&obo;CDAO_0000006"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000156 -->
@@ -323,7 +323,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Class>
         </rdfs:range>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000157 -->
@@ -333,7 +333,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:domain rdf:resource="&obo;CDAO_0000040"/>
         <rdfs:range rdf:resource="&owl;Thing"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000158 -->
@@ -342,7 +342,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">has_RNA_Datum</rdfs:label>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000206"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000159 -->
@@ -354,7 +354,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:domain rdf:resource="&obo;CDAO_0000097"/>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000182"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000160 -->
@@ -362,7 +362,7 @@ cdao_owl = '''<?xml version="1.0"?>
     <owl:ObjectProperty rdf:about="&obo;CDAO_0000160">
         <rdfs:label rdf:datatype="&xsd;string">precedes</rdfs:label>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000161 -->
@@ -370,7 +370,7 @@ cdao_owl = '''<?xml version="1.0"?>
     <owl:ObjectProperty rdf:about="&obo;CDAO_0000161">
         <rdfs:label rdf:datatype="&xsd;string">exclude</rdfs:label>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000162 -->
@@ -382,7 +382,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:range rdf:resource="&obo;CDAO_0000140"/>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000178"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000163 -->
@@ -392,7 +392,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:range rdf:resource="&obo;CDAO_0000059"/>
         <rdfs:domain rdf:resource="&obo;CDAO_0000140"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000164 -->
@@ -403,7 +403,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:domain rdf:resource="&obo;CDAO_0000138"/>
         <rdfs:range rdf:resource="&owl;Thing"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000165 -->
@@ -414,7 +414,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:domain rdf:resource="&obo;CDAO_0000022"/>
         <rdfs:range rdf:resource="&obo;CDAO_0000104"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000166 -->
@@ -426,7 +426,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:range rdf:resource="&obo;CDAO_0000094"/>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000205"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000167 -->
@@ -436,7 +436,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">connects_to</rdfs:label>
         <owl:inverseOf rdf:resource="&obo;CDAO_0000167"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000168 -->
@@ -455,7 +455,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Class>
         </rdfs:domain>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000169 -->
@@ -465,7 +465,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <dc:description rdf:datatype="&xsd;string">This property relates a type of evolutionary change (an Edge_Transformation) to the character that undergoes the change.  The change is a transformation_of the affected character.</dc:description>
         <rdfs:range rdf:resource="&obo;CDAO_0000071"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000170 -->
@@ -484,7 +484,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Class>
         </rdfs:domain>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000171 -->
@@ -495,7 +495,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:domain rdf:resource="&obo;CDAO_0000080"/>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000178"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000172 -->
@@ -505,7 +505,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:domain rdf:resource="&obo;CDAO_0000030"/>
         <rdfs:range rdf:resource="&obo;CDAO_0000110"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000173 -->
@@ -517,7 +517,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:range rdf:resource="&obo;CDAO_0000131"/>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000205"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000174 -->
@@ -530,7 +530,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:range rdf:resource="&obo;CDAO_0000140"/>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000178"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000175 -->
@@ -542,7 +542,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:range rdf:resource="&obo;CDAO_0000031"/>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000184"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000176 -->
@@ -551,7 +551,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">has_Type</rdfs:label>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000178"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000177 -->
@@ -564,7 +564,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000146"/>
         <owl:inverseOf rdf:resource="&obo;CDAO_0000201"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000178 -->
@@ -573,7 +573,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">has</rdfs:label>
         <dc:description>Generic 'has' property.</dc:description>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000179 -->
@@ -589,7 +589,7 @@ cdao_owl = '''<?xml version="1.0"?>
             <rdf:Description rdf:about="&obo;CDAO_0000201"/>
         </owl:propertyChainAxiom>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000180 -->
@@ -600,7 +600,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:domain rdf:resource="&obo;CDAO_0000136"/>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000205"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000181 -->
@@ -611,7 +611,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:domain rdf:resource="&obo;CDAO_0000098"/>
         <rdfs:range rdf:resource="&obo;CDAO_0000098"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000182 -->
@@ -622,7 +622,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:domain rdf:resource="&obo;CDAO_0000097"/>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000178"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000183 -->
@@ -631,7 +631,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">has_Categorical_Datum</rdfs:label>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000153"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000184 -->
@@ -643,7 +643,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:domain rdf:resource="&obo;CDAO_0000098"/>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000178"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000185 -->
@@ -655,7 +655,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:range rdf:resource="&obo;CDAO_0000140"/>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000182"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000186 -->
@@ -667,7 +667,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:domain rdf:resource="&obo;CDAO_0000097"/>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000182"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000187 -->
@@ -679,7 +679,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:range rdf:resource="&obo;CDAO_0000138"/>
         <rdfs:domain rdf:resource="&obo;CDAO_0000140"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000188 -->
@@ -689,7 +689,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:range rdf:resource="&obo;CDAO_0000140"/>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000161"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000189 -->
@@ -708,7 +708,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Class>
         </rdfs:range>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000190 -->
@@ -720,7 +720,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:range rdf:resource="&owl;Thing"/>
         <rdfs:domain rdf:resource="&owl;Thing"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000191 -->
@@ -733,7 +733,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:range rdf:resource="&obo;CDAO_0000138"/>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000190"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000192 -->
@@ -751,7 +751,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Class>
         </rdfs:domain>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000193 -->
@@ -763,7 +763,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000178"/>
         <rdfs:domain rdf:resource="&owl;Thing"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000194 -->
@@ -772,7 +772,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">part_of</rdfs:label>
         <owl:inverseOf rdf:resource="&obo;CDAO_0000178"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000195 -->
@@ -791,7 +791,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Class>
         </rdfs:domain>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000196 -->
@@ -803,7 +803,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:range rdf:resource="&obo;CDAO_0000140"/>
         <owl:inverseOf rdf:resource="&obo;CDAO_0000187"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000197 -->
@@ -815,7 +815,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:domain rdf:resource="&obo;CDAO_0000092"/>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000178"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000198 -->
@@ -825,7 +825,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:domain rdf:resource="&obo;CDAO_0000118"/>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000178"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000199 -->
@@ -835,7 +835,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:range rdf:resource="&obo;CDAO_0000070"/>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000161"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000200 -->
@@ -853,7 +853,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Class>
         </rdfs:domain>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000201 -->
@@ -866,7 +866,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:range rdf:resource="&obo;CDAO_0000140"/>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000162"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000202 -->
@@ -877,7 +877,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:range rdf:resource="&obo;CDAO_0000140"/>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000178"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000203 -->
@@ -889,7 +889,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <owl:inverseOf rdf:resource="&obo;CDAO_0000148"/>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000190"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000204 -->
@@ -900,7 +900,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:domain rdf:resource="&obo;CDAO_0000099"/>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000178"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000205 -->
@@ -912,7 +912,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:domain rdf:resource="&obo;CDAO_0000098"/>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000190"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000206 -->
@@ -930,7 +930,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Class>
         </rdfs:domain>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000207 -->
@@ -949,7 +949,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Class>
         </rdfs:domain>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000208 -->
@@ -961,7 +961,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:range rdf:resource="&obo;CDAO_0000138"/>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000178"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000209 -->
@@ -974,7 +974,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:range rdf:resource="&obo;CDAO_0000140"/>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000162"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000210 -->
@@ -986,7 +986,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:range rdf:resource="&obo;CDAO_0000140"/>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000182"/>
     </owl:ObjectProperty>
-    
+
 
 
     <!--
@@ -997,7 +997,7 @@ cdao_owl = '''<?xml version="1.0"?>
     ///////////////////////////////////////////////////////////////////////////////////////
      -->
 
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000211 -->
@@ -1006,7 +1006,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">has_Precision</rdfs:label>
         <rdfs:range rdf:resource="&xsd;float"/>
     </owl:DatatypeProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000212 -->
@@ -1016,7 +1016,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:domain rdf:resource="&obo;CDAO_0000003"/>
         <rdfs:range rdf:resource="&xsd;integer"/>
     </owl:DatatypeProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000213 -->
@@ -1026,7 +1026,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000215"/>
         <rdfs:range rdf:resource="&xsd;int"/>
     </owl:DatatypeProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000214 -->
@@ -1035,7 +1035,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">has_Support_Value</rdfs:label>
         <rdfs:range rdf:resource="&xsd;float"/>
     </owl:DatatypeProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000215 -->
@@ -1043,7 +1043,7 @@ cdao_owl = '''<?xml version="1.0"?>
     <owl:DatatypeProperty rdf:about="&obo;CDAO_0000215">
         <rdfs:label rdf:datatype="&xsd;string">has_Value</rdfs:label>
     </owl:DatatypeProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000216 -->
@@ -1052,7 +1052,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">has_Uncertainty_Factor</rdfs:label>
         <rdfs:range rdf:resource="&xsd;float"/>
     </owl:DatatypeProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000217 -->
@@ -1062,7 +1062,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:domain rdf:resource="&obo;CDAO_0000095"/>
         <rdfs:range rdf:resource="&xsd;integer"/>
     </owl:DatatypeProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000218 -->
@@ -1072,7 +1072,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:subPropertyOf rdf:resource="&obo;CDAO_0000215"/>
         <rdfs:range rdf:resource="&xsd;float"/>
     </owl:DatatypeProperty>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000219 -->
@@ -1082,7 +1082,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:domain rdf:resource="&obo;CDAO_0000095"/>
         <rdfs:range rdf:resource="&xsd;integer"/>
     </owl:DatatypeProperty>
-    
+
 
 
     <!--
@@ -1093,7 +1093,7 @@ cdao_owl = '''<?xml version="1.0"?>
     ///////////////////////////////////////////////////////////////////////////////////////
      -->
 
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000002 -->
@@ -1102,7 +1102,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">DesoxiRibonucleotideResidueStateDatum</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000050"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000003 -->
@@ -1111,7 +1111,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">CoordinatePoint</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000022"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000004 -->
@@ -1126,7 +1126,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Restriction>
         </rdfs:subClassOf>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000005 -->
@@ -1135,7 +1135,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">Phylo4Tree</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000074"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000006 -->
@@ -1157,7 +1157,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Restriction>
         </rdfs:subClassOf>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000007 -->
@@ -1168,7 +1168,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <dc:description>Description of a model of transformations.</dc:description>
         <rdfs:comment>This is a non-computible description of a model, not the fully specified mathematical model, which typically relates the probability of a transformation to various parameters.</rdfs:comment>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000008 -->
@@ -1177,7 +1177,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">StandardStateDatum</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000089"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000009 -->
@@ -1186,7 +1186,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">ContinuousCharacterLengthType</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000063"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000010 -->
@@ -1195,7 +1195,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">ContinuousCharBayesianLengthType</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000009"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000011 -->
@@ -1204,7 +1204,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">NEXUSTreeBlock</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000074"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000012 -->
@@ -1240,7 +1240,7 @@ cdao_owl = '''<?xml version="1.0"?>
         </rdfs:subClassOf>
         <owl:disjointWith rdf:resource="&obo;CDAO_0000088"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000013 -->
@@ -1249,7 +1249,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">Kimura2Parameters</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000020"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000014 -->
@@ -1258,7 +1258,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">TreeProcedure</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000044"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000015 -->
@@ -1278,7 +1278,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:comment>This class should be renamed.  These are not generic states but non-concrete states including gap, unknown and missing.</rdfs:comment>
         <dc:description>This concept is tied to the verbally ambiguous 'gap' concept and to the use of a gap character (often the en dash '-') in text representations of sequence alignments. In general, this represents the absence of any positively diagnosed Character-State. As such, the gap may be interpreted as an additional Character-State, as the absence of the Character, or as an unknown value.  In some cases it is helpful to separate these.</dc:description>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000016 -->
@@ -1287,7 +1287,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">UnrootedSubtree</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000070"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000017 -->
@@ -1296,7 +1296,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">UnresolvedTree</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000110"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000018 -->
@@ -1306,7 +1306,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <owl:equivalentClass rdf:resource="&obo;CDAO_0000130"/>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000110"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000019 -->
@@ -1315,7 +1315,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">ContinuousStateDatum</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000098"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000020 -->
@@ -1324,7 +1324,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">SubstitutionModel</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000007"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000021 -->
@@ -1333,7 +1333,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">JukesKantor</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000020"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000022 -->
@@ -1351,7 +1351,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <dc:description>A positional coordinate giving the source of a character state, used for molecular sequences.</dc:description>
         <rdfs:comment>drawing from seqloc categories from NCBI at http://www.ncbi.nlm.nih.gov/IEB/ToolBox/SDKDOCS/SEQLOC.HTML#_Seq-loc:_Locations_on</rdfs:comment>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000023 -->
@@ -1361,7 +1361,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000012"/>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000017"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000024 -->
@@ -1371,7 +1371,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <owl:equivalentClass rdf:resource="&obo;CDAO_0000099"/>
         <dc:description>'Branch' is the domain-specific synonym for an edge of a (Phylogenetic) Tree or Network.  Branches may have properties such as length and degree of support.</dc:description>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000025 -->
@@ -1381,7 +1381,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000040"/>
         <dc:description>Meta-information associated with a character matrix, such as, for the case of a sequence alignment, the method of alignment.</dc:description>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000026 -->
@@ -1403,7 +1403,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Restriction>
         </rdfs:subClassOf>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000027 -->
@@ -1413,7 +1413,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000017"/>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000088"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000029 -->
@@ -1428,7 +1428,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Restriction>
         </rdfs:subClassOf>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000030 -->
@@ -1444,7 +1444,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Restriction>
         </rdfs:subClassOf>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000031 -->
@@ -1460,7 +1460,7 @@ cdao_owl = '''<?xml version="1.0"?>
         </rdfs:subClassOf>
         <dc:description>This class describes a continuous value. The link to the actual float value is through the property has_Value. It could have also other properties attached (e.g., has_Precision).</dc:description>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000032 -->
@@ -1469,7 +1469,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">AlignmentProcedure</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000025"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000033 -->
@@ -1480,7 +1480,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000026"/>
         <owl:disjointWith rdf:resource="&obo;CDAO_0000042"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000034 -->
@@ -1489,7 +1489,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">Molecular</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000039"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000035 -->
@@ -1498,7 +1498,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">ContinuousCharParsimonyLengthType</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000009"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000039 -->
@@ -1507,7 +1507,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">Categorical</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000091"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000040 -->
@@ -1518,7 +1518,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:comment>Its possible that this base class should be discarded and that annotations should inherit from an imported base class if one exists.</rdfs:comment>
         <dc:description>The base class of annotations in CDAO.</dc:description>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000041 -->
@@ -1532,7 +1532,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Restriction>
         </rdfs:subClassOf>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000042 -->
@@ -1548,7 +1548,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000026"/>
         <owl:disjointWith rdf:resource="&obo;CDAO_0000124"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000043 -->
@@ -1563,7 +1563,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Restriction>
         </rdfs:subClassOf>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000044 -->
@@ -1578,7 +1578,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Restriction>
         </rdfs:subClassOf>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000045 -->
@@ -1587,7 +1587,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">Standard</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000039"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000046 -->
@@ -1610,7 +1610,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:comment>Its possible that this should not be classed as an 'annotation' since it contains data rather than meta-data.</rdfs:comment>
         <dc:description>The length of an edge (branch) of a Tree or Network, typically in units of evolutionary changes in character-state per character.</dc:description>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000047 -->
@@ -1619,7 +1619,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">RibonucleotideResidue</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000034"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000048 -->
@@ -1629,7 +1629,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <owl:equivalentClass rdf:resource="&obo;CDAO_0000129"/>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000110"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000049 -->
@@ -1638,7 +1638,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">DiscreteCharParsimonyLengthType</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000100"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000050 -->
@@ -1647,7 +1647,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">MolecularStateDatum</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000089"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000051 -->
@@ -1663,7 +1663,7 @@ cdao_owl = '''<?xml version="1.0"?>
         </rdfs:subClassOf>
         <owl:disjointWith rdf:resource="&obo;CDAO_0000127"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000052 -->
@@ -1672,7 +1672,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">NexusDataBlock</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000107"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000053 -->
@@ -1687,7 +1687,7 @@ cdao_owl = '''<?xml version="1.0"?>
         </owl:equivalentClass>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000026"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000055 -->
@@ -1696,7 +1696,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">Compound</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000039"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000056 -->
@@ -1724,7 +1724,7 @@ cdao_owl = '''<?xml version="1.0"?>
         </rdfs:subClassOf>
         <dc:description>A matrix of character-state data, typically containing observed data, though in some cases the states in the matrix might be simulated or hypothetical. Synonyms: character Data matrix, character-state matrix</dc:description>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000057 -->
@@ -1733,7 +1733,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">RibonucleotideResidueStateDatum</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000050"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000058 -->
@@ -1742,7 +1742,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">TimeCalibratedLengthType</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000063"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000059 -->
@@ -1757,7 +1757,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Restriction>
         </rdfs:subClassOf>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000060 -->
@@ -1773,7 +1773,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Restriction>
         </rdfs:subClassOf>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000061 -->
@@ -1782,7 +1782,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">FASTADataMatrix</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000107"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000062 -->
@@ -1813,7 +1813,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Restriction>
         </rdfs:subClassOf>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000063 -->
@@ -1822,7 +1822,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">EdgeLengthType</rdfs:label>
         <rdfs:subClassOf rdf:resource="&owl;Thing"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000064 -->
@@ -1831,7 +1831,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">cladogeneticChange</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000097"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000065 -->
@@ -1840,7 +1840,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">anageneticChange</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000097"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000066 -->
@@ -1849,7 +1849,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">TUAnnotation</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000040"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000067 -->
@@ -1858,7 +1858,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">PhyloTree</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000074"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000068 -->
@@ -1879,7 +1879,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Restriction>
         </rdfs:subClassOf>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000069 -->
@@ -1888,7 +1888,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">PHYLIPTree</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000074"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000070 -->
@@ -1903,7 +1903,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Restriction>
         </rdfs:subClassOf>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000071 -->
@@ -1918,7 +1918,7 @@ cdao_owl = '''<?xml version="1.0"?>
         </rdfs:subClassOf>
         <rdfs:comment rdf:datatype="&xsd;string">Traits shown to be relevant for phylogenetic classification</rdfs:comment>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000072 -->
@@ -1927,7 +1927,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">GalledTree</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000006"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000073 -->
@@ -1936,7 +1936,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">SpeciesTree</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000110"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000074 -->
@@ -1945,7 +1945,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">TreeFormat</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000044"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000075 -->
@@ -1954,7 +1954,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">StandardCharacter</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000111"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000076 -->
@@ -1964,7 +1964,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000034"/>
         <dc:description>This class will be declared equivalent ot the amino acid class description imported</dc:description>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000077 -->
@@ -1973,7 +1973,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">geneDuplication</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000064"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000078 -->
@@ -2001,7 +2001,7 @@ cdao_owl = '''<?xml version="1.0"?>
         </rdfs:subClassOf>
         <dc:description>A character that could be divided into separate characters but is not due to the non-independence of changes that would result, e.g., as in the case of a subsequence that is either present or absent as a block.</dc:description>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000079 -->
@@ -2010,7 +2010,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">SIMMAPTree</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000074"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000080 -->
@@ -2030,7 +2030,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Class>
         </rdfs:subClassOf>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000081 -->
@@ -2039,7 +2039,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">NewickTree</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000074"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000082 -->
@@ -2048,7 +2048,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">TimeProportionalLengthType</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000063"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000083 -->
@@ -2057,7 +2057,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">DiscreteCharDistanceLengthType</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000100"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000084 -->
@@ -2072,7 +2072,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Restriction>
         </rdfs:subClassOf>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000085 -->
@@ -2082,7 +2082,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000018"/>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000088"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000086 -->
@@ -2098,7 +2098,7 @@ cdao_owl = '''<?xml version="1.0"?>
         </rdfs:subClassOf>
         <owl:disjointWith rdf:resource="&obo;CDAO_0000129"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000087 -->
@@ -2107,7 +2107,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">geneticEvent</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000041"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000088 -->
@@ -2116,7 +2116,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">UnrootedTree</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000110"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000089 -->
@@ -2125,7 +2125,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">CategoricalStateDatum</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000098"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000090 -->
@@ -2134,7 +2134,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">DiscreteCharLikelihoodLengthType</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000100"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000091 -->
@@ -2143,7 +2143,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">CharacterStateDomain</rdfs:label>
         <dc:description>The universe of possible states for a particular type of character, e.g., the states of an Amino_Acid character come from the Amino_Acid domain.</dc:description>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000092 -->
@@ -2152,7 +2152,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">CoordinateList</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000022"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000093 -->
@@ -2161,7 +2161,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">GammaDistribution</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000020"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000094 -->
@@ -2182,7 +2182,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Restriction>
         </rdfs:subClassOf>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000095 -->
@@ -2191,7 +2191,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">CoordinateRange</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000022"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000096 -->
@@ -2200,7 +2200,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">ReticulateEvolution</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000006"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000097 -->
@@ -2229,7 +2229,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Restriction>
         </rdfs:subClassOf>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000098 -->
@@ -2253,7 +2253,7 @@ cdao_owl = '''<?xml version="1.0"?>
         </rdfs:subClassOf>
         <dc:description>The instance of a given character for a given TU.  Its state is an object property drawn from a particular character state domain, e.g., the state of an Amino_Acid_State_Datum is an object property drawn from the domain Amino_Acid.</dc:description>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000099 -->
@@ -2276,7 +2276,7 @@ cdao_owl = '''<?xml version="1.0"?>
         </rdfs:subClassOf>
         <dc:description>An edge connecting two nodes in a (Phylogenetic) Tree or Network, also known as a 'branch'.  Edges may have attributes such as length, degree of support, and direction.  An edge can be a surrogate for a 'split' or bipartition, since each edge in a tree divides the terminal nodes into two sets.</dc:description>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000100 -->
@@ -2285,7 +2285,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">DiscreteCharacterLengthType</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000063"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000101 -->
@@ -2294,7 +2294,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">EdgeAnnotation</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000040"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000102 -->
@@ -2318,7 +2318,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Restriction>
         </rdfs:subClassOf>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000103 -->
@@ -2327,7 +2327,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">GrafenLengthType</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000063"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000104 -->
@@ -2337,7 +2337,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:subClassOf rdf:resource="&owl;Thing"/>
         <dc:description>A reference to an external coordinate system.  Coordinates for data must refer to some such external coordinate system.</dc:description>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000105 -->
@@ -2346,7 +2346,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">GenBankDataMatrix</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000107"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000107 -->
@@ -2355,7 +2355,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">DataMatrixFormat</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000025"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000108 -->
@@ -2379,7 +2379,7 @@ cdao_owl = '''<?xml version="1.0"?>
         </owl:equivalentClass>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000140"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000109 -->
@@ -2394,7 +2394,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Restriction>
         </rdfs:subClassOf>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000110 -->
@@ -2403,7 +2403,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">Tree</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000006"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000111 -->
@@ -2412,7 +2412,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">CategoricalCharacter</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000071"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000112 -->
@@ -2421,7 +2421,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">AminoAcidResidueStateDatum</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000050"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000113 -->
@@ -2430,7 +2430,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">PHYLIPDataMatrix</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000107"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000114 -->
@@ -2439,7 +2439,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">ContinuousCharLikelihoodLengthType</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000009"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000115 -->
@@ -2448,7 +2448,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">MolecularCharacter</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000111"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000116 -->
@@ -2462,7 +2462,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Restriction>
         </rdfs:subClassOf>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000117 -->
@@ -2471,7 +2471,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">SetOfCharacters</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000118"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000118 -->
@@ -2494,7 +2494,7 @@ cdao_owl = '''<?xml version="1.0"?>
         </rdfs:subClassOf>
         <dc:description>The class is used to describe either colletions of characters or higher order grouping (e.g., groups of groups of characters). This extends the CharSet block of NEXUS.</dc:description>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000120 -->
@@ -2522,7 +2522,7 @@ cdao_owl = '''<?xml version="1.0"?>
         </rdfs:subClassOf>
         <dc:description>A set of ordered states, typically the residues in a macromolecular sequence.</dc:description>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000121 -->
@@ -2532,7 +2532,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <owl:equivalentClass rdf:resource="&obo;CDAO_0000122"/>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000064"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000122 -->
@@ -2541,7 +2541,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">cladogenesis</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000064"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000124 -->
@@ -2556,7 +2556,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Restriction>
         </rdfs:subClassOf>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000125 -->
@@ -2565,7 +2565,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">DiscreteCharBayesianLengthType</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000100"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000126 -->
@@ -2575,7 +2575,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000066"/>
         <dc:description>Link to an externally defined taxonomic hierarchy.</dc:description>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000127 -->
@@ -2584,7 +2584,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">MonophyleticGroup</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000006"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000128 -->
@@ -2593,7 +2593,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">molecularRecombination</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000132"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000129 -->
@@ -2602,7 +2602,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">HolophyleticGroup</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000127"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000130 -->
@@ -2611,7 +2611,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">FullyResolvedTree</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000110"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000131 -->
@@ -2632,7 +2632,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Restriction>
         </rdfs:subClassOf>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000132 -->
@@ -2641,7 +2641,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">recombination</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000087"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000133 -->
@@ -2650,7 +2650,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">DesoxiRibonucleotideResidue</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000034"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000134 -->
@@ -2660,7 +2660,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000012"/>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000070"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000136 -->
@@ -2669,7 +2669,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">CompoundStateDatum</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000089"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000137 -->
@@ -2678,7 +2678,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">GapCost</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000007"/>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000138 -->
@@ -2688,7 +2688,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:subClassOf rdf:resource="&owl;Thing"/>
         <dc:description>A unit of analysis that may be tied to a node in a tree and to a row in a character matrix.  It subsumes the traditional concepts of 'OTU' and 'HTU'.</dc:description>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000139 -->
@@ -2714,7 +2714,7 @@ cdao_owl = '''<?xml version="1.0"?>
         </owl:equivalentClass>
         <dc:description>A directed edge. Rooted trees have directed edges. The direction is specified by way of the parent and child relationships of nodes that the edge connects.</dc:description>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000140 -->
@@ -2737,7 +2737,7 @@ cdao_owl = '''<?xml version="1.0"?>
             </owl:Restriction>
         </rdfs:subClassOf>
     </owl:Class>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000141 -->
@@ -2746,7 +2746,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdfs:label rdf:datatype="&xsd;string">ContinuousCharDistanceLengthType</rdfs:label>
         <rdfs:subClassOf rdf:resource="&obo;CDAO_0000009"/>
     </owl:Class>
-    
+
 
 
     <!--
@@ -2757,7 +2757,7 @@ cdao_owl = '''<?xml version="1.0"?>
     ///////////////////////////////////////////////////////////////////////////////////////
      -->
 
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000220 -->
@@ -2767,7 +2767,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdf:type rdf:resource="&owl;NamedIndividual"/>
         <rdfs:label rdf:datatype="&xsd;string">dA</rdfs:label>
     </owl:Thing>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000221 -->
@@ -2777,7 +2777,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdf:type rdf:resource="&owl;NamedIndividual"/>
         <rdfs:label rdf:datatype="&xsd;string">absent</rdfs:label>
     </owl:Thing>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000222 -->
@@ -2787,7 +2787,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdf:type rdf:resource="&owl;NamedIndividual"/>
         <rdfs:label rdf:datatype="&xsd;string">unknown</rdfs:label>
     </owl:Thing>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000223 -->
@@ -2797,7 +2797,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdf:type rdf:resource="&owl;NamedIndividual"/>
         <rdfs:label rdf:datatype="&xsd;string">gap</rdfs:label>
     </owl:Thing>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000224 -->
@@ -2807,7 +2807,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdf:type rdf:resource="&owl;NamedIndividual"/>
         <rdfs:label rdf:datatype="&xsd;string">dG</rdfs:label>
     </owl:Thing>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000225 -->
@@ -2817,7 +2817,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdf:type rdf:resource="&owl;NamedIndividual"/>
         <rdfs:label rdf:datatype="&xsd;string">rU</rdfs:label>
     </owl:Thing>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000226 -->
@@ -2827,7 +2827,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdf:type rdf:resource="&owl;NamedIndividual"/>
         <rdfs:label rdf:datatype="&xsd;string">dC</rdfs:label>
     </owl:Thing>
-    
+
 
 
     <!-- http://purl.obolibrary.org/obo/CDAO_0000227 -->
@@ -2837,7 +2837,7 @@ cdao_owl = '''<?xml version="1.0"?>
         <rdf:type rdf:resource="&owl;NamedIndividual"/>
         <rdfs:label rdf:datatype="&xsd;string">dT</rdfs:label>
     </owl:Thing>
-    
+
 
 
     <!--
diff --git a/Bio/PopGen/Async/Local.py b/Bio/PopGen/Async/Local.py
index 52d1468..f3600c9 100644
--- a/Bio/PopGen/Async/Local.py
+++ b/Bio/PopGen/Async/Local.py
@@ -3,15 +3,15 @@
 # license.  Please see the LICENSE file that should have been included
 # as part of this package.
 
-"""Asynchronous local execution.
+"""Asynchronous local execution (DEPRECATED).
 
 Supports multicore architectures.
 """
 
-from Bio.PopGen.Async import Async
-
 import threading
 
+from Bio.PopGen.Async import Async
+
 
 class Local(Async):
     """Execution on Local machine."""
diff --git a/Bio/PopGen/Async/__init__.py b/Bio/PopGen/Async/__init__.py
index 2b9336b..fca05b6 100644
--- a/Bio/PopGen/Async/__init__.py
+++ b/Bio/PopGen/Async/__init__.py
@@ -3,10 +3,18 @@
 # license.  Please see the LICENSE file that should have been included
 # as part of this package.
 
-"""Support for asynchronous execution."""
+"""Support for asynchronous execution (DEPRECATED)."""
 
 import os
 import threading
+import warnings
+
+from Bio import BiopythonDeprecationWarning
+
+warnings.warn("Bio.PopGen.Async has been deprecated, and we intend to remove"
+              " it in a future release of Biopython. If you would like to"
+              " continue using it, please contact the Biopython developers"
+              " via the mailing list.", BiopythonDeprecationWarning)
 
 
 class Async(object):
diff --git a/Bio/PopGen/FDist/Async.py b/Bio/PopGen/FDist/Async.py
index 4436eb0..5eebfde 100644
--- a/Bio/PopGen/FDist/Async.py
+++ b/Bio/PopGen/FDist/Async.py
@@ -3,7 +3,7 @@
 # license.  Please see the LICENSE file that should have been included
 # as part of this package.
 
-"""Asynchronous execution of Fdist and spliting of loads.
+"""Asynchronous execution of Fdist and spliting of loads (DEPRECATED).
 
 FDistAsync Allows for the execution of FDist.
 
@@ -15,6 +15,7 @@ import os
 import shutil
 import threading
 from time import sleep
+
 from Bio.PopGen.Async import Local
 from Bio.PopGen.FDist.Controller import FDistController
 
diff --git a/Bio/PopGen/FDist/Controller.py b/Bio/PopGen/FDist/Controller.py
index 11ef391..a991f49 100644
--- a/Bio/PopGen/FDist/Controller.py
+++ b/Bio/PopGen/FDist/Controller.py
@@ -3,7 +3,7 @@
 # license.  Please see the LICENSE file that should have been included
 # as part of this package.
 
-"""This module allows you to control fdist.
+"""This module allows you to control fdist (DEPRECATED).
 
 This will allow you to call fdist and associated programs (cplot,
 datacal, pv) by Mark Beaumont.
diff --git a/Bio/PopGen/FDist/Utils.py b/Bio/PopGen/FDist/Utils.py
index 8d76cbd..6b778c6 100644
--- a/Bio/PopGen/FDist/Utils.py
+++ b/Bio/PopGen/FDist/Utils.py
@@ -3,6 +3,7 @@
 # license.  Please see the LICENSE file that should have been included
 # as part of this package.
 
+"""Utility functions for working with FDist (DEPRECATED)."""
 
 from Bio.PopGen.GenePop import FileParser
 import Bio.PopGen.FDist
diff --git a/Bio/PopGen/FDist/__init__.py b/Bio/PopGen/FDist/__init__.py
index d55c9f5..75c6746 100644
--- a/Bio/PopGen/FDist/__init__.py
+++ b/Bio/PopGen/FDist/__init__.py
@@ -3,9 +3,7 @@
 # license.  Please see the LICENSE file that should have been included
 # as part of this package.
 
-
-"""
-This module provides code to work with FDist.
+"""This module provides code to work with FDist (DEPRECATED).
 
 See http://www.rubic.rdg.ac.uk/~mab/software.html (old) and
 http://www.maths.bris.ac.uk/~mamab/ (new) for downloading the
@@ -20,6 +18,15 @@ read             Parses a FDist record (file) into a Record object.
 
 """
 
+import warnings
+
+from Bio import BiopythonDeprecationWarning
+
+warnings.warn("Bio.PopGen.FDist has been deprecated, and we intend to remove"
+              " it in a future release of Biopython. If you would like to"
+              " continue using it, please contact the Biopython developers"
+              " via the mailing list.", BiopythonDeprecationWarning)
+
 
 def read(handle):
     """Parses FDist data into a Record object.
diff --git a/Bio/PopGen/SimCoal/Async.py b/Bio/PopGen/SimCoal/Async.py
index be872d3..e14ec5c 100644
--- a/Bio/PopGen/SimCoal/Async.py
+++ b/Bio/PopGen/SimCoal/Async.py
@@ -1,7 +1,7 @@
 # Copyright 2007 by Tiago Antao <tiagoantao at gmail.com>.  All rights reserved.
 
-"""
-(DEPRECATED)
+"""Async. caching of Simcoal2 results (DEPRECATED).
+
 This module allows to cache Simcoal2 results, and return on the fly
 in case the calculation was done. Async version
 
diff --git a/Bio/PopGen/SimCoal/Cache.py b/Bio/PopGen/SimCoal/Cache.py
index b975b4e..f837adc 100644
--- a/Bio/PopGen/SimCoal/Cache.py
+++ b/Bio/PopGen/SimCoal/Cache.py
@@ -1,6 +1,6 @@
 # Copyright 2007 by Tiago Antao <tiagoantao at gmail.com>.  All rights reserved.
 
-"""Cache for Simacoal2 results ((DEPRECATED).
+"""Cache for Simcoal2 results (DEPRECATED).
 
 This module allows you to cache Simcoal2 results, and return on the fly
 in case the calculation was done.
diff --git a/Bio/PopGen/SimCoal/Controller.py b/Bio/PopGen/SimCoal/Controller.py
index a238542..d6c5fdc 100644
--- a/Bio/PopGen/SimCoal/Controller.py
+++ b/Bio/PopGen/SimCoal/Controller.py
@@ -5,10 +5,7 @@
 # license.  Please see the LICENSE file that should have been included
 # as part of this package.
 
-"""
-This module allows you to control Simcoal2 and FastSimcoal
-
-"""
+"""This module allows you to control Simcoal2 and FastSimcoal (DEPRECATED)."""
 
 import os
 import sys
diff --git a/Bio/PopGen/SimCoal/Template.py b/Bio/PopGen/SimCoal/Template.py
index 189afee..e10d011 100644
--- a/Bio/PopGen/SimCoal/Template.py
+++ b/Bio/PopGen/SimCoal/Template.py
@@ -3,6 +3,8 @@
 # license.  Please see the LICENSE file that should have been included
 # as part of this package.
 
+"""Utility code for using SimCoal (DEPRECATED)."""
+
 from __future__ import print_function
 
 from os import sep
diff --git a/Bio/PopGen/SimCoal/__init__.py b/Bio/PopGen/SimCoal/__init__.py
index 7f5bb6b..be105e8 100644
--- a/Bio/PopGen/SimCoal/__init__.py
+++ b/Bio/PopGen/SimCoal/__init__.py
@@ -3,10 +3,18 @@
 # license.  Please see the LICENSE file that should have been included
 # as part of this package.
 
-"""SimCoal2 execution module and support functions."""
+"""SimCoal2 execution module and support functions (DEPRECATED)."""
 
 import os
 import sys
+import warnings
+
+from Bio import BiopythonDeprecationWarning
+
+warnings.warn("Bio.PopGen.SimCoal has been deprecated, and we intend to "
+              " remove it in a future release of Biopython. If you would like"
+              " to continue using it, please contact the Biopython developers"
+              " via the mailing list.", BiopythonDeprecationWarning)
 
 
 # This is a workaround to work with the test system
diff --git a/Bio/Restriction/Restriction.py b/Bio/Restriction/Restriction.py
index 14ff5a8..ddda53e 100644
--- a/Bio/Restriction/Restriction.py
+++ b/Bio/Restriction/Restriction.py
@@ -493,14 +493,14 @@ class AbstractCut(RestrictionType):
             return cls._search()
 
     @classmethod
-    def all_suppliers(self):
+    def all_suppliers(cls):
         """RE.all_suppliers -> print all the suppliers of R"""
         supply = sorted(x[0] for x in suppliers_dict.values())
         print(",\n".join(supply))
         return
 
     @classmethod
-    def is_equischizomer(self, other):
+    def is_equischizomer(cls, other):
         """RE.is_equischizomers(other) -> bool.
 
         True if other is an isoschizomer of RE.
@@ -508,10 +508,10 @@ class AbstractCut(RestrictionType):
 
         equischizomer <=> same site, same position of restriction.
         """
-        return not self != other
+        return not cls != other
 
     @classmethod
-    def is_neoschizomer(self, other):
+    def is_neoschizomer(cls, other):
         """RE.is_neoschizomers(other) -> bool.
 
         True if other is an isoschizomer of RE.
@@ -519,20 +519,20 @@ class AbstractCut(RestrictionType):
 
         neoschizomer <=> same site, different position of restriction.
         """
-        return self >> other
+        return cls >> other
 
     @classmethod
-    def is_isoschizomer(self, other):
+    def is_isoschizomer(cls, other):
         """RE.is_isoschizomers(other) -> bool.
 
         True if other is an isoschizomer of RE.
         False else.
 
         isoschizomer <=> same site."""
-        return (not self != other) or self >> other
+        return (not cls != other) or cls >> other
 
     @classmethod
-    def equischizomers(self, batch=None):
+    def equischizomers(cls, batch=None):
         """RE.equischizomers([batch]) -> list.
 
         return a tuple of all the isoschizomers of RE.
@@ -542,14 +542,14 @@ class AbstractCut(RestrictionType):
         """
         if not batch:
             batch = AllEnzymes
-        r = [x for x in batch if not self != x]
-        i = r.index(self)
+        r = [x for x in batch if not cls != x]
+        i = r.index(cls)
         del r[i]
         r.sort()
         return r
 
     @classmethod
-    def neoschizomers(self, batch=None):
+    def neoschizomers(cls, batch=None):
         """RE.neoschizomers([batch]) -> list.
 
         return a tuple of all the neoschizomers of RE.
@@ -558,11 +558,11 @@ class AbstractCut(RestrictionType):
         neoschizomer <=> same site, different position of restriction."""
         if not batch:
             batch = AllEnzymes
-        r = sorted(x for x in batch if self >> x)
+        r = sorted(x for x in batch if cls >> x)
         return r
 
     @classmethod
-    def isoschizomers(self, batch=None):
+    def isoschizomers(cls, batch=None):
         """RE.isoschizomers([batch]) -> list.
 
         return a tuple of all the equischizomers and neoschizomers of RE.
@@ -570,18 +570,18 @@ class AbstractCut(RestrictionType):
         """
         if not batch:
             batch = AllEnzymes
-        r = [x for x in batch if (self >> x) or (not self != x)]
-        i = r.index(self)
+        r = [x for x in batch if (cls >> x) or (not cls != x)]
+        i = r.index(cls)
         del r[i]
         r.sort()
         return r
 
     @classmethod
-    def frequency(self):
+    def frequency(cls):
         """RE.frequency() -> int.
 
         frequency of the site."""
-        return self.freq
+        return cls.freq
 
 
 class NoCut(AbstractCut):
@@ -603,21 +603,21 @@ class NoCut(AbstractCut):
     """
 
     @classmethod
-    def cut_once(self):
+    def cut_once(cls):
         """RE.cut_once() -> bool.
 
         True if the enzyme cut the sequence one time on each strand."""
         return False
 
     @classmethod
-    def cut_twice(self):
+    def cut_twice(cls):
         """RE.cut_twice() -> bool.
 
         True if the enzyme cut the sequence twice on each strand."""
         return False
 
     @classmethod
-    def _modify(self, location):
+    def _modify(cls, location):
         """RE._modify(location) -> int.
 
         for internal use only.
@@ -645,7 +645,7 @@ class NoCut(AbstractCut):
         yield location
 
     @classmethod
-    def _rev_modify(self, location):
+    def _rev_modify(cls, location):
         """RE._rev_modify(location) -> generator of int.
 
         for internal use only.
@@ -656,7 +656,7 @@ class NoCut(AbstractCut):
         yield location
 
     @classmethod
-    def characteristic(self):
+    def characteristic(cls):
         """RE.characteristic() -> tuple.
 
         the tuple contains the attributes:
@@ -666,7 +666,7 @@ class NoCut(AbstractCut):
             scd5 -> second 3' cut (complementary strand) or None
             site -> recognition site.
         """
-        return None, None, None, None, self.site
+        return None, None, None, None, cls.site
 
 
 class OneCut(AbstractCut):
@@ -678,7 +678,7 @@ class OneCut(AbstractCut):
     """
 
     @classmethod
-    def cut_once(self):
+    def cut_once(cls):
         """RE.cut_once() -> bool.
 
         True if the enzyme cut the sequence one time on each strand.
@@ -686,7 +686,7 @@ class OneCut(AbstractCut):
         return True
 
     @classmethod
-    def cut_twice(self):
+    def cut_twice(cls):
         """RE.cut_twice() -> bool.
 
         True if the enzyme cut the sequence twice on each strand.
@@ -694,7 +694,7 @@ class OneCut(AbstractCut):
         return False
 
     @classmethod
-    def _modify(self, location):
+    def _modify(cls, location):
         """RE._modify(location) -> int.
 
         for internal use only.
@@ -719,10 +719,10 @@ class OneCut(AbstractCut):
         if the enzyme cut twice _modify will returns two integer corresponding
         to each cutting site.
         """
-        yield location + self.fst5
+        yield location + cls.fst5
 
     @classmethod
-    def _rev_modify(self, location):
+    def _rev_modify(cls, location):
         """RE._rev_modify(location) -> generator of int.
 
         for internal use only.
@@ -730,10 +730,10 @@ class OneCut(AbstractCut):
         as _modify for site situated on the antiparallel strand when the
         enzyme is not palindromic
         """
-        yield location - self.fst3
+        yield location - cls.fst3
 
     @classmethod
-    def characteristic(self):
+    def characteristic(cls):
         """RE.characteristic() -> tuple.
 
         the tuple contains the attributes:
@@ -743,7 +743,7 @@ class OneCut(AbstractCut):
             scd5 -> second 3' cut (complementary strand) or None
             site -> recognition site.
             """
-        return self.fst5, self.fst3, None, None, self.site
+        return cls.fst5, cls.fst3, None, None, cls.site
 
 
 class TwoCuts(AbstractCut):
@@ -754,14 +754,14 @@ class TwoCuts(AbstractCut):
     Internal use only. Not meant to be instantiated."""
 
     @classmethod
-    def cut_once(self):
+    def cut_once(cls):
         """RE.cut_once() -> bool.
 
         True if the enzyme cut the sequence one time on each strand."""
         return False
 
     @classmethod
-    def cut_twice(self):
+    def cut_twice(cls):
         """RE.cut_twice() -> bool.
 
         True if the enzyme cut the sequence twice on each strand.
@@ -769,7 +769,7 @@ class TwoCuts(AbstractCut):
         return True
 
     @classmethod
-    def _modify(self, location):
+    def _modify(cls, location):
         """RE._modify(location) -> int.
 
         for internal use only.
@@ -794,11 +794,11 @@ class TwoCuts(AbstractCut):
         if the enzyme cut twice _modify will returns two integer corresponding
         to each cutting site.
         """
-        yield location + self.fst5
-        yield location + self.scd5
+        yield location + cls.fst5
+        yield location + cls.scd5
 
     @classmethod
-    def _rev_modify(self, location):
+    def _rev_modify(cls, location):
         """RE._rev_modify(location) -> generator of int.
 
         for internal use only.
@@ -806,11 +806,11 @@ class TwoCuts(AbstractCut):
         as _modify for site situated on the antiparallel strand when the
         enzyme is not palindromic
         """
-        yield location - self.fst3
-        yield location - self.scd3
+        yield location - cls.fst3
+        yield location - cls.scd3
 
     @classmethod
-    def characteristic(self):
+    def characteristic(cls):
         """RE.characteristic() -> tuple.
 
         the tuple contains the attributes:
@@ -820,7 +820,7 @@ class TwoCuts(AbstractCut):
             scd5 -> second 3' cut (complementary strand) or None
             site -> recognition site.
         """
-        return self.fst5, self.fst3, self.scd5, self.scd3, self.site
+        return cls.fst5, cls.fst3, cls.scd5, cls.scd3, cls.site
 
 
 class Meth_Dep(AbstractCut):
@@ -830,7 +830,7 @@ class Meth_Dep(AbstractCut):
     """
 
     @classmethod
-    def is_methylable(self):
+    def is_methylable(cls):
         """RE.is_methylable() -> bool.
 
         True if the recognition site is a methylable.
@@ -845,7 +845,7 @@ class Meth_Undep(AbstractCut):
     """
 
     @classmethod
-    def is_methylable(self):
+    def is_methylable(cls):
         """RE.is_methylable() -> bool.
 
         True if the recognition site is a methylable.
@@ -865,21 +865,21 @@ class Palindromic(AbstractCut):
     Internal use only. Not meant to be instantiated."""
 
     @classmethod
-    def _search(self):
+    def _search(cls):
         """RE._search() -> list.
 
         for internal use only.
 
         implement the search method for palindromic and non palindromic enzyme.
         """
-        siteloc = self.dna.finditer(self.compsite, self.size)
-        self.results = [r for s, g in siteloc for r in self._modify(s)]
-        if self.results:
-            self._drop()
-        return self.results
+        siteloc = cls.dna.finditer(cls.compsite, cls.size)
+        cls.results = [r for s, g in siteloc for r in cls._modify(s)]
+        if cls.results:
+            cls._drop()
+        return cls.results
 
     @classmethod
-    def is_palindromic(self):
+    def is_palindromic(cls):
         """RE.is_palindromic() -> bool.
 
         True if the recognition site is a palindrom.
@@ -896,32 +896,32 @@ class NonPalindromic(AbstractCut):
     Internal use only. Not meant to be instantiated."""
 
     @classmethod
-    def _search(self):
+    def _search(cls):
         """RE._search() -> list.
 
         for internal use only.
 
         implement the search method for palindromic and non palindromic enzyme.
         """
-        iterator = self.dna.finditer(self.compsite, self.size)
-        self.results = []
-        modif = self._modify
-        revmodif = self._rev_modify
-        s = str(self)
-        self.on_minus = []
+        iterator = cls.dna.finditer(cls.compsite, cls.size)
+        cls.results = []
+        modif = cls._modify
+        revmodif = cls._rev_modify
+        s = str(cls)
+        cls.on_minus = []
         for start, group in iterator:
             if group(s):
-                self.results += [r for r in modif(start)]
+                cls.results += [r for r in modif(start)]
             else:
-                self.on_minus += [r for r in revmodif(start)]
-        self.results += self.on_minus
-        if self.results:
-            self.results.sort()
-            self._drop()
-        return self.results
+                cls.on_minus += [r for r in revmodif(start)]
+        cls.results += cls.on_minus
+        if cls.results:
+            cls.results.sort()
+            cls._drop()
+        return cls.results
 
     @classmethod
-    def is_palindromic(self):
+    def is_palindromic(cls):
         """RE.is_palindromic() -> bool.
 
         True if the recognition site is a palindrom.
@@ -939,7 +939,7 @@ class Unknown(AbstractCut):
     """
 
     @classmethod
-    def catalyse(self, dna, linear=True):
+    def catalyse(cls, dna, linear=True):
         """RE.catalyse(dna, linear=True) -> tuple of DNA.
         RE.catalyze(dna, linear=True) -> tuple of DNA.
 
@@ -952,11 +952,11 @@ class Unknown(AbstractCut):
         output will be modified accordingly.
         """
         raise NotImplementedError('%s restriction is unknown.'
-                                  % self.__name__)
+                                  % cls.__name__)
     catalyze = catalyse
 
     @classmethod
-    def is_blunt(self):
+    def is_blunt(cls):
         """RE.is_blunt() -> bool.
 
         True if the enzyme produces blunt end.
@@ -969,7 +969,7 @@ class Unknown(AbstractCut):
         return False
 
     @classmethod
-    def is_5overhang(self):
+    def is_5overhang(cls):
         """RE.is_5overhang() -> bool.
 
         True if the enzyme produces 5' overhang sticky end.
@@ -982,7 +982,7 @@ class Unknown(AbstractCut):
         return False
 
     @classmethod
-    def is_3overhang(self):
+    def is_3overhang(cls):
         """RE.is_3overhang() -> bool.
 
         True if the enzyme produces 3' overhang sticky end.
@@ -995,7 +995,7 @@ class Unknown(AbstractCut):
         return False
 
     @classmethod
-    def overhang(self):
+    def overhang(cls):
         """RE.overhang() -> str. type of overhang of the enzyme.,
 
         can be "3' overhang", "5' overhang", "blunt", "unknown"
@@ -1003,7 +1003,7 @@ class Unknown(AbstractCut):
         return 'unknown'
 
     @classmethod
-    def compatible_end(self):
+    def compatible_end(cls):
         """RE.compatible_end() -> list.
 
         list of all the enzymes that share compatible end with RE.
@@ -1011,7 +1011,7 @@ class Unknown(AbstractCut):
         return []
 
     @classmethod
-    def _mod1(self, other):
+    def _mod1(cls, other):
         """RE._mod1(other) -> bool.
 
         for internal use only
@@ -1032,7 +1032,7 @@ class Blunt(AbstractCut):
     """
 
     @classmethod
-    def catalyse(self, dna, linear=True):
+    def catalyse(cls, dna, linear=True):
         """RE.catalyse(dna, linear=True) -> tuple of DNA.
         RE.catalyze(dna, linear=True) -> tuple of DNA.
 
@@ -1044,8 +1044,8 @@ class Blunt(AbstractCut):
         if linear is False, the sequence is considered to be circular and the
         output will be modified accordingly.
         """
-        r = self.search(dna, linear)
-        d = self.dna
+        r = cls.search(dna, linear)
+        d = cls.dna
         if not r:
             return d[1:],
         fragments = []
@@ -1082,7 +1082,7 @@ class Blunt(AbstractCut):
     catalyze = catalyse
 
     @classmethod
-    def is_blunt(self):
+    def is_blunt(cls):
         """RE.is_blunt() -> bool.
 
         True if the enzyme produces blunt end.
@@ -1095,7 +1095,7 @@ class Blunt(AbstractCut):
         return True
 
     @classmethod
-    def is_5overhang(self):
+    def is_5overhang(cls):
         """RE.is_5overhang() -> bool.
 
         True if the enzyme produces 5' overhang sticky end.
@@ -1108,7 +1108,7 @@ class Blunt(AbstractCut):
         return False
 
     @classmethod
-    def is_3overhang(self):
+    def is_3overhang(cls):
         """RE.is_3overhang() -> bool.
 
         True if the enzyme produces 3' overhang sticky end.
@@ -1121,7 +1121,7 @@ class Blunt(AbstractCut):
         return False
 
     @classmethod
-    def overhang(self):
+    def overhang(cls):
         """RE.overhang() -> str. type of overhang of the enzyme.,
 
         can be "3' overhang", "5' overhang", "blunt", "unknown"
@@ -1129,7 +1129,7 @@ class Blunt(AbstractCut):
         return 'blunt'
 
     @classmethod
-    def compatible_end(self, batch=None):
+    def compatible_end(cls, batch=None):
         """RE.compatible_end() -> list.
 
         list of all the enzymes that share compatible end with RE.
@@ -1160,7 +1160,7 @@ class Ov5(AbstractCut):
     """
 
     @classmethod
-    def catalyse(self, dna, linear=True):
+    def catalyse(cls, dna, linear=True):
         """RE.catalyse(dna, linear=True) -> tuple of DNA.
         RE.catalyze(dna, linear=True) -> tuple of DNA.
 
@@ -1172,8 +1172,8 @@ class Ov5(AbstractCut):
         if linear is False, the sequence is considered to be circular and the
         output will be modified accordingly.
         """
-        r = self.search(dna, linear)
-        d = self.dna
+        r = cls.search(dna, linear)
+        d = cls.dna
         if not r:
             return d[1:],
         length = len(r) - 1
@@ -1210,7 +1210,7 @@ class Ov5(AbstractCut):
     catalyze = catalyse
 
     @classmethod
-    def is_blunt(self):
+    def is_blunt(cls):
         """RE.is_blunt() -> bool.
 
         True if the enzyme produces blunt end.
@@ -1223,7 +1223,7 @@ class Ov5(AbstractCut):
         return False
 
     @classmethod
-    def is_5overhang(self):
+    def is_5overhang(cls):
         """RE.is_5overhang() -> bool.
 
         True if the enzyme produces 5' overhang sticky end.
@@ -1236,7 +1236,7 @@ class Ov5(AbstractCut):
         return True
 
     @classmethod
-    def is_3overhang(self):
+    def is_3overhang(cls):
         """RE.is_3overhang() -> bool.
 
         True if the enzyme produces 3' overhang sticky end.
@@ -1249,7 +1249,7 @@ class Ov5(AbstractCut):
         return False
 
     @classmethod
-    def overhang(self):
+    def overhang(cls):
         """RE.overhang() -> str. type of overhang of the enzyme.,
 
         can be "3' overhang", "5' overhang", "blunt", "unknown"
@@ -1257,18 +1257,18 @@ class Ov5(AbstractCut):
         return "5' overhang"
 
     @classmethod
-    def compatible_end(self, batch=None):
+    def compatible_end(cls, batch=None):
         """RE.compatible_end() -> list.
 
         list of all the enzymes that share compatible end with RE."""
         if not batch:
             batch = AllEnzymes
         r = sorted(x for x in iter(AllEnzymes) if x.is_5overhang() and
-                   x % self)
+                   x % cls)
         return r
 
     @classmethod
-    def _mod1(self, other):
+    def _mod1(cls, other):
         """RE._mod1(other) -> bool.
 
         for internal use only
@@ -1276,7 +1276,7 @@ class Ov5(AbstractCut):
         test for the compatibility of restriction ending of RE and other.
         """
         if issubclass(other, Ov5):
-            return self._mod2(other)
+            return cls._mod2(other)
         else:
             return False
 
@@ -1291,7 +1291,7 @@ class Ov3(AbstractCut):
     """
 
     @classmethod
-    def catalyse(self, dna, linear=True):
+    def catalyse(cls, dna, linear=True):
         """RE.catalyse(dna, linear=True) -> tuple of DNA.
         RE.catalyze(dna, linear=True) -> tuple of DNA.
 
@@ -1303,8 +1303,8 @@ class Ov3(AbstractCut):
         if linear is False, the sequence is considered to be circular and the
         output will be modified accordingly.
         """
-        r = self.search(dna, linear)
-        d = self.dna
+        r = cls.search(dna, linear)
+        d = cls.dna
         if not r:
             return d[1:],
         fragments = []
@@ -1341,7 +1341,7 @@ class Ov3(AbstractCut):
     catalyze = catalyse
 
     @classmethod
-    def is_blunt(self):
+    def is_blunt(cls):
         """RE.is_blunt() -> bool.
 
         True if the enzyme produces blunt end.
@@ -1354,7 +1354,7 @@ class Ov3(AbstractCut):
         return False
 
     @classmethod
-    def is_5overhang(self):
+    def is_5overhang(cls):
         """RE.is_5overhang() -> bool.
 
         True if the enzyme produces 5' overhang sticky end.
@@ -1367,7 +1367,7 @@ class Ov3(AbstractCut):
         return False
 
     @classmethod
-    def is_3overhang(self):
+    def is_3overhang(cls):
         """RE.is_3overhang() -> bool.
 
         True if the enzyme produces 3' overhang sticky end.
@@ -1380,7 +1380,7 @@ class Ov3(AbstractCut):
         return True
 
     @classmethod
-    def overhang(self):
+    def overhang(cls):
         """RE.overhang() -> str. type of overhang of the enzyme.,
 
         can be "3' overhang", "5' overhang", "blunt", "unknown"
@@ -1388,7 +1388,7 @@ class Ov3(AbstractCut):
         return "3' overhang"
 
     @classmethod
-    def compatible_end(self, batch=None):
+    def compatible_end(cls, batch=None):
         """RE.compatible_end() -> list.
 
         list of all the enzymes that share compatible end with RE.
@@ -1396,11 +1396,11 @@ class Ov3(AbstractCut):
         if not batch:
             batch = AllEnzymes
         r = sorted(x for x in iter(AllEnzymes) if x.is_3overhang() and
-                   x % self)
+                   x % cls)
         return r
 
     @classmethod
-    def _mod1(self, other):
+    def _mod1(cls, other):
         """RE._mod1(other) -> bool.
 
         for internal use only
@@ -1411,7 +1411,7 @@ class Ov3(AbstractCut):
         #   called by RE._mod1(other) when the one of the enzyme is ambiguous
         #
         if issubclass(other, Ov3):
-            return self._mod2(other)
+            return cls._mod2(other)
         else:
             return False
 
@@ -1429,7 +1429,7 @@ class Defined(AbstractCut):
     Internal use only. Not meant to be instantiated."""
 
     @classmethod
-    def _drop(self):
+    def _drop(cls):
         """RE._drop() -> list.
 
         for internal use only.
@@ -1445,27 +1445,27 @@ class Defined(AbstractCut):
         #   For circular sequence, we modify the result rather than _drop it
         #   since the site is in the sequence.
         #
-        length = len(self.dna)
+        length = len(cls.dna)
         drop = itertools.dropwhile
         take = itertools.takewhile
-        if self.dna.is_linear():
-            self.results = [x for x in drop(lambda x:x < 1, self.results)]
-            self.results = [x for x in take(lambda x:x < length, self.results)]
+        if cls.dna.is_linear():
+            cls.results = [x for x in drop(lambda x:x < 1, cls.results)]
+            cls.results = [x for x in take(lambda x:x < length, cls.results)]
         else:
-            for index, location in enumerate(self.results):
+            for index, location in enumerate(cls.results):
                 if location < 1:
-                    self.results[index] += length
+                    cls.results[index] += length
                 else:
                     break
-            for index, location in enumerate(self.results[::-1]):
+            for index, location in enumerate(cls.results[::-1]):
                 if location > length:
-                    self.results[-(index + 1)] -= length
+                    cls.results[-(index + 1)] -= length
                 else:
                     break
         return
 
     @classmethod
-    def is_defined(self):
+    def is_defined(cls):
         """RE.is_defined() -> bool.
 
         True if the sequence recognised and cut is constant,
@@ -1479,7 +1479,7 @@ class Defined(AbstractCut):
         return True
 
     @classmethod
-    def is_ambiguous(self):
+    def is_ambiguous(cls):
         """RE.is_ambiguous() -> bool.
 
         True if the sequence recognised and cut is ambiguous,
@@ -1493,7 +1493,7 @@ class Defined(AbstractCut):
         return False
 
     @classmethod
-    def is_unknown(self):
+    def is_unknown(cls):
         """RE.is_unknown() -> bool.
 
         True if the sequence is unknown,
@@ -1506,7 +1506,7 @@ class Defined(AbstractCut):
         return False
 
     @classmethod
-    def elucidate(self):
+    def elucidate(cls):
         """RE.elucidate() -> str
 
         return a representation of the site with the cut on the (+) strand
@@ -1522,19 +1522,19 @@ class Defined(AbstractCut):
         '? GTATAC ?'
         >>>
         """
-        f5 = self.fst5
-        f3 = self.fst3
-        site = self.site
-        if self.cut_twice():
+        f5 = cls.fst5
+        f3 = cls.fst3
+        site = cls.site
+        if cls.cut_twice():
             re = 'cut twice, not yet implemented sorry.'
-        elif self.is_5overhang():
+        elif cls.is_5overhang():
             if f5 == f3 == 0:
-                re = 'N^' + self.site + '_N'
+                re = 'N^' + cls.site + '_N'
             elif f3 == 0:
                 re = site[:f5] + '^' + site[f5:] + '_N'
             else:
                 re = site[:f5] + '^' + site[f5:f3] + '_' + site[f3:]
-        elif self.is_blunt():
+        elif cls.is_blunt():
             re = site[:f5] + '^_' + site[f5:]
         else:
             if f5 == f3 == 0:
@@ -1544,7 +1544,7 @@ class Defined(AbstractCut):
         return re
 
     @classmethod
-    def _mod2(self, other):
+    def _mod2(cls, other):
         """RE._mod2(other) -> bool.
 
         for internal use only
@@ -1554,10 +1554,10 @@ class Defined(AbstractCut):
         #
         #   called by RE._mod1(other) when the one of the enzyme is ambiguous
         #
-        if other.ovhgseq == self.ovhgseq:
+        if other.ovhgseq == cls.ovhgseq:
             return True
         elif issubclass(other, Ambiguous):
-            return other._mod2(self)
+            return other._mod2(cls)
         else:
             return False
 
@@ -1576,7 +1576,7 @@ class Ambiguous(AbstractCut):
     """
 
     @classmethod
-    def _drop(self):
+    def _drop(cls):
         """RE._drop() -> list.
 
         for internal use only.
@@ -1584,28 +1584,28 @@ class Ambiguous(AbstractCut):
         drop the site that are situated outside the sequence in linear
         sequence. modify the index for site in circular sequences.
         """
-        length = len(self.dna)
+        length = len(cls.dna)
         drop = itertools.dropwhile
         take = itertools.takewhile
-        if self.dna.is_linear():
-            self.results = [x for x in drop(lambda x: x < 1, self.results)]
-            self.results = [x for x in take(lambda x: x <
-                                            length, self.results)]
+        if cls.dna.is_linear():
+            cls.results = [x for x in drop(lambda x: x < 1, cls.results)]
+            cls.results = [x for x in take(lambda x: x <
+                                            length, cls.results)]
         else:
-            for index, location in enumerate(self.results):
+            for index, location in enumerate(cls.results):
                 if location < 1:
-                    self.results[index] += length
+                    cls.results[index] += length
                 else:
                     break
-            for index, location in enumerate(self.results[::-1]):
+            for index, location in enumerate(cls.results[::-1]):
                 if location > length:
-                    self.results[-(index + 1)] -= length
+                    cls.results[-(index + 1)] -= length
                 else:
                     break
         return
 
     @classmethod
-    def is_defined(self):
+    def is_defined(cls):
         """RE.is_defined() -> bool.
 
         True if the sequence recognised and cut is constant,
@@ -1619,7 +1619,7 @@ class Ambiguous(AbstractCut):
         return False
 
     @classmethod
-    def is_ambiguous(self):
+    def is_ambiguous(cls):
         """RE.is_ambiguous() -> bool.
 
         True if the sequence recognised and cut is ambiguous,
@@ -1633,7 +1633,7 @@ class Ambiguous(AbstractCut):
         return True
 
     @classmethod
-    def is_unknown(self):
+    def is_unknown(cls):
         """RE.is_unknown() -> bool.
 
         True if the sequence is unknown,
@@ -1646,7 +1646,7 @@ class Ambiguous(AbstractCut):
         return False
 
     @classmethod
-    def _mod2(self, other):
+    def _mod2(cls, other):
         """RE._mod2(other) -> bool.
 
         for internal use only
@@ -1656,10 +1656,10 @@ class Ambiguous(AbstractCut):
         #
         #   called by RE._mod1(other) when the one of the enzyme is ambiguous
         #
-        if len(self.ovhgseq) != len(other.ovhgseq):
+        if len(cls.ovhgseq) != len(other.ovhgseq):
             return False
         else:
-            se = self.ovhgseq
+            se = cls.ovhgseq
             for base in se:
                 if base in 'ATCG':
                     pass
@@ -1674,7 +1674,7 @@ class Ambiguous(AbstractCut):
                 return False
 
     @classmethod
-    def elucidate(self):
+    def elucidate(cls):
         """RE.elucidate() -> str
 
         return a representation of the site with the cut on the (+) strand
@@ -1690,13 +1690,13 @@ class Ambiguous(AbstractCut):
         '? GTATAC ?'
         >>>
         """
-        f5 = self.fst5
-        f3 = self.fst3
-        length = len(self)
-        site = self.site
-        if self.cut_twice():
+        f5 = cls.fst5
+        f3 = cls.fst3
+        length = len(cls)
+        site = cls.site
+        if cls.cut_twice():
             re = 'cut twice, not yet implemented sorry.'
-        elif self.is_5overhang():
+        elif cls.is_5overhang():
             if f3 == f5 == 0:
                 re = 'N^' + site + '_N'
             elif 0 <= f5 <= length and 0 <= f3 + length <= length:
@@ -1712,14 +1712,14 @@ class Ambiguous(AbstractCut):
                                                          f3 - f5) * 'N' + '_N'
             else:
                 re = 'N^' + abs(f5) * 'N' + site + f3 * 'N' + '_N'
-        elif self.is_blunt():
+        elif cls.is_blunt():
             if f5 < 0:
                 re = 'N^_' + abs(f5) * 'N' + site
             elif f5 > length:
                 re = site + (f5 - length) * 'N' + '^_N'
             else:
                 raise ValueError('%s.easyrepr() : error f5=%i'
-                                 % (self.name, f5))
+                                 % (cls.name, f5))
         else:
             if f3 == 0:
                 if f5 == 0:
@@ -1753,7 +1753,7 @@ class NotDefined(AbstractCut):
     """
 
     @classmethod
-    def _drop(self):
+    def _drop(cls):
         """RE._drop() -> list.
 
         for internal use only.
@@ -1761,24 +1761,24 @@ class NotDefined(AbstractCut):
         drop the site that are situated outside the sequence in linear
         sequence. modify the index for site in circular sequences.
         """
-        if self.dna.is_linear():
+        if cls.dna.is_linear():
             return
         else:
-            length = len(self.dna)
-            for index, location in enumerate(self.results):
+            length = len(cls.dna)
+            for index, location in enumerate(cls.results):
                 if location < 1:
-                    self.results[index] += length
+                    cls.results[index] += length
                 else:
                     break
-            for index, location in enumerate(self.results[:-1]):
+            for index, location in enumerate(cls.results[:-1]):
                 if location > length:
-                    self.results[-(index + 1)] -= length
+                    cls.results[-(index + 1)] -= length
                 else:
                     break
         return
 
     @classmethod
-    def is_defined(self):
+    def is_defined(cls):
         """RE.is_defined() -> bool.
 
         True if the sequence recognised and cut is constant,
@@ -1792,7 +1792,7 @@ class NotDefined(AbstractCut):
         return False
 
     @classmethod
-    def is_ambiguous(self):
+    def is_ambiguous(cls):
         """RE.is_ambiguous() -> bool.
 
         True if the sequence recognised and cut is ambiguous,
@@ -1806,7 +1806,7 @@ class NotDefined(AbstractCut):
         return False
 
     @classmethod
-    def is_unknown(self):
+    def is_unknown(cls):
         """RE.is_unknown() -> bool.
 
         True if the sequence is unknown,
@@ -1818,7 +1818,7 @@ class NotDefined(AbstractCut):
         return True
 
     @classmethod
-    def _mod2(self, other):
+    def _mod2(cls, other):
         """RE._mod2(other) -> bool.
 
         for internal use only
@@ -1833,10 +1833,10 @@ class NotDefined(AbstractCut):
         #
         # return False
         raise ValueError("%s.mod2(%s), %s : NotDefined. pas glop pas glop!"
-                         % (str(self), str(other), str(self)))
+                         % (str(cls), str(other), str(cls)))
 
     @classmethod
-    def elucidate(self):
+    def elucidate(cls):
         """RE.elucidate() -> str
 
         return a representation of the site with the cut on the (+) strand
@@ -1852,7 +1852,7 @@ class NotDefined(AbstractCut):
         '? GTATAC ?'
         >>>
         """
-        return '? %s ?' % self.site
+        return '? %s ?' % cls.site
 
 
 class Commercially_available(AbstractCut):
@@ -1867,22 +1867,22 @@ class Commercially_available(AbstractCut):
     """
 
     @classmethod
-    def suppliers(self):
+    def suppliers(cls):
         """RE.suppliers() -> print the suppliers of RE."""
-        for s in self.suppl:
+        for s in cls.suppl:
             print(suppliers_dict[s][0] + ',')
         return
 
     @classmethod
-    def supplier_list(self):
+    def supplier_list(cls):
         """RE.supplier_list() -> list.
 
         list of the supplier names for RE.
         """
-        return [v[0] for k, v in suppliers_dict.items() if k in self.suppl]
+        return [v[0] for k, v in suppliers_dict.items() if k in cls.suppl]
 
     @classmethod
-    def buffers(self, supplier):
+    def buffers(cls, supplier):
         """RE.buffers(supplier) -> string.
 
         not implemented yet.
@@ -1890,7 +1890,7 @@ class Commercially_available(AbstractCut):
         return
 
     @classmethod
-    def is_comm(self):
+    def is_comm(cls):
         """RE.iscomm() -> bool.
 
         True if RE has suppliers.
@@ -1911,7 +1911,7 @@ class Not_available(AbstractCut):
         return None
 
     @classmethod
-    def supplier_list(self):
+    def supplier_list(cls):
         """RE.supplier_list() -> list.
 
         list of the supplier names for RE.
@@ -1919,7 +1919,7 @@ class Not_available(AbstractCut):
         return []
 
     @classmethod
-    def buffers(self, supplier):
+    def buffers(cls, supplier):
         """RE.buffers(supplier) -> string.
 
         not implemented yet.
@@ -1927,7 +1927,7 @@ class Not_available(AbstractCut):
         raise TypeError("Enzyme not commercially available.")
 
     @classmethod
-    def is_comm(self):
+    def is_comm(cls):
         """RE.iscomm() -> bool.
 
         True if RE has suppliers.
@@ -2129,7 +2129,7 @@ class RestrictionBatch(set):
         return [str(e) for e in self]
 
     @classmethod
-    def suppl_codes(self):
+    def suppl_codes(cls):
         """B.suppl_codes() -> dict
 
         letter code for the suppliers
@@ -2138,9 +2138,9 @@ class RestrictionBatch(set):
         return supply
 
     @classmethod
-    def show_codes(self):
+    def show_codes(cls):
         """B.show_codes() -> letter codes for the suppliers"""
-        supply = [' = '.join(i) for i in self.suppl_codes().items()]
+        supply = [' = '.join(i) for i in cls.suppl_codes().items()]
         print('\n'.join(supply))
         return
 
diff --git a/Bio/Restriction/Restriction_Dictionary.py b/Bio/Restriction/Restriction_Dictionary.py
index 8f06e1c..6c5cb82 100644
--- a/Bio/Restriction/Restriction_Dictionary.py
+++ b/Bio/Restriction/Restriction_Dictionary.py
@@ -18,6 +18,8 @@
 # Used REBASE emboss files version 605 (2016).
 
 rest_dict = {}
+
+
 def _temp():
     return {
         'compsite': '(?P<AanI>TTATAA)',
@@ -40,6 +42,7 @@ def _temp():
     }
 rest_dict['AanI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AarI>CACCTGC)|(?P<AarI_as>GCAGGTG)',
@@ -62,6 +65,7 @@ def _temp():
     }
 rest_dict['AarI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AasI>GAC......GTC)',
@@ -84,6 +88,7 @@ def _temp():
     }
 rest_dict['AasI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AatII>GACGTC)',
@@ -106,6 +111,7 @@ def _temp():
     }
 rest_dict['AatII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Aba6411II>C[AG][AG]TAAG)|(?P<Aba6411II_as>CTTA[CT][CT]G)',
@@ -128,6 +134,7 @@ def _temp():
     }
 rest_dict['Aba6411II'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AbaCIII>CTATCA[ACG])|(?P<AbaCIII_as>[CGT]TGATAG)',
@@ -150,6 +157,7 @@ def _temp():
     }
 rest_dict['AbaCIII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AbaSI>C)|(?P<AbaSI_as>G)',
@@ -172,6 +180,7 @@ def _temp():
     }
 rest_dict['AbaSI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AbaUMB2I>[CT]CCG[CG][CG])|(?P<AbaUMB2I_as>[CG][CG]CGG[AG])',
@@ -194,6 +203,7 @@ def _temp():
     }
 rest_dict['AbaUMB2I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AbsI>CCTCGAGG)',
@@ -216,6 +226,7 @@ def _temp():
     }
 rest_dict['AbsI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Acc16I>TGCGCA)',
@@ -238,6 +249,7 @@ def _temp():
     }
 rest_dict['Acc16I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Acc36I>ACCTGC)|(?P<Acc36I_as>GCAGGT)',
@@ -260,6 +272,7 @@ def _temp():
     }
 rest_dict['Acc36I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Acc65I>GGTACC)',
@@ -282,6 +295,7 @@ def _temp():
     }
 rest_dict['Acc65I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AccB1I>GG[CT][AG]CC)',
@@ -304,6 +318,7 @@ def _temp():
     }
 rest_dict['AccB1I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AccB7I>CCA.....TGG)',
@@ -326,6 +341,7 @@ def _temp():
     }
 rest_dict['AccB7I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AccBSI>CCGCTC)|(?P<AccBSI_as>GAGCGG)',
@@ -348,6 +364,7 @@ def _temp():
     }
 rest_dict['AccBSI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AccI>GT[AC][GT]AC)',
@@ -370,6 +387,7 @@ def _temp():
     }
 rest_dict['AccI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AccII>CGCG)',
@@ -392,6 +410,7 @@ def _temp():
     }
 rest_dict['AccII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AccIII>TCCGGA)',
@@ -414,6 +433,7 @@ def _temp():
     }
 rest_dict['AccIII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AceIII>CAGCTC)|(?P<AceIII_as>GAGCTG)',
@@ -436,6 +456,7 @@ def _temp():
     }
 rest_dict['AceIII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AchA6III>AGCCAG)|(?P<AchA6III_as>CTGGCT)',
@@ -458,6 +479,7 @@ def _temp():
     }
 rest_dict['AchA6III'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AciI>CCGC)|(?P<AciI_as>GCGG)',
@@ -480,6 +502,7 @@ def _temp():
     }
 rest_dict['AciI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AclI>AACGTT)',
@@ -502,6 +525,7 @@ def _temp():
     }
 rest_dict['AclI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AclWI>GGATC)|(?P<AclWI_as>GATCC)',
@@ -524,6 +548,7 @@ def _temp():
     }
 rest_dict['AclWI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Aco12261II>CC[AG]GAG)|(?P<Aco12261II_as>CTC[CT]GG)',
@@ -546,6 +571,7 @@ def _temp():
     }
 rest_dict['Aco12261II'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AcoI>[CT]GGCC[AG])',
@@ -568,6 +594,7 @@ def _temp():
     }
 rest_dict['AcoI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AcsI>[AG]AATT[CT])',
@@ -590,6 +617,7 @@ def _temp():
     }
 rest_dict['AcsI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AcuI>CTGAAG)|(?P<AcuI_as>CTTCAG)',
@@ -612,6 +640,7 @@ def _temp():
     }
 rest_dict['AcuI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AcvI>CACGTG)',
@@ -634,6 +663,7 @@ def _temp():
     }
 rest_dict['AcvI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AcyI>G[AG]CG[CT]C)',
@@ -656,6 +686,7 @@ def _temp():
     }
 rest_dict['AcyI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AdeI>CAC...GTG)',
@@ -678,6 +709,7 @@ def _temp():
     }
 rest_dict['AdeI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AfaI>GTAC)',
@@ -700,6 +732,7 @@ def _temp():
     }
 rest_dict['AfaI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AfeI>AGCGCT)',
@@ -722,6 +755,7 @@ def _temp():
     }
 rest_dict['AfeI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AfiI>CC.......GG)',
@@ -744,6 +778,7 @@ def _temp():
     }
 rest_dict['AfiI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AflII>CTTAAG)',
@@ -766,6 +801,7 @@ def _temp():
     }
 rest_dict['AflII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AflIII>AC[AG][CT]GT)',
@@ -788,6 +824,7 @@ def _temp():
     }
 rest_dict['AflIII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AgeI>ACCGGT)',
@@ -810,6 +847,7 @@ def _temp():
     }
 rest_dict['AgeI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AgsI>TT[CG]AA)',
@@ -832,6 +870,7 @@ def _temp():
     }
 rest_dict['AgsI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AhaIII>TTTAAA)',
@@ -854,6 +893,7 @@ def _temp():
     }
 rest_dict['AhaIII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AhdI>GAC.....GTC)',
@@ -876,6 +916,7 @@ def _temp():
     }
 rest_dict['AhdI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AhlI>ACTAGT)',
@@ -898,6 +939,7 @@ def _temp():
     }
 rest_dict['AhlI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AhyYL17I>[CT]AA[AC]GAG)|(?P<AhyYL17I_as>CTC[GT]TT[AG])',
@@ -920,6 +962,7 @@ def _temp():
     }
 rest_dict['AhyYL17I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AjiI>CACGTC)|(?P<AjiI_as>GACGTG)',
@@ -942,6 +985,7 @@ def _temp():
     }
 rest_dict['AjiI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AjnI>CC[AT]GG)',
@@ -964,6 +1008,7 @@ def _temp():
     }
 rest_dict['AjnI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AjuI>GAA.......TTGG)|(?P<AjuI_as>CCAA.......TTC)',
@@ -986,6 +1031,7 @@ def _temp():
     }
 rest_dict['AjuI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AleI>CAC....GTG)',
@@ -1008,6 +1054,7 @@ def _temp():
     }
 rest_dict['AleI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AlfI>GCA......TGC)',
@@ -1030,6 +1077,7 @@ def _temp():
     }
 rest_dict['AlfI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AloI>GAAC......TCC)|(?P<AloI_as>GGA......GTTC)',
@@ -1052,6 +1100,7 @@ def _temp():
     }
 rest_dict['AloI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AluBI>AGCT)',
@@ -1074,6 +1123,7 @@ def _temp():
     }
 rest_dict['AluBI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AluI>AGCT)',
@@ -1096,6 +1146,7 @@ def _temp():
     }
 rest_dict['AluI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Alw21I>G[AT]GC[AT]C)',
@@ -1118,6 +1169,7 @@ def _temp():
     }
 rest_dict['Alw21I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Alw26I>GTCTC)|(?P<Alw26I_as>GAGAC)',
@@ -1140,6 +1192,7 @@ def _temp():
     }
 rest_dict['Alw26I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Alw44I>GTGCAC)',
@@ -1162,6 +1215,7 @@ def _temp():
     }
 rest_dict['Alw44I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AlwFI>GAAA[CT].....[AG]TG)|(?P<AlwFI_as>CA[CT].....[AG]TTTC)',
@@ -1184,6 +1238,7 @@ def _temp():
     }
 rest_dict['AlwFI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AlwI>GGATC)|(?P<AlwI_as>GATCC)',
@@ -1206,6 +1261,7 @@ def _temp():
     }
 rest_dict['AlwI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AlwNI>CAG...CTG)',
@@ -1228,6 +1284,7 @@ def _temp():
     }
 rest_dict['AlwNI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Ama87I>C[CT]CG[AG]G)',
@@ -1250,6 +1307,7 @@ def _temp():
     }
 rest_dict['Ama87I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Aor13HI>TCCGGA)',
@@ -1272,6 +1330,7 @@ def _temp():
     }
 rest_dict['Aor13HI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Aor51HI>AGCGCT)',
@@ -1294,6 +1353,7 @@ def _temp():
     }
 rest_dict['Aor51HI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AoxI>GGCC)',
@@ -1316,6 +1376,7 @@ def _temp():
     }
 rest_dict['AoxI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<ApaBI>GCA.....TGC)',
@@ -1338,6 +1399,7 @@ def _temp():
     }
 rest_dict['ApaBI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<ApaI>GGGCCC)',
@@ -1360,6 +1422,7 @@ def _temp():
     }
 rest_dict['ApaI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<ApaLI>GTGCAC)',
@@ -1382,6 +1445,7 @@ def _temp():
     }
 rest_dict['ApaLI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<ApeKI>GC[AT]GC)',
@@ -1404,6 +1468,7 @@ def _temp():
     }
 rest_dict['ApeKI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<ApoI>[AG]AATT[CT])',
@@ -1426,6 +1491,7 @@ def _temp():
     }
 rest_dict['ApoI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<ApyPI>ATCGAC)|(?P<ApyPI_as>GTCGAT)',
@@ -1448,6 +1514,7 @@ def _temp():
     }
 rest_dict['ApyPI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AquII>GCCG.AC)|(?P<AquII_as>GT.CGGC)',
@@ -1470,6 +1537,7 @@ def _temp():
     }
 rest_dict['AquII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AquIII>GAGGAG)|(?P<AquIII_as>CTCCTC)',
@@ -1492,6 +1560,7 @@ def _temp():
     }
 rest_dict['AquIII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AquIV>G[AG]GGAAG)|(?P<AquIV_as>CTTCC[CT]C)',
@@ -1514,6 +1583,7 @@ def _temp():
     }
 rest_dict['AquIV'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<ArsI>GAC......TT[CT]G)|(?P<ArsI_as>C[AG]AA......GTC)',
@@ -1536,6 +1606,7 @@ def _temp():
     }
 rest_dict['ArsI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AscI>GGCGCGCC)',
@@ -1558,6 +1629,7 @@ def _temp():
     }
 rest_dict['AscI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AseI>ATTAAT)',
@@ -1580,6 +1652,7 @@ def _temp():
     }
 rest_dict['AseI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Asi256I>GATC)',
@@ -1602,6 +1675,7 @@ def _temp():
     }
 rest_dict['Asi256I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AsiGI>ACCGGT)',
@@ -1624,6 +1698,7 @@ def _temp():
     }
 rest_dict['AsiGI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AsiSI>GCGATCGC)',
@@ -1646,6 +1721,7 @@ def _temp():
     }
 rest_dict['AsiSI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Asp700I>GAA....TTC)',
@@ -1668,6 +1744,7 @@ def _temp():
     }
 rest_dict['Asp700I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Asp718I>GGTACC)',
@@ -1690,6 +1767,7 @@ def _temp():
     }
 rest_dict['Asp718I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AspA2I>CCTAGG)',
@@ -1712,6 +1790,7 @@ def _temp():
     }
 rest_dict['AspA2I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AspBHI>[CT][CG]C.[CG])|(?P<AspBHI_as>[CG].G[CG][AG])',
@@ -1734,6 +1813,7 @@ def _temp():
     }
 rest_dict['AspBHI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AspDUT2V>G.GCAAC)|(?P<AspDUT2V_as>GTTGC.C)',
@@ -1756,6 +1836,7 @@ def _temp():
     }
 rest_dict['AspDUT2V'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AspJHL3II>CGCCCAG)|(?P<AspJHL3II_as>CTGGGCG)',
@@ -1778,6 +1859,7 @@ def _temp():
     }
 rest_dict['AspJHL3II'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AspLEI>GCGC)',
@@ -1800,6 +1882,7 @@ def _temp():
     }
 rest_dict['AspLEI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AspS9I>GG.CC)',
@@ -1822,6 +1905,7 @@ def _temp():
     }
 rest_dict['AspS9I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Asu14238IV>CGT[AG]AC)|(?P<Asu14238IV_as>GT[CT]ACG)',
@@ -1844,6 +1928,7 @@ def _temp():
     }
 rest_dict['Asu14238IV'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AsuC2I>CC[CG]GG)',
@@ -1866,6 +1951,7 @@ def _temp():
     }
 rest_dict['AsuC2I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AsuHPI>GGTGA)|(?P<AsuHPI_as>TCACC)',
@@ -1888,6 +1974,7 @@ def _temp():
     }
 rest_dict['AsuHPI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AsuI>GG.CC)',
@@ -1910,6 +1997,7 @@ def _temp():
     }
 rest_dict['AsuI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AsuII>TTCGAA)',
@@ -1932,6 +2020,7 @@ def _temp():
     }
 rest_dict['AsuII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AsuNHI>GCTAGC)',
@@ -1954,6 +2043,7 @@ def _temp():
     }
 rest_dict['AsuNHI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AvaI>C[CT]CG[AG]G)',
@@ -1976,6 +2066,7 @@ def _temp():
     }
 rest_dict['AvaI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AvaII>GG[AT]CC)',
@@ -1998,6 +2089,7 @@ def _temp():
     }
 rest_dict['AvaII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AvaIII>ATGCAT)',
@@ -2020,6 +2112,7 @@ def _temp():
     }
 rest_dict['AvaIII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AvrII>CCTAGG)',
@@ -2042,6 +2135,7 @@ def _temp():
     }
 rest_dict['AvrII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Awo1030IV>GCC[AG]AG)|(?P<Awo1030IV_as>CT[CT]GGC)',
@@ -2064,6 +2158,7 @@ def _temp():
     }
 rest_dict['Awo1030IV'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<AxyI>CCT.AGG)',
@@ -2086,6 +2181,7 @@ def _temp():
     }
 rest_dict['AxyI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BaeGI>G[GT]GC[AC]C)',
@@ -2108,6 +2204,7 @@ def _temp():
     }
 rest_dict['BaeGI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BaeI>AC....GTA[CT]C)|(?P<BaeI_as>G[AG]TAC....GT)',
@@ -2130,6 +2227,7 @@ def _temp():
     }
 rest_dict['BaeI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bag18758I>CCCGAG)|(?P<Bag18758I_as>CTCGGG)',
@@ -2152,6 +2250,7 @@ def _temp():
     }
 rest_dict['Bag18758I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BalI>TGGCCA)',
@@ -2174,6 +2273,7 @@ def _temp():
     }
 rest_dict['BalI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BamHI>GGATCC)',
@@ -2196,6 +2296,7 @@ def _temp():
     }
 rest_dict['BamHI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BanI>GG[CT][AG]CC)',
@@ -2218,6 +2319,7 @@ def _temp():
     }
 rest_dict['BanI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BanII>G[AG]GC[CT]C)',
@@ -2240,6 +2342,7 @@ def _temp():
     }
 rest_dict['BanII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BanLI>[AG]TCAGG)|(?P<BanLI_as>CCTGA[CT])',
@@ -2262,6 +2365,7 @@ def _temp():
     }
 rest_dict['BanLI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BarI>GAAG......TAC)|(?P<BarI_as>GTA......CTTC)',
@@ -2284,6 +2388,7 @@ def _temp():
     }
 rest_dict['BarI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BauI>CACGAG)|(?P<BauI_as>CTCGTG)',
@@ -2306,6 +2411,7 @@ def _temp():
     }
 rest_dict['BauI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bbr7I>GAAGAC)|(?P<Bbr7I_as>GTCTTC)',
@@ -2328,6 +2434,7 @@ def _temp():
     }
 rest_dict['Bbr7I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BbrPI>CACGTG)',
@@ -2350,6 +2457,7 @@ def _temp():
     }
 rest_dict['BbrPI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BbsI>GAAGAC)|(?P<BbsI_as>GTCTTC)',
@@ -2372,6 +2480,7 @@ def _temp():
     }
 rest_dict['BbsI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bbv12I>G[AT]GC[AT]C)',
@@ -2394,6 +2503,7 @@ def _temp():
     }
 rest_dict['Bbv12I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BbvCI>CCTCAGC)|(?P<BbvCI_as>GCTGAGG)',
@@ -2416,6 +2526,7 @@ def _temp():
     }
 rest_dict['BbvCI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BbvI>GCAGC)|(?P<BbvI_as>GCTGC)',
@@ -2438,6 +2549,7 @@ def _temp():
     }
 rest_dict['BbvI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BbvII>GAAGAC)|(?P<BbvII_as>GTCTTC)',
@@ -2460,6 +2572,7 @@ def _temp():
     }
 rest_dict['BbvII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BccI>CCATC)|(?P<BccI_as>GATGG)',
@@ -2482,6 +2595,7 @@ def _temp():
     }
 rest_dict['BccI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bce3081I>TAGGAG)|(?P<Bce3081I_as>CTCCTA)',
@@ -2504,6 +2618,7 @@ def _temp():
     }
 rest_dict['Bce3081I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bce83I>CTTGAG)|(?P<Bce83I_as>CTCAAG)',
@@ -2526,6 +2641,7 @@ def _temp():
     }
 rest_dict['Bce83I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BceAI>ACGGC)|(?P<BceAI_as>GCCGT)',
@@ -2548,6 +2664,7 @@ def _temp():
     }
 rest_dict['BceAI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BceSIV>GCAGC)|(?P<BceSIV_as>GCTGC)',
@@ -2570,6 +2687,7 @@ def _temp():
     }
 rest_dict['BceSIV'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BcefI>ACGGC)|(?P<BcefI_as>GCCGT)',
@@ -2592,6 +2710,7 @@ def _temp():
     }
 rest_dict['BcefI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BcgI>CGA......TGC)|(?P<BcgI_as>GCA......TCG)',
@@ -2614,6 +2733,7 @@ def _temp():
     }
 rest_dict['BcgI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BciT130I>CC[AT]GG)',
@@ -2636,6 +2756,7 @@ def _temp():
     }
 rest_dict['BciT130I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BciVI>GTATCC)|(?P<BciVI_as>GGATAC)',
@@ -2658,6 +2779,7 @@ def _temp():
     }
 rest_dict['BciVI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BclI>TGATCA)',
@@ -2680,6 +2802,7 @@ def _temp():
     }
 rest_dict['BclI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BcnI>CC[CG]GG)',
@@ -2702,6 +2825,7 @@ def _temp():
     }
 rest_dict['BcnI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BcoDI>GTCTC)|(?P<BcoDI_as>GAGAC)',
@@ -2724,6 +2848,7 @@ def _temp():
     }
 rest_dict['BcoDI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BcuI>ACTAGT)',
@@ -2746,6 +2871,7 @@ def _temp():
     }
 rest_dict['BcuI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BdaI>TGA......TCA)',
@@ -2768,6 +2894,7 @@ def _temp():
     }
 rest_dict['BdaI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BetI>[AT]CCGG[AT])',
@@ -2790,6 +2917,7 @@ def _temp():
     }
 rest_dict['BetI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BfaI>CTAG)',
@@ -2812,6 +2940,7 @@ def _temp():
     }
 rest_dict['BfaI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BfaSII>GA.GGAG)|(?P<BfaSII_as>CTCC.TC)',
@@ -2834,6 +2963,7 @@ def _temp():
     }
 rest_dict['BfaSII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BfiI>ACTGGG)|(?P<BfiI_as>CCCAGT)',
@@ -2856,6 +2986,7 @@ def _temp():
     }
 rest_dict['BfiI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BfmI>CT[AG][CT]AG)',
@@ -2878,6 +3009,7 @@ def _temp():
     }
 rest_dict['BfmI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BfoI>[AG]GCGC[CT])',
@@ -2900,6 +3032,7 @@ def _temp():
     }
 rest_dict['BfoI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BfrI>CTTAAG)',
@@ -2922,6 +3055,7 @@ def _temp():
     }
 rest_dict['BfrI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BfuAI>ACCTGC)|(?P<BfuAI_as>GCAGGT)',
@@ -2944,6 +3078,7 @@ def _temp():
     }
 rest_dict['BfuAI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BfuCI>GATC)',
@@ -2966,6 +3101,7 @@ def _temp():
     }
 rest_dict['BfuCI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BfuI>GTATCC)|(?P<BfuI_as>GGATAC)',
@@ -2988,6 +3124,7 @@ def _temp():
     }
 rest_dict['BfuI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BglI>GCC.....GGC)',
@@ -3010,6 +3147,7 @@ def _temp():
     }
 rest_dict['BglI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BglII>AGATCT)',
@@ -3032,6 +3170,7 @@ def _temp():
     }
 rest_dict['BglII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BinI>GGATC)|(?P<BinI_as>GATCC)',
@@ -3054,6 +3193,7 @@ def _temp():
     }
 rest_dict['BinI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BisI>GC.GC)',
@@ -3076,6 +3216,7 @@ def _temp():
     }
 rest_dict['BisI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BlnI>CCTAGG)',
@@ -3098,6 +3239,7 @@ def _temp():
     }
 rest_dict['BlnI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BloAII>GAGGAC)|(?P<BloAII_as>GTCCTC)',
@@ -3120,6 +3262,7 @@ def _temp():
     }
 rest_dict['BloAII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BlpI>GCT.AGC)',
@@ -3142,6 +3285,7 @@ def _temp():
     }
 rest_dict['BlpI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BlsI>GC.GC)',
@@ -3164,6 +3308,7 @@ def _temp():
     }
 rest_dict['BlsI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BmcAI>AGTACT)',
@@ -3186,6 +3331,7 @@ def _temp():
     }
 rest_dict['BmcAI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bme1390I>CC.GG)',
@@ -3208,6 +3354,7 @@ def _temp():
     }
 rest_dict['Bme1390I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bme18I>GG[AT]CC)',
@@ -3230,6 +3377,7 @@ def _temp():
     }
 rest_dict['Bme18I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BmeDI>C)|(?P<BmeDI_as>G)',
@@ -3252,6 +3400,7 @@ def _temp():
     }
 rest_dict['BmeDI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BmeRI>GAC.....GTC)',
@@ -3274,6 +3423,7 @@ def _temp():
     }
 rest_dict['BmeRI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BmeT110I>C[CT]CG[AG]G)',
@@ -3296,6 +3446,7 @@ def _temp():
     }
 rest_dict['BmeT110I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BmgBI>CACGTC)|(?P<BmgBI_as>GACGTG)',
@@ -3318,6 +3469,7 @@ def _temp():
     }
 rest_dict['BmgBI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BmgI>G[GT]GCCC)|(?P<BmgI_as>GGGC[AC]C)',
@@ -3340,6 +3492,7 @@ def _temp():
     }
 rest_dict['BmgI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BmgT120I>GG.CC)',
@@ -3362,6 +3515,7 @@ def _temp():
     }
 rest_dict['BmgT120I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BmiI>GG..CC)',
@@ -3384,6 +3538,7 @@ def _temp():
     }
 rest_dict['BmiI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BmrFI>CC.GG)',
@@ -3406,6 +3561,7 @@ def _temp():
     }
 rest_dict['BmrFI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BmrI>ACTGGG)|(?P<BmrI_as>CCCAGT)',
@@ -3428,6 +3584,7 @@ def _temp():
     }
 rest_dict['BmrI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BmsI>GCATC)|(?P<BmsI_as>GATGC)',
@@ -3450,6 +3607,7 @@ def _temp():
     }
 rest_dict['BmsI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BmtI>GCTAGC)',
@@ -3472,6 +3630,7 @@ def _temp():
     }
 rest_dict['BmtI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BmuI>ACTGGG)|(?P<BmuI_as>CCCAGT)',
@@ -3494,6 +3653,7 @@ def _temp():
     }
 rest_dict['BmuI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BoxI>GAC....GTC)',
@@ -3516,6 +3676,7 @@ def _temp():
     }
 rest_dict['BoxI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BpiI>GAAGAC)|(?P<BpiI_as>GTCTTC)',
@@ -3538,6 +3699,7 @@ def _temp():
     }
 rest_dict['BpiI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BplI>GAG.....CTC)',
@@ -3560,6 +3722,7 @@ def _temp():
     }
 rest_dict['BplI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BpmI>CTGGAG)|(?P<BpmI_as>CTCCAG)',
@@ -3582,6 +3745,7 @@ def _temp():
     }
 rest_dict['BpmI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bpu10I>CCT.AGC)|(?P<Bpu10I_as>GCT.AGG)',
@@ -3604,6 +3768,7 @@ def _temp():
     }
 rest_dict['Bpu10I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bpu1102I>GCT.AGC)',
@@ -3626,6 +3791,7 @@ def _temp():
     }
 rest_dict['Bpu1102I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bpu14I>TTCGAA)',
@@ -3648,6 +3814,7 @@ def _temp():
     }
 rest_dict['Bpu14I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BpuEI>CTTGAG)|(?P<BpuEI_as>CTCAAG)',
@@ -3670,6 +3837,7 @@ def _temp():
     }
 rest_dict['BpuEI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BpuMI>CC[CG]GG)',
@@ -3692,6 +3860,7 @@ def _temp():
     }
 rest_dict['BpuMI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bsa29I>ATCGAT)',
@@ -3714,6 +3883,7 @@ def _temp():
     }
 rest_dict['Bsa29I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BsaAI>[CT]ACGT[AG])',
@@ -3736,6 +3906,7 @@ def _temp():
     }
 rest_dict['BsaAI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BsaBI>GAT....ATC)',
@@ -3758,6 +3929,7 @@ def _temp():
     }
 rest_dict['BsaBI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BsaHI>G[AG]CG[CT]C)',
@@ -3780,6 +3952,7 @@ def _temp():
     }
 rest_dict['BsaHI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BsaI>GGTCTC)|(?P<BsaI_as>GAGACC)',
@@ -3802,6 +3975,7 @@ def _temp():
     }
 rest_dict['BsaI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BsaJI>CC..GG)',
@@ -3824,6 +3998,7 @@ def _temp():
     }
 rest_dict['BsaJI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BsaWI>[AT]CCGG[AT])',
@@ -3846,6 +4021,7 @@ def _temp():
     }
 rest_dict['BsaWI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BsaXI>AC.....CTCC)|(?P<BsaXI_as>GGAG.....GT)',
@@ -3868,6 +4044,7 @@ def _temp():
     }
 rest_dict['BsaXI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BsbI>CAACAC)|(?P<BsbI_as>GTGTTG)',
@@ -3890,6 +4067,7 @@ def _temp():
     }
 rest_dict['BsbI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bsc4I>CC.......GG)',
@@ -3912,6 +4090,7 @@ def _temp():
     }
 rest_dict['Bsc4I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BscAI>GCATC)|(?P<BscAI_as>GATGC)',
@@ -3934,6 +4113,7 @@ def _temp():
     }
 rest_dict['BscAI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BscGI>CCCGT)|(?P<BscGI_as>ACGGG)',
@@ -3956,6 +4136,7 @@ def _temp():
     }
 rest_dict['BscGI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bse118I>[AG]CCGG[CT])',
@@ -3978,6 +4159,7 @@ def _temp():
     }
 rest_dict['Bse118I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bse1I>ACTGG)|(?P<Bse1I_as>CCAGT)',
@@ -4000,6 +4182,7 @@ def _temp():
     }
 rest_dict['Bse1I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bse21I>CCT.AGG)',
@@ -4022,6 +4205,7 @@ def _temp():
     }
 rest_dict['Bse21I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bse3DI>GCAATG)|(?P<Bse3DI_as>CATTGC)',
@@ -4044,6 +4228,7 @@ def _temp():
     }
 rest_dict['Bse3DI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bse8I>GAT....ATC)',
@@ -4066,6 +4251,7 @@ def _temp():
     }
 rest_dict['Bse8I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BseAI>TCCGGA)',
@@ -4088,6 +4274,7 @@ def _temp():
     }
 rest_dict['BseAI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BseBI>CC[AT]GG)',
@@ -4110,6 +4297,7 @@ def _temp():
     }
 rest_dict['BseBI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BseCI>ATCGAT)',
@@ -4132,6 +4320,7 @@ def _temp():
     }
 rest_dict['BseCI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BseDI>CC..GG)',
@@ -4154,6 +4343,7 @@ def _temp():
     }
 rest_dict['BseDI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BseGI>GGATG)|(?P<BseGI_as>CATCC)',
@@ -4176,6 +4366,7 @@ def _temp():
     }
 rest_dict['BseGI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BseJI>GAT....ATC)',
@@ -4198,6 +4389,7 @@ def _temp():
     }
 rest_dict['BseJI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BseLI>CC.......GG)',
@@ -4220,6 +4412,7 @@ def _temp():
     }
 rest_dict['BseLI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BseMI>GCAATG)|(?P<BseMI_as>CATTGC)',
@@ -4242,6 +4435,7 @@ def _temp():
     }
 rest_dict['BseMI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BseMII>CTCAG)|(?P<BseMII_as>CTGAG)',
@@ -4264,6 +4458,7 @@ def _temp():
     }
 rest_dict['BseMII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BseNI>ACTGG)|(?P<BseNI_as>CCAGT)',
@@ -4286,6 +4481,7 @@ def _temp():
     }
 rest_dict['BseNI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BsePI>GCGCGC)',
@@ -4308,6 +4504,7 @@ def _temp():
     }
 rest_dict['BsePI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BseRI>GAGGAG)|(?P<BseRI_as>CTCCTC)',
@@ -4330,6 +4527,7 @@ def _temp():
     }
 rest_dict['BseRI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BseSI>G[GT]GC[AC]C)',
@@ -4352,6 +4550,7 @@ def _temp():
     }
 rest_dict['BseSI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BseX3I>CGGCCG)',
@@ -4374,6 +4573,7 @@ def _temp():
     }
 rest_dict['BseX3I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BseXI>GCAGC)|(?P<BseXI_as>GCTGC)',
@@ -4396,6 +4596,7 @@ def _temp():
     }
 rest_dict['BseXI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BseYI>CCCAGC)|(?P<BseYI_as>GCTGGG)',
@@ -4418,6 +4619,7 @@ def _temp():
     }
 rest_dict['BseYI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BsgI>GTGCAG)|(?P<BsgI_as>CTGCAC)',
@@ -4440,6 +4642,7 @@ def _temp():
     }
 rest_dict['BsgI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bsh1236I>CGCG)',
@@ -4462,6 +4665,7 @@ def _temp():
     }
 rest_dict['Bsh1236I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bsh1285I>CG[AG][CT]CG)',
@@ -4484,6 +4688,7 @@ def _temp():
     }
 rest_dict['Bsh1285I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BshFI>GGCC)',
@@ -4506,6 +4711,7 @@ def _temp():
     }
 rest_dict['BshFI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BshNI>GG[CT][AG]CC)',
@@ -4528,6 +4734,7 @@ def _temp():
     }
 rest_dict['BshNI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BshTI>ACCGGT)',
@@ -4550,6 +4757,7 @@ def _temp():
     }
 rest_dict['BshTI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BshVI>ATCGAT)',
@@ -4572,6 +4780,7 @@ def _temp():
     }
 rest_dict['BshVI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BsiEI>CG[AG][CT]CG)',
@@ -4594,6 +4803,7 @@ def _temp():
     }
 rest_dict['BsiEI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BsiHKAI>G[AT]GC[AT]C)',
@@ -4616,6 +4826,7 @@ def _temp():
     }
 rest_dict['BsiHKAI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BsiHKCI>C[CT]CG[AG]G)',
@@ -4638,6 +4849,7 @@ def _temp():
     }
 rest_dict['BsiHKCI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BsiI>CACGAG)|(?P<BsiI_as>CTCGTG)',
@@ -4660,6 +4872,7 @@ def _temp():
     }
 rest_dict['BsiI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BsiSI>CCGG)',
@@ -4682,6 +4895,7 @@ def _temp():
     }
 rest_dict['BsiSI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BsiWI>CGTACG)',
@@ -4704,6 +4918,7 @@ def _temp():
     }
 rest_dict['BsiWI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BsiYI>CC.......GG)',
@@ -4726,6 +4941,7 @@ def _temp():
     }
 rest_dict['BsiYI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BslFI>GGGAC)|(?P<BslFI_as>GTCCC)',
@@ -4748,6 +4964,7 @@ def _temp():
     }
 rest_dict['BslFI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BslI>CC.......GG)',
@@ -4770,6 +4987,7 @@ def _temp():
     }
 rest_dict['BslI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BsmAI>GTCTC)|(?P<BsmAI_as>GAGAC)',
@@ -4792,6 +5010,7 @@ def _temp():
     }
 rest_dict['BsmAI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BsmBI>CGTCTC)|(?P<BsmBI_as>GAGACG)',
@@ -4814,6 +5033,7 @@ def _temp():
     }
 rest_dict['BsmBI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BsmFI>GGGAC)|(?P<BsmFI_as>GTCCC)',
@@ -4836,6 +5056,7 @@ def _temp():
     }
 rest_dict['BsmFI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BsmI>GAATGC)|(?P<BsmI_as>GCATTC)',
@@ -4858,6 +5079,7 @@ def _temp():
     }
 rest_dict['BsmI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BsnI>GGCC)',
@@ -4880,6 +5102,7 @@ def _temp():
     }
 rest_dict['BsnI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bso31I>GGTCTC)|(?P<Bso31I_as>GAGACC)',
@@ -4902,6 +5125,7 @@ def _temp():
     }
 rest_dict['Bso31I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BsoBI>C[CT]CG[AG]G)',
@@ -4924,6 +5148,7 @@ def _temp():
     }
 rest_dict['BsoBI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bsp119I>TTCGAA)',
@@ -4946,6 +5171,7 @@ def _temp():
     }
 rest_dict['Bsp119I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bsp120I>GGGCCC)',
@@ -4968,6 +5194,7 @@ def _temp():
     }
 rest_dict['Bsp120I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bsp1286I>G[AGT]GC[ACT]C)',
@@ -4990,6 +5217,7 @@ def _temp():
     }
 rest_dict['Bsp1286I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bsp13I>TCCGGA)',
@@ -5012,6 +5240,7 @@ def _temp():
     }
 rest_dict['Bsp13I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bsp1407I>TGTACA)',
@@ -5034,6 +5263,7 @@ def _temp():
     }
 rest_dict['Bsp1407I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bsp143I>GATC)',
@@ -5056,6 +5286,7 @@ def _temp():
     }
 rest_dict['Bsp143I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bsp1720I>GCT.AGC)',
@@ -5078,6 +5309,7 @@ def _temp():
     }
 rest_dict['Bsp1720I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bsp19I>CCATGG)',
@@ -5100,6 +5332,7 @@ def _temp():
     }
 rest_dict['Bsp19I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bsp24I>GAC......TGG)|(?P<Bsp24I_as>CCA......GTC)',
@@ -5122,6 +5355,7 @@ def _temp():
     }
 rest_dict['Bsp24I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bsp3004IV>CCGCAT)|(?P<Bsp3004IV_as>ATGCGG)',
@@ -5144,6 +5378,7 @@ def _temp():
     }
 rest_dict['Bsp3004IV'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bsp68I>TCGCGA)',
@@ -5166,6 +5401,7 @@ def _temp():
     }
 rest_dict['Bsp68I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BspACI>CCGC)|(?P<BspACI_as>GCGG)',
@@ -5188,6 +5424,7 @@ def _temp():
     }
 rest_dict['BspACI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BspANI>GGCC)',
@@ -5210,6 +5447,7 @@ def _temp():
     }
 rest_dict['BspANI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BspCNI>CTCAG)|(?P<BspCNI_as>CTGAG)',
@@ -5232,6 +5470,7 @@ def _temp():
     }
 rest_dict['BspCNI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BspD6I>GACTC)|(?P<BspD6I_as>GAGTC)',
@@ -5254,6 +5493,7 @@ def _temp():
     }
 rest_dict['BspD6I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BspDI>ATCGAT)',
@@ -5276,6 +5516,7 @@ def _temp():
     }
 rest_dict['BspDI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BspEI>TCCGGA)',
@@ -5298,6 +5539,7 @@ def _temp():
     }
 rest_dict['BspEI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BspFNI>CGCG)',
@@ -5320,6 +5562,7 @@ def _temp():
     }
 rest_dict['BspFNI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BspGI>CTGGAC)|(?P<BspGI_as>GTCCAG)',
@@ -5342,6 +5585,7 @@ def _temp():
     }
 rest_dict['BspGI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BspHI>TCATGA)',
@@ -5364,6 +5608,7 @@ def _temp():
     }
 rest_dict['BspHI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BspLI>GG..CC)',
@@ -5386,6 +5631,7 @@ def _temp():
     }
 rest_dict['BspLI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BspLU11I>ACATGT)',
@@ -5408,6 +5654,7 @@ def _temp():
     }
 rest_dict['BspLU11I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BspMAI>CTGCAG)',
@@ -5430,6 +5677,7 @@ def _temp():
     }
 rest_dict['BspMAI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BspMI>ACCTGC)|(?P<BspMI_as>GCAGGT)',
@@ -5452,6 +5700,7 @@ def _temp():
     }
 rest_dict['BspMI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BspMII>TCCGGA)',
@@ -5474,6 +5723,7 @@ def _temp():
     }
 rest_dict['BspMII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BspNCI>CCAGA)|(?P<BspNCI_as>TCTGG)',
@@ -5496,6 +5746,7 @@ def _temp():
     }
 rest_dict['BspNCI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BspOI>GCTAGC)',
@@ -5518,6 +5769,7 @@ def _temp():
     }
 rest_dict['BspOI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BspPI>GGATC)|(?P<BspPI_as>GATCC)',
@@ -5540,6 +5792,7 @@ def _temp():
     }
 rest_dict['BspPI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BspQI>GCTCTTC)|(?P<BspQI_as>GAAGAGC)',
@@ -5562,6 +5815,7 @@ def _temp():
     }
 rest_dict['BspQI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BspT104I>TTCGAA)',
@@ -5584,6 +5838,7 @@ def _temp():
     }
 rest_dict['BspT104I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BspT107I>GG[CT][AG]CC)',
@@ -5606,6 +5861,7 @@ def _temp():
     }
 rest_dict['BspT107I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BspTI>CTTAAG)',
@@ -5628,6 +5884,7 @@ def _temp():
     }
 rest_dict['BspTI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BspTNI>GGTCTC)|(?P<BspTNI_as>GAGACC)',
@@ -5650,6 +5907,7 @@ def _temp():
     }
 rest_dict['BspTNI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BsrBI>CCGCTC)|(?P<BsrBI_as>GAGCGG)',
@@ -5672,6 +5930,7 @@ def _temp():
     }
 rest_dict['BsrBI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BsrDI>GCAATG)|(?P<BsrDI_as>CATTGC)',
@@ -5694,6 +5953,7 @@ def _temp():
     }
 rest_dict['BsrDI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BsrFI>[AG]CCGG[CT])',
@@ -5716,6 +5976,7 @@ def _temp():
     }
 rest_dict['BsrFI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BsrGI>TGTACA)',
@@ -5738,6 +5999,7 @@ def _temp():
     }
 rest_dict['BsrGI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BsrI>ACTGG)|(?P<BsrI_as>CCAGT)',
@@ -5760,6 +6022,7 @@ def _temp():
     }
 rest_dict['BsrI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BssAI>[AG]CCGG[CT])',
@@ -5782,6 +6045,7 @@ def _temp():
     }
 rest_dict['BssAI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BssECI>CC..GG)',
@@ -5804,6 +6068,7 @@ def _temp():
     }
 rest_dict['BssECI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BssHII>GCGCGC)',
@@ -5826,6 +6091,7 @@ def _temp():
     }
 rest_dict['BssHII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BssMI>GATC)',
@@ -5848,6 +6114,7 @@ def _temp():
     }
 rest_dict['BssMI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BssNAI>GTATAC)',
@@ -5870,6 +6137,7 @@ def _temp():
     }
 rest_dict['BssNAI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BssNI>G[AG]CG[CT]C)',
@@ -5892,6 +6160,7 @@ def _temp():
     }
 rest_dict['BssNI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BssSI>CACGAG)|(?P<BssSI_as>CTCGTG)',
@@ -5914,6 +6183,7 @@ def _temp():
     }
 rest_dict['BssSI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BssT1I>CC[AT][AT]GG)',
@@ -5936,6 +6206,7 @@ def _temp():
     }
 rest_dict['BssT1I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bst1107I>GTATAC)',
@@ -5958,6 +6229,7 @@ def _temp():
     }
 rest_dict['Bst1107I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bst2BI>CACGAG)|(?P<Bst2BI_as>CTCGTG)',
@@ -5980,6 +6252,7 @@ def _temp():
     }
 rest_dict['Bst2BI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bst2UI>CC[AT]GG)',
@@ -6002,6 +6275,7 @@ def _temp():
     }
 rest_dict['Bst2UI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bst4CI>AC.GT)',
@@ -6024,6 +6298,7 @@ def _temp():
     }
 rest_dict['Bst4CI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bst6I>CTCTTC)|(?P<Bst6I_as>GAAGAG)',
@@ -6046,6 +6321,7 @@ def _temp():
     }
 rest_dict['Bst6I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstACI>G[AG]CG[CT]C)',
@@ -6068,6 +6344,7 @@ def _temp():
     }
 rest_dict['BstACI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstAFI>CTTAAG)',
@@ -6090,6 +6367,7 @@ def _temp():
     }
 rest_dict['BstAFI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstAPI>GCA.....TGC)',
@@ -6112,6 +6390,7 @@ def _temp():
     }
 rest_dict['BstAPI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstAUI>TGTACA)',
@@ -6134,6 +6413,7 @@ def _temp():
     }
 rest_dict['BstAUI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstBAI>[CT]ACGT[AG])',
@@ -6156,6 +6436,7 @@ def _temp():
     }
 rest_dict['BstBAI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstBI>TTCGAA)',
@@ -6178,6 +6459,7 @@ def _temp():
     }
 rest_dict['BstBI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstC8I>GC..GC)',
@@ -6200,6 +6482,7 @@ def _temp():
     }
 rest_dict['BstC8I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstDEI>CT.AG)',
@@ -6222,6 +6505,7 @@ def _temp():
     }
 rest_dict['BstDEI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstDSI>CC[AG][CT]GG)',
@@ -6244,6 +6528,7 @@ def _temp():
     }
 rest_dict['BstDSI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstEII>GGT.ACC)',
@@ -6266,6 +6551,7 @@ def _temp():
     }
 rest_dict['BstEII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstENI>CCT.....AGG)',
@@ -6288,6 +6574,7 @@ def _temp():
     }
 rest_dict['BstENI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstF5I>GGATG)|(?P<BstF5I_as>CATCC)',
@@ -6310,6 +6597,7 @@ def _temp():
     }
 rest_dict['BstF5I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstFNI>CGCG)',
@@ -6332,6 +6620,7 @@ def _temp():
     }
 rest_dict['BstFNI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstH2I>[AG]GCGC[CT])',
@@ -6354,6 +6643,7 @@ def _temp():
     }
 rest_dict['BstH2I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstHHI>GCGC)',
@@ -6376,6 +6666,7 @@ def _temp():
     }
 rest_dict['BstHHI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstKTI>GATC)',
@@ -6398,6 +6689,7 @@ def _temp():
     }
 rest_dict['BstKTI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstMAI>GTCTC)|(?P<BstMAI_as>GAGAC)',
@@ -6420,6 +6712,7 @@ def _temp():
     }
 rest_dict['BstMAI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstMBI>GATC)',
@@ -6442,6 +6735,7 @@ def _temp():
     }
 rest_dict['BstMBI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstMCI>CG[AG][CT]CG)',
@@ -6464,6 +6758,7 @@ def _temp():
     }
 rest_dict['BstMCI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstMWI>GC.......GC)',
@@ -6486,6 +6781,7 @@ def _temp():
     }
 rest_dict['BstMWI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstNI>CC[AT]GG)',
@@ -6508,6 +6804,7 @@ def _temp():
     }
 rest_dict['BstNI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstNSI>[AG]CATG[CT])',
@@ -6530,6 +6827,7 @@ def _temp():
     }
 rest_dict['BstNSI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstPAI>GAC....GTC)',
@@ -6552,6 +6850,7 @@ def _temp():
     }
 rest_dict['BstPAI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstPI>GGT.ACC)',
@@ -6574,6 +6873,7 @@ def _temp():
     }
 rest_dict['BstPI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstSCI>CC.GG)',
@@ -6596,6 +6896,7 @@ def _temp():
     }
 rest_dict['BstSCI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstSFI>CT[AG][CT]AG)',
@@ -6618,6 +6919,7 @@ def _temp():
     }
 rest_dict['BstSFI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstSLI>G[GT]GC[AC]C)',
@@ -6640,6 +6942,7 @@ def _temp():
     }
 rest_dict['BstSLI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstSNI>TACGTA)',
@@ -6662,6 +6965,7 @@ def _temp():
     }
 rest_dict['BstSNI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstUI>CGCG)',
@@ -6684,6 +6988,7 @@ def _temp():
     }
 rest_dict['BstUI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstV1I>GCAGC)|(?P<BstV1I_as>GCTGC)',
@@ -6706,6 +7011,7 @@ def _temp():
     }
 rest_dict['BstV1I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstV2I>GAAGAC)|(?P<BstV2I_as>GTCTTC)',
@@ -6728,6 +7034,7 @@ def _temp():
     }
 rest_dict['BstV2I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstX2I>[AG]GATC[CT])',
@@ -6750,6 +7057,7 @@ def _temp():
     }
 rest_dict['BstX2I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstXI>CCA......TGG)',
@@ -6772,6 +7080,7 @@ def _temp():
     }
 rest_dict['BstXI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstYI>[AG]GATC[CT])',
@@ -6794,6 +7103,7 @@ def _temp():
     }
 rest_dict['BstYI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstZ17I>GTATAC)',
@@ -6816,6 +7126,7 @@ def _temp():
     }
 rest_dict['BstZ17I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BstZI>CGGCCG)',
@@ -6838,6 +7149,7 @@ def _temp():
     }
 rest_dict['BstZI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bsu15I>ATCGAT)',
@@ -6860,6 +7172,7 @@ def _temp():
     }
 rest_dict['Bsu15I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bsu36I>CCT.AGG)',
@@ -6882,6 +7195,7 @@ def _temp():
     }
 rest_dict['Bsu36I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Bsu7003I>GACGAGC)|(?P<Bsu7003I_as>GCTCGTC)',
@@ -6904,6 +7218,7 @@ def _temp():
     }
 rest_dict['Bsu7003I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BsuI>GTATCC)|(?P<BsuI_as>GGATAC)',
@@ -6926,6 +7241,7 @@ def _temp():
     }
 rest_dict['BsuI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BsuRI>GGCC)',
@@ -6948,6 +7264,7 @@ def _temp():
     }
 rest_dict['BsuRI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BsuTUI>ATCGAT)',
@@ -6970,6 +7287,7 @@ def _temp():
     }
 rest_dict['BsuTUI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BtgI>CC[AG][CT]GG)',
@@ -6992,6 +7310,7 @@ def _temp():
     }
 rest_dict['BtgI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BtgZI>GCGATG)|(?P<BtgZI_as>CATCGC)',
@@ -7014,6 +7333,7 @@ def _temp():
     }
 rest_dict['BtgZI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BthCI>GC.GC)',
@@ -7036,6 +7356,7 @@ def _temp():
     }
 rest_dict['BthCI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BtrI>CACGTC)|(?P<BtrI_as>GACGTG)',
@@ -7058,6 +7379,7 @@ def _temp():
     }
 rest_dict['BtrI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BtsCI>GGATG)|(?P<BtsCI_as>CATCC)',
@@ -7080,6 +7402,7 @@ def _temp():
     }
 rest_dict['BtsCI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BtsI>GCAGTG)|(?P<BtsI_as>CACTGC)',
@@ -7102,6 +7425,7 @@ def _temp():
     }
 rest_dict['BtsI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BtsIMutI>CAGTG)|(?P<BtsIMutI_as>CACTG)',
@@ -7124,6 +7448,7 @@ def _temp():
     }
 rest_dict['BtsIMutI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BtuMI>TCGCGA)',
@@ -7146,6 +7471,7 @@ def _temp():
     }
 rest_dict['BtuMI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<BveI>ACCTGC)|(?P<BveI_as>GCAGGT)',
@@ -7168,6 +7494,7 @@ def _temp():
     }
 rest_dict['BveI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Cac8I>GC..GC)',
@@ -7190,6 +7517,7 @@ def _temp():
     }
 rest_dict['Cac8I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<CaiI>CAG...CTG)',
@@ -7212,6 +7540,7 @@ def _temp():
     }
 rest_dict['CaiI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Cal14237I>GGTTAG)|(?P<Cal14237I_as>CTAACC)',
@@ -7234,6 +7563,7 @@ def _temp():
     }
 rest_dict['Cal14237I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<CalB3II>G[AG]TT[AG]AG)|(?P<CalB3II_as>CT[CT]AA[CT]C)',
@@ -7256,6 +7586,7 @@ def _temp():
     }
 rest_dict['CalB3II'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Cau10061II>GTTAAT)|(?P<Cau10061II_as>ATTAAC)',
@@ -7278,6 +7609,7 @@ def _temp():
     }
 rest_dict['Cau10061II'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<CauII>CC[CG]GG)',
@@ -7300,6 +7632,7 @@ def _temp():
     }
 rest_dict['CauII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Cba13II>AGGAAT)|(?P<Cba13II_as>ATTCCT)',
@@ -7322,6 +7655,7 @@ def _temp():
     }
 rest_dict['Cba13II'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Cba16038I>CCT.A[CT].C)|(?P<Cba16038I_as>G.[AG]T.AGG)',
@@ -7344,6 +7678,7 @@ def _temp():
     }
 rest_dict['Cba16038I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<CchII>GGA[AG]GA)|(?P<CchII_as>TC[CT]TCC)',
@@ -7366,6 +7701,7 @@ def _temp():
     }
 rest_dict['CchII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<CchIII>CCCAAG)|(?P<CchIII_as>CTTGGG)',
@@ -7388,6 +7724,7 @@ def _temp():
     }
 rest_dict['CchIII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<CciI>TCATGA)',
@@ -7410,6 +7747,7 @@ def _temp():
     }
 rest_dict['CciI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<CciNI>GCGGCCGC)',
@@ -7432,6 +7770,7 @@ def _temp():
     }
 rest_dict['CciNI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<CcrNAIII>CGACCAG)|(?P<CcrNAIII_as>CTGGTCG)',
@@ -7454,6 +7793,7 @@ def _temp():
     }
 rest_dict['CcrNAIII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Cdi11397I>GCGCAG)|(?P<Cdi11397I_as>CTGCGC)',
@@ -7476,6 +7816,7 @@ def _temp():
     }
 rest_dict['Cdi11397I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<CdiI>CATCG)|(?P<CdiI_as>CGATG)',
@@ -7498,6 +7839,7 @@ def _temp():
     }
 rest_dict['CdiI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<CdpI>GCGGAG)|(?P<CdpI_as>CTCCGC)',
@@ -7520,6 +7862,7 @@ def _temp():
     }
 rest_dict['CdpI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Cdu23823II>GTGAAG)|(?P<Cdu23823II_as>CTTCAC)',
@@ -7542,6 +7885,7 @@ def _temp():
     }
 rest_dict['Cdu23823II'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<CfoI>GCGC)',
@@ -7564,6 +7908,7 @@ def _temp():
     }
 rest_dict['CfoI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Cfr10I>[AG]CCGG[CT])',
@@ -7586,6 +7931,7 @@ def _temp():
     }
 rest_dict['Cfr10I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Cfr13I>GG.CC)',
@@ -7608,6 +7954,7 @@ def _temp():
     }
 rest_dict['Cfr13I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Cfr42I>CCGCGG)',
@@ -7630,6 +7977,7 @@ def _temp():
     }
 rest_dict['Cfr42I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Cfr9I>CCCGGG)',
@@ -7652,6 +8000,7 @@ def _temp():
     }
 rest_dict['Cfr9I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<CfrI>[CT]GGCC[AG])',
@@ -7674,6 +8023,7 @@ def _temp():
     }
 rest_dict['CfrI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Cgl13032I>GGCGCA)|(?P<Cgl13032I_as>TGCGCC)',
@@ -7696,6 +8046,7 @@ def _temp():
     }
 rest_dict['Cgl13032I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Cgl13032II>ACGA[CGT]GG)|(?P<Cgl13032II_as>CC[ACG]TCGT)',
@@ -7718,6 +8069,7 @@ def _temp():
     }
 rest_dict['Cgl13032II'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<ChaI>GATC)',
@@ -7740,6 +8092,7 @@ def _temp():
     }
 rest_dict['ChaI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<CjeFIII>GCAAGG)|(?P<CjeFIII_as>CCTTGC)',
@@ -7762,6 +8115,7 @@ def _temp():
     }
 rest_dict['CjeFIII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<CjeFV>GG[AG]CA)|(?P<CjeFV_as>TG[CT]CC)',
@@ -7784,6 +8138,7 @@ def _temp():
     }
 rest_dict['CjeFV'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<CjeI>CCA......GT)|(?P<CjeI_as>AC......TGG)',
@@ -7806,6 +8161,7 @@ def _temp():
     }
 rest_dict['CjeI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<CjeNII>GAG.....GT)|(?P<CjeNII_as>AC.....CTC)',
@@ -7828,6 +8184,7 @@ def _temp():
     }
 rest_dict['CjeNII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<CjeNIII>G[GT]AA[CT]G)|(?P<CjeNIII_as>C[AG]TT[AC]C)',
@@ -7850,6 +8207,7 @@ def _temp():
     }
 rest_dict['CjeNIII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<CjeP659IV>CAC.......GAA)|(?P<CjeP659IV_as>TTC.......GTG)',
@@ -7872,6 +8230,7 @@ def _temp():
     }
 rest_dict['CjeP659IV'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<CjePI>CCA.......TC)|(?P<CjePI_as>GA.......TGG)',
@@ -7894,6 +8253,7 @@ def _temp():
     }
 rest_dict['CjePI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<CjuI>CA[CT].....[AG]TG)',
@@ -7916,6 +8276,7 @@ def _temp():
     }
 rest_dict['CjuI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<CjuII>CA[CT].....CTC)|(?P<CjuII_as>GAG.....[AG]TG)',
@@ -7938,6 +8299,7 @@ def _temp():
     }
 rest_dict['CjuII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Cla11845III>GCGAA)|(?P<Cla11845III_as>TTCGC)',
@@ -7960,6 +8322,7 @@ def _temp():
     }
 rest_dict['Cla11845III'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<ClaI>ATCGAT)',
@@ -7982,6 +8345,7 @@ def _temp():
     }
 rest_dict['ClaI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Cly7489II>AAAAG[AG]G)|(?P<Cly7489II_as>C[CT]CTTTT)',
@@ -8004,6 +8368,7 @@ def _temp():
     }
 rest_dict['Cly7489II'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Cma23826I>CGGAAG)|(?P<Cma23826I_as>CTTCCG)',
@@ -8026,6 +8391,7 @@ def _temp():
     }
 rest_dict['Cma23826I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<CpoI>CGG[AT]CCG)',
@@ -8048,6 +8414,7 @@ def _temp():
     }
 rest_dict['CpoI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<CseI>GACGC)|(?P<CseI_as>GCGTC)',
@@ -8070,6 +8437,7 @@ def _temp():
     }
 rest_dict['CseI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<CsiI>ACC[AT]GGT)',
@@ -8092,6 +8460,7 @@ def _temp():
     }
 rest_dict['CsiI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Csp2014I>GGAGGC)|(?P<Csp2014I_as>GCCTCC)',
@@ -8114,6 +8483,7 @@ def _temp():
     }
 rest_dict['Csp2014I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Csp6I>GTAC)',
@@ -8136,6 +8506,7 @@ def _temp():
     }
 rest_dict['Csp6I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<CspAI>ACCGGT)',
@@ -8158,6 +8529,7 @@ def _temp():
     }
 rest_dict['CspAI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<CspCI>CAA.....GTGG)|(?P<CspCI_as>CCAC.....TTG)',
@@ -8180,6 +8552,7 @@ def _temp():
     }
 rest_dict['CspCI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<CspI>CGG[AT]CCG)',
@@ -8202,6 +8575,7 @@ def _temp():
     }
 rest_dict['CspI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<CstMI>AAGGAG)|(?P<CstMI_as>CTCCTT)',
@@ -8224,6 +8598,7 @@ def _temp():
     }
 rest_dict['CstMI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<CviAII>CATG)',
@@ -8246,6 +8621,7 @@ def _temp():
     }
 rest_dict['CviAII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<CviJI>[AG]GC[CT])',
@@ -8268,6 +8644,7 @@ def _temp():
     }
 rest_dict['CviJI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<CviKI_1>[AG]GC[CT])',
@@ -8290,6 +8667,7 @@ def _temp():
     }
 rest_dict['CviKI_1'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<CviQI>GTAC)',
@@ -8312,6 +8690,7 @@ def _temp():
     }
 rest_dict['CviQI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<CviRI>TGCA)',
@@ -8334,6 +8713,7 @@ def _temp():
     }
 rest_dict['CviRI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<DdeI>CT.AG)',
@@ -8356,6 +8736,7 @@ def _temp():
     }
 rest_dict['DdeI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<DinI>GGCGCC)',
@@ -8378,6 +8759,7 @@ def _temp():
     }
 rest_dict['DinI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<DpnI>GATC)',
@@ -8400,6 +8782,7 @@ def _temp():
     }
 rest_dict['DpnI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<DpnII>GATC)',
@@ -8422,6 +8805,7 @@ def _temp():
     }
 rest_dict['DpnII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<DraI>TTTAAA)',
@@ -8444,6 +8828,7 @@ def _temp():
     }
 rest_dict['DraI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<DraII>[AG]GG.CC[CT])',
@@ -8466,6 +8851,7 @@ def _temp():
     }
 rest_dict['DraII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<DraIII>CAC...GTG)',
@@ -8488,6 +8874,7 @@ def _temp():
     }
 rest_dict['DraIII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<DraRI>CAAG.AC)|(?P<DraRI_as>GT.CTTG)',
@@ -8510,6 +8897,7 @@ def _temp():
     }
 rest_dict['DraRI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<DrdI>GAC......GTC)',
@@ -8532,6 +8920,7 @@ def _temp():
     }
 rest_dict['DrdI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<DrdII>GAACCA)|(?P<DrdII_as>TGGTTC)',
@@ -8554,6 +8943,7 @@ def _temp():
     }
 rest_dict['DrdII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<DriI>GAC.....GTC)',
@@ -8576,6 +8966,7 @@ def _temp():
     }
 rest_dict['DriI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<DsaI>CC[AG][CT]GG)',
@@ -8598,6 +8989,7 @@ def _temp():
     }
 rest_dict['DsaI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<DseDI>GAC......GTC)',
@@ -8620,6 +9012,7 @@ def _temp():
     }
 rest_dict['DseDI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<EaeI>[CT]GGCC[AG])',
@@ -8642,6 +9035,7 @@ def _temp():
     }
 rest_dict['EaeI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<EagI>CGGCCG)',
@@ -8664,6 +9058,7 @@ def _temp():
     }
 rest_dict['EagI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Eam1104I>CTCTTC)|(?P<Eam1104I_as>GAAGAG)',
@@ -8686,6 +9081,7 @@ def _temp():
     }
 rest_dict['Eam1104I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Eam1105I>GAC.....GTC)',
@@ -8708,6 +9104,7 @@ def _temp():
     }
 rest_dict['Eam1105I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<EarI>CTCTTC)|(?P<EarI_as>GAAGAG)',
@@ -8730,6 +9127,7 @@ def _temp():
     }
 rest_dict['EarI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<EciI>GGCGGA)|(?P<EciI_as>TCCGCC)',
@@ -8752,6 +9150,7 @@ def _temp():
     }
 rest_dict['EciI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Ecl136II>GAGCTC)',
@@ -8774,6 +9173,7 @@ def _temp():
     }
 rest_dict['Ecl136II'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Ecl35734I>GAAA[CT]TC)|(?P<Ecl35734I_as>GA[AG]TTTC)',
@@ -8796,6 +9196,7 @@ def _temp():
     }
 rest_dict['Ecl35734I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<EclXI>CGGCCG)',
@@ -8818,6 +9219,7 @@ def _temp():
     }
 rest_dict['EclXI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Eco105I>TACGTA)',
@@ -8840,6 +9242,7 @@ def _temp():
     }
 rest_dict['Eco105I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Eco130I>CC[AT][AT]GG)',
@@ -8862,6 +9265,7 @@ def _temp():
     }
 rest_dict['Eco130I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Eco147I>AGGCCT)',
@@ -8884,6 +9288,7 @@ def _temp():
     }
 rest_dict['Eco147I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Eco24I>G[AG]GC[CT]C)',
@@ -8906,6 +9311,7 @@ def _temp():
     }
 rest_dict['Eco24I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Eco31I>GGTCTC)|(?P<Eco31I_as>GAGACC)',
@@ -8928,6 +9334,7 @@ def _temp():
     }
 rest_dict['Eco31I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Eco32I>GATATC)',
@@ -8950,6 +9357,7 @@ def _temp():
     }
 rest_dict['Eco32I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Eco47I>GG[AT]CC)',
@@ -8972,6 +9380,7 @@ def _temp():
     }
 rest_dict['Eco47I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Eco47III>AGCGCT)',
@@ -8994,6 +9403,7 @@ def _temp():
     }
 rest_dict['Eco47III'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Eco52I>CGGCCG)',
@@ -9016,6 +9426,7 @@ def _temp():
     }
 rest_dict['Eco52I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Eco53kI>GAGCTC)',
@@ -9038,6 +9449,7 @@ def _temp():
     }
 rest_dict['Eco53kI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Eco57I>CTGAAG)|(?P<Eco57I_as>CTTCAG)',
@@ -9060,6 +9472,7 @@ def _temp():
     }
 rest_dict['Eco57I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Eco57MI>CTG[AG]AG)|(?P<Eco57MI_as>CT[CT]CAG)',
@@ -9082,6 +9495,7 @@ def _temp():
     }
 rest_dict['Eco57MI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Eco72I>CACGTG)',
@@ -9104,6 +9518,7 @@ def _temp():
     }
 rest_dict['Eco72I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Eco81I>CCT.AGG)',
@@ -9126,6 +9541,7 @@ def _temp():
     }
 rest_dict['Eco81I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Eco88I>C[CT]CG[AG]G)',
@@ -9148,6 +9564,7 @@ def _temp():
     }
 rest_dict['Eco88I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Eco91I>GGT.ACC)',
@@ -9170,6 +9587,7 @@ def _temp():
     }
 rest_dict['Eco91I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<EcoE1140I>ACC[CT]AC)|(?P<EcoE1140I_as>GT[AG]GGT)',
@@ -9192,6 +9610,7 @@ def _temp():
     }
 rest_dict['EcoE1140I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<EcoHI>CC[CG]GG)',
@@ -9214,6 +9633,7 @@ def _temp():
     }
 rest_dict['EcoHI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<EcoICRI>GAGCTC)',
@@ -9236,6 +9656,7 @@ def _temp():
     }
 rest_dict['EcoICRI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<EcoMII>CA.CATC)|(?P<EcoMII_as>GATG.TG)',
@@ -9258,6 +9679,7 @@ def _temp():
     }
 rest_dict['EcoMII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<EcoNI>CCT.....AGG)',
@@ -9280,6 +9702,7 @@ def _temp():
     }
 rest_dict['EcoNI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<EcoO109I>[AG]GG.CC[CT])',
@@ -9302,6 +9725,7 @@ def _temp():
     }
 rest_dict['EcoO109I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<EcoO65I>GGT.ACC)',
@@ -9324,6 +9748,7 @@ def _temp():
     }
 rest_dict['EcoO65I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<EcoRI>GAATTC)',
@@ -9346,6 +9771,7 @@ def _temp():
     }
 rest_dict['EcoRI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<EcoRII>CC[AT]GG)',
@@ -9368,6 +9794,7 @@ def _temp():
     }
 rest_dict['EcoRII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<EcoRV>GATATC)',
@@ -9390,6 +9817,7 @@ def _temp():
     }
 rest_dict['EcoRV'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<EcoT14I>CC[AT][AT]GG)',
@@ -9412,6 +9840,7 @@ def _temp():
     }
 rest_dict['EcoT14I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<EcoT22I>ATGCAT)',
@@ -9434,6 +9863,7 @@ def _temp():
     }
 rest_dict['EcoT22I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<EcoT38I>G[AG]GC[CT]C)',
@@ -9456,6 +9886,7 @@ def _temp():
     }
 rest_dict['EcoT38I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<EgeI>GGCGCC)',
@@ -9478,6 +9909,7 @@ def _temp():
     }
 rest_dict['EgeI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<EheI>GGCGCC)',
@@ -9500,6 +9932,7 @@ def _temp():
     }
 rest_dict['EheI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<ErhI>CC[AT][AT]GG)',
@@ -9522,6 +9955,7 @@ def _temp():
     }
 rest_dict['ErhI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<EsaBC3I>TCGA)',
@@ -9544,6 +9978,7 @@ def _temp():
     }
 rest_dict['EsaBC3I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<EsaSSI>GACCAC)|(?P<EsaSSI_as>GTGGTC)',
@@ -9566,6 +10001,7 @@ def _temp():
     }
 rest_dict['EsaSSI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Esp3007I>CAGAAG)|(?P<Esp3007I_as>CTTCTG)',
@@ -9588,6 +10024,7 @@ def _temp():
     }
 rest_dict['Esp3007I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Esp3I>CGTCTC)|(?P<Esp3I_as>GAGACG)',
@@ -9610,6 +10047,7 @@ def _temp():
     }
 rest_dict['Esp3I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<EspI>GCT.AGC)',
@@ -9632,6 +10070,7 @@ def _temp():
     }
 rest_dict['EspI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<FaeI>CATG)',
@@ -9654,6 +10093,7 @@ def _temp():
     }
 rest_dict['FaeI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<FaiI>[CT]AT[AG])',
@@ -9676,6 +10116,7 @@ def _temp():
     }
 rest_dict['FaiI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<FalI>AAG.....CTT)',
@@ -9698,6 +10139,7 @@ def _temp():
     }
 rest_dict['FalI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<FaqI>GGGAC)|(?P<FaqI_as>GTCCC)',
@@ -9720,6 +10162,7 @@ def _temp():
     }
 rest_dict['FaqI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<FatI>CATG)',
@@ -9742,6 +10185,7 @@ def _temp():
     }
 rest_dict['FatI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<FauI>CCCGC)|(?P<FauI_as>GCGGG)',
@@ -9764,6 +10208,7 @@ def _temp():
     }
 rest_dict['FauI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<FauNDI>CATATG)',
@@ -9786,6 +10231,7 @@ def _temp():
     }
 rest_dict['FauNDI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<FbaI>TGATCA)',
@@ -9808,6 +10254,7 @@ def _temp():
     }
 rest_dict['FbaI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<FblI>GT[AC][GT]AC)',
@@ -9830,6 +10277,7 @@ def _temp():
     }
 rest_dict['FblI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<FinI>GGGAC)|(?P<FinI_as>GTCCC)',
@@ -9852,6 +10300,7 @@ def _temp():
     }
 rest_dict['FinI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<FmuI>GG.CC)',
@@ -9874,6 +10323,7 @@ def _temp():
     }
 rest_dict['FmuI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Fnu4HI>GC.GC)',
@@ -9896,6 +10346,7 @@ def _temp():
     }
 rest_dict['Fnu4HI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<FnuDII>CGCG)',
@@ -9918,6 +10369,7 @@ def _temp():
     }
 rest_dict['FnuDII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<FokI>GGATG)|(?P<FokI_as>CATCC)',
@@ -9940,6 +10392,7 @@ def _temp():
     }
 rest_dict['FokI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<FriOI>G[AG]GC[CT]C)',
@@ -9962,6 +10415,7 @@ def _temp():
     }
 rest_dict['FriOI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<FseI>GGCCGGCC)',
@@ -9984,6 +10438,7 @@ def _temp():
     }
 rest_dict['FseI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Fsp4HI>GC.GC)',
@@ -10006,6 +10461,7 @@ def _temp():
     }
 rest_dict['Fsp4HI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<FspAI>[AG]TGCGCA[CT])',
@@ -10028,6 +10484,7 @@ def _temp():
     }
 rest_dict['FspAI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<FspBI>CTAG)',
@@ -10050,6 +10507,7 @@ def _temp():
     }
 rest_dict['FspBI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<FspEI>CC)|(?P<FspEI_as>GG)',
@@ -10072,6 +10530,7 @@ def _temp():
     }
 rest_dict['FspEI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<FspI>TGCGCA)',
@@ -10094,6 +10553,7 @@ def _temp():
     }
 rest_dict['FspI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<FtnUV>GAAACA)|(?P<FtnUV_as>TGTTTC)',
@@ -10116,6 +10576,7 @@ def _temp():
     }
 rest_dict['FtnUV'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<GauT27I>CGCGCAGG)|(?P<GauT27I_as>CCTGCGCG)',
@@ -10138,6 +10599,7 @@ def _temp():
     }
 rest_dict['GauT27I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Gba708II>ATGCAC)|(?P<Gba708II_as>GTGCAT)',
@@ -10160,6 +10622,7 @@ def _temp():
     }
 rest_dict['Gba708II'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<GdiII>CGGCC[AG])|(?P<GdiII_as>[CT]GGCCG)',
@@ -10182,6 +10645,7 @@ def _temp():
     }
 rest_dict['GdiII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<GlaI>GCGC)',
@@ -10204,6 +10668,7 @@ def _temp():
     }
 rest_dict['GlaI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<GluI>GC.GC)',
@@ -10226,6 +10691,7 @@ def _temp():
     }
 rest_dict['GluI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<GsaI>CCCAGC)|(?P<GsaI_as>GCTGGG)',
@@ -10248,6 +10714,7 @@ def _temp():
     }
 rest_dict['GsaI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<GsuI>CTGGAG)|(?P<GsuI_as>CTCCAG)',
@@ -10270,6 +10737,7 @@ def _temp():
     }
 rest_dict['GsuI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HaeI>[AT]GGCC[AT])',
@@ -10292,6 +10760,7 @@ def _temp():
     }
 rest_dict['HaeI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HaeII>[AG]GCGC[CT])',
@@ -10314,6 +10783,7 @@ def _temp():
     }
 rest_dict['HaeII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HaeIII>GGCC)',
@@ -10336,6 +10806,7 @@ def _temp():
     }
 rest_dict['HaeIII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HapII>CCGG)',
@@ -10358,6 +10829,7 @@ def _temp():
     }
 rest_dict['HapII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HauII>TGGCCA)',
@@ -10380,6 +10852,7 @@ def _temp():
     }
 rest_dict['HauII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HbaII>GCCCAG)|(?P<HbaII_as>CTGGGC)',
@@ -10402,6 +10875,7 @@ def _temp():
     }
 rest_dict['HbaII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HgaI>GACGC)|(?P<HgaI_as>GCGTC)',
@@ -10424,6 +10898,7 @@ def _temp():
     }
 rest_dict['HgaI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HgiAI>G[AT]GC[AT]C)',
@@ -10446,6 +10921,7 @@ def _temp():
     }
 rest_dict['HgiAI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HgiCI>GG[CT][AG]CC)',
@@ -10468,6 +10944,7 @@ def _temp():
     }
 rest_dict['HgiCI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HgiEII>ACC......GGT)',
@@ -10490,6 +10967,7 @@ def _temp():
     }
 rest_dict['HgiEII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HgiJII>G[AG]GC[CT]C)',
@@ -10512,6 +10990,7 @@ def _temp():
     }
 rest_dict['HgiJII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HhaI>GCGC)',
@@ -10534,6 +11013,7 @@ def _temp():
     }
 rest_dict['HhaI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Hin1I>G[AG]CG[CT]C)',
@@ -10556,6 +11036,7 @@ def _temp():
     }
 rest_dict['Hin1I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Hin1II>CATG)',
@@ -10578,6 +11059,7 @@ def _temp():
     }
 rest_dict['Hin1II'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Hin4I>GA[CT].....[ACG]TC)|(?P<Hin4I_as>GA[CGT].....[AG]TC)',
@@ -10600,6 +11082,7 @@ def _temp():
     }
 rest_dict['Hin4I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Hin4II>CCTTC)|(?P<Hin4II_as>GAAGG)',
@@ -10622,6 +11105,7 @@ def _temp():
     }
 rest_dict['Hin4II'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Hin6I>GCGC)',
@@ -10644,6 +11128,7 @@ def _temp():
     }
 rest_dict['Hin6I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HinP1I>GCGC)',
@@ -10666,6 +11151,7 @@ def _temp():
     }
 rest_dict['HinP1I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HincII>GT[CT][AG]AC)',
@@ -10688,6 +11174,7 @@ def _temp():
     }
 rest_dict['HincII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HindII>GT[CT][AG]AC)',
@@ -10710,6 +11197,7 @@ def _temp():
     }
 rest_dict['HindII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HindIII>AAGCTT)',
@@ -10732,6 +11220,7 @@ def _temp():
     }
 rest_dict['HindIII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HinfI>GA.TC)',
@@ -10754,6 +11243,7 @@ def _temp():
     }
 rest_dict['HinfI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HpaI>GTTAAC)',
@@ -10776,6 +11266,7 @@ def _temp():
     }
 rest_dict['HpaI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HpaII>CCGG)',
@@ -10798,6 +11289,7 @@ def _temp():
     }
 rest_dict['HpaII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HphI>GGTGA)|(?P<HphI_as>TCACC)',
@@ -10820,6 +11312,7 @@ def _temp():
     }
 rest_dict['HphI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Hpy166II>GT..AC)',
@@ -10842,6 +11335,7 @@ def _temp():
     }
 rest_dict['Hpy166II'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Hpy178III>TC..GA)',
@@ -10864,6 +11358,7 @@ def _temp():
     }
 rest_dict['Hpy178III'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Hpy188I>TC.GA)',
@@ -10886,6 +11381,7 @@ def _temp():
     }
 rest_dict['Hpy188I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Hpy188III>TC..GA)',
@@ -10908,6 +11404,7 @@ def _temp():
     }
 rest_dict['Hpy188III'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Hpy8I>GT..AC)',
@@ -10930,6 +11427,7 @@ def _temp():
     }
 rest_dict['Hpy8I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Hpy99I>CG[AT]CG)',
@@ -10952,6 +11450,7 @@ def _temp():
     }
 rest_dict['Hpy99I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Hpy99XIII>GCCTA)|(?P<Hpy99XIII_as>TAGGC)',
@@ -10974,6 +11473,7 @@ def _temp():
     }
 rest_dict['Hpy99XIII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Hpy99XIV>GG[AT]TAA)|(?P<Hpy99XIV_as>TTA[AT]CC)',
@@ -10996,6 +11496,7 @@ def _temp():
     }
 rest_dict['Hpy99XIV'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Hpy99XIV_mut1>GG[AT]C.A)|(?P<Hpy99XIV_mut1_as>T.G[AT]CC)',
@@ -11018,6 +11519,7 @@ def _temp():
     }
 rest_dict['Hpy99XIV_mut1'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Hpy99XXII>TCA......T[AG]G)|(?P<Hpy99XXII_as>C[CT]A......TGA)',
@@ -11040,6 +11542,7 @@ def _temp():
     }
 rest_dict['Hpy99XXII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HpyAV>CCTTC)|(?P<HpyAV_as>GAAGG)',
@@ -11062,6 +11565,7 @@ def _temp():
     }
 rest_dict['HpyAV'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HpyAXIV>GCGTA)|(?P<HpyAXIV_as>TACGC)',
@@ -11084,6 +11588,7 @@ def _temp():
     }
 rest_dict['HpyAXIV'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HpyAXVI_mut1>C[AG]TTAA)|(?P<HpyAXVI_mut1_as>TTAA[CT]G)',
@@ -11106,6 +11611,7 @@ def _temp():
     }
 rest_dict['HpyAXVI_mut1'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HpyAXVI_mut2>C[AG]TC.A)|(?P<HpyAXVI_mut2_as>T.GA[CT]G)',
@@ -11128,6 +11634,7 @@ def _temp():
     }
 rest_dict['HpyAXVI_mut2'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HpyCH4III>AC.GT)',
@@ -11150,6 +11657,7 @@ def _temp():
     }
 rest_dict['HpyCH4III'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HpyCH4IV>ACGT)',
@@ -11172,6 +11680,7 @@ def _temp():
     }
 rest_dict['HpyCH4IV'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HpyCH4V>TGCA)',
@@ -11194,6 +11703,7 @@ def _temp():
     }
 rest_dict['HpyCH4V'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HpyF10VI>GC.......GC)',
@@ -11216,6 +11726,7 @@ def _temp():
     }
 rest_dict['HpyF10VI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HpyF3I>CT.AG)',
@@ -11238,6 +11749,7 @@ def _temp():
     }
 rest_dict['HpyF3I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HpySE526I>ACGT)',
@@ -11260,6 +11772,7 @@ def _temp():
     }
 rest_dict['HpySE526I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HpyUM032XIII>C[CT]A.......T[AG]G)',
@@ -11282,6 +11795,7 @@ def _temp():
     }
 rest_dict['HpyUM032XIII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HpyUM032XIII_mut1>C[CT]A.......TTC)|(?P<HpyUM032XIII_mut1_as>GAA.......T[AG]G)',
@@ -11304,6 +11818,7 @@ def _temp():
     }
 rest_dict['HpyUM032XIII_mut1'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HpyUM032XIV>GAAAG)|(?P<HpyUM032XIV_as>CTTTC)',
@@ -11326,6 +11841,7 @@ def _temp():
     }
 rest_dict['HpyUM032XIV'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HpyUM037X>T.GG.AG)|(?P<HpyUM037X_as>CT.CC.A)',
@@ -11348,6 +11864,7 @@ def _temp():
     }
 rest_dict['HpyUM037X'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Hsp92I>G[AG]CG[CT]C)',
@@ -11370,6 +11887,7 @@ def _temp():
     }
 rest_dict['Hsp92I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Hsp92II>CATG)',
@@ -11392,6 +11910,7 @@ def _temp():
     }
 rest_dict['Hsp92II'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<HspAI>GCGC)',
@@ -11414,6 +11933,7 @@ def _temp():
     }
 rest_dict['HspAI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Jma19592I>GTAT.AC)|(?P<Jma19592I_as>GT.ATAC)',
@@ -11436,6 +11956,7 @@ def _temp():
     }
 rest_dict['Jma19592I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Jma19592II>G[AG]GC[AG]AC)|(?P<Jma19592II_as>GT[CT]GC[CT]C)',
@@ -11458,6 +11979,7 @@ def _temp():
     }
 rest_dict['Jma19592II'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<KasI>GGCGCC)',
@@ -11480,6 +12002,7 @@ def _temp():
     }
 rest_dict['KasI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<KflI>GGG[AT]CCC)',
@@ -11502,6 +12025,7 @@ def _temp():
     }
 rest_dict['KflI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Kpn2I>TCCGGA)',
@@ -11524,6 +12048,7 @@ def _temp():
     }
 rest_dict['Kpn2I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<KpnI>GGTACC)',
@@ -11546,6 +12071,7 @@ def _temp():
     }
 rest_dict['KpnI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<KpnNIH30III>GTTC.AC)|(?P<KpnNIH30III_as>GT.GAAC)',
@@ -11568,6 +12094,7 @@ def _temp():
     }
 rest_dict['KpnNIH30III'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<KroI>GCCGGC)',
@@ -11590,6 +12117,7 @@ def _temp():
     }
 rest_dict['KroI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Ksp22I>TGATCA)',
@@ -11612,6 +12140,7 @@ def _temp():
     }
 rest_dict['Ksp22I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Ksp632I>CTCTTC)|(?P<Ksp632I_as>GAAGAG)',
@@ -11634,6 +12163,7 @@ def _temp():
     }
 rest_dict['Ksp632I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<KspAI>GTTAAC)',
@@ -11656,6 +12186,7 @@ def _temp():
     }
 rest_dict['KspAI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<KspI>CCGCGG)',
@@ -11678,6 +12209,7 @@ def _temp():
     }
 rest_dict['KspI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Kzo9I>GATC)',
@@ -11700,6 +12232,7 @@ def _temp():
     }
 rest_dict['Kzo9I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Lba2029III>C[CT]AAA.G)|(?P<Lba2029III_as>C.TTT[AG]G)',
@@ -11722,6 +12255,7 @@ def _temp():
     }
 rest_dict['Lba2029III'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<LguI>GCTCTTC)|(?P<LguI_as>GAAGAGC)',
@@ -11744,6 +12278,7 @@ def _temp():
     }
 rest_dict['LguI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<LmnI>GCTCC)|(?P<LmnI_as>GGAGC)',
@@ -11766,6 +12301,7 @@ def _temp():
     }
 rest_dict['LmnI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Lmo370I>AGCGCCG)|(?P<Lmo370I_as>CGGCGCT)',
@@ -11788,6 +12324,7 @@ def _temp():
     }
 rest_dict['Lmo370I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Lmo911II>TAG[AG]AG)|(?P<Lmo911II_as>CT[CT]CTA)',
@@ -11810,6 +12347,7 @@ def _temp():
     }
 rest_dict['Lmo911II'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<LpnI>[AG]GCGC[CT])',
@@ -11832,6 +12370,7 @@ def _temp():
     }
 rest_dict['LpnI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<LpnPI>CC[AGT]G)|(?P<LpnPI_as>C[ACT]GG)',
@@ -11854,6 +12393,7 @@ def _temp():
     }
 rest_dict['LpnPI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Lsp1109I>GCAGC)|(?P<Lsp1109I_as>GCTGC)',
@@ -11876,6 +12416,7 @@ def _temp():
     }
 rest_dict['Lsp1109I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Lsp48III>AGCACC)|(?P<Lsp48III_as>GGTGCT)',
@@ -11898,6 +12439,7 @@ def _temp():
     }
 rest_dict['Lsp48III'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Lsp6406VI>C[AG]AGCAC)|(?P<Lsp6406VI_as>GTGCT[CT]G)',
@@ -11920,6 +12462,7 @@ def _temp():
     }
 rest_dict['Lsp6406VI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<LweI>GCATC)|(?P<LweI_as>GATGC)',
@@ -11942,6 +12485,7 @@ def _temp():
     }
 rest_dict['LweI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MabI>ACC[AT]GGT)',
@@ -11964,6 +12508,7 @@ def _temp():
     }
 rest_dict['MabI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MaeI>CTAG)',
@@ -11986,6 +12531,7 @@ def _temp():
     }
 rest_dict['MaeI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MaeII>ACGT)',
@@ -12008,6 +12554,7 @@ def _temp():
     }
 rest_dict['MaeII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MaeIII>GT.AC)',
@@ -12030,6 +12577,7 @@ def _temp():
     }
 rest_dict['MaeIII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MalI>GATC)',
@@ -12052,6 +12600,7 @@ def _temp():
     }
 rest_dict['MalI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MaqI>C[AG]TTGAC)|(?P<MaqI_as>GTCAA[CT]G)',
@@ -12074,6 +12623,7 @@ def _temp():
     }
 rest_dict['MaqI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MauBI>CGCGCGCG)',
@@ -12096,6 +12646,7 @@ def _temp():
     }
 rest_dict['MauBI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Mba11I>AGGCGA)|(?P<Mba11I_as>TCGCCT)',
@@ -12118,6 +12669,7 @@ def _temp():
     }
 rest_dict['Mba11I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MbiI>CCGCTC)|(?P<MbiI_as>GAGCGG)',
@@ -12140,6 +12692,7 @@ def _temp():
     }
 rest_dict['MbiI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MboI>GATC)',
@@ -12162,6 +12715,7 @@ def _temp():
     }
 rest_dict['MboI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MboII>GAAGA)|(?P<MboII_as>TCTTC)',
@@ -12184,6 +12738,7 @@ def _temp():
     }
 rest_dict['MboII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<McaTI>GCGCGC)',
@@ -12206,6 +12761,7 @@ def _temp():
     }
 rest_dict['McaTI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Mcr10I>GAAG.....CTC)|(?P<Mcr10I_as>GAG.....CTTC)',
@@ -12228,6 +12784,7 @@ def _temp():
     }
 rest_dict['Mcr10I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<McrI>CG[AG][CT]CG)',
@@ -12250,6 +12807,7 @@ def _temp():
     }
 rest_dict['McrI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MfeI>CAATTG)',
@@ -12272,6 +12830,7 @@ def _temp():
     }
 rest_dict['MfeI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MflI>[AG]GATC[CT])',
@@ -12294,6 +12853,7 @@ def _temp():
     }
 rest_dict['MflI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MhlI>G[AGT]GC[ACT]C)',
@@ -12316,6 +12876,7 @@ def _temp():
     }
 rest_dict['MhlI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MjaIV>GT..AC)',
@@ -12338,6 +12899,7 @@ def _temp():
     }
 rest_dict['MjaIV'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MkaDII>GAGA[CT]GT)|(?P<MkaDII_as>AC[AG]TCTC)',
@@ -12360,6 +12922,7 @@ def _temp():
     }
 rest_dict['MkaDII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MlsI>TGGCCA)',
@@ -12382,6 +12945,7 @@ def _temp():
     }
 rest_dict['MlsI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MluCI>AATT)',
@@ -12404,6 +12968,7 @@ def _temp():
     }
 rest_dict['MluCI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MluI>ACGCGT)',
@@ -12426,6 +12991,7 @@ def _temp():
     }
 rest_dict['MluI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MluNI>TGGCCA)',
@@ -12448,6 +13014,7 @@ def _temp():
     }
 rest_dict['MluNI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Mly113I>GGCGCC)',
@@ -12470,6 +13037,7 @@ def _temp():
     }
 rest_dict['Mly113I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MlyI>GAGTC)|(?P<MlyI_as>GACTC)',
@@ -12492,6 +13060,7 @@ def _temp():
     }
 rest_dict['MlyI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MmeI>TCC[AG]AC)|(?P<MmeI_as>GT[CT]GGA)',
@@ -12514,6 +13083,7 @@ def _temp():
     }
 rest_dict['MmeI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MnlI>CCTC)|(?P<MnlI_as>GAGG)',
@@ -12536,6 +13106,7 @@ def _temp():
     }
 rest_dict['MnlI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Mox20I>TGGCCA)',
@@ -12558,6 +13129,7 @@ def _temp():
     }
 rest_dict['Mox20I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Mph1103I>ATGCAT)',
@@ -12580,6 +13152,7 @@ def _temp():
     }
 rest_dict['Mph1103I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MreI>CGCCGGCG)',
@@ -12602,6 +13175,7 @@ def _temp():
     }
 rest_dict['MreI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MroI>TCCGGA)',
@@ -12624,6 +13198,7 @@ def _temp():
     }
 rest_dict['MroI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MroNI>GCCGGC)',
@@ -12646,6 +13221,7 @@ def _temp():
     }
 rest_dict['MroNI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MroXI>GAA....TTC)',
@@ -12668,6 +13244,7 @@ def _temp():
     }
 rest_dict['MroXI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MscI>TGGCCA)',
@@ -12690,6 +13267,7 @@ def _temp():
     }
 rest_dict['MscI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MseI>TTAA)',
@@ -12712,6 +13290,7 @@ def _temp():
     }
 rest_dict['MseI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MslI>CA[CT]....[AG]TG)',
@@ -12734,6 +13313,7 @@ def _temp():
     }
 rest_dict['MslI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Msp20I>TGGCCA)',
@@ -12756,6 +13336,7 @@ def _temp():
     }
 rest_dict['Msp20I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MspA1I>C[AC]GC[GT]G)',
@@ -12778,6 +13359,7 @@ def _temp():
     }
 rest_dict['MspA1I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MspCI>CTTAAG)',
@@ -12800,6 +13382,7 @@ def _temp():
     }
 rest_dict['MspCI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MspI>CCGG)',
@@ -12822,6 +13405,7 @@ def _temp():
     }
 rest_dict['MspI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MspI7II>ACG[AG]AG)|(?P<MspI7II_as>CT[CT]CGT)',
@@ -12844,6 +13428,7 @@ def _temp():
     }
 rest_dict['MspI7II'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MspJI>C..[AG])|(?P<MspJI_as>[CT]..G)',
@@ -12866,6 +13451,7 @@ def _temp():
     }
 rest_dict['MspJI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MspR9I>CC.GG)',
@@ -12888,6 +13474,7 @@ def _temp():
     }
 rest_dict['MspR9I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MssI>GTTTAAAC)',
@@ -12910,6 +13497,7 @@ def _temp():
     }
 rest_dict['MssI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MstI>TGCGCA)',
@@ -12932,6 +13520,7 @@ def _temp():
     }
 rest_dict['MstI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MteI>GCGC.GCGC)',
@@ -12954,6 +13543,7 @@ def _temp():
     }
 rest_dict['MteI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MtuHN878II>CACGCAG)|(?P<MtuHN878II_as>CTGCGTG)',
@@ -12976,6 +13566,7 @@ def _temp():
     }
 rest_dict['MtuHN878II'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MunI>CAATTG)',
@@ -12998,6 +13589,7 @@ def _temp():
     }
 rest_dict['MunI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Mva1269I>GAATGC)|(?P<Mva1269I_as>GCATTC)',
@@ -13020,6 +13612,7 @@ def _temp():
     }
 rest_dict['Mva1269I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MvaI>CC[AT]GG)',
@@ -13042,6 +13635,7 @@ def _temp():
     }
 rest_dict['MvaI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MvnI>CGCG)',
@@ -13064,6 +13658,7 @@ def _temp():
     }
 rest_dict['MvnI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<MwoI>GC.......GC)',
@@ -13086,6 +13681,7 @@ def _temp():
     }
 rest_dict['MwoI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<NaeI>GCCGGC)',
@@ -13108,6 +13704,7 @@ def _temp():
     }
 rest_dict['NaeI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Nal45188II>ACCAGC)|(?P<Nal45188II_as>GCTGGT)',
@@ -13130,6 +13727,7 @@ def _temp():
     }
 rest_dict['Nal45188II'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<NarI>GGCGCC)',
@@ -13152,6 +13750,7 @@ def _temp():
     }
 rest_dict['NarI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<NciI>CC[CG]GG)',
@@ -13174,6 +13773,7 @@ def _temp():
     }
 rest_dict['NciI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<NcoI>CCATGG)',
@@ -13196,6 +13796,7 @@ def _temp():
     }
 rest_dict['NcoI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<NdeI>CATATG)',
@@ -13218,6 +13819,7 @@ def _temp():
     }
 rest_dict['NdeI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<NdeII>GATC)',
@@ -13240,6 +13842,7 @@ def _temp():
     }
 rest_dict['NdeII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<NgoAVII>GCCGC)|(?P<NgoAVII_as>GCGGC)',
@@ -13262,6 +13865,7 @@ def _temp():
     }
 rest_dict['NgoAVII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<NgoAVIII>GAC.....TGA)|(?P<NgoAVIII_as>TCA.....GTC)',
@@ -13284,6 +13888,7 @@ def _temp():
     }
 rest_dict['NgoAVIII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<NgoMIV>GCCGGC)',
@@ -13306,6 +13911,7 @@ def _temp():
     }
 rest_dict['NgoMIV'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<NhaXI>CAAG[AG]AG)|(?P<NhaXI_as>CT[CT]CTTG)',
@@ -13328,6 +13934,7 @@ def _temp():
     }
 rest_dict['NhaXI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<NheI>GCTAGC)',
@@ -13350,6 +13957,7 @@ def _temp():
     }
 rest_dict['NheI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<NhoI>GC[AT]GC)',
@@ -13372,6 +13980,7 @@ def _temp():
     }
 rest_dict['NhoI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<NlaCI>CATCAC)|(?P<NlaCI_as>GTGATG)',
@@ -13394,6 +14003,7 @@ def _temp():
     }
 rest_dict['NlaCI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<NlaIII>CATG)',
@@ -13416,6 +14026,7 @@ def _temp():
     }
 rest_dict['NlaIII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<NlaIV>GG..CC)',
@@ -13438,6 +14049,7 @@ def _temp():
     }
 rest_dict['NlaIV'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Nli3877I>C[CT]CG[AG]G)',
@@ -13460,6 +14072,7 @@ def _temp():
     }
 rest_dict['Nli3877I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<NmeAIII>GCCGAG)|(?P<NmeAIII_as>CTCGGC)',
@@ -13482,6 +14095,7 @@ def _temp():
     }
 rest_dict['NmeAIII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<NmeDI>[AG]CCGG[CT])',
@@ -13504,6 +14118,7 @@ def _temp():
     }
 rest_dict['NmeDI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<NmuCI>GT[CG]AC)',
@@ -13526,6 +14141,7 @@ def _temp():
     }
 rest_dict['NmuCI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<NotI>GCGGCCGC)',
@@ -13548,6 +14164,7 @@ def _temp():
     }
 rest_dict['NotI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<NruI>TCGCGA)',
@@ -13570,6 +14187,7 @@ def _temp():
     }
 rest_dict['NruI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<NsbI>TGCGCA)',
@@ -13592,6 +14210,7 @@ def _temp():
     }
 rest_dict['NsbI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<NsiI>ATGCAT)',
@@ -13614,6 +14233,7 @@ def _temp():
     }
 rest_dict['NsiI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<NspBII>C[AC]GC[GT]G)',
@@ -13636,6 +14256,7 @@ def _temp():
     }
 rest_dict['NspBII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<NspI>[AG]CATG[CT])',
@@ -13658,6 +14279,7 @@ def _temp():
     }
 rest_dict['NspI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<NspV>TTCGAA)',
@@ -13680,6 +14302,7 @@ def _temp():
     }
 rest_dict['NspV'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<OliI>CAC....GTG)',
@@ -13702,6 +14325,7 @@ def _temp():
     }
 rest_dict['OliI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<OspHL35III>[CT]AGGAG)|(?P<OspHL35III_as>CTCCT[AG])',
@@ -13724,6 +14348,7 @@ def _temp():
     }
 rest_dict['OspHL35III'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PabI>GTAC)',
@@ -13746,6 +14371,7 @@ def _temp():
     }
 rest_dict['PabI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Pac19842II>CCTTGA)|(?P<Pac19842II_as>TCAAGG)',
@@ -13768,6 +14394,7 @@ def _temp():
     }
 rest_dict['Pac19842II'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PacI>TTAATTAA)',
@@ -13790,6 +14417,7 @@ def _temp():
     }
 rest_dict['PacI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PaeI>GCATGC)',
@@ -13812,6 +14440,7 @@ def _temp():
     }
 rest_dict['PaeI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PaeR7I>CTCGAG)',
@@ -13834,6 +14463,7 @@ def _temp():
     }
 rest_dict['PaeR7I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PagI>TCATGA)',
@@ -13856,6 +14486,7 @@ def _temp():
     }
 rest_dict['PagI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Pal408I>CC[AG]TGAG)|(?P<Pal408I_as>CTCA[CT]GG)',
@@ -13878,6 +14509,7 @@ def _temp():
     }
 rest_dict['Pal408I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PalAI>GGCGCGCC)',
@@ -13900,6 +14532,7 @@ def _temp():
     }
 rest_dict['PalAI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PasI>CCC[AT]GGG)',
@@ -13922,6 +14555,7 @@ def _temp():
     }
 rest_dict['PasI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PauI>GCGCGC)',
@@ -13944,6 +14578,7 @@ def _temp():
     }
 rest_dict['PauI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PceI>AGGCCT)',
@@ -13966,6 +14601,7 @@ def _temp():
     }
 rest_dict['PceI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PciI>ACATGT)',
@@ -13988,6 +14624,7 @@ def _temp():
     }
 rest_dict['PciI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PciSI>GCTCTTC)|(?P<PciSI_as>GAAGAGC)',
@@ -14010,6 +14647,7 @@ def _temp():
     }
 rest_dict['PciSI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PcsI>[AT]CG.......CG[AT])',
@@ -14032,6 +14670,7 @@ def _temp():
     }
 rest_dict['PcsI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PctI>GAATGC)|(?P<PctI_as>GCATTC)',
@@ -14054,6 +14693,7 @@ def _temp():
     }
 rest_dict['PctI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Pdi8503III>CCGG.AG)|(?P<Pdi8503III_as>CT.CCGG)',
@@ -14076,6 +14716,7 @@ def _temp():
     }
 rest_dict['Pdi8503III'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PdiI>GCCGGC)',
@@ -14098,6 +14739,7 @@ def _temp():
     }
 rest_dict['PdiI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PdmI>GAA....TTC)',
@@ -14120,6 +14762,7 @@ def _temp():
     }
 rest_dict['PdmI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Pdu1735I>CACCAC)|(?P<Pdu1735I_as>GTGGTG)',
@@ -14142,6 +14785,7 @@ def _temp():
     }
 rest_dict['Pdu1735I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PenI>GCAGT)|(?P<PenI_as>ACTGC)',
@@ -14164,6 +14808,7 @@ def _temp():
     }
 rest_dict['PenI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PfeI>GA[AT]TC)',
@@ -14186,6 +14831,7 @@ def _temp():
     }
 rest_dict['PfeI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Pfl1108I>TCGTAG)|(?P<Pfl1108I_as>CTACGA)',
@@ -14208,6 +14854,7 @@ def _temp():
     }
 rest_dict['Pfl1108I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Pfl23II>CGTACG)',
@@ -14230,6 +14877,7 @@ def _temp():
     }
 rest_dict['Pfl23II'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PflFI>GAC...GTC)',
@@ -14252,6 +14900,7 @@ def _temp():
     }
 rest_dict['PflFI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PflMI>CCA.....TGG)',
@@ -14274,6 +14923,7 @@ def _temp():
     }
 rest_dict['PflMI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PfoI>TCC.GGA)',
@@ -14296,6 +14946,7 @@ def _temp():
     }
 rest_dict['PfoI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PinAI>ACCGGT)',
@@ -14318,6 +14969,7 @@ def _temp():
     }
 rest_dict['PinAI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PkrI>GC.GC)',
@@ -14340,6 +14992,7 @@ def _temp():
     }
 rest_dict['PkrI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PlaDI>CATCAG)|(?P<PlaDI_as>CTGATG)',
@@ -14362,6 +15015,7 @@ def _temp():
     }
 rest_dict['PlaDI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Ple19I>CGATCG)',
@@ -14384,6 +15038,7 @@ def _temp():
     }
 rest_dict['Ple19I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PleI>GAGTC)|(?P<PleI_as>GACTC)',
@@ -14406,6 +15061,7 @@ def _temp():
     }
 rest_dict['PleI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PliMI>CGCCGAC)|(?P<PliMI_as>GTCGGCG)',
@@ -14428,6 +15084,7 @@ def _temp():
     }
 rest_dict['PliMI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PluTI>GGCGCC)',
@@ -14450,6 +15107,7 @@ def _temp():
     }
 rest_dict['PluTI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PmaCI>CACGTG)',
@@ -14472,6 +15130,7 @@ def _temp():
     }
 rest_dict['PmaCI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Pme5II>GACGAG)|(?P<Pme5II_as>CTCGTC)',
@@ -14494,6 +15153,7 @@ def _temp():
     }
 rest_dict['Pme5II'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PmeI>GTTTAAAC)',
@@ -14516,6 +15176,7 @@ def _temp():
     }
 rest_dict['PmeI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PmeS132I>GACGAG)|(?P<PmeS132I_as>CTCGTC)',
@@ -14538,6 +15199,7 @@ def _temp():
     }
 rest_dict['PmeS132I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PmlI>CACGTG)',
@@ -14560,6 +15222,7 @@ def _temp():
     }
 rest_dict['PmlI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PpiI>GAAC.....CTC)|(?P<PpiI_as>GAG.....GTTC)',
@@ -14582,6 +15245,7 @@ def _temp():
     }
 rest_dict['PpiI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PpsI>GAGTC)|(?P<PpsI_as>GACTC)',
@@ -14604,6 +15268,7 @@ def _temp():
     }
 rest_dict['PpsI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Ppu10I>ATGCAT)',
@@ -14626,6 +15291,7 @@ def _temp():
     }
 rest_dict['Ppu10I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Ppu21I>[CT]ACGT[AG])',
@@ -14648,6 +15314,7 @@ def _temp():
     }
 rest_dict['Ppu21I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PpuMI>[AG]GG[AT]CC[CT])',
@@ -14670,6 +15337,7 @@ def _temp():
     }
 rest_dict['PpuMI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PscI>ACATGT)',
@@ -14692,6 +15360,7 @@ def _temp():
     }
 rest_dict['PscI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Pse18267I>[AG]CCGAAG)|(?P<Pse18267I_as>CTTCGG[CT])',
@@ -14714,6 +15383,7 @@ def _temp():
     }
 rest_dict['Pse18267I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PshAI>GAC....GTC)',
@@ -14736,6 +15406,7 @@ def _temp():
     }
 rest_dict['PshAI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PshBI>ATTAAT)',
@@ -14758,6 +15429,7 @@ def _temp():
     }
 rest_dict['PshBI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PsiI>TTATAA)',
@@ -14780,6 +15452,7 @@ def _temp():
     }
 rest_dict['PsiI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Psp0357II>GCGAAG)|(?P<Psp0357II_as>CTTCGC)',
@@ -14802,6 +15475,7 @@ def _temp():
     }
 rest_dict['Psp0357II'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Psp03I>GG[AT]CC)',
@@ -14824,6 +15498,7 @@ def _temp():
     }
 rest_dict['Psp03I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Psp10HII>G[AG]AGCAG)|(?P<Psp10HII_as>CTGCT[CT]C)',
@@ -14846,6 +15521,7 @@ def _temp():
     }
 rest_dict['Psp10HII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Psp124BI>GAGCTC)',
@@ -14868,6 +15544,7 @@ def _temp():
     }
 rest_dict['Psp124BI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Psp1406I>AACGTT)',
@@ -14890,6 +15567,7 @@ def _temp():
     }
 rest_dict['Psp1406I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Psp5II>[AG]GG[AT]CC[CT])',
@@ -14912,6 +15590,7 @@ def _temp():
     }
 rest_dict['Psp5II'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Psp6I>CC[AT]GG)',
@@ -14934,6 +15613,7 @@ def _temp():
     }
 rest_dict['Psp6I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PspCI>CACGTG)',
@@ -14956,6 +15636,7 @@ def _temp():
     }
 rest_dict['PspCI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PspEI>GGT.ACC)',
@@ -14978,6 +15659,7 @@ def _temp():
     }
 rest_dict['PspEI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PspFI>CCCAGC)|(?P<PspFI_as>GCTGGG)',
@@ -15000,6 +15682,7 @@ def _temp():
     }
 rest_dict['PspFI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PspGI>CC[AT]GG)',
@@ -15022,6 +15705,7 @@ def _temp():
     }
 rest_dict['PspGI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PspLI>CGTACG)',
@@ -15044,6 +15728,7 @@ def _temp():
     }
 rest_dict['PspLI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PspN4I>GG..CC)',
@@ -15066,6 +15751,7 @@ def _temp():
     }
 rest_dict['PspN4I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PspOMI>GGGCCC)',
@@ -15088,6 +15774,7 @@ def _temp():
     }
 rest_dict['PspOMI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PspOMII>CGCCCA[AG])|(?P<PspOMII_as>[CT]TGGGCG)',
@@ -15110,6 +15797,7 @@ def _temp():
     }
 rest_dict['PspOMII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PspPI>GG.CC)',
@@ -15132,6 +15820,7 @@ def _temp():
     }
 rest_dict['PspPI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PspPPI>[AG]GG[AT]CC[CT])',
@@ -15154,6 +15843,7 @@ def _temp():
     }
 rest_dict['PspPPI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PspPRI>CC[CT]CAG)|(?P<PspPRI_as>CTG[AG]GG)',
@@ -15176,6 +15866,7 @@ def _temp():
     }
 rest_dict['PspPRI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PspXI>[ACG]CTCGAG[CGT])',
@@ -15198,6 +15889,7 @@ def _temp():
     }
 rest_dict['PspXI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PsrI>GAAC......TAC)|(?P<PsrI_as>GTA......GTTC)',
@@ -15220,6 +15912,7 @@ def _temp():
     }
 rest_dict['PsrI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PssI>[AG]GG.CC[CT])',
@@ -15242,6 +15935,7 @@ def _temp():
     }
 rest_dict['PssI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Pst14472I>C.[CT]ACAC)|(?P<Pst14472I_as>GTGT[AG].G)',
@@ -15264,6 +15958,7 @@ def _temp():
     }
 rest_dict['Pst14472I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PstI>CTGCAG)',
@@ -15286,6 +15981,7 @@ def _temp():
     }
 rest_dict['PstI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PstNI>CAG...CTG)',
@@ -15308,6 +16004,7 @@ def _temp():
     }
 rest_dict['PstNI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PsuGI>[CGT][CGT]CG[AGT])|(?P<PsuGI_as>[ACT]CG[ACG][ACG])',
@@ -15330,6 +16027,7 @@ def _temp():
     }
 rest_dict['PsuGI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PsuI>[AG]GATC[CT])',
@@ -15352,6 +16050,7 @@ def _temp():
     }
 rest_dict['PsuI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PsyI>GAC...GTC)',
@@ -15374,6 +16073,7 @@ def _temp():
     }
 rest_dict['PsyI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PteI>GCGCGC)',
@@ -15396,6 +16096,7 @@ def _temp():
     }
 rest_dict['PteI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PvuI>CGATCG)',
@@ -15418,6 +16119,7 @@ def _temp():
     }
 rest_dict['PvuI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<PvuII>CAGCTG)',
@@ -15440,6 +16142,7 @@ def _temp():
     }
 rest_dict['PvuII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Rba2021I>CACGAG[ACT])|(?P<Rba2021I_as>[AGT]CTCGTG)',
@@ -15462,6 +16165,7 @@ def _temp():
     }
 rest_dict['Rba2021I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<RceI>CATCGAC)|(?P<RceI_as>GTCGATG)',
@@ -15484,6 +16188,7 @@ def _temp():
     }
 rest_dict['RceI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<RdeGBI>CCGCAG)|(?P<RdeGBI_as>CTGCGG)',
@@ -15506,6 +16211,7 @@ def _temp():
     }
 rest_dict['RdeGBI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<RdeGBII>ACCCAG)|(?P<RdeGBII_as>CTGGGT)',
@@ -15528,6 +16234,7 @@ def _temp():
     }
 rest_dict['RdeGBII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<RdeGBIII>TG[AG][CT]CA)',
@@ -15550,6 +16257,7 @@ def _temp():
     }
 rest_dict['RdeGBIII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<RflFIII>CGCCAG)|(?P<RflFIII_as>CTGGCG)',
@@ -15572,6 +16280,7 @@ def _temp():
     }
 rest_dict['RflFIII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<RgaI>GCGATCGC)',
@@ -15594,6 +16303,7 @@ def _temp():
     }
 rest_dict['RgaI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<RigI>GGCCGGCC)',
@@ -15616,6 +16326,7 @@ def _temp():
     }
 rest_dict['RigI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<RlaI>[ACG]C[AT])|(?P<RlaI_as>[AT]G[CGT])',
@@ -15638,6 +16349,7 @@ def _temp():
     }
 rest_dict['RlaI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<RleAI>CCCACA)|(?P<RleAI_as>TGTGGG)',
@@ -15660,6 +16372,7 @@ def _temp():
     }
 rest_dict['RleAI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<RpaB5I>CG[AG]GGAC)|(?P<RpaB5I_as>GTCC[CT]CG)',
@@ -15682,6 +16395,7 @@ def _temp():
     }
 rest_dict['RpaB5I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<RpaBI>CCCGCAG)|(?P<RpaBI_as>CTGCGGG)',
@@ -15704,6 +16418,7 @@ def _temp():
     }
 rest_dict['RpaBI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<RpaI>GT[CT]GGAG)|(?P<RpaI_as>CTCC[AG]AC)',
@@ -15726,6 +16441,7 @@ def _temp():
     }
 rest_dict['RpaI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<RpaTI>G[AG]TGGAG)|(?P<RpaTI_as>CTCCA[CT]C)',
@@ -15748,6 +16464,7 @@ def _temp():
     }
 rest_dict['RpaTI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<RruI>TCGCGA)',
@@ -15770,6 +16487,7 @@ def _temp():
     }
 rest_dict['RruI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<RsaI>GTAC)',
@@ -15792,6 +16510,7 @@ def _temp():
     }
 rest_dict['RsaI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<RsaNI>GTAC)',
@@ -15814,6 +16533,7 @@ def _temp():
     }
 rest_dict['RsaNI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<RseI>CA[CT]....[AG]TG)',
@@ -15836,6 +16556,7 @@ def _temp():
     }
 rest_dict['RseI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Rsr2I>CGG[AT]CCG)',
@@ -15858,6 +16579,7 @@ def _temp():
     }
 rest_dict['Rsr2I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<RsrII>CGG[AT]CCG)',
@@ -15880,6 +16602,7 @@ def _temp():
     }
 rest_dict['RsrII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SacI>GAGCTC)',
@@ -15902,6 +16625,7 @@ def _temp():
     }
 rest_dict['SacI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SacII>CCGCGG)',
@@ -15924,6 +16648,7 @@ def _temp():
     }
 rest_dict['SacII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Saf8902III>CAAT.AG)|(?P<Saf8902III_as>CT.ATTG)',
@@ -15946,6 +16671,7 @@ def _temp():
     }
 rest_dict['Saf8902III'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SalI>GTCGAC)',
@@ -15968,6 +16694,7 @@ def _temp():
     }
 rest_dict['SalI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SanDI>GGG[AT]CCC)',
@@ -15990,6 +16717,7 @@ def _temp():
     }
 rest_dict['SanDI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SapI>GCTCTTC)|(?P<SapI_as>GAAGAGC)',
@@ -16012,6 +16740,7 @@ def _temp():
     }
 rest_dict['SapI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SaqAI>TTAA)',
@@ -16034,6 +16763,7 @@ def _temp():
     }
 rest_dict['SaqAI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SatI>GC.GC)',
@@ -16056,6 +16786,7 @@ def _temp():
     }
 rest_dict['SatI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Sau3AI>GATC)',
@@ -16078,6 +16809,7 @@ def _temp():
     }
 rest_dict['Sau3AI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Sau96I>GG.CC)',
@@ -16100,6 +16832,7 @@ def _temp():
     }
 rest_dict['Sau96I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SauI>CCT.AGG)',
@@ -16122,6 +16855,7 @@ def _temp():
     }
 rest_dict['SauI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SbfI>CCTGCAGG)',
@@ -16144,6 +16878,7 @@ def _temp():
     }
 rest_dict['SbfI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Sbo46I>TGAAC)|(?P<Sbo46I_as>GTTCA)',
@@ -16166,6 +16901,7 @@ def _temp():
     }
 rest_dict['Sbo46I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<ScaI>AGTACT)',
@@ -16188,6 +16924,7 @@ def _temp():
     }
 rest_dict['ScaI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SchI>GAGTC)|(?P<SchI_as>GACTC)',
@@ -16210,6 +16947,7 @@ def _temp():
     }
 rest_dict['SchI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SciI>CTCGAG)',
@@ -16232,6 +16970,7 @@ def _temp():
     }
 rest_dict['SciI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<ScrFI>CC.GG)',
@@ -16254,6 +16993,7 @@ def _temp():
     }
 rest_dict['ScrFI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SdaI>CCTGCAGG)',
@@ -16276,6 +17016,7 @@ def _temp():
     }
 rest_dict['SdaI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SdeAI>CAG[AG]AG)|(?P<SdeAI_as>CT[CT]CTG)',
@@ -16298,6 +17039,7 @@ def _temp():
     }
 rest_dict['SdeAI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SdeOSI>GAC....[AG]TGA)|(?P<SdeOSI_as>TCA[CT]....GTC)',
@@ -16320,6 +17062,7 @@ def _temp():
     }
 rest_dict['SdeOSI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SduI>G[AGT]GC[ACT]C)',
@@ -16342,6 +17085,7 @@ def _temp():
     }
 rest_dict['SduI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SecI>CC..GG)',
@@ -16364,6 +17108,7 @@ def _temp():
     }
 rest_dict['SecI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SelI>CGCG)',
@@ -16386,6 +17131,7 @@ def _temp():
     }
 rest_dict['SelI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Sen13311III>GATCAG)|(?P<Sen13311III_as>CTGATC)',
@@ -16408,6 +17154,7 @@ def _temp():
     }
 rest_dict['Sen13311III'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Sen1736II>GATCAG)|(?P<Sen1736II_as>CTGATC)',
@@ -16430,6 +17177,7 @@ def _temp():
     }
 rest_dict['Sen1736II'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SenTFIV>GATCAG)|(?P<SenTFIV_as>CTGATC)',
@@ -16452,6 +17200,7 @@ def _temp():
     }
 rest_dict['SenTFIV'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SetI>A[CG][CG]T)',
@@ -16474,6 +17223,7 @@ def _temp():
     }
 rest_dict['SetI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SexAI>ACC[AT]GGT)',
@@ -16496,6 +17246,7 @@ def _temp():
     }
 rest_dict['SexAI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SfaAI>GCGATCGC)',
@@ -16518,6 +17269,7 @@ def _temp():
     }
 rest_dict['SfaAI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SfaNI>GCATC)|(?P<SfaNI_as>GATGC)',
@@ -16540,6 +17292,7 @@ def _temp():
     }
 rest_dict['SfaNI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SfcI>CT[AG][CT]AG)',
@@ -16562,6 +17315,7 @@ def _temp():
     }
 rest_dict['SfcI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SfeI>CT[AG][CT]AG)',
@@ -16584,6 +17338,7 @@ def _temp():
     }
 rest_dict['SfeI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SfiI>GGCC.....GGCC)',
@@ -16606,6 +17361,7 @@ def _temp():
     }
 rest_dict['SfiI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SfoI>GGCGCC)',
@@ -16628,6 +17384,7 @@ def _temp():
     }
 rest_dict['SfoI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Sfr274I>CTCGAG)',
@@ -16650,6 +17407,7 @@ def _temp():
     }
 rest_dict['Sfr274I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Sfr303I>CCGCGG)',
@@ -16672,6 +17430,7 @@ def _temp():
     }
 rest_dict['Sfr303I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SfuI>TTCGAA)',
@@ -16694,6 +17453,7 @@ def _temp():
     }
 rest_dict['SfuI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SgeI>C..G)',
@@ -16716,6 +17476,7 @@ def _temp():
     }
 rest_dict['SgeI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SgfI>GCGATCGC)',
@@ -16738,6 +17499,7 @@ def _temp():
     }
 rest_dict['SgfI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SgrAI>C[AG]CCGG[CT]G)',
@@ -16760,6 +17522,7 @@ def _temp():
     }
 rest_dict['SgrAI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SgrBI>CCGCGG)',
@@ -16782,6 +17545,7 @@ def _temp():
     }
 rest_dict['SgrBI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SgrDI>CGTCGACG)',
@@ -16804,6 +17568,7 @@ def _temp():
     }
 rest_dict['SgrDI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SgrTI>CC[AGT][CG])|(?P<SgrTI_as>[CG][ACT]GG)',
@@ -16826,6 +17591,7 @@ def _temp():
     }
 rest_dict['SgrTI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SgsI>GGCGCGCC)',
@@ -16848,6 +17614,7 @@ def _temp():
     }
 rest_dict['SgsI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SimI>GGGTC)|(?P<SimI_as>GACCC)',
@@ -16870,6 +17637,7 @@ def _temp():
     }
 rest_dict['SimI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SinI>GG[AT]CC)',
@@ -16892,6 +17660,7 @@ def _temp():
     }
 rest_dict['SinI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SlaI>CTCGAG)',
@@ -16914,6 +17683,7 @@ def _temp():
     }
 rest_dict['SlaI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SmaI>CCCGGG)',
@@ -16936,6 +17706,7 @@ def _temp():
     }
 rest_dict['SmaI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SmiI>ATTTAAAT)',
@@ -16958,6 +17729,7 @@ def _temp():
     }
 rest_dict['SmiI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SmiMI>CA[CT]....[AG]TG)',
@@ -16980,6 +17752,7 @@ def _temp():
     }
 rest_dict['SmiMI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SmlI>CT[CT][AG]AG)',
@@ -17002,6 +17775,7 @@ def _temp():
     }
 rest_dict['SmlI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SmoI>CT[CT][AG]AG)',
@@ -17024,6 +17798,7 @@ def _temp():
     }
 rest_dict['SmoI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SnaBI>TACGTA)',
@@ -17046,6 +17821,7 @@ def _temp():
     }
 rest_dict['SnaBI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SnaI>GTATAC)',
@@ -17068,6 +17844,7 @@ def _temp():
     }
 rest_dict['SnaI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Sno506I>GGCCGAG)|(?P<Sno506I_as>CTCGGCC)',
@@ -17090,6 +17867,7 @@ def _temp():
     }
 rest_dict['Sno506I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SpeI>ACTAGT)',
@@ -17112,6 +17890,7 @@ def _temp():
     }
 rest_dict['SpeI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SphI>GCATGC)',
@@ -17134,6 +17913,7 @@ def _temp():
     }
 rest_dict['SphI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SplI>CGTACG)',
@@ -17156,6 +17936,7 @@ def _temp():
     }
 rest_dict['SplI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SpnRII>TCGAG)|(?P<SpnRII_as>CTCGA)',
@@ -17178,6 +17959,7 @@ def _temp():
     }
 rest_dict['SpnRII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SpoDI>GCGG[AG]AG)|(?P<SpoDI_as>CT[CT]CCGC)',
@@ -17200,6 +17982,7 @@ def _temp():
     }
 rest_dict['SpoDI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SrfI>GCCCGGGC)',
@@ -17222,6 +18005,7 @@ def _temp():
     }
 rest_dict['SrfI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Sse232I>CGCCGGCG)',
@@ -17244,6 +18028,7 @@ def _temp():
     }
 rest_dict['Sse232I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Sse8387I>CCTGCAGG)',
@@ -17266,6 +18051,7 @@ def _temp():
     }
 rest_dict['Sse8387I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Sse8647I>AGG[AT]CCT)',
@@ -17288,6 +18074,7 @@ def _temp():
     }
 rest_dict['Sse8647I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Sse9I>AATT)',
@@ -17310,6 +18097,7 @@ def _temp():
     }
 rest_dict['Sse9I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SseBI>AGGCCT)',
@@ -17332,6 +18120,7 @@ def _temp():
     }
 rest_dict['SseBI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SsiI>CCGC)|(?P<SsiI_as>GCGG)',
@@ -17354,6 +18143,7 @@ def _temp():
     }
 rest_dict['SsiI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Ssp6803IV>GAAGGC)|(?P<Ssp6803IV_as>GCCTTC)',
@@ -17376,6 +18166,7 @@ def _temp():
     }
 rest_dict['Ssp6803IV'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Ssp714II>CGCAGCG)|(?P<Ssp714II_as>CGCTGCG)',
@@ -17398,6 +18189,7 @@ def _temp():
     }
 rest_dict['Ssp714II'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SspD5I>GGTGA)|(?P<SspD5I_as>TCACC)',
@@ -17420,6 +18212,7 @@ def _temp():
     }
 rest_dict['SspD5I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SspDI>GGCGCC)',
@@ -17442,6 +18235,7 @@ def _temp():
     }
 rest_dict['SspDI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SspI>AATATT)',
@@ -17464,6 +18258,7 @@ def _temp():
     }
 rest_dict['SspI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SspMI>CTAG)',
@@ -17486,6 +18281,7 @@ def _temp():
     }
 rest_dict['SspMI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SstE37I>CGAAGAC)|(?P<SstE37I_as>GTCTTCG)',
@@ -17508,6 +18304,7 @@ def _temp():
     }
 rest_dict['SstE37I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SstI>GAGCTC)',
@@ -17530,6 +18327,7 @@ def _temp():
     }
 rest_dict['SstI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Sth132I>CCCG)|(?P<Sth132I_as>CGGG)',
@@ -17552,6 +18350,7 @@ def _temp():
     }
 rest_dict['Sth132I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Sth20745III>GGACGAC)|(?P<Sth20745III_as>GTCGTCC)',
@@ -17574,6 +18373,7 @@ def _temp():
     }
 rest_dict['Sth20745III'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Sth302II>CCGG)',
@@ -17596,6 +18396,7 @@ def _temp():
     }
 rest_dict['Sth302II'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<StsI>GGATG)|(?P<StsI_as>CATCC)',
@@ -17618,6 +18419,7 @@ def _temp():
     }
 rest_dict['StsI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<StuI>AGGCCT)',
@@ -17640,6 +18442,7 @@ def _temp():
     }
 rest_dict['StuI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Sty13348III>GATCAG)|(?P<Sty13348III_as>CTGATC)',
@@ -17662,6 +18465,7 @@ def _temp():
     }
 rest_dict['Sty13348III'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<StyD4I>CC.GG)',
@@ -17684,6 +18488,7 @@ def _temp():
     }
 rest_dict['StyD4I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<StyI>CC[AT][AT]GG)',
@@ -17706,6 +18511,7 @@ def _temp():
     }
 rest_dict['StyI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<SwaI>ATTTAAAT)',
@@ -17728,6 +18534,7 @@ def _temp():
     }
 rest_dict['SwaI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<TaaI>AC.GT)',
@@ -17750,6 +18557,7 @@ def _temp():
     }
 rest_dict['TaaI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<TaiI>ACGT)',
@@ -17772,6 +18580,7 @@ def _temp():
     }
 rest_dict['TaiI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<TaqI>TCGA)',
@@ -17794,6 +18603,7 @@ def _temp():
     }
 rest_dict['TaqI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<TaqII>GACCGA)|(?P<TaqII_as>TCGGTC)',
@@ -17816,6 +18626,7 @@ def _temp():
     }
 rest_dict['TaqII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<TaqIII>CACCCA)|(?P<TaqIII_as>TGGGTG)',
@@ -17838,6 +18649,7 @@ def _temp():
     }
 rest_dict['TaqIII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<TasI>AATT)',
@@ -17860,6 +18672,7 @@ def _temp():
     }
 rest_dict['TasI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<TatI>[AT]GTAC[AT])',
@@ -17882,6 +18695,7 @@ def _temp():
     }
 rest_dict['TatI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<TauI>GC[CG]GC)',
@@ -17904,6 +18718,7 @@ def _temp():
     }
 rest_dict['TauI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<TfiI>GA[AT]TC)',
@@ -17926,6 +18741,7 @@ def _temp():
     }
 rest_dict['TfiI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Tru1I>TTAA)',
@@ -17948,6 +18764,7 @@ def _temp():
     }
 rest_dict['Tru1I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Tru9I>TTAA)',
@@ -17970,6 +18787,7 @@ def _temp():
     }
 rest_dict['Tru9I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<TscAI>CA[CG]TG)',
@@ -17992,6 +18810,7 @@ def _temp():
     }
 rest_dict['TscAI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<TseFI>GT[CG]AC)',
@@ -18014,6 +18833,7 @@ def _temp():
     }
 rest_dict['TseFI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<TseI>GC[AT]GC)',
@@ -18036,6 +18856,7 @@ def _temp():
     }
 rest_dict['TseI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<TsoI>TA[AG]CCA)|(?P<TsoI_as>TGG[CT]TA)',
@@ -18058,6 +18879,7 @@ def _temp():
     }
 rest_dict['TsoI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Tsp45I>GT[CG]AC)',
@@ -18080,6 +18902,7 @@ def _temp():
     }
 rest_dict['Tsp45I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Tsp4CI>AC.GT)',
@@ -18102,6 +18925,7 @@ def _temp():
     }
 rest_dict['Tsp4CI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<TspARh3I>G[AG]ACGAC)|(?P<TspARh3I_as>GTCGT[CT]C)',
@@ -18124,6 +18948,7 @@ def _temp():
     }
 rest_dict['TspARh3I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<TspDTI>ATGAA)|(?P<TspDTI_as>TTCAT)',
@@ -18146,6 +18971,7 @@ def _temp():
     }
 rest_dict['TspDTI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<TspEI>AATT)',
@@ -18168,6 +18994,7 @@ def _temp():
     }
 rest_dict['TspEI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<TspGWI>ACGGA)|(?P<TspGWI_as>TCCGT)',
@@ -18190,6 +19017,7 @@ def _temp():
     }
 rest_dict['TspGWI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<TspMI>CCCGGG)',
@@ -18212,6 +19040,7 @@ def _temp():
     }
 rest_dict['TspMI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<TspRI>CA[CG]TG)',
@@ -18234,6 +19063,7 @@ def _temp():
     }
 rest_dict['TspRI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<TssI>GAG...CTC)',
@@ -18256,6 +19086,7 @@ def _temp():
     }
 rest_dict['TssI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<TstI>CAC......TCC)|(?P<TstI_as>GGA......GTG)',
@@ -18278,6 +19109,7 @@ def _temp():
     }
 rest_dict['TstI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<TsuI>GCGAC)|(?P<TsuI_as>GTCGC)',
@@ -18300,6 +19132,7 @@ def _temp():
     }
 rest_dict['TsuI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Tth111I>GAC...GTC)',
@@ -18322,6 +19155,7 @@ def _temp():
     }
 rest_dict['Tth111I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Tth111II>CAA[AG]CA)|(?P<Tth111II_as>TG[CT]TTG)',
@@ -18344,6 +19178,7 @@ def _temp():
     }
 rest_dict['Tth111II'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<UbaF11I>TCGTA)|(?P<UbaF11I_as>TACGA)',
@@ -18366,6 +19201,7 @@ def _temp():
     }
 rest_dict['UbaF11I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<UbaF12I>CTAC...GTC)|(?P<UbaF12I_as>GAC...GTAG)',
@@ -18388,6 +19224,7 @@ def _temp():
     }
 rest_dict['UbaF12I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<UbaF13I>GAG......CTGG)|(?P<UbaF13I_as>CCAG......CTC)',
@@ -18410,6 +19247,7 @@ def _temp():
     }
 rest_dict['UbaF13I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<UbaF14I>CCA.....TCG)|(?P<UbaF14I_as>CGA.....TGG)',
@@ -18432,6 +19270,7 @@ def _temp():
     }
 rest_dict['UbaF14I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<UbaF9I>TAC.....[AG]TGT)|(?P<UbaF9I_as>ACA[CT].....GTA)',
@@ -18454,6 +19293,7 @@ def _temp():
     }
 rest_dict['UbaF9I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<UbaPI>CGAACG)|(?P<UbaPI_as>CGTTCG)',
@@ -18476,6 +19316,7 @@ def _temp():
     }
 rest_dict['UbaPI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<UcoMSI>GAGCTC)',
@@ -18498,6 +19339,7 @@ def _temp():
     }
 rest_dict['UcoMSI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<UnbI>GG.CC)',
@@ -18520,6 +19362,7 @@ def _temp():
     }
 rest_dict['UnbI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Van91I>CCA.....TGG)',
@@ -18542,6 +19385,7 @@ def _temp():
     }
 rest_dict['Van91I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Vha464I>CTTAAG)',
@@ -18564,6 +19408,7 @@ def _temp():
     }
 rest_dict['Vha464I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<VneI>GTGCAC)',
@@ -18586,6 +19431,7 @@ def _temp():
     }
 rest_dict['VneI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<VpaK11AI>GG[AT]CC)',
@@ -18608,6 +19454,7 @@ def _temp():
     }
 rest_dict['VpaK11AI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<VpaK11BI>GG[AT]CC)',
@@ -18630,6 +19477,7 @@ def _temp():
     }
 rest_dict['VpaK11BI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<VspI>ATTAAT)',
@@ -18652,6 +19500,7 @@ def _temp():
     }
 rest_dict['VspI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Vtu19109I>CAC[AG]A[CT]C)|(?P<Vtu19109I_as>G[AG]T[CT]GTG)',
@@ -18674,6 +19523,7 @@ def _temp():
     }
 rest_dict['Vtu19109I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<WviI>CAC[AG]AG)|(?P<WviI_as>CT[CT]GTG)',
@@ -18696,6 +19546,7 @@ def _temp():
     }
 rest_dict['WviI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<XagI>CCT.....AGG)',
@@ -18718,6 +19569,7 @@ def _temp():
     }
 rest_dict['XagI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<XapI>[AG]AATT[CT])',
@@ -18740,6 +19592,7 @@ def _temp():
     }
 rest_dict['XapI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<XbaI>TCTAGA)',
@@ -18762,6 +19615,7 @@ def _temp():
     }
 rest_dict['XbaI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<XceI>[AG]CATG[CT])',
@@ -18784,6 +19638,7 @@ def _temp():
     }
 rest_dict['XceI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<XcmI>CCA.........TGG)',
@@ -18806,6 +19661,7 @@ def _temp():
     }
 rest_dict['XcmI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<XhoI>CTCGAG)',
@@ -18828,6 +19684,7 @@ def _temp():
     }
 rest_dict['XhoI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<XhoII>[AG]GATC[CT])',
@@ -18850,6 +19707,7 @@ def _temp():
     }
 rest_dict['XhoII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<XmaI>CCCGGG)',
@@ -18872,6 +19730,7 @@ def _temp():
     }
 rest_dict['XmaI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<XmaIII>CGGCCG)',
@@ -18894,6 +19753,7 @@ def _temp():
     }
 rest_dict['XmaIII'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<XmaJI>CCTAGG)',
@@ -18916,6 +19776,7 @@ def _temp():
     }
 rest_dict['XmaJI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<XmiI>GT[AC][GT]AC)',
@@ -18938,6 +19799,7 @@ def _temp():
     }
 rest_dict['XmiI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<XmnI>GAA....TTC)',
@@ -18960,6 +19822,7 @@ def _temp():
     }
 rest_dict['XmnI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<XspI>CTAG)',
@@ -18982,6 +19845,7 @@ def _temp():
     }
 rest_dict['XspI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<YkrI>C)|(?P<YkrI_as>G)',
@@ -19004,6 +19868,7 @@ def _temp():
     }
 rest_dict['YkrI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Yps3606I>CGGAAG)|(?P<Yps3606I_as>CTTCCG)',
@@ -19026,6 +19891,7 @@ def _temp():
     }
 rest_dict['Yps3606I'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<ZraI>GACGTC)',
@@ -19048,6 +19914,7 @@ def _temp():
     }
 rest_dict['ZraI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<ZrmI>AGTACT)',
@@ -19070,6 +19937,7 @@ def _temp():
     }
 rest_dict['ZrmI'] = _temp()
 
+
 def _temp():
     return {
         'compsite': '(?P<Zsp2I>ATGCAT)',
@@ -19093,6 +19961,8 @@ def _temp():
 rest_dict['Zsp2I'] = _temp()
 
 suppliers = {}
+
+
 def _temp():
     return (
         'Life Technologies',
@@ -19100,6 +19970,7 @@ def _temp():
     )
 suppliers['B'] = _temp()
 
+
 def _temp():
     return (
         'Minotech Biotechnology',
@@ -19107,6 +19978,7 @@ def _temp():
     )
 suppliers['C'] = _temp()
 
+
 def _temp():
     return (
         'Agilent Technologies',
@@ -19114,6 +19986,7 @@ def _temp():
     )
 suppliers['E'] = _temp()
 
+
 def _temp():
     return (
         'SibEnzyme Ltd.',
@@ -19121,6 +19994,7 @@ def _temp():
     )
 suppliers['I'] = _temp()
 
+
 def _temp():
     return (
         'Nippon Gene Co., Ltd.',
@@ -19128,6 +20002,7 @@ def _temp():
     )
 suppliers['J'] = _temp()
 
+
 def _temp():
     return (
         'Takara Bio Inc.',
@@ -19135,6 +20010,7 @@ def _temp():
     )
 suppliers['K'] = _temp()
 
+
 def _temp():
     return (
         'Roche Applied Science',
@@ -19142,6 +20018,7 @@ def _temp():
     )
 suppliers['M'] = _temp()
 
+
 def _temp():
     return (
         'New England Biolabs',
@@ -19149,6 +20026,7 @@ def _temp():
     )
 suppliers['N'] = _temp()
 
+
 def _temp():
     return (
         'Toyobo Biochemicals',
@@ -19156,6 +20034,7 @@ def _temp():
     )
 suppliers['O'] = _temp()
 
+
 def _temp():
     return (
         'Molecular Biology Resources - CHIMERx',
@@ -19163,6 +20042,7 @@ def _temp():
     )
 suppliers['Q'] = _temp()
 
+
 def _temp():
     return (
         'Promega Corporation',
@@ -19170,6 +20050,7 @@ def _temp():
     )
 suppliers['R'] = _temp()
 
+
 def _temp():
     return (
         'Sigma Chemical Corporation',
@@ -19177,6 +20058,7 @@ def _temp():
     )
 suppliers['S'] = _temp()
 
+
 def _temp():
     return (
         'Vivantis Technologies',
@@ -19184,6 +20066,7 @@ def _temp():
     )
 suppliers['V'] = _temp()
 
+
 def _temp():
     return (
         'EURx Ltd.',
@@ -19191,6 +20074,7 @@ def _temp():
     )
 suppliers['X'] = _temp()
 
+
 def _temp():
     return (
         'SinaClon BioScience Co.',
@@ -19199,6 +20083,8 @@ def _temp():
 suppliers['Y'] = _temp()
 
 typedict = {}
+
+
 def _temp():
     return (
         ('Palindromic', 'TwoCuts', 'Ov5', 'Ambiguous', 'Meth_Dep', 'Not_available', 'AbstractCut', 'RestrictionType'),
@@ -19206,6 +20092,7 @@ def _temp():
     )
 typedict['type130'] = _temp()
 
+
 def _temp():
     return (
         ('Palindromic', 'TwoCuts', 'Ov5', 'Ambiguous', 'Meth_Undep', 'Not_available', 'AbstractCut', 'RestrictionType'),
@@ -19213,6 +20100,7 @@ def _temp():
     )
 typedict['type132'] = _temp()
 
+
 def _temp():
     return (
         ('Palindromic', 'TwoCuts', 'Ov3', 'Ambiguous', 'Meth_Dep', 'Not_available', 'AbstractCut', 'RestrictionType'),
@@ -19220,6 +20108,7 @@ def _temp():
     )
 typedict['type142'] = _temp()
 
+
 def _temp():
     return (
         ('Palindromic', 'TwoCuts', 'Ov3', 'Ambiguous', 'Meth_Undep', 'Commercially_available', 'AbstractCut', 'RestrictionType'),
@@ -19227,6 +20116,7 @@ def _temp():
     )
 typedict['type143'] = _temp()
 
+
 def _temp():
     return (
         ('Palindromic', 'TwoCuts', 'Ov3', 'Ambiguous', 'Meth_Undep', 'Not_available', 'AbstractCut', 'RestrictionType'),
@@ -19234,6 +20124,7 @@ def _temp():
     )
 typedict['type144'] = _temp()
 
+
 def _temp():
     return (
         ('NonPalindromic', 'NoCut', 'Unknown', 'NotDefined', 'Meth_Dep', 'Not_available', 'AbstractCut', 'RestrictionType'),
@@ -19241,6 +20132,7 @@ def _temp():
     )
 typedict['type146'] = _temp()
 
+
 def _temp():
     return (
         ('NonPalindromic', 'NoCut', 'Unknown', 'NotDefined', 'Meth_Undep', 'Not_available', 'AbstractCut', 'RestrictionType'),
@@ -19248,6 +20140,7 @@ def _temp():
     )
 typedict['type148'] = _temp()
 
+
 def _temp():
     return (
         ('Palindromic', 'NoCut', 'Unknown', 'NotDefined', 'Meth_Dep', 'Not_available', 'AbstractCut', 'RestrictionType'),
@@ -19255,6 +20148,7 @@ def _temp():
     )
 typedict['type2'] = _temp()
 
+
 def _temp():
     return (
         ('NonPalindromic', 'OneCut', 'Blunt', 'Defined', 'Meth_Dep', 'Commercially_available', 'AbstractCut', 'RestrictionType'),
@@ -19262,6 +20156,7 @@ def _temp():
     )
 typedict['type209'] = _temp()
 
+
 def _temp():
     return (
         ('NonPalindromic', 'OneCut', 'Blunt', 'Defined', 'Meth_Dep', 'Not_available', 'AbstractCut', 'RestrictionType'),
@@ -19269,6 +20164,7 @@ def _temp():
     )
 typedict['type210'] = _temp()
 
+
 def _temp():
     return (
         ('NonPalindromic', 'OneCut', 'Blunt', 'Defined', 'Meth_Undep', 'Commercially_available', 'AbstractCut', 'RestrictionType'),
@@ -19276,6 +20172,7 @@ def _temp():
     )
 typedict['type211'] = _temp()
 
+
 def _temp():
     return (
         ('NonPalindromic', 'OneCut', 'Blunt', 'Defined', 'Meth_Undep', 'Not_available', 'AbstractCut', 'RestrictionType'),
@@ -19283,6 +20180,7 @@ def _temp():
     )
 typedict['type212'] = _temp()
 
+
 def _temp():
     return (
         ('NonPalindromic', 'OneCut', 'Ov5', 'Defined', 'Meth_Dep', 'Commercially_available', 'AbstractCut', 'RestrictionType'),
@@ -19290,6 +20188,7 @@ def _temp():
     )
 typedict['type221'] = _temp()
 
+
 def _temp():
     return (
         ('NonPalindromic', 'OneCut', 'Ov5', 'Defined', 'Meth_Undep', 'Commercially_available', 'AbstractCut', 'RestrictionType'),
@@ -19297,6 +20196,7 @@ def _temp():
     )
 typedict['type223'] = _temp()
 
+
 def _temp():
     return (
         ('NonPalindromic', 'OneCut', 'Ov5', 'Defined', 'Meth_Undep', 'Not_available', 'AbstractCut', 'RestrictionType'),
@@ -19304,6 +20204,7 @@ def _temp():
     )
 typedict['type224'] = _temp()
 
+
 def _temp():
     return (
         ('NonPalindromic', 'OneCut', 'Ov5', 'Ambiguous', 'Meth_Dep', 'Commercially_available', 'AbstractCut', 'RestrictionType'),
@@ -19311,6 +20212,7 @@ def _temp():
     )
 typedict['type225'] = _temp()
 
+
 def _temp():
     return (
         ('NonPalindromic', 'OneCut', 'Ov5', 'Ambiguous', 'Meth_Dep', 'Not_available', 'AbstractCut', 'RestrictionType'),
@@ -19318,6 +20220,7 @@ def _temp():
     )
 typedict['type226'] = _temp()
 
+
 def _temp():
     return (
         ('NonPalindromic', 'OneCut', 'Ov5', 'Ambiguous', 'Meth_Undep', 'Commercially_available', 'AbstractCut', 'RestrictionType'),
@@ -19325,6 +20228,7 @@ def _temp():
     )
 typedict['type227'] = _temp()
 
+
 def _temp():
     return (
         ('NonPalindromic', 'OneCut', 'Ov5', 'Ambiguous', 'Meth_Undep', 'Not_available', 'AbstractCut', 'RestrictionType'),
@@ -19332,6 +20236,7 @@ def _temp():
     )
 typedict['type228'] = _temp()
 
+
 def _temp():
     return (
         ('NonPalindromic', 'OneCut', 'Ov3', 'Defined', 'Meth_Undep', 'Commercially_available', 'AbstractCut', 'RestrictionType'),
@@ -19339,6 +20244,7 @@ def _temp():
     )
 typedict['type235'] = _temp()
 
+
 def _temp():
     return (
         ('NonPalindromic', 'OneCut', 'Ov3', 'Ambiguous', 'Meth_Dep', 'Commercially_available', 'AbstractCut', 'RestrictionType'),
@@ -19346,6 +20252,7 @@ def _temp():
     )
 typedict['type237'] = _temp()
 
+
 def _temp():
     return (
         ('NonPalindromic', 'OneCut', 'Ov3', 'Ambiguous', 'Meth_Dep', 'Not_available', 'AbstractCut', 'RestrictionType'),
@@ -19353,6 +20260,7 @@ def _temp():
     )
 typedict['type238'] = _temp()
 
+
 def _temp():
     return (
         ('NonPalindromic', 'OneCut', 'Ov3', 'Ambiguous', 'Meth_Undep', 'Commercially_available', 'AbstractCut', 'RestrictionType'),
@@ -19360,6 +20268,7 @@ def _temp():
     )
 typedict['type239'] = _temp()
 
+
 def _temp():
     return (
         ('NonPalindromic', 'OneCut', 'Ov3', 'Ambiguous', 'Meth_Undep', 'Not_available', 'AbstractCut', 'RestrictionType'),
@@ -19367,6 +20276,7 @@ def _temp():
     )
 typedict['type240'] = _temp()
 
+
 def _temp():
     return (
         ('NonPalindromic', 'TwoCuts', 'Ov5', 'Ambiguous', 'Meth_Dep', 'Not_available', 'AbstractCut', 'RestrictionType'),
@@ -19374,6 +20284,7 @@ def _temp():
     )
 typedict['type274'] = _temp()
 
+
 def _temp():
     return (
         ('NonPalindromic', 'TwoCuts', 'Ov3', 'Ambiguous', 'Meth_Dep', 'Commercially_available', 'AbstractCut', 'RestrictionType'),
@@ -19381,6 +20292,7 @@ def _temp():
     )
 typedict['type285'] = _temp()
 
+
 def _temp():
     return (
         ('NonPalindromic', 'TwoCuts', 'Ov3', 'Ambiguous', 'Meth_Dep', 'Not_available', 'AbstractCut', 'RestrictionType'),
@@ -19388,6 +20300,7 @@ def _temp():
     )
 typedict['type286'] = _temp()
 
+
 def _temp():
     return (
         ('NonPalindromic', 'TwoCuts', 'Ov3', 'Ambiguous', 'Meth_Undep', 'Commercially_available', 'AbstractCut', 'RestrictionType'),
@@ -19395,6 +20308,7 @@ def _temp():
     )
 typedict['type287'] = _temp()
 
+
 def _temp():
     return (
         ('NonPalindromic', 'TwoCuts', 'Ov3', 'Ambiguous', 'Meth_Undep', 'Not_available', 'AbstractCut', 'RestrictionType'),
@@ -19402,6 +20316,7 @@ def _temp():
     )
 typedict['type288'] = _temp()
 
+
 def _temp():
     return (
         ('Palindromic', 'NoCut', 'Unknown', 'NotDefined', 'Meth_Undep', 'Not_available', 'AbstractCut', 'RestrictionType'),
@@ -19409,6 +20324,7 @@ def _temp():
     )
 typedict['type4'] = _temp()
 
+
 def _temp():
     return (
         ('Palindromic', 'OneCut', 'Blunt', 'Defined', 'Meth_Dep', 'Commercially_available', 'AbstractCut', 'RestrictionType'),
@@ -19416,6 +20332,7 @@ def _temp():
     )
 typedict['type65'] = _temp()
 
+
 def _temp():
     return (
         ('Palindromic', 'OneCut', 'Blunt', 'Defined', 'Meth_Dep', 'Not_available', 'AbstractCut', 'RestrictionType'),
@@ -19423,6 +20340,7 @@ def _temp():
     )
 typedict['type66'] = _temp()
 
+
 def _temp():
     return (
         ('Palindromic', 'OneCut', 'Blunt', 'Defined', 'Meth_Undep', 'Commercially_available', 'AbstractCut', 'RestrictionType'),
@@ -19430,6 +20348,7 @@ def _temp():
     )
 typedict['type67'] = _temp()
 
+
 def _temp():
     return (
         ('Palindromic', 'OneCut', 'Blunt', 'Defined', 'Meth_Undep', 'Not_available', 'AbstractCut', 'RestrictionType'),
@@ -19437,6 +20356,7 @@ def _temp():
     )
 typedict['type68'] = _temp()
 
+
 def _temp():
     return (
         ('Palindromic', 'OneCut', 'Ov5', 'Defined', 'Meth_Dep', 'Commercially_available', 'AbstractCut', 'RestrictionType'),
@@ -19444,6 +20364,7 @@ def _temp():
     )
 typedict['type77'] = _temp()
 
+
 def _temp():
     return (
         ('Palindromic', 'OneCut', 'Ov5', 'Defined', 'Meth_Dep', 'Not_available', 'AbstractCut', 'RestrictionType'),
@@ -19451,6 +20372,7 @@ def _temp():
     )
 typedict['type78'] = _temp()
 
+
 def _temp():
     return (
         ('Palindromic', 'OneCut', 'Ov5', 'Defined', 'Meth_Undep', 'Commercially_available', 'AbstractCut', 'RestrictionType'),
@@ -19458,6 +20380,7 @@ def _temp():
     )
 typedict['type79'] = _temp()
 
+
 def _temp():
     return (
         ('Palindromic', 'OneCut', 'Ov5', 'Defined', 'Meth_Undep', 'Not_available', 'AbstractCut', 'RestrictionType'),
@@ -19465,6 +20388,7 @@ def _temp():
     )
 typedict['type80'] = _temp()
 
+
 def _temp():
     return (
         ('Palindromic', 'OneCut', 'Ov5', 'Ambiguous', 'Meth_Dep', 'Commercially_available', 'AbstractCut', 'RestrictionType'),
@@ -19472,6 +20396,7 @@ def _temp():
     )
 typedict['type81'] = _temp()
 
+
 def _temp():
     return (
         ('Palindromic', 'OneCut', 'Ov5', 'Ambiguous', 'Meth_Dep', 'Not_available', 'AbstractCut', 'RestrictionType'),
@@ -19479,6 +20404,7 @@ def _temp():
     )
 typedict['type82'] = _temp()
 
+
 def _temp():
     return (
         ('Palindromic', 'OneCut', 'Ov5', 'Ambiguous', 'Meth_Undep', 'Commercially_available', 'AbstractCut', 'RestrictionType'),
@@ -19486,6 +20412,7 @@ def _temp():
     )
 typedict['type83'] = _temp()
 
+
 def _temp():
     return (
         ('Palindromic', 'OneCut', 'Ov5', 'Ambiguous', 'Meth_Undep', 'Not_available', 'AbstractCut', 'RestrictionType'),
@@ -19493,6 +20420,7 @@ def _temp():
     )
 typedict['type84'] = _temp()
 
+
 def _temp():
     return (
         ('Palindromic', 'OneCut', 'Ov3', 'Defined', 'Meth_Dep', 'Commercially_available', 'AbstractCut', 'RestrictionType'),
@@ -19500,6 +20428,7 @@ def _temp():
     )
 typedict['type89'] = _temp()
 
+
 def _temp():
     return (
         ('Palindromic', 'OneCut', 'Ov3', 'Defined', 'Meth_Dep', 'Not_available', 'AbstractCut', 'RestrictionType'),
@@ -19507,6 +20436,7 @@ def _temp():
     )
 typedict['type90'] = _temp()
 
+
 def _temp():
     return (
         ('Palindromic', 'OneCut', 'Ov3', 'Defined', 'Meth_Undep', 'Commercially_available', 'AbstractCut', 'RestrictionType'),
@@ -19514,6 +20444,7 @@ def _temp():
     )
 typedict['type91'] = _temp()
 
+
 def _temp():
     return (
         ('Palindromic', 'OneCut', 'Ov3', 'Defined', 'Meth_Undep', 'Not_available', 'AbstractCut', 'RestrictionType'),
@@ -19521,6 +20452,7 @@ def _temp():
     )
 typedict['type92'] = _temp()
 
+
 def _temp():
     return (
         ('Palindromic', 'OneCut', 'Ov3', 'Ambiguous', 'Meth_Dep', 'Commercially_available', 'AbstractCut', 'RestrictionType'),
@@ -19528,6 +20460,7 @@ def _temp():
     )
 typedict['type93'] = _temp()
 
+
 def _temp():
     return (
         ('Palindromic', 'OneCut', 'Ov3', 'Ambiguous', 'Meth_Dep', 'Not_available', 'AbstractCut', 'RestrictionType'),
@@ -19535,6 +20468,7 @@ def _temp():
     )
 typedict['type94'] = _temp()
 
+
 def _temp():
     return (
         ('Palindromic', 'OneCut', 'Ov3', 'Ambiguous', 'Meth_Undep', 'Commercially_available', 'AbstractCut', 'RestrictionType'),
@@ -19542,6 +20476,7 @@ def _temp():
     )
 typedict['type95'] = _temp()
 
+
 def _temp():
     return (
         ('Palindromic', 'OneCut', 'Ov3', 'Ambiguous', 'Meth_Undep', 'Not_available', 'AbstractCut', 'RestrictionType'),
@@ -19550,4 +20485,3 @@ def _temp():
 typedict['type96'] = _temp()
 
 del _temp
-
diff --git a/Bio/Seq.py b/Bio/Seq.py
index 1474c74..fd05ca3 100644
--- a/Bio/Seq.py
+++ b/Bio/Seq.py
@@ -1575,13 +1575,13 @@ class MutableSeq(object):
             # is a stop codon at the end of a sequence.
             # Note total length is 54+3+3=60
             return "{0}('{1}...{2}', {3!r})".format(self.__class__.__name__,
-                                                  str(self[:54]),
-                                                  str(self[-3:]),
-                                                  self.alphabet)
+                                                    str(self[:54]),
+                                                    str(self[-3:]),
+                                                    self.alphabet)
         else:
             return "{0}('{1}', {2!r})".format(self.__class__.__name__,
-                                            str(self),
-                                            self.alphabet)
+                                              str(self),
+                                              self.alphabet)
 
     def __str__(self):
         """Returns the full sequence as a python string.
diff --git a/Bio/SeqFeature.py b/Bio/SeqFeature.py
index 3c6c751..4eb0dc5 100644
--- a/Bio/SeqFeature.py
+++ b/Bio/SeqFeature.py
@@ -86,10 +86,6 @@ class SeqFeature(object):
           analogous to the qualifiers from a GenBank feature table. The keys of
           the dictionary are qualifier names, the values are the qualifier
           values.
-        - sub_features - Obsolete list of additional SeqFeatures which was
-          used for holding compound locations (e.g. joins in GenBank/EMBL).
-          This is now superceded by a CompoundLocation as the location, and
-          should not be used (DEPRECATED).
     """
 
     def __init__(self, location=None, type='', location_operator='',
@@ -156,14 +152,8 @@ class SeqFeature(object):
         if qualifiers is None:
             qualifiers = {}
         self.qualifiers = qualifiers
-        if sub_features is None:
-            sub_features = []
-        else:
-            import warnings
-            from Bio import BiopythonDeprecationWarning
-            warnings.warn("Rather than sub_features, use a CompoundFeatureLocation",
-                          BiopythonDeprecationWarning)
-        self._sub_features = sub_features
+        if sub_features is not None:
+            raise TypeError("Rather than sub_features, use a CompoundFeatureLocation")
         if ref is not None:
             # TODO - Deprecation warning
             self.ref = ref
@@ -171,24 +161,6 @@ class SeqFeature(object):
             # TODO - Deprecation warning
             self.ref_db = ref_db
 
-    def _get_sub_features(self):
-        if self._sub_features:
-            import warnings
-            from Bio import BiopythonDeprecationWarning
-            warnings.warn("Rather using f.sub_features, f.location should be a CompoundFeatureLocation",
-                          BiopythonDeprecationWarning)
-        return self._sub_features
-
-    def _set_sub_features(self, value):
-        if value:
-            import warnings
-            from Bio import BiopythonDeprecationWarning
-            warnings.warn("Rather than f.sub_features, use a CompoundFeatureLocation for f.location",
-                          BiopythonDeprecationWarning)
-        self._sub_features = value
-    sub_features = property(fget=_get_sub_features, fset=_set_sub_features,
-                            doc="Obsolete representation of compound locations (DEPRECATED).")
-
     def _get_strand(self):
         return self.location.strand
 
@@ -289,25 +261,17 @@ class SeqFeature(object):
         for qual_key in sorted(self.qualifiers):
             out += "    Key: %s, Value: %s\n" % (qual_key,
                                                  self.qualifiers[qual_key])
-        # TODO - Remove this from __str__ since deprecated
-        if len(self._sub_features) != 0:
-            out += "Sub-Features\n"
-            for sub_feature in self._sub_features:
-                out += "%s\n" % sub_feature
         return out
 
     def _shift(self, offset):
         """Returns a copy of the feature with its location shifted (PRIVATE).
 
         The annotation qaulifiers are copied."""
-        answer = SeqFeature(location=self.location._shift(offset),
-                            type=self.type,
-                            location_operator=self.location_operator,
-                            id=self.id,
-                            qualifiers=dict(self.qualifiers.items()))
-        # This is to avoid the deprecation warning:
-        answer._sub_features = [f._shift(offset) for f in self._sub_features]
-        return answer
+        return SeqFeature(location=self.location._shift(offset),
+                          type=self.type,
+                          location_operator=self.location_operator,
+                          id=self.id,
+                          qualifiers=dict(self.qualifiers.items()))
 
     def _flip(self, length):
         """Returns a copy of the feature with its location flipped (PRIVATE).
@@ -319,15 +283,11 @@ class SeqFeature(object):
 
         The annotation qaulifiers are copied.
         """
-        answer = SeqFeature(location=self.location._flip(length),
-                            type=self.type,
-                            location_operator=self.location_operator,
-                            id=self.id,
-                            qualifiers=dict(self.qualifiers.items()))
-        # This is to avoid the deprecation warning:
-        answer._sub_features = [f._flip(length)
-                                for f in self._sub_features[::-1]]
-        return answer
+        return SeqFeature(location=self.location._flip(length),
+                          type=self.type,
+                          location_operator=self.location_operator,
+                          id=self.id,
+                          qualifiers=dict(self.qualifiers.items()))
 
     def extract(self, parent_sequence):
         """Extract feature sequence from the supplied parent sequence.
@@ -361,7 +321,7 @@ class SeqFeature(object):
            ...
         ValueError: The feature's .location is None. Check the sequence file for a valid location.
 
-        Note - currently only sub-features of type "join" are supported.
+        Note - currently only compound features of type "join" are supported.
         """
         if self.location is None:
             raise ValueError("The feature's .location is None. Check the "
@@ -569,8 +529,8 @@ class FeatureLocation(object):
     be described as running from a start position to and end position
     (optionally with a strand and reference information).  More complex
     locations made up from several non-continuous parts (e.g. a coding
-    sequence made up of several exons) are currently described using a
-    SeqFeature with sub-features.
+    sequence made up of several exons) are described using a SeqFeature
+    with a CompoundLocation.
 
     Note that the start and end location numbering follow Python's scheme,
     thus a GenBank entry of 123..150 (one based counting) becomes a location
@@ -918,12 +878,20 @@ class FeatureLocation(object):
 
     @property
     def start(self):
-        """Start location (integer like, possibly a fuzzy position, read only)."""
+        """Start location - left most (minimum) value, regardless of strand.
+
+        Read only, returns an integer like position object, possibly a fuzzy
+        position.
+        """
         return self._start
 
     @property
     def end(self):
-        """End location (integer like, possibly a fuzzy position, read only)."""
+        """End location - right most (maximum) value, regardless of strand.
+
+        Read only, returns an integer like position object, possibly a fuzzy
+        position.
+        """
         return self._end
 
     @property
@@ -1272,12 +1240,27 @@ class CompoundLocation(object):
 
     @property
     def start(self):
-        """Start location (integer like, possibly a fuzzy position, read only)."""
+        """Start location - left most (minimum) value, regardless of strand.
+
+        Read only, returns an integer like position object, possibly a fuzzy
+        position.
+
+        For the special case of a CompoundLocation wrapping the origin of a
+        circular genome, this will return zero.
+        """
         return min(loc.start for loc in self.parts)
 
     @property
     def end(self):
-        """End location (integer like, possibly a fuzzy position, read only)."""
+        """End location - right most (maximum) value, regardless of strand.
+
+        Read only, returns an integer like position object, possibly a fuzzy
+        position.
+
+        For the special case of a CompoundLocation wrapping the origin of
+        a circular genome this will match the genome length (minus one
+        given how Python counts from zero).
+        """
         return max(loc.end for loc in self.parts)
 
     @property
diff --git a/Bio/SeqIO/InsdcIO.py b/Bio/SeqIO/InsdcIO.py
index 43af8dd..72e8e43 100644
--- a/Bio/SeqIO/InsdcIO.py
+++ b/Bio/SeqIO/InsdcIO.py
@@ -285,58 +285,6 @@ def _insdc_location_string(location, rec_length):
             return loc
 
 
-def _insdc_feature_location_string(feature, rec_length):
-    """Build a GenBank/EMBL location string from a SeqFeature (PRIVATE, OBSOLETE).
-
-    There is a choice of how to show joins on the reverse complement strand,
-    GenBank used "complement(join(1,10),(20,100))" while EMBL used to use
-    "join(complement(20,100),complement(1,10))" instead (but appears to have
-    now adopted the GenBank convention). Notice that the order of the entries
-    is reversed! This function therefore uses the first form. In this situation
-    we expect the parent feature and the two children to all be marked as
-    strand == -1, and in the order 0:10 then 19:100.
-
-    Also need to consider dual-strand examples like these from the Arabidopsis
-    thaliana chloroplast NC_000932: join(complement(69611..69724),139856..140650)
-    gene ArthCp047, GeneID:844801 or its CDS (protein NP_051038.1 GI:7525057)
-    which is further complicated by a splice:
-    join(complement(69611..69724),139856..140087,140625..140650)
-
-    For this mixed strand feature, the parent SeqFeature should have
-    no strand (either 0 or None) while the child features should have either
-    strand +1 or -1 as appropriate, and be listed in the order given here.
-    """
-    # Using private variable to avoid deprecation warning
-    if not feature._sub_features:
-        # Non-recursive.
-        # assert feature.location_operator == "", \
-        #       "%s has no subfeatures but location_operator %s" \
-        #       % (repr(feature), feature.location_operator)
-        location = _insdc_location_string_ignoring_strand_and_subfeatures(
-            feature.location, rec_length)
-        if feature.strand == -1:
-            location = "complement(%s)" % location
-        return location
-    # As noted above, treat reverse complement strand features carefully:
-    if feature.strand == -1:
-        for f in feature._sub_features:
-            if f.strand != -1:
-                raise ValueError("Inconsistent strands: %r for parent, %r for child"
-                                 % (feature.strand, f.strand))
-        return "complement(%s(%s))" \
-               % (feature.location_operator,
-                  ",".join(_insdc_location_string_ignoring_strand_and_subfeatures(f.location, rec_length)
-                           for f in feature._sub_features))
-    # if feature.strand == +1:
-    #    for f in feature.sub_features:
-    #        assert f.strand == +1
-    # This covers typical forward strand features, and also an evil mixed strand:
-    assert feature.location_operator != ""
-    return "%s(%s)" % (feature.location_operator,
-                       ",".join(_insdc_feature_location_string(f, rec_length)
-                                for f in feature._sub_features))
-
-
 class _InsdcWriter(SequentialSequenceWriter):
     """Base class for GenBank and EMBL writers (PRIVATE)."""
     MAX_WIDTH = 80
@@ -487,6 +435,8 @@ class _InsdcWriter(SequentialSequenceWriter):
 
 
 class GenBankWriter(_InsdcWriter):
+    """GenBank writer."""
+
     HEADER_WIDTH = 12
     QUALIFIER_INDENT = 21
 
@@ -607,6 +557,16 @@ class GenBankWriter(_InsdcWriter):
         assert len(division) == 3
         return division
 
+    def _get_topology(self, record):
+        """Set the topology to 'circular', 'linear' if defined"""
+        max_topology_len = len("circular")
+
+        topology = self._get_annotation_str(record, "topology", default="")
+        if topology and len(topology) <= max_topology_len:
+            return topology.ljust(max_topology_len)
+        else:
+            return " " * max_topology_len
+
     def _write_the_first_line(self, record):
         """Write the LOCUS line."""
 
@@ -617,8 +577,18 @@ class GenBankWriter(_InsdcWriter):
             locus = self._get_annotation_str(
                 record, "accession", just_first=True)
         if len(locus) > 16:
-            raise ValueError("Locus identifier %r is too long" % str(locus))
-
+            if len(locus) + 1 + len(str(len(record))) > 28:
+                # Locus name and record length to long to squeeze in.
+                raise ValueError("Locus identifier %r is too long" % locus)
+            else:
+                warnings.warn("Stealing space from length field to allow long name in LOCUS line", BiopythonWarning)
+        if len(locus.split()) > 1:
+            # locus could be unicode, and u'with space' versus 'with space'
+            # causes trouble with doctest or print-and-compare tests, so
+            tmp = repr(locus)
+            if tmp.startswith("u'") and tmp.endswith("'"):
+                tmp = tmp[1:]
+            raise ValueError("Invalid whitespace in %s for LOCUS line" % tmp)
         if len(record) > 99999999999:
             # Currently GenBank only officially support up to 350000, but
             # the length field can take eleven digits
@@ -650,26 +620,34 @@ class GenBankWriter(_InsdcWriter):
             # just the generic Alphabet (default for fasta files)
             raise ValueError("Need a DNA, RNA or Protein alphabet")
 
+        topology = self._get_topology(record)
+
         division = self._get_data_division(record)
 
+        name_length = str(len(record)).rjust(28)
+        name_length = locus + name_length[len(locus):]
+        assert len(name_length) == 28, name_length
+        assert " " in name_length, name_length
+
         assert len(units) == 2
         assert len(division) == 3
-        # TODO - date
-        # TODO - mol_type
-        line = "LOCUS       %s %s %s    %s           %s %s\n" \
-            % (locus.ljust(16),
-               str(len(record)).rjust(11),
+        line = "LOCUS       %s %s    %s %s %s %s\n" \
+            % (name_length,
                units,
-               mol_type.ljust(6),
+               mol_type.ljust(7),
+               topology,
                division,
                self._get_date(record))
         assert len(line) == 79 + 1, repr(line)  # plus one for new line
 
-        assert line[12:28].rstrip() == locus, \
-            'LOCUS line does not contain the locus at the expected position:\n' + line
-        assert line[28:29] == " "
-        assert line[29:40].lstrip() == str(len(record)), \
-            'LOCUS line does not contain the length at the expected position:\n' + line
+        # We're bending the rules to allow an identifier over 16 characters
+        # if we can steal spaces from the length field:
+        # assert line[12:28].rstrip() == locus, \
+        #     'LOCUS line does not contain the locus at the expected position:\n' + line
+        # assert line[28:29] == " "
+        # assert line[29:40].lstrip() == str(len(record)), \
+        #     'LOCUS line does not contain the length at the expected position:\n' + line
+        assert line[12:40].split() == [locus, str(len(record))], line
 
         # Tests copied from Bio.GenBank.Scanner
         assert line[40:44] in [' bp ', ' aa '], \
@@ -794,8 +772,13 @@ class GenBankWriter(_InsdcWriter):
         handle = self.handle
         self._write_the_first_line(record)
 
+        default = record.id
+        if default.count(".") == 1 and default[default.index(".") + 1:].isdigit():
+            # Good, looks like accesion.version and not something
+            # else like identifier.start-end
+            default = record.id.split(".", 1)[0]
         accession = self._get_annotation_str(record, "accession",
-                                             record.id.split(".", 1)[0],
+                                             default,
                                              just_first=True)
         acc_with_version = accession
         if record.id.startswith(accession + "."):
@@ -878,6 +861,8 @@ class GenBankWriter(_InsdcWriter):
 
 
 class EmblWriter(_InsdcWriter):
+    """EMBL writer."""
+
     HEADER_WIDTH = 5
     QUALIFIER_INDENT = 21
     QUALIFIER_INDENT_STR = "FT" + " " * (QUALIFIER_INDENT - 2)
@@ -980,6 +965,8 @@ class EmblWriter(_InsdcWriter):
             raise ValueError("Cannot have spaces in EMBL accession, %s"
                              % repr(str(accession)))
 
+        topology = self._get_annotation_str(record, "topology", default="")
+
         # Get the molecule type
         # TODO - record this explicitly in the parser?
         # Get the base alphabet (underneath any Gapped or StopCodon encoding)
@@ -1012,8 +999,8 @@ class EmblWriter(_InsdcWriter):
         # 5. Data class
         # 6. Taxonomic division
         # 7. Sequence length
-        self._write_single_line("ID", "%s; %s; ; %s; ; %s; %i %s."
-                                % (accession, version, mol_type,
+        self._write_single_line("ID", "%s; %s; %s; %s; ; %s; %i %s."
+                                % (accession, version, topology, mol_type,
                                    division, len(record), units))
         handle.write("XX\n")
         self._write_single_line("AC", accession + ";")
@@ -1200,6 +1187,8 @@ class EmblWriter(_InsdcWriter):
 
 
 class ImgtWriter(EmblWriter):
+    """IMGT writer (EMBL format variant)."""
+
     HEADER_WIDTH = 5
     QUALIFIER_INDENT = 25  # Not 21 as in EMBL
     QUALIFIER_INDENT_STR = "FT" + " " * (QUALIFIER_INDENT - 2)
diff --git a/Bio/SeqIO/PdbIO.py b/Bio/SeqIO/PdbIO.py
index 4286b4a..1c772c1 100644
--- a/Bio/SeqIO/PdbIO.py
+++ b/Bio/SeqIO/PdbIO.py
@@ -193,7 +193,7 @@ def PdbAtomIterator(handle):
         # HETATM mod. res. policy: remove mod if in sequence, else discard
         residues = [res for res in chain.get_unpacked_list()
                     if seq1(res.get_resname().upper(),
-                        custom_map=protein_letters_3to1) != "X"]
+                            custom_map=protein_letters_3to1) != "X"]
         if not residues:
             continue
         # Identify missing residues in the structure
@@ -233,9 +233,7 @@ def PdbAtomIterator(handle):
         #     id = ("Model%s|" % str(model.id)) + id
 
         record = SeqRecord(Seq(''.join(res_out), generic_protein),
-                id=record_id,
-                description=record_id,
-                )
+                           id=record_id, description=record_id)
 
         # The PDB header was loaded as a dictionary, so let's reuse it all
         record.annotations = struct.header.copy()
diff --git a/Bio/SeqIO/__init__.py b/Bio/SeqIO/__init__.py
index 058f4fc..80c8f97 100644
--- a/Bio/SeqIO/__init__.py
+++ b/Bio/SeqIO/__init__.py
@@ -1,4 +1,4 @@
-# Copyright 2006-2015 by Peter Cock.  All rights reserved.
+# Copyright 2006-2016 by Peter Cock.  All rights reserved.
 # This code is part of the Biopython distribution and governed by its
 # license.  Please see the LICENSE file that should have been included
 # as part of this package.
@@ -233,12 +233,15 @@ will be overwritten. For sequential files formats (e.g. fasta, genbank) each
 "record block" holds a single sequence.  For these files it would probably
 be safe to call write() multiple times by re-using the same handle.
 
-
 However, trying this for certain alignment formats (e.g. phylip, clustal,
 stockholm) would have the effect of concatenating several multiple sequence
 alignments together.  Such files are created by the PHYLIP suite of programs
 for bootstrap analysis, but it is clearer to do this via Bio.AlignIO instead.
 
+Worse, many fileformats have an explicit header and/or footer structure
+(e.g. any XMl format, and most binary file formats like SFF). Here making
+multiple calls to write() will result in an invalid file.
+
 
 Conversion
 ----------
@@ -463,7 +466,7 @@ def write(sequences, handle, format):
         raise TypeError("Check arguments, handle should NOT be a list")
 
     if isinstance(sequences, SeqRecord):
-        # This raised an exception in order version of Biopython
+        # This raised an exception in older versions of Biopython
         sequences = [sequences]
 
     if format in _BinaryFormats:
diff --git a/Bio/SeqRecord.py b/Bio/SeqRecord.py
index eba7d6e..3a306aa 100644
--- a/Bio/SeqRecord.py
+++ b/Bio/SeqRecord.py
@@ -292,19 +292,28 @@ class SeqRecord(object):
         >>> sub_record.letter_annotations = {}
         >>> sub_record.letter_annotations
         {}
+
+        Note that if replacing the record's sequence with a sequence of a
+        different length you must first clear the letter_annotations dict.
         """)
 
     def _set_seq(self, value):
         # TODO - Add a deprecation warning that the seq should be write only?
         if self._per_letter_annotations:
-            # TODO - Make this a warning? Silently empty the dictionary?
-            raise ValueError("You must empty the letter annotations first!")
-        self._seq = value
-        try:
-            self._per_letter_annotations = _RestrictedDict(length=len(self.seq))
-        except AttributeError:
-            # e.g. seq is None
-            self._per_letter_annotations = _RestrictedDict(length=0)
+            if len(self) != len(value):
+                # TODO - Make this a warning? Silently empty the dictionary?
+                raise ValueError("You must empty the letter annotations first!")
+            else:
+                # Leave the existing per letter annotations unchanged:
+                self._seq = value
+        else:
+            self._seq = value
+            # Reset the (empty) letter annotations dict with new length:
+            try:
+                self._per_letter_annotations = _RestrictedDict(length=len(self.seq))
+            except AttributeError:
+                # e.g. seq is None
+                self._per_letter_annotations = _RestrictedDict(length=0)
 
     seq = property(fget=lambda self: self._seq,
                    fset=_set_seq,
@@ -427,10 +436,17 @@ class SeqRecord(object):
             if self.seq is None:
                 raise ValueError("If the sequence is None, we cannot slice it.")
             parent_length = len(self)
-            answer = self.__class__(self.seq[index],
-                                    id=self.id,
-                                    name=self.name,
-                                    description=self.description)
+            from BioSQL.BioSeq import DBSeqRecord
+            if isinstance(self, DBSeqRecord):
+                answer = SeqRecord(self.seq[index],
+                                        id=self.id,
+                                        name=self.name,
+                                        description=self.description)
+            else:
+                answer = self.__class__(self.seq[index],
+                                        id=self.id,
+                                        name=self.name,
+                                        description=self.description)
             # TODO - The description may no longer apply.
             # It would be safer to change it to something
             # generic like "edited" or the default value.
diff --git a/Bio/SeqUtils/CodonUsage.py b/Bio/SeqUtils/CodonUsage.py
index e1a85f1..ff25aee 100644
--- a/Bio/SeqUtils/CodonUsage.py
+++ b/Bio/SeqUtils/CodonUsage.py
@@ -106,8 +106,8 @@ class CodonAdaptationIndex(object):
 
             # now generate the index W=RCSUi/RCSUmax:
             rcsu_max = max(rcsu)
-            for i in range(len(codons)):
-                self.index[codons[i]] = rcsu[i] / rcsu_max
+            for codon_index, codon in enumerate(codons):
+                self.index[codon] = rcsu[codon_index] / rcsu_max
 
     def cai_for_gene(self, dna_sequence):
         """Calculate the CAI (float) for the provided DNA sequence (string).
diff --git a/Bio/SeqUtils/ProtParamData.py b/Bio/SeqUtils/ProtParamData.py
index 51071c4..f068b9a 100644
--- a/Bio/SeqUtils/ProtParamData.py
+++ b/Bio/SeqUtils/ProtParamData.py
@@ -2,10 +2,10 @@
 
 
 # Kyte & Doolittle index of hydrophobicity
-kd = {'A': 1.8, 'R':-4.5, 'N':-3.5, 'D':-3.5, 'C': 2.5,
-      'Q':-3.5, 'E':-3.5, 'G':-0.4, 'H':-3.2, 'I': 4.5,
-      'L': 3.8, 'K':-3.9, 'M': 1.9, 'F': 2.8, 'P':-1.6,
-      'S':-0.8, 'T':-0.7, 'W':-0.9, 'Y':-1.3, 'V': 4.2}
+kd = {'A': 1.8, 'R': -4.5, 'N': -3.5, 'D': -3.5, 'C': 2.5,
+      'Q': -3.5, 'E': -3.5, 'G': -0.4, 'H': -3.2, 'I': 4.5,
+      'L': 3.8, 'K': -3.9, 'M': 1.9, 'F': 2.8, 'P': -1.6,
+      'S': -0.8, 'T': -0.7, 'W': -0.9, 'Y': -1.3, 'V': 4.2}
 
 # Flexibility
 # Normalized flexibility parameters (B-values), average (Vihinen et al., 1994)
@@ -18,10 +18,10 @@ Flex = {'A': 0.984, 'C': 0.906, 'E': 1.094, 'D': 1.068,
 # Hydrophilicity
 # 1 Hopp & Wood
 # Proc. Natl. Acad. Sci. U.S.A. 78:3824-3828(1981).
-hw = {'A':-0.5, 'R': 3.0, 'N': 0.2, 'D': 3.0, 'C':-1.0,
-      'Q': 0.2, 'E': 3.0, 'G': 0.0, 'H':-0.5, 'I':-1.8,
-      'L':-1.8, 'K': 3.0, 'M':-1.3, 'F':-2.5, 'P': 0.0,
-      'S': 0.3, 'T':-0.4, 'W':-3.4, 'Y':-2.3, 'V':-1.5}
+hw = {'A': -0.5, 'R': 3.0, 'N': 0.2, 'D': 3.0, 'C': -1.0,
+      'Q': 0.2, 'E': 3.0, 'G': 0.0, 'H': -0.5, 'I': -1.8,
+      'L': -1.8, 'K': 3.0, 'M': -1.3, 'F': -2.5, 'P': 0.0,
+      'S': 0.3, 'T': -0.4, 'W': -3.4, 'Y': -2.3, 'V': -1.5}
 
 # Surface accessibility
 # 1 Emini Surface fractional probability
@@ -31,10 +31,10 @@ em = {'A': 0.815, 'R': 1.475, 'N': 1.296, 'D': 1.283, 'C': 0.394,
       'S': 1.115, 'T': 1.184, 'W': 0.808, 'Y': 1.089, 'V': 0.606}
 
 # 2 Janin Interior to surface transfer energy scale
-ja = {'A': 0.28, 'R':-1.14, 'N':-0.55, 'D':-0.52, 'C': 0.97,
-      'Q':-0.69, 'E':-1.01, 'G': 0.43, 'H':-0.31, 'I': 0.60,
-      'L': 0.60, 'K':-1.62, 'M': 0.43, 'F': 0.46, 'P':-0.42,
-      'S':-0.19, 'T':-0.32, 'W': 0.29, 'Y':-0.15, 'V': 0.60}
+ja = {'A': 0.28, 'R': -1.14, 'N': -0.55, 'D': -0.52, 'C': 0.97,
+      'Q': -0.69, 'E': -1.01, 'G': 0.43, 'H': -0.31, 'I': 0.60,
+      'L': 0.60, 'K': -1.62, 'M': 0.43, 'F': 0.46, 'P': -0.42,
+      'S': -0.19, 'T': -0.32, 'W': 0.29, 'Y': -0.15, 'V': 0.60}
 
 
 # A two dimensional dictionary for calculating the instability index.
diff --git a/Bio/SeqUtils/__init__.py b/Bio/SeqUtils/__init__.py
index 59b25f5..77aba9d 100644
--- a/Bio/SeqUtils/__init__.py
+++ b/Bio/SeqUtils/__init__.py
@@ -479,7 +479,7 @@ def six_frame_translations(seq, genetic_code=1):
     <BLANKLINE>
     <BLANKLINE>
 
-    """
+    """  # noqa for pep8 W291 trailing whitespace
     from Bio.Seq import reverse_complement, translate
     anti = reverse_complement(seq)
     comp = anti[::-1]
diff --git a/Bio/Sequencing/Applications/_Novoalign.py b/Bio/Sequencing/Applications/_Novoalign.py
index 5a17fe1..9254efb 100644
--- a/Bio/Sequencing/Applications/_Novoalign.py
+++ b/Bio/Sequencing/Applications/_Novoalign.py
@@ -44,8 +44,7 @@ class NovoalignCommandline(AbstractCommandline):
         REPORT_FORMAT = ['Native', 'Pairwise', 'SAM']
         REPEAT_METHOD = ['None', 'Random', 'All', 'Exhaustive', '0.99']
 
-        self.parameters = \
-           [
+        self.parameters = [
             _Option(["-d", "database"],
                     "database filename",
                     filename=True,
diff --git a/Bio/Sequencing/Applications/_bwa.py b/Bio/Sequencing/Applications/_bwa.py
index aa08659..3d51bdf 100644
--- a/Bio/Sequencing/Applications/_bwa.py
+++ b/Bio/Sequencing/Applications/_bwa.py
@@ -37,29 +37,28 @@ class BwaIndexCommandline(AbstractCommandline):
     """
     def __init__(self, cmd="bwa", **kwargs):
         self.program_name = cmd
-        self.parameters = \
-                [
-                    _StaticArgument("index"),
-                    _Option(["-a", "a", "algorithm"],
-                            """Algorithm for constructing BWT index.
-
-                            Available options are:
-                                - is:    IS linear-time algorithm for constructing suffix array.
-                                  It requires 5.37N memory where N is the size of the database.
-                                  IS is moderately fast, but does not work with database larger
-                                  than 2GB. IS is the default algorithm due to its simplicity.
-                                - bwtsw: Algorithm implemented in BWT-SW. This method works with the
-                                  whole human genome, but it does not work with database
-                                  smaller than 10MB and it is usually slower than IS.""",
-                            checker_function=lambda x: x in ["is", "bwtsw"],
-                            equate=False, is_required=True),
-                    _Option(["-p", "p", "prefix"],
-                            "Prefix of the output database [same as db filename]",
-                            equate=False, is_required=False),
-                    _Argument(["infile"], "Input file name", filename=True, is_required=True),
-                    _Switch(["-c", "c"],
-                            "Build color-space index. The input fasta should be in nucleotide space.")
-                ]
+        self.parameters = [
+            _StaticArgument("index"),
+            _Option(["-a", "a", "algorithm"],
+                    """Algorithm for constructing BWT index.
+
+                    Available options are:
+                        - is:    IS linear-time algorithm for constructing suffix array.
+                          It requires 5.37N memory where N is the size of the database.
+                          IS is moderately fast, but does not work with database larger
+                          than 2GB. IS is the default algorithm due to its simplicity.
+                        - bwtsw: Algorithm implemented in BWT-SW. This method works with the
+                          whole human genome, but it does not work with database
+                          smaller than 10MB and it is usually slower than IS.""",
+                    checker_function=lambda x: x in ["is", "bwtsw"],
+                    equate=False, is_required=True),
+            _Option(["-p", "p", "prefix"],
+                    "Prefix of the output database [same as db filename]",
+                    equate=False, is_required=False),
+            _Argument(["infile"], "Input file name", filename=True, is_required=True),
+            _Switch(["-c", "c"],
+                    "Build color-space index. The input fasta should be in nucleotide space.")
+            ]
         AbstractCommandline.__init__(self, cmd, **kwargs)
 
 
@@ -88,89 +87,88 @@ class BwaAlignCommandline(AbstractCommandline):
     """
     def __init__(self, cmd="bwa", **kwargs):
         self.program_name = cmd
-        self.parameters = \
-                [
-                    _StaticArgument("aln"),
-                    _Argument(["reference"], "Reference file name",
-                              filename=True, is_required=True),
-                    _Argument(["read_file"], "Read file name",
-                              filename=True, is_required=True),
-                    _Option(["-n", "n"],
-                            "Maximum edit distance if the value is INT, or the fraction of missing alignments given 2% uniform base error rate if FLOAT. In the latter case, the maximum edit distance is automatically chosen for different read lengths. [0.04]",
-                            checker_function=lambda x: isinstance(x, (int, float)),
-                            equate=False),
-                    _Option(["-o", "o"],
-                            "Maximum edit distance if the value is INT, or the fraction of missing alignments given 2% uniform base error rate if FLOAT. In the latter case, the maximum edit distance is automatically chosen for different read lengths. [0.04]",
-                            checker_function=lambda x: isinstance(x, (int, float)),
-                            equate=False),
-                    _Option(["-e", "e"],
-                            "Maximum number of gap extensions, -1 for k-difference mode (disallowing long gaps) [-1]",
-                            checker_function=lambda x: isinstance(x, int),
-                            equate=False),
-                    _Option(["-d", "d"],
-                            "Disallow a long deletion within INT bp towards the 3-end [16]",
-                            checker_function=lambda x: isinstance(x, int),
-                            equate=False),
-                    _Option(["-i", "i"],
-                            "Disallow an indel within INT bp towards the ends [5]",
-                            checker_function=lambda x: isinstance(x, int),
-                            equate=False),
-                    _Option(["-l", "l"],
-                            """Take the first INT subsequence as seed.
-
-                            If INT is larger than the query sequence, seeding will be disabled.
-                            For long reads, this option is typically ranged from 25 to 35 for
-                            -k 2. [inf]""",
-                            checker_function=lambda x: isinstance(x, int),
-                            equate=False),
-                    _Option(["-k", "k"], "Maximum edit distance in the seed [2]",
-                            checker_function=lambda x: isinstance(x, int),
-                            equate=False),
-                    _Option(["-t", "t"], "Number of threads (multi-threading mode) [1]",
-                            checker_function=lambda x: isinstance(x, int),
-                            equate=False),
-                    _Option(["-M", "M"],
-                            "Mismatch penalty. BWA will not search for suboptimal hits with a score lower than (bestScore-misMsc). [3]",
-                            checker_function=lambda x: isinstance(x, int),
-                            equate=False),
-                    _Option(["-O", "O"], "Gap open penalty [11]",
-                            checker_function=lambda x: isinstance(x, int),
-                            equate=False),
-                    _Option(["-E", "E"], "Gap extension penalty [4]",
-                            checker_function=lambda x: isinstance(x, int),
-                            equate=False),
-                    _Option(["-R", "R"],
-                            """Proceed with suboptimal alignments if there are no more than INT equally best hits.
-
-                            This option only affects paired-end mapping. Increasing this threshold helps
-                            to improve the pairing accuracy at the cost of speed, especially for short
-                            reads (~32bp).""",
-                            checker_function=lambda x: isinstance(x, int),
-                            equate=False),
-                    _Option(["-q", "q"],
-                            """Parameter for read trimming [0].
-
-                            BWA trims a read down to argmax_x{\sum_{i=x+1}^l(INT-q_i)} if q_l<INT
-                            where l is the original read length.""",
-                            checker_function=lambda x: isinstance(x, int),
-                            equate=False),
-                    _Option(["-B", "B"],
-                            "Length of barcode starting from the 5-end. When INT is positive, the barcode of each read will be trimmed before mapping and will be written at the BC SAM tag. For paired-end reads, the barcode from both ends are concatenated. [0]",
-                            checker_function=lambda x: isinstance(x, int),
-                            equate=False),
-                    _Switch(["-c", "c"],
-                            "Reverse query but not complement it, which is required for alignment in the color space."),
-                    _Switch(["-N", "N"],
-                            "Disable iterative search. All hits with no more than maxDiff differences will be found. This mode is much slower than the default."),
-                    _Switch(["-I", "I"],
-                            "The input is in the Illumina 1.3+ read format (quality equals ASCII-64)."),
-                    _Switch(["-b", "b"],
-                            "Specify the input read sequence file is the BAM format"),
-                    _Switch(["-b1", "b1"],
-                            "When -b is specified, only use the first read in a read pair in mapping (skip single-end reads and the second reads)."),
-                    _Switch(["-b2", "b2"],
-                            "When -b is specified, only use the second read in a read pair in mapping.")
-                  ]
+        self.parameters = [
+            _StaticArgument("aln"),
+            _Argument(["reference"], "Reference file name",
+                      filename=True, is_required=True),
+            _Argument(["read_file"], "Read file name",
+                      filename=True, is_required=True),
+            _Option(["-n", "n"],
+                    "Maximum edit distance if the value is INT, or the fraction of missing alignments given 2% uniform base error rate if FLOAT. In the latter case, the maximum edit distance is automatically chosen for different read lengths. [0.04]",
+                    checker_function=lambda x: isinstance(x, (int, float)),
+                    equate=False),
+            _Option(["-o", "o"],
+                    "Maximum edit distance if the value is INT, or the fraction of missing alignments given 2% uniform base error rate if FLOAT. In the latter case, the maximum edit distance is automatically chosen for different read lengths. [0.04]",
+                    checker_function=lambda x: isinstance(x, (int, float)),
+                    equate=False),
+            _Option(["-e", "e"],
+                    "Maximum number of gap extensions, -1 for k-difference mode (disallowing long gaps) [-1]",
+                    checker_function=lambda x: isinstance(x, int),
+                    equate=False),
+            _Option(["-d", "d"],
+                    "Disallow a long deletion within INT bp towards the 3-end [16]",
+                    checker_function=lambda x: isinstance(x, int),
+                    equate=False),
+            _Option(["-i", "i"],
+                    "Disallow an indel within INT bp towards the ends [5]",
+                    checker_function=lambda x: isinstance(x, int),
+                    equate=False),
+            _Option(["-l", "l"],
+                    """Take the first INT subsequence as seed.
+
+                    If INT is larger than the query sequence, seeding will be disabled.
+                    For long reads, this option is typically ranged from 25 to 35 for
+                    -k 2. [inf]""",
+                    checker_function=lambda x: isinstance(x, int),
+                    equate=False),
+            _Option(["-k", "k"], "Maximum edit distance in the seed [2]",
+                    checker_function=lambda x: isinstance(x, int),
+                    equate=False),
+            _Option(["-t", "t"], "Number of threads (multi-threading mode) [1]",
+                    checker_function=lambda x: isinstance(x, int),
+                    equate=False),
+            _Option(["-M", "M"],
+                    "Mismatch penalty. BWA will not search for suboptimal hits with a score lower than (bestScore-misMsc). [3]",
+                    checker_function=lambda x: isinstance(x, int),
+                    equate=False),
+            _Option(["-O", "O"], "Gap open penalty [11]",
+                    checker_function=lambda x: isinstance(x, int),
+                    equate=False),
+            _Option(["-E", "E"], "Gap extension penalty [4]",
+                    checker_function=lambda x: isinstance(x, int),
+                    equate=False),
+            _Option(["-R", "R"],
+                    """Proceed with suboptimal alignments if there are no more than INT equally best hits.
+
+                    This option only affects paired-end mapping. Increasing this threshold helps
+                    to improve the pairing accuracy at the cost of speed, especially for short
+                    reads (~32bp).""",
+                    checker_function=lambda x: isinstance(x, int),
+                    equate=False),
+            _Option(["-q", "q"],
+                    """Parameter for read trimming [0].
+
+                    BWA trims a read down to argmax_x{\sum_{i=x+1}^l(INT-q_i)} if q_l<INT
+                    where l is the original read length.""",
+                    checker_function=lambda x: isinstance(x, int),
+                    equate=False),
+            _Option(["-B", "B"],
+                    "Length of barcode starting from the 5-end. When INT is positive, the barcode of each read will be trimmed before mapping and will be written at the BC SAM tag. For paired-end reads, the barcode from both ends are concatenated. [0]",
+                    checker_function=lambda x: isinstance(x, int),
+                    equate=False),
+            _Switch(["-c", "c"],
+                    "Reverse query but not complement it, which is required for alignment in the color space."),
+            _Switch(["-N", "N"],
+                    "Disable iterative search. All hits with no more than maxDiff differences will be found. This mode is much slower than the default."),
+            _Switch(["-I", "I"],
+                    "The input is in the Illumina 1.3+ read format (quality equals ASCII-64)."),
+            _Switch(["-b", "b"],
+                    "Specify the input read sequence file is the BAM format"),
+            _Switch(["-b1", "b1"],
+                    "When -b is specified, only use the first read in a read pair in mapping (skip single-end reads and the second reads)."),
+            _Switch(["-b2", "b2"],
+                    "When -b is specified, only use the second read in a read pair in mapping.")
+            ]
         AbstractCommandline.__init__(self, cmd, **kwargs)
 
 
@@ -201,23 +199,22 @@ class BwaSamseCommandline(AbstractCommandline):
     """
     def __init__(self, cmd="bwa", **kwargs):
         self.program_name = cmd
-        self.parameters = \
-                [
-                    _StaticArgument("samse"),
-                    _Argument(["reference"], "Reference file name", filename=True, is_required=True),
-                    _Argument(["sai_file"], "Sai file name", filename=True, is_required=True),
-                    _Argument(["read_file"], "Read  file name", filename=True, is_required=True),
-                    _Option(["-n", "n"],
-                            """Maximum number of alignments to output in the XA tag for reads paired properly.
-
-                            If a read has more than INT hits, the XA tag will not be written. [3]""",
-                            checker_function=lambda x: isinstance(x, int),
-                            equate=False),
-                    _Option(["-r", "r"],
-                            "Specify the read group in a format like '@RG\tID:foo\tSM:bar'. [null]",
-                            checker_function=lambda x: isinstance(x, int),
-                            equate=False),
-                  ]
+        self.parameters = [
+            _StaticArgument("samse"),
+            _Argument(["reference"], "Reference file name", filename=True, is_required=True),
+            _Argument(["sai_file"], "Sai file name", filename=True, is_required=True),
+            _Argument(["read_file"], "Read  file name", filename=True, is_required=True),
+            _Option(["-n", "n"],
+                    """Maximum number of alignments to output in the XA tag for reads paired properly.
+
+                    If a read has more than INT hits, the XA tag will not be written. [3]""",
+                    checker_function=lambda x: isinstance(x, int),
+                    equate=False),
+            _Option(["-r", "r"],
+                    "Specify the read group in a format like '@RG\tID:foo\tSM:bar'. [null]",
+                    checker_function=lambda x: isinstance(x, int),
+                    equate=False),
+            ]
         AbstractCommandline.__init__(self, cmd, **kwargs)
 
 
@@ -254,44 +251,43 @@ class BwaSampeCommandline(AbstractCommandline):
     # TODO - Should the read group have a raw tab in it, or \t?
     def __init__(self, cmd="bwa", **kwargs):
         self.program_name = cmd
-        self.parameters = \
-                [
-                    _StaticArgument("sampe"),
-                    _Argument(["reference"], "Reference file name", filename=True, is_required=True),
-                    _Argument(["sai_file1"], "Sai file 1", filename=True, is_required=True),
-                    _Argument(["sai_file2"], "Sai file 2", filename=True, is_required=True),
-                    _Argument(["read_file1"], "Read  file 1", filename=True, is_required=True),
-                    _Argument(["read_file2"], "Read  file 2", filename=True, is_required=True),
-                    _Option(["-a", "a"],
-                            """Maximum insert size for a read pair to be considered being mapped properly [500].
-
-                            Since 0.4.5, this option is only used when there are not enough
-                            good alignments to infer the distribution of insert sizes.""",
-                            checker_function=lambda x: isinstance(x, int),
-                            equate=False),
-                    _Option(["-o", "o"],
-                            """Maximum occurrences of a read for pairing [100000].
-
-                            A read with more occurrences will be treated as a single-end read.
-                            Reducing this parameter helps faster pairing.""",
-                            checker_function=lambda x: isinstance(x, int),
-                            equate=False),
-                    _Option(["-n", "n"],
-                            """Maximum number of alignments to output in the XA tag for reads paired properly [3].
-
-                            If a read has more than INT hits, the XA tag will not be written.""",
-                            checker_function=lambda x: isinstance(x, int),
-                            equate=False),
-                    _Option(["-N", "N"],
-                            """Maximum number of alignments to output in the XA tag for disconcordant read pairs (excluding singletons) [10].
-
-                         .  If a read has more than INT hits, the XA tag will not be written.""",
-                            checker_function=lambda x: isinstance(x, int),
-                            equate=False),
-                    _Option(["-r", "r"], "Specify the read group in a format like '@RG\tID:foo\tSM:bar'. [null]",
-                            checker_function=lambda x: isinstance(x, basestring),
-                            equate=False),
-                  ]
+        self.parameters = [
+            _StaticArgument("sampe"),
+            _Argument(["reference"], "Reference file name", filename=True, is_required=True),
+            _Argument(["sai_file1"], "Sai file 1", filename=True, is_required=True),
+            _Argument(["sai_file2"], "Sai file 2", filename=True, is_required=True),
+            _Argument(["read_file1"], "Read  file 1", filename=True, is_required=True),
+            _Argument(["read_file2"], "Read  file 2", filename=True, is_required=True),
+            _Option(["-a", "a"],
+                    """Maximum insert size for a read pair to be considered being mapped properly [500].
+
+                    Since 0.4.5, this option is only used when there are not enough
+                    good alignments to infer the distribution of insert sizes.""",
+                    checker_function=lambda x: isinstance(x, int),
+                    equate=False),
+            _Option(["-o", "o"],
+                    """Maximum occurrences of a read for pairing [100000].
+
+                        A read with more occurrences will be treated as a single-end read.
+                        Reducing this parameter helps faster pairing.""",
+                    checker_function=lambda x: isinstance(x, int),
+                    equate=False),
+            _Option(["-n", "n"],
+                    """Maximum number of alignments to output in the XA tag for reads paired properly [3].
+
+                    If a read has more than INT hits, the XA tag will not be written.""",
+                    checker_function=lambda x: isinstance(x, int),
+                    equate=False),
+            _Option(["-N", "N"],
+                    """Maximum number of alignments to output in the XA tag for disconcordant read pairs (excluding singletons) [10].
+
+                    If a read has more than INT hits, the XA tag will not be written.""",
+                    checker_function=lambda x: isinstance(x, int),
+                    equate=False),
+            _Option(["-r", "r"], "Specify the read group in a format like '@RG\tID:foo\tSM:bar'. [null]",
+                    checker_function=lambda x: isinstance(x, basestring),
+                    equate=False),
+            ]
         AbstractCommandline.__init__(self, cmd, **kwargs)
 
 
@@ -318,62 +314,61 @@ class BwaBwaswCommandline(AbstractCommandline):
     """
     def __init__(self, cmd="bwa", **kwargs):
         self.program_name = cmd
-        self.parameters = \
-                [
-                    _StaticArgument("bwasw"),
-                    _Argument(["reference"], "Reference file name", filename=True, is_required=True),
-                    _Argument(["read_file"], "Read file", filename=True, is_required=True),
-                    _Argument(["mate_file"], "Mate file", filename=True, is_required=False),
-                    _Option(["-a", "a"],
-                            "Score of a match [1]",
-                            checker_function=lambda x: isinstance(x, int),
-                            equate=False),
-                    _Option(["-b", "b"],
-                            "Mismatch penalty [3]",
-                            checker_function=lambda x: isinstance(x, int),
-                            equate=False),
-                    _Option(["-q", "q"],
-                            "Gap open penalty [5]",
-                            checker_function=lambda x: isinstance(x, int),
-                            equate=False),
-                    _Option(["-r", "r"],
-                            "Gap extension penalty. The penalty for a contiguous gap of size k is q+k*r. [2]",
-                            checker_function=lambda x: isinstance(x, int),
-                            equate=False),
-                    _Option(["-t", "t"],
-                            "Number of threads in the multi-threading mode [1]",
-                            checker_function=lambda x: isinstance(x, int),
-                            equate=False),
-                    _Option(["-w", "w"],
-                            "Band width in the banded alignment [33]",
-                            checker_function=lambda x: isinstance(x, int),
-                            equate=False),
-                    _Option(["-T", "T"],
-                            "Minimum score threshold divided by a [37]",
-                            checker_function=lambda x: isinstance(x, int),
-                            equate=False),
-                    _Option(["-c", "c"],
-                            """Coefficient for threshold adjustment according to query length [5.5].
-
-                            Given an l-long query, the threshold for a hit to be retained is
-                            a*max{T,c*log(l)}.""",
-                            checker_function=lambda x: isinstance(x, float),
-                            equate=False),
-                    _Option(["-z", "z"],
-                            "Z-best heuristics. Higher -z increases accuracy at the cost of speed. [1]",
-                            checker_function=lambda x: isinstance(x, int),
-                            equate=False),
-                    _Option(["-s", "s"],
-                            """Maximum SA interval size for initiating a seed [3].
-
-                            Higher -s increases accuracy at the cost of speed.""",
-                            checker_function=lambda x: isinstance(x, int),
-                            equate=False),
-                    _Option(["-N", "N"],
-                            "Minimum number of seeds supporting the resultant alignment to skip reverse alignment. [5]",
-                            checker_function=lambda x: isinstance(x, int),
-                            equate=False),
-                  ]
+        self.parameters = [
+            _StaticArgument("bwasw"),
+            _Argument(["reference"], "Reference file name", filename=True, is_required=True),
+            _Argument(["read_file"], "Read file", filename=True, is_required=True),
+            _Argument(["mate_file"], "Mate file", filename=True, is_required=False),
+            _Option(["-a", "a"],
+                    "Score of a match [1]",
+                    checker_function=lambda x: isinstance(x, int),
+                    equate=False),
+            _Option(["-b", "b"],
+                    "Mismatch penalty [3]",
+                    checker_function=lambda x: isinstance(x, int),
+                    equate=False),
+            _Option(["-q", "q"],
+                    "Gap open penalty [5]",
+                    checker_function=lambda x: isinstance(x, int),
+                    equate=False),
+            _Option(["-r", "r"],
+                    "Gap extension penalty. The penalty for a contiguous gap of size k is q+k*r. [2]",
+                    checker_function=lambda x: isinstance(x, int),
+                    equate=False),
+            _Option(["-t", "t"],
+                    "Number of threads in the multi-threading mode [1]",
+                    checker_function=lambda x: isinstance(x, int),
+                    equate=False),
+            _Option(["-w", "w"],
+                    "Band width in the banded alignment [33]",
+                    checker_function=lambda x: isinstance(x, int),
+                    equate=False),
+            _Option(["-T", "T"],
+                    "Minimum score threshold divided by a [37]",
+                    checker_function=lambda x: isinstance(x, int),
+                    equate=False),
+            _Option(["-c", "c"],
+                    """Coefficient for threshold adjustment according to query length [5.5].
+
+                    Given an l-long query, the threshold for a hit to be retained is
+                    a*max{T,c*log(l)}.""",
+                    checker_function=lambda x: isinstance(x, float),
+                    equate=False),
+            _Option(["-z", "z"],
+                    "Z-best heuristics. Higher -z increases accuracy at the cost of speed. [1]",
+                    checker_function=lambda x: isinstance(x, int),
+                    equate=False),
+            _Option(["-s", "s"],
+                    """Maximum SA interval size for initiating a seed [3].
+
+                    Higher -s increases accuracy at the cost of speed.""",
+                    checker_function=lambda x: isinstance(x, int),
+                    equate=False),
+            _Option(["-N", "N"],
+                    "Minimum number of seeds supporting the resultant alignment to skip reverse alignment. [5]",
+                    checker_function=lambda x: isinstance(x, int),
+                    equate=False),
+            ]
         AbstractCommandline.__init__(self, cmd, **kwargs)
 
 
diff --git a/Bio/SubsMat/MatrixInfo.py b/Bio/SubsMat/MatrixInfo.py
index e0e7f4d..e5fd428 100644
--- a/Bio/SubsMat/MatrixInfo.py
+++ b/Bio/SubsMat/MatrixInfo.py
@@ -24,8 +24,8 @@ available_matrices = ['benner6', 'benner22', 'benner74', 'blosum100',
                       'ident', 'johnson', 'levin', 'mclach',
                       'miyata', 'nwsgappep', 'pam120', 'pam180',
                       'pam250', 'pam30', 'pam300', 'pam60',
-                      'pam90', 'rao', 'risler', 'structure'
-                     ]
+                      'pam90', 'rao', 'risler', 'structure',
+                      ]
 
 # NOTE - The only reason we define temp functions rather than assigning
 # the dictionaries directly to variables is to work around a JVM
@@ -37,120 +37,120 @@ available_matrices = ['benner6', 'benner22', 'benner74', 'blosum100',
 # http://www.embl-heidelberg.de/~vogt/matrices/benner6.cmp
 def _temp():
     return {
-('W', 'F'): -1.6, ('L', 'R'): -3.2, ('I', 'I'): 4.4, ('Q', 'Q'): 5.3,
-('W', 'N'): -4.4, ('V', 'I'): 3.9, ('H', 'T'): -1.7, ('H', 'P'): -0.4,
-('W', 'V'): -4.8, ('Q', 'E'): 2.1, ('W', 'R'): 2.0, ('Q', 'A'): -1.7,
-('H', 'H'): 6.1, ('H', 'D'): 0.1, ('L', 'N'): -3.4, ('Y', 'M'): -3.6,
-('Y', 'I'): -3.3, ('Y', 'E'): -4.1, ('E', 'S'): -1.2, ('Y', 'A'): -4.0,
-('Y', 'Y'): 9.5, ('T', 'C'): -1.5, ('E', 'C'): -4.7, ('Y', 'Q'): -1.4,
-('E', 'G'): 0.5, ('V', 'A'): 0.7, ('C', 'C'): 12.1, ('M', 'R'): -3.0,
-('P', 'T'): 0.6, ('V', 'E'): -3.0, ('P', 'P'): 6.5, ('I', 'T'): 0.7,
-('K', 'S'): -1.2, ('R', 'G'): -0.1, ('I', 'P'): -2.0, ('R', 'C'): -0.4,
-('A', 'T'): 1.7, ('K', 'K'): 5.6, ('A', 'P'): 1.1, ('V', 'M'): 3.3,
-('I', 'D'): -4.2, ('K', 'C'): -2.8, ('K', 'G'): -1.4, ('R', 'S'): -0.9,
-('F', 'Q'): -4.4, ('F', 'A'): -3.2, ('V', 'V'): 4.0, ('M', 'N'): -2.5,
-('F', 'E'): -6.7, ('D', 'N'): 2.5, ('F', 'I'): 0.0, ('F', 'M'): -0.1,
-('M', 'S'): -1.3, ('S', 'S'): 2.1, ('L', 'Q'): -2.4, ('W', 'E'): -5.6,
-('W', 'A'): -4.3, ('W', 'M'): -4.4, ('H', 'S'): -0.9, ('W', 'I'): -5.0,
-('S', 'C'): 0.9, ('L', 'A'): -1.3, ('L', 'E'): -5.0, ('W', 'Q'): -2.6,
-('H', 'G'): -2.1, ('Q', 'N'): 0.1, ('H', 'C'): -1.2, ('L', 'M'): -2.9,
-('W', 'Y'): -0.3, ('Y', 'N'): -0.9, ('E', 'P'): -2.6, ('Y', 'F'): 5.6,
-('E', 'T'): -1.6, ('A', 'A'): 2.5, ('I', 'N'): -2.5, ('G', 'A'): 0.8,
-('Y', 'V'): -3.8, ('E', 'D'): 4.4, ('W', 'H'): -2.8, ('Y', 'R'): -2.6,
-('M', 'Q'): -3.1, ('P', 'S'): 1.4, ('R', 'H'): 1.8, ('A', 'C'): -1.7,
-('R', 'D'): -1.5, ('K', 'P'): -2.3, ('L', 'D'): -5.3, ('K', 'T'): -1.1,
-('V', 'N'): -2.4, ('M', 'A'): -0.2, ('K', 'H'): 0.9, ('V', 'R'): -3.7,
-('P', 'C'): -2.7, ('M', 'E'): -4.1, ('A', 'S'): 1.4, ('T', 'T'): 2.4,
-('R', 'T'): -1.3, ('I', 'G'): -3.4, ('R', 'P'): -1.3, ('K', 'D'): -0.2,
-('I', 'C'): -3.6, ('F', 'R'): -4.9, ('F', 'V'): -0.5, ('L', 'C'): -3.8,
-('F', 'F'): 8.3, ('D', 'A'): -0.6, ('F', 'N'): -3.5, ('W', 'D'): -6.3,
-('L', 'P'): -0.2, ('Q', 'S'): -1.4, ('N', 'C'): -1.6, ('N', 'G'): -0.1,
-('H', 'N'): 1.4, ('W', 'T'): -2.6, ('Q', 'G'): -1.6, ('W', 'P'): -4.8,
-('Q', 'C'): -3.2, ('N', 'S'): 1.2, ('L', 'H'): -2.2, ('L', 'L'): 4.8,
-('G', 'T'): -0.5, ('M', 'M'): 4.8, ('G', 'P'): -1.7, ('Y', 'K'): -4.0,
-('Y', 'G'): -4.9, ('Y', 'C'): 2.6, ('E', 'A'): -0.7, ('E', 'E'): 5.2,
-('Y', 'S'): -1.8, ('M', 'P'): -1.8, ('V', 'C'): -3.1, ('M', 'T'): 0.6,
-('V', 'G'): -2.3, ('R', 'E'): -0.4, ('V', 'K'): -3.8, ('K', 'Q'): 2.5,
-('R', 'A'): -1.7, ('I', 'R'): -3.8, ('N', 'A'): 0.0, ('V', 'S'): -0.9,
-('M', 'D'): -4.3, ('M', 'H'): -3.4, ('K', 'A'): -1.9, ('R', 'Q'): 2.5,
-('K', 'E'): 0.9, ('F', 'S'): -1.8, ('I', 'K'): -3.8, ('D', 'P'): -2.8,
-('D', 'T'): -1.2, ('I', 'M'): 4.0, ('F', 'C'): -0.1, ('W', 'L'): -3.0,
-('F', 'G'): -5.7, ('F', 'K'): -6.3, ('F', 'T'): -2.4, ('D', 'D'): 5.2,
-('Q', 'T'): -1.7, ('W', 'G'): -1.7, ('Q', 'P'): 0.1, ('W', 'C'): 1.6,
-('W', 'K'): -1.4, ('H', 'Q'): 3.2, ('Q', 'D'): 0.6, ('W', 'W'): 14.7,
-('V', 'L'): 1.9, ('L', 'G'): -4.6, ('W', 'S'): -2.9, ('L', 'K'): -4.1,
-('N', 'P'): -1.1, ('H', 'E'): -0.2, ('N', 'T'): 0.5, ('H', 'A'): -2.1,
-('Y', 'L'): -1.6, ('Y', 'H'): 4.4, ('G', 'S'): 0.8, ('Y', 'D'): -2.3,
-('V', 'Q'): -3.5, ('L', 'T'): -0.4, ('G', 'G'): 5.8, ('G', 'C'): -1.3,
-('E', 'N'): 1.1, ('Y', 'T'): -3.4, ('Y', 'P'): -3.8, ('R', 'N'): -0.1,
-('V', 'D'): -3.3, ('K', 'R'): 4.3, ('V', 'H'): -3.8, ('I', 'Q'): -3.8,
-('V', 'P'): -1.6, ('M', 'C'): -3.7, ('K', 'N'): 1.0, ('V', 'T'): 0.6,
-('M', 'G'): -3.7, ('T', 'S'): 1.5, ('I', 'E'): -4.1, ('M', 'K'): -2.9,
-('I', 'A'): 0.1, ('N', 'N'): 3.6, ('R', 'R'): 5.1, ('F', 'P'): -3.2,
-('L', 'I'): 2.4, ('I', 'S'): -1.2, ('D', 'S'): -0.4, ('L', 'S'): -1.5,
-('I', 'H'): -3.7, ('F', 'D'): -5.7, ('D', 'C'): -3.7, ('F', 'H'): 0.1,
-('D', 'G'): 0.8, ('F', 'L'): 2.4
-}
+        ('W', 'F'): -1.6, ('L', 'R'): -3.2, ('I', 'I'): 4.4, ('Q', 'Q'): 5.3,
+        ('W', 'N'): -4.4, ('V', 'I'): 3.9, ('H', 'T'): -1.7, ('H', 'P'): -0.4,
+        ('W', 'V'): -4.8, ('Q', 'E'): 2.1, ('W', 'R'): 2.0, ('Q', 'A'): -1.7,
+        ('H', 'H'): 6.1, ('H', 'D'): 0.1, ('L', 'N'): -3.4, ('Y', 'M'): -3.6,
+        ('Y', 'I'): -3.3, ('Y', 'E'): -4.1, ('E', 'S'): -1.2, ('Y', 'A'): -4.0,
+        ('Y', 'Y'): 9.5, ('T', 'C'): -1.5, ('E', 'C'): -4.7, ('Y', 'Q'): -1.4,
+        ('E', 'G'): 0.5, ('V', 'A'): 0.7, ('C', 'C'): 12.1, ('M', 'R'): -3.0,
+        ('P', 'T'): 0.6, ('V', 'E'): -3.0, ('P', 'P'): 6.5, ('I', 'T'): 0.7,
+        ('K', 'S'): -1.2, ('R', 'G'): -0.1, ('I', 'P'): -2.0, ('R', 'C'): -0.4,
+        ('A', 'T'): 1.7, ('K', 'K'): 5.6, ('A', 'P'): 1.1, ('V', 'M'): 3.3,
+        ('I', 'D'): -4.2, ('K', 'C'): -2.8, ('K', 'G'): -1.4, ('R', 'S'): -0.9,
+        ('F', 'Q'): -4.4, ('F', 'A'): -3.2, ('V', 'V'): 4.0, ('M', 'N'): -2.5,
+        ('F', 'E'): -6.7, ('D', 'N'): 2.5, ('F', 'I'): 0.0, ('F', 'M'): -0.1,
+        ('M', 'S'): -1.3, ('S', 'S'): 2.1, ('L', 'Q'): -2.4, ('W', 'E'): -5.6,
+        ('W', 'A'): -4.3, ('W', 'M'): -4.4, ('H', 'S'): -0.9, ('W', 'I'): -5.0,
+        ('S', 'C'): 0.9, ('L', 'A'): -1.3, ('L', 'E'): -5.0, ('W', 'Q'): -2.6,
+        ('H', 'G'): -2.1, ('Q', 'N'): 0.1, ('H', 'C'): -1.2, ('L', 'M'): -2.9,
+        ('W', 'Y'): -0.3, ('Y', 'N'): -0.9, ('E', 'P'): -2.6, ('Y', 'F'): 5.6,
+        ('E', 'T'): -1.6, ('A', 'A'): 2.5, ('I', 'N'): -2.5, ('G', 'A'): 0.8,
+        ('Y', 'V'): -3.8, ('E', 'D'): 4.4, ('W', 'H'): -2.8, ('Y', 'R'): -2.6,
+        ('M', 'Q'): -3.1, ('P', 'S'): 1.4, ('R', 'H'): 1.8, ('A', 'C'): -1.7,
+        ('R', 'D'): -1.5, ('K', 'P'): -2.3, ('L', 'D'): -5.3, ('K', 'T'): -1.1,
+        ('V', 'N'): -2.4, ('M', 'A'): -0.2, ('K', 'H'): 0.9, ('V', 'R'): -3.7,
+        ('P', 'C'): -2.7, ('M', 'E'): -4.1, ('A', 'S'): 1.4, ('T', 'T'): 2.4,
+        ('R', 'T'): -1.3, ('I', 'G'): -3.4, ('R', 'P'): -1.3, ('K', 'D'): -0.2,
+        ('I', 'C'): -3.6, ('F', 'R'): -4.9, ('F', 'V'): -0.5, ('L', 'C'): -3.8,
+        ('F', 'F'): 8.3, ('D', 'A'): -0.6, ('F', 'N'): -3.5, ('W', 'D'): -6.3,
+        ('L', 'P'): -0.2, ('Q', 'S'): -1.4, ('N', 'C'): -1.6, ('N', 'G'): -0.1,
+        ('H', 'N'): 1.4, ('W', 'T'): -2.6, ('Q', 'G'): -1.6, ('W', 'P'): -4.8,
+        ('Q', 'C'): -3.2, ('N', 'S'): 1.2, ('L', 'H'): -2.2, ('L', 'L'): 4.8,
+        ('G', 'T'): -0.5, ('M', 'M'): 4.8, ('G', 'P'): -1.7, ('Y', 'K'): -4.0,
+        ('Y', 'G'): -4.9, ('Y', 'C'): 2.6, ('E', 'A'): -0.7, ('E', 'E'): 5.2,
+        ('Y', 'S'): -1.8, ('M', 'P'): -1.8, ('V', 'C'): -3.1, ('M', 'T'): 0.6,
+        ('V', 'G'): -2.3, ('R', 'E'): -0.4, ('V', 'K'): -3.8, ('K', 'Q'): 2.5,
+        ('R', 'A'): -1.7, ('I', 'R'): -3.8, ('N', 'A'): 0.0, ('V', 'S'): -0.9,
+        ('M', 'D'): -4.3, ('M', 'H'): -3.4, ('K', 'A'): -1.9, ('R', 'Q'): 2.5,
+        ('K', 'E'): 0.9, ('F', 'S'): -1.8, ('I', 'K'): -3.8, ('D', 'P'): -2.8,
+        ('D', 'T'): -1.2, ('I', 'M'): 4.0, ('F', 'C'): -0.1, ('W', 'L'): -3.0,
+        ('F', 'G'): -5.7, ('F', 'K'): -6.3, ('F', 'T'): -2.4, ('D', 'D'): 5.2,
+        ('Q', 'T'): -1.7, ('W', 'G'): -1.7, ('Q', 'P'): 0.1, ('W', 'C'): 1.6,
+        ('W', 'K'): -1.4, ('H', 'Q'): 3.2, ('Q', 'D'): 0.6, ('W', 'W'): 14.7,
+        ('V', 'L'): 1.9, ('L', 'G'): -4.6, ('W', 'S'): -2.9, ('L', 'K'): -4.1,
+        ('N', 'P'): -1.1, ('H', 'E'): -0.2, ('N', 'T'): 0.5, ('H', 'A'): -2.1,
+        ('Y', 'L'): -1.6, ('Y', 'H'): 4.4, ('G', 'S'): 0.8, ('Y', 'D'): -2.3,
+        ('V', 'Q'): -3.5, ('L', 'T'): -0.4, ('G', 'G'): 5.8, ('G', 'C'): -1.3,
+        ('E', 'N'): 1.1, ('Y', 'T'): -3.4, ('Y', 'P'): -3.8, ('R', 'N'): -0.1,
+        ('V', 'D'): -3.3, ('K', 'R'): 4.3, ('V', 'H'): -3.8, ('I', 'Q'): -3.8,
+        ('V', 'P'): -1.6, ('M', 'C'): -3.7, ('K', 'N'): 1.0, ('V', 'T'): 0.6,
+        ('M', 'G'): -3.7, ('T', 'S'): 1.5, ('I', 'E'): -4.1, ('M', 'K'): -2.9,
+        ('I', 'A'): 0.1, ('N', 'N'): 3.6, ('R', 'R'): 5.1, ('F', 'P'): -3.2,
+        ('L', 'I'): 2.4, ('I', 'S'): -1.2, ('D', 'S'): -0.4, ('L', 'S'): -1.5,
+        ('I', 'H'): -3.7, ('F', 'D'): -5.7, ('D', 'C'): -3.7, ('F', 'H'): 0.1,
+        ('D', 'G'): 0.8, ('F', 'L'): 2.4
+        }
 benner6 = _temp()
 
 
 # http://www.embl-heidelberg.de/~vogt/matrices/benner22.cmp
 def _temp():
     return {
-('W', 'F'): 0.5, ('L', 'R'): -2.9, ('I', 'I'): 4.2, ('Q', 'Q'): 4.2,
-('W', 'N'): -5.2, ('V', 'I'): 3.6, ('H', 'T'): -1.1, ('H', 'P'): -0.4,
-('W', 'V'): -4.5, ('Q', 'E'): 1.7, ('W', 'R'): -1.1, ('Q', 'A'): -0.9,
-('H', 'H'): 6.1, ('H', 'D'): 0.3, ('L', 'N'): -3.5, ('Y', 'M'): -1.8,
-('Y', 'I'): -2.2, ('Y', 'E'): -4.0, ('E', 'S'): -0.5, ('Y', 'A'): -3.5,
-('Y', 'Y'): 9.0, ('T', 'C'): -1.1, ('E', 'C'): -4.3, ('Y', 'Q'): -1.9,
-('E', 'G'): 0.5, ('V', 'A'): 0.4, ('C', 'C'): 12.6, ('M', 'R'): -2.1,
-('P', 'T'): 0.4, ('V', 'E'): -2.7, ('P', 'P'): 7.0, ('I', 'T'): 0.3,
-('K', 'S'): -0.4, ('R', 'G'): -0.7, ('I', 'P'): -2.3, ('R', 'C'): -1.6,
-('A', 'T'): 1.4, ('K', 'K'): 4.4, ('A', 'P'): 0.8, ('V', 'M'): 2.5,
-('I', 'D'): -4.0, ('K', 'C'): -3.3, ('K', 'G'): -1.0, ('R', 'S'): -0.5,
-('F', 'Q'): -3.6, ('F', 'A'): -3.1, ('V', 'V'): 3.7, ('M', 'N'): -2.6,
-('F', 'E'): -5.7, ('D', 'N'): 2.4, ('F', 'I'): 0.5, ('F', 'M'): 0.7,
-('M', 'S'): -1.5, ('S', 'S'): 2.0, ('L', 'Q'): -2.0, ('W', 'E'): -6.3,
-('W', 'A'): -5.5, ('W', 'M'): -2.8, ('H', 'S'): -0.5, ('W', 'I'): -4.4,
-('S', 'C'): 0.3, ('L', 'A'): -1.7, ('L', 'E'): -4.4, ('W', 'Q'): -3.3,
-('H', 'G'): -2.0, ('Q', 'N'): 0.5, ('H', 'C'): -1.5, ('L', 'M'): 3.2,
-('W', 'Y'): 1.5, ('Y', 'N'): -1.2, ('E', 'P'): -1.7, ('Y', 'F'): 5.9,
-('E', 'T'): -0.9, ('A', 'A'): 2.5, ('I', 'N'): -2.7, ('G', 'A'): 0.8,
-('Y', 'V'): -2.6, ('E', 'D'): 3.9, ('W', 'H'): -2.7, ('Y', 'R'): -2.7,
-('M', 'Q'): -1.7, ('P', 'S'): 1.1, ('R', 'H'): 1.5, ('A', 'C'): -1.2,
-('R', 'D'): -1.0, ('K', 'P'): -1.6, ('L', 'D'): -4.9, ('K', 'T'): -0.4,
-('V', 'N'): -2.3, ('M', 'A'): -0.8, ('K', 'H'): 0.8, ('V', 'R'): -2.9,
-('P', 'C'): -3.1, ('M', 'E'): -3.4, ('A', 'S'): 1.3, ('T', 'T'): 2.5,
-('R', 'T'): -0.7, ('I', 'G'): -3.8, ('R', 'P'): -1.2, ('K', 'D'): 0.2,
-('I', 'C'): -2.4, ('F', 'R'): -4.3, ('F', 'V'): -0.1, ('L', 'C'): -2.6,
-('F', 'F'): 7.7, ('D', 'A'): -0.2, ('F', 'N'): -3.5, ('W', 'D'): -6.4,
-('L', 'P'): -1.3, ('Q', 'S'): -0.6, ('N', 'C'): -1.9, ('N', 'G'): 0.4,
-('H', 'N'): 1.4, ('W', 'T'): -4.5, ('Q', 'G'): -1.4, ('W', 'P'): -5.8,
-('Q', 'C'): -3.3, ('N', 'S'): 1.1, ('L', 'H'): -2.1, ('L', 'L'): 4.6,
-('G', 'T'): -0.7, ('M', 'M'): 4.9, ('G', 'P'): -1.8, ('Y', 'K'): -3.6,
-('Y', 'G'): -4.8, ('Y', 'C'): 0.6, ('E', 'A'): -0.3, ('E', 'E'): 4.6,
-('Y', 'S'): -1.9, ('M', 'P'): -2.0, ('V', 'C'): -1.7, ('M', 'T'): 0.1,
-('V', 'G'): -2.5, ('R', 'E'): -0.1, ('V', 'K'): -2.7, ('K', 'Q'): 2.2,
-('R', 'A'): -1.2, ('I', 'R'): -3.2, ('N', 'A'): 0.0, ('V', 'S'): -0.9,
-('M', 'D'): -3.9, ('M', 'H'): -2.4, ('K', 'A'): -1.0, ('R', 'Q'): 2.2,
-('K', 'E'): 1.0, ('F', 'S'): -2.2, ('I', 'K'): -3.0, ('D', 'P'): -1.8,
-('D', 'T'): -0.7, ('I', 'M'): 3.1, ('F', 'C'): -0.1, ('W', 'L'): -1.8,
-('F', 'G'): -5.8, ('F', 'K'): -5.1, ('F', 'T'): -2.6, ('D', 'D'): 4.8,
-('Q', 'T'): -0.7, ('W', 'G'): -4.5, ('Q', 'P'): -0.1, ('W', 'C'): 0.5,
-('W', 'K'): -3.7, ('H', 'Q'): 2.4, ('Q', 'D'): 0.6, ('W', 'W'): 15.7,
-('V', 'L'): 2.0, ('L', 'G'): -4.9, ('W', 'S'): -3.9, ('L', 'K'): -3.3,
-('N', 'P'): -1.1, ('H', 'E'): -0.2, ('N', 'T'): 0.5, ('H', 'A'): -1.6,
-('Y', 'L'): -0.7, ('Y', 'H'): 3.7, ('G', 'S'): 0.6, ('Y', 'D'): -3.0,
-('V', 'Q'): -2.4, ('L', 'T'): -1.0, ('G', 'G'): 6.2, ('G', 'C'): -1.7,
-('E', 'N'): 1.2, ('Y', 'T'): -3.0, ('Y', 'P'): -3.5, ('R', 'N'): 0.4,
-('V', 'D'): -3.0, ('K', 'R'): 3.9, ('V', 'H'): -3.0, ('I', 'Q'): -2.7,
-('V', 'P'): -1.7, ('M', 'C'): -2.5, ('K', 'N'): 1.0, ('V', 'T'): 0.4,
-('M', 'G'): -3.8, ('T', 'S'): 1.5, ('I', 'E'): -3.6, ('M', 'K'): -2.0,
-('I', 'A'): -0.4, ('N', 'N'): 3.3, ('R', 'R'): 5.0, ('F', 'P'): -3.4,
-('L', 'I'): 2.7, ('I', 'S'): -1.4, ('D', 'S'): 0.1, ('L', 'S'): -2.1,
-('I', 'H'): -3.2, ('F', 'D'): -5.4, ('D', 'C'): -3.7, ('F', 'H'): 0.3,
-('D', 'G'): 0.7, ('F', 'L'): 2.2
-}
+        ('W', 'F'): 0.5, ('L', 'R'): -2.9, ('I', 'I'): 4.2, ('Q', 'Q'): 4.2,
+        ('W', 'N'): -5.2, ('V', 'I'): 3.6, ('H', 'T'): -1.1, ('H', 'P'): -0.4,
+        ('W', 'V'): -4.5, ('Q', 'E'): 1.7, ('W', 'R'): -1.1, ('Q', 'A'): -0.9,
+        ('H', 'H'): 6.1, ('H', 'D'): 0.3, ('L', 'N'): -3.5, ('Y', 'M'): -1.8,
+        ('Y', 'I'): -2.2, ('Y', 'E'): -4.0, ('E', 'S'): -0.5, ('Y', 'A'): -3.5,
+        ('Y', 'Y'): 9.0, ('T', 'C'): -1.1, ('E', 'C'): -4.3, ('Y', 'Q'): -1.9,
+        ('E', 'G'): 0.5, ('V', 'A'): 0.4, ('C', 'C'): 12.6, ('M', 'R'): -2.1,
+        ('P', 'T'): 0.4, ('V', 'E'): -2.7, ('P', 'P'): 7.0, ('I', 'T'): 0.3,
+        ('K', 'S'): -0.4, ('R', 'G'): -0.7, ('I', 'P'): -2.3, ('R', 'C'): -1.6,
+        ('A', 'T'): 1.4, ('K', 'K'): 4.4, ('A', 'P'): 0.8, ('V', 'M'): 2.5,
+        ('I', 'D'): -4.0, ('K', 'C'): -3.3, ('K', 'G'): -1.0, ('R', 'S'): -0.5,
+        ('F', 'Q'): -3.6, ('F', 'A'): -3.1, ('V', 'V'): 3.7, ('M', 'N'): -2.6,
+        ('F', 'E'): -5.7, ('D', 'N'): 2.4, ('F', 'I'): 0.5, ('F', 'M'): 0.7,
+        ('M', 'S'): -1.5, ('S', 'S'): 2.0, ('L', 'Q'): -2.0, ('W', 'E'): -6.3,
+        ('W', 'A'): -5.5, ('W', 'M'): -2.8, ('H', 'S'): -0.5, ('W', 'I'): -4.4,
+        ('S', 'C'): 0.3, ('L', 'A'): -1.7, ('L', 'E'): -4.4, ('W', 'Q'): -3.3,
+        ('H', 'G'): -2.0, ('Q', 'N'): 0.5, ('H', 'C'): -1.5, ('L', 'M'): 3.2,
+        ('W', 'Y'): 1.5, ('Y', 'N'): -1.2, ('E', 'P'): -1.7, ('Y', 'F'): 5.9,
+        ('E', 'T'): -0.9, ('A', 'A'): 2.5, ('I', 'N'): -2.7, ('G', 'A'): 0.8,
+        ('Y', 'V'): -2.6, ('E', 'D'): 3.9, ('W', 'H'): -2.7, ('Y', 'R'): -2.7,
+        ('M', 'Q'): -1.7, ('P', 'S'): 1.1, ('R', 'H'): 1.5, ('A', 'C'): -1.2,
+        ('R', 'D'): -1.0, ('K', 'P'): -1.6, ('L', 'D'): -4.9, ('K', 'T'): -0.4,
+        ('V', 'N'): -2.3, ('M', 'A'): -0.8, ('K', 'H'): 0.8, ('V', 'R'): -2.9,
+        ('P', 'C'): -3.1, ('M', 'E'): -3.4, ('A', 'S'): 1.3, ('T', 'T'): 2.5,
+        ('R', 'T'): -0.7, ('I', 'G'): -3.8, ('R', 'P'): -1.2, ('K', 'D'): 0.2,
+        ('I', 'C'): -2.4, ('F', 'R'): -4.3, ('F', 'V'): -0.1, ('L', 'C'): -2.6,
+        ('F', 'F'): 7.7, ('D', 'A'): -0.2, ('F', 'N'): -3.5, ('W', 'D'): -6.4,
+        ('L', 'P'): -1.3, ('Q', 'S'): -0.6, ('N', 'C'): -1.9, ('N', 'G'): 0.4,
+        ('H', 'N'): 1.4, ('W', 'T'): -4.5, ('Q', 'G'): -1.4, ('W', 'P'): -5.8,
+        ('Q', 'C'): -3.3, ('N', 'S'): 1.1, ('L', 'H'): -2.1, ('L', 'L'): 4.6,
+        ('G', 'T'): -0.7, ('M', 'M'): 4.9, ('G', 'P'): -1.8, ('Y', 'K'): -3.6,
+        ('Y', 'G'): -4.8, ('Y', 'C'): 0.6, ('E', 'A'): -0.3, ('E', 'E'): 4.6,
+        ('Y', 'S'): -1.9, ('M', 'P'): -2.0, ('V', 'C'): -1.7, ('M', 'T'): 0.1,
+        ('V', 'G'): -2.5, ('R', 'E'): -0.1, ('V', 'K'): -2.7, ('K', 'Q'): 2.2,
+        ('R', 'A'): -1.2, ('I', 'R'): -3.2, ('N', 'A'): 0.0, ('V', 'S'): -0.9,
+        ('M', 'D'): -3.9, ('M', 'H'): -2.4, ('K', 'A'): -1.0, ('R', 'Q'): 2.2,
+        ('K', 'E'): 1.0, ('F', 'S'): -2.2, ('I', 'K'): -3.0, ('D', 'P'): -1.8,
+        ('D', 'T'): -0.7, ('I', 'M'): 3.1, ('F', 'C'): -0.1, ('W', 'L'): -1.8,
+        ('F', 'G'): -5.8, ('F', 'K'): -5.1, ('F', 'T'): -2.6, ('D', 'D'): 4.8,
+        ('Q', 'T'): -0.7, ('W', 'G'): -4.5, ('Q', 'P'): -0.1, ('W', 'C'): 0.5,
+        ('W', 'K'): -3.7, ('H', 'Q'): 2.4, ('Q', 'D'): 0.6, ('W', 'W'): 15.7,
+        ('V', 'L'): 2.0, ('L', 'G'): -4.9, ('W', 'S'): -3.9, ('L', 'K'): -3.3,
+        ('N', 'P'): -1.1, ('H', 'E'): -0.2, ('N', 'T'): 0.5, ('H', 'A'): -1.6,
+        ('Y', 'L'): -0.7, ('Y', 'H'): 3.7, ('G', 'S'): 0.6, ('Y', 'D'): -3.0,
+        ('V', 'Q'): -2.4, ('L', 'T'): -1.0, ('G', 'G'): 6.2, ('G', 'C'): -1.7,
+        ('E', 'N'): 1.2, ('Y', 'T'): -3.0, ('Y', 'P'): -3.5, ('R', 'N'): 0.4,
+        ('V', 'D'): -3.0, ('K', 'R'): 3.9, ('V', 'H'): -3.0, ('I', 'Q'): -2.7,
+        ('V', 'P'): -1.7, ('M', 'C'): -2.5, ('K', 'N'): 1.0, ('V', 'T'): 0.4,
+        ('M', 'G'): -3.8, ('T', 'S'): 1.5, ('I', 'E'): -3.6, ('M', 'K'): -2.0,
+        ('I', 'A'): -0.4, ('N', 'N'): 3.3, ('R', 'R'): 5.0, ('F', 'P'): -3.4,
+        ('L', 'I'): 2.7, ('I', 'S'): -1.4, ('D', 'S'): 0.1, ('L', 'S'): -2.1,
+        ('I', 'H'): -3.2, ('F', 'D'): -5.4, ('D', 'C'): -3.7, ('F', 'H'): 0.3,
+        ('D', 'G'): 0.7, ('F', 'L'): 2.2
+        }
 benner22 = _temp()
 del _temp
 assert benner6 != benner22
@@ -159,60 +159,60 @@ assert benner6 != benner22
 # http://www.embl-heidelberg.de/~vogt/matrices/benner74.cmp
 def _temp():
     return {
-('W', 'F'): 3.0, ('L', 'R'): -2.4, ('I', 'I'): 4.0, ('Q', 'Q'): 3.0,
-('W', 'N'): -4.0, ('V', 'I'): 3.2, ('H', 'T'): -0.5, ('H', 'P'): -1.0,
-('W', 'V'): -2.9, ('Q', 'E'): 1.7, ('W', 'R'): -1.6, ('Q', 'A'): -0.3,
-('H', 'H'): 6.1, ('H', 'D'): 0.4, ('L', 'N'): -3.1, ('Y', 'M'): -0.5,
-('Y', 'I'): -1.0, ('Y', 'E'): -3.0, ('E', 'S'): 0.1, ('Y', 'A'): -2.6,
-('Y', 'Y'): 8.1, ('T', 'C'): -0.6, ('E', 'C'): -3.2, ('Y', 'Q'): -1.8,
-('E', 'G'): -0.5, ('V', 'A'): 0.1, ('C', 'C'): 11.8, ('M', 'R'): -1.8,
-('P', 'T'): 0.1, ('V', 'E'): -2.1, ('P', 'P'): 7.5, ('I', 'T'): -0.3,
-('K', 'S'): 0.0, ('R', 'G'): -1.0, ('I', 'P'): -2.6, ('R', 'C'): -2.2,
-('A', 'T'): 0.7, ('K', 'K'): 3.4, ('A', 'P'): 0.4, ('V', 'M'): 1.8,
-('I', 'D'): -3.9, ('K', 'C'): -2.9, ('K', 'G'): -1.1, ('R', 'S'): -0.2,
-('F', 'Q'): -2.8, ('F', 'A'): -2.6, ('V', 'V'): 3.4, ('M', 'N'): -2.2,
-('F', 'E'): -4.3, ('D', 'N'): 2.2, ('F', 'I'): 0.9, ('F', 'M'): 1.3,
-('M', 'S'): -1.4, ('S', 'S'): 2.1, ('L', 'Q'): -1.7, ('W', 'E'): -4.7,
-('W', 'A'): -4.1, ('W', 'M'): -1.3, ('H', 'S'): -0.3, ('W', 'I'): -2.3,
-('S', 'C'): 0.1, ('L', 'A'): -1.4, ('L', 'E'): -3.1, ('W', 'Q'): -2.8,
-('H', 'G'): -1.6, ('Q', 'N'): 0.7, ('H', 'C'): -1.3, ('L', 'M'): 2.9,
-('W', 'Y'): 3.6, ('Y', 'N'): -1.4, ('E', 'P'): -0.7, ('Y', 'F'): 5.3,
-('E', 'T'): -0.2, ('A', 'A'): 2.4, ('I', 'N'): -2.8, ('G', 'A'): 0.6,
-('Y', 'V'): -1.4, ('E', 'D'): 2.9, ('W', 'H'): -1.0, ('Y', 'R'): -2.0,
-('M', 'Q'): -1.0, ('P', 'S'): 0.5, ('R', 'H'): 1.0, ('A', 'C'): 0.3,
-('R', 'D'): -0.5, ('K', 'P'): -0.8, ('L', 'D'): -4.2, ('K', 'T'): 0.1,
-('V', 'N'): -2.2, ('M', 'A'): -0.8, ('K', 'H'): 0.6, ('V', 'R'): -2.2,
-('P', 'C'): -3.1, ('M', 'E'): -2.2, ('A', 'S'): 1.1, ('T', 'T'): 2.5,
-('R', 'T'): -0.3, ('I', 'G'): -4.3, ('R', 'P'): -0.1, ('K', 'D'): 0.4,
-('I', 'C'): -1.2, ('F', 'R'): -3.5, ('F', 'V'): 0.1, ('L', 'C'): -1.6,
-('F', 'F'): 7.2, ('D', 'A'): -0.3, ('F', 'N'): -3.2, ('W', 'D'): -5.5,
-('L', 'P'): -2.2, ('Q', 'S'): 0.1, ('N', 'C'): -1.8, ('N', 'G'): 0.4,
-('H', 'N'): 1.2, ('W', 'T'): -3.7, ('Q', 'G'): -1.1, ('W', 'P'): -5.2,
-('Q', 'C'): -2.6, ('N', 'S'): 0.9, ('L', 'H'): -1.9, ('L', 'L'): 4.2,
-('G', 'T'): -1.0, ('M', 'M'): 4.5, ('G', 'P'): -1.7, ('Y', 'K'): -2.4,
-('Y', 'G'): -4.3, ('Y', 'C'): -0.4, ('E', 'A'): -0.1, ('E', 'E'): 3.7,
-('Y', 'S'): -1.9, ('M', 'P'): -2.4, ('V', 'C'): -0.2, ('M', 'T'): -0.4,
-('V', 'G'): -3.1, ('R', 'E'): 0.3, ('V', 'K'): -1.9, ('K', 'Q'): 1.7,
-('R', 'A'): -0.8, ('I', 'R'): -2.6, ('N', 'A'): -0.2, ('V', 'S'): -1.0,
-('M', 'D'): -3.2, ('M', 'H'): -1.5, ('K', 'A'): -0.4, ('R', 'Q'): 1.6,
-('K', 'E'): 1.2, ('F', 'S'): -2.6, ('I', 'K'): -2.3, ('D', 'P'): -1.0,
-('D', 'T'): -0.2, ('I', 'M'): 2.6, ('F', 'C'): -0.7, ('W', 'L'): -0.9,
-('F', 'G'): -5.4, ('F', 'K'): -3.6, ('F', 'T'): -2.2, ('D', 'D'): 4.8,
-('Q', 'T'): -0.1, ('W', 'G'): -4.1, ('Q', 'P'): -0.2, ('W', 'C'): -0.9,
-('W', 'K'): -3.6, ('H', 'Q'): 1.4, ('Q', 'D'): 0.8, ('W', 'W'): 14.7,
-('V', 'L'): 1.9, ('L', 'G'): -4.6, ('W', 'S'): -3.4, ('L', 'K'): -2.4,
-('N', 'P'): -1.0, ('H', 'E'): 0.2, ('N', 'T'): 0.4, ('H', 'A'): -1.0,
-('Y', 'L'): -0.1, ('Y', 'H'): 2.5, ('G', 'S'): 0.4, ('Y', 'D'): -2.8,
-('V', 'Q'): -1.7, ('L', 'T'): -1.1, ('G', 'G'): 6.6, ('G', 'C'): -2.0,
-('E', 'N'): 1.0, ('Y', 'T'): -2.1, ('Y', 'P'): -3.4, ('R', 'N'): 0.3,
-('V', 'D'): -2.9, ('K', 'R'): 2.9, ('V', 'H'): -2.1, ('I', 'Q'): -2.0,
-('V', 'P'): -1.9, ('M', 'C'): -1.2, ('K', 'N'): 0.9, ('V', 'T'): 0.2,
-('M', 'G'): -3.5, ('T', 'S'): 1.4, ('I', 'E'): -2.9, ('M', 'K'): -1.5,
-('I', 'A'): -0.8, ('N', 'N'): 3.6, ('R', 'R'): 4.8, ('F', 'P'): -3.8,
-('L', 'I'): 2.8, ('I', 'S'): -1.8, ('D', 'S'): 0.4, ('L', 'S'): -2.2,
-('I', 'H'): -2.3, ('F', 'D'): -4.7, ('D', 'C'): -3.2, ('F', 'H'): 0.0,
-('D', 'G'): 0.2, ('F', 'L'): 2.1
-}
+        ('W', 'F'): 3.0, ('L', 'R'): -2.4, ('I', 'I'): 4.0, ('Q', 'Q'): 3.0,
+        ('W', 'N'): -4.0, ('V', 'I'): 3.2, ('H', 'T'): -0.5, ('H', 'P'): -1.0,
+        ('W', 'V'): -2.9, ('Q', 'E'): 1.7, ('W', 'R'): -1.6, ('Q', 'A'): -0.3,
+        ('H', 'H'): 6.1, ('H', 'D'): 0.4, ('L', 'N'): -3.1, ('Y', 'M'): -0.5,
+        ('Y', 'I'): -1.0, ('Y', 'E'): -3.0, ('E', 'S'): 0.1, ('Y', 'A'): -2.6,
+        ('Y', 'Y'): 8.1, ('T', 'C'): -0.6, ('E', 'C'): -3.2, ('Y', 'Q'): -1.8,
+        ('E', 'G'): -0.5, ('V', 'A'): 0.1, ('C', 'C'): 11.8, ('M', 'R'): -1.8,
+        ('P', 'T'): 0.1, ('V', 'E'): -2.1, ('P', 'P'): 7.5, ('I', 'T'): -0.3,
+        ('K', 'S'): 0.0, ('R', 'G'): -1.0, ('I', 'P'): -2.6, ('R', 'C'): -2.2,
+        ('A', 'T'): 0.7, ('K', 'K'): 3.4, ('A', 'P'): 0.4, ('V', 'M'): 1.8,
+        ('I', 'D'): -3.9, ('K', 'C'): -2.9, ('K', 'G'): -1.1, ('R', 'S'): -0.2,
+        ('F', 'Q'): -2.8, ('F', 'A'): -2.6, ('V', 'V'): 3.4, ('M', 'N'): -2.2,
+        ('F', 'E'): -4.3, ('D', 'N'): 2.2, ('F', 'I'): 0.9, ('F', 'M'): 1.3,
+        ('M', 'S'): -1.4, ('S', 'S'): 2.1, ('L', 'Q'): -1.7, ('W', 'E'): -4.7,
+        ('W', 'A'): -4.1, ('W', 'M'): -1.3, ('H', 'S'): -0.3, ('W', 'I'): -2.3,
+        ('S', 'C'): 0.1, ('L', 'A'): -1.4, ('L', 'E'): -3.1, ('W', 'Q'): -2.8,
+        ('H', 'G'): -1.6, ('Q', 'N'): 0.7, ('H', 'C'): -1.3, ('L', 'M'): 2.9,
+        ('W', 'Y'): 3.6, ('Y', 'N'): -1.4, ('E', 'P'): -0.7, ('Y', 'F'): 5.3,
+        ('E', 'T'): -0.2, ('A', 'A'): 2.4, ('I', 'N'): -2.8, ('G', 'A'): 0.6,
+        ('Y', 'V'): -1.4, ('E', 'D'): 2.9, ('W', 'H'): -1.0, ('Y', 'R'): -2.0,
+        ('M', 'Q'): -1.0, ('P', 'S'): 0.5, ('R', 'H'): 1.0, ('A', 'C'): 0.3,
+        ('R', 'D'): -0.5, ('K', 'P'): -0.8, ('L', 'D'): -4.2, ('K', 'T'): 0.1,
+        ('V', 'N'): -2.2, ('M', 'A'): -0.8, ('K', 'H'): 0.6, ('V', 'R'): -2.2,
+        ('P', 'C'): -3.1, ('M', 'E'): -2.2, ('A', 'S'): 1.1, ('T', 'T'): 2.5,
+        ('R', 'T'): -0.3, ('I', 'G'): -4.3, ('R', 'P'): -0.1, ('K', 'D'): 0.4,
+        ('I', 'C'): -1.2, ('F', 'R'): -3.5, ('F', 'V'): 0.1, ('L', 'C'): -1.6,
+        ('F', 'F'): 7.2, ('D', 'A'): -0.3, ('F', 'N'): -3.2, ('W', 'D'): -5.5,
+        ('L', 'P'): -2.2, ('Q', 'S'): 0.1, ('N', 'C'): -1.8, ('N', 'G'): 0.4,
+        ('H', 'N'): 1.2, ('W', 'T'): -3.7, ('Q', 'G'): -1.1, ('W', 'P'): -5.2,
+        ('Q', 'C'): -2.6, ('N', 'S'): 0.9, ('L', 'H'): -1.9, ('L', 'L'): 4.2,
+        ('G', 'T'): -1.0, ('M', 'M'): 4.5, ('G', 'P'): -1.7, ('Y', 'K'): -2.4,
+        ('Y', 'G'): -4.3, ('Y', 'C'): -0.4, ('E', 'A'): -0.1, ('E', 'E'): 3.7,
+        ('Y', 'S'): -1.9, ('M', 'P'): -2.4, ('V', 'C'): -0.2, ('M', 'T'): -0.4,
+        ('V', 'G'): -3.1, ('R', 'E'): 0.3, ('V', 'K'): -1.9, ('K', 'Q'): 1.7,
+        ('R', 'A'): -0.8, ('I', 'R'): -2.6, ('N', 'A'): -0.2, ('V', 'S'): -1.0,
+        ('M', 'D'): -3.2, ('M', 'H'): -1.5, ('K', 'A'): -0.4, ('R', 'Q'): 1.6,
+        ('K', 'E'): 1.2, ('F', 'S'): -2.6, ('I', 'K'): -2.3, ('D', 'P'): -1.0,
+        ('D', 'T'): -0.2, ('I', 'M'): 2.6, ('F', 'C'): -0.7, ('W', 'L'): -0.9,
+        ('F', 'G'): -5.4, ('F', 'K'): -3.6, ('F', 'T'): -2.2, ('D', 'D'): 4.8,
+        ('Q', 'T'): -0.1, ('W', 'G'): -4.1, ('Q', 'P'): -0.2, ('W', 'C'): -0.9,
+        ('W', 'K'): -3.6, ('H', 'Q'): 1.4, ('Q', 'D'): 0.8, ('W', 'W'): 14.7,
+        ('V', 'L'): 1.9, ('L', 'G'): -4.6, ('W', 'S'): -3.4, ('L', 'K'): -2.4,
+        ('N', 'P'): -1.0, ('H', 'E'): 0.2, ('N', 'T'): 0.4, ('H', 'A'): -1.0,
+        ('Y', 'L'): -0.1, ('Y', 'H'): 2.5, ('G', 'S'): 0.4, ('Y', 'D'): -2.8,
+        ('V', 'Q'): -1.7, ('L', 'T'): -1.1, ('G', 'G'): 6.6, ('G', 'C'): -2.0,
+        ('E', 'N'): 1.0, ('Y', 'T'): -2.1, ('Y', 'P'): -3.4, ('R', 'N'): 0.3,
+        ('V', 'D'): -2.9, ('K', 'R'): 2.9, ('V', 'H'): -2.1, ('I', 'Q'): -2.0,
+        ('V', 'P'): -1.9, ('M', 'C'): -1.2, ('K', 'N'): 0.9, ('V', 'T'): 0.2,
+        ('M', 'G'): -3.5, ('T', 'S'): 1.4, ('I', 'E'): -2.9, ('M', 'K'): -1.5,
+        ('I', 'A'): -0.8, ('N', 'N'): 3.6, ('R', 'R'): 4.8, ('F', 'P'): -3.8,
+        ('L', 'I'): 2.8, ('I', 'S'): -1.8, ('D', 'S'): 0.4, ('L', 'S'): -2.2,
+        ('I', 'H'): -2.3, ('F', 'D'): -4.7, ('D', 'C'): -3.2, ('F', 'H'): 0.0,
+        ('D', 'G'): 0.2, ('F', 'L'): 2.1
+        }
 benner74 = _temp()
 del _temp
 
@@ -220,76 +220,76 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/blosum100.cmp
 def _temp():
     return {
-('W', 'F'): 0, ('L', 'R'): -4, ('S', 'P'): -2, ('V', 'T'): -1,
-('Q', 'Q'): 7, ('N', 'A'): -2, ('Z', 'Y'): -4, ('W', 'R'): -4,
-('Q', 'A'): -1, ('S', 'D'): -1, ('H', 'H'): 9, ('S', 'H'): -2,
-('H', 'D'): -2, ('L', 'N'): -5, ('W', 'A'): -4, ('Y', 'M'): -3,
-('G', 'R'): -4, ('Y', 'I'): -3, ('Y', 'E'): -4, ('B', 'Y'): -4,
-('Y', 'A'): -4, ('V', 'D'): -5, ('B', 'S'): -1, ('Y', 'Y'): 8,
-('G', 'N'): -2, ('E', 'C'): -6, ('Y', 'Q'): -3, ('Z', 'Z'): 4,
-('V', 'A'): -1, ('C', 'C'): 9, ('M', 'R'): -2, ('V', 'E'): -3,
-('T', 'N'): -1, ('P', 'P'): 8, ('V', 'I'): 2, ('V', 'S'): -3,
-('Z', 'P'): -3, ('V', 'M'): 0, ('T', 'F'): -3, ('V', 'Q'): -3,
-('K', 'K'): 6, ('P', 'D'): -3, ('I', 'H'): -5, ('I', 'D'): -6,
-('T', 'R'): -2, ('P', 'L'): -4, ('K', 'G'): -3, ('M', 'N'): -4,
-('P', 'H'): -3, ('F', 'Q'): -4, ('Z', 'G'): -4, ('X', 'L'): -2,
-('T', 'M'): -2, ('Z', 'C'): -6, ('X', 'H'): -2, ('D', 'R'): -3,
-('B', 'W'): -6, ('X', 'D'): -3, ('Z', 'K'): 0, ('F', 'A'): -4,
-('Z', 'W'): -4, ('F', 'E'): -5, ('D', 'N'): 1, ('B', 'K'): -1,
-('X', 'X'): -2, ('F', 'I'): -1, ('B', 'G'): -2, ('X', 'T'): -1,
-('F', 'M'): -1, ('B', 'C'): -5, ('Z', 'I'): -4, ('Z', 'V'): -3,
-('S', 'S'): 6, ('L', 'Q'): -3, ('W', 'E'): -5, ('Q', 'R'): 0,
-('N', 'N'): 7, ('W', 'M'): -3, ('Q', 'C'): -5, ('W', 'I'): -4,
-('S', 'C'): -2, ('L', 'A'): -3, ('S', 'G'): -1, ('L', 'E'): -5,
-('W', 'Q'): -3, ('H', 'G'): -4, ('S', 'K'): -1, ('Q', 'N'): -1,
-('N', 'R'): -1, ('H', 'C'): -5, ('Y', 'N'): -3, ('G', 'Q'): -3,
-('Y', 'F'): 3, ('C', 'A'): -1, ('V', 'L'): 0, ('G', 'E'): -4,
-('G', 'A'): -1, ('K', 'R'): 2, ('E', 'D'): 1, ('Y', 'R'): -3,
-('M', 'Q'): -1, ('T', 'I'): -2, ('C', 'D'): -5, ('V', 'F'): -2,
-('T', 'A'): -1, ('T', 'P'): -3, ('B', 'P'): -3, ('T', 'E'): -2,
-('V', 'N'): -4, ('P', 'G'): -4, ('M', 'A'): -2, ('K', 'H'): -2,
-('V', 'R'): -4, ('P', 'C'): -5, ('M', 'E'): -4, ('K', 'L'): -4,
-('V', 'V'): 5, ('M', 'I'): 1, ('T', 'Q'): -2, ('I', 'G'): -6,
-('P', 'K'): -2, ('M', 'M'): 8, ('K', 'D'): -2, ('I', 'C'): -2,
-('Z', 'D'): 0, ('F', 'R'): -4, ('X', 'K'): -2, ('Q', 'D'): -2,
-('X', 'G'): -3, ('Z', 'L'): -4, ('X', 'C'): -3, ('Z', 'H'): -1,
-('B', 'L'): -5, ('B', 'H'): -1, ('F', 'F'): 7, ('X', 'W'): -4,
-('B', 'D'): 4, ('D', 'A'): -3, ('S', 'L'): -4, ('X', 'S'): -1,
-('F', 'N'): -5, ('S', 'R'): -2, ('W', 'D'): -7, ('V', 'Y'): -3,
-('W', 'L'): -4, ('H', 'R'): -1, ('W', 'H'): -3, ('H', 'N'): 0,
-('W', 'T'): -5, ('T', 'T'): 6, ('S', 'F'): -3, ('W', 'P'): -6,
-('L', 'D'): -6, ('B', 'I'): -5, ('L', 'H'): -4, ('S', 'N'): 0,
-('B', 'T'): -2, ('L', 'L'): 5, ('Y', 'K'): -4, ('E', 'Q'): 1,
-('Y', 'G'): -6, ('Z', 'S'): -1, ('Y', 'C'): -4, ('G', 'D'): -3,
-('B', 'V'): -5, ('E', 'A'): -2, ('Y', 'W'): 1, ('E', 'E'): 6,
-('Y', 'S'): -3, ('C', 'N'): -4, ('V', 'C'): -2, ('T', 'H'): -3,
-('P', 'R'): -3, ('V', 'G'): -5, ('T', 'L'): -3, ('V', 'K'): -4,
-('K', 'Q'): 1, ('R', 'A'): -2, ('I', 'R'): -4, ('T', 'D'): -2,
-('P', 'F'): -5, ('I', 'N'): -5, ('K', 'I'): -4, ('M', 'D'): -5,
-('V', 'W'): -4, ('W', 'W'): 11, ('M', 'H'): -3, ('P', 'N'): -4,
-('K', 'A'): -2, ('M', 'L'): 2, ('K', 'E'): 0, ('Z', 'E'): 5,
-('X', 'N'): -2, ('Z', 'A'): -2, ('Z', 'M'): -3, ('X', 'F'): -3,
-('K', 'C'): -5, ('B', 'Q'): -1, ('X', 'B'): -2, ('B', 'M'): -4,
-('F', 'C'): -3, ('Z', 'Q'): 3, ('X', 'Z'): -2, ('F', 'G'): -5,
-('B', 'E'): 0, ('X', 'V'): -2, ('F', 'K'): -4, ('B', 'A'): -3,
-('X', 'R'): -2, ('D', 'D'): 7, ('W', 'G'): -5, ('Z', 'F'): -5,
-('S', 'Q'): -1, ('W', 'C'): -5, ('W', 'K'): -5, ('H', 'Q'): 0,
-('L', 'C'): -3, ('W', 'N'): -6, ('S', 'A'): 1, ('L', 'G'): -5,
-('W', 'S'): -4, ('S', 'E'): -1, ('H', 'E'): -1, ('S', 'I'): -4,
-('H', 'A'): -3, ('S', 'M'): -3, ('Y', 'L'): -3, ('Y', 'H'): 1,
-('Y', 'D'): -5, ('E', 'R'): -2, ('X', 'P'): -3, ('G', 'G'): 6,
-('G', 'C'): -5, ('E', 'N'): -1, ('Y', 'T'): -3, ('Y', 'P'): -5,
-('T', 'K'): -2, ('A', 'A'): 5, ('P', 'Q'): -2, ('T', 'C'): -2,
-('V', 'H'): -5, ('T', 'G'): -3, ('I', 'Q'): -4, ('Z', 'T'): -2,
-('C', 'R'): -5, ('V', 'P'): -4, ('P', 'E'): -3, ('M', 'C'): -3,
-('K', 'N'): -1, ('I', 'I'): 5, ('P', 'A'): -1, ('M', 'G'): -5,
-('T', 'S'): 1, ('I', 'E'): -5, ('P', 'M'): -4, ('M', 'K'): -2,
-('I', 'A'): -3, ('P', 'I'): -4, ('R', 'R'): 7, ('X', 'M'): -2,
-('L', 'I'): 1, ('X', 'I'): -2, ('Z', 'B'): 1, ('X', 'E'): -2,
-('Z', 'N'): -1, ('X', 'A'): -1, ('B', 'R'): -2, ('B', 'N'): 4,
-('F', 'D'): -5, ('X', 'Y'): -3, ('Z', 'R'): -1, ('F', 'H'): -2,
-('B', 'F'): -5, ('F', 'L'): 0, ('X', 'Q'): -2, ('B', 'B'): 4
-}
+        ('W', 'F'): 0, ('L', 'R'): -4, ('S', 'P'): -2, ('V', 'T'): -1,
+        ('Q', 'Q'): 7, ('N', 'A'): -2, ('Z', 'Y'): -4, ('W', 'R'): -4,
+        ('Q', 'A'): -1, ('S', 'D'): -1, ('H', 'H'): 9, ('S', 'H'): -2,
+        ('H', 'D'): -2, ('L', 'N'): -5, ('W', 'A'): -4, ('Y', 'M'): -3,
+        ('G', 'R'): -4, ('Y', 'I'): -3, ('Y', 'E'): -4, ('B', 'Y'): -4,
+        ('Y', 'A'): -4, ('V', 'D'): -5, ('B', 'S'): -1, ('Y', 'Y'): 8,
+        ('G', 'N'): -2, ('E', 'C'): -6, ('Y', 'Q'): -3, ('Z', 'Z'): 4,
+        ('V', 'A'): -1, ('C', 'C'): 9, ('M', 'R'): -2, ('V', 'E'): -3,
+        ('T', 'N'): -1, ('P', 'P'): 8, ('V', 'I'): 2, ('V', 'S'): -3,
+        ('Z', 'P'): -3, ('V', 'M'): 0, ('T', 'F'): -3, ('V', 'Q'): -3,
+        ('K', 'K'): 6, ('P', 'D'): -3, ('I', 'H'): -5, ('I', 'D'): -6,
+        ('T', 'R'): -2, ('P', 'L'): -4, ('K', 'G'): -3, ('M', 'N'): -4,
+        ('P', 'H'): -3, ('F', 'Q'): -4, ('Z', 'G'): -4, ('X', 'L'): -2,
+        ('T', 'M'): -2, ('Z', 'C'): -6, ('X', 'H'): -2, ('D', 'R'): -3,
+        ('B', 'W'): -6, ('X', 'D'): -3, ('Z', 'K'): 0, ('F', 'A'): -4,
+        ('Z', 'W'): -4, ('F', 'E'): -5, ('D', 'N'): 1, ('B', 'K'): -1,
+        ('X', 'X'): -2, ('F', 'I'): -1, ('B', 'G'): -2, ('X', 'T'): -1,
+        ('F', 'M'): -1, ('B', 'C'): -5, ('Z', 'I'): -4, ('Z', 'V'): -3,
+        ('S', 'S'): 6, ('L', 'Q'): -3, ('W', 'E'): -5, ('Q', 'R'): 0,
+        ('N', 'N'): 7, ('W', 'M'): -3, ('Q', 'C'): -5, ('W', 'I'): -4,
+        ('S', 'C'): -2, ('L', 'A'): -3, ('S', 'G'): -1, ('L', 'E'): -5,
+        ('W', 'Q'): -3, ('H', 'G'): -4, ('S', 'K'): -1, ('Q', 'N'): -1,
+        ('N', 'R'): -1, ('H', 'C'): -5, ('Y', 'N'): -3, ('G', 'Q'): -3,
+        ('Y', 'F'): 3, ('C', 'A'): -1, ('V', 'L'): 0, ('G', 'E'): -4,
+        ('G', 'A'): -1, ('K', 'R'): 2, ('E', 'D'): 1, ('Y', 'R'): -3,
+        ('M', 'Q'): -1, ('T', 'I'): -2, ('C', 'D'): -5, ('V', 'F'): -2,
+        ('T', 'A'): -1, ('T', 'P'): -3, ('B', 'P'): -3, ('T', 'E'): -2,
+        ('V', 'N'): -4, ('P', 'G'): -4, ('M', 'A'): -2, ('K', 'H'): -2,
+        ('V', 'R'): -4, ('P', 'C'): -5, ('M', 'E'): -4, ('K', 'L'): -4,
+        ('V', 'V'): 5, ('M', 'I'): 1, ('T', 'Q'): -2, ('I', 'G'): -6,
+        ('P', 'K'): -2, ('M', 'M'): 8, ('K', 'D'): -2, ('I', 'C'): -2,
+        ('Z', 'D'): 0, ('F', 'R'): -4, ('X', 'K'): -2, ('Q', 'D'): -2,
+        ('X', 'G'): -3, ('Z', 'L'): -4, ('X', 'C'): -3, ('Z', 'H'): -1,
+        ('B', 'L'): -5, ('B', 'H'): -1, ('F', 'F'): 7, ('X', 'W'): -4,
+        ('B', 'D'): 4, ('D', 'A'): -3, ('S', 'L'): -4, ('X', 'S'): -1,
+        ('F', 'N'): -5, ('S', 'R'): -2, ('W', 'D'): -7, ('V', 'Y'): -3,
+        ('W', 'L'): -4, ('H', 'R'): -1, ('W', 'H'): -3, ('H', 'N'): 0,
+        ('W', 'T'): -5, ('T', 'T'): 6, ('S', 'F'): -3, ('W', 'P'): -6,
+        ('L', 'D'): -6, ('B', 'I'): -5, ('L', 'H'): -4, ('S', 'N'): 0,
+        ('B', 'T'): -2, ('L', 'L'): 5, ('Y', 'K'): -4, ('E', 'Q'): 1,
+        ('Y', 'G'): -6, ('Z', 'S'): -1, ('Y', 'C'): -4, ('G', 'D'): -3,
+        ('B', 'V'): -5, ('E', 'A'): -2, ('Y', 'W'): 1, ('E', 'E'): 6,
+        ('Y', 'S'): -3, ('C', 'N'): -4, ('V', 'C'): -2, ('T', 'H'): -3,
+        ('P', 'R'): -3, ('V', 'G'): -5, ('T', 'L'): -3, ('V', 'K'): -4,
+        ('K', 'Q'): 1, ('R', 'A'): -2, ('I', 'R'): -4, ('T', 'D'): -2,
+        ('P', 'F'): -5, ('I', 'N'): -5, ('K', 'I'): -4, ('M', 'D'): -5,
+        ('V', 'W'): -4, ('W', 'W'): 11, ('M', 'H'): -3, ('P', 'N'): -4,
+        ('K', 'A'): -2, ('M', 'L'): 2, ('K', 'E'): 0, ('Z', 'E'): 5,
+        ('X', 'N'): -2, ('Z', 'A'): -2, ('Z', 'M'): -3, ('X', 'F'): -3,
+        ('K', 'C'): -5, ('B', 'Q'): -1, ('X', 'B'): -2, ('B', 'M'): -4,
+        ('F', 'C'): -3, ('Z', 'Q'): 3, ('X', 'Z'): -2, ('F', 'G'): -5,
+        ('B', 'E'): 0, ('X', 'V'): -2, ('F', 'K'): -4, ('B', 'A'): -3,
+        ('X', 'R'): -2, ('D', 'D'): 7, ('W', 'G'): -5, ('Z', 'F'): -5,
+        ('S', 'Q'): -1, ('W', 'C'): -5, ('W', 'K'): -5, ('H', 'Q'): 0,
+        ('L', 'C'): -3, ('W', 'N'): -6, ('S', 'A'): 1, ('L', 'G'): -5,
+        ('W', 'S'): -4, ('S', 'E'): -1, ('H', 'E'): -1, ('S', 'I'): -4,
+        ('H', 'A'): -3, ('S', 'M'): -3, ('Y', 'L'): -3, ('Y', 'H'): 1,
+        ('Y', 'D'): -5, ('E', 'R'): -2, ('X', 'P'): -3, ('G', 'G'): 6,
+        ('G', 'C'): -5, ('E', 'N'): -1, ('Y', 'T'): -3, ('Y', 'P'): -5,
+        ('T', 'K'): -2, ('A', 'A'): 5, ('P', 'Q'): -2, ('T', 'C'): -2,
+        ('V', 'H'): -5, ('T', 'G'): -3, ('I', 'Q'): -4, ('Z', 'T'): -2,
+        ('C', 'R'): -5, ('V', 'P'): -4, ('P', 'E'): -3, ('M', 'C'): -3,
+        ('K', 'N'): -1, ('I', 'I'): 5, ('P', 'A'): -1, ('M', 'G'): -5,
+        ('T', 'S'): 1, ('I', 'E'): -5, ('P', 'M'): -4, ('M', 'K'): -2,
+        ('I', 'A'): -3, ('P', 'I'): -4, ('R', 'R'): 7, ('X', 'M'): -2,
+        ('L', 'I'): 1, ('X', 'I'): -2, ('Z', 'B'): 1, ('X', 'E'): -2,
+        ('Z', 'N'): -1, ('X', 'A'): -1, ('B', 'R'): -2, ('B', 'N'): 4,
+        ('F', 'D'): -5, ('X', 'Y'): -3, ('Z', 'R'): -1, ('F', 'H'): -2,
+        ('B', 'F'): -5, ('F', 'L'): 0, ('X', 'Q'): -2, ('B', 'B'): 4
+        }
 blosum100 = _temp()
 del _temp
 
@@ -297,76 +297,76 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/blosum30.cmp
 def _temp():
     return {
-('W', 'F'): 1, ('L', 'R'): -2, ('S', 'P'): -1, ('V', 'T'): 1,
-('Q', 'Q'): 8, ('N', 'A'): 0, ('Z', 'Y'): -2, ('W', 'R'): 0,
-('Q', 'A'): 1, ('S', 'D'): 0, ('H', 'H'): 14, ('S', 'H'): -1,
-('H', 'D'): -2, ('L', 'N'): -2, ('W', 'A'): -5, ('Y', 'M'): -1,
-('G', 'R'): -2, ('Y', 'I'): -1, ('Y', 'E'): -2, ('B', 'Y'): -3,
-('Y', 'A'): -4, ('V', 'D'): -2, ('B', 'S'): 0, ('Y', 'Y'): 9,
-('G', 'N'): 0, ('E', 'C'): 1, ('Y', 'Q'): -1, ('Z', 'Z'): 4,
-('V', 'A'): 1, ('C', 'C'): 17, ('M', 'R'): 0, ('V', 'E'): -3,
-('T', 'N'): 1, ('P', 'P'): 11, ('V', 'I'): 4, ('V', 'S'): -1,
-('Z', 'P'): 0, ('V', 'M'): 0, ('T', 'F'): -2, ('V', 'Q'): -3,
-('K', 'K'): 4, ('P', 'D'): -1, ('I', 'H'): -2, ('I', 'D'): -4,
-('T', 'R'): -3, ('P', 'L'): -3, ('K', 'G'): -1, ('M', 'N'): 0,
-('P', 'H'): 1, ('F', 'Q'): -3, ('Z', 'G'): -2, ('X', 'L'): 0,
-('T', 'M'): 0, ('Z', 'C'): 0, ('X', 'H'): -1, ('D', 'R'): -1,
-('B', 'W'): -5, ('X', 'D'): -1, ('Z', 'K'): 1, ('F', 'A'): -2,
-('Z', 'W'): -1, ('F', 'E'): -4, ('D', 'N'): 1, ('B', 'K'): 0,
-('X', 'X'): -1, ('F', 'I'): 0, ('B', 'G'): 0, ('X', 'T'): 0,
-('F', 'M'): -2, ('B', 'C'): -2, ('Z', 'I'): -3, ('Z', 'V'): -3,
-('S', 'S'): 4, ('L', 'Q'): -2, ('W', 'E'): -1, ('Q', 'R'): 3,
-('N', 'N'): 8, ('W', 'M'): -3, ('Q', 'C'): -2, ('W', 'I'): -3,
-('S', 'C'): -2, ('L', 'A'): -1, ('S', 'G'): 0, ('L', 'E'): -1,
-('W', 'Q'): -1, ('H', 'G'): -3, ('S', 'K'): 0, ('Q', 'N'): -1,
-('N', 'R'): -2, ('H', 'C'): -5, ('Y', 'N'): -4, ('G', 'Q'): -2,
-('Y', 'F'): 3, ('C', 'A'): -3, ('V', 'L'): 1, ('G', 'E'): -2,
-('G', 'A'): 0, ('K', 'R'): 1, ('E', 'D'): 1, ('Y', 'R'): 0,
-('M', 'Q'): -1, ('T', 'I'): 0, ('C', 'D'): -3, ('V', 'F'): 1,
-('T', 'A'): 1, ('T', 'P'): 0, ('B', 'P'): -2, ('T', 'E'): -2,
-('V', 'N'): -2, ('P', 'G'): -1, ('M', 'A'): 1, ('K', 'H'): -2,
-('V', 'R'): -1, ('P', 'C'): -3, ('M', 'E'): -1, ('K', 'L'): -2,
-('V', 'V'): 5, ('M', 'I'): 1, ('T', 'Q'): 0, ('I', 'G'): -1,
-('P', 'K'): 1, ('M', 'M'): 6, ('K', 'D'): 0, ('I', 'C'): -2,
-('Z', 'D'): 0, ('F', 'R'): -1, ('X', 'K'): 0, ('Q', 'D'): -1,
-('X', 'G'): -1, ('Z', 'L'): -1, ('X', 'C'): -2, ('Z', 'H'): 0,
-('B', 'L'): -1, ('B', 'H'): -2, ('F', 'F'): 10, ('X', 'W'): -2,
-('B', 'D'): 5, ('D', 'A'): 0, ('S', 'L'): -2, ('X', 'S'): 0,
-('F', 'N'): -1, ('S', 'R'): -1, ('W', 'D'): -4, ('V', 'Y'): 1,
-('W', 'L'): -2, ('H', 'R'): -1, ('W', 'H'): -5, ('H', 'N'): -1,
-('W', 'T'): -5, ('T', 'T'): 5, ('S', 'F'): -1, ('W', 'P'): -3,
-('L', 'D'): -1, ('B', 'I'): -2, ('L', 'H'): -1, ('S', 'N'): 0,
-('B', 'T'): 0, ('L', 'L'): 4, ('Y', 'K'): -1, ('E', 'Q'): 2,
-('Y', 'G'): -3, ('Z', 'S'): -1, ('Y', 'C'): -6, ('G', 'D'): -1,
-('B', 'V'): -2, ('E', 'A'): 0, ('Y', 'W'): 5, ('E', 'E'): 6,
-('Y', 'S'): -2, ('C', 'N'): -1, ('V', 'C'): -2, ('T', 'H'): -2,
-('P', 'R'): -1, ('V', 'G'): -3, ('T', 'L'): 0, ('V', 'K'): -2,
-('K', 'Q'): 0, ('R', 'A'): -1, ('I', 'R'): -3, ('T', 'D'): -1,
-('P', 'F'): -4, ('I', 'N'): 0, ('K', 'I'): -2, ('M', 'D'): -3,
-('V', 'W'): -3, ('W', 'W'): 20, ('M', 'H'): 2, ('P', 'N'): -3,
-('K', 'A'): 0, ('M', 'L'): 2, ('K', 'E'): 2, ('Z', 'E'): 5,
-('X', 'N'): 0, ('Z', 'A'): 0, ('Z', 'M'): -1, ('X', 'F'): -1,
-('K', 'C'): -3, ('B', 'Q'): -1, ('X', 'B'): -1, ('B', 'M'): -2,
-('F', 'C'): -3, ('Z', 'Q'): 4, ('X', 'Z'): 0, ('F', 'G'): -3,
-('B', 'E'): 0, ('X', 'V'): 0, ('F', 'K'): -1, ('B', 'A'): 0,
-('X', 'R'): -1, ('D', 'D'): 9, ('W', 'G'): 1, ('Z', 'F'): -4,
-('S', 'Q'): -1, ('W', 'C'): -2, ('W', 'K'): -2, ('H', 'Q'): 0,
-('L', 'C'): 0, ('W', 'N'): -7, ('S', 'A'): 1, ('L', 'G'): -2,
-('W', 'S'): -3, ('S', 'E'): 0, ('H', 'E'): 0, ('S', 'I'): -1,
-('H', 'A'): -2, ('S', 'M'): -2, ('Y', 'L'): 3, ('Y', 'H'): 0,
-('Y', 'D'): -1, ('E', 'R'): -1, ('X', 'P'): -1, ('G', 'G'): 8,
-('G', 'C'): -4, ('E', 'N'): -1, ('Y', 'T'): -1, ('Y', 'P'): -2,
-('T', 'K'): -1, ('A', 'A'): 4, ('P', 'Q'): 0, ('T', 'C'): -2,
-('V', 'H'): -3, ('T', 'G'): -2, ('I', 'Q'): -2, ('Z', 'T'): -1,
-('C', 'R'): -2, ('V', 'P'): -4, ('P', 'E'): 1, ('M', 'C'): -2,
-('K', 'N'): 0, ('I', 'I'): 6, ('P', 'A'): -1, ('M', 'G'): -2,
-('T', 'S'): 2, ('I', 'E'): -3, ('P', 'M'): -4, ('M', 'K'): 2,
-('I', 'A'): 0, ('P', 'I'): -3, ('R', 'R'): 8, ('X', 'M'): 0,
-('L', 'I'): 2, ('X', 'I'): 0, ('Z', 'B'): 0, ('X', 'E'): -1,
-('Z', 'N'): -1, ('X', 'A'): 0, ('B', 'R'): -2, ('B', 'N'): 4,
-('F', 'D'): -5, ('X', 'Y'): -1, ('Z', 'R'): 0, ('F', 'H'): -3,
-('B', 'F'): -3, ('F', 'L'): 2, ('X', 'Q'): 0, ('B', 'B'): 5
-}
+        ('W', 'F'): 1, ('L', 'R'): -2, ('S', 'P'): -1, ('V', 'T'): 1,
+        ('Q', 'Q'): 8, ('N', 'A'): 0, ('Z', 'Y'): -2, ('W', 'R'): 0,
+        ('Q', 'A'): 1, ('S', 'D'): 0, ('H', 'H'): 14, ('S', 'H'): -1,
+        ('H', 'D'): -2, ('L', 'N'): -2, ('W', 'A'): -5, ('Y', 'M'): -1,
+        ('G', 'R'): -2, ('Y', 'I'): -1, ('Y', 'E'): -2, ('B', 'Y'): -3,
+        ('Y', 'A'): -4, ('V', 'D'): -2, ('B', 'S'): 0, ('Y', 'Y'): 9,
+        ('G', 'N'): 0, ('E', 'C'): 1, ('Y', 'Q'): -1, ('Z', 'Z'): 4,
+        ('V', 'A'): 1, ('C', 'C'): 17, ('M', 'R'): 0, ('V', 'E'): -3,
+        ('T', 'N'): 1, ('P', 'P'): 11, ('V', 'I'): 4, ('V', 'S'): -1,
+        ('Z', 'P'): 0, ('V', 'M'): 0, ('T', 'F'): -2, ('V', 'Q'): -3,
+        ('K', 'K'): 4, ('P', 'D'): -1, ('I', 'H'): -2, ('I', 'D'): -4,
+        ('T', 'R'): -3, ('P', 'L'): -3, ('K', 'G'): -1, ('M', 'N'): 0,
+        ('P', 'H'): 1, ('F', 'Q'): -3, ('Z', 'G'): -2, ('X', 'L'): 0,
+        ('T', 'M'): 0, ('Z', 'C'): 0, ('X', 'H'): -1, ('D', 'R'): -1,
+        ('B', 'W'): -5, ('X', 'D'): -1, ('Z', 'K'): 1, ('F', 'A'): -2,
+        ('Z', 'W'): -1, ('F', 'E'): -4, ('D', 'N'): 1, ('B', 'K'): 0,
+        ('X', 'X'): -1, ('F', 'I'): 0, ('B', 'G'): 0, ('X', 'T'): 0,
+        ('F', 'M'): -2, ('B', 'C'): -2, ('Z', 'I'): -3, ('Z', 'V'): -3,
+        ('S', 'S'): 4, ('L', 'Q'): -2, ('W', 'E'): -1, ('Q', 'R'): 3,
+        ('N', 'N'): 8, ('W', 'M'): -3, ('Q', 'C'): -2, ('W', 'I'): -3,
+        ('S', 'C'): -2, ('L', 'A'): -1, ('S', 'G'): 0, ('L', 'E'): -1,
+        ('W', 'Q'): -1, ('H', 'G'): -3, ('S', 'K'): 0, ('Q', 'N'): -1,
+        ('N', 'R'): -2, ('H', 'C'): -5, ('Y', 'N'): -4, ('G', 'Q'): -2,
+        ('Y', 'F'): 3, ('C', 'A'): -3, ('V', 'L'): 1, ('G', 'E'): -2,
+        ('G', 'A'): 0, ('K', 'R'): 1, ('E', 'D'): 1, ('Y', 'R'): 0,
+        ('M', 'Q'): -1, ('T', 'I'): 0, ('C', 'D'): -3, ('V', 'F'): 1,
+        ('T', 'A'): 1, ('T', 'P'): 0, ('B', 'P'): -2, ('T', 'E'): -2,
+        ('V', 'N'): -2, ('P', 'G'): -1, ('M', 'A'): 1, ('K', 'H'): -2,
+        ('V', 'R'): -1, ('P', 'C'): -3, ('M', 'E'): -1, ('K', 'L'): -2,
+        ('V', 'V'): 5, ('M', 'I'): 1, ('T', 'Q'): 0, ('I', 'G'): -1,
+        ('P', 'K'): 1, ('M', 'M'): 6, ('K', 'D'): 0, ('I', 'C'): -2,
+        ('Z', 'D'): 0, ('F', 'R'): -1, ('X', 'K'): 0, ('Q', 'D'): -1,
+        ('X', 'G'): -1, ('Z', 'L'): -1, ('X', 'C'): -2, ('Z', 'H'): 0,
+        ('B', 'L'): -1, ('B', 'H'): -2, ('F', 'F'): 10, ('X', 'W'): -2,
+        ('B', 'D'): 5, ('D', 'A'): 0, ('S', 'L'): -2, ('X', 'S'): 0,
+        ('F', 'N'): -1, ('S', 'R'): -1, ('W', 'D'): -4, ('V', 'Y'): 1,
+        ('W', 'L'): -2, ('H', 'R'): -1, ('W', 'H'): -5, ('H', 'N'): -1,
+        ('W', 'T'): -5, ('T', 'T'): 5, ('S', 'F'): -1, ('W', 'P'): -3,
+        ('L', 'D'): -1, ('B', 'I'): -2, ('L', 'H'): -1, ('S', 'N'): 0,
+        ('B', 'T'): 0, ('L', 'L'): 4, ('Y', 'K'): -1, ('E', 'Q'): 2,
+        ('Y', 'G'): -3, ('Z', 'S'): -1, ('Y', 'C'): -6, ('G', 'D'): -1,
+        ('B', 'V'): -2, ('E', 'A'): 0, ('Y', 'W'): 5, ('E', 'E'): 6,
+        ('Y', 'S'): -2, ('C', 'N'): -1, ('V', 'C'): -2, ('T', 'H'): -2,
+        ('P', 'R'): -1, ('V', 'G'): -3, ('T', 'L'): 0, ('V', 'K'): -2,
+        ('K', 'Q'): 0, ('R', 'A'): -1, ('I', 'R'): -3, ('T', 'D'): -1,
+        ('P', 'F'): -4, ('I', 'N'): 0, ('K', 'I'): -2, ('M', 'D'): -3,
+        ('V', 'W'): -3, ('W', 'W'): 20, ('M', 'H'): 2, ('P', 'N'): -3,
+        ('K', 'A'): 0, ('M', 'L'): 2, ('K', 'E'): 2, ('Z', 'E'): 5,
+        ('X', 'N'): 0, ('Z', 'A'): 0, ('Z', 'M'): -1, ('X', 'F'): -1,
+        ('K', 'C'): -3, ('B', 'Q'): -1, ('X', 'B'): -1, ('B', 'M'): -2,
+        ('F', 'C'): -3, ('Z', 'Q'): 4, ('X', 'Z'): 0, ('F', 'G'): -3,
+        ('B', 'E'): 0, ('X', 'V'): 0, ('F', 'K'): -1, ('B', 'A'): 0,
+        ('X', 'R'): -1, ('D', 'D'): 9, ('W', 'G'): 1, ('Z', 'F'): -4,
+        ('S', 'Q'): -1, ('W', 'C'): -2, ('W', 'K'): -2, ('H', 'Q'): 0,
+        ('L', 'C'): 0, ('W', 'N'): -7, ('S', 'A'): 1, ('L', 'G'): -2,
+        ('W', 'S'): -3, ('S', 'E'): 0, ('H', 'E'): 0, ('S', 'I'): -1,
+        ('H', 'A'): -2, ('S', 'M'): -2, ('Y', 'L'): 3, ('Y', 'H'): 0,
+        ('Y', 'D'): -1, ('E', 'R'): -1, ('X', 'P'): -1, ('G', 'G'): 8,
+        ('G', 'C'): -4, ('E', 'N'): -1, ('Y', 'T'): -1, ('Y', 'P'): -2,
+        ('T', 'K'): -1, ('A', 'A'): 4, ('P', 'Q'): 0, ('T', 'C'): -2,
+        ('V', 'H'): -3, ('T', 'G'): -2, ('I', 'Q'): -2, ('Z', 'T'): -1,
+        ('C', 'R'): -2, ('V', 'P'): -4, ('P', 'E'): 1, ('M', 'C'): -2,
+        ('K', 'N'): 0, ('I', 'I'): 6, ('P', 'A'): -1, ('M', 'G'): -2,
+        ('T', 'S'): 2, ('I', 'E'): -3, ('P', 'M'): -4, ('M', 'K'): 2,
+        ('I', 'A'): 0, ('P', 'I'): -3, ('R', 'R'): 8, ('X', 'M'): 0,
+        ('L', 'I'): 2, ('X', 'I'): 0, ('Z', 'B'): 0, ('X', 'E'): -1,
+        ('Z', 'N'): -1, ('X', 'A'): 0, ('B', 'R'): -2, ('B', 'N'): 4,
+        ('F', 'D'): -5, ('X', 'Y'): -1, ('Z', 'R'): 0, ('F', 'H'): -3,
+        ('B', 'F'): -3, ('F', 'L'): 2, ('X', 'Q'): 0, ('B', 'B'): 5
+        }
 blosum30 = _temp()
 del _temp
 
@@ -374,76 +374,76 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/blosum35.cmp
 def _temp():
     return {
-('W', 'F'): 1, ('L', 'R'): -2, ('S', 'P'): -2, ('V', 'T'): 1,
-('Q', 'Q'): 7, ('N', 'A'): -1, ('Z', 'Y'): -1, ('W', 'R'): 0,
-('Q', 'A'): 0, ('S', 'D'): -1, ('H', 'H'): 12, ('S', 'H'): -1,
-('H', 'D'): 0, ('L', 'N'): -2, ('W', 'A'): -2, ('Y', 'M'): 0,
-('G', 'R'): -2, ('Y', 'I'): 0, ('Y', 'E'): -1, ('B', 'Y'): -2,
-('Y', 'A'): -1, ('V', 'D'): -2, ('B', 'S'): 0, ('Y', 'Y'): 8,
-('G', 'N'): 1, ('E', 'C'): -1, ('Y', 'Q'): 0, ('Z', 'Z'): 4,
-('V', 'A'): 0, ('C', 'C'): 15, ('M', 'R'): 0, ('V', 'E'): -2,
-('T', 'N'): 0, ('P', 'P'): 10, ('V', 'I'): 4, ('V', 'S'): -1,
-('Z', 'P'): 0, ('V', 'M'): 1, ('T', 'F'): -1, ('V', 'Q'): -3,
-('K', 'K'): 5, ('P', 'D'): -1, ('I', 'H'): -3, ('I', 'D'): -3,
-('T', 'R'): -2, ('P', 'L'): -3, ('K', 'G'): -1, ('M', 'N'): -1,
-('P', 'H'): -1, ('F', 'Q'): -4, ('Z', 'G'): -2, ('X', 'L'): 0,
-('T', 'M'): 0, ('Z', 'C'): -2, ('X', 'H'): -1, ('D', 'R'): -1,
-('B', 'W'): -3, ('X', 'D'): -1, ('Z', 'K'): 1, ('F', 'A'): -2,
-('Z', 'W'): -1, ('F', 'E'): -3, ('D', 'N'): 1, ('B', 'K'): 0,
-('X', 'X'): -1, ('F', 'I'): 1, ('B', 'G'): 0, ('X', 'T'): 0,
-('F', 'M'): 0, ('B', 'C'): -2, ('Z', 'I'): -3, ('Z', 'V'): -2,
-('S', 'S'): 4, ('L', 'Q'): -2, ('W', 'E'): -1, ('Q', 'R'): 2,
-('N', 'N'): 7, ('W', 'M'): 1, ('Q', 'C'): -3, ('W', 'I'): -1,
-('S', 'C'): -3, ('L', 'A'): -2, ('S', 'G'): 1, ('L', 'E'): -1,
-('W', 'Q'): -1, ('H', 'G'): -2, ('S', 'K'): 0, ('Q', 'N'): 1,
-('N', 'R'): -1, ('H', 'C'): -4, ('Y', 'N'): -2, ('G', 'Q'): -2,
-('Y', 'F'): 3, ('C', 'A'): -2, ('V', 'L'): 2, ('G', 'E'): -2,
-('G', 'A'): 0, ('K', 'R'): 2, ('E', 'D'): 2, ('Y', 'R'): 0,
-('M', 'Q'): -1, ('T', 'I'): -1, ('C', 'D'): -3, ('V', 'F'): 1,
-('T', 'A'): 0, ('T', 'P'): 0, ('B', 'P'): -1, ('T', 'E'): -1,
-('V', 'N'): -2, ('P', 'G'): -2, ('M', 'A'): 0, ('K', 'H'): -2,
-('V', 'R'): -1, ('P', 'C'): -4, ('M', 'E'): -2, ('K', 'L'): -2,
-('V', 'V'): 5, ('M', 'I'): 1, ('T', 'Q'): 0, ('I', 'G'): -3,
-('P', 'K'): 0, ('M', 'M'): 6, ('K', 'D'): -1, ('I', 'C'): -4,
-('Z', 'D'): 1, ('F', 'R'): -1, ('X', 'K'): 0, ('Q', 'D'): -1,
-('X', 'G'): -1, ('Z', 'L'): -2, ('X', 'C'): -2, ('Z', 'H'): -1,
-('B', 'L'): -2, ('B', 'H'): 0, ('F', 'F'): 8, ('X', 'W'): -1,
-('B', 'D'): 5, ('D', 'A'): -1, ('S', 'L'): -2, ('X', 'S'): 0,
-('F', 'N'): -1, ('S', 'R'): -1, ('W', 'D'): -3, ('V', 'Y'): 0,
-('W', 'L'): 0, ('H', 'R'): -1, ('W', 'H'): -4, ('H', 'N'): 1,
-('W', 'T'): -2, ('T', 'T'): 5, ('S', 'F'): -1, ('W', 'P'): -4,
-('L', 'D'): -2, ('B', 'I'): -2, ('L', 'H'): -2, ('S', 'N'): 0,
-('B', 'T'): -1, ('L', 'L'): 5, ('Y', 'K'): -1, ('E', 'Q'): 2,
-('Y', 'G'): -2, ('Z', 'S'): 0, ('Y', 'C'): -5, ('G', 'D'): -2,
-('B', 'V'): -2, ('E', 'A'): -1, ('Y', 'W'): 3, ('E', 'E'): 6,
-('Y', 'S'): -1, ('C', 'N'): -1, ('V', 'C'): -2, ('T', 'H'): -2,
-('P', 'R'): -2, ('V', 'G'): -3, ('T', 'L'): 0, ('V', 'K'): -2,
-('K', 'Q'): 0, ('R', 'A'): -1, ('I', 'R'): -3, ('T', 'D'): -1,
-('P', 'F'): -4, ('I', 'N'): -1, ('K', 'I'): -2, ('M', 'D'): -3,
-('V', 'W'): -2, ('W', 'W'): 16, ('M', 'H'): 1, ('P', 'N'): -2,
-('K', 'A'): 0, ('M', 'L'): 3, ('K', 'E'): 1, ('Z', 'E'): 5,
-('X', 'N'): 0, ('Z', 'A'): -1, ('Z', 'M'): -2, ('X', 'F'): -1,
-('K', 'C'): -2, ('B', 'Q'): 0, ('X', 'B'): -1, ('B', 'M'): -2,
-('F', 'C'): -4, ('Z', 'Q'): 4, ('X', 'Z'): 0, ('F', 'G'): -3,
-('B', 'E'): 0, ('X', 'V'): 0, ('F', 'K'): -1, ('B', 'A'): -1,
-('X', 'R'): -1, ('D', 'D'): 8, ('W', 'G'): -1, ('Z', 'F'): -3,
-('S', 'Q'): 0, ('W', 'C'): -5, ('W', 'K'): 0, ('H', 'Q'): -1,
-('L', 'C'): -2, ('W', 'N'): -2, ('S', 'A'): 1, ('L', 'G'): -3,
-('W', 'S'): -2, ('S', 'E'): 0, ('H', 'E'): -1, ('S', 'I'): -2,
-('H', 'A'): -2, ('S', 'M'): -1, ('Y', 'L'): 0, ('Y', 'H'): 0,
-('Y', 'D'): -2, ('E', 'R'): -1, ('X', 'P'): -1, ('G', 'G'): 7,
-('G', 'C'): -3, ('E', 'N'): -1, ('Y', 'T'): -2, ('Y', 'P'): -3,
-('T', 'K'): 0, ('A', 'A'): 5, ('P', 'Q'): 0, ('T', 'C'): -1,
-('V', 'H'): -4, ('T', 'G'): -2, ('I', 'Q'): -2, ('Z', 'T'): -1,
-('C', 'R'): -3, ('V', 'P'): -3, ('P', 'E'): 0, ('M', 'C'): -4,
-('K', 'N'): 0, ('I', 'I'): 5, ('P', 'A'): -2, ('M', 'G'): -1,
-('T', 'S'): 2, ('I', 'E'): -3, ('P', 'M'): -3, ('M', 'K'): 0,
-('I', 'A'): -1, ('P', 'I'): -1, ('R', 'R'): 8, ('X', 'M'): 0,
-('L', 'I'): 2, ('X', 'I'): 0, ('Z', 'B'): 0, ('X', 'E'): -1,
-('Z', 'N'): 0, ('X', 'A'): 0, ('B', 'R'): -1, ('B', 'N'): 4,
-('F', 'D'): -3, ('X', 'Y'): -1, ('Z', 'R'): 0, ('F', 'H'): -3,
-('B', 'F'): -2, ('F', 'L'): 2, ('X', 'Q'): -1, ('B', 'B'): 5
-}
+        ('W', 'F'): 1, ('L', 'R'): -2, ('S', 'P'): -2, ('V', 'T'): 1,
+        ('Q', 'Q'): 7, ('N', 'A'): -1, ('Z', 'Y'): -1, ('W', 'R'): 0,
+        ('Q', 'A'): 0, ('S', 'D'): -1, ('H', 'H'): 12, ('S', 'H'): -1,
+        ('H', 'D'): 0, ('L', 'N'): -2, ('W', 'A'): -2, ('Y', 'M'): 0,
+        ('G', 'R'): -2, ('Y', 'I'): 0, ('Y', 'E'): -1, ('B', 'Y'): -2,
+        ('Y', 'A'): -1, ('V', 'D'): -2, ('B', 'S'): 0, ('Y', 'Y'): 8,
+        ('G', 'N'): 1, ('E', 'C'): -1, ('Y', 'Q'): 0, ('Z', 'Z'): 4,
+        ('V', 'A'): 0, ('C', 'C'): 15, ('M', 'R'): 0, ('V', 'E'): -2,
+        ('T', 'N'): 0, ('P', 'P'): 10, ('V', 'I'): 4, ('V', 'S'): -1,
+        ('Z', 'P'): 0, ('V', 'M'): 1, ('T', 'F'): -1, ('V', 'Q'): -3,
+        ('K', 'K'): 5, ('P', 'D'): -1, ('I', 'H'): -3, ('I', 'D'): -3,
+        ('T', 'R'): -2, ('P', 'L'): -3, ('K', 'G'): -1, ('M', 'N'): -1,
+        ('P', 'H'): -1, ('F', 'Q'): -4, ('Z', 'G'): -2, ('X', 'L'): 0,
+        ('T', 'M'): 0, ('Z', 'C'): -2, ('X', 'H'): -1, ('D', 'R'): -1,
+        ('B', 'W'): -3, ('X', 'D'): -1, ('Z', 'K'): 1, ('F', 'A'): -2,
+        ('Z', 'W'): -1, ('F', 'E'): -3, ('D', 'N'): 1, ('B', 'K'): 0,
+        ('X', 'X'): -1, ('F', 'I'): 1, ('B', 'G'): 0, ('X', 'T'): 0,
+        ('F', 'M'): 0, ('B', 'C'): -2, ('Z', 'I'): -3, ('Z', 'V'): -2,
+        ('S', 'S'): 4, ('L', 'Q'): -2, ('W', 'E'): -1, ('Q', 'R'): 2,
+        ('N', 'N'): 7, ('W', 'M'): 1, ('Q', 'C'): -3, ('W', 'I'): -1,
+        ('S', 'C'): -3, ('L', 'A'): -2, ('S', 'G'): 1, ('L', 'E'): -1,
+        ('W', 'Q'): -1, ('H', 'G'): -2, ('S', 'K'): 0, ('Q', 'N'): 1,
+        ('N', 'R'): -1, ('H', 'C'): -4, ('Y', 'N'): -2, ('G', 'Q'): -2,
+        ('Y', 'F'): 3, ('C', 'A'): -2, ('V', 'L'): 2, ('G', 'E'): -2,
+        ('G', 'A'): 0, ('K', 'R'): 2, ('E', 'D'): 2, ('Y', 'R'): 0,
+        ('M', 'Q'): -1, ('T', 'I'): -1, ('C', 'D'): -3, ('V', 'F'): 1,
+        ('T', 'A'): 0, ('T', 'P'): 0, ('B', 'P'): -1, ('T', 'E'): -1,
+        ('V', 'N'): -2, ('P', 'G'): -2, ('M', 'A'): 0, ('K', 'H'): -2,
+        ('V', 'R'): -1, ('P', 'C'): -4, ('M', 'E'): -2, ('K', 'L'): -2,
+        ('V', 'V'): 5, ('M', 'I'): 1, ('T', 'Q'): 0, ('I', 'G'): -3,
+        ('P', 'K'): 0, ('M', 'M'): 6, ('K', 'D'): -1, ('I', 'C'): -4,
+        ('Z', 'D'): 1, ('F', 'R'): -1, ('X', 'K'): 0, ('Q', 'D'): -1,
+        ('X', 'G'): -1, ('Z', 'L'): -2, ('X', 'C'): -2, ('Z', 'H'): -1,
+        ('B', 'L'): -2, ('B', 'H'): 0, ('F', 'F'): 8, ('X', 'W'): -1,
+        ('B', 'D'): 5, ('D', 'A'): -1, ('S', 'L'): -2, ('X', 'S'): 0,
+        ('F', 'N'): -1, ('S', 'R'): -1, ('W', 'D'): -3, ('V', 'Y'): 0,
+        ('W', 'L'): 0, ('H', 'R'): -1, ('W', 'H'): -4, ('H', 'N'): 1,
+        ('W', 'T'): -2, ('T', 'T'): 5, ('S', 'F'): -1, ('W', 'P'): -4,
+        ('L', 'D'): -2, ('B', 'I'): -2, ('L', 'H'): -2, ('S', 'N'): 0,
+        ('B', 'T'): -1, ('L', 'L'): 5, ('Y', 'K'): -1, ('E', 'Q'): 2,
+        ('Y', 'G'): -2, ('Z', 'S'): 0, ('Y', 'C'): -5, ('G', 'D'): -2,
+        ('B', 'V'): -2, ('E', 'A'): -1, ('Y', 'W'): 3, ('E', 'E'): 6,
+        ('Y', 'S'): -1, ('C', 'N'): -1, ('V', 'C'): -2, ('T', 'H'): -2,
+        ('P', 'R'): -2, ('V', 'G'): -3, ('T', 'L'): 0, ('V', 'K'): -2,
+        ('K', 'Q'): 0, ('R', 'A'): -1, ('I', 'R'): -3, ('T', 'D'): -1,
+        ('P', 'F'): -4, ('I', 'N'): -1, ('K', 'I'): -2, ('M', 'D'): -3,
+        ('V', 'W'): -2, ('W', 'W'): 16, ('M', 'H'): 1, ('P', 'N'): -2,
+        ('K', 'A'): 0, ('M', 'L'): 3, ('K', 'E'): 1, ('Z', 'E'): 5,
+        ('X', 'N'): 0, ('Z', 'A'): -1, ('Z', 'M'): -2, ('X', 'F'): -1,
+        ('K', 'C'): -2, ('B', 'Q'): 0, ('X', 'B'): -1, ('B', 'M'): -2,
+        ('F', 'C'): -4, ('Z', 'Q'): 4, ('X', 'Z'): 0, ('F', 'G'): -3,
+        ('B', 'E'): 0, ('X', 'V'): 0, ('F', 'K'): -1, ('B', 'A'): -1,
+        ('X', 'R'): -1, ('D', 'D'): 8, ('W', 'G'): -1, ('Z', 'F'): -3,
+        ('S', 'Q'): 0, ('W', 'C'): -5, ('W', 'K'): 0, ('H', 'Q'): -1,
+        ('L', 'C'): -2, ('W', 'N'): -2, ('S', 'A'): 1, ('L', 'G'): -3,
+        ('W', 'S'): -2, ('S', 'E'): 0, ('H', 'E'): -1, ('S', 'I'): -2,
+        ('H', 'A'): -2, ('S', 'M'): -1, ('Y', 'L'): 0, ('Y', 'H'): 0,
+        ('Y', 'D'): -2, ('E', 'R'): -1, ('X', 'P'): -1, ('G', 'G'): 7,
+        ('G', 'C'): -3, ('E', 'N'): -1, ('Y', 'T'): -2, ('Y', 'P'): -3,
+        ('T', 'K'): 0, ('A', 'A'): 5, ('P', 'Q'): 0, ('T', 'C'): -1,
+        ('V', 'H'): -4, ('T', 'G'): -2, ('I', 'Q'): -2, ('Z', 'T'): -1,
+        ('C', 'R'): -3, ('V', 'P'): -3, ('P', 'E'): 0, ('M', 'C'): -4,
+        ('K', 'N'): 0, ('I', 'I'): 5, ('P', 'A'): -2, ('M', 'G'): -1,
+        ('T', 'S'): 2, ('I', 'E'): -3, ('P', 'M'): -3, ('M', 'K'): 0,
+        ('I', 'A'): -1, ('P', 'I'): -1, ('R', 'R'): 8, ('X', 'M'): 0,
+        ('L', 'I'): 2, ('X', 'I'): 0, ('Z', 'B'): 0, ('X', 'E'): -1,
+        ('Z', 'N'): 0, ('X', 'A'): 0, ('B', 'R'): -1, ('B', 'N'): 4,
+        ('F', 'D'): -3, ('X', 'Y'): -1, ('Z', 'R'): 0, ('F', 'H'): -3,
+        ('B', 'F'): -2, ('F', 'L'): 2, ('X', 'Q'): -1, ('B', 'B'): 5
+        }
 blosum35 = _temp()
 del _temp
 
@@ -451,76 +451,76 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/blosum40.cmp
 def _temp():
     return {
-('W', 'F'): 1, ('L', 'R'): -2, ('S', 'P'): -1, ('V', 'T'): 1,
-('Q', 'Q'): 8, ('N', 'A'): -1, ('Z', 'Y'): -2, ('W', 'R'): -2,
-('Q', 'A'): 0, ('S', 'D'): 0, ('H', 'H'): 13, ('S', 'H'): -1,
-('H', 'D'): 0, ('L', 'N'): -3, ('W', 'A'): -3, ('Y', 'M'): 1,
-('G', 'R'): -3, ('Y', 'I'): 0, ('Y', 'E'): -2, ('B', 'Y'): -3,
-('Y', 'A'): -2, ('V', 'D'): -3, ('B', 'S'): 0, ('Y', 'Y'): 9,
-('G', 'N'): 0, ('E', 'C'): -2, ('Y', 'Q'): -1, ('Z', 'Z'): 5,
-('V', 'A'): 0, ('C', 'C'): 16, ('M', 'R'): -1, ('V', 'E'): -3,
-('T', 'N'): 0, ('P', 'P'): 11, ('V', 'I'): 4, ('V', 'S'): -1,
-('Z', 'P'): -1, ('V', 'M'): 1, ('T', 'F'): -1, ('V', 'Q'): -3,
-('K', 'K'): 6, ('P', 'D'): -2, ('I', 'H'): -3, ('I', 'D'): -4,
-('T', 'R'): -2, ('P', 'L'): -4, ('K', 'G'): -2, ('M', 'N'): -2,
-('P', 'H'): -2, ('F', 'Q'): -4, ('Z', 'G'): -2, ('X', 'L'): -1,
-('T', 'M'): -1, ('Z', 'C'): -3, ('X', 'H'): -1, ('D', 'R'): -1,
-('B', 'W'): -4, ('X', 'D'): -1, ('Z', 'K'): 1, ('F', 'A'): -3,
-('Z', 'W'): -2, ('F', 'E'): -3, ('D', 'N'): 2, ('B', 'K'): 0,
-('X', 'X'): -1, ('F', 'I'): 1, ('B', 'G'): -1, ('X', 'T'): 0,
-('F', 'M'): 0, ('B', 'C'): -2, ('Z', 'I'): -4, ('Z', 'V'): -3,
-('S', 'S'): 5, ('L', 'Q'): -2, ('W', 'E'): -2, ('Q', 'R'): 2,
-('N', 'N'): 8, ('W', 'M'): -2, ('Q', 'C'): -4, ('W', 'I'): -3,
-('S', 'C'): -1, ('L', 'A'): -2, ('S', 'G'): 0, ('L', 'E'): -2,
-('W', 'Q'): -1, ('H', 'G'): -2, ('S', 'K'): 0, ('Q', 'N'): 1,
-('N', 'R'): 0, ('H', 'C'): -4, ('Y', 'N'): -2, ('G', 'Q'): -2,
-('Y', 'F'): 4, ('C', 'A'): -2, ('V', 'L'): 2, ('G', 'E'): -3,
-('G', 'A'): 1, ('K', 'R'): 3, ('E', 'D'): 2, ('Y', 'R'): -1,
-('M', 'Q'): -1, ('T', 'I'): -1, ('C', 'D'): -2, ('V', 'F'): 0,
-('T', 'A'): 0, ('T', 'P'): 0, ('B', 'P'): -2, ('T', 'E'): -1,
-('V', 'N'): -3, ('P', 'G'): -1, ('M', 'A'): -1, ('K', 'H'): -1,
-('V', 'R'): -2, ('P', 'C'): -5, ('M', 'E'): -2, ('K', 'L'): -2,
-('V', 'V'): 5, ('M', 'I'): 1, ('T', 'Q'): -1, ('I', 'G'): -4,
-('P', 'K'): -1, ('M', 'M'): 7, ('K', 'D'): 0, ('I', 'C'): -4,
-('Z', 'D'): 1, ('F', 'R'): -2, ('X', 'K'): -1, ('Q', 'D'): -1,
-('X', 'G'): -1, ('Z', 'L'): -2, ('X', 'C'): -2, ('Z', 'H'): 0,
-('B', 'L'): -3, ('B', 'H'): 0, ('F', 'F'): 9, ('X', 'W'): -2,
-('B', 'D'): 6, ('D', 'A'): -1, ('S', 'L'): -3, ('X', 'S'): 0,
-('F', 'N'): -3, ('S', 'R'): -1, ('W', 'D'): -5, ('V', 'Y'): -1,
-('W', 'L'): -1, ('H', 'R'): 0, ('W', 'H'): -5, ('H', 'N'): 1,
-('W', 'T'): -4, ('T', 'T'): 6, ('S', 'F'): -2, ('W', 'P'): -4,
-('L', 'D'): -3, ('B', 'I'): -3, ('L', 'H'): -2, ('S', 'N'): 1,
-('B', 'T'): 0, ('L', 'L'): 6, ('Y', 'K'): -1, ('E', 'Q'): 2,
-('Y', 'G'): -3, ('Z', 'S'): 0, ('Y', 'C'): -4, ('G', 'D'): -2,
-('B', 'V'): -3, ('E', 'A'): -1, ('Y', 'W'): 3, ('E', 'E'): 7,
-('Y', 'S'): -2, ('C', 'N'): -2, ('V', 'C'): -2, ('T', 'H'): -2,
-('P', 'R'): -3, ('V', 'G'): -4, ('T', 'L'): -1, ('V', 'K'): -2,
-('K', 'Q'): 1, ('R', 'A'): -2, ('I', 'R'): -3, ('T', 'D'): -1,
-('P', 'F'): -4, ('I', 'N'): -2, ('K', 'I'): -3, ('M', 'D'): -3,
-('V', 'W'): -3, ('W', 'W'): 19, ('M', 'H'): 1, ('P', 'N'): -2,
-('K', 'A'): -1, ('M', 'L'): 3, ('K', 'E'): 1, ('Z', 'E'): 5,
-('X', 'N'): -1, ('Z', 'A'): -1, ('Z', 'M'): -2, ('X', 'F'): -1,
-('K', 'C'): -3, ('B', 'Q'): 0, ('X', 'B'): -1, ('B', 'M'): -3,
-('F', 'C'): -2, ('Z', 'Q'): 4, ('X', 'Z'): -1, ('F', 'G'): -3,
-('B', 'E'): 1, ('X', 'V'): -1, ('F', 'K'): -3, ('B', 'A'): -1,
-('X', 'R'): -1, ('D', 'D'): 9, ('W', 'G'): -2, ('Z', 'F'): -4,
-('S', 'Q'): 1, ('W', 'C'): -6, ('W', 'K'): -2, ('H', 'Q'): 0,
-('L', 'C'): -2, ('W', 'N'): -4, ('S', 'A'): 1, ('L', 'G'): -4,
-('W', 'S'): -5, ('S', 'E'): 0, ('H', 'E'): 0, ('S', 'I'): -2,
-('H', 'A'): -2, ('S', 'M'): -2, ('Y', 'L'): 0, ('Y', 'H'): 2,
-('Y', 'D'): -3, ('E', 'R'): -1, ('X', 'P'): -2, ('G', 'G'): 8,
-('G', 'C'): -3, ('E', 'N'): -1, ('Y', 'T'): -1, ('Y', 'P'): -3,
-('T', 'K'): 0, ('A', 'A'): 5, ('P', 'Q'): -2, ('T', 'C'): -1,
-('V', 'H'): -4, ('T', 'G'): -2, ('I', 'Q'): -3, ('Z', 'T'): -1,
-('C', 'R'): -3, ('V', 'P'): -3, ('P', 'E'): 0, ('M', 'C'): -3,
-('K', 'N'): 0, ('I', 'I'): 6, ('P', 'A'): -2, ('M', 'G'): -2,
-('T', 'S'): 2, ('I', 'E'): -4, ('P', 'M'): -2, ('M', 'K'): -1,
-('I', 'A'): -1, ('P', 'I'): -2, ('R', 'R'): 9, ('X', 'M'): 0,
-('L', 'I'): 2, ('X', 'I'): -1, ('Z', 'B'): 2, ('X', 'E'): -1,
-('Z', 'N'): 0, ('X', 'A'): 0, ('B', 'R'): -1, ('B', 'N'): 4,
-('F', 'D'): -4, ('X', 'Y'): -1, ('Z', 'R'): 0, ('F', 'H'): -2,
-('B', 'F'): -3, ('F', 'L'): 2, ('X', 'Q'): -1, ('B', 'B'): 5
-}
+        ('W', 'F'): 1, ('L', 'R'): -2, ('S', 'P'): -1, ('V', 'T'): 1,
+        ('Q', 'Q'): 8, ('N', 'A'): -1, ('Z', 'Y'): -2, ('W', 'R'): -2,
+        ('Q', 'A'): 0, ('S', 'D'): 0, ('H', 'H'): 13, ('S', 'H'): -1,
+        ('H', 'D'): 0, ('L', 'N'): -3, ('W', 'A'): -3, ('Y', 'M'): 1,
+        ('G', 'R'): -3, ('Y', 'I'): 0, ('Y', 'E'): -2, ('B', 'Y'): -3,
+        ('Y', 'A'): -2, ('V', 'D'): -3, ('B', 'S'): 0, ('Y', 'Y'): 9,
+        ('G', 'N'): 0, ('E', 'C'): -2, ('Y', 'Q'): -1, ('Z', 'Z'): 5,
+        ('V', 'A'): 0, ('C', 'C'): 16, ('M', 'R'): -1, ('V', 'E'): -3,
+        ('T', 'N'): 0, ('P', 'P'): 11, ('V', 'I'): 4, ('V', 'S'): -1,
+        ('Z', 'P'): -1, ('V', 'M'): 1, ('T', 'F'): -1, ('V', 'Q'): -3,
+        ('K', 'K'): 6, ('P', 'D'): -2, ('I', 'H'): -3, ('I', 'D'): -4,
+        ('T', 'R'): -2, ('P', 'L'): -4, ('K', 'G'): -2, ('M', 'N'): -2,
+        ('P', 'H'): -2, ('F', 'Q'): -4, ('Z', 'G'): -2, ('X', 'L'): -1,
+        ('T', 'M'): -1, ('Z', 'C'): -3, ('X', 'H'): -1, ('D', 'R'): -1,
+        ('B', 'W'): -4, ('X', 'D'): -1, ('Z', 'K'): 1, ('F', 'A'): -3,
+        ('Z', 'W'): -2, ('F', 'E'): -3, ('D', 'N'): 2, ('B', 'K'): 0,
+        ('X', 'X'): -1, ('F', 'I'): 1, ('B', 'G'): -1, ('X', 'T'): 0,
+        ('F', 'M'): 0, ('B', 'C'): -2, ('Z', 'I'): -4, ('Z', 'V'): -3,
+        ('S', 'S'): 5, ('L', 'Q'): -2, ('W', 'E'): -2, ('Q', 'R'): 2,
+        ('N', 'N'): 8, ('W', 'M'): -2, ('Q', 'C'): -4, ('W', 'I'): -3,
+        ('S', 'C'): -1, ('L', 'A'): -2, ('S', 'G'): 0, ('L', 'E'): -2,
+        ('W', 'Q'): -1, ('H', 'G'): -2, ('S', 'K'): 0, ('Q', 'N'): 1,
+        ('N', 'R'): 0, ('H', 'C'): -4, ('Y', 'N'): -2, ('G', 'Q'): -2,
+        ('Y', 'F'): 4, ('C', 'A'): -2, ('V', 'L'): 2, ('G', 'E'): -3,
+        ('G', 'A'): 1, ('K', 'R'): 3, ('E', 'D'): 2, ('Y', 'R'): -1,
+        ('M', 'Q'): -1, ('T', 'I'): -1, ('C', 'D'): -2, ('V', 'F'): 0,
+        ('T', 'A'): 0, ('T', 'P'): 0, ('B', 'P'): -2, ('T', 'E'): -1,
+        ('V', 'N'): -3, ('P', 'G'): -1, ('M', 'A'): -1, ('K', 'H'): -1,
+        ('V', 'R'): -2, ('P', 'C'): -5, ('M', 'E'): -2, ('K', 'L'): -2,
+        ('V', 'V'): 5, ('M', 'I'): 1, ('T', 'Q'): -1, ('I', 'G'): -4,
+        ('P', 'K'): -1, ('M', 'M'): 7, ('K', 'D'): 0, ('I', 'C'): -4,
+        ('Z', 'D'): 1, ('F', 'R'): -2, ('X', 'K'): -1, ('Q', 'D'): -1,
+        ('X', 'G'): -1, ('Z', 'L'): -2, ('X', 'C'): -2, ('Z', 'H'): 0,
+        ('B', 'L'): -3, ('B', 'H'): 0, ('F', 'F'): 9, ('X', 'W'): -2,
+        ('B', 'D'): 6, ('D', 'A'): -1, ('S', 'L'): -3, ('X', 'S'): 0,
+        ('F', 'N'): -3, ('S', 'R'): -1, ('W', 'D'): -5, ('V', 'Y'): -1,
+        ('W', 'L'): -1, ('H', 'R'): 0, ('W', 'H'): -5, ('H', 'N'): 1,
+        ('W', 'T'): -4, ('T', 'T'): 6, ('S', 'F'): -2, ('W', 'P'): -4,
+        ('L', 'D'): -3, ('B', 'I'): -3, ('L', 'H'): -2, ('S', 'N'): 1,
+        ('B', 'T'): 0, ('L', 'L'): 6, ('Y', 'K'): -1, ('E', 'Q'): 2,
+        ('Y', 'G'): -3, ('Z', 'S'): 0, ('Y', 'C'): -4, ('G', 'D'): -2,
+        ('B', 'V'): -3, ('E', 'A'): -1, ('Y', 'W'): 3, ('E', 'E'): 7,
+        ('Y', 'S'): -2, ('C', 'N'): -2, ('V', 'C'): -2, ('T', 'H'): -2,
+        ('P', 'R'): -3, ('V', 'G'): -4, ('T', 'L'): -1, ('V', 'K'): -2,
+        ('K', 'Q'): 1, ('R', 'A'): -2, ('I', 'R'): -3, ('T', 'D'): -1,
+        ('P', 'F'): -4, ('I', 'N'): -2, ('K', 'I'): -3, ('M', 'D'): -3,
+        ('V', 'W'): -3, ('W', 'W'): 19, ('M', 'H'): 1, ('P', 'N'): -2,
+        ('K', 'A'): -1, ('M', 'L'): 3, ('K', 'E'): 1, ('Z', 'E'): 5,
+        ('X', 'N'): -1, ('Z', 'A'): -1, ('Z', 'M'): -2, ('X', 'F'): -1,
+        ('K', 'C'): -3, ('B', 'Q'): 0, ('X', 'B'): -1, ('B', 'M'): -3,
+        ('F', 'C'): -2, ('Z', 'Q'): 4, ('X', 'Z'): -1, ('F', 'G'): -3,
+        ('B', 'E'): 1, ('X', 'V'): -1, ('F', 'K'): -3, ('B', 'A'): -1,
+        ('X', 'R'): -1, ('D', 'D'): 9, ('W', 'G'): -2, ('Z', 'F'): -4,
+        ('S', 'Q'): 1, ('W', 'C'): -6, ('W', 'K'): -2, ('H', 'Q'): 0,
+        ('L', 'C'): -2, ('W', 'N'): -4, ('S', 'A'): 1, ('L', 'G'): -4,
+        ('W', 'S'): -5, ('S', 'E'): 0, ('H', 'E'): 0, ('S', 'I'): -2,
+        ('H', 'A'): -2, ('S', 'M'): -2, ('Y', 'L'): 0, ('Y', 'H'): 2,
+        ('Y', 'D'): -3, ('E', 'R'): -1, ('X', 'P'): -2, ('G', 'G'): 8,
+        ('G', 'C'): -3, ('E', 'N'): -1, ('Y', 'T'): -1, ('Y', 'P'): -3,
+        ('T', 'K'): 0, ('A', 'A'): 5, ('P', 'Q'): -2, ('T', 'C'): -1,
+        ('V', 'H'): -4, ('T', 'G'): -2, ('I', 'Q'): -3, ('Z', 'T'): -1,
+        ('C', 'R'): -3, ('V', 'P'): -3, ('P', 'E'): 0, ('M', 'C'): -3,
+        ('K', 'N'): 0, ('I', 'I'): 6, ('P', 'A'): -2, ('M', 'G'): -2,
+        ('T', 'S'): 2, ('I', 'E'): -4, ('P', 'M'): -2, ('M', 'K'): -1,
+        ('I', 'A'): -1, ('P', 'I'): -2, ('R', 'R'): 9, ('X', 'M'): 0,
+        ('L', 'I'): 2, ('X', 'I'): -1, ('Z', 'B'): 2, ('X', 'E'): -1,
+        ('Z', 'N'): 0, ('X', 'A'): 0, ('B', 'R'): -1, ('B', 'N'): 4,
+        ('F', 'D'): -4, ('X', 'Y'): -1, ('Z', 'R'): 0, ('F', 'H'): -2,
+        ('B', 'F'): -3, ('F', 'L'): 2, ('X', 'Q'): -1, ('B', 'B'): 5
+        }
 blosum40 = _temp()
 del _temp
 
@@ -528,76 +528,76 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/blosum45.cmp
 def _temp():
     return {
-('W', 'F'): 1, ('L', 'R'): -2, ('S', 'P'): -1, ('V', 'T'): 0,
-('Q', 'Q'): 6, ('N', 'A'): -1, ('Z', 'Y'): -2, ('W', 'R'): -2,
-('Q', 'A'): -1, ('S', 'D'): 0, ('H', 'H'): 10, ('S', 'H'): -1,
-('H', 'D'): 0, ('L', 'N'): -3, ('W', 'A'): -2, ('Y', 'M'): 0,
-('G', 'R'): -2, ('Y', 'I'): 0, ('Y', 'E'): -2, ('B', 'Y'): -2,
-('Y', 'A'): -2, ('V', 'D'): -3, ('B', 'S'): 0, ('Y', 'Y'): 8,
-('G', 'N'): 0, ('E', 'C'): -3, ('Y', 'Q'): -1, ('Z', 'Z'): 4,
-('V', 'A'): 0, ('C', 'C'): 12, ('M', 'R'): -1, ('V', 'E'): -3,
-('T', 'N'): 0, ('P', 'P'): 9, ('V', 'I'): 3, ('V', 'S'): -1,
-('Z', 'P'): -1, ('V', 'M'): 1, ('T', 'F'): -1, ('V', 'Q'): -3,
-('K', 'K'): 5, ('P', 'D'): -1, ('I', 'H'): -3, ('I', 'D'): -4,
-('T', 'R'): -1, ('P', 'L'): -3, ('K', 'G'): -2, ('M', 'N'): -2,
-('P', 'H'): -2, ('F', 'Q'): -4, ('Z', 'G'): -2, ('X', 'L'): -1,
-('T', 'M'): -1, ('Z', 'C'): -3, ('X', 'H'): -1, ('D', 'R'): -1,
-('B', 'W'): -4, ('X', 'D'): -1, ('Z', 'K'): 1, ('F', 'A'): -2,
-('Z', 'W'): -2, ('F', 'E'): -3, ('D', 'N'): 2, ('B', 'K'): 0,
-('X', 'X'): -1, ('F', 'I'): 0, ('B', 'G'): -1, ('X', 'T'): 0,
-('F', 'M'): 0, ('B', 'C'): -2, ('Z', 'I'): -3, ('Z', 'V'): -3,
-('S', 'S'): 4, ('L', 'Q'): -2, ('W', 'E'): -3, ('Q', 'R'): 1,
-('N', 'N'): 6, ('W', 'M'): -2, ('Q', 'C'): -3, ('W', 'I'): -2,
-('S', 'C'): -1, ('L', 'A'): -1, ('S', 'G'): 0, ('L', 'E'): -2,
-('W', 'Q'): -2, ('H', 'G'): -2, ('S', 'K'): -1, ('Q', 'N'): 0,
-('N', 'R'): 0, ('H', 'C'): -3, ('Y', 'N'): -2, ('G', 'Q'): -2,
-('Y', 'F'): 3, ('C', 'A'): -1, ('V', 'L'): 1, ('G', 'E'): -2,
-('G', 'A'): 0, ('K', 'R'): 3, ('E', 'D'): 2, ('Y', 'R'): -1,
-('M', 'Q'): 0, ('T', 'I'): -1, ('C', 'D'): -3, ('V', 'F'): 0,
-('T', 'A'): 0, ('T', 'P'): -1, ('B', 'P'): -2, ('T', 'E'): -1,
-('V', 'N'): -3, ('P', 'G'): -2, ('M', 'A'): -1, ('K', 'H'): -1,
-('V', 'R'): -2, ('P', 'C'): -4, ('M', 'E'): -2, ('K', 'L'): -3,
-('V', 'V'): 5, ('M', 'I'): 2, ('T', 'Q'): -1, ('I', 'G'): -4,
-('P', 'K'): -1, ('M', 'M'): 6, ('K', 'D'): 0, ('I', 'C'): -3,
-('Z', 'D'): 1, ('F', 'R'): -2, ('X', 'K'): -1, ('Q', 'D'): 0,
-('X', 'G'): -1, ('Z', 'L'): -2, ('X', 'C'): -2, ('Z', 'H'): 0,
-('B', 'L'): -3, ('B', 'H'): 0, ('F', 'F'): 8, ('X', 'W'): -2,
-('B', 'D'): 5, ('D', 'A'): -2, ('S', 'L'): -3, ('X', 'S'): 0,
-('F', 'N'): -2, ('S', 'R'): -1, ('W', 'D'): -4, ('V', 'Y'): -1,
-('W', 'L'): -2, ('H', 'R'): 0, ('W', 'H'): -3, ('H', 'N'): 1,
-('W', 'T'): -3, ('T', 'T'): 5, ('S', 'F'): -2, ('W', 'P'): -3,
-('L', 'D'): -3, ('B', 'I'): -3, ('L', 'H'): -2, ('S', 'N'): 1,
-('B', 'T'): 0, ('L', 'L'): 5, ('Y', 'K'): -1, ('E', 'Q'): 2,
-('Y', 'G'): -3, ('Z', 'S'): 0, ('Y', 'C'): -3, ('G', 'D'): -1,
-('B', 'V'): -3, ('E', 'A'): -1, ('Y', 'W'): 3, ('E', 'E'): 6,
-('Y', 'S'): -2, ('C', 'N'): -2, ('V', 'C'): -1, ('T', 'H'): -2,
-('P', 'R'): -2, ('V', 'G'): -3, ('T', 'L'): -1, ('V', 'K'): -2,
-('K', 'Q'): 1, ('R', 'A'): -2, ('I', 'R'): -3, ('T', 'D'): -1,
-('P', 'F'): -3, ('I', 'N'): -2, ('K', 'I'): -3, ('M', 'D'): -3,
-('V', 'W'): -3, ('W', 'W'): 15, ('M', 'H'): 0, ('P', 'N'): -2,
-('K', 'A'): -1, ('M', 'L'): 2, ('K', 'E'): 1, ('Z', 'E'): 4,
-('X', 'N'): -1, ('Z', 'A'): -1, ('Z', 'M'): -1, ('X', 'F'): -1,
-('K', 'C'): -3, ('B', 'Q'): 0, ('X', 'B'): -1, ('B', 'M'): -2,
-('F', 'C'): -2, ('Z', 'Q'): 4, ('X', 'Z'): -1, ('F', 'G'): -3,
-('B', 'E'): 1, ('X', 'V'): -1, ('F', 'K'): -3, ('B', 'A'): -1,
-('X', 'R'): -1, ('D', 'D'): 7, ('W', 'G'): -2, ('Z', 'F'): -3,
-('S', 'Q'): 0, ('W', 'C'): -5, ('W', 'K'): -2, ('H', 'Q'): 1,
-('L', 'C'): -2, ('W', 'N'): -4, ('S', 'A'): 1, ('L', 'G'): -3,
-('W', 'S'): -4, ('S', 'E'): 0, ('H', 'E'): 0, ('S', 'I'): -2,
-('H', 'A'): -2, ('S', 'M'): -2, ('Y', 'L'): 0, ('Y', 'H'): 2,
-('Y', 'D'): -2, ('E', 'R'): 0, ('X', 'P'): -1, ('G', 'G'): 7,
-('G', 'C'): -3, ('E', 'N'): 0, ('Y', 'T'): -1, ('Y', 'P'): -3,
-('T', 'K'): -1, ('A', 'A'): 5, ('P', 'Q'): -1, ('T', 'C'): -1,
-('V', 'H'): -3, ('T', 'G'): -2, ('I', 'Q'): -2, ('Z', 'T'): -1,
-('C', 'R'): -3, ('V', 'P'): -3, ('P', 'E'): 0, ('M', 'C'): -2,
-('K', 'N'): 0, ('I', 'I'): 5, ('P', 'A'): -1, ('M', 'G'): -2,
-('T', 'S'): 2, ('I', 'E'): -3, ('P', 'M'): -2, ('M', 'K'): -1,
-('I', 'A'): -1, ('P', 'I'): -2, ('R', 'R'): 7, ('X', 'M'): -1,
-('L', 'I'): 2, ('X', 'I'): -1, ('Z', 'B'): 2, ('X', 'E'): -1,
-('Z', 'N'): 0, ('X', 'A'): 0, ('B', 'R'): -1, ('B', 'N'): 4,
-('F', 'D'): -4, ('X', 'Y'): -1, ('Z', 'R'): 0, ('F', 'H'): -2,
-('B', 'F'): -3, ('F', 'L'): 1, ('X', 'Q'): -1, ('B', 'B'): 4
-}
+        ('W', 'F'): 1, ('L', 'R'): -2, ('S', 'P'): -1, ('V', 'T'): 0,
+        ('Q', 'Q'): 6, ('N', 'A'): -1, ('Z', 'Y'): -2, ('W', 'R'): -2,
+        ('Q', 'A'): -1, ('S', 'D'): 0, ('H', 'H'): 10, ('S', 'H'): -1,
+        ('H', 'D'): 0, ('L', 'N'): -3, ('W', 'A'): -2, ('Y', 'M'): 0,
+        ('G', 'R'): -2, ('Y', 'I'): 0, ('Y', 'E'): -2, ('B', 'Y'): -2,
+        ('Y', 'A'): -2, ('V', 'D'): -3, ('B', 'S'): 0, ('Y', 'Y'): 8,
+        ('G', 'N'): 0, ('E', 'C'): -3, ('Y', 'Q'): -1, ('Z', 'Z'): 4,
+        ('V', 'A'): 0, ('C', 'C'): 12, ('M', 'R'): -1, ('V', 'E'): -3,
+        ('T', 'N'): 0, ('P', 'P'): 9, ('V', 'I'): 3, ('V', 'S'): -1,
+        ('Z', 'P'): -1, ('V', 'M'): 1, ('T', 'F'): -1, ('V', 'Q'): -3,
+        ('K', 'K'): 5, ('P', 'D'): -1, ('I', 'H'): -3, ('I', 'D'): -4,
+        ('T', 'R'): -1, ('P', 'L'): -3, ('K', 'G'): -2, ('M', 'N'): -2,
+        ('P', 'H'): -2, ('F', 'Q'): -4, ('Z', 'G'): -2, ('X', 'L'): -1,
+        ('T', 'M'): -1, ('Z', 'C'): -3, ('X', 'H'): -1, ('D', 'R'): -1,
+        ('B', 'W'): -4, ('X', 'D'): -1, ('Z', 'K'): 1, ('F', 'A'): -2,
+        ('Z', 'W'): -2, ('F', 'E'): -3, ('D', 'N'): 2, ('B', 'K'): 0,
+        ('X', 'X'): -1, ('F', 'I'): 0, ('B', 'G'): -1, ('X', 'T'): 0,
+        ('F', 'M'): 0, ('B', 'C'): -2, ('Z', 'I'): -3, ('Z', 'V'): -3,
+        ('S', 'S'): 4, ('L', 'Q'): -2, ('W', 'E'): -3, ('Q', 'R'): 1,
+        ('N', 'N'): 6, ('W', 'M'): -2, ('Q', 'C'): -3, ('W', 'I'): -2,
+        ('S', 'C'): -1, ('L', 'A'): -1, ('S', 'G'): 0, ('L', 'E'): -2,
+        ('W', 'Q'): -2, ('H', 'G'): -2, ('S', 'K'): -1, ('Q', 'N'): 0,
+        ('N', 'R'): 0, ('H', 'C'): -3, ('Y', 'N'): -2, ('G', 'Q'): -2,
+        ('Y', 'F'): 3, ('C', 'A'): -1, ('V', 'L'): 1, ('G', 'E'): -2,
+        ('G', 'A'): 0, ('K', 'R'): 3, ('E', 'D'): 2, ('Y', 'R'): -1,
+        ('M', 'Q'): 0, ('T', 'I'): -1, ('C', 'D'): -3, ('V', 'F'): 0,
+        ('T', 'A'): 0, ('T', 'P'): -1, ('B', 'P'): -2, ('T', 'E'): -1,
+        ('V', 'N'): -3, ('P', 'G'): -2, ('M', 'A'): -1, ('K', 'H'): -1,
+        ('V', 'R'): -2, ('P', 'C'): -4, ('M', 'E'): -2, ('K', 'L'): -3,
+        ('V', 'V'): 5, ('M', 'I'): 2, ('T', 'Q'): -1, ('I', 'G'): -4,
+        ('P', 'K'): -1, ('M', 'M'): 6, ('K', 'D'): 0, ('I', 'C'): -3,
+        ('Z', 'D'): 1, ('F', 'R'): -2, ('X', 'K'): -1, ('Q', 'D'): 0,
+        ('X', 'G'): -1, ('Z', 'L'): -2, ('X', 'C'): -2, ('Z', 'H'): 0,
+        ('B', 'L'): -3, ('B', 'H'): 0, ('F', 'F'): 8, ('X', 'W'): -2,
+        ('B', 'D'): 5, ('D', 'A'): -2, ('S', 'L'): -3, ('X', 'S'): 0,
+        ('F', 'N'): -2, ('S', 'R'): -1, ('W', 'D'): -4, ('V', 'Y'): -1,
+        ('W', 'L'): -2, ('H', 'R'): 0, ('W', 'H'): -3, ('H', 'N'): 1,
+        ('W', 'T'): -3, ('T', 'T'): 5, ('S', 'F'): -2, ('W', 'P'): -3,
+        ('L', 'D'): -3, ('B', 'I'): -3, ('L', 'H'): -2, ('S', 'N'): 1,
+        ('B', 'T'): 0, ('L', 'L'): 5, ('Y', 'K'): -1, ('E', 'Q'): 2,
+        ('Y', 'G'): -3, ('Z', 'S'): 0, ('Y', 'C'): -3, ('G', 'D'): -1,
+        ('B', 'V'): -3, ('E', 'A'): -1, ('Y', 'W'): 3, ('E', 'E'): 6,
+        ('Y', 'S'): -2, ('C', 'N'): -2, ('V', 'C'): -1, ('T', 'H'): -2,
+        ('P', 'R'): -2, ('V', 'G'): -3, ('T', 'L'): -1, ('V', 'K'): -2,
+        ('K', 'Q'): 1, ('R', 'A'): -2, ('I', 'R'): -3, ('T', 'D'): -1,
+        ('P', 'F'): -3, ('I', 'N'): -2, ('K', 'I'): -3, ('M', 'D'): -3,
+        ('V', 'W'): -3, ('W', 'W'): 15, ('M', 'H'): 0, ('P', 'N'): -2,
+        ('K', 'A'): -1, ('M', 'L'): 2, ('K', 'E'): 1, ('Z', 'E'): 4,
+        ('X', 'N'): -1, ('Z', 'A'): -1, ('Z', 'M'): -1, ('X', 'F'): -1,
+        ('K', 'C'): -3, ('B', 'Q'): 0, ('X', 'B'): -1, ('B', 'M'): -2,
+        ('F', 'C'): -2, ('Z', 'Q'): 4, ('X', 'Z'): -1, ('F', 'G'): -3,
+        ('B', 'E'): 1, ('X', 'V'): -1, ('F', 'K'): -3, ('B', 'A'): -1,
+        ('X', 'R'): -1, ('D', 'D'): 7, ('W', 'G'): -2, ('Z', 'F'): -3,
+        ('S', 'Q'): 0, ('W', 'C'): -5, ('W', 'K'): -2, ('H', 'Q'): 1,
+        ('L', 'C'): -2, ('W', 'N'): -4, ('S', 'A'): 1, ('L', 'G'): -3,
+        ('W', 'S'): -4, ('S', 'E'): 0, ('H', 'E'): 0, ('S', 'I'): -2,
+        ('H', 'A'): -2, ('S', 'M'): -2, ('Y', 'L'): 0, ('Y', 'H'): 2,
+        ('Y', 'D'): -2, ('E', 'R'): 0, ('X', 'P'): -1, ('G', 'G'): 7,
+        ('G', 'C'): -3, ('E', 'N'): 0, ('Y', 'T'): -1, ('Y', 'P'): -3,
+        ('T', 'K'): -1, ('A', 'A'): 5, ('P', 'Q'): -1, ('T', 'C'): -1,
+        ('V', 'H'): -3, ('T', 'G'): -2, ('I', 'Q'): -2, ('Z', 'T'): -1,
+        ('C', 'R'): -3, ('V', 'P'): -3, ('P', 'E'): 0, ('M', 'C'): -2,
+        ('K', 'N'): 0, ('I', 'I'): 5, ('P', 'A'): -1, ('M', 'G'): -2,
+        ('T', 'S'): 2, ('I', 'E'): -3, ('P', 'M'): -2, ('M', 'K'): -1,
+        ('I', 'A'): -1, ('P', 'I'): -2, ('R', 'R'): 7, ('X', 'M'): -1,
+        ('L', 'I'): 2, ('X', 'I'): -1, ('Z', 'B'): 2, ('X', 'E'): -1,
+        ('Z', 'N'): 0, ('X', 'A'): 0, ('B', 'R'): -1, ('B', 'N'): 4,
+        ('F', 'D'): -4, ('X', 'Y'): -1, ('Z', 'R'): 0, ('F', 'H'): -2,
+        ('B', 'F'): -3, ('F', 'L'): 1, ('X', 'Q'): -1, ('B', 'B'): 4
+        }
 blosum45 = _temp()
 del _temp
 
@@ -605,76 +605,76 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/blosum50.cmp
 def _temp():
     return {
-('W', 'F'): 1, ('L', 'R'): -3, ('S', 'P'): -1, ('V', 'T'): 0,
-('Q', 'Q'): 7, ('N', 'A'): -1, ('Z', 'Y'): -2, ('W', 'R'): -3,
-('Q', 'A'): -1, ('S', 'D'): 0, ('H', 'H'): 10, ('S', 'H'): -1,
-('H', 'D'): -1, ('L', 'N'): -4, ('W', 'A'): -3, ('Y', 'M'): 0,
-('G', 'R'): -3, ('Y', 'I'): -1, ('Y', 'E'): -2, ('B', 'Y'): -3,
-('Y', 'A'): -2, ('V', 'D'): -4, ('B', 'S'): 0, ('Y', 'Y'): 8,
-('G', 'N'): 0, ('E', 'C'): -3, ('Y', 'Q'): -1, ('Z', 'Z'): 5,
-('V', 'A'): 0, ('C', 'C'): 13, ('M', 'R'): -2, ('V', 'E'): -3,
-('T', 'N'): 0, ('P', 'P'): 10, ('V', 'I'): 4, ('V', 'S'): -2,
-('Z', 'P'): -1, ('V', 'M'): 1, ('T', 'F'): -2, ('V', 'Q'): -3,
-('K', 'K'): 6, ('P', 'D'): -1, ('I', 'H'): -4, ('I', 'D'): -4,
-('T', 'R'): -1, ('P', 'L'): -4, ('K', 'G'): -2, ('M', 'N'): -2,
-('P', 'H'): -2, ('F', 'Q'): -4, ('Z', 'G'): -2, ('X', 'L'): -1,
-('T', 'M'): -1, ('Z', 'C'): -3, ('X', 'H'): -1, ('D', 'R'): -2,
-('B', 'W'): -5, ('X', 'D'): -1, ('Z', 'K'): 1, ('F', 'A'): -3,
-('Z', 'W'): -2, ('F', 'E'): -3, ('D', 'N'): 2, ('B', 'K'): 0,
-('X', 'X'): -1, ('F', 'I'): 0, ('B', 'G'): -1, ('X', 'T'): 0,
-('F', 'M'): 0, ('B', 'C'): -3, ('Z', 'I'): -3, ('Z', 'V'): -3,
-('S', 'S'): 5, ('L', 'Q'): -2, ('W', 'E'): -3, ('Q', 'R'): 1,
-('N', 'N'): 7, ('W', 'M'): -1, ('Q', 'C'): -3, ('W', 'I'): -3,
-('S', 'C'): -1, ('L', 'A'): -2, ('S', 'G'): 0, ('L', 'E'): -3,
-('W', 'Q'): -1, ('H', 'G'): -2, ('S', 'K'): 0, ('Q', 'N'): 0,
-('N', 'R'): -1, ('H', 'C'): -3, ('Y', 'N'): -2, ('G', 'Q'): -2,
-('Y', 'F'): 4, ('C', 'A'): -1, ('V', 'L'): 1, ('G', 'E'): -3,
-('G', 'A'): 0, ('K', 'R'): 3, ('E', 'D'): 2, ('Y', 'R'): -1,
-('M', 'Q'): 0, ('T', 'I'): -1, ('C', 'D'): -4, ('V', 'F'): -1,
-('T', 'A'): 0, ('T', 'P'): -1, ('B', 'P'): -2, ('T', 'E'): -1,
-('V', 'N'): -3, ('P', 'G'): -2, ('M', 'A'): -1, ('K', 'H'): 0,
-('V', 'R'): -3, ('P', 'C'): -4, ('M', 'E'): -2, ('K', 'L'): -3,
-('V', 'V'): 5, ('M', 'I'): 2, ('T', 'Q'): -1, ('I', 'G'): -4,
-('P', 'K'): -1, ('M', 'M'): 7, ('K', 'D'): -1, ('I', 'C'): -2,
-('Z', 'D'): 1, ('F', 'R'): -3, ('X', 'K'): -1, ('Q', 'D'): 0,
-('X', 'G'): -2, ('Z', 'L'): -3, ('X', 'C'): -2, ('Z', 'H'): 0,
-('B', 'L'): -4, ('B', 'H'): 0, ('F', 'F'): 8, ('X', 'W'): -3,
-('B', 'D'): 5, ('D', 'A'): -2, ('S', 'L'): -3, ('X', 'S'): -1,
-('F', 'N'): -4, ('S', 'R'): -1, ('W', 'D'): -5, ('V', 'Y'): -1,
-('W', 'L'): -2, ('H', 'R'): 0, ('W', 'H'): -3, ('H', 'N'): 1,
-('W', 'T'): -3, ('T', 'T'): 5, ('S', 'F'): -3, ('W', 'P'): -4,
-('L', 'D'): -4, ('B', 'I'): -4, ('L', 'H'): -3, ('S', 'N'): 1,
-('B', 'T'): 0, ('L', 'L'): 5, ('Y', 'K'): -2, ('E', 'Q'): 2,
-('Y', 'G'): -3, ('Z', 'S'): 0, ('Y', 'C'): -3, ('G', 'D'): -1,
-('B', 'V'): -4, ('E', 'A'): -1, ('Y', 'W'): 2, ('E', 'E'): 6,
-('Y', 'S'): -2, ('C', 'N'): -2, ('V', 'C'): -1, ('T', 'H'): -2,
-('P', 'R'): -3, ('V', 'G'): -4, ('T', 'L'): -1, ('V', 'K'): -3,
-('K', 'Q'): 2, ('R', 'A'): -2, ('I', 'R'): -4, ('T', 'D'): -1,
-('P', 'F'): -4, ('I', 'N'): -3, ('K', 'I'): -3, ('M', 'D'): -4,
-('V', 'W'): -3, ('W', 'W'): 15, ('M', 'H'): -1, ('P', 'N'): -2,
-('K', 'A'): -1, ('M', 'L'): 3, ('K', 'E'): 1, ('Z', 'E'): 5,
-('X', 'N'): -1, ('Z', 'A'): -1, ('Z', 'M'): -1, ('X', 'F'): -2,
-('K', 'C'): -3, ('B', 'Q'): 0, ('X', 'B'): -1, ('B', 'M'): -3,
-('F', 'C'): -2, ('Z', 'Q'): 4, ('X', 'Z'): -1, ('F', 'G'): -4,
-('B', 'E'): 1, ('X', 'V'): -1, ('F', 'K'): -4, ('B', 'A'): -2,
-('X', 'R'): -1, ('D', 'D'): 8, ('W', 'G'): -3, ('Z', 'F'): -4,
-('S', 'Q'): 0, ('W', 'C'): -5, ('W', 'K'): -3, ('H', 'Q'): 1,
-('L', 'C'): -2, ('W', 'N'): -4, ('S', 'A'): 1, ('L', 'G'): -4,
-('W', 'S'): -4, ('S', 'E'): -1, ('H', 'E'): 0, ('S', 'I'): -3,
-('H', 'A'): -2, ('S', 'M'): -2, ('Y', 'L'): -1, ('Y', 'H'): 2,
-('Y', 'D'): -3, ('E', 'R'): 0, ('X', 'P'): -2, ('G', 'G'): 8,
-('G', 'C'): -3, ('E', 'N'): 0, ('Y', 'T'): -2, ('Y', 'P'): -3,
-('T', 'K'): -1, ('A', 'A'): 5, ('P', 'Q'): -1, ('T', 'C'): -1,
-('V', 'H'): -4, ('T', 'G'): -2, ('I', 'Q'): -3, ('Z', 'T'): -1,
-('C', 'R'): -4, ('V', 'P'): -3, ('P', 'E'): -1, ('M', 'C'): -2,
-('K', 'N'): 0, ('I', 'I'): 5, ('P', 'A'): -1, ('M', 'G'): -3,
-('T', 'S'): 2, ('I', 'E'): -4, ('P', 'M'): -3, ('M', 'K'): -2,
-('I', 'A'): -1, ('P', 'I'): -3, ('R', 'R'): 7, ('X', 'M'): -1,
-('L', 'I'): 2, ('X', 'I'): -1, ('Z', 'B'): 2, ('X', 'E'): -1,
-('Z', 'N'): 0, ('X', 'A'): -1, ('B', 'R'): -1, ('B', 'N'): 4,
-('F', 'D'): -5, ('X', 'Y'): -1, ('Z', 'R'): 0, ('F', 'H'): -1,
-('B', 'F'): -4, ('F', 'L'): 1, ('X', 'Q'): -1, ('B', 'B'): 5
-}
+        ('W', 'F'): 1, ('L', 'R'): -3, ('S', 'P'): -1, ('V', 'T'): 0,
+        ('Q', 'Q'): 7, ('N', 'A'): -1, ('Z', 'Y'): -2, ('W', 'R'): -3,
+        ('Q', 'A'): -1, ('S', 'D'): 0, ('H', 'H'): 10, ('S', 'H'): -1,
+        ('H', 'D'): -1, ('L', 'N'): -4, ('W', 'A'): -3, ('Y', 'M'): 0,
+        ('G', 'R'): -3, ('Y', 'I'): -1, ('Y', 'E'): -2, ('B', 'Y'): -3,
+        ('Y', 'A'): -2, ('V', 'D'): -4, ('B', 'S'): 0, ('Y', 'Y'): 8,
+        ('G', 'N'): 0, ('E', 'C'): -3, ('Y', 'Q'): -1, ('Z', 'Z'): 5,
+        ('V', 'A'): 0, ('C', 'C'): 13, ('M', 'R'): -2, ('V', 'E'): -3,
+        ('T', 'N'): 0, ('P', 'P'): 10, ('V', 'I'): 4, ('V', 'S'): -2,
+        ('Z', 'P'): -1, ('V', 'M'): 1, ('T', 'F'): -2, ('V', 'Q'): -3,
+        ('K', 'K'): 6, ('P', 'D'): -1, ('I', 'H'): -4, ('I', 'D'): -4,
+        ('T', 'R'): -1, ('P', 'L'): -4, ('K', 'G'): -2, ('M', 'N'): -2,
+        ('P', 'H'): -2, ('F', 'Q'): -4, ('Z', 'G'): -2, ('X', 'L'): -1,
+        ('T', 'M'): -1, ('Z', 'C'): -3, ('X', 'H'): -1, ('D', 'R'): -2,
+        ('B', 'W'): -5, ('X', 'D'): -1, ('Z', 'K'): 1, ('F', 'A'): -3,
+        ('Z', 'W'): -2, ('F', 'E'): -3, ('D', 'N'): 2, ('B', 'K'): 0,
+        ('X', 'X'): -1, ('F', 'I'): 0, ('B', 'G'): -1, ('X', 'T'): 0,
+        ('F', 'M'): 0, ('B', 'C'): -3, ('Z', 'I'): -3, ('Z', 'V'): -3,
+        ('S', 'S'): 5, ('L', 'Q'): -2, ('W', 'E'): -3, ('Q', 'R'): 1,
+        ('N', 'N'): 7, ('W', 'M'): -1, ('Q', 'C'): -3, ('W', 'I'): -3,
+        ('S', 'C'): -1, ('L', 'A'): -2, ('S', 'G'): 0, ('L', 'E'): -3,
+        ('W', 'Q'): -1, ('H', 'G'): -2, ('S', 'K'): 0, ('Q', 'N'): 0,
+        ('N', 'R'): -1, ('H', 'C'): -3, ('Y', 'N'): -2, ('G', 'Q'): -2,
+        ('Y', 'F'): 4, ('C', 'A'): -1, ('V', 'L'): 1, ('G', 'E'): -3,
+        ('G', 'A'): 0, ('K', 'R'): 3, ('E', 'D'): 2, ('Y', 'R'): -1,
+        ('M', 'Q'): 0, ('T', 'I'): -1, ('C', 'D'): -4, ('V', 'F'): -1,
+        ('T', 'A'): 0, ('T', 'P'): -1, ('B', 'P'): -2, ('T', 'E'): -1,
+        ('V', 'N'): -3, ('P', 'G'): -2, ('M', 'A'): -1, ('K', 'H'): 0,
+        ('V', 'R'): -3, ('P', 'C'): -4, ('M', 'E'): -2, ('K', 'L'): -3,
+        ('V', 'V'): 5, ('M', 'I'): 2, ('T', 'Q'): -1, ('I', 'G'): -4,
+        ('P', 'K'): -1, ('M', 'M'): 7, ('K', 'D'): -1, ('I', 'C'): -2,
+        ('Z', 'D'): 1, ('F', 'R'): -3, ('X', 'K'): -1, ('Q', 'D'): 0,
+        ('X', 'G'): -2, ('Z', 'L'): -3, ('X', 'C'): -2, ('Z', 'H'): 0,
+        ('B', 'L'): -4, ('B', 'H'): 0, ('F', 'F'): 8, ('X', 'W'): -3,
+        ('B', 'D'): 5, ('D', 'A'): -2, ('S', 'L'): -3, ('X', 'S'): -1,
+        ('F', 'N'): -4, ('S', 'R'): -1, ('W', 'D'): -5, ('V', 'Y'): -1,
+        ('W', 'L'): -2, ('H', 'R'): 0, ('W', 'H'): -3, ('H', 'N'): 1,
+        ('W', 'T'): -3, ('T', 'T'): 5, ('S', 'F'): -3, ('W', 'P'): -4,
+        ('L', 'D'): -4, ('B', 'I'): -4, ('L', 'H'): -3, ('S', 'N'): 1,
+        ('B', 'T'): 0, ('L', 'L'): 5, ('Y', 'K'): -2, ('E', 'Q'): 2,
+        ('Y', 'G'): -3, ('Z', 'S'): 0, ('Y', 'C'): -3, ('G', 'D'): -1,
+        ('B', 'V'): -4, ('E', 'A'): -1, ('Y', 'W'): 2, ('E', 'E'): 6,
+        ('Y', 'S'): -2, ('C', 'N'): -2, ('V', 'C'): -1, ('T', 'H'): -2,
+        ('P', 'R'): -3, ('V', 'G'): -4, ('T', 'L'): -1, ('V', 'K'): -3,
+        ('K', 'Q'): 2, ('R', 'A'): -2, ('I', 'R'): -4, ('T', 'D'): -1,
+        ('P', 'F'): -4, ('I', 'N'): -3, ('K', 'I'): -3, ('M', 'D'): -4,
+        ('V', 'W'): -3, ('W', 'W'): 15, ('M', 'H'): -1, ('P', 'N'): -2,
+        ('K', 'A'): -1, ('M', 'L'): 3, ('K', 'E'): 1, ('Z', 'E'): 5,
+        ('X', 'N'): -1, ('Z', 'A'): -1, ('Z', 'M'): -1, ('X', 'F'): -2,
+        ('K', 'C'): -3, ('B', 'Q'): 0, ('X', 'B'): -1, ('B', 'M'): -3,
+        ('F', 'C'): -2, ('Z', 'Q'): 4, ('X', 'Z'): -1, ('F', 'G'): -4,
+        ('B', 'E'): 1, ('X', 'V'): -1, ('F', 'K'): -4, ('B', 'A'): -2,
+        ('X', 'R'): -1, ('D', 'D'): 8, ('W', 'G'): -3, ('Z', 'F'): -4,
+        ('S', 'Q'): 0, ('W', 'C'): -5, ('W', 'K'): -3, ('H', 'Q'): 1,
+        ('L', 'C'): -2, ('W', 'N'): -4, ('S', 'A'): 1, ('L', 'G'): -4,
+        ('W', 'S'): -4, ('S', 'E'): -1, ('H', 'E'): 0, ('S', 'I'): -3,
+        ('H', 'A'): -2, ('S', 'M'): -2, ('Y', 'L'): -1, ('Y', 'H'): 2,
+        ('Y', 'D'): -3, ('E', 'R'): 0, ('X', 'P'): -2, ('G', 'G'): 8,
+        ('G', 'C'): -3, ('E', 'N'): 0, ('Y', 'T'): -2, ('Y', 'P'): -3,
+        ('T', 'K'): -1, ('A', 'A'): 5, ('P', 'Q'): -1, ('T', 'C'): -1,
+        ('V', 'H'): -4, ('T', 'G'): -2, ('I', 'Q'): -3, ('Z', 'T'): -1,
+        ('C', 'R'): -4, ('V', 'P'): -3, ('P', 'E'): -1, ('M', 'C'): -2,
+        ('K', 'N'): 0, ('I', 'I'): 5, ('P', 'A'): -1, ('M', 'G'): -3,
+        ('T', 'S'): 2, ('I', 'E'): -4, ('P', 'M'): -3, ('M', 'K'): -2,
+        ('I', 'A'): -1, ('P', 'I'): -3, ('R', 'R'): 7, ('X', 'M'): -1,
+        ('L', 'I'): 2, ('X', 'I'): -1, ('Z', 'B'): 2, ('X', 'E'): -1,
+        ('Z', 'N'): 0, ('X', 'A'): -1, ('B', 'R'): -1, ('B', 'N'): 4,
+        ('F', 'D'): -5, ('X', 'Y'): -1, ('Z', 'R'): 0, ('F', 'H'): -1,
+        ('B', 'F'): -4, ('F', 'L'): 1, ('X', 'Q'): -1, ('B', 'B'): 5
+        }
 blosum50 = _temp()
 del _temp
 
@@ -682,76 +682,76 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/blosum55.cmp
 def _temp():
     return {
-('W', 'F'): 1, ('L', 'R'): -3, ('S', 'P'): -1, ('V', 'T'): 0,
-('Q', 'Q'): 7, ('N', 'A'): -1, ('Z', 'Y'): -2, ('W', 'R'): -3,
-('Q', 'A'): -1, ('S', 'D'): 0, ('H', 'H'): 10, ('S', 'H'): -1,
-('H', 'D'): -1, ('L', 'N'): -4, ('W', 'A'): -3, ('Y', 'M'): 0,
-('G', 'R'): -3, ('Y', 'I'): -1, ('Y', 'E'): -2, ('B', 'Y'): -3,
-('Y', 'A'): -2, ('V', 'D'): -4, ('B', 'S'): 0, ('Y', 'Y'): 8,
-('G', 'N'): 0, ('E', 'C'): -3, ('Y', 'Q'): -1, ('Z', 'Z'): 5,
-('V', 'A'): 0, ('C', 'C'): 13, ('M', 'R'): -2, ('V', 'E'): -3,
-('T', 'N'): 0, ('P', 'P'): 10, ('V', 'I'): 4, ('V', 'S'): -2,
-('Z', 'P'): -1, ('V', 'M'): 1, ('T', 'F'): -2, ('V', 'Q'): -3,
-('K', 'K'): 6, ('P', 'D'): -1, ('I', 'H'): -4, ('I', 'D'): -4,
-('T', 'R'): -1, ('P', 'L'): -4, ('K', 'G'): -2, ('M', 'N'): -2,
-('P', 'H'): -2, ('F', 'Q'): -4, ('Z', 'G'): -2, ('X', 'L'): -1,
-('T', 'M'): -1, ('Z', 'C'): -3, ('X', 'H'): -1, ('D', 'R'): -2,
-('B', 'W'): -5, ('X', 'D'): -1, ('Z', 'K'): 1, ('F', 'A'): -3,
-('Z', 'W'): -2, ('F', 'E'): -3, ('D', 'N'): 2, ('B', 'K'): 0,
-('X', 'X'): -1, ('F', 'I'): 0, ('B', 'G'): -1, ('X', 'T'): 0,
-('F', 'M'): 0, ('B', 'C'): -3, ('Z', 'I'): -3, ('Z', 'V'): -3,
-('S', 'S'): 5, ('L', 'Q'): -2, ('W', 'E'): -3, ('Q', 'R'): 1,
-('N', 'N'): 7, ('W', 'M'): -1, ('Q', 'C'): -3, ('W', 'I'): -3,
-('S', 'C'): -1, ('L', 'A'): -2, ('S', 'G'): 0, ('L', 'E'): -3,
-('W', 'Q'): -1, ('H', 'G'): -2, ('S', 'K'): 0, ('Q', 'N'): 0,
-('N', 'R'): -1, ('H', 'C'): -3, ('Y', 'N'): -2, ('G', 'Q'): -2,
-('Y', 'F'): 4, ('C', 'A'): -1, ('V', 'L'): 1, ('G', 'E'): -3,
-('G', 'A'): 0, ('K', 'R'): 3, ('E', 'D'): 2, ('Y', 'R'): -1,
-('M', 'Q'): 0, ('T', 'I'): -1, ('C', 'D'): -4, ('V', 'F'): -1,
-('T', 'A'): 0, ('T', 'P'): -1, ('B', 'P'): -2, ('T', 'E'): -1,
-('V', 'N'): -3, ('P', 'G'): -2, ('M', 'A'): -1, ('K', 'H'): 0,
-('V', 'R'): -3, ('P', 'C'): -4, ('M', 'E'): -2, ('K', 'L'): -3,
-('V', 'V'): 5, ('M', 'I'): 2, ('T', 'Q'): -1, ('I', 'G'): -4,
-('P', 'K'): -1, ('M', 'M'): 7, ('K', 'D'): -1, ('I', 'C'): -2,
-('Z', 'D'): 1, ('F', 'R'): -3, ('X', 'K'): -1, ('Q', 'D'): 0,
-('X', 'G'): -2, ('Z', 'L'): -3, ('X', 'C'): -2, ('Z', 'H'): 0,
-('B', 'L'): -4, ('B', 'H'): 0, ('F', 'F'): 8, ('X', 'W'): -3,
-('B', 'D'): 5, ('D', 'A'): -2, ('S', 'L'): -3, ('X', 'S'): -1,
-('F', 'N'): -4, ('S', 'R'): -1, ('W', 'D'): -5, ('V', 'Y'): -1,
-('W', 'L'): -2, ('H', 'R'): 0, ('W', 'H'): -3, ('H', 'N'): 1,
-('W', 'T'): -3, ('T', 'T'): 5, ('S', 'F'): -3, ('W', 'P'): -4,
-('L', 'D'): -4, ('B', 'I'): -4, ('L', 'H'): -3, ('S', 'N'): 1,
-('B', 'T'): 0, ('L', 'L'): 5, ('Y', 'K'): -2, ('E', 'Q'): 2,
-('Y', 'G'): -3, ('Z', 'S'): 0, ('Y', 'C'): -3, ('G', 'D'): -1,
-('B', 'V'): -4, ('E', 'A'): -1, ('Y', 'W'): 2, ('E', 'E'): 6,
-('Y', 'S'): -2, ('C', 'N'): -2, ('V', 'C'): -1, ('T', 'H'): -2,
-('P', 'R'): -3, ('V', 'G'): -4, ('T', 'L'): -1, ('V', 'K'): -3,
-('K', 'Q'): 2, ('R', 'A'): -2, ('I', 'R'): -4, ('T', 'D'): -1,
-('P', 'F'): -4, ('I', 'N'): -3, ('K', 'I'): -3, ('M', 'D'): -4,
-('V', 'W'): -3, ('W', 'W'): 15, ('M', 'H'): -1, ('P', 'N'): -2,
-('K', 'A'): -1, ('M', 'L'): 3, ('K', 'E'): 1, ('Z', 'E'): 5,
-('X', 'N'): -1, ('Z', 'A'): -1, ('Z', 'M'): -1, ('X', 'F'): -2,
-('K', 'C'): -3, ('B', 'Q'): 0, ('X', 'B'): -1, ('B', 'M'): -3,
-('F', 'C'): -2, ('Z', 'Q'): 4, ('X', 'Z'): -1, ('F', 'G'): -4,
-('B', 'E'): 1, ('X', 'V'): -1, ('F', 'K'): -4, ('B', 'A'): -2,
-('X', 'R'): -1, ('D', 'D'): 8, ('W', 'G'): -3, ('Z', 'F'): -4,
-('S', 'Q'): 0, ('W', 'C'): -5, ('W', 'K'): -3, ('H', 'Q'): 1,
-('L', 'C'): -2, ('W', 'N'): -4, ('S', 'A'): 1, ('L', 'G'): -4,
-('W', 'S'): -4, ('S', 'E'): -1, ('H', 'E'): 0, ('S', 'I'): -3,
-('H', 'A'): -2, ('S', 'M'): -2, ('Y', 'L'): -1, ('Y', 'H'): 2,
-('Y', 'D'): -3, ('E', 'R'): 0, ('X', 'P'): -2, ('G', 'G'): 8,
-('G', 'C'): -3, ('E', 'N'): 0, ('Y', 'T'): -2, ('Y', 'P'): -3,
-('T', 'K'): -1, ('A', 'A'): 5, ('P', 'Q'): -1, ('T', 'C'): -1,
-('V', 'H'): -4, ('T', 'G'): -2, ('I', 'Q'): -3, ('Z', 'T'): -1,
-('C', 'R'): -4, ('V', 'P'): -3, ('P', 'E'): -1, ('M', 'C'): -2,
-('K', 'N'): 0, ('I', 'I'): 5, ('P', 'A'): -1, ('M', 'G'): -3,
-('T', 'S'): 2, ('I', 'E'): -4, ('P', 'M'): -3, ('M', 'K'): -2,
-('I', 'A'): -1, ('P', 'I'): -3, ('R', 'R'): 7, ('X', 'M'): -1,
-('L', 'I'): 2, ('X', 'I'): -1, ('Z', 'B'): 2, ('X', 'E'): -1,
-('Z', 'N'): 0, ('X', 'A'): -1, ('B', 'R'): -1, ('B', 'N'): 4,
-('F', 'D'): -5, ('X', 'Y'): -1, ('Z', 'R'): 0, ('F', 'H'): -1,
-('B', 'F'): -4, ('F', 'L'): 1, ('X', 'Q'): -1, ('B', 'B'): 5
-}
+        ('W', 'F'): 1, ('L', 'R'): -3, ('S', 'P'): -1, ('V', 'T'): 0,
+        ('Q', 'Q'): 7, ('N', 'A'): -1, ('Z', 'Y'): -2, ('W', 'R'): -3,
+        ('Q', 'A'): -1, ('S', 'D'): 0, ('H', 'H'): 10, ('S', 'H'): -1,
+        ('H', 'D'): -1, ('L', 'N'): -4, ('W', 'A'): -3, ('Y', 'M'): 0,
+        ('G', 'R'): -3, ('Y', 'I'): -1, ('Y', 'E'): -2, ('B', 'Y'): -3,
+        ('Y', 'A'): -2, ('V', 'D'): -4, ('B', 'S'): 0, ('Y', 'Y'): 8,
+        ('G', 'N'): 0, ('E', 'C'): -3, ('Y', 'Q'): -1, ('Z', 'Z'): 5,
+        ('V', 'A'): 0, ('C', 'C'): 13, ('M', 'R'): -2, ('V', 'E'): -3,
+        ('T', 'N'): 0, ('P', 'P'): 10, ('V', 'I'): 4, ('V', 'S'): -2,
+        ('Z', 'P'): -1, ('V', 'M'): 1, ('T', 'F'): -2, ('V', 'Q'): -3,
+        ('K', 'K'): 6, ('P', 'D'): -1, ('I', 'H'): -4, ('I', 'D'): -4,
+        ('T', 'R'): -1, ('P', 'L'): -4, ('K', 'G'): -2, ('M', 'N'): -2,
+        ('P', 'H'): -2, ('F', 'Q'): -4, ('Z', 'G'): -2, ('X', 'L'): -1,
+        ('T', 'M'): -1, ('Z', 'C'): -3, ('X', 'H'): -1, ('D', 'R'): -2,
+        ('B', 'W'): -5, ('X', 'D'): -1, ('Z', 'K'): 1, ('F', 'A'): -3,
+        ('Z', 'W'): -2, ('F', 'E'): -3, ('D', 'N'): 2, ('B', 'K'): 0,
+        ('X', 'X'): -1, ('F', 'I'): 0, ('B', 'G'): -1, ('X', 'T'): 0,
+        ('F', 'M'): 0, ('B', 'C'): -3, ('Z', 'I'): -3, ('Z', 'V'): -3,
+        ('S', 'S'): 5, ('L', 'Q'): -2, ('W', 'E'): -3, ('Q', 'R'): 1,
+        ('N', 'N'): 7, ('W', 'M'): -1, ('Q', 'C'): -3, ('W', 'I'): -3,
+        ('S', 'C'): -1, ('L', 'A'): -2, ('S', 'G'): 0, ('L', 'E'): -3,
+        ('W', 'Q'): -1, ('H', 'G'): -2, ('S', 'K'): 0, ('Q', 'N'): 0,
+        ('N', 'R'): -1, ('H', 'C'): -3, ('Y', 'N'): -2, ('G', 'Q'): -2,
+        ('Y', 'F'): 4, ('C', 'A'): -1, ('V', 'L'): 1, ('G', 'E'): -3,
+        ('G', 'A'): 0, ('K', 'R'): 3, ('E', 'D'): 2, ('Y', 'R'): -1,
+        ('M', 'Q'): 0, ('T', 'I'): -1, ('C', 'D'): -4, ('V', 'F'): -1,
+        ('T', 'A'): 0, ('T', 'P'): -1, ('B', 'P'): -2, ('T', 'E'): -1,
+        ('V', 'N'): -3, ('P', 'G'): -2, ('M', 'A'): -1, ('K', 'H'): 0,
+        ('V', 'R'): -3, ('P', 'C'): -4, ('M', 'E'): -2, ('K', 'L'): -3,
+        ('V', 'V'): 5, ('M', 'I'): 2, ('T', 'Q'): -1, ('I', 'G'): -4,
+        ('P', 'K'): -1, ('M', 'M'): 7, ('K', 'D'): -1, ('I', 'C'): -2,
+        ('Z', 'D'): 1, ('F', 'R'): -3, ('X', 'K'): -1, ('Q', 'D'): 0,
+        ('X', 'G'): -2, ('Z', 'L'): -3, ('X', 'C'): -2, ('Z', 'H'): 0,
+        ('B', 'L'): -4, ('B', 'H'): 0, ('F', 'F'): 8, ('X', 'W'): -3,
+        ('B', 'D'): 5, ('D', 'A'): -2, ('S', 'L'): -3, ('X', 'S'): -1,
+        ('F', 'N'): -4, ('S', 'R'): -1, ('W', 'D'): -5, ('V', 'Y'): -1,
+        ('W', 'L'): -2, ('H', 'R'): 0, ('W', 'H'): -3, ('H', 'N'): 1,
+        ('W', 'T'): -3, ('T', 'T'): 5, ('S', 'F'): -3, ('W', 'P'): -4,
+        ('L', 'D'): -4, ('B', 'I'): -4, ('L', 'H'): -3, ('S', 'N'): 1,
+        ('B', 'T'): 0, ('L', 'L'): 5, ('Y', 'K'): -2, ('E', 'Q'): 2,
+        ('Y', 'G'): -3, ('Z', 'S'): 0, ('Y', 'C'): -3, ('G', 'D'): -1,
+        ('B', 'V'): -4, ('E', 'A'): -1, ('Y', 'W'): 2, ('E', 'E'): 6,
+        ('Y', 'S'): -2, ('C', 'N'): -2, ('V', 'C'): -1, ('T', 'H'): -2,
+        ('P', 'R'): -3, ('V', 'G'): -4, ('T', 'L'): -1, ('V', 'K'): -3,
+        ('K', 'Q'): 2, ('R', 'A'): -2, ('I', 'R'): -4, ('T', 'D'): -1,
+        ('P', 'F'): -4, ('I', 'N'): -3, ('K', 'I'): -3, ('M', 'D'): -4,
+        ('V', 'W'): -3, ('W', 'W'): 15, ('M', 'H'): -1, ('P', 'N'): -2,
+        ('K', 'A'): -1, ('M', 'L'): 3, ('K', 'E'): 1, ('Z', 'E'): 5,
+        ('X', 'N'): -1, ('Z', 'A'): -1, ('Z', 'M'): -1, ('X', 'F'): -2,
+        ('K', 'C'): -3, ('B', 'Q'): 0, ('X', 'B'): -1, ('B', 'M'): -3,
+        ('F', 'C'): -2, ('Z', 'Q'): 4, ('X', 'Z'): -1, ('F', 'G'): -4,
+        ('B', 'E'): 1, ('X', 'V'): -1, ('F', 'K'): -4, ('B', 'A'): -2,
+        ('X', 'R'): -1, ('D', 'D'): 8, ('W', 'G'): -3, ('Z', 'F'): -4,
+        ('S', 'Q'): 0, ('W', 'C'): -5, ('W', 'K'): -3, ('H', 'Q'): 1,
+        ('L', 'C'): -2, ('W', 'N'): -4, ('S', 'A'): 1, ('L', 'G'): -4,
+        ('W', 'S'): -4, ('S', 'E'): -1, ('H', 'E'): 0, ('S', 'I'): -3,
+        ('H', 'A'): -2, ('S', 'M'): -2, ('Y', 'L'): -1, ('Y', 'H'): 2,
+        ('Y', 'D'): -3, ('E', 'R'): 0, ('X', 'P'): -2, ('G', 'G'): 8,
+        ('G', 'C'): -3, ('E', 'N'): 0, ('Y', 'T'): -2, ('Y', 'P'): -3,
+        ('T', 'K'): -1, ('A', 'A'): 5, ('P', 'Q'): -1, ('T', 'C'): -1,
+        ('V', 'H'): -4, ('T', 'G'): -2, ('I', 'Q'): -3, ('Z', 'T'): -1,
+        ('C', 'R'): -4, ('V', 'P'): -3, ('P', 'E'): -1, ('M', 'C'): -2,
+        ('K', 'N'): 0, ('I', 'I'): 5, ('P', 'A'): -1, ('M', 'G'): -3,
+        ('T', 'S'): 2, ('I', 'E'): -4, ('P', 'M'): -3, ('M', 'K'): -2,
+        ('I', 'A'): -1, ('P', 'I'): -3, ('R', 'R'): 7, ('X', 'M'): -1,
+        ('L', 'I'): 2, ('X', 'I'): -1, ('Z', 'B'): 2, ('X', 'E'): -1,
+        ('Z', 'N'): 0, ('X', 'A'): -1, ('B', 'R'): -1, ('B', 'N'): 4,
+        ('F', 'D'): -5, ('X', 'Y'): -1, ('Z', 'R'): 0, ('F', 'H'): -1,
+        ('B', 'F'): -4, ('F', 'L'): 1, ('X', 'Q'): -1, ('B', 'B'): 5
+        }
 blosum55 = _temp()
 del _temp
 
@@ -759,76 +759,76 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/blosum60.cmp
 def _temp():
     return {
-('W', 'F'): 1, ('L', 'R'): -2, ('S', 'P'): -1, ('V', 'T'): 0,
-('Q', 'Q'): 5, ('N', 'A'): -1, ('Z', 'Y'): -2, ('W', 'R'): -3,
-('Q', 'A'): -1, ('S', 'D'): 0, ('H', 'H'): 7, ('S', 'H'): -1,
-('H', 'D'): -1, ('L', 'N'): -3, ('W', 'A'): -3, ('Y', 'M'): -1,
-('G', 'R'): -2, ('Y', 'I'): -1, ('Y', 'E'): -2, ('B', 'Y'): -2,
-('Y', 'A'): -2, ('V', 'D'): -3, ('B', 'S'): 0, ('Y', 'Y'): 6,
-('G', 'N'): 0, ('E', 'C'): -3, ('Y', 'Q'): -1, ('Z', 'Z'): 3,
-('V', 'A'): 0, ('C', 'C'): 9, ('M', 'R'): -1, ('V', 'E'): -2,
-('T', 'N'): 0, ('P', 'P'): 7, ('V', 'I'): 3, ('V', 'S'): -2,
-('Z', 'P'): -1, ('V', 'M'): 1, ('T', 'F'): -2, ('V', 'Q'): -2,
-('K', 'K'): 4, ('P', 'D'): -1, ('I', 'H'): -3, ('I', 'D'): -3,
-('T', 'R'): -1, ('P', 'L'): -3, ('K', 'G'): -1, ('M', 'N'): -2,
-('P', 'H'): -2, ('F', 'Q'): -3, ('Z', 'G'): -2, ('X', 'L'): -1,
-('T', 'M'): -1, ('Z', 'C'): -3, ('X', 'H'): -1, ('D', 'R'): -1,
-('B', 'W'): -4, ('X', 'D'): -1, ('Z', 'K'): 1, ('F', 'A'): -2,
-('Z', 'W'): -2, ('F', 'E'): -3, ('D', 'N'): 1, ('B', 'K'): 0,
-('X', 'X'): -1, ('F', 'I'): 0, ('B', 'G'): -1, ('X', 'T'): 0,
-('F', 'M'): 0, ('B', 'C'): -3, ('Z', 'I'): -3, ('Z', 'V'): -2,
-('S', 'S'): 4, ('L', 'Q'): -2, ('W', 'E'): -3, ('Q', 'R'): 1,
-('N', 'N'): 6, ('W', 'M'): -1, ('Q', 'C'): -3, ('W', 'I'): -2,
-('S', 'C'): -1, ('L', 'A'): -1, ('S', 'G'): 0, ('L', 'E'): -3,
-('W', 'Q'): -2, ('H', 'G'): -2, ('S', 'K'): 0, ('Q', 'N'): 0,
-('N', 'R'): 0, ('H', 'C'): -3, ('Y', 'N'): -2, ('G', 'Q'): -2,
-('Y', 'F'): 3, ('C', 'A'): 0, ('V', 'L'): 1, ('G', 'E'): -2,
-('G', 'A'): 0, ('K', 'R'): 2, ('E', 'D'): 2, ('Y', 'R'): -2,
-('M', 'Q'): 0, ('T', 'I'): -1, ('C', 'D'): -3, ('V', 'F'): -1,
-('T', 'A'): 0, ('T', 'P'): -1, ('B', 'P'): -2, ('T', 'E'): -1,
-('V', 'N'): -3, ('P', 'G'): -2, ('M', 'A'): -1, ('K', 'H'): -1,
-('V', 'R'): -2, ('P', 'C'): -3, ('M', 'E'): -2, ('K', 'L'): -2,
-('V', 'V'): 4, ('M', 'I'): 1, ('T', 'Q'): -1, ('I', 'G'): -3,
-('P', 'K'): -1, ('M', 'M'): 5, ('K', 'D'): -1, ('I', 'C'): -1,
-('Z', 'D'): 1, ('F', 'R'): -3, ('X', 'K'): -1, ('Q', 'D'): 0,
-('X', 'G'): -1, ('Z', 'L'): -2, ('X', 'C'): -2, ('Z', 'H'): 0,
-('B', 'L'): -3, ('B', 'H'): 0, ('F', 'F'): 6, ('X', 'W'): -2,
-('B', 'D'): 4, ('D', 'A'): -2, ('S', 'L'): -2, ('X', 'S'): 0,
-('F', 'N'): -3, ('S', 'R'): -1, ('W', 'D'): -4, ('V', 'Y'): -1,
-('W', 'L'): -2, ('H', 'R'): 0, ('W', 'H'): -2, ('H', 'N'): 1,
-('W', 'T'): -2, ('T', 'T'): 4, ('S', 'F'): -2, ('W', 'P'): -4,
-('L', 'D'): -3, ('B', 'I'): -3, ('L', 'H'): -3, ('S', 'N'): 1,
-('B', 'T'): 0, ('L', 'L'): 4, ('Y', 'K'): -2, ('E', 'Q'): 2,
-('Y', 'G'): -3, ('Z', 'S'): 0, ('Y', 'C'): -2, ('G', 'D'): -1,
-('B', 'V'): -3, ('E', 'A'): -1, ('Y', 'W'): 2, ('E', 'E'): 5,
-('Y', 'S'): -2, ('C', 'N'): -2, ('V', 'C'): -1, ('T', 'H'): -2,
-('P', 'R'): -2, ('V', 'G'): -3, ('T', 'L'): -1, ('V', 'K'): -2,
-('K', 'Q'): 1, ('R', 'A'): -1, ('I', 'R'): -3, ('T', 'D'): -1,
-('P', 'F'): -4, ('I', 'N'): -3, ('K', 'I'): -3, ('M', 'D'): -3,
-('V', 'W'): -3, ('W', 'W'): 10, ('M', 'H'): -1, ('P', 'N'): -2,
-('K', 'A'): -1, ('M', 'L'): 2, ('K', 'E'): 1, ('Z', 'E'): 4,
-('X', 'N'): -1, ('Z', 'A'): -1, ('Z', 'M'): -1, ('X', 'F'): -1,
-('K', 'C'): -3, ('B', 'Q'): 0, ('X', 'B'): -1, ('B', 'M'): -3,
-('F', 'C'): -2, ('Z', 'Q'): 3, ('X', 'Z'): -1, ('F', 'G'): -3,
-('B', 'E'): 1, ('X', 'V'): -1, ('F', 'K'): -3, ('B', 'A'): -2,
-('X', 'R'): -1, ('D', 'D'): 6, ('W', 'G'): -2, ('Z', 'F'): -3,
-('S', 'Q'): 0, ('W', 'C'): -2, ('W', 'K'): -3, ('H', 'Q'): 1,
-('L', 'C'): -1, ('W', 'N'): -4, ('S', 'A'): 1, ('L', 'G'): -4,
-('W', 'S'): -3, ('S', 'E'): 0, ('H', 'E'): 0, ('S', 'I'): -2,
-('H', 'A'): -2, ('S', 'M'): -1, ('Y', 'L'): -1, ('Y', 'H'): 2,
-('Y', 'D'): -3, ('E', 'R'): 0, ('X', 'P'): -2, ('G', 'G'): 6,
-('G', 'C'): -2, ('E', 'N'): 0, ('Y', 'T'): -2, ('Y', 'P'): -3,
-('T', 'K'): -1, ('A', 'A'): 4, ('P', 'Q'): -1, ('T', 'C'): -1,
-('V', 'H'): -3, ('T', 'G'): -2, ('I', 'Q'): -3, ('Z', 'T'): -1,
-('C', 'R'): -3, ('V', 'P'): -2, ('P', 'E'): -1, ('M', 'C'): -1,
-('K', 'N'): 0, ('I', 'I'): 4, ('P', 'A'): -1, ('M', 'G'): -2,
-('T', 'S'): 1, ('I', 'E'): -3, ('P', 'M'): -2, ('M', 'K'): -1,
-('I', 'A'): -1, ('P', 'I'): -3, ('R', 'R'): 5, ('X', 'M'): -1,
-('L', 'I'): 2, ('X', 'I'): -1, ('Z', 'B'): 1, ('X', 'E'): -1,
-('Z', 'N'): 0, ('X', 'A'): 0, ('B', 'R'): -1, ('B', 'N'): 3,
-('F', 'D'): -3, ('X', 'Y'): -1, ('Z', 'R'): 0, ('F', 'H'): -1,
-('B', 'F'): -3, ('F', 'L'): 0, ('X', 'Q'): -1, ('B', 'B'): 4
-}
+        ('W', 'F'): 1, ('L', 'R'): -2, ('S', 'P'): -1, ('V', 'T'): 0,
+        ('Q', 'Q'): 5, ('N', 'A'): -1, ('Z', 'Y'): -2, ('W', 'R'): -3,
+        ('Q', 'A'): -1, ('S', 'D'): 0, ('H', 'H'): 7, ('S', 'H'): -1,
+        ('H', 'D'): -1, ('L', 'N'): -3, ('W', 'A'): -3, ('Y', 'M'): -1,
+        ('G', 'R'): -2, ('Y', 'I'): -1, ('Y', 'E'): -2, ('B', 'Y'): -2,
+        ('Y', 'A'): -2, ('V', 'D'): -3, ('B', 'S'): 0, ('Y', 'Y'): 6,
+        ('G', 'N'): 0, ('E', 'C'): -3, ('Y', 'Q'): -1, ('Z', 'Z'): 3,
+        ('V', 'A'): 0, ('C', 'C'): 9, ('M', 'R'): -1, ('V', 'E'): -2,
+        ('T', 'N'): 0, ('P', 'P'): 7, ('V', 'I'): 3, ('V', 'S'): -2,
+        ('Z', 'P'): -1, ('V', 'M'): 1, ('T', 'F'): -2, ('V', 'Q'): -2,
+        ('K', 'K'): 4, ('P', 'D'): -1, ('I', 'H'): -3, ('I', 'D'): -3,
+        ('T', 'R'): -1, ('P', 'L'): -3, ('K', 'G'): -1, ('M', 'N'): -2,
+        ('P', 'H'): -2, ('F', 'Q'): -3, ('Z', 'G'): -2, ('X', 'L'): -1,
+        ('T', 'M'): -1, ('Z', 'C'): -3, ('X', 'H'): -1, ('D', 'R'): -1,
+        ('B', 'W'): -4, ('X', 'D'): -1, ('Z', 'K'): 1, ('F', 'A'): -2,
+        ('Z', 'W'): -2, ('F', 'E'): -3, ('D', 'N'): 1, ('B', 'K'): 0,
+        ('X', 'X'): -1, ('F', 'I'): 0, ('B', 'G'): -1, ('X', 'T'): 0,
+        ('F', 'M'): 0, ('B', 'C'): -3, ('Z', 'I'): -3, ('Z', 'V'): -2,
+        ('S', 'S'): 4, ('L', 'Q'): -2, ('W', 'E'): -3, ('Q', 'R'): 1,
+        ('N', 'N'): 6, ('W', 'M'): -1, ('Q', 'C'): -3, ('W', 'I'): -2,
+        ('S', 'C'): -1, ('L', 'A'): -1, ('S', 'G'): 0, ('L', 'E'): -3,
+        ('W', 'Q'): -2, ('H', 'G'): -2, ('S', 'K'): 0, ('Q', 'N'): 0,
+        ('N', 'R'): 0, ('H', 'C'): -3, ('Y', 'N'): -2, ('G', 'Q'): -2,
+        ('Y', 'F'): 3, ('C', 'A'): 0, ('V', 'L'): 1, ('G', 'E'): -2,
+        ('G', 'A'): 0, ('K', 'R'): 2, ('E', 'D'): 2, ('Y', 'R'): -2,
+        ('M', 'Q'): 0, ('T', 'I'): -1, ('C', 'D'): -3, ('V', 'F'): -1,
+        ('T', 'A'): 0, ('T', 'P'): -1, ('B', 'P'): -2, ('T', 'E'): -1,
+        ('V', 'N'): -3, ('P', 'G'): -2, ('M', 'A'): -1, ('K', 'H'): -1,
+        ('V', 'R'): -2, ('P', 'C'): -3, ('M', 'E'): -2, ('K', 'L'): -2,
+        ('V', 'V'): 4, ('M', 'I'): 1, ('T', 'Q'): -1, ('I', 'G'): -3,
+        ('P', 'K'): -1, ('M', 'M'): 5, ('K', 'D'): -1, ('I', 'C'): -1,
+        ('Z', 'D'): 1, ('F', 'R'): -3, ('X', 'K'): -1, ('Q', 'D'): 0,
+        ('X', 'G'): -1, ('Z', 'L'): -2, ('X', 'C'): -2, ('Z', 'H'): 0,
+        ('B', 'L'): -3, ('B', 'H'): 0, ('F', 'F'): 6, ('X', 'W'): -2,
+        ('B', 'D'): 4, ('D', 'A'): -2, ('S', 'L'): -2, ('X', 'S'): 0,
+        ('F', 'N'): -3, ('S', 'R'): -1, ('W', 'D'): -4, ('V', 'Y'): -1,
+        ('W', 'L'): -2, ('H', 'R'): 0, ('W', 'H'): -2, ('H', 'N'): 1,
+        ('W', 'T'): -2, ('T', 'T'): 4, ('S', 'F'): -2, ('W', 'P'): -4,
+        ('L', 'D'): -3, ('B', 'I'): -3, ('L', 'H'): -3, ('S', 'N'): 1,
+        ('B', 'T'): 0, ('L', 'L'): 4, ('Y', 'K'): -2, ('E', 'Q'): 2,
+        ('Y', 'G'): -3, ('Z', 'S'): 0, ('Y', 'C'): -2, ('G', 'D'): -1,
+        ('B', 'V'): -3, ('E', 'A'): -1, ('Y', 'W'): 2, ('E', 'E'): 5,
+        ('Y', 'S'): -2, ('C', 'N'): -2, ('V', 'C'): -1, ('T', 'H'): -2,
+        ('P', 'R'): -2, ('V', 'G'): -3, ('T', 'L'): -1, ('V', 'K'): -2,
+        ('K', 'Q'): 1, ('R', 'A'): -1, ('I', 'R'): -3, ('T', 'D'): -1,
+        ('P', 'F'): -4, ('I', 'N'): -3, ('K', 'I'): -3, ('M', 'D'): -3,
+        ('V', 'W'): -3, ('W', 'W'): 10, ('M', 'H'): -1, ('P', 'N'): -2,
+        ('K', 'A'): -1, ('M', 'L'): 2, ('K', 'E'): 1, ('Z', 'E'): 4,
+        ('X', 'N'): -1, ('Z', 'A'): -1, ('Z', 'M'): -1, ('X', 'F'): -1,
+        ('K', 'C'): -3, ('B', 'Q'): 0, ('X', 'B'): -1, ('B', 'M'): -3,
+        ('F', 'C'): -2, ('Z', 'Q'): 3, ('X', 'Z'): -1, ('F', 'G'): -3,
+        ('B', 'E'): 1, ('X', 'V'): -1, ('F', 'K'): -3, ('B', 'A'): -2,
+        ('X', 'R'): -1, ('D', 'D'): 6, ('W', 'G'): -2, ('Z', 'F'): -3,
+        ('S', 'Q'): 0, ('W', 'C'): -2, ('W', 'K'): -3, ('H', 'Q'): 1,
+        ('L', 'C'): -1, ('W', 'N'): -4, ('S', 'A'): 1, ('L', 'G'): -4,
+        ('W', 'S'): -3, ('S', 'E'): 0, ('H', 'E'): 0, ('S', 'I'): -2,
+        ('H', 'A'): -2, ('S', 'M'): -1, ('Y', 'L'): -1, ('Y', 'H'): 2,
+        ('Y', 'D'): -3, ('E', 'R'): 0, ('X', 'P'): -2, ('G', 'G'): 6,
+        ('G', 'C'): -2, ('E', 'N'): 0, ('Y', 'T'): -2, ('Y', 'P'): -3,
+        ('T', 'K'): -1, ('A', 'A'): 4, ('P', 'Q'): -1, ('T', 'C'): -1,
+        ('V', 'H'): -3, ('T', 'G'): -2, ('I', 'Q'): -3, ('Z', 'T'): -1,
+        ('C', 'R'): -3, ('V', 'P'): -2, ('P', 'E'): -1, ('M', 'C'): -1,
+        ('K', 'N'): 0, ('I', 'I'): 4, ('P', 'A'): -1, ('M', 'G'): -2,
+        ('T', 'S'): 1, ('I', 'E'): -3, ('P', 'M'): -2, ('M', 'K'): -1,
+        ('I', 'A'): -1, ('P', 'I'): -3, ('R', 'R'): 5, ('X', 'M'): -1,
+        ('L', 'I'): 2, ('X', 'I'): -1, ('Z', 'B'): 1, ('X', 'E'): -1,
+        ('Z', 'N'): 0, ('X', 'A'): 0, ('B', 'R'): -1, ('B', 'N'): 3,
+        ('F', 'D'): -3, ('X', 'Y'): -1, ('Z', 'R'): 0, ('F', 'H'): -1,
+        ('B', 'F'): -3, ('F', 'L'): 0, ('X', 'Q'): -1, ('B', 'B'): 4
+        }
 blosum60 = _temp()
 del _temp
 
@@ -836,76 +836,76 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/blosum62.cmp
 def _temp():
     return {
-('W', 'F'): 1, ('L', 'R'): -2, ('S', 'P'): -1, ('V', 'T'): 0,
-('Q', 'Q'): 5, ('N', 'A'): -2, ('Z', 'Y'): -2, ('W', 'R'): -3,
-('Q', 'A'): -1, ('S', 'D'): 0, ('H', 'H'): 8, ('S', 'H'): -1,
-('H', 'D'): -1, ('L', 'N'): -3, ('W', 'A'): -3, ('Y', 'M'): -1,
-('G', 'R'): -2, ('Y', 'I'): -1, ('Y', 'E'): -2, ('B', 'Y'): -3,
-('Y', 'A'): -2, ('V', 'D'): -3, ('B', 'S'): 0, ('Y', 'Y'): 7,
-('G', 'N'): 0, ('E', 'C'): -4, ('Y', 'Q'): -1, ('Z', 'Z'): 4,
-('V', 'A'): 0, ('C', 'C'): 9, ('M', 'R'): -1, ('V', 'E'): -2,
-('T', 'N'): 0, ('P', 'P'): 7, ('V', 'I'): 3, ('V', 'S'): -2,
-('Z', 'P'): -1, ('V', 'M'): 1, ('T', 'F'): -2, ('V', 'Q'): -2,
-('K', 'K'): 5, ('P', 'D'): -1, ('I', 'H'): -3, ('I', 'D'): -3,
-('T', 'R'): -1, ('P', 'L'): -3, ('K', 'G'): -2, ('M', 'N'): -2,
-('P', 'H'): -2, ('F', 'Q'): -3, ('Z', 'G'): -2, ('X', 'L'): -1,
-('T', 'M'): -1, ('Z', 'C'): -3, ('X', 'H'): -1, ('D', 'R'): -2,
-('B', 'W'): -4, ('X', 'D'): -1, ('Z', 'K'): 1, ('F', 'A'): -2,
-('Z', 'W'): -3, ('F', 'E'): -3, ('D', 'N'): 1, ('B', 'K'): 0,
-('X', 'X'): -1, ('F', 'I'): 0, ('B', 'G'): -1, ('X', 'T'): 0,
-('F', 'M'): 0, ('B', 'C'): -3, ('Z', 'I'): -3, ('Z', 'V'): -2,
-('S', 'S'): 4, ('L', 'Q'): -2, ('W', 'E'): -3, ('Q', 'R'): 1,
-('N', 'N'): 6, ('W', 'M'): -1, ('Q', 'C'): -3, ('W', 'I'): -3,
-('S', 'C'): -1, ('L', 'A'): -1, ('S', 'G'): 0, ('L', 'E'): -3,
-('W', 'Q'): -2, ('H', 'G'): -2, ('S', 'K'): 0, ('Q', 'N'): 0,
-('N', 'R'): 0, ('H', 'C'): -3, ('Y', 'N'): -2, ('G', 'Q'): -2,
-('Y', 'F'): 3, ('C', 'A'): 0, ('V', 'L'): 1, ('G', 'E'): -2,
-('G', 'A'): 0, ('K', 'R'): 2, ('E', 'D'): 2, ('Y', 'R'): -2,
-('M', 'Q'): 0, ('T', 'I'): -1, ('C', 'D'): -3, ('V', 'F'): -1,
-('T', 'A'): 0, ('T', 'P'): -1, ('B', 'P'): -2, ('T', 'E'): -1,
-('V', 'N'): -3, ('P', 'G'): -2, ('M', 'A'): -1, ('K', 'H'): -1,
-('V', 'R'): -3, ('P', 'C'): -3, ('M', 'E'): -2, ('K', 'L'): -2,
-('V', 'V'): 4, ('M', 'I'): 1, ('T', 'Q'): -1, ('I', 'G'): -4,
-('P', 'K'): -1, ('M', 'M'): 5, ('K', 'D'): -1, ('I', 'C'): -1,
-('Z', 'D'): 1, ('F', 'R'): -3, ('X', 'K'): -1, ('Q', 'D'): 0,
-('X', 'G'): -1, ('Z', 'L'): -3, ('X', 'C'): -2, ('Z', 'H'): 0,
-('B', 'L'): -4, ('B', 'H'): 0, ('F', 'F'): 6, ('X', 'W'): -2,
-('B', 'D'): 4, ('D', 'A'): -2, ('S', 'L'): -2, ('X', 'S'): 0,
-('F', 'N'): -3, ('S', 'R'): -1, ('W', 'D'): -4, ('V', 'Y'): -1,
-('W', 'L'): -2, ('H', 'R'): 0, ('W', 'H'): -2, ('H', 'N'): 1,
-('W', 'T'): -2, ('T', 'T'): 5, ('S', 'F'): -2, ('W', 'P'): -4,
-('L', 'D'): -4, ('B', 'I'): -3, ('L', 'H'): -3, ('S', 'N'): 1,
-('B', 'T'): -1, ('L', 'L'): 4, ('Y', 'K'): -2, ('E', 'Q'): 2,
-('Y', 'G'): -3, ('Z', 'S'): 0, ('Y', 'C'): -2, ('G', 'D'): -1,
-('B', 'V'): -3, ('E', 'A'): -1, ('Y', 'W'): 2, ('E', 'E'): 5,
-('Y', 'S'): -2, ('C', 'N'): -3, ('V', 'C'): -1, ('T', 'H'): -2,
-('P', 'R'): -2, ('V', 'G'): -3, ('T', 'L'): -1, ('V', 'K'): -2,
-('K', 'Q'): 1, ('R', 'A'): -1, ('I', 'R'): -3, ('T', 'D'): -1,
-('P', 'F'): -4, ('I', 'N'): -3, ('K', 'I'): -3, ('M', 'D'): -3,
-('V', 'W'): -3, ('W', 'W'): 11, ('M', 'H'): -2, ('P', 'N'): -2,
-('K', 'A'): -1, ('M', 'L'): 2, ('K', 'E'): 1, ('Z', 'E'): 4,
-('X', 'N'): -1, ('Z', 'A'): -1, ('Z', 'M'): -1, ('X', 'F'): -1,
-('K', 'C'): -3, ('B', 'Q'): 0, ('X', 'B'): -1, ('B', 'M'): -3,
-('F', 'C'): -2, ('Z', 'Q'): 3, ('X', 'Z'): -1, ('F', 'G'): -3,
-('B', 'E'): 1, ('X', 'V'): -1, ('F', 'K'): -3, ('B', 'A'): -2,
-('X', 'R'): -1, ('D', 'D'): 6, ('W', 'G'): -2, ('Z', 'F'): -3,
-('S', 'Q'): 0, ('W', 'C'): -2, ('W', 'K'): -3, ('H', 'Q'): 0,
-('L', 'C'): -1, ('W', 'N'): -4, ('S', 'A'): 1, ('L', 'G'): -4,
-('W', 'S'): -3, ('S', 'E'): 0, ('H', 'E'): 0, ('S', 'I'): -2,
-('H', 'A'): -2, ('S', 'M'): -1, ('Y', 'L'): -1, ('Y', 'H'): 2,
-('Y', 'D'): -3, ('E', 'R'): 0, ('X', 'P'): -2, ('G', 'G'): 6,
-('G', 'C'): -3, ('E', 'N'): 0, ('Y', 'T'): -2, ('Y', 'P'): -3,
-('T', 'K'): -1, ('A', 'A'): 4, ('P', 'Q'): -1, ('T', 'C'): -1,
-('V', 'H'): -3, ('T', 'G'): -2, ('I', 'Q'): -3, ('Z', 'T'): -1,
-('C', 'R'): -3, ('V', 'P'): -2, ('P', 'E'): -1, ('M', 'C'): -1,
-('K', 'N'): 0, ('I', 'I'): 4, ('P', 'A'): -1, ('M', 'G'): -3,
-('T', 'S'): 1, ('I', 'E'): -3, ('P', 'M'): -2, ('M', 'K'): -1,
-('I', 'A'): -1, ('P', 'I'): -3, ('R', 'R'): 5, ('X', 'M'): -1,
-('L', 'I'): 2, ('X', 'I'): -1, ('Z', 'B'): 1, ('X', 'E'): -1,
-('Z', 'N'): 0, ('X', 'A'): 0, ('B', 'R'): -1, ('B', 'N'): 3,
-('F', 'D'): -3, ('X', 'Y'): -1, ('Z', 'R'): 0, ('F', 'H'): -1,
-('B', 'F'): -3, ('F', 'L'): 0, ('X', 'Q'): -1, ('B', 'B'): 4
-}
+        ('W', 'F'): 1, ('L', 'R'): -2, ('S', 'P'): -1, ('V', 'T'): 0,
+        ('Q', 'Q'): 5, ('N', 'A'): -2, ('Z', 'Y'): -2, ('W', 'R'): -3,
+        ('Q', 'A'): -1, ('S', 'D'): 0, ('H', 'H'): 8, ('S', 'H'): -1,
+        ('H', 'D'): -1, ('L', 'N'): -3, ('W', 'A'): -3, ('Y', 'M'): -1,
+        ('G', 'R'): -2, ('Y', 'I'): -1, ('Y', 'E'): -2, ('B', 'Y'): -3,
+        ('Y', 'A'): -2, ('V', 'D'): -3, ('B', 'S'): 0, ('Y', 'Y'): 7,
+        ('G', 'N'): 0, ('E', 'C'): -4, ('Y', 'Q'): -1, ('Z', 'Z'): 4,
+        ('V', 'A'): 0, ('C', 'C'): 9, ('M', 'R'): -1, ('V', 'E'): -2,
+        ('T', 'N'): 0, ('P', 'P'): 7, ('V', 'I'): 3, ('V', 'S'): -2,
+        ('Z', 'P'): -1, ('V', 'M'): 1, ('T', 'F'): -2, ('V', 'Q'): -2,
+        ('K', 'K'): 5, ('P', 'D'): -1, ('I', 'H'): -3, ('I', 'D'): -3,
+        ('T', 'R'): -1, ('P', 'L'): -3, ('K', 'G'): -2, ('M', 'N'): -2,
+        ('P', 'H'): -2, ('F', 'Q'): -3, ('Z', 'G'): -2, ('X', 'L'): -1,
+        ('T', 'M'): -1, ('Z', 'C'): -3, ('X', 'H'): -1, ('D', 'R'): -2,
+        ('B', 'W'): -4, ('X', 'D'): -1, ('Z', 'K'): 1, ('F', 'A'): -2,
+        ('Z', 'W'): -3, ('F', 'E'): -3, ('D', 'N'): 1, ('B', 'K'): 0,
+        ('X', 'X'): -1, ('F', 'I'): 0, ('B', 'G'): -1, ('X', 'T'): 0,
+        ('F', 'M'): 0, ('B', 'C'): -3, ('Z', 'I'): -3, ('Z', 'V'): -2,
+        ('S', 'S'): 4, ('L', 'Q'): -2, ('W', 'E'): -3, ('Q', 'R'): 1,
+        ('N', 'N'): 6, ('W', 'M'): -1, ('Q', 'C'): -3, ('W', 'I'): -3,
+        ('S', 'C'): -1, ('L', 'A'): -1, ('S', 'G'): 0, ('L', 'E'): -3,
+        ('W', 'Q'): -2, ('H', 'G'): -2, ('S', 'K'): 0, ('Q', 'N'): 0,
+        ('N', 'R'): 0, ('H', 'C'): -3, ('Y', 'N'): -2, ('G', 'Q'): -2,
+        ('Y', 'F'): 3, ('C', 'A'): 0, ('V', 'L'): 1, ('G', 'E'): -2,
+        ('G', 'A'): 0, ('K', 'R'): 2, ('E', 'D'): 2, ('Y', 'R'): -2,
+        ('M', 'Q'): 0, ('T', 'I'): -1, ('C', 'D'): -3, ('V', 'F'): -1,
+        ('T', 'A'): 0, ('T', 'P'): -1, ('B', 'P'): -2, ('T', 'E'): -1,
+        ('V', 'N'): -3, ('P', 'G'): -2, ('M', 'A'): -1, ('K', 'H'): -1,
+        ('V', 'R'): -3, ('P', 'C'): -3, ('M', 'E'): -2, ('K', 'L'): -2,
+        ('V', 'V'): 4, ('M', 'I'): 1, ('T', 'Q'): -1, ('I', 'G'): -4,
+        ('P', 'K'): -1, ('M', 'M'): 5, ('K', 'D'): -1, ('I', 'C'): -1,
+        ('Z', 'D'): 1, ('F', 'R'): -3, ('X', 'K'): -1, ('Q', 'D'): 0,
+        ('X', 'G'): -1, ('Z', 'L'): -3, ('X', 'C'): -2, ('Z', 'H'): 0,
+        ('B', 'L'): -4, ('B', 'H'): 0, ('F', 'F'): 6, ('X', 'W'): -2,
+        ('B', 'D'): 4, ('D', 'A'): -2, ('S', 'L'): -2, ('X', 'S'): 0,
+        ('F', 'N'): -3, ('S', 'R'): -1, ('W', 'D'): -4, ('V', 'Y'): -1,
+        ('W', 'L'): -2, ('H', 'R'): 0, ('W', 'H'): -2, ('H', 'N'): 1,
+        ('W', 'T'): -2, ('T', 'T'): 5, ('S', 'F'): -2, ('W', 'P'): -4,
+        ('L', 'D'): -4, ('B', 'I'): -3, ('L', 'H'): -3, ('S', 'N'): 1,
+        ('B', 'T'): -1, ('L', 'L'): 4, ('Y', 'K'): -2, ('E', 'Q'): 2,
+        ('Y', 'G'): -3, ('Z', 'S'): 0, ('Y', 'C'): -2, ('G', 'D'): -1,
+        ('B', 'V'): -3, ('E', 'A'): -1, ('Y', 'W'): 2, ('E', 'E'): 5,
+        ('Y', 'S'): -2, ('C', 'N'): -3, ('V', 'C'): -1, ('T', 'H'): -2,
+        ('P', 'R'): -2, ('V', 'G'): -3, ('T', 'L'): -1, ('V', 'K'): -2,
+        ('K', 'Q'): 1, ('R', 'A'): -1, ('I', 'R'): -3, ('T', 'D'): -1,
+        ('P', 'F'): -4, ('I', 'N'): -3, ('K', 'I'): -3, ('M', 'D'): -3,
+        ('V', 'W'): -3, ('W', 'W'): 11, ('M', 'H'): -2, ('P', 'N'): -2,
+        ('K', 'A'): -1, ('M', 'L'): 2, ('K', 'E'): 1, ('Z', 'E'): 4,
+        ('X', 'N'): -1, ('Z', 'A'): -1, ('Z', 'M'): -1, ('X', 'F'): -1,
+        ('K', 'C'): -3, ('B', 'Q'): 0, ('X', 'B'): -1, ('B', 'M'): -3,
+        ('F', 'C'): -2, ('Z', 'Q'): 3, ('X', 'Z'): -1, ('F', 'G'): -3,
+        ('B', 'E'): 1, ('X', 'V'): -1, ('F', 'K'): -3, ('B', 'A'): -2,
+        ('X', 'R'): -1, ('D', 'D'): 6, ('W', 'G'): -2, ('Z', 'F'): -3,
+        ('S', 'Q'): 0, ('W', 'C'): -2, ('W', 'K'): -3, ('H', 'Q'): 0,
+        ('L', 'C'): -1, ('W', 'N'): -4, ('S', 'A'): 1, ('L', 'G'): -4,
+        ('W', 'S'): -3, ('S', 'E'): 0, ('H', 'E'): 0, ('S', 'I'): -2,
+        ('H', 'A'): -2, ('S', 'M'): -1, ('Y', 'L'): -1, ('Y', 'H'): 2,
+        ('Y', 'D'): -3, ('E', 'R'): 0, ('X', 'P'): -2, ('G', 'G'): 6,
+        ('G', 'C'): -3, ('E', 'N'): 0, ('Y', 'T'): -2, ('Y', 'P'): -3,
+        ('T', 'K'): -1, ('A', 'A'): 4, ('P', 'Q'): -1, ('T', 'C'): -1,
+        ('V', 'H'): -3, ('T', 'G'): -2, ('I', 'Q'): -3, ('Z', 'T'): -1,
+        ('C', 'R'): -3, ('V', 'P'): -2, ('P', 'E'): -1, ('M', 'C'): -1,
+        ('K', 'N'): 0, ('I', 'I'): 4, ('P', 'A'): -1, ('M', 'G'): -3,
+        ('T', 'S'): 1, ('I', 'E'): -3, ('P', 'M'): -2, ('M', 'K'): -1,
+        ('I', 'A'): -1, ('P', 'I'): -3, ('R', 'R'): 5, ('X', 'M'): -1,
+        ('L', 'I'): 2, ('X', 'I'): -1, ('Z', 'B'): 1, ('X', 'E'): -1,
+        ('Z', 'N'): 0, ('X', 'A'): 0, ('B', 'R'): -1, ('B', 'N'): 3,
+        ('F', 'D'): -3, ('X', 'Y'): -1, ('Z', 'R'): 0, ('F', 'H'): -1,
+        ('B', 'F'): -3, ('F', 'L'): 0, ('X', 'Q'): -1, ('B', 'B'): 4
+        }
 blosum62 = _temp()
 del _temp
 
@@ -913,76 +913,76 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/blosum65.cmp
 def _temp():
     return {
-('W', 'F'): 1, ('L', 'R'): -2, ('S', 'P'): -1, ('V', 'T'): 0,
-('Q', 'Q'): 6, ('N', 'A'): -2, ('Z', 'Y'): -2, ('W', 'R'): -3,
-('Q', 'A'): -1, ('S', 'D'): 0, ('H', 'H'): 8, ('S', 'H'): -1,
-('H', 'D'): -1, ('L', 'N'): -4, ('W', 'A'): -3, ('Y', 'M'): -1,
-('G', 'R'): -2, ('Y', 'I'): -1, ('Y', 'E'): -2, ('B', 'Y'): -3,
-('Y', 'A'): -2, ('V', 'D'): -3, ('B', 'S'): 0, ('Y', 'Y'): 7,
-('G', 'N'): -1, ('E', 'C'): -4, ('Y', 'Q'): -2, ('Z', 'Z'): 4,
-('V', 'A'): 0, ('C', 'C'): 9, ('M', 'R'): -2, ('V', 'E'): -3,
-('T', 'N'): 0, ('P', 'P'): 8, ('V', 'I'): 3, ('V', 'S'): -2,
-('Z', 'P'): -1, ('V', 'M'): 1, ('T', 'F'): -2, ('V', 'Q'): -2,
-('K', 'K'): 5, ('P', 'D'): -2, ('I', 'H'): -3, ('I', 'D'): -3,
-('T', 'R'): -1, ('P', 'L'): -3, ('K', 'G'): -2, ('M', 'N'): -2,
-('P', 'H'): -2, ('F', 'Q'): -3, ('Z', 'G'): -2, ('X', 'L'): -1,
-('T', 'M'): -1, ('Z', 'C'): -4, ('X', 'H'): -1, ('D', 'R'): -2,
-('B', 'W'): -4, ('X', 'D'): -1, ('Z', 'K'): 1, ('F', 'A'): -2,
-('Z', 'W'): -3, ('F', 'E'): -3, ('D', 'N'): 1, ('B', 'K'): 0,
-('X', 'X'): -1, ('F', 'I'): 0, ('B', 'G'): -1, ('X', 'T'): -1,
-('F', 'M'): 0, ('B', 'C'): -3, ('Z', 'I'): -3, ('Z', 'V'): -2,
-('S', 'S'): 4, ('L', 'Q'): -2, ('W', 'E'): -3, ('Q', 'R'): 1,
-('N', 'N'): 6, ('W', 'M'): -2, ('Q', 'C'): -3, ('W', 'I'): -2,
-('S', 'C'): -1, ('L', 'A'): -2, ('S', 'G'): 0, ('L', 'E'): -3,
-('W', 'Q'): -2, ('H', 'G'): -2, ('S', 'K'): 0, ('Q', 'N'): 0,
-('N', 'R'): 0, ('H', 'C'): -3, ('Y', 'N'): -2, ('G', 'Q'): -2,
-('Y', 'F'): 3, ('C', 'A'): 0, ('V', 'L'): 1, ('G', 'E'): -2,
-('G', 'A'): 0, ('K', 'R'): 2, ('E', 'D'): 2, ('Y', 'R'): -2,
-('M', 'Q'): 0, ('T', 'I'): -1, ('C', 'D'): -4, ('V', 'F'): -1,
-('T', 'A'): 0, ('T', 'P'): -1, ('B', 'P'): -2, ('T', 'E'): -1,
-('V', 'N'): -3, ('P', 'G'): -2, ('M', 'A'): -1, ('K', 'H'): -1,
-('V', 'R'): -3, ('P', 'C'): -3, ('M', 'E'): -2, ('K', 'L'): -3,
-('V', 'V'): 4, ('M', 'I'): 1, ('T', 'Q'): -1, ('I', 'G'): -4,
-('P', 'K'): -1, ('M', 'M'): 6, ('K', 'D'): -1, ('I', 'C'): -1,
-('Z', 'D'): 1, ('F', 'R'): -3, ('X', 'K'): -1, ('Q', 'D'): 0,
-('X', 'G'): -2, ('Z', 'L'): -3, ('X', 'C'): -2, ('Z', 'H'): 0,
-('B', 'L'): -4, ('B', 'H'): 0, ('F', 'F'): 6, ('X', 'W'): -2,
-('B', 'D'): 4, ('D', 'A'): -2, ('S', 'L'): -3, ('X', 'S'): -1,
-('F', 'N'): -3, ('S', 'R'): -1, ('W', 'D'): -5, ('V', 'Y'): -1,
-('W', 'L'): -2, ('H', 'R'): 0, ('W', 'H'): -2, ('H', 'N'): 1,
-('W', 'T'): -3, ('T', 'T'): 5, ('S', 'F'): -2, ('W', 'P'): -4,
-('L', 'D'): -4, ('B', 'I'): -3, ('L', 'H'): -3, ('S', 'N'): 1,
-('B', 'T'): -1, ('L', 'L'): 4, ('Y', 'K'): -2, ('E', 'Q'): 2,
-('Y', 'G'): -3, ('Z', 'S'): 0, ('Y', 'C'): -2, ('G', 'D'): -1,
-('B', 'V'): -3, ('E', 'A'): -1, ('Y', 'W'): 2, ('E', 'E'): 5,
-('Y', 'S'): -2, ('C', 'N'): -3, ('V', 'C'): -1, ('T', 'H'): -2,
-('P', 'R'): -2, ('V', 'G'): -3, ('T', 'L'): -1, ('V', 'K'): -2,
-('K', 'Q'): 1, ('R', 'A'): -1, ('I', 'R'): -3, ('T', 'D'): -1,
-('P', 'F'): -4, ('I', 'N'): -3, ('K', 'I'): -3, ('M', 'D'): -3,
-('V', 'W'): -3, ('W', 'W'): 10, ('M', 'H'): -2, ('P', 'N'): -2,
-('K', 'A'): -1, ('M', 'L'): 2, ('K', 'E'): 1, ('Z', 'E'): 4,
-('X', 'N'): -1, ('Z', 'A'): -1, ('Z', 'M'): -2, ('X', 'F'): -2,
-('K', 'C'): -3, ('B', 'Q'): 0, ('X', 'B'): -1, ('B', 'M'): -3,
-('F', 'C'): -2, ('Z', 'Q'): 3, ('X', 'Z'): -1, ('F', 'G'): -3,
-('B', 'E'): 1, ('X', 'V'): -1, ('F', 'K'): -3, ('B', 'A'): -2,
-('X', 'R'): -1, ('D', 'D'): 6, ('W', 'G'): -3, ('Z', 'F'): -3,
-('S', 'Q'): 0, ('W', 'C'): -2, ('W', 'K'): -3, ('H', 'Q'): 1,
-('L', 'C'): -1, ('W', 'N'): -4, ('S', 'A'): 1, ('L', 'G'): -4,
-('W', 'S'): -3, ('S', 'E'): 0, ('H', 'E'): 0, ('S', 'I'): -2,
-('H', 'A'): -2, ('S', 'M'): -2, ('Y', 'L'): -1, ('Y', 'H'): 2,
-('Y', 'D'): -3, ('E', 'R'): 0, ('X', 'P'): -2, ('G', 'G'): 6,
-('G', 'C'): -3, ('E', 'N'): 0, ('Y', 'T'): -2, ('Y', 'P'): -3,
-('T', 'K'): -1, ('A', 'A'): 4, ('P', 'Q'): -1, ('T', 'C'): -1,
-('V', 'H'): -3, ('T', 'G'): -2, ('I', 'Q'): -3, ('Z', 'T'): -1,
-('C', 'R'): -4, ('V', 'P'): -2, ('P', 'E'): -1, ('M', 'C'): -2,
-('K', 'N'): 0, ('I', 'I'): 4, ('P', 'A'): -1, ('M', 'G'): -3,
-('T', 'S'): 1, ('I', 'E'): -3, ('P', 'M'): -3, ('M', 'K'): -2,
-('I', 'A'): -1, ('P', 'I'): -3, ('R', 'R'): 6, ('X', 'M'): -1,
-('L', 'I'): 2, ('X', 'I'): -1, ('Z', 'B'): 1, ('X', 'E'): -1,
-('Z', 'N'): 0, ('X', 'A'): -1, ('B', 'R'): -1, ('B', 'N'): 3,
-('F', 'D'): -4, ('X', 'Y'): -1, ('Z', 'R'): 0, ('F', 'H'): -1,
-('B', 'F'): -3, ('F', 'L'): 0, ('X', 'Q'): -1, ('B', 'B'): 4
-}
+        ('W', 'F'): 1, ('L', 'R'): -2, ('S', 'P'): -1, ('V', 'T'): 0,
+        ('Q', 'Q'): 6, ('N', 'A'): -2, ('Z', 'Y'): -2, ('W', 'R'): -3,
+        ('Q', 'A'): -1, ('S', 'D'): 0, ('H', 'H'): 8, ('S', 'H'): -1,
+        ('H', 'D'): -1, ('L', 'N'): -4, ('W', 'A'): -3, ('Y', 'M'): -1,
+        ('G', 'R'): -2, ('Y', 'I'): -1, ('Y', 'E'): -2, ('B', 'Y'): -3,
+        ('Y', 'A'): -2, ('V', 'D'): -3, ('B', 'S'): 0, ('Y', 'Y'): 7,
+        ('G', 'N'): -1, ('E', 'C'): -4, ('Y', 'Q'): -2, ('Z', 'Z'): 4,
+        ('V', 'A'): 0, ('C', 'C'): 9, ('M', 'R'): -2, ('V', 'E'): -3,
+        ('T', 'N'): 0, ('P', 'P'): 8, ('V', 'I'): 3, ('V', 'S'): -2,
+        ('Z', 'P'): -1, ('V', 'M'): 1, ('T', 'F'): -2, ('V', 'Q'): -2,
+        ('K', 'K'): 5, ('P', 'D'): -2, ('I', 'H'): -3, ('I', 'D'): -3,
+        ('T', 'R'): -1, ('P', 'L'): -3, ('K', 'G'): -2, ('M', 'N'): -2,
+        ('P', 'H'): -2, ('F', 'Q'): -3, ('Z', 'G'): -2, ('X', 'L'): -1,
+        ('T', 'M'): -1, ('Z', 'C'): -4, ('X', 'H'): -1, ('D', 'R'): -2,
+        ('B', 'W'): -4, ('X', 'D'): -1, ('Z', 'K'): 1, ('F', 'A'): -2,
+        ('Z', 'W'): -3, ('F', 'E'): -3, ('D', 'N'): 1, ('B', 'K'): 0,
+        ('X', 'X'): -1, ('F', 'I'): 0, ('B', 'G'): -1, ('X', 'T'): -1,
+        ('F', 'M'): 0, ('B', 'C'): -3, ('Z', 'I'): -3, ('Z', 'V'): -2,
+        ('S', 'S'): 4, ('L', 'Q'): -2, ('W', 'E'): -3, ('Q', 'R'): 1,
+        ('N', 'N'): 6, ('W', 'M'): -2, ('Q', 'C'): -3, ('W', 'I'): -2,
+        ('S', 'C'): -1, ('L', 'A'): -2, ('S', 'G'): 0, ('L', 'E'): -3,
+        ('W', 'Q'): -2, ('H', 'G'): -2, ('S', 'K'): 0, ('Q', 'N'): 0,
+        ('N', 'R'): 0, ('H', 'C'): -3, ('Y', 'N'): -2, ('G', 'Q'): -2,
+        ('Y', 'F'): 3, ('C', 'A'): 0, ('V', 'L'): 1, ('G', 'E'): -2,
+        ('G', 'A'): 0, ('K', 'R'): 2, ('E', 'D'): 2, ('Y', 'R'): -2,
+        ('M', 'Q'): 0, ('T', 'I'): -1, ('C', 'D'): -4, ('V', 'F'): -1,
+        ('T', 'A'): 0, ('T', 'P'): -1, ('B', 'P'): -2, ('T', 'E'): -1,
+        ('V', 'N'): -3, ('P', 'G'): -2, ('M', 'A'): -1, ('K', 'H'): -1,
+        ('V', 'R'): -3, ('P', 'C'): -3, ('M', 'E'): -2, ('K', 'L'): -3,
+        ('V', 'V'): 4, ('M', 'I'): 1, ('T', 'Q'): -1, ('I', 'G'): -4,
+        ('P', 'K'): -1, ('M', 'M'): 6, ('K', 'D'): -1, ('I', 'C'): -1,
+        ('Z', 'D'): 1, ('F', 'R'): -3, ('X', 'K'): -1, ('Q', 'D'): 0,
+        ('X', 'G'): -2, ('Z', 'L'): -3, ('X', 'C'): -2, ('Z', 'H'): 0,
+        ('B', 'L'): -4, ('B', 'H'): 0, ('F', 'F'): 6, ('X', 'W'): -2,
+        ('B', 'D'): 4, ('D', 'A'): -2, ('S', 'L'): -3, ('X', 'S'): -1,
+        ('F', 'N'): -3, ('S', 'R'): -1, ('W', 'D'): -5, ('V', 'Y'): -1,
+        ('W', 'L'): -2, ('H', 'R'): 0, ('W', 'H'): -2, ('H', 'N'): 1,
+        ('W', 'T'): -3, ('T', 'T'): 5, ('S', 'F'): -2, ('W', 'P'): -4,
+        ('L', 'D'): -4, ('B', 'I'): -3, ('L', 'H'): -3, ('S', 'N'): 1,
+        ('B', 'T'): -1, ('L', 'L'): 4, ('Y', 'K'): -2, ('E', 'Q'): 2,
+        ('Y', 'G'): -3, ('Z', 'S'): 0, ('Y', 'C'): -2, ('G', 'D'): -1,
+        ('B', 'V'): -3, ('E', 'A'): -1, ('Y', 'W'): 2, ('E', 'E'): 5,
+        ('Y', 'S'): -2, ('C', 'N'): -3, ('V', 'C'): -1, ('T', 'H'): -2,
+        ('P', 'R'): -2, ('V', 'G'): -3, ('T', 'L'): -1, ('V', 'K'): -2,
+        ('K', 'Q'): 1, ('R', 'A'): -1, ('I', 'R'): -3, ('T', 'D'): -1,
+        ('P', 'F'): -4, ('I', 'N'): -3, ('K', 'I'): -3, ('M', 'D'): -3,
+        ('V', 'W'): -3, ('W', 'W'): 10, ('M', 'H'): -2, ('P', 'N'): -2,
+        ('K', 'A'): -1, ('M', 'L'): 2, ('K', 'E'): 1, ('Z', 'E'): 4,
+        ('X', 'N'): -1, ('Z', 'A'): -1, ('Z', 'M'): -2, ('X', 'F'): -2,
+        ('K', 'C'): -3, ('B', 'Q'): 0, ('X', 'B'): -1, ('B', 'M'): -3,
+        ('F', 'C'): -2, ('Z', 'Q'): 3, ('X', 'Z'): -1, ('F', 'G'): -3,
+        ('B', 'E'): 1, ('X', 'V'): -1, ('F', 'K'): -3, ('B', 'A'): -2,
+        ('X', 'R'): -1, ('D', 'D'): 6, ('W', 'G'): -3, ('Z', 'F'): -3,
+        ('S', 'Q'): 0, ('W', 'C'): -2, ('W', 'K'): -3, ('H', 'Q'): 1,
+        ('L', 'C'): -1, ('W', 'N'): -4, ('S', 'A'): 1, ('L', 'G'): -4,
+        ('W', 'S'): -3, ('S', 'E'): 0, ('H', 'E'): 0, ('S', 'I'): -2,
+        ('H', 'A'): -2, ('S', 'M'): -2, ('Y', 'L'): -1, ('Y', 'H'): 2,
+        ('Y', 'D'): -3, ('E', 'R'): 0, ('X', 'P'): -2, ('G', 'G'): 6,
+        ('G', 'C'): -3, ('E', 'N'): 0, ('Y', 'T'): -2, ('Y', 'P'): -3,
+        ('T', 'K'): -1, ('A', 'A'): 4, ('P', 'Q'): -1, ('T', 'C'): -1,
+        ('V', 'H'): -3, ('T', 'G'): -2, ('I', 'Q'): -3, ('Z', 'T'): -1,
+        ('C', 'R'): -4, ('V', 'P'): -2, ('P', 'E'): -1, ('M', 'C'): -2,
+        ('K', 'N'): 0, ('I', 'I'): 4, ('P', 'A'): -1, ('M', 'G'): -3,
+        ('T', 'S'): 1, ('I', 'E'): -3, ('P', 'M'): -3, ('M', 'K'): -2,
+        ('I', 'A'): -1, ('P', 'I'): -3, ('R', 'R'): 6, ('X', 'M'): -1,
+        ('L', 'I'): 2, ('X', 'I'): -1, ('Z', 'B'): 1, ('X', 'E'): -1,
+        ('Z', 'N'): 0, ('X', 'A'): -1, ('B', 'R'): -1, ('B', 'N'): 3,
+        ('F', 'D'): -4, ('X', 'Y'): -1, ('Z', 'R'): 0, ('F', 'H'): -1,
+        ('B', 'F'): -3, ('F', 'L'): 0, ('X', 'Q'): -1, ('B', 'B'): 4
+        }
 blosum65 = _temp()
 del _temp
 
@@ -990,76 +990,76 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/blosum70.cmp
 def _temp():
     return {
-('W', 'F'): 1, ('L', 'R'): -3, ('S', 'P'): -1, ('V', 'T'): 0,
-('Q', 'Q'): 6, ('N', 'A'): -2, ('Z', 'Y'): -2, ('W', 'R'): -3,
-('Q', 'A'): -1, ('S', 'D'): 0, ('H', 'H'): 8, ('S', 'H'): -1,
-('H', 'D'): -1, ('L', 'N'): -4, ('W', 'A'): -3, ('Y', 'M'): -1,
-('G', 'R'): -3, ('Y', 'I'): -1, ('Y', 'E'): -3, ('B', 'Y'): -3,
-('Y', 'A'): -2, ('V', 'D'): -4, ('B', 'S'): 0, ('Y', 'Y'): 7,
-('G', 'N'): -1, ('E', 'C'): -4, ('Y', 'Q'): -2, ('Z', 'Z'): 4,
-('V', 'A'): 0, ('C', 'C'): 9, ('M', 'R'): -2, ('V', 'E'): -3,
-('T', 'N'): 0, ('P', 'P'): 8, ('V', 'I'): 3, ('V', 'S'): -2,
-('Z', 'P'): -1, ('V', 'M'): 1, ('T', 'F'): -2, ('V', 'Q'): -2,
-('K', 'K'): 5, ('P', 'D'): -2, ('I', 'H'): -4, ('I', 'D'): -4,
-('T', 'R'): -1, ('P', 'L'): -3, ('K', 'G'): -2, ('M', 'N'): -2,
-('P', 'H'): -2, ('F', 'Q'): -3, ('Z', 'G'): -2, ('X', 'L'): -1,
-('T', 'M'): -1, ('Z', 'C'): -4, ('X', 'H'): -1, ('D', 'R'): -2,
-('B', 'W'): -4, ('X', 'D'): -2, ('Z', 'K'): 1, ('F', 'A'): -2,
-('Z', 'W'): -3, ('F', 'E'): -4, ('D', 'N'): 1, ('B', 'K'): -1,
-('X', 'X'): -1, ('F', 'I'): 0, ('B', 'G'): -1, ('X', 'T'): -1,
-('F', 'M'): 0, ('B', 'C'): -4, ('Z', 'I'): -3, ('Z', 'V'): -3,
-('S', 'S'): 4, ('L', 'Q'): -2, ('W', 'E'): -4, ('Q', 'R'): 1,
-('N', 'N'): 6, ('W', 'M'): -2, ('Q', 'C'): -3, ('W', 'I'): -3,
-('S', 'C'): -1, ('L', 'A'): -2, ('S', 'G'): -1, ('L', 'E'): -3,
-('W', 'Q'): -2, ('H', 'G'): -2, ('S', 'K'): 0, ('Q', 'N'): 0,
-('N', 'R'): -1, ('H', 'C'): -4, ('Y', 'N'): -2, ('G', 'Q'): -2,
-('Y', 'F'): 3, ('C', 'A'): -1, ('V', 'L'): 1, ('G', 'E'): -2,
-('G', 'A'): 0, ('K', 'R'): 2, ('E', 'D'): 1, ('Y', 'R'): -2,
-('M', 'Q'): 0, ('T', 'I'): -1, ('C', 'D'): -4, ('V', 'F'): -1,
-('T', 'A'): 0, ('T', 'P'): -1, ('B', 'P'): -2, ('T', 'E'): -1,
-('V', 'N'): -3, ('P', 'G'): -3, ('M', 'A'): -1, ('K', 'H'): -1,
-('V', 'R'): -3, ('P', 'C'): -3, ('M', 'E'): -2, ('K', 'L'): -3,
-('V', 'V'): 4, ('M', 'I'): 1, ('T', 'Q'): -1, ('I', 'G'): -4,
-('P', 'K'): -1, ('M', 'M'): 6, ('K', 'D'): -1, ('I', 'C'): -1,
-('Z', 'D'): 1, ('F', 'R'): -3, ('X', 'K'): -1, ('Q', 'D'): -1,
-('X', 'G'): -2, ('Z', 'L'): -3, ('X', 'C'): -2, ('Z', 'H'): 0,
-('B', 'L'): -4, ('B', 'H'): -1, ('F', 'F'): 6, ('X', 'W'): -3,
-('B', 'D'): 4, ('D', 'A'): -2, ('S', 'L'): -3, ('X', 'S'): -1,
-('F', 'N'): -3, ('S', 'R'): -1, ('W', 'D'): -5, ('V', 'Y'): -2,
-('W', 'L'): -2, ('H', 'R'): 0, ('W', 'H'): -2, ('H', 'N'): 0,
-('W', 'T'): -3, ('T', 'T'): 5, ('S', 'F'): -3, ('W', 'P'): -4,
-('L', 'D'): -4, ('B', 'I'): -4, ('L', 'H'): -3, ('S', 'N'): 0,
-('B', 'T'): -1, ('L', 'L'): 4, ('Y', 'K'): -2, ('E', 'Q'): 2,
-('Y', 'G'): -4, ('Z', 'S'): 0, ('Y', 'C'): -3, ('G', 'D'): -2,
-('B', 'V'): -3, ('E', 'A'): -1, ('Y', 'W'): 2, ('E', 'E'): 5,
-('Y', 'S'): -2, ('C', 'N'): -3, ('V', 'C'): -1, ('T', 'H'): -2,
-('P', 'R'): -2, ('V', 'G'): -4, ('T', 'L'): -2, ('V', 'K'): -3,
-('K', 'Q'): 1, ('R', 'A'): -2, ('I', 'R'): -3, ('T', 'D'): -1,
-('P', 'F'): -4, ('I', 'N'): -4, ('K', 'I'): -3, ('M', 'D'): -3,
-('V', 'W'): -3, ('W', 'W'): 11, ('M', 'H'): -2, ('P', 'N'): -2,
-('K', 'A'): -1, ('M', 'L'): 2, ('K', 'E'): 1, ('Z', 'E'): 4,
-('X', 'N'): -1, ('Z', 'A'): -1, ('Z', 'M'): -2, ('X', 'F'): -2,
-('K', 'C'): -4, ('B', 'Q'): 0, ('X', 'B'): -1, ('B', 'M'): -3,
-('F', 'C'): -2, ('Z', 'Q'): 3, ('X', 'Z'): -1, ('F', 'G'): -4,
-('B', 'E'): 1, ('X', 'V'): -1, ('F', 'K'): -3, ('B', 'A'): -2,
-('X', 'R'): -1, ('D', 'D'): 6, ('W', 'G'): -3, ('Z', 'F'): -4,
-('S', 'Q'): 0, ('W', 'C'): -3, ('W', 'K'): -3, ('H', 'Q'): 1,
-('L', 'C'): -2, ('W', 'N'): -4, ('S', 'A'): 1, ('L', 'G'): -4,
-('W', 'S'): -3, ('S', 'E'): 0, ('H', 'E'): 0, ('S', 'I'): -3,
-('H', 'A'): -2, ('S', 'M'): -2, ('Y', 'L'): -1, ('Y', 'H'): 2,
-('Y', 'D'): -4, ('E', 'R'): 0, ('X', 'P'): -2, ('G', 'G'): 6,
-('G', 'C'): -3, ('E', 'N'): 0, ('Y', 'T'): -2, ('Y', 'P'): -3,
-('T', 'K'): -1, ('A', 'A'): 4, ('P', 'Q'): -2, ('T', 'C'): -1,
-('V', 'H'): -3, ('T', 'G'): -2, ('I', 'Q'): -3, ('Z', 'T'): -1,
-('C', 'R'): -4, ('V', 'P'): -3, ('P', 'E'): -1, ('M', 'C'): -2,
-('K', 'N'): 0, ('I', 'I'): 4, ('P', 'A'): -1, ('M', 'G'): -3,
-('T', 'S'): 1, ('I', 'E'): -4, ('P', 'M'): -3, ('M', 'K'): -2,
-('I', 'A'): -2, ('P', 'I'): -3, ('R', 'R'): 6, ('X', 'M'): -1,
-('L', 'I'): 2, ('X', 'I'): -1, ('Z', 'B'): 0, ('X', 'E'): -1,
-('Z', 'N'): 0, ('X', 'A'): -1, ('B', 'R'): -1, ('B', 'N'): 3,
-('F', 'D'): -4, ('X', 'Y'): -2, ('Z', 'R'): 0, ('F', 'H'): -1,
-('B', 'F'): -4, ('F', 'L'): 0, ('X', 'Q'): -1, ('B', 'B'): 4
-}
+        ('W', 'F'): 1, ('L', 'R'): -3, ('S', 'P'): -1, ('V', 'T'): 0,
+        ('Q', 'Q'): 6, ('N', 'A'): -2, ('Z', 'Y'): -2, ('W', 'R'): -3,
+        ('Q', 'A'): -1, ('S', 'D'): 0, ('H', 'H'): 8, ('S', 'H'): -1,
+        ('H', 'D'): -1, ('L', 'N'): -4, ('W', 'A'): -3, ('Y', 'M'): -1,
+        ('G', 'R'): -3, ('Y', 'I'): -1, ('Y', 'E'): -3, ('B', 'Y'): -3,
+        ('Y', 'A'): -2, ('V', 'D'): -4, ('B', 'S'): 0, ('Y', 'Y'): 7,
+        ('G', 'N'): -1, ('E', 'C'): -4, ('Y', 'Q'): -2, ('Z', 'Z'): 4,
+        ('V', 'A'): 0, ('C', 'C'): 9, ('M', 'R'): -2, ('V', 'E'): -3,
+        ('T', 'N'): 0, ('P', 'P'): 8, ('V', 'I'): 3, ('V', 'S'): -2,
+        ('Z', 'P'): -1, ('V', 'M'): 1, ('T', 'F'): -2, ('V', 'Q'): -2,
+        ('K', 'K'): 5, ('P', 'D'): -2, ('I', 'H'): -4, ('I', 'D'): -4,
+        ('T', 'R'): -1, ('P', 'L'): -3, ('K', 'G'): -2, ('M', 'N'): -2,
+        ('P', 'H'): -2, ('F', 'Q'): -3, ('Z', 'G'): -2, ('X', 'L'): -1,
+        ('T', 'M'): -1, ('Z', 'C'): -4, ('X', 'H'): -1, ('D', 'R'): -2,
+        ('B', 'W'): -4, ('X', 'D'): -2, ('Z', 'K'): 1, ('F', 'A'): -2,
+        ('Z', 'W'): -3, ('F', 'E'): -4, ('D', 'N'): 1, ('B', 'K'): -1,
+        ('X', 'X'): -1, ('F', 'I'): 0, ('B', 'G'): -1, ('X', 'T'): -1,
+        ('F', 'M'): 0, ('B', 'C'): -4, ('Z', 'I'): -3, ('Z', 'V'): -3,
+        ('S', 'S'): 4, ('L', 'Q'): -2, ('W', 'E'): -4, ('Q', 'R'): 1,
+        ('N', 'N'): 6, ('W', 'M'): -2, ('Q', 'C'): -3, ('W', 'I'): -3,
+        ('S', 'C'): -1, ('L', 'A'): -2, ('S', 'G'): -1, ('L', 'E'): -3,
+        ('W', 'Q'): -2, ('H', 'G'): -2, ('S', 'K'): 0, ('Q', 'N'): 0,
+        ('N', 'R'): -1, ('H', 'C'): -4, ('Y', 'N'): -2, ('G', 'Q'): -2,
+        ('Y', 'F'): 3, ('C', 'A'): -1, ('V', 'L'): 1, ('G', 'E'): -2,
+        ('G', 'A'): 0, ('K', 'R'): 2, ('E', 'D'): 1, ('Y', 'R'): -2,
+        ('M', 'Q'): 0, ('T', 'I'): -1, ('C', 'D'): -4, ('V', 'F'): -1,
+        ('T', 'A'): 0, ('T', 'P'): -1, ('B', 'P'): -2, ('T', 'E'): -1,
+        ('V', 'N'): -3, ('P', 'G'): -3, ('M', 'A'): -1, ('K', 'H'): -1,
+        ('V', 'R'): -3, ('P', 'C'): -3, ('M', 'E'): -2, ('K', 'L'): -3,
+        ('V', 'V'): 4, ('M', 'I'): 1, ('T', 'Q'): -1, ('I', 'G'): -4,
+        ('P', 'K'): -1, ('M', 'M'): 6, ('K', 'D'): -1, ('I', 'C'): -1,
+        ('Z', 'D'): 1, ('F', 'R'): -3, ('X', 'K'): -1, ('Q', 'D'): -1,
+        ('X', 'G'): -2, ('Z', 'L'): -3, ('X', 'C'): -2, ('Z', 'H'): 0,
+        ('B', 'L'): -4, ('B', 'H'): -1, ('F', 'F'): 6, ('X', 'W'): -3,
+        ('B', 'D'): 4, ('D', 'A'): -2, ('S', 'L'): -3, ('X', 'S'): -1,
+        ('F', 'N'): -3, ('S', 'R'): -1, ('W', 'D'): -5, ('V', 'Y'): -2,
+        ('W', 'L'): -2, ('H', 'R'): 0, ('W', 'H'): -2, ('H', 'N'): 0,
+        ('W', 'T'): -3, ('T', 'T'): 5, ('S', 'F'): -3, ('W', 'P'): -4,
+        ('L', 'D'): -4, ('B', 'I'): -4, ('L', 'H'): -3, ('S', 'N'): 0,
+        ('B', 'T'): -1, ('L', 'L'): 4, ('Y', 'K'): -2, ('E', 'Q'): 2,
+        ('Y', 'G'): -4, ('Z', 'S'): 0, ('Y', 'C'): -3, ('G', 'D'): -2,
+        ('B', 'V'): -3, ('E', 'A'): -1, ('Y', 'W'): 2, ('E', 'E'): 5,
+        ('Y', 'S'): -2, ('C', 'N'): -3, ('V', 'C'): -1, ('T', 'H'): -2,
+        ('P', 'R'): -2, ('V', 'G'): -4, ('T', 'L'): -2, ('V', 'K'): -3,
+        ('K', 'Q'): 1, ('R', 'A'): -2, ('I', 'R'): -3, ('T', 'D'): -1,
+        ('P', 'F'): -4, ('I', 'N'): -4, ('K', 'I'): -3, ('M', 'D'): -3,
+        ('V', 'W'): -3, ('W', 'W'): 11, ('M', 'H'): -2, ('P', 'N'): -2,
+        ('K', 'A'): -1, ('M', 'L'): 2, ('K', 'E'): 1, ('Z', 'E'): 4,
+        ('X', 'N'): -1, ('Z', 'A'): -1, ('Z', 'M'): -2, ('X', 'F'): -2,
+        ('K', 'C'): -4, ('B', 'Q'): 0, ('X', 'B'): -1, ('B', 'M'): -3,
+        ('F', 'C'): -2, ('Z', 'Q'): 3, ('X', 'Z'): -1, ('F', 'G'): -4,
+        ('B', 'E'): 1, ('X', 'V'): -1, ('F', 'K'): -3, ('B', 'A'): -2,
+        ('X', 'R'): -1, ('D', 'D'): 6, ('W', 'G'): -3, ('Z', 'F'): -4,
+        ('S', 'Q'): 0, ('W', 'C'): -3, ('W', 'K'): -3, ('H', 'Q'): 1,
+        ('L', 'C'): -2, ('W', 'N'): -4, ('S', 'A'): 1, ('L', 'G'): -4,
+        ('W', 'S'): -3, ('S', 'E'): 0, ('H', 'E'): 0, ('S', 'I'): -3,
+        ('H', 'A'): -2, ('S', 'M'): -2, ('Y', 'L'): -1, ('Y', 'H'): 2,
+        ('Y', 'D'): -4, ('E', 'R'): 0, ('X', 'P'): -2, ('G', 'G'): 6,
+        ('G', 'C'): -3, ('E', 'N'): 0, ('Y', 'T'): -2, ('Y', 'P'): -3,
+        ('T', 'K'): -1, ('A', 'A'): 4, ('P', 'Q'): -2, ('T', 'C'): -1,
+        ('V', 'H'): -3, ('T', 'G'): -2, ('I', 'Q'): -3, ('Z', 'T'): -1,
+        ('C', 'R'): -4, ('V', 'P'): -3, ('P', 'E'): -1, ('M', 'C'): -2,
+        ('K', 'N'): 0, ('I', 'I'): 4, ('P', 'A'): -1, ('M', 'G'): -3,
+        ('T', 'S'): 1, ('I', 'E'): -4, ('P', 'M'): -3, ('M', 'K'): -2,
+        ('I', 'A'): -2, ('P', 'I'): -3, ('R', 'R'): 6, ('X', 'M'): -1,
+        ('L', 'I'): 2, ('X', 'I'): -1, ('Z', 'B'): 0, ('X', 'E'): -1,
+        ('Z', 'N'): 0, ('X', 'A'): -1, ('B', 'R'): -1, ('B', 'N'): 3,
+        ('F', 'D'): -4, ('X', 'Y'): -2, ('Z', 'R'): 0, ('F', 'H'): -1,
+        ('B', 'F'): -4, ('F', 'L'): 0, ('X', 'Q'): -1, ('B', 'B'): 4
+        }
 blosum70 = _temp()
 del _temp
 
@@ -1067,76 +1067,76 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/blosum75.cmp
 def _temp():
     return {
-('W', 'F'): 1, ('L', 'R'): -3, ('S', 'P'): -1, ('V', 'T'): 0,
-('Q', 'Q'): 6, ('N', 'A'): -2, ('Z', 'Y'): -3, ('W', 'R'): -3,
-('Q', 'A'): -1, ('S', 'D'): -1, ('H', 'H'): 8, ('S', 'H'): -1,
-('H', 'D'): -1, ('L', 'N'): -4, ('W', 'A'): -3, ('Y', 'M'): -2,
-('G', 'R'): -3, ('Y', 'I'): -2, ('Y', 'E'): -3, ('B', 'Y'): -3,
-('Y', 'A'): -2, ('V', 'D'): -4, ('B', 'S'): 0, ('Y', 'Y'): 7,
-('G', 'N'): -1, ('E', 'C'): -5, ('Y', 'Q'): -2, ('Z', 'Z'): 4,
-('V', 'A'): 0, ('C', 'C'): 9, ('M', 'R'): -2, ('V', 'E'): -3,
-('T', 'N'): 0, ('P', 'P'): 8, ('V', 'I'): 3, ('V', 'S'): -2,
-('Z', 'P'): -2, ('V', 'M'): 1, ('T', 'F'): -2, ('V', 'Q'): -2,
-('K', 'K'): 5, ('P', 'D'): -2, ('I', 'H'): -4, ('I', 'D'): -4,
-('T', 'R'): -1, ('P', 'L'): -3, ('K', 'G'): -2, ('M', 'N'): -3,
-('P', 'H'): -2, ('F', 'Q'): -4, ('Z', 'G'): -2, ('X', 'L'): -1,
-('T', 'M'): -1, ('Z', 'C'): -4, ('X', 'H'): -1, ('D', 'R'): -2,
-('B', 'W'): -5, ('X', 'D'): -2, ('Z', 'K'): 1, ('F', 'A'): -3,
-('Z', 'W'): -3, ('F', 'E'): -4, ('D', 'N'): 1, ('B', 'K'): -1,
-('X', 'X'): -1, ('F', 'I'): 0, ('B', 'G'): -1, ('X', 'T'): -1,
-('F', 'M'): 0, ('B', 'C'): -4, ('Z', 'I'): -4, ('Z', 'V'): -3,
-('S', 'S'): 5, ('L', 'Q'): -3, ('W', 'E'): -4, ('Q', 'R'): 1,
-('N', 'N'): 6, ('W', 'M'): -2, ('Q', 'C'): -3, ('W', 'I'): -3,
-('S', 'C'): -1, ('L', 'A'): -2, ('S', 'G'): -1, ('L', 'E'): -4,
-('W', 'Q'): -2, ('H', 'G'): -2, ('S', 'K'): 0, ('Q', 'N'): 0,
-('N', 'R'): -1, ('H', 'C'): -4, ('Y', 'N'): -3, ('G', 'Q'): -2,
-('Y', 'F'): 3, ('C', 'A'): -1, ('V', 'L'): 1, ('G', 'E'): -3,
-('G', 'A'): 0, ('K', 'R'): 2, ('E', 'D'): 1, ('Y', 'R'): -2,
-('M', 'Q'): 0, ('T', 'I'): -1, ('C', 'D'): -4, ('V', 'F'): -1,
-('T', 'A'): 0, ('T', 'P'): -1, ('B', 'P'): -2, ('T', 'E'): -1,
-('V', 'N'): -3, ('P', 'G'): -3, ('M', 'A'): -1, ('K', 'H'): -1,
-('V', 'R'): -3, ('P', 'C'): -4, ('M', 'E'): -2, ('K', 'L'): -3,
-('V', 'V'): 4, ('M', 'I'): 1, ('T', 'Q'): -1, ('I', 'G'): -5,
-('P', 'K'): -1, ('M', 'M'): 6, ('K', 'D'): -1, ('I', 'C'): -1,
-('Z', 'D'): 1, ('F', 'R'): -3, ('X', 'K'): -1, ('Q', 'D'): -1,
-('X', 'G'): -2, ('Z', 'L'): -3, ('X', 'C'): -2, ('Z', 'H'): 0,
-('B', 'L'): -4, ('B', 'H'): -1, ('F', 'F'): 6, ('X', 'W'): -3,
-('B', 'D'): 4, ('D', 'A'): -2, ('S', 'L'): -3, ('X', 'S'): -1,
-('F', 'N'): -4, ('S', 'R'): -1, ('W', 'D'): -5, ('V', 'Y'): -2,
-('W', 'L'): -2, ('H', 'R'): 0, ('W', 'H'): -2, ('H', 'N'): 0,
-('W', 'T'): -3, ('T', 'T'): 5, ('S', 'F'): -3, ('W', 'P'): -5,
-('L', 'D'): -4, ('B', 'I'): -4, ('L', 'H'): -3, ('S', 'N'): 0,
-('B', 'T'): -1, ('L', 'L'): 4, ('Y', 'K'): -2, ('E', 'Q'): 2,
-('Y', 'G'): -4, ('Z', 'S'): 0, ('Y', 'C'): -3, ('G', 'D'): -2,
-('B', 'V'): -4, ('E', 'A'): -1, ('Y', 'W'): 2, ('E', 'E'): 5,
-('Y', 'S'): -2, ('C', 'N'): -3, ('V', 'C'): -1, ('T', 'H'): -2,
-('P', 'R'): -2, ('V', 'G'): -4, ('T', 'L'): -2, ('V', 'K'): -3,
-('K', 'Q'): 1, ('R', 'A'): -2, ('I', 'R'): -3, ('T', 'D'): -1,
-('P', 'F'): -4, ('I', 'N'): -4, ('K', 'I'): -3, ('M', 'D'): -4,
-('V', 'W'): -3, ('W', 'W'): 11, ('M', 'H'): -2, ('P', 'N'): -3,
-('K', 'A'): -1, ('M', 'L'): 2, ('K', 'E'): 1, ('Z', 'E'): 4,
-('X', 'N'): -1, ('Z', 'A'): -1, ('Z', 'M'): -2, ('X', 'F'): -2,
-('K', 'C'): -4, ('B', 'Q'): 0, ('X', 'B'): -2, ('B', 'M'): -3,
-('F', 'C'): -2, ('Z', 'Q'): 3, ('X', 'Z'): -1, ('F', 'G'): -4,
-('B', 'E'): 1, ('X', 'V'): -1, ('F', 'K'): -4, ('B', 'A'): -2,
-('X', 'R'): -1, ('D', 'D'): 6, ('W', 'G'): -3, ('Z', 'F'): -4,
-('S', 'Q'): 0, ('W', 'C'): -3, ('W', 'K'): -4, ('H', 'Q'): 1,
-('L', 'C'): -2, ('W', 'N'): -4, ('S', 'A'): 1, ('L', 'G'): -4,
-('W', 'S'): -3, ('S', 'E'): 0, ('H', 'E'): 0, ('S', 'I'): -3,
-('H', 'A'): -2, ('S', 'M'): -2, ('Y', 'L'): -1, ('Y', 'H'): 2,
-('Y', 'D'): -4, ('E', 'R'): 0, ('X', 'P'): -2, ('G', 'G'): 6,
-('G', 'C'): -3, ('E', 'N'): -1, ('Y', 'T'): -2, ('Y', 'P'): -4,
-('T', 'K'): -1, ('A', 'A'): 4, ('P', 'Q'): -2, ('T', 'C'): -1,
-('V', 'H'): -4, ('T', 'G'): -2, ('I', 'Q'): -3, ('Z', 'T'): -1,
-('C', 'R'): -4, ('V', 'P'): -3, ('P', 'E'): -1, ('M', 'C'): -2,
-('K', 'N'): 0, ('I', 'I'): 4, ('P', 'A'): -1, ('M', 'G'): -3,
-('T', 'S'): 1, ('I', 'E'): -4, ('P', 'M'): -3, ('M', 'K'): -2,
-('I', 'A'): -2, ('P', 'I'): -3, ('R', 'R'): 6, ('X', 'M'): -1,
-('L', 'I'): 1, ('X', 'I'): -2, ('Z', 'B'): 0, ('X', 'E'): -1,
-('Z', 'N'): 0, ('X', 'A'): -1, ('B', 'R'): -1, ('B', 'N'): 3,
-('F', 'D'): -4, ('X', 'Y'): -2, ('Z', 'R'): 0, ('F', 'H'): -2,
-('B', 'F'): -4, ('F', 'L'): 0, ('X', 'Q'): -1, ('B', 'B'): 4
-}
+        ('W', 'F'): 1, ('L', 'R'): -3, ('S', 'P'): -1, ('V', 'T'): 0,
+        ('Q', 'Q'): 6, ('N', 'A'): -2, ('Z', 'Y'): -3, ('W', 'R'): -3,
+        ('Q', 'A'): -1, ('S', 'D'): -1, ('H', 'H'): 8, ('S', 'H'): -1,
+        ('H', 'D'): -1, ('L', 'N'): -4, ('W', 'A'): -3, ('Y', 'M'): -2,
+        ('G', 'R'): -3, ('Y', 'I'): -2, ('Y', 'E'): -3, ('B', 'Y'): -3,
+        ('Y', 'A'): -2, ('V', 'D'): -4, ('B', 'S'): 0, ('Y', 'Y'): 7,
+        ('G', 'N'): -1, ('E', 'C'): -5, ('Y', 'Q'): -2, ('Z', 'Z'): 4,
+        ('V', 'A'): 0, ('C', 'C'): 9, ('M', 'R'): -2, ('V', 'E'): -3,
+        ('T', 'N'): 0, ('P', 'P'): 8, ('V', 'I'): 3, ('V', 'S'): -2,
+        ('Z', 'P'): -2, ('V', 'M'): 1, ('T', 'F'): -2, ('V', 'Q'): -2,
+        ('K', 'K'): 5, ('P', 'D'): -2, ('I', 'H'): -4, ('I', 'D'): -4,
+        ('T', 'R'): -1, ('P', 'L'): -3, ('K', 'G'): -2, ('M', 'N'): -3,
+        ('P', 'H'): -2, ('F', 'Q'): -4, ('Z', 'G'): -2, ('X', 'L'): -1,
+        ('T', 'M'): -1, ('Z', 'C'): -4, ('X', 'H'): -1, ('D', 'R'): -2,
+        ('B', 'W'): -5, ('X', 'D'): -2, ('Z', 'K'): 1, ('F', 'A'): -3,
+        ('Z', 'W'): -3, ('F', 'E'): -4, ('D', 'N'): 1, ('B', 'K'): -1,
+        ('X', 'X'): -1, ('F', 'I'): 0, ('B', 'G'): -1, ('X', 'T'): -1,
+        ('F', 'M'): 0, ('B', 'C'): -4, ('Z', 'I'): -4, ('Z', 'V'): -3,
+        ('S', 'S'): 5, ('L', 'Q'): -3, ('W', 'E'): -4, ('Q', 'R'): 1,
+        ('N', 'N'): 6, ('W', 'M'): -2, ('Q', 'C'): -3, ('W', 'I'): -3,
+        ('S', 'C'): -1, ('L', 'A'): -2, ('S', 'G'): -1, ('L', 'E'): -4,
+        ('W', 'Q'): -2, ('H', 'G'): -2, ('S', 'K'): 0, ('Q', 'N'): 0,
+        ('N', 'R'): -1, ('H', 'C'): -4, ('Y', 'N'): -3, ('G', 'Q'): -2,
+        ('Y', 'F'): 3, ('C', 'A'): -1, ('V', 'L'): 1, ('G', 'E'): -3,
+        ('G', 'A'): 0, ('K', 'R'): 2, ('E', 'D'): 1, ('Y', 'R'): -2,
+        ('M', 'Q'): 0, ('T', 'I'): -1, ('C', 'D'): -4, ('V', 'F'): -1,
+        ('T', 'A'): 0, ('T', 'P'): -1, ('B', 'P'): -2, ('T', 'E'): -1,
+        ('V', 'N'): -3, ('P', 'G'): -3, ('M', 'A'): -1, ('K', 'H'): -1,
+        ('V', 'R'): -3, ('P', 'C'): -4, ('M', 'E'): -2, ('K', 'L'): -3,
+        ('V', 'V'): 4, ('M', 'I'): 1, ('T', 'Q'): -1, ('I', 'G'): -5,
+        ('P', 'K'): -1, ('M', 'M'): 6, ('K', 'D'): -1, ('I', 'C'): -1,
+        ('Z', 'D'): 1, ('F', 'R'): -3, ('X', 'K'): -1, ('Q', 'D'): -1,
+        ('X', 'G'): -2, ('Z', 'L'): -3, ('X', 'C'): -2, ('Z', 'H'): 0,
+        ('B', 'L'): -4, ('B', 'H'): -1, ('F', 'F'): 6, ('X', 'W'): -3,
+        ('B', 'D'): 4, ('D', 'A'): -2, ('S', 'L'): -3, ('X', 'S'): -1,
+        ('F', 'N'): -4, ('S', 'R'): -1, ('W', 'D'): -5, ('V', 'Y'): -2,
+        ('W', 'L'): -2, ('H', 'R'): 0, ('W', 'H'): -2, ('H', 'N'): 0,
+        ('W', 'T'): -3, ('T', 'T'): 5, ('S', 'F'): -3, ('W', 'P'): -5,
+        ('L', 'D'): -4, ('B', 'I'): -4, ('L', 'H'): -3, ('S', 'N'): 0,
+        ('B', 'T'): -1, ('L', 'L'): 4, ('Y', 'K'): -2, ('E', 'Q'): 2,
+        ('Y', 'G'): -4, ('Z', 'S'): 0, ('Y', 'C'): -3, ('G', 'D'): -2,
+        ('B', 'V'): -4, ('E', 'A'): -1, ('Y', 'W'): 2, ('E', 'E'): 5,
+        ('Y', 'S'): -2, ('C', 'N'): -3, ('V', 'C'): -1, ('T', 'H'): -2,
+        ('P', 'R'): -2, ('V', 'G'): -4, ('T', 'L'): -2, ('V', 'K'): -3,
+        ('K', 'Q'): 1, ('R', 'A'): -2, ('I', 'R'): -3, ('T', 'D'): -1,
+        ('P', 'F'): -4, ('I', 'N'): -4, ('K', 'I'): -3, ('M', 'D'): -4,
+        ('V', 'W'): -3, ('W', 'W'): 11, ('M', 'H'): -2, ('P', 'N'): -3,
+        ('K', 'A'): -1, ('M', 'L'): 2, ('K', 'E'): 1, ('Z', 'E'): 4,
+        ('X', 'N'): -1, ('Z', 'A'): -1, ('Z', 'M'): -2, ('X', 'F'): -2,
+        ('K', 'C'): -4, ('B', 'Q'): 0, ('X', 'B'): -2, ('B', 'M'): -3,
+        ('F', 'C'): -2, ('Z', 'Q'): 3, ('X', 'Z'): -1, ('F', 'G'): -4,
+        ('B', 'E'): 1, ('X', 'V'): -1, ('F', 'K'): -4, ('B', 'A'): -2,
+        ('X', 'R'): -1, ('D', 'D'): 6, ('W', 'G'): -3, ('Z', 'F'): -4,
+        ('S', 'Q'): 0, ('W', 'C'): -3, ('W', 'K'): -4, ('H', 'Q'): 1,
+        ('L', 'C'): -2, ('W', 'N'): -4, ('S', 'A'): 1, ('L', 'G'): -4,
+        ('W', 'S'): -3, ('S', 'E'): 0, ('H', 'E'): 0, ('S', 'I'): -3,
+        ('H', 'A'): -2, ('S', 'M'): -2, ('Y', 'L'): -1, ('Y', 'H'): 2,
+        ('Y', 'D'): -4, ('E', 'R'): 0, ('X', 'P'): -2, ('G', 'G'): 6,
+        ('G', 'C'): -3, ('E', 'N'): -1, ('Y', 'T'): -2, ('Y', 'P'): -4,
+        ('T', 'K'): -1, ('A', 'A'): 4, ('P', 'Q'): -2, ('T', 'C'): -1,
+        ('V', 'H'): -4, ('T', 'G'): -2, ('I', 'Q'): -3, ('Z', 'T'): -1,
+        ('C', 'R'): -4, ('V', 'P'): -3, ('P', 'E'): -1, ('M', 'C'): -2,
+        ('K', 'N'): 0, ('I', 'I'): 4, ('P', 'A'): -1, ('M', 'G'): -3,
+        ('T', 'S'): 1, ('I', 'E'): -4, ('P', 'M'): -3, ('M', 'K'): -2,
+        ('I', 'A'): -2, ('P', 'I'): -3, ('R', 'R'): 6, ('X', 'M'): -1,
+        ('L', 'I'): 1, ('X', 'I'): -2, ('Z', 'B'): 0, ('X', 'E'): -1,
+        ('Z', 'N'): 0, ('X', 'A'): -1, ('B', 'R'): -1, ('B', 'N'): 3,
+        ('F', 'D'): -4, ('X', 'Y'): -2, ('Z', 'R'): 0, ('F', 'H'): -2,
+        ('B', 'F'): -4, ('F', 'L'): 0, ('X', 'Q'): -1, ('B', 'B'): 4
+        }
 blosum75 = _temp()
 del _temp
 
@@ -1144,76 +1144,76 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/blosum80.cmp
 def _temp():
     return {
-('W', 'F'): 0, ('L', 'R'): -3, ('S', 'P'): -1, ('V', 'T'): 0,
-('Q', 'Q'): 6, ('N', 'A'): -2, ('Z', 'Y'): -3, ('W', 'R'): -4,
-('Q', 'A'): -1, ('S', 'D'): -1, ('H', 'H'): 8, ('S', 'H'): -1,
-('H', 'D'): -2, ('L', 'N'): -4, ('W', 'A'): -3, ('Y', 'M'): -2,
-('G', 'R'): -3, ('Y', 'I'): -2, ('Y', 'E'): -3, ('B', 'Y'): -3,
-('Y', 'A'): -2, ('V', 'D'): -4, ('B', 'S'): 0, ('Y', 'Y'): 7,
-('G', 'N'): -1, ('E', 'C'): -5, ('Y', 'Q'): -2, ('Z', 'Z'): 4,
-('V', 'A'): 0, ('C', 'C'): 9, ('M', 'R'): -2, ('V', 'E'): -3,
-('T', 'N'): 0, ('P', 'P'): 8, ('V', 'I'): 3, ('V', 'S'): -2,
-('Z', 'P'): -2, ('V', 'M'): 1, ('T', 'F'): -2, ('V', 'Q'): -3,
-('K', 'K'): 5, ('P', 'D'): -2, ('I', 'H'): -4, ('I', 'D'): -4,
-('T', 'R'): -1, ('P', 'L'): -3, ('K', 'G'): -2, ('M', 'N'): -3,
-('P', 'H'): -3, ('F', 'Q'): -4, ('Z', 'G'): -3, ('X', 'L'): -2,
-('T', 'M'): -1, ('Z', 'C'): -4, ('X', 'H'): -2, ('D', 'R'): -2,
-('B', 'W'): -5, ('X', 'D'): -2, ('Z', 'K'): 1, ('F', 'A'): -3,
-('Z', 'W'): -4, ('F', 'E'): -4, ('D', 'N'): 1, ('B', 'K'): -1,
-('X', 'X'): -1, ('F', 'I'): -1, ('B', 'G'): -1, ('X', 'T'): -1,
-('F', 'M'): 0, ('B', 'C'): -4, ('Z', 'I'): -4, ('Z', 'V'): -3,
-('S', 'S'): 5, ('L', 'Q'): -3, ('W', 'E'): -4, ('Q', 'R'): 1,
-('N', 'N'): 6, ('W', 'M'): -2, ('Q', 'C'): -4, ('W', 'I'): -3,
-('S', 'C'): -2, ('L', 'A'): -2, ('S', 'G'): -1, ('L', 'E'): -4,
-('W', 'Q'): -3, ('H', 'G'): -3, ('S', 'K'): -1, ('Q', 'N'): 0,
-('N', 'R'): -1, ('H', 'C'): -4, ('Y', 'N'): -3, ('G', 'Q'): -2,
-('Y', 'F'): 3, ('C', 'A'): -1, ('V', 'L'): 1, ('G', 'E'): -3,
-('G', 'A'): 0, ('K', 'R'): 2, ('E', 'D'): 1, ('Y', 'R'): -3,
-('M', 'Q'): 0, ('T', 'I'): -1, ('C', 'D'): -4, ('V', 'F'): -1,
-('T', 'A'): 0, ('T', 'P'): -2, ('B', 'P'): -2, ('T', 'E'): -1,
-('V', 'N'): -4, ('P', 'G'): -3, ('M', 'A'): -1, ('K', 'H'): -1,
-('V', 'R'): -3, ('P', 'C'): -4, ('M', 'E'): -2, ('K', 'L'): -3,
-('V', 'V'): 4, ('M', 'I'): 1, ('T', 'Q'): -1, ('I', 'G'): -5,
-('P', 'K'): -1, ('M', 'M'): 6, ('K', 'D'): -1, ('I', 'C'): -2,
-('Z', 'D'): 1, ('F', 'R'): -4, ('X', 'K'): -1, ('Q', 'D'): -1,
-('X', 'G'): -2, ('Z', 'L'): -3, ('X', 'C'): -3, ('Z', 'H'): 0,
-('B', 'L'): -4, ('B', 'H'): -1, ('F', 'F'): 6, ('X', 'W'): -3,
-('B', 'D'): 4, ('D', 'A'): -2, ('S', 'L'): -3, ('X', 'S'): -1,
-('F', 'N'): -4, ('S', 'R'): -1, ('W', 'D'): -6, ('V', 'Y'): -2,
-('W', 'L'): -2, ('H', 'R'): 0, ('W', 'H'): -3, ('H', 'N'): 0,
-('W', 'T'): -4, ('T', 'T'): 5, ('S', 'F'): -3, ('W', 'P'): -5,
-('L', 'D'): -5, ('B', 'I'): -4, ('L', 'H'): -3, ('S', 'N'): 0,
-('B', 'T'): -1, ('L', 'L'): 4, ('Y', 'K'): -3, ('E', 'Q'): 2,
-('Y', 'G'): -4, ('Z', 'S'): 0, ('Y', 'C'): -3, ('G', 'D'): -2,
-('B', 'V'): -4, ('E', 'A'): -1, ('Y', 'W'): 2, ('E', 'E'): 6,
-('Y', 'S'): -2, ('C', 'N'): -3, ('V', 'C'): -1, ('T', 'H'): -2,
-('P', 'R'): -2, ('V', 'G'): -4, ('T', 'L'): -2, ('V', 'K'): -3,
-('K', 'Q'): 1, ('R', 'A'): -2, ('I', 'R'): -3, ('T', 'D'): -1,
-('P', 'F'): -4, ('I', 'N'): -4, ('K', 'I'): -3, ('M', 'D'): -4,
-('V', 'W'): -3, ('W', 'W'): 11, ('M', 'H'): -2, ('P', 'N'): -3,
-('K', 'A'): -1, ('M', 'L'): 2, ('K', 'E'): 1, ('Z', 'E'): 4,
-('X', 'N'): -1, ('Z', 'A'): -1, ('Z', 'M'): -2, ('X', 'F'): -2,
-('K', 'C'): -4, ('B', 'Q'): 0, ('X', 'B'): -2, ('B', 'M'): -3,
-('F', 'C'): -3, ('Z', 'Q'): 3, ('X', 'Z'): -1, ('F', 'G'): -4,
-('B', 'E'): 1, ('X', 'V'): -1, ('F', 'K'): -4, ('B', 'A'): -2,
-('X', 'R'): -1, ('D', 'D'): 6, ('W', 'G'): -4, ('Z', 'F'): -4,
-('S', 'Q'): 0, ('W', 'C'): -3, ('W', 'K'): -4, ('H', 'Q'): 1,
-('L', 'C'): -2, ('W', 'N'): -4, ('S', 'A'): 1, ('L', 'G'): -4,
-('W', 'S'): -4, ('S', 'E'): 0, ('H', 'E'): 0, ('S', 'I'): -3,
-('H', 'A'): -2, ('S', 'M'): -2, ('Y', 'L'): -2, ('Y', 'H'): 2,
-('Y', 'D'): -4, ('E', 'R'): -1, ('X', 'P'): -2, ('G', 'G'): 6,
-('G', 'C'): -4, ('E', 'N'): -1, ('Y', 'T'): -2, ('Y', 'P'): -4,
-('T', 'K'): -1, ('A', 'A'): 5, ('P', 'Q'): -2, ('T', 'C'): -1,
-('V', 'H'): -4, ('T', 'G'): -2, ('I', 'Q'): -3, ('Z', 'T'): -1,
-('C', 'R'): -4, ('V', 'P'): -3, ('P', 'E'): -2, ('M', 'C'): -2,
-('K', 'N'): 0, ('I', 'I'): 5, ('P', 'A'): -1, ('M', 'G'): -4,
-('T', 'S'): 1, ('I', 'E'): -4, ('P', 'M'): -3, ('M', 'K'): -2,
-('I', 'A'): -2, ('P', 'I'): -4, ('R', 'R'): 6, ('X', 'M'): -1,
-('L', 'I'): 1, ('X', 'I'): -2, ('Z', 'B'): 0, ('X', 'E'): -1,
-('Z', 'N'): 0, ('X', 'A'): -1, ('B', 'R'): -2, ('B', 'N'): 4,
-('F', 'D'): -4, ('X', 'Y'): -2, ('Z', 'R'): 0, ('F', 'H'): -2,
-('B', 'F'): -4, ('F', 'L'): 0, ('X', 'Q'): -1, ('B', 'B'): 4
-}
+        ('W', 'F'): 0, ('L', 'R'): -3, ('S', 'P'): -1, ('V', 'T'): 0,
+        ('Q', 'Q'): 6, ('N', 'A'): -2, ('Z', 'Y'): -3, ('W', 'R'): -4,
+        ('Q', 'A'): -1, ('S', 'D'): -1, ('H', 'H'): 8, ('S', 'H'): -1,
+        ('H', 'D'): -2, ('L', 'N'): -4, ('W', 'A'): -3, ('Y', 'M'): -2,
+        ('G', 'R'): -3, ('Y', 'I'): -2, ('Y', 'E'): -3, ('B', 'Y'): -3,
+        ('Y', 'A'): -2, ('V', 'D'): -4, ('B', 'S'): 0, ('Y', 'Y'): 7,
+        ('G', 'N'): -1, ('E', 'C'): -5, ('Y', 'Q'): -2, ('Z', 'Z'): 4,
+        ('V', 'A'): 0, ('C', 'C'): 9, ('M', 'R'): -2, ('V', 'E'): -3,
+        ('T', 'N'): 0, ('P', 'P'): 8, ('V', 'I'): 3, ('V', 'S'): -2,
+        ('Z', 'P'): -2, ('V', 'M'): 1, ('T', 'F'): -2, ('V', 'Q'): -3,
+        ('K', 'K'): 5, ('P', 'D'): -2, ('I', 'H'): -4, ('I', 'D'): -4,
+        ('T', 'R'): -1, ('P', 'L'): -3, ('K', 'G'): -2, ('M', 'N'): -3,
+        ('P', 'H'): -3, ('F', 'Q'): -4, ('Z', 'G'): -3, ('X', 'L'): -2,
+        ('T', 'M'): -1, ('Z', 'C'): -4, ('X', 'H'): -2, ('D', 'R'): -2,
+        ('B', 'W'): -5, ('X', 'D'): -2, ('Z', 'K'): 1, ('F', 'A'): -3,
+        ('Z', 'W'): -4, ('F', 'E'): -4, ('D', 'N'): 1, ('B', 'K'): -1,
+        ('X', 'X'): -1, ('F', 'I'): -1, ('B', 'G'): -1, ('X', 'T'): -1,
+        ('F', 'M'): 0, ('B', 'C'): -4, ('Z', 'I'): -4, ('Z', 'V'): -3,
+        ('S', 'S'): 5, ('L', 'Q'): -3, ('W', 'E'): -4, ('Q', 'R'): 1,
+        ('N', 'N'): 6, ('W', 'M'): -2, ('Q', 'C'): -4, ('W', 'I'): -3,
+        ('S', 'C'): -2, ('L', 'A'): -2, ('S', 'G'): -1, ('L', 'E'): -4,
+        ('W', 'Q'): -3, ('H', 'G'): -3, ('S', 'K'): -1, ('Q', 'N'): 0,
+        ('N', 'R'): -1, ('H', 'C'): -4, ('Y', 'N'): -3, ('G', 'Q'): -2,
+        ('Y', 'F'): 3, ('C', 'A'): -1, ('V', 'L'): 1, ('G', 'E'): -3,
+        ('G', 'A'): 0, ('K', 'R'): 2, ('E', 'D'): 1, ('Y', 'R'): -3,
+        ('M', 'Q'): 0, ('T', 'I'): -1, ('C', 'D'): -4, ('V', 'F'): -1,
+        ('T', 'A'): 0, ('T', 'P'): -2, ('B', 'P'): -2, ('T', 'E'): -1,
+        ('V', 'N'): -4, ('P', 'G'): -3, ('M', 'A'): -1, ('K', 'H'): -1,
+        ('V', 'R'): -3, ('P', 'C'): -4, ('M', 'E'): -2, ('K', 'L'): -3,
+        ('V', 'V'): 4, ('M', 'I'): 1, ('T', 'Q'): -1, ('I', 'G'): -5,
+        ('P', 'K'): -1, ('M', 'M'): 6, ('K', 'D'): -1, ('I', 'C'): -2,
+        ('Z', 'D'): 1, ('F', 'R'): -4, ('X', 'K'): -1, ('Q', 'D'): -1,
+        ('X', 'G'): -2, ('Z', 'L'): -3, ('X', 'C'): -3, ('Z', 'H'): 0,
+        ('B', 'L'): -4, ('B', 'H'): -1, ('F', 'F'): 6, ('X', 'W'): -3,
+        ('B', 'D'): 4, ('D', 'A'): -2, ('S', 'L'): -3, ('X', 'S'): -1,
+        ('F', 'N'): -4, ('S', 'R'): -1, ('W', 'D'): -6, ('V', 'Y'): -2,
+        ('W', 'L'): -2, ('H', 'R'): 0, ('W', 'H'): -3, ('H', 'N'): 0,
+        ('W', 'T'): -4, ('T', 'T'): 5, ('S', 'F'): -3, ('W', 'P'): -5,
+        ('L', 'D'): -5, ('B', 'I'): -4, ('L', 'H'): -3, ('S', 'N'): 0,
+        ('B', 'T'): -1, ('L', 'L'): 4, ('Y', 'K'): -3, ('E', 'Q'): 2,
+        ('Y', 'G'): -4, ('Z', 'S'): 0, ('Y', 'C'): -3, ('G', 'D'): -2,
+        ('B', 'V'): -4, ('E', 'A'): -1, ('Y', 'W'): 2, ('E', 'E'): 6,
+        ('Y', 'S'): -2, ('C', 'N'): -3, ('V', 'C'): -1, ('T', 'H'): -2,
+        ('P', 'R'): -2, ('V', 'G'): -4, ('T', 'L'): -2, ('V', 'K'): -3,
+        ('K', 'Q'): 1, ('R', 'A'): -2, ('I', 'R'): -3, ('T', 'D'): -1,
+        ('P', 'F'): -4, ('I', 'N'): -4, ('K', 'I'): -3, ('M', 'D'): -4,
+        ('V', 'W'): -3, ('W', 'W'): 11, ('M', 'H'): -2, ('P', 'N'): -3,
+        ('K', 'A'): -1, ('M', 'L'): 2, ('K', 'E'): 1, ('Z', 'E'): 4,
+        ('X', 'N'): -1, ('Z', 'A'): -1, ('Z', 'M'): -2, ('X', 'F'): -2,
+        ('K', 'C'): -4, ('B', 'Q'): 0, ('X', 'B'): -2, ('B', 'M'): -3,
+        ('F', 'C'): -3, ('Z', 'Q'): 3, ('X', 'Z'): -1, ('F', 'G'): -4,
+        ('B', 'E'): 1, ('X', 'V'): -1, ('F', 'K'): -4, ('B', 'A'): -2,
+        ('X', 'R'): -1, ('D', 'D'): 6, ('W', 'G'): -4, ('Z', 'F'): -4,
+        ('S', 'Q'): 0, ('W', 'C'): -3, ('W', 'K'): -4, ('H', 'Q'): 1,
+        ('L', 'C'): -2, ('W', 'N'): -4, ('S', 'A'): 1, ('L', 'G'): -4,
+        ('W', 'S'): -4, ('S', 'E'): 0, ('H', 'E'): 0, ('S', 'I'): -3,
+        ('H', 'A'): -2, ('S', 'M'): -2, ('Y', 'L'): -2, ('Y', 'H'): 2,
+        ('Y', 'D'): -4, ('E', 'R'): -1, ('X', 'P'): -2, ('G', 'G'): 6,
+        ('G', 'C'): -4, ('E', 'N'): -1, ('Y', 'T'): -2, ('Y', 'P'): -4,
+        ('T', 'K'): -1, ('A', 'A'): 5, ('P', 'Q'): -2, ('T', 'C'): -1,
+        ('V', 'H'): -4, ('T', 'G'): -2, ('I', 'Q'): -3, ('Z', 'T'): -1,
+        ('C', 'R'): -4, ('V', 'P'): -3, ('P', 'E'): -2, ('M', 'C'): -2,
+        ('K', 'N'): 0, ('I', 'I'): 5, ('P', 'A'): -1, ('M', 'G'): -4,
+        ('T', 'S'): 1, ('I', 'E'): -4, ('P', 'M'): -3, ('M', 'K'): -2,
+        ('I', 'A'): -2, ('P', 'I'): -4, ('R', 'R'): 6, ('X', 'M'): -1,
+        ('L', 'I'): 1, ('X', 'I'): -2, ('Z', 'B'): 0, ('X', 'E'): -1,
+        ('Z', 'N'): 0, ('X', 'A'): -1, ('B', 'R'): -2, ('B', 'N'): 4,
+        ('F', 'D'): -4, ('X', 'Y'): -2, ('Z', 'R'): 0, ('F', 'H'): -2,
+        ('B', 'F'): -4, ('F', 'L'): 0, ('X', 'Q'): -1, ('B', 'B'): 4
+        }
 blosum80 = _temp()
 del _temp
 
@@ -1221,76 +1221,76 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/blosum85.cmp
 def _temp():
     return {
-('W', 'F'): 0, ('L', 'R'): -3, ('S', 'P'): -1, ('V', 'T'): 0,
-('Q', 'Q'): 6, ('N', 'A'): -2, ('Z', 'Y'): -3, ('W', 'R'): -4,
-('Q', 'A'): -1, ('S', 'D'): -1, ('H', 'H'): 8, ('S', 'H'): -1,
-('H', 'D'): -2, ('L', 'N'): -4, ('W', 'A'): -3, ('Y', 'M'): -2,
-('G', 'R'): -3, ('Y', 'I'): -2, ('Y', 'E'): -4, ('B', 'Y'): -4,
-('Y', 'A'): -3, ('V', 'D'): -4, ('B', 'S'): 0, ('Y', 'Y'): 7,
-('G', 'N'): -1, ('E', 'C'): -5, ('Y', 'Q'): -2, ('Z', 'Z'): 4,
-('V', 'A'): -1, ('C', 'C'): 9, ('M', 'R'): -2, ('V', 'E'): -3,
-('T', 'N'): 0, ('P', 'P'): 8, ('V', 'I'): 3, ('V', 'S'): -2,
-('Z', 'P'): -2, ('V', 'M'): 0, ('T', 'F'): -3, ('V', 'Q'): -3,
-('K', 'K'): 6, ('P', 'D'): -2, ('I', 'H'): -4, ('I', 'D'): -5,
-('T', 'R'): -2, ('P', 'L'): -4, ('K', 'G'): -2, ('M', 'N'): -3,
-('P', 'H'): -3, ('F', 'Q'): -4, ('Z', 'G'): -3, ('X', 'L'): -2,
-('T', 'M'): -1, ('Z', 'C'): -5, ('X', 'H'): -2, ('D', 'R'): -2,
-('B', 'W'): -5, ('X', 'D'): -2, ('Z', 'K'): 1, ('F', 'A'): -3,
-('Z', 'W'): -4, ('F', 'E'): -4, ('D', 'N'): 1, ('B', 'K'): -1,
-('X', 'X'): -2, ('F', 'I'): -1, ('B', 'G'): -1, ('X', 'T'): -1,
-('F', 'M'): -1, ('B', 'C'): -4, ('Z', 'I'): -4, ('Z', 'V'): -3,
-('S', 'S'): 5, ('L', 'Q'): -3, ('W', 'E'): -4, ('Q', 'R'): 1,
-('N', 'N'): 7, ('W', 'M'): -2, ('Q', 'C'): -4, ('W', 'I'): -3,
-('S', 'C'): -2, ('L', 'A'): -2, ('S', 'G'): -1, ('L', 'E'): -4,
-('W', 'Q'): -3, ('H', 'G'): -3, ('S', 'K'): -1, ('Q', 'N'): 0,
-('N', 'R'): -1, ('H', 'C'): -5, ('Y', 'N'): -3, ('G', 'Q'): -3,
-('Y', 'F'): 3, ('C', 'A'): -1, ('V', 'L'): 0, ('G', 'E'): -3,
-('G', 'A'): 0, ('K', 'R'): 2, ('E', 'D'): 1, ('Y', 'R'): -3,
-('M', 'Q'): 0, ('T', 'I'): -1, ('C', 'D'): -5, ('V', 'F'): -1,
-('T', 'A'): 0, ('T', 'P'): -2, ('B', 'P'): -3, ('T', 'E'): -1,
-('V', 'N'): -4, ('P', 'G'): -3, ('M', 'A'): -2, ('K', 'H'): -1,
-('V', 'R'): -3, ('P', 'C'): -4, ('M', 'E'): -3, ('K', 'L'): -3,
-('V', 'V'): 5, ('M', 'I'): 1, ('T', 'Q'): -1, ('I', 'G'): -5,
-('P', 'K'): -2, ('M', 'M'): 7, ('K', 'D'): -1, ('I', 'C'): -2,
-('Z', 'D'): 1, ('F', 'R'): -4, ('X', 'K'): -1, ('Q', 'D'): -1,
-('X', 'G'): -2, ('Z', 'L'): -4, ('X', 'C'): -3, ('Z', 'H'): 0,
-('B', 'L'): -5, ('B', 'H'): -1, ('F', 'F'): 7, ('X', 'W'): -3,
-('B', 'D'): 4, ('D', 'A'): -2, ('S', 'L'): -3, ('X', 'S'): -1,
-('F', 'N'): -4, ('S', 'R'): -1, ('W', 'D'): -6, ('V', 'Y'): -2,
-('W', 'L'): -3, ('H', 'R'): 0, ('W', 'H'): -3, ('H', 'N'): 0,
-('W', 'T'): -4, ('T', 'T'): 5, ('S', 'F'): -3, ('W', 'P'): -5,
-('L', 'D'): -5, ('B', 'I'): -5, ('L', 'H'): -3, ('S', 'N'): 0,
-('B', 'T'): -1, ('L', 'L'): 4, ('Y', 'K'): -3, ('E', 'Q'): 2,
-('Y', 'G'): -5, ('Z', 'S'): -1, ('Y', 'C'): -3, ('G', 'D'): -2,
-('B', 'V'): -4, ('E', 'A'): -1, ('Y', 'W'): 2, ('E', 'E'): 6,
-('Y', 'S'): -2, ('C', 'N'): -4, ('V', 'C'): -1, ('T', 'H'): -2,
-('P', 'R'): -2, ('V', 'G'): -4, ('T', 'L'): -2, ('V', 'K'): -3,
-('K', 'Q'): 1, ('R', 'A'): -2, ('I', 'R'): -4, ('T', 'D'): -2,
-('P', 'F'): -4, ('I', 'N'): -4, ('K', 'I'): -3, ('M', 'D'): -4,
-('V', 'W'): -3, ('W', 'W'): 11, ('M', 'H'): -3, ('P', 'N'): -3,
-('K', 'A'): -1, ('M', 'L'): 2, ('K', 'E'): 0, ('Z', 'E'): 4,
-('X', 'N'): -2, ('Z', 'A'): -1, ('Z', 'M'): -2, ('X', 'F'): -2,
-('K', 'C'): -4, ('B', 'Q'): -1, ('X', 'B'): -2, ('B', 'M'): -4,
-('F', 'C'): -3, ('Z', 'Q'): 4, ('X', 'Z'): -1, ('F', 'G'): -4,
-('B', 'E'): 0, ('X', 'V'): -1, ('F', 'K'): -4, ('B', 'A'): -2,
-('X', 'R'): -2, ('D', 'D'): 7, ('W', 'G'): -4, ('Z', 'F'): -4,
-('S', 'Q'): -1, ('W', 'C'): -4, ('W', 'K'): -5, ('H', 'Q'): 1,
-('L', 'C'): -2, ('W', 'N'): -5, ('S', 'A'): 1, ('L', 'G'): -5,
-('W', 'S'): -4, ('S', 'E'): -1, ('H', 'E'): -1, ('S', 'I'): -3,
-('H', 'A'): -2, ('S', 'M'): -2, ('Y', 'L'): -2, ('Y', 'H'): 2,
-('Y', 'D'): -4, ('E', 'R'): -1, ('X', 'P'): -2, ('G', 'G'): 6,
-('G', 'C'): -4, ('E', 'N'): -1, ('Y', 'T'): -2, ('Y', 'P'): -4,
-('T', 'K'): -1, ('A', 'A'): 5, ('P', 'Q'): -2, ('T', 'C'): -2,
-('V', 'H'): -4, ('T', 'G'): -2, ('I', 'Q'): -4, ('Z', 'T'): -1,
-('C', 'R'): -4, ('V', 'P'): -3, ('P', 'E'): -2, ('M', 'C'): -2,
-('K', 'N'): 0, ('I', 'I'): 5, ('P', 'A'): -1, ('M', 'G'): -4,
-('T', 'S'): 1, ('I', 'E'): -4, ('P', 'M'): -3, ('M', 'K'): -2,
-('I', 'A'): -2, ('P', 'I'): -4, ('R', 'R'): 6, ('X', 'M'): -1,
-('L', 'I'): 1, ('X', 'I'): -2, ('Z', 'B'): 0, ('X', 'E'): -1,
-('Z', 'N'): -1, ('X', 'A'): -1, ('B', 'R'): -2, ('B', 'N'): 4,
-('F', 'D'): -4, ('X', 'Y'): -2, ('Z', 'R'): 0, ('F', 'H'): -2,
-('B', 'F'): -4, ('F', 'L'): 0, ('X', 'Q'): -1, ('B', 'B'): 4
-}
+        ('W', 'F'): 0, ('L', 'R'): -3, ('S', 'P'): -1, ('V', 'T'): 0,
+        ('Q', 'Q'): 6, ('N', 'A'): -2, ('Z', 'Y'): -3, ('W', 'R'): -4,
+        ('Q', 'A'): -1, ('S', 'D'): -1, ('H', 'H'): 8, ('S', 'H'): -1,
+        ('H', 'D'): -2, ('L', 'N'): -4, ('W', 'A'): -3, ('Y', 'M'): -2,
+        ('G', 'R'): -3, ('Y', 'I'): -2, ('Y', 'E'): -4, ('B', 'Y'): -4,
+        ('Y', 'A'): -3, ('V', 'D'): -4, ('B', 'S'): 0, ('Y', 'Y'): 7,
+        ('G', 'N'): -1, ('E', 'C'): -5, ('Y', 'Q'): -2, ('Z', 'Z'): 4,
+        ('V', 'A'): -1, ('C', 'C'): 9, ('M', 'R'): -2, ('V', 'E'): -3,
+        ('T', 'N'): 0, ('P', 'P'): 8, ('V', 'I'): 3, ('V', 'S'): -2,
+        ('Z', 'P'): -2, ('V', 'M'): 0, ('T', 'F'): -3, ('V', 'Q'): -3,
+        ('K', 'K'): 6, ('P', 'D'): -2, ('I', 'H'): -4, ('I', 'D'): -5,
+        ('T', 'R'): -2, ('P', 'L'): -4, ('K', 'G'): -2, ('M', 'N'): -3,
+        ('P', 'H'): -3, ('F', 'Q'): -4, ('Z', 'G'): -3, ('X', 'L'): -2,
+        ('T', 'M'): -1, ('Z', 'C'): -5, ('X', 'H'): -2, ('D', 'R'): -2,
+        ('B', 'W'): -5, ('X', 'D'): -2, ('Z', 'K'): 1, ('F', 'A'): -3,
+        ('Z', 'W'): -4, ('F', 'E'): -4, ('D', 'N'): 1, ('B', 'K'): -1,
+        ('X', 'X'): -2, ('F', 'I'): -1, ('B', 'G'): -1, ('X', 'T'): -1,
+        ('F', 'M'): -1, ('B', 'C'): -4, ('Z', 'I'): -4, ('Z', 'V'): -3,
+        ('S', 'S'): 5, ('L', 'Q'): -3, ('W', 'E'): -4, ('Q', 'R'): 1,
+        ('N', 'N'): 7, ('W', 'M'): -2, ('Q', 'C'): -4, ('W', 'I'): -3,
+        ('S', 'C'): -2, ('L', 'A'): -2, ('S', 'G'): -1, ('L', 'E'): -4,
+        ('W', 'Q'): -3, ('H', 'G'): -3, ('S', 'K'): -1, ('Q', 'N'): 0,
+        ('N', 'R'): -1, ('H', 'C'): -5, ('Y', 'N'): -3, ('G', 'Q'): -3,
+        ('Y', 'F'): 3, ('C', 'A'): -1, ('V', 'L'): 0, ('G', 'E'): -3,
+        ('G', 'A'): 0, ('K', 'R'): 2, ('E', 'D'): 1, ('Y', 'R'): -3,
+        ('M', 'Q'): 0, ('T', 'I'): -1, ('C', 'D'): -5, ('V', 'F'): -1,
+        ('T', 'A'): 0, ('T', 'P'): -2, ('B', 'P'): -3, ('T', 'E'): -1,
+        ('V', 'N'): -4, ('P', 'G'): -3, ('M', 'A'): -2, ('K', 'H'): -1,
+        ('V', 'R'): -3, ('P', 'C'): -4, ('M', 'E'): -3, ('K', 'L'): -3,
+        ('V', 'V'): 5, ('M', 'I'): 1, ('T', 'Q'): -1, ('I', 'G'): -5,
+        ('P', 'K'): -2, ('M', 'M'): 7, ('K', 'D'): -1, ('I', 'C'): -2,
+        ('Z', 'D'): 1, ('F', 'R'): -4, ('X', 'K'): -1, ('Q', 'D'): -1,
+        ('X', 'G'): -2, ('Z', 'L'): -4, ('X', 'C'): -3, ('Z', 'H'): 0,
+        ('B', 'L'): -5, ('B', 'H'): -1, ('F', 'F'): 7, ('X', 'W'): -3,
+        ('B', 'D'): 4, ('D', 'A'): -2, ('S', 'L'): -3, ('X', 'S'): -1,
+        ('F', 'N'): -4, ('S', 'R'): -1, ('W', 'D'): -6, ('V', 'Y'): -2,
+        ('W', 'L'): -3, ('H', 'R'): 0, ('W', 'H'): -3, ('H', 'N'): 0,
+        ('W', 'T'): -4, ('T', 'T'): 5, ('S', 'F'): -3, ('W', 'P'): -5,
+        ('L', 'D'): -5, ('B', 'I'): -5, ('L', 'H'): -3, ('S', 'N'): 0,
+        ('B', 'T'): -1, ('L', 'L'): 4, ('Y', 'K'): -3, ('E', 'Q'): 2,
+        ('Y', 'G'): -5, ('Z', 'S'): -1, ('Y', 'C'): -3, ('G', 'D'): -2,
+        ('B', 'V'): -4, ('E', 'A'): -1, ('Y', 'W'): 2, ('E', 'E'): 6,
+        ('Y', 'S'): -2, ('C', 'N'): -4, ('V', 'C'): -1, ('T', 'H'): -2,
+        ('P', 'R'): -2, ('V', 'G'): -4, ('T', 'L'): -2, ('V', 'K'): -3,
+        ('K', 'Q'): 1, ('R', 'A'): -2, ('I', 'R'): -4, ('T', 'D'): -2,
+        ('P', 'F'): -4, ('I', 'N'): -4, ('K', 'I'): -3, ('M', 'D'): -4,
+        ('V', 'W'): -3, ('W', 'W'): 11, ('M', 'H'): -3, ('P', 'N'): -3,
+        ('K', 'A'): -1, ('M', 'L'): 2, ('K', 'E'): 0, ('Z', 'E'): 4,
+        ('X', 'N'): -2, ('Z', 'A'): -1, ('Z', 'M'): -2, ('X', 'F'): -2,
+        ('K', 'C'): -4, ('B', 'Q'): -1, ('X', 'B'): -2, ('B', 'M'): -4,
+        ('F', 'C'): -3, ('Z', 'Q'): 4, ('X', 'Z'): -1, ('F', 'G'): -4,
+        ('B', 'E'): 0, ('X', 'V'): -1, ('F', 'K'): -4, ('B', 'A'): -2,
+        ('X', 'R'): -2, ('D', 'D'): 7, ('W', 'G'): -4, ('Z', 'F'): -4,
+        ('S', 'Q'): -1, ('W', 'C'): -4, ('W', 'K'): -5, ('H', 'Q'): 1,
+        ('L', 'C'): -2, ('W', 'N'): -5, ('S', 'A'): 1, ('L', 'G'): -5,
+        ('W', 'S'): -4, ('S', 'E'): -1, ('H', 'E'): -1, ('S', 'I'): -3,
+        ('H', 'A'): -2, ('S', 'M'): -2, ('Y', 'L'): -2, ('Y', 'H'): 2,
+        ('Y', 'D'): -4, ('E', 'R'): -1, ('X', 'P'): -2, ('G', 'G'): 6,
+        ('G', 'C'): -4, ('E', 'N'): -1, ('Y', 'T'): -2, ('Y', 'P'): -4,
+        ('T', 'K'): -1, ('A', 'A'): 5, ('P', 'Q'): -2, ('T', 'C'): -2,
+        ('V', 'H'): -4, ('T', 'G'): -2, ('I', 'Q'): -4, ('Z', 'T'): -1,
+        ('C', 'R'): -4, ('V', 'P'): -3, ('P', 'E'): -2, ('M', 'C'): -2,
+        ('K', 'N'): 0, ('I', 'I'): 5, ('P', 'A'): -1, ('M', 'G'): -4,
+        ('T', 'S'): 1, ('I', 'E'): -4, ('P', 'M'): -3, ('M', 'K'): -2,
+        ('I', 'A'): -2, ('P', 'I'): -4, ('R', 'R'): 6, ('X', 'M'): -1,
+        ('L', 'I'): 1, ('X', 'I'): -2, ('Z', 'B'): 0, ('X', 'E'): -1,
+        ('Z', 'N'): -1, ('X', 'A'): -1, ('B', 'R'): -2, ('B', 'N'): 4,
+        ('F', 'D'): -4, ('X', 'Y'): -2, ('Z', 'R'): 0, ('F', 'H'): -2,
+        ('B', 'F'): -4, ('F', 'L'): 0, ('X', 'Q'): -1, ('B', 'B'): 4
+        }
 blosum85 = _temp()
 del _temp
 
@@ -1298,76 +1298,76 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/blosum90.cmp
 def _temp():
     return {
-('W', 'F'): 0, ('L', 'R'): -3, ('S', 'P'): -2, ('V', 'T'): -1,
-('Q', 'Q'): 7, ('N', 'A'): -2, ('Z', 'Y'): -3, ('W', 'R'): -4,
-('Q', 'A'): -1, ('S', 'D'): -1, ('H', 'H'): 8, ('S', 'H'): -2,
-('H', 'D'): -2, ('L', 'N'): -4, ('W', 'A'): -4, ('Y', 'M'): -2,
-('G', 'R'): -3, ('Y', 'I'): -2, ('Y', 'E'): -4, ('B', 'Y'): -4,
-('Y', 'A'): -3, ('V', 'D'): -5, ('B', 'S'): 0, ('Y', 'Y'): 8,
-('G', 'N'): -1, ('E', 'C'): -6, ('Y', 'Q'): -3, ('Z', 'Z'): 4,
-('V', 'A'): -1, ('C', 'C'): 9, ('M', 'R'): -2, ('V', 'E'): -3,
-('T', 'N'): 0, ('P', 'P'): 8, ('V', 'I'): 3, ('V', 'S'): -2,
-('Z', 'P'): -2, ('V', 'M'): 0, ('T', 'F'): -3, ('V', 'Q'): -3,
-('K', 'K'): 6, ('P', 'D'): -3, ('I', 'H'): -4, ('I', 'D'): -5,
-('T', 'R'): -2, ('P', 'L'): -4, ('K', 'G'): -2, ('M', 'N'): -3,
-('P', 'H'): -3, ('F', 'Q'): -4, ('Z', 'G'): -3, ('X', 'L'): -2,
-('T', 'M'): -1, ('Z', 'C'): -5, ('X', 'H'): -2, ('D', 'R'): -3,
-('B', 'W'): -6, ('X', 'D'): -2, ('Z', 'K'): 1, ('F', 'A'): -3,
-('Z', 'W'): -4, ('F', 'E'): -5, ('D', 'N'): 1, ('B', 'K'): -1,
-('X', 'X'): -2, ('F', 'I'): -1, ('B', 'G'): -2, ('X', 'T'): -1,
-('F', 'M'): -1, ('B', 'C'): -4, ('Z', 'I'): -4, ('Z', 'V'): -3,
-('S', 'S'): 5, ('L', 'Q'): -3, ('W', 'E'): -5, ('Q', 'R'): 1,
-('N', 'N'): 7, ('W', 'M'): -2, ('Q', 'C'): -4, ('W', 'I'): -4,
-('S', 'C'): -2, ('L', 'A'): -2, ('S', 'G'): -1, ('L', 'E'): -4,
-('W', 'Q'): -3, ('H', 'G'): -3, ('S', 'K'): -1, ('Q', 'N'): 0,
-('N', 'R'): -1, ('H', 'C'): -5, ('Y', 'N'): -3, ('G', 'Q'): -3,
-('Y', 'F'): 3, ('C', 'A'): -1, ('V', 'L'): 0, ('G', 'E'): -3,
-('G', 'A'): 0, ('K', 'R'): 2, ('E', 'D'): 1, ('Y', 'R'): -3,
-('M', 'Q'): 0, ('T', 'I'): -1, ('C', 'D'): -5, ('V', 'F'): -2,
-('T', 'A'): 0, ('T', 'P'): -2, ('B', 'P'): -3, ('T', 'E'): -1,
-('V', 'N'): -4, ('P', 'G'): -3, ('M', 'A'): -2, ('K', 'H'): -1,
-('V', 'R'): -3, ('P', 'C'): -4, ('M', 'E'): -3, ('K', 'L'): -3,
-('V', 'V'): 5, ('M', 'I'): 1, ('T', 'Q'): -1, ('I', 'G'): -5,
-('P', 'K'): -2, ('M', 'M'): 7, ('K', 'D'): -1, ('I', 'C'): -2,
-('Z', 'D'): 0, ('F', 'R'): -4, ('X', 'K'): -1, ('Q', 'D'): -1,
-('X', 'G'): -2, ('Z', 'L'): -4, ('X', 'C'): -3, ('Z', 'H'): 0,
-('B', 'L'): -5, ('B', 'H'): -1, ('F', 'F'): 7, ('X', 'W'): -3,
-('B', 'D'): 4, ('D', 'A'): -3, ('S', 'L'): -3, ('X', 'S'): -1,
-('F', 'N'): -4, ('S', 'R'): -1, ('W', 'D'): -6, ('V', 'Y'): -3,
-('W', 'L'): -3, ('H', 'R'): 0, ('W', 'H'): -3, ('H', 'N'): 0,
-('W', 'T'): -4, ('T', 'T'): 6, ('S', 'F'): -3, ('W', 'P'): -5,
-('L', 'D'): -5, ('B', 'I'): -5, ('L', 'H'): -4, ('S', 'N'): 0,
-('B', 'T'): -1, ('L', 'L'): 5, ('Y', 'K'): -3, ('E', 'Q'): 2,
-('Y', 'G'): -5, ('Z', 'S'): -1, ('Y', 'C'): -4, ('G', 'D'): -2,
-('B', 'V'): -4, ('E', 'A'): -1, ('Y', 'W'): 2, ('E', 'E'): 6,
-('Y', 'S'): -3, ('C', 'N'): -4, ('V', 'C'): -2, ('T', 'H'): -2,
-('P', 'R'): -3, ('V', 'G'): -5, ('T', 'L'): -2, ('V', 'K'): -3,
-('K', 'Q'): 1, ('R', 'A'): -2, ('I', 'R'): -4, ('T', 'D'): -2,
-('P', 'F'): -4, ('I', 'N'): -4, ('K', 'I'): -4, ('M', 'D'): -4,
-('V', 'W'): -3, ('W', 'W'): 11, ('M', 'H'): -3, ('P', 'N'): -3,
-('K', 'A'): -1, ('M', 'L'): 2, ('K', 'E'): 0, ('Z', 'E'): 4,
-('X', 'N'): -2, ('Z', 'A'): -1, ('Z', 'M'): -2, ('X', 'F'): -2,
-('K', 'C'): -4, ('B', 'Q'): -1, ('X', 'B'): -2, ('B', 'M'): -4,
-('F', 'C'): -3, ('Z', 'Q'): 4, ('X', 'Z'): -1, ('F', 'G'): -5,
-('B', 'E'): 0, ('X', 'V'): -2, ('F', 'K'): -4, ('B', 'A'): -2,
-('X', 'R'): -2, ('D', 'D'): 7, ('W', 'G'): -4, ('Z', 'F'): -4,
-('S', 'Q'): -1, ('W', 'C'): -4, ('W', 'K'): -5, ('H', 'Q'): 1,
-('L', 'C'): -2, ('W', 'N'): -5, ('S', 'A'): 1, ('L', 'G'): -5,
-('W', 'S'): -4, ('S', 'E'): -1, ('H', 'E'): -1, ('S', 'I'): -3,
-('H', 'A'): -2, ('S', 'M'): -2, ('Y', 'L'): -2, ('Y', 'H'): 1,
-('Y', 'D'): -4, ('E', 'R'): -1, ('X', 'P'): -2, ('G', 'G'): 6,
-('G', 'C'): -4, ('E', 'N'): -1, ('Y', 'T'): -2, ('Y', 'P'): -4,
-('T', 'K'): -1, ('A', 'A'): 5, ('P', 'Q'): -2, ('T', 'C'): -2,
-('V', 'H'): -4, ('T', 'G'): -3, ('I', 'Q'): -4, ('Z', 'T'): -1,
-('C', 'R'): -5, ('V', 'P'): -3, ('P', 'E'): -2, ('M', 'C'): -2,
-('K', 'N'): 0, ('I', 'I'): 5, ('P', 'A'): -1, ('M', 'G'): -4,
-('T', 'S'): 1, ('I', 'E'): -4, ('P', 'M'): -3, ('M', 'K'): -2,
-('I', 'A'): -2, ('P', 'I'): -4, ('R', 'R'): 6, ('X', 'M'): -1,
-('L', 'I'): 1, ('X', 'I'): -2, ('Z', 'B'): 0, ('X', 'E'): -2,
-('Z', 'N'): -1, ('X', 'A'): -1, ('B', 'R'): -2, ('B', 'N'): 4,
-('F', 'D'): -5, ('X', 'Y'): -2, ('Z', 'R'): 0, ('F', 'H'): -2,
-('B', 'F'): -4, ('F', 'L'): 0, ('X', 'Q'): -1, ('B', 'B'): 4
-}
+        ('W', 'F'): 0, ('L', 'R'): -3, ('S', 'P'): -2, ('V', 'T'): -1,
+        ('Q', 'Q'): 7, ('N', 'A'): -2, ('Z', 'Y'): -3, ('W', 'R'): -4,
+        ('Q', 'A'): -1, ('S', 'D'): -1, ('H', 'H'): 8, ('S', 'H'): -2,
+        ('H', 'D'): -2, ('L', 'N'): -4, ('W', 'A'): -4, ('Y', 'M'): -2,
+        ('G', 'R'): -3, ('Y', 'I'): -2, ('Y', 'E'): -4, ('B', 'Y'): -4,
+        ('Y', 'A'): -3, ('V', 'D'): -5, ('B', 'S'): 0, ('Y', 'Y'): 8,
+        ('G', 'N'): -1, ('E', 'C'): -6, ('Y', 'Q'): -3, ('Z', 'Z'): 4,
+        ('V', 'A'): -1, ('C', 'C'): 9, ('M', 'R'): -2, ('V', 'E'): -3,
+        ('T', 'N'): 0, ('P', 'P'): 8, ('V', 'I'): 3, ('V', 'S'): -2,
+        ('Z', 'P'): -2, ('V', 'M'): 0, ('T', 'F'): -3, ('V', 'Q'): -3,
+        ('K', 'K'): 6, ('P', 'D'): -3, ('I', 'H'): -4, ('I', 'D'): -5,
+        ('T', 'R'): -2, ('P', 'L'): -4, ('K', 'G'): -2, ('M', 'N'): -3,
+        ('P', 'H'): -3, ('F', 'Q'): -4, ('Z', 'G'): -3, ('X', 'L'): -2,
+        ('T', 'M'): -1, ('Z', 'C'): -5, ('X', 'H'): -2, ('D', 'R'): -3,
+        ('B', 'W'): -6, ('X', 'D'): -2, ('Z', 'K'): 1, ('F', 'A'): -3,
+        ('Z', 'W'): -4, ('F', 'E'): -5, ('D', 'N'): 1, ('B', 'K'): -1,
+        ('X', 'X'): -2, ('F', 'I'): -1, ('B', 'G'): -2, ('X', 'T'): -1,
+        ('F', 'M'): -1, ('B', 'C'): -4, ('Z', 'I'): -4, ('Z', 'V'): -3,
+        ('S', 'S'): 5, ('L', 'Q'): -3, ('W', 'E'): -5, ('Q', 'R'): 1,
+        ('N', 'N'): 7, ('W', 'M'): -2, ('Q', 'C'): -4, ('W', 'I'): -4,
+        ('S', 'C'): -2, ('L', 'A'): -2, ('S', 'G'): -1, ('L', 'E'): -4,
+        ('W', 'Q'): -3, ('H', 'G'): -3, ('S', 'K'): -1, ('Q', 'N'): 0,
+        ('N', 'R'): -1, ('H', 'C'): -5, ('Y', 'N'): -3, ('G', 'Q'): -3,
+        ('Y', 'F'): 3, ('C', 'A'): -1, ('V', 'L'): 0, ('G', 'E'): -3,
+        ('G', 'A'): 0, ('K', 'R'): 2, ('E', 'D'): 1, ('Y', 'R'): -3,
+        ('M', 'Q'): 0, ('T', 'I'): -1, ('C', 'D'): -5, ('V', 'F'): -2,
+        ('T', 'A'): 0, ('T', 'P'): -2, ('B', 'P'): -3, ('T', 'E'): -1,
+        ('V', 'N'): -4, ('P', 'G'): -3, ('M', 'A'): -2, ('K', 'H'): -1,
+        ('V', 'R'): -3, ('P', 'C'): -4, ('M', 'E'): -3, ('K', 'L'): -3,
+        ('V', 'V'): 5, ('M', 'I'): 1, ('T', 'Q'): -1, ('I', 'G'): -5,
+        ('P', 'K'): -2, ('M', 'M'): 7, ('K', 'D'): -1, ('I', 'C'): -2,
+        ('Z', 'D'): 0, ('F', 'R'): -4, ('X', 'K'): -1, ('Q', 'D'): -1,
+        ('X', 'G'): -2, ('Z', 'L'): -4, ('X', 'C'): -3, ('Z', 'H'): 0,
+        ('B', 'L'): -5, ('B', 'H'): -1, ('F', 'F'): 7, ('X', 'W'): -3,
+        ('B', 'D'): 4, ('D', 'A'): -3, ('S', 'L'): -3, ('X', 'S'): -1,
+        ('F', 'N'): -4, ('S', 'R'): -1, ('W', 'D'): -6, ('V', 'Y'): -3,
+        ('W', 'L'): -3, ('H', 'R'): 0, ('W', 'H'): -3, ('H', 'N'): 0,
+        ('W', 'T'): -4, ('T', 'T'): 6, ('S', 'F'): -3, ('W', 'P'): -5,
+        ('L', 'D'): -5, ('B', 'I'): -5, ('L', 'H'): -4, ('S', 'N'): 0,
+        ('B', 'T'): -1, ('L', 'L'): 5, ('Y', 'K'): -3, ('E', 'Q'): 2,
+        ('Y', 'G'): -5, ('Z', 'S'): -1, ('Y', 'C'): -4, ('G', 'D'): -2,
+        ('B', 'V'): -4, ('E', 'A'): -1, ('Y', 'W'): 2, ('E', 'E'): 6,
+        ('Y', 'S'): -3, ('C', 'N'): -4, ('V', 'C'): -2, ('T', 'H'): -2,
+        ('P', 'R'): -3, ('V', 'G'): -5, ('T', 'L'): -2, ('V', 'K'): -3,
+        ('K', 'Q'): 1, ('R', 'A'): -2, ('I', 'R'): -4, ('T', 'D'): -2,
+        ('P', 'F'): -4, ('I', 'N'): -4, ('K', 'I'): -4, ('M', 'D'): -4,
+        ('V', 'W'): -3, ('W', 'W'): 11, ('M', 'H'): -3, ('P', 'N'): -3,
+        ('K', 'A'): -1, ('M', 'L'): 2, ('K', 'E'): 0, ('Z', 'E'): 4,
+        ('X', 'N'): -2, ('Z', 'A'): -1, ('Z', 'M'): -2, ('X', 'F'): -2,
+        ('K', 'C'): -4, ('B', 'Q'): -1, ('X', 'B'): -2, ('B', 'M'): -4,
+        ('F', 'C'): -3, ('Z', 'Q'): 4, ('X', 'Z'): -1, ('F', 'G'): -5,
+        ('B', 'E'): 0, ('X', 'V'): -2, ('F', 'K'): -4, ('B', 'A'): -2,
+        ('X', 'R'): -2, ('D', 'D'): 7, ('W', 'G'): -4, ('Z', 'F'): -4,
+        ('S', 'Q'): -1, ('W', 'C'): -4, ('W', 'K'): -5, ('H', 'Q'): 1,
+        ('L', 'C'): -2, ('W', 'N'): -5, ('S', 'A'): 1, ('L', 'G'): -5,
+        ('W', 'S'): -4, ('S', 'E'): -1, ('H', 'E'): -1, ('S', 'I'): -3,
+        ('H', 'A'): -2, ('S', 'M'): -2, ('Y', 'L'): -2, ('Y', 'H'): 1,
+        ('Y', 'D'): -4, ('E', 'R'): -1, ('X', 'P'): -2, ('G', 'G'): 6,
+        ('G', 'C'): -4, ('E', 'N'): -1, ('Y', 'T'): -2, ('Y', 'P'): -4,
+        ('T', 'K'): -1, ('A', 'A'): 5, ('P', 'Q'): -2, ('T', 'C'): -2,
+        ('V', 'H'): -4, ('T', 'G'): -3, ('I', 'Q'): -4, ('Z', 'T'): -1,
+        ('C', 'R'): -5, ('V', 'P'): -3, ('P', 'E'): -2, ('M', 'C'): -2,
+        ('K', 'N'): 0, ('I', 'I'): 5, ('P', 'A'): -1, ('M', 'G'): -4,
+        ('T', 'S'): 1, ('I', 'E'): -4, ('P', 'M'): -3, ('M', 'K'): -2,
+        ('I', 'A'): -2, ('P', 'I'): -4, ('R', 'R'): 6, ('X', 'M'): -1,
+        ('L', 'I'): 1, ('X', 'I'): -2, ('Z', 'B'): 0, ('X', 'E'): -2,
+        ('Z', 'N'): -1, ('X', 'A'): -1, ('B', 'R'): -2, ('B', 'N'): 4,
+        ('F', 'D'): -5, ('X', 'Y'): -2, ('Z', 'R'): 0, ('F', 'H'): -2,
+        ('B', 'F'): -4, ('F', 'L'): 0, ('X', 'Q'): -1, ('B', 'B'): 4
+        }
 blosum90 = _temp()
 del _temp
 
@@ -1375,76 +1375,76 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/blosum95.cmp
 def _temp():
     return {
-('W', 'F'): 0, ('L', 'R'): -3, ('S', 'P'): -2, ('V', 'T'): -1,
-('Q', 'Q'): 7, ('N', 'A'): -2, ('Z', 'Y'): -4, ('W', 'R'): -4,
-('Q', 'A'): -1, ('S', 'D'): -1, ('H', 'H'): 9, ('S', 'H'): -2,
-('H', 'D'): -2, ('L', 'N'): -5, ('W', 'A'): -4, ('Y', 'M'): -3,
-('G', 'R'): -4, ('Y', 'I'): -2, ('Y', 'E'): -4, ('B', 'Y'): -4,
-('Y', 'A'): -3, ('V', 'D'): -5, ('B', 'S'): -1, ('Y', 'Y'): 8,
-('G', 'N'): -1, ('E', 'C'): -6, ('Y', 'Q'): -3, ('Z', 'Z'): 4,
-('V', 'A'): -1, ('C', 'C'): 9, ('M', 'R'): -2, ('V', 'E'): -3,
-('T', 'N'): -1, ('P', 'P'): 8, ('V', 'I'): 3, ('V', 'S'): -3,
-('Z', 'P'): -2, ('V', 'M'): 0, ('T', 'F'): -3, ('V', 'Q'): -3,
-('K', 'K'): 6, ('P', 'D'): -3, ('I', 'H'): -4, ('I', 'D'): -5,
-('T', 'R'): -2, ('P', 'L'): -4, ('K', 'G'): -3, ('M', 'N'): -3,
-('P', 'H'): -3, ('F', 'Q'): -4, ('Z', 'G'): -3, ('X', 'L'): -2,
-('T', 'M'): -1, ('Z', 'C'): -5, ('X', 'H'): -2, ('D', 'R'): -3,
-('B', 'W'): -6, ('X', 'D'): -2, ('Z', 'K'): 0, ('F', 'A'): -3,
-('Z', 'W'): -4, ('F', 'E'): -5, ('D', 'N'): 1, ('B', 'K'): -1,
-('X', 'X'): -2, ('F', 'I'): -1, ('B', 'G'): -2, ('X', 'T'): -1,
-('F', 'M'): -1, ('B', 'C'): -4, ('Z', 'I'): -4, ('Z', 'V'): -3,
-('S', 'S'): 5, ('L', 'Q'): -3, ('W', 'E'): -5, ('Q', 'R'): 0,
-('N', 'N'): 7, ('W', 'M'): -2, ('Q', 'C'): -4, ('W', 'I'): -4,
-('S', 'C'): -2, ('L', 'A'): -2, ('S', 'G'): -1, ('L', 'E'): -4,
-('W', 'Q'): -3, ('H', 'G'): -3, ('S', 'K'): -1, ('Q', 'N'): 0,
-('N', 'R'): -1, ('H', 'C'): -5, ('Y', 'N'): -3, ('G', 'Q'): -3,
-('Y', 'F'): 3, ('C', 'A'): -1, ('V', 'L'): 0, ('G', 'E'): -3,
-('G', 'A'): -1, ('K', 'R'): 2, ('E', 'D'): 1, ('Y', 'R'): -3,
-('M', 'Q'): -1, ('T', 'I'): -2, ('C', 'D'): -5, ('V', 'F'): -2,
-('T', 'A'): 0, ('T', 'P'): -2, ('B', 'P'): -3, ('T', 'E'): -2,
-('V', 'N'): -4, ('P', 'G'): -4, ('M', 'A'): -2, ('K', 'H'): -1,
-('V', 'R'): -4, ('P', 'C'): -5, ('M', 'E'): -3, ('K', 'L'): -3,
-('V', 'V'): 5, ('M', 'I'): 1, ('T', 'Q'): -1, ('I', 'G'): -6,
-('P', 'K'): -2, ('M', 'M'): 7, ('K', 'D'): -2, ('I', 'C'): -2,
-('Z', 'D'): 0, ('F', 'R'): -4, ('X', 'K'): -1, ('Q', 'D'): -1,
-('X', 'G'): -3, ('Z', 'L'): -4, ('X', 'C'): -3, ('Z', 'H'): 0,
-('B', 'L'): -5, ('B', 'H'): -1, ('F', 'F'): 7, ('X', 'W'): -4,
-('B', 'D'): 4, ('D', 'A'): -3, ('S', 'L'): -3, ('X', 'S'): -1,
-('F', 'N'): -4, ('S', 'R'): -2, ('W', 'D'): -6, ('V', 'Y'): -3,
-('W', 'L'): -3, ('H', 'R'): -1, ('W', 'H'): -3, ('H', 'N'): 0,
-('W', 'T'): -4, ('T', 'T'): 6, ('S', 'F'): -3, ('W', 'P'): -5,
-('L', 'D'): -5, ('B', 'I'): -5, ('L', 'H'): -4, ('S', 'N'): 0,
-('B', 'T'): -1, ('L', 'L'): 5, ('Y', 'K'): -3, ('E', 'Q'): 2,
-('Y', 'G'): -5, ('Z', 'S'): -1, ('Y', 'C'): -4, ('G', 'D'): -2,
-('B', 'V'): -5, ('E', 'A'): -1, ('Y', 'W'): 2, ('E', 'E'): 6,
-('Y', 'S'): -3, ('C', 'N'): -4, ('V', 'C'): -2, ('T', 'H'): -2,
-('P', 'R'): -3, ('V', 'G'): -5, ('T', 'L'): -2, ('V', 'K'): -3,
-('K', 'Q'): 1, ('R', 'A'): -2, ('I', 'R'): -4, ('T', 'D'): -2,
-('P', 'F'): -5, ('I', 'N'): -4, ('K', 'I'): -4, ('M', 'D'): -5,
-('V', 'W'): -3, ('W', 'W'): 11, ('M', 'H'): -3, ('P', 'N'): -3,
-('K', 'A'): -1, ('M', 'L'): 2, ('K', 'E'): 0, ('Z', 'E'): 4,
-('X', 'N'): -2, ('Z', 'A'): -1, ('Z', 'M'): -2, ('X', 'F'): -2,
-('K', 'C'): -5, ('B', 'Q'): -1, ('X', 'B'): -2, ('B', 'M'): -4,
-('F', 'C'): -3, ('Z', 'Q'): 4, ('X', 'Z'): -1, ('F', 'G'): -5,
-('B', 'E'): 0, ('X', 'V'): -2, ('F', 'K'): -4, ('B', 'A'): -3,
-('X', 'R'): -2, ('D', 'D'): 7, ('W', 'G'): -5, ('Z', 'F'): -4,
-('S', 'Q'): -1, ('W', 'C'): -4, ('W', 'K'): -5, ('H', 'Q'): 1,
-('L', 'C'): -3, ('W', 'N'): -5, ('S', 'A'): 1, ('L', 'G'): -5,
-('W', 'S'): -4, ('S', 'E'): -1, ('H', 'E'): -1, ('S', 'I'): -3,
-('H', 'A'): -3, ('S', 'M'): -3, ('Y', 'L'): -2, ('Y', 'H'): 1,
-('Y', 'D'): -5, ('E', 'R'): -1, ('X', 'P'): -3, ('G', 'G'): 6,
-('G', 'C'): -5, ('E', 'N'): -1, ('Y', 'T'): -3, ('Y', 'P'): -5,
-('T', 'K'): -1, ('A', 'A'): 5, ('P', 'Q'): -2, ('T', 'C'): -2,
-('V', 'H'): -4, ('T', 'G'): -3, ('I', 'Q'): -4, ('Z', 'T'): -2,
-('C', 'R'): -5, ('V', 'P'): -4, ('P', 'E'): -2, ('M', 'C'): -3,
-('K', 'N'): 0, ('I', 'I'): 5, ('P', 'A'): -1, ('M', 'G'): -4,
-('T', 'S'): 1, ('I', 'E'): -4, ('P', 'M'): -3, ('M', 'K'): -2,
-('I', 'A'): -2, ('P', 'I'): -4, ('R', 'R'): 7, ('X', 'M'): -2,
-('L', 'I'): 1, ('X', 'I'): -2, ('Z', 'B'): 0, ('X', 'E'): -2,
-('Z', 'N'): -1, ('X', 'A'): -1, ('B', 'R'): -2, ('B', 'N'): 4,
-('F', 'D'): -5, ('X', 'Y'): -2, ('Z', 'R'): -1, ('F', 'H'): -2,
-('B', 'F'): -5, ('F', 'L'): 0, ('X', 'Q'): -1, ('B', 'B'): 4
-}
+        ('W', 'F'): 0, ('L', 'R'): -3, ('S', 'P'): -2, ('V', 'T'): -1,
+        ('Q', 'Q'): 7, ('N', 'A'): -2, ('Z', 'Y'): -4, ('W', 'R'): -4,
+        ('Q', 'A'): -1, ('S', 'D'): -1, ('H', 'H'): 9, ('S', 'H'): -2,
+        ('H', 'D'): -2, ('L', 'N'): -5, ('W', 'A'): -4, ('Y', 'M'): -3,
+        ('G', 'R'): -4, ('Y', 'I'): -2, ('Y', 'E'): -4, ('B', 'Y'): -4,
+        ('Y', 'A'): -3, ('V', 'D'): -5, ('B', 'S'): -1, ('Y', 'Y'): 8,
+        ('G', 'N'): -1, ('E', 'C'): -6, ('Y', 'Q'): -3, ('Z', 'Z'): 4,
+        ('V', 'A'): -1, ('C', 'C'): 9, ('M', 'R'): -2, ('V', 'E'): -3,
+        ('T', 'N'): -1, ('P', 'P'): 8, ('V', 'I'): 3, ('V', 'S'): -3,
+        ('Z', 'P'): -2, ('V', 'M'): 0, ('T', 'F'): -3, ('V', 'Q'): -3,
+        ('K', 'K'): 6, ('P', 'D'): -3, ('I', 'H'): -4, ('I', 'D'): -5,
+        ('T', 'R'): -2, ('P', 'L'): -4, ('K', 'G'): -3, ('M', 'N'): -3,
+        ('P', 'H'): -3, ('F', 'Q'): -4, ('Z', 'G'): -3, ('X', 'L'): -2,
+        ('T', 'M'): -1, ('Z', 'C'): -5, ('X', 'H'): -2, ('D', 'R'): -3,
+        ('B', 'W'): -6, ('X', 'D'): -2, ('Z', 'K'): 0, ('F', 'A'): -3,
+        ('Z', 'W'): -4, ('F', 'E'): -5, ('D', 'N'): 1, ('B', 'K'): -1,
+        ('X', 'X'): -2, ('F', 'I'): -1, ('B', 'G'): -2, ('X', 'T'): -1,
+        ('F', 'M'): -1, ('B', 'C'): -4, ('Z', 'I'): -4, ('Z', 'V'): -3,
+        ('S', 'S'): 5, ('L', 'Q'): -3, ('W', 'E'): -5, ('Q', 'R'): 0,
+        ('N', 'N'): 7, ('W', 'M'): -2, ('Q', 'C'): -4, ('W', 'I'): -4,
+        ('S', 'C'): -2, ('L', 'A'): -2, ('S', 'G'): -1, ('L', 'E'): -4,
+        ('W', 'Q'): -3, ('H', 'G'): -3, ('S', 'K'): -1, ('Q', 'N'): 0,
+        ('N', 'R'): -1, ('H', 'C'): -5, ('Y', 'N'): -3, ('G', 'Q'): -3,
+        ('Y', 'F'): 3, ('C', 'A'): -1, ('V', 'L'): 0, ('G', 'E'): -3,
+        ('G', 'A'): -1, ('K', 'R'): 2, ('E', 'D'): 1, ('Y', 'R'): -3,
+        ('M', 'Q'): -1, ('T', 'I'): -2, ('C', 'D'): -5, ('V', 'F'): -2,
+        ('T', 'A'): 0, ('T', 'P'): -2, ('B', 'P'): -3, ('T', 'E'): -2,
+        ('V', 'N'): -4, ('P', 'G'): -4, ('M', 'A'): -2, ('K', 'H'): -1,
+        ('V', 'R'): -4, ('P', 'C'): -5, ('M', 'E'): -3, ('K', 'L'): -3,
+        ('V', 'V'): 5, ('M', 'I'): 1, ('T', 'Q'): -1, ('I', 'G'): -6,
+        ('P', 'K'): -2, ('M', 'M'): 7, ('K', 'D'): -2, ('I', 'C'): -2,
+        ('Z', 'D'): 0, ('F', 'R'): -4, ('X', 'K'): -1, ('Q', 'D'): -1,
+        ('X', 'G'): -3, ('Z', 'L'): -4, ('X', 'C'): -3, ('Z', 'H'): 0,
+        ('B', 'L'): -5, ('B', 'H'): -1, ('F', 'F'): 7, ('X', 'W'): -4,
+        ('B', 'D'): 4, ('D', 'A'): -3, ('S', 'L'): -3, ('X', 'S'): -1,
+        ('F', 'N'): -4, ('S', 'R'): -2, ('W', 'D'): -6, ('V', 'Y'): -3,
+        ('W', 'L'): -3, ('H', 'R'): -1, ('W', 'H'): -3, ('H', 'N'): 0,
+        ('W', 'T'): -4, ('T', 'T'): 6, ('S', 'F'): -3, ('W', 'P'): -5,
+        ('L', 'D'): -5, ('B', 'I'): -5, ('L', 'H'): -4, ('S', 'N'): 0,
+        ('B', 'T'): -1, ('L', 'L'): 5, ('Y', 'K'): -3, ('E', 'Q'): 2,
+        ('Y', 'G'): -5, ('Z', 'S'): -1, ('Y', 'C'): -4, ('G', 'D'): -2,
+        ('B', 'V'): -5, ('E', 'A'): -1, ('Y', 'W'): 2, ('E', 'E'): 6,
+        ('Y', 'S'): -3, ('C', 'N'): -4, ('V', 'C'): -2, ('T', 'H'): -2,
+        ('P', 'R'): -3, ('V', 'G'): -5, ('T', 'L'): -2, ('V', 'K'): -3,
+        ('K', 'Q'): 1, ('R', 'A'): -2, ('I', 'R'): -4, ('T', 'D'): -2,
+        ('P', 'F'): -5, ('I', 'N'): -4, ('K', 'I'): -4, ('M', 'D'): -5,
+        ('V', 'W'): -3, ('W', 'W'): 11, ('M', 'H'): -3, ('P', 'N'): -3,
+        ('K', 'A'): -1, ('M', 'L'): 2, ('K', 'E'): 0, ('Z', 'E'): 4,
+        ('X', 'N'): -2, ('Z', 'A'): -1, ('Z', 'M'): -2, ('X', 'F'): -2,
+        ('K', 'C'): -5, ('B', 'Q'): -1, ('X', 'B'): -2, ('B', 'M'): -4,
+        ('F', 'C'): -3, ('Z', 'Q'): 4, ('X', 'Z'): -1, ('F', 'G'): -5,
+        ('B', 'E'): 0, ('X', 'V'): -2, ('F', 'K'): -4, ('B', 'A'): -3,
+        ('X', 'R'): -2, ('D', 'D'): 7, ('W', 'G'): -5, ('Z', 'F'): -4,
+        ('S', 'Q'): -1, ('W', 'C'): -4, ('W', 'K'): -5, ('H', 'Q'): 1,
+        ('L', 'C'): -3, ('W', 'N'): -5, ('S', 'A'): 1, ('L', 'G'): -5,
+        ('W', 'S'): -4, ('S', 'E'): -1, ('H', 'E'): -1, ('S', 'I'): -3,
+        ('H', 'A'): -3, ('S', 'M'): -3, ('Y', 'L'): -2, ('Y', 'H'): 1,
+        ('Y', 'D'): -5, ('E', 'R'): -1, ('X', 'P'): -3, ('G', 'G'): 6,
+        ('G', 'C'): -5, ('E', 'N'): -1, ('Y', 'T'): -3, ('Y', 'P'): -5,
+        ('T', 'K'): -1, ('A', 'A'): 5, ('P', 'Q'): -2, ('T', 'C'): -2,
+        ('V', 'H'): -4, ('T', 'G'): -3, ('I', 'Q'): -4, ('Z', 'T'): -2,
+        ('C', 'R'): -5, ('V', 'P'): -4, ('P', 'E'): -2, ('M', 'C'): -3,
+        ('K', 'N'): 0, ('I', 'I'): 5, ('P', 'A'): -1, ('M', 'G'): -4,
+        ('T', 'S'): 1, ('I', 'E'): -4, ('P', 'M'): -3, ('M', 'K'): -2,
+        ('I', 'A'): -2, ('P', 'I'): -4, ('R', 'R'): 7, ('X', 'M'): -2,
+        ('L', 'I'): 1, ('X', 'I'): -2, ('Z', 'B'): 0, ('X', 'E'): -2,
+        ('Z', 'N'): -1, ('X', 'A'): -1, ('B', 'R'): -2, ('B', 'N'): 4,
+        ('F', 'D'): -5, ('X', 'Y'): -2, ('Z', 'R'): -1, ('F', 'H'): -2,
+        ('B', 'F'): -5, ('F', 'L'): 0, ('X', 'Q'): -1, ('B', 'B'): 4
+        }
 blosum95 = _temp()
 del _temp
 
@@ -1452,60 +1452,60 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/feng.cmp
 def _temp():
     return {
-('W', 'F'): 3, ('L', 'R'): 2, ('I', 'I'): 6, ('Q', 'Q'): 6,
-('W', 'N'): 0, ('V', 'I'): 5, ('H', 'T'): 2, ('H', 'P'): 3,
-('W', 'V'): 3, ('Q', 'E'): 4, ('W', 'R'): 2, ('Q', 'A'): 3,
-('H', 'H'): 6, ('H', 'D'): 3, ('L', 'N'): 1, ('Y', 'M'): 2,
-('Y', 'I'): 3, ('Y', 'E'): 1, ('E', 'S'): 3, ('Y', 'A'): 2,
-('Y', 'Y'): 6, ('T', 'C'): 2, ('E', 'C'): 0, ('Y', 'Q'): 2,
-('E', 'G'): 4, ('V', 'A'): 5, ('C', 'C'): 6, ('M', 'R'): 2,
-('P', 'T'): 4, ('V', 'E'): 4, ('P', 'P'): 6, ('I', 'T'): 3,
-('K', 'S'): 3, ('R', 'G'): 3, ('I', 'P'): 2, ('R', 'C'): 2,
-('A', 'T'): 5, ('K', 'K'): 6, ('A', 'P'): 5, ('V', 'M'): 4,
-('I', 'D'): 1, ('K', 'C'): 0, ('K', 'G'): 2, ('R', 'S'): 3,
-('F', 'Q'): 1, ('F', 'A'): 2, ('V', 'V'): 6, ('M', 'N'): 1,
-('F', 'E'): 0, ('D', 'N'): 5, ('F', 'I'): 4, ('F', 'M'): 2,
-('M', 'S'): 1, ('S', 'S'): 6, ('L', 'Q'): 2, ('W', 'E'): 1,
-('W', 'A'): 2, ('W', 'M'): 3, ('H', 'S'): 3, ('W', 'I'): 2,
-('S', 'C'): 4, ('L', 'A'): 2, ('L', 'E'): 1, ('W', 'Q'): 1,
-('H', 'G'): 1, ('Q', 'N'): 3, ('H', 'C'): 2, ('L', 'M'): 5,
-('W', 'Y'): 3, ('Y', 'N'): 3, ('E', 'P'): 3, ('Y', 'F'): 5,
-('E', 'T'): 3, ('A', 'A'): 6, ('I', 'N'): 2, ('G', 'A'): 5,
-('Y', 'V'): 3, ('E', 'D'): 5, ('W', 'H'): 1, ('Y', 'R'): 1,
-('M', 'Q'): 2, ('P', 'S'): 4, ('R', 'H'): 4, ('A', 'C'): 2,
-('R', 'D'): 2, ('K', 'P'): 2, ('L', 'D'): 1, ('K', 'T'): 4,
-('V', 'N'): 2, ('M', 'A'): 2, ('K', 'H'): 3, ('V', 'R'): 2,
-('P', 'C'): 2, ('M', 'E'): 1, ('A', 'S'): 5, ('T', 'T'): 6,
-('R', 'T'): 3, ('I', 'G'): 2, ('R', 'P'): 3, ('K', 'D'): 3,
-('I', 'C'): 2, ('F', 'R'): 1, ('F', 'V'): 4, ('L', 'C'): 2,
-('F', 'F'): 6, ('D', 'A'): 4, ('F', 'N'): 1, ('W', 'D'): 0,
-('L', 'P'): 3, ('Q', 'S'): 3, ('N', 'C'): 2, ('N', 'G'): 3,
-('H', 'N'): 4, ('W', 'T'): 1, ('Q', 'G'): 2, ('W', 'P'): 2,
-('Q', 'C'): 1, ('N', 'S'): 5, ('L', 'H'): 3, ('L', 'L'): 6,
-('G', 'T'): 2, ('M', 'M'): 6, ('G', 'P'): 3, ('Y', 'K'): 1,
-('Y', 'G'): 2, ('Y', 'C'): 3, ('E', 'A'): 4, ('E', 'E'): 6,
-('Y', 'S'): 3, ('M', 'P'): 2, ('V', 'C'): 2, ('M', 'T'): 3,
-('V', 'G'): 4, ('R', 'E'): 2, ('V', 'K'): 3, ('K', 'Q'): 4,
-('R', 'A'): 2, ('I', 'R'): 2, ('N', 'A'): 3, ('V', 'S'): 2,
-('M', 'D'): 0, ('M', 'H'): 1, ('K', 'A'): 3, ('R', 'Q'): 3,
-('K', 'E'): 4, ('F', 'S'): 3, ('I', 'K'): 2, ('D', 'P'): 2,
-('D', 'T'): 2, ('I', 'M'): 4, ('F', 'C'): 3, ('W', 'L'): 4,
-('F', 'G'): 1, ('F', 'K'): 0, ('F', 'T'): 1, ('D', 'D'): 6,
-('Q', 'T'): 3, ('W', 'G'): 3, ('Q', 'P'): 3, ('W', 'C'): 3,
-('W', 'K'): 1, ('H', 'Q'): 4, ('Q', 'D'): 4, ('W', 'W'): 6,
-('V', 'L'): 5, ('L', 'G'): 2, ('W', 'S'): 2, ('L', 'K'): 2,
-('N', 'P'): 2, ('H', 'E'): 2, ('N', 'T'): 4, ('H', 'A'): 2,
-('Y', 'L'): 3, ('Y', 'H'): 3, ('G', 'S'): 5, ('Y', 'D'): 2,
-('V', 'Q'): 2, ('L', 'T'): 2, ('G', 'G'): 6, ('G', 'C'): 3,
-('E', 'N'): 3, ('Y', 'T'): 2, ('Y', 'P'): 2, ('R', 'N'): 2,
-('V', 'D'): 3, ('K', 'R'): 5, ('V', 'H'): 1, ('I', 'Q'): 1,
-('V', 'P'): 3, ('M', 'C'): 2, ('K', 'N'): 4, ('V', 'T'): 3,
-('M', 'G'): 1, ('T', 'S'): 5, ('I', 'E'): 1, ('M', 'K'): 2,
-('I', 'A'): 2, ('N', 'N'): 6, ('R', 'R'): 6, ('F', 'P'): 2,
-('L', 'I'): 5, ('I', 'S'): 2, ('D', 'S'): 3, ('L', 'S'): 2,
-('I', 'H'): 1, ('F', 'D'): 1, ('D', 'C'): 1, ('F', 'H'): 2,
-('D', 'G'): 4, ('F', 'L'): 4
-}
+        ('W', 'F'): 3, ('L', 'R'): 2, ('I', 'I'): 6, ('Q', 'Q'): 6,
+        ('W', 'N'): 0, ('V', 'I'): 5, ('H', 'T'): 2, ('H', 'P'): 3,
+        ('W', 'V'): 3, ('Q', 'E'): 4, ('W', 'R'): 2, ('Q', 'A'): 3,
+        ('H', 'H'): 6, ('H', 'D'): 3, ('L', 'N'): 1, ('Y', 'M'): 2,
+        ('Y', 'I'): 3, ('Y', 'E'): 1, ('E', 'S'): 3, ('Y', 'A'): 2,
+        ('Y', 'Y'): 6, ('T', 'C'): 2, ('E', 'C'): 0, ('Y', 'Q'): 2,
+        ('E', 'G'): 4, ('V', 'A'): 5, ('C', 'C'): 6, ('M', 'R'): 2,
+        ('P', 'T'): 4, ('V', 'E'): 4, ('P', 'P'): 6, ('I', 'T'): 3,
+        ('K', 'S'): 3, ('R', 'G'): 3, ('I', 'P'): 2, ('R', 'C'): 2,
+        ('A', 'T'): 5, ('K', 'K'): 6, ('A', 'P'): 5, ('V', 'M'): 4,
+        ('I', 'D'): 1, ('K', 'C'): 0, ('K', 'G'): 2, ('R', 'S'): 3,
+        ('F', 'Q'): 1, ('F', 'A'): 2, ('V', 'V'): 6, ('M', 'N'): 1,
+        ('F', 'E'): 0, ('D', 'N'): 5, ('F', 'I'): 4, ('F', 'M'): 2,
+        ('M', 'S'): 1, ('S', 'S'): 6, ('L', 'Q'): 2, ('W', 'E'): 1,
+        ('W', 'A'): 2, ('W', 'M'): 3, ('H', 'S'): 3, ('W', 'I'): 2,
+        ('S', 'C'): 4, ('L', 'A'): 2, ('L', 'E'): 1, ('W', 'Q'): 1,
+        ('H', 'G'): 1, ('Q', 'N'): 3, ('H', 'C'): 2, ('L', 'M'): 5,
+        ('W', 'Y'): 3, ('Y', 'N'): 3, ('E', 'P'): 3, ('Y', 'F'): 5,
+        ('E', 'T'): 3, ('A', 'A'): 6, ('I', 'N'): 2, ('G', 'A'): 5,
+        ('Y', 'V'): 3, ('E', 'D'): 5, ('W', 'H'): 1, ('Y', 'R'): 1,
+        ('M', 'Q'): 2, ('P', 'S'): 4, ('R', 'H'): 4, ('A', 'C'): 2,
+        ('R', 'D'): 2, ('K', 'P'): 2, ('L', 'D'): 1, ('K', 'T'): 4,
+        ('V', 'N'): 2, ('M', 'A'): 2, ('K', 'H'): 3, ('V', 'R'): 2,
+        ('P', 'C'): 2, ('M', 'E'): 1, ('A', 'S'): 5, ('T', 'T'): 6,
+        ('R', 'T'): 3, ('I', 'G'): 2, ('R', 'P'): 3, ('K', 'D'): 3,
+        ('I', 'C'): 2, ('F', 'R'): 1, ('F', 'V'): 4, ('L', 'C'): 2,
+        ('F', 'F'): 6, ('D', 'A'): 4, ('F', 'N'): 1, ('W', 'D'): 0,
+        ('L', 'P'): 3, ('Q', 'S'): 3, ('N', 'C'): 2, ('N', 'G'): 3,
+        ('H', 'N'): 4, ('W', 'T'): 1, ('Q', 'G'): 2, ('W', 'P'): 2,
+        ('Q', 'C'): 1, ('N', 'S'): 5, ('L', 'H'): 3, ('L', 'L'): 6,
+        ('G', 'T'): 2, ('M', 'M'): 6, ('G', 'P'): 3, ('Y', 'K'): 1,
+        ('Y', 'G'): 2, ('Y', 'C'): 3, ('E', 'A'): 4, ('E', 'E'): 6,
+        ('Y', 'S'): 3, ('M', 'P'): 2, ('V', 'C'): 2, ('M', 'T'): 3,
+        ('V', 'G'): 4, ('R', 'E'): 2, ('V', 'K'): 3, ('K', 'Q'): 4,
+        ('R', 'A'): 2, ('I', 'R'): 2, ('N', 'A'): 3, ('V', 'S'): 2,
+        ('M', 'D'): 0, ('M', 'H'): 1, ('K', 'A'): 3, ('R', 'Q'): 3,
+        ('K', 'E'): 4, ('F', 'S'): 3, ('I', 'K'): 2, ('D', 'P'): 2,
+        ('D', 'T'): 2, ('I', 'M'): 4, ('F', 'C'): 3, ('W', 'L'): 4,
+        ('F', 'G'): 1, ('F', 'K'): 0, ('F', 'T'): 1, ('D', 'D'): 6,
+        ('Q', 'T'): 3, ('W', 'G'): 3, ('Q', 'P'): 3, ('W', 'C'): 3,
+        ('W', 'K'): 1, ('H', 'Q'): 4, ('Q', 'D'): 4, ('W', 'W'): 6,
+        ('V', 'L'): 5, ('L', 'G'): 2, ('W', 'S'): 2, ('L', 'K'): 2,
+        ('N', 'P'): 2, ('H', 'E'): 2, ('N', 'T'): 4, ('H', 'A'): 2,
+        ('Y', 'L'): 3, ('Y', 'H'): 3, ('G', 'S'): 5, ('Y', 'D'): 2,
+        ('V', 'Q'): 2, ('L', 'T'): 2, ('G', 'G'): 6, ('G', 'C'): 3,
+        ('E', 'N'): 3, ('Y', 'T'): 2, ('Y', 'P'): 2, ('R', 'N'): 2,
+        ('V', 'D'): 3, ('K', 'R'): 5, ('V', 'H'): 1, ('I', 'Q'): 1,
+        ('V', 'P'): 3, ('M', 'C'): 2, ('K', 'N'): 4, ('V', 'T'): 3,
+        ('M', 'G'): 1, ('T', 'S'): 5, ('I', 'E'): 1, ('M', 'K'): 2,
+        ('I', 'A'): 2, ('N', 'N'): 6, ('R', 'R'): 6, ('F', 'P'): 2,
+        ('L', 'I'): 5, ('I', 'S'): 2, ('D', 'S'): 3, ('L', 'S'): 2,
+        ('I', 'H'): 1, ('F', 'D'): 1, ('D', 'C'): 1, ('F', 'H'): 2,
+        ('D', 'G'): 4, ('F', 'L'): 4
+        }
 feng = _temp()
 del _temp
 
@@ -1513,50 +1513,50 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/fitch.cmp
 def _temp():
     return {
-('W', 'F'): 2, ('U', 'I'): 1, ('W', 'T'): 0, ('R', 'R'): 3,
-('N', 'M'): 1, ('U', 'M'): 2, ('U', 'O'): 1, ('N', 'A'): 2,
-('U', 'A'): 1, ('N', 'C'): 1, ('U', 'C'): 1, ('N', 'E'): 2,
-('U', 'E'): 1, ('W', 'H'): 1, ('W', 'R'): 1, ('W', 'V'): 2,
-('Q', 'E'): 1, ('S', 'S'): 3, ('T', 'T'): 3, ('S', 'F'): 2,
-('Q', 'A'): 1, ('Q', 'C'): 1, ('H', 'F'): 1, ('S', 'H'): 1,
-('L', 'H'): 1, ('S', 'N'): 2, ('Q', 'I'): 2, ('S', 'L'): 2,
-('L', 'L'): 3, ('Y', 'M'): 1, ('M', 'M'): 3, ('Y', 'I'): 1,
-('W', 'N'): 2, ('Y', 'R'): 2, ('Y', 'E'): 1, ('O', 'O'): 3,
-('Y', 'A'): 2, ('Y', 'C'): 2, ('U', 'S'): 2, ('Y', 'U'): 2,
-('Q', 'Q'): 3, ('E', 'A'): 1, ('N', 'L'): 1, ('E', 'C'): 1,
-('W', 'W'): 3, ('E', 'E'): 3, ('Y', 'S'): 2, ('V', 'A'): 2,
-('C', 'C'): 3, ('V', 'C'): 2, ('T', 'H'): 0, ('V', 'E'): 1,
-('T', 'N'): 0, ('O', 'I'): 1, ('R', 'E'): 2, ('O', 'E'): 1,
-('R', 'A'): 1, ('O', 'C'): 2, ('R', 'C'): 2, ('O', 'A'): 2,
-('V', 'Q'): 1, ('V', 'M'): 2, ('V', 'S'): 1, ('Q', 'O'): 2,
-('I', 'H'): 1, ('M', 'F'): 1, ('R', 'Q'): 2, ('M', 'H'): 0,
-('O', 'F'): 2, ('T', 'F'): 1, ('M', 'I'): 2, ('M', 'L'): 1,
-('V', 'T'): 1, ('Q', 'H'): 2, ('Q', 'N'): 1, ('T', 'M'): 1,
-('W', 'M'): 2, ('Y', 'Y'): 3, ('T', 'S'): 2, ('R', 'O'): 1,
-('T', 'R'): 2, ('H', 'H'): 3, ('F', 'A'): 1, ('F', 'C'): 2,
-('F', 'E'): 1, ('W', 'L'): 1, ('T', 'L'): 1, ('U', 'R'): 2,
-('U', 'H'): 2, ('N', 'H'): 2, ('U', 'Q'): 2, ('W', 'E'): 2,
-('U', 'L'): 1, ('W', 'C'): 1, ('U', 'N'): 1, ('W', 'A'): 1,
-('W', 'O'): 1, ('I', 'F'): 0, ('U', 'F'): 2, ('N', 'F'): 1,
-('L', 'C'): 1, ('S', 'C'): 2, ('L', 'A'): 2, ('S', 'A'): 1,
-('W', 'S'): 2, ('L', 'E'): 2, ('S', 'E'): 2, ('Q', 'L'): 1,
-('H', 'E'): 1, ('S', 'I'): 1, ('H', 'C'): 1, ('S', 'O'): 2,
-('H', 'A'): 2, ('S', 'M'): 1, ('Y', 'L'): 2, ('Y', 'N'): 1,
-('Y', 'H'): 1, ('O', 'M'): 0, ('Y', 'Q'): 1, ('Y', 'F'): 1,
-('W', 'I'): 1, ('C', 'A'): 1, ('R', 'I'): 2, ('Y', 'O'): 1,
-('Q', 'M'): 1, ('S', 'Q'): 2, ('U', 'T'): 2, ('Y', 'T'): 2,
-('Y', 'V'): 2, ('O', 'L'): 1, ('R', 'N'): 1, ('A', 'A'): 3,
-('N', 'I'): 2, ('R', 'L'): 1, ('T', 'I'): 1, ('L', 'F'): 1,
-('T', 'O'): 1, ('R', 'H'): 2, ('O', 'H'): 2, ('V', 'F'): 2,
-('T', 'C'): 2, ('V', 'H'): 1, ('T', 'A'): 0, ('R', 'F'): 1,
-('V', 'L'): 2, ('T', 'E'): 1, ('V', 'N'): 1, ('M', 'A'): 0,
-('Q', 'F'): 1, ('M', 'C'): 0, ('W', 'U'): 2, ('I', 'I'): 3,
-('V', 'V'): 3, ('O', 'N'): 2, ('I', 'E'): 2, ('T', 'Q'): 2,
-('I', 'A'): 1, ('N', 'N'): 3, ('I', 'C'): 0, ('S', 'R'): 2,
-('V', 'R'): 1, ('L', 'I'): 1, ('V', 'I'): 1, ('R', 'M'): 2,
-('Y', 'W'): 1, ('M', 'E'): 2, ('V', 'U'): 2, ('W', 'Q'): 0,
-('U', 'U'): 3, ('V', 'O'): 1, ('F', 'F'): 3
-}
+        ('W', 'F'): 2, ('U', 'I'): 1, ('W', 'T'): 0, ('R', 'R'): 3,
+        ('N', 'M'): 1, ('U', 'M'): 2, ('U', 'O'): 1, ('N', 'A'): 2,
+        ('U', 'A'): 1, ('N', 'C'): 1, ('U', 'C'): 1, ('N', 'E'): 2,
+        ('U', 'E'): 1, ('W', 'H'): 1, ('W', 'R'): 1, ('W', 'V'): 2,
+        ('Q', 'E'): 1, ('S', 'S'): 3, ('T', 'T'): 3, ('S', 'F'): 2,
+        ('Q', 'A'): 1, ('Q', 'C'): 1, ('H', 'F'): 1, ('S', 'H'): 1,
+        ('L', 'H'): 1, ('S', 'N'): 2, ('Q', 'I'): 2, ('S', 'L'): 2,
+        ('L', 'L'): 3, ('Y', 'M'): 1, ('M', 'M'): 3, ('Y', 'I'): 1,
+        ('W', 'N'): 2, ('Y', 'R'): 2, ('Y', 'E'): 1, ('O', 'O'): 3,
+        ('Y', 'A'): 2, ('Y', 'C'): 2, ('U', 'S'): 2, ('Y', 'U'): 2,
+        ('Q', 'Q'): 3, ('E', 'A'): 1, ('N', 'L'): 1, ('E', 'C'): 1,
+        ('W', 'W'): 3, ('E', 'E'): 3, ('Y', 'S'): 2, ('V', 'A'): 2,
+        ('C', 'C'): 3, ('V', 'C'): 2, ('T', 'H'): 0, ('V', 'E'): 1,
+        ('T', 'N'): 0, ('O', 'I'): 1, ('R', 'E'): 2, ('O', 'E'): 1,
+        ('R', 'A'): 1, ('O', 'C'): 2, ('R', 'C'): 2, ('O', 'A'): 2,
+        ('V', 'Q'): 1, ('V', 'M'): 2, ('V', 'S'): 1, ('Q', 'O'): 2,
+        ('I', 'H'): 1, ('M', 'F'): 1, ('R', 'Q'): 2, ('M', 'H'): 0,
+        ('O', 'F'): 2, ('T', 'F'): 1, ('M', 'I'): 2, ('M', 'L'): 1,
+        ('V', 'T'): 1, ('Q', 'H'): 2, ('Q', 'N'): 1, ('T', 'M'): 1,
+        ('W', 'M'): 2, ('Y', 'Y'): 3, ('T', 'S'): 2, ('R', 'O'): 1,
+        ('T', 'R'): 2, ('H', 'H'): 3, ('F', 'A'): 1, ('F', 'C'): 2,
+        ('F', 'E'): 1, ('W', 'L'): 1, ('T', 'L'): 1, ('U', 'R'): 2,
+        ('U', 'H'): 2, ('N', 'H'): 2, ('U', 'Q'): 2, ('W', 'E'): 2,
+        ('U', 'L'): 1, ('W', 'C'): 1, ('U', 'N'): 1, ('W', 'A'): 1,
+        ('W', 'O'): 1, ('I', 'F'): 0, ('U', 'F'): 2, ('N', 'F'): 1,
+        ('L', 'C'): 1, ('S', 'C'): 2, ('L', 'A'): 2, ('S', 'A'): 1,
+        ('W', 'S'): 2, ('L', 'E'): 2, ('S', 'E'): 2, ('Q', 'L'): 1,
+        ('H', 'E'): 1, ('S', 'I'): 1, ('H', 'C'): 1, ('S', 'O'): 2,
+        ('H', 'A'): 2, ('S', 'M'): 1, ('Y', 'L'): 2, ('Y', 'N'): 1,
+        ('Y', 'H'): 1, ('O', 'M'): 0, ('Y', 'Q'): 1, ('Y', 'F'): 1,
+        ('W', 'I'): 1, ('C', 'A'): 1, ('R', 'I'): 2, ('Y', 'O'): 1,
+        ('Q', 'M'): 1, ('S', 'Q'): 2, ('U', 'T'): 2, ('Y', 'T'): 2,
+        ('Y', 'V'): 2, ('O', 'L'): 1, ('R', 'N'): 1, ('A', 'A'): 3,
+        ('N', 'I'): 2, ('R', 'L'): 1, ('T', 'I'): 1, ('L', 'F'): 1,
+        ('T', 'O'): 1, ('R', 'H'): 2, ('O', 'H'): 2, ('V', 'F'): 2,
+        ('T', 'C'): 2, ('V', 'H'): 1, ('T', 'A'): 0, ('R', 'F'): 1,
+        ('V', 'L'): 2, ('T', 'E'): 1, ('V', 'N'): 1, ('M', 'A'): 0,
+        ('Q', 'F'): 1, ('M', 'C'): 0, ('W', 'U'): 2, ('I', 'I'): 3,
+        ('V', 'V'): 3, ('O', 'N'): 2, ('I', 'E'): 2, ('T', 'Q'): 2,
+        ('I', 'A'): 1, ('N', 'N'): 3, ('I', 'C'): 0, ('S', 'R'): 2,
+        ('V', 'R'): 1, ('L', 'I'): 1, ('V', 'I'): 1, ('R', 'M'): 2,
+        ('Y', 'W'): 1, ('M', 'E'): 2, ('V', 'U'): 2, ('W', 'Q'): 0,
+        ('U', 'U'): 3, ('V', 'O'): 1, ('F', 'F'): 3
+        }
 fitch = _temp()
 del _temp
 
@@ -1564,60 +1564,60 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/genetic.cmp
 def _temp():
     return {
-('W', 'F'): 0.0, ('L', 'R'): -0.4, ('I', 'I'): 4.1, ('Q', 'Q'): 5.5,
-('W', 'N'): -3.0, ('V', 'I'): 1.0, ('H', 'T'): -1.8, ('H', 'P'): 0.7,
-('W', 'V'): -2.1, ('Q', 'E'): 2.0, ('W', 'R'): 1.8, ('Q', 'A'): -2.1,
-('H', 'H'): 4.7, ('H', 'D'): 1.7, ('L', 'N'): -2.2, ('Y', 'M'): -2.9,
-('Y', 'I'): -1.6, ('Y', 'E'): -0.9, ('E', 'S'): -2.8, ('Y', 'A'): -2.4,
-('Y', 'Y'): 6.5, ('T', 'C'): -1.9, ('E', 'C'): -3.0, ('Y', 'Q'): -0.8,
-('E', 'G'): 1.4, ('V', 'A'): 1.0, ('C', 'C'): 5.5, ('M', 'R'): -0.4,
-('P', 'T'): 1.1, ('V', 'E'): 1.3, ('P', 'P'): 3.8, ('I', 'T'): 0.8,
-('K', 'S'): -1.5, ('R', 'G'): 0.8, ('I', 'P'): -1.6, ('R', 'C'): 0.7,
-('A', 'T'): 0.9, ('K', 'K'): 5.6, ('A', 'P'): 0.8, ('V', 'M'): 1.0,
-('I', 'D'): -2.1, ('K', 'C'): -3.2, ('K', 'G'): -2.2, ('R', 'S'): 0.3,
-('F', 'Q'): -2.1, ('F', 'A'): -2.4, ('V', 'V'): 4.1, ('M', 'N'): 0.1,
-('F', 'E'): -2.9, ('D', 'N'): 1.7, ('F', 'I'): 1.3, ('F', 'M'): 0.5,
-('M', 'S'): -1.3, ('S', 'S'): 2.6, ('L', 'Q'): 0.1, ('W', 'E'): -3.2,
-('W', 'A'): -2.2, ('W', 'M'): -2.0, ('H', 'S'): -1.6, ('W', 'I'): -2.2,
-('S', 'C'): 1.5, ('L', 'A'): -2.3, ('L', 'E'): -2.5, ('W', 'Q'): -2.3,
-('H', 'G'): -2.2, ('Q', 'N'): 0.4, ('H', 'C'): -1.6, ('L', 'M'): 1.5,
-('W', 'Y'): -0.5, ('Y', 'N'): 2.5, ('E', 'P'): -2.1, ('Y', 'F'): 2.0,
-('E', 'T'): -2.1, ('A', 'A'): 4.0, ('I', 'N'): 0.9, ('G', 'A'): 1.2,
-('Y', 'V'): -2.2, ('E', 'D'): 3.8, ('W', 'H'): -2.1, ('Y', 'R'): -1.9,
-('M', 'Q'): -1.2, ('P', 'S'): 0.4, ('R', 'H'): 3.6, ('A', 'C'): -1.9,
-('R', 'D'): -2.3, ('K', 'P'): -1.5, ('L', 'D'): -2.4, ('K', 'T'): 1.0,
-('V', 'N'): -2.2, ('M', 'A'): -2.0, ('K', 'H'): 0.6, ('V', 'R'): -2.1,
-('P', 'C'): -1.9, ('M', 'E'): -1.8, ('A', 'S'): 0.1, ('T', 'T'): 4.0,
-('R', 'T'): -0.6, ('I', 'G'): -2.5, ('R', 'P'): 0.3, ('K', 'D'): 0.3,
-('I', 'C'): -1.9, ('F', 'R'): -1.5, ('F', 'V'): 1.0, ('L', 'C'): -1.3,
-('F', 'F'): 4.5, ('D', 'A'): 1.0, ('F', 'N'): -1.3, ('W', 'D'): -2.9,
-('L', 'P'): 0.0, ('Q', 'S'): -2.3, ('N', 'C'): -1.5, ('N', 'G'): -2.6,
-('H', 'N'): 1.8, ('W', 'T'): -2.2, ('Q', 'G'): -2.1, ('W', 'P'): -1.6,
-('Q', 'C'): -3.1, ('N', 'S'): -0.3, ('L', 'H'): -0.1, ('L', 'L'): 3.4,
-('G', 'T'): -2.1, ('M', 'M'): 5.4, ('G', 'P'): -1.8, ('Y', 'K'): -0.8,
-('Y', 'G'): -1.8, ('Y', 'C'): 2.6, ('E', 'A'): 1.3, ('E', 'E'): 5.7,
-('Y', 'S'): 0.3, ('M', 'P'): -1.4, ('V', 'C'): -2.2, ('M', 'T'): 0.7,
-('V', 'G'): 1.1, ('R', 'E'): -2.0, ('V', 'K'): -2.1, ('K', 'Q'): 2.2,
-('R', 'A'): -1.6, ('I', 'R'): -1.2, ('N', 'A'): -1.7, ('V', 'S'): -2.2,
-('M', 'D'): -2.5, ('M', 'H'): -1.8, ('K', 'A'): -1.9, ('R', 'Q'): 0.3,
-('K', 'E'): 2.0, ('F', 'S'): 0.0, ('I', 'K'): 0.7, ('D', 'P'): -2.2,
-('D', 'T'): -2.1, ('I', 'M'): 3.3, ('F', 'C'): 1.8, ('W', 'L'): -0.3,
-('F', 'G'): -1.9, ('F', 'K'): -2.8, ('F', 'T'): -2.1, ('D', 'D'): 4.8,
-('Q', 'T'): -1.7, ('W', 'G'): 1.4, ('Q', 'P'): 1.0, ('W', 'C'): 4.1,
-('W', 'K'): -3.0, ('H', 'Q'): 3.6, ('Q', 'D'): 0.3, ('W', 'W'): 7.5,
-('V', 'L'): 1.1, ('L', 'G'): -2.2, ('W', 'S'): 0.8, ('L', 'K'): -2.0,
-('N', 'P'): -1.6, ('H', 'E'): 0.3, ('N', 'T'): 0.9, ('H', 'A'): -2.1,
-('Y', 'L'): -1.6, ('Y', 'H'): 2.3, ('G', 'S'): -0.6, ('Y', 'D'): 2.3,
-('V', 'Q'): -2.0, ('L', 'T'): -1.9, ('G', 'G'): 4.2, ('G', 'C'): 1.0,
-('E', 'N'): 0.3, ('Y', 'T'): -2.1, ('Y', 'P'): -2.3, ('R', 'N'): -1.5,
-('V', 'D'): 1.0, ('K', 'R'): -0.2, ('V', 'H'): -2.1, ('I', 'Q'): -1.9,
-('V', 'P'): -2.1, ('M', 'C'): -2.7, ('K', 'N'): 3.5, ('V', 'T'): -2.2,
-('M', 'G'): -2.3, ('T', 'S'): 1.0, ('I', 'E'): -2.3, ('M', 'K'): 1.6,
-('I', 'A'): -1.8, ('N', 'N'): 4.7, ('R', 'R'): 2.9, ('F', 'P'): -1.8,
-('L', 'I'): 1.2, ('I', 'S'): -0.5, ('D', 'S'): -2.1, ('L', 'S'): -1.2,
-('I', 'H'): -1.8, ('F', 'D'): -1.7, ('D', 'C'): -1.6, ('F', 'H'): -1.1,
-('D', 'G'): 1.1, ('F', 'L'): 2.2
-}
+        ('W', 'F'): 0.0, ('L', 'R'): -0.4, ('I', 'I'): 4.1, ('Q', 'Q'): 5.5,
+        ('W', 'N'): -3.0, ('V', 'I'): 1.0, ('H', 'T'): -1.8, ('H', 'P'): 0.7,
+        ('W', 'V'): -2.1, ('Q', 'E'): 2.0, ('W', 'R'): 1.8, ('Q', 'A'): -2.1,
+        ('H', 'H'): 4.7, ('H', 'D'): 1.7, ('L', 'N'): -2.2, ('Y', 'M'): -2.9,
+        ('Y', 'I'): -1.6, ('Y', 'E'): -0.9, ('E', 'S'): -2.8, ('Y', 'A'): -2.4,
+        ('Y', 'Y'): 6.5, ('T', 'C'): -1.9, ('E', 'C'): -3.0, ('Y', 'Q'): -0.8,
+        ('E', 'G'): 1.4, ('V', 'A'): 1.0, ('C', 'C'): 5.5, ('M', 'R'): -0.4,
+        ('P', 'T'): 1.1, ('V', 'E'): 1.3, ('P', 'P'): 3.8, ('I', 'T'): 0.8,
+        ('K', 'S'): -1.5, ('R', 'G'): 0.8, ('I', 'P'): -1.6, ('R', 'C'): 0.7,
+        ('A', 'T'): 0.9, ('K', 'K'): 5.6, ('A', 'P'): 0.8, ('V', 'M'): 1.0,
+        ('I', 'D'): -2.1, ('K', 'C'): -3.2, ('K', 'G'): -2.2, ('R', 'S'): 0.3,
+        ('F', 'Q'): -2.1, ('F', 'A'): -2.4, ('V', 'V'): 4.1, ('M', 'N'): 0.1,
+        ('F', 'E'): -2.9, ('D', 'N'): 1.7, ('F', 'I'): 1.3, ('F', 'M'): 0.5,
+        ('M', 'S'): -1.3, ('S', 'S'): 2.6, ('L', 'Q'): 0.1, ('W', 'E'): -3.2,
+        ('W', 'A'): -2.2, ('W', 'M'): -2.0, ('H', 'S'): -1.6, ('W', 'I'): -2.2,
+        ('S', 'C'): 1.5, ('L', 'A'): -2.3, ('L', 'E'): -2.5, ('W', 'Q'): -2.3,
+        ('H', 'G'): -2.2, ('Q', 'N'): 0.4, ('H', 'C'): -1.6, ('L', 'M'): 1.5,
+        ('W', 'Y'): -0.5, ('Y', 'N'): 2.5, ('E', 'P'): -2.1, ('Y', 'F'): 2.0,
+        ('E', 'T'): -2.1, ('A', 'A'): 4.0, ('I', 'N'): 0.9, ('G', 'A'): 1.2,
+        ('Y', 'V'): -2.2, ('E', 'D'): 3.8, ('W', 'H'): -2.1, ('Y', 'R'): -1.9,
+        ('M', 'Q'): -1.2, ('P', 'S'): 0.4, ('R', 'H'): 3.6, ('A', 'C'): -1.9,
+        ('R', 'D'): -2.3, ('K', 'P'): -1.5, ('L', 'D'): -2.4, ('K', 'T'): 1.0,
+        ('V', 'N'): -2.2, ('M', 'A'): -2.0, ('K', 'H'): 0.6, ('V', 'R'): -2.1,
+        ('P', 'C'): -1.9, ('M', 'E'): -1.8, ('A', 'S'): 0.1, ('T', 'T'): 4.0,
+        ('R', 'T'): -0.6, ('I', 'G'): -2.5, ('R', 'P'): 0.3, ('K', 'D'): 0.3,
+        ('I', 'C'): -1.9, ('F', 'R'): -1.5, ('F', 'V'): 1.0, ('L', 'C'): -1.3,
+        ('F', 'F'): 4.5, ('D', 'A'): 1.0, ('F', 'N'): -1.3, ('W', 'D'): -2.9,
+        ('L', 'P'): 0.0, ('Q', 'S'): -2.3, ('N', 'C'): -1.5, ('N', 'G'): -2.6,
+        ('H', 'N'): 1.8, ('W', 'T'): -2.2, ('Q', 'G'): -2.1, ('W', 'P'): -1.6,
+        ('Q', 'C'): -3.1, ('N', 'S'): -0.3, ('L', 'H'): -0.1, ('L', 'L'): 3.4,
+        ('G', 'T'): -2.1, ('M', 'M'): 5.4, ('G', 'P'): -1.8, ('Y', 'K'): -0.8,
+        ('Y', 'G'): -1.8, ('Y', 'C'): 2.6, ('E', 'A'): 1.3, ('E', 'E'): 5.7,
+        ('Y', 'S'): 0.3, ('M', 'P'): -1.4, ('V', 'C'): -2.2, ('M', 'T'): 0.7,
+        ('V', 'G'): 1.1, ('R', 'E'): -2.0, ('V', 'K'): -2.1, ('K', 'Q'): 2.2,
+        ('R', 'A'): -1.6, ('I', 'R'): -1.2, ('N', 'A'): -1.7, ('V', 'S'): -2.2,
+        ('M', 'D'): -2.5, ('M', 'H'): -1.8, ('K', 'A'): -1.9, ('R', 'Q'): 0.3,
+        ('K', 'E'): 2.0, ('F', 'S'): 0.0, ('I', 'K'): 0.7, ('D', 'P'): -2.2,
+        ('D', 'T'): -2.1, ('I', 'M'): 3.3, ('F', 'C'): 1.8, ('W', 'L'): -0.3,
+        ('F', 'G'): -1.9, ('F', 'K'): -2.8, ('F', 'T'): -2.1, ('D', 'D'): 4.8,
+        ('Q', 'T'): -1.7, ('W', 'G'): 1.4, ('Q', 'P'): 1.0, ('W', 'C'): 4.1,
+        ('W', 'K'): -3.0, ('H', 'Q'): 3.6, ('Q', 'D'): 0.3, ('W', 'W'): 7.5,
+        ('V', 'L'): 1.1, ('L', 'G'): -2.2, ('W', 'S'): 0.8, ('L', 'K'): -2.0,
+        ('N', 'P'): -1.6, ('H', 'E'): 0.3, ('N', 'T'): 0.9, ('H', 'A'): -2.1,
+        ('Y', 'L'): -1.6, ('Y', 'H'): 2.3, ('G', 'S'): -0.6, ('Y', 'D'): 2.3,
+        ('V', 'Q'): -2.0, ('L', 'T'): -1.9, ('G', 'G'): 4.2, ('G', 'C'): 1.0,
+        ('E', 'N'): 0.3, ('Y', 'T'): -2.1, ('Y', 'P'): -2.3, ('R', 'N'): -1.5,
+        ('V', 'D'): 1.0, ('K', 'R'): -0.2, ('V', 'H'): -2.1, ('I', 'Q'): -1.9,
+        ('V', 'P'): -2.1, ('M', 'C'): -2.7, ('K', 'N'): 3.5, ('V', 'T'): -2.2,
+        ('M', 'G'): -2.3, ('T', 'S'): 1.0, ('I', 'E'): -2.3, ('M', 'K'): 1.6,
+        ('I', 'A'): -1.8, ('N', 'N'): 4.7, ('R', 'R'): 2.9, ('F', 'P'): -1.8,
+        ('L', 'I'): 1.2, ('I', 'S'): -0.5, ('D', 'S'): -2.1, ('L', 'S'): -1.2,
+        ('I', 'H'): -1.8, ('F', 'D'): -1.7, ('D', 'C'): -1.6, ('F', 'H'): -1.1,
+        ('D', 'G'): 1.1, ('F', 'L'): 2.2
+        }
 genetic = _temp()
 del _temp
 
@@ -1625,60 +1625,60 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/gonnet.cmp
 def _temp():
     return {
-('W', 'F'): 3.6, ('L', 'R'): -2.2, ('I', 'I'): 4.0, ('Q', 'Q'): 2.7,
-('W', 'N'): -3.6, ('V', 'I'): 3.1, ('H', 'T'): -0.3, ('H', 'P'): -1.1,
-('W', 'V'): -2.6, ('Q', 'E'): 1.7, ('W', 'R'): -1.6, ('Q', 'A'): -0.2,
-('H', 'H'): 6.0, ('H', 'D'): 0.4, ('L', 'N'): -3.0, ('Y', 'M'): -0.2,
-('Y', 'I'): -0.7, ('Y', 'E'): -2.7, ('E', 'S'): 0.2, ('Y', 'A'): -2.2,
-('Y', 'Y'): 7.8, ('T', 'C'): -0.5, ('E', 'C'): -3.0, ('Y', 'Q'): -1.7,
-('E', 'G'): -0.8, ('V', 'A'): 0.1, ('C', 'C'): 11.5, ('M', 'R'): -1.7,
-('P', 'T'): 0.1, ('V', 'E'): -1.9, ('P', 'P'): 7.6, ('I', 'T'): -0.6,
-('K', 'S'): 0.1, ('R', 'G'): -1.0, ('I', 'P'): -2.6, ('R', 'C'): -2.2,
-('A', 'T'): 0.6, ('K', 'K'): 3.2, ('A', 'P'): 0.3, ('V', 'M'): 1.6,
-('I', 'D'): -3.8, ('K', 'C'): -2.8, ('K', 'G'): -1.1, ('R', 'S'): -0.2,
-('F', 'Q'): -2.6, ('F', 'A'): -2.3, ('V', 'V'): 3.4, ('M', 'N'): -2.2,
-('F', 'E'): -3.9, ('D', 'N'): 2.2, ('F', 'I'): 1.0, ('F', 'M'): 1.6,
-('M', 'S'): -1.4, ('S', 'S'): 2.2, ('L', 'Q'): -1.6, ('W', 'E'): -4.3,
-('W', 'A'): -3.6, ('W', 'M'): -1.0, ('H', 'S'): -0.2, ('W', 'I'): -1.8,
-('S', 'C'): 0.1, ('L', 'A'): -1.2, ('L', 'E'): -2.8, ('W', 'Q'): -2.7,
-('H', 'G'): -1.4, ('Q', 'N'): 0.7, ('H', 'C'): -1.3, ('L', 'M'): 2.8,
-('W', 'Y'): 4.1, ('Y', 'N'): -1.4, ('E', 'P'): -0.5, ('Y', 'F'): 5.1,
-('E', 'T'): -0.1, ('A', 'A'): 2.4, ('I', 'N'): -2.8, ('G', 'A'): 0.5,
-('Y', 'V'): -1.1, ('E', 'D'): 2.7, ('W', 'H'): -0.8, ('Y', 'R'): -1.8,
-('M', 'Q'): -1.0, ('P', 'S'): 0.4, ('R', 'H'): 0.6, ('A', 'C'): 0.5,
-('R', 'D'): -0.3, ('K', 'P'): -0.6, ('L', 'D'): -4.0, ('K', 'T'): 0.1,
-('V', 'N'): -2.2, ('M', 'A'): -0.7, ('K', 'H'): 0.6, ('V', 'R'): -2.0,
-('P', 'C'): -3.1, ('M', 'E'): -2.0, ('A', 'S'): 1.1, ('T', 'T'): 2.5,
-('R', 'T'): -0.2, ('I', 'G'): -4.5, ('R', 'P'): -0.9, ('K', 'D'): 0.5,
-('I', 'C'): -1.1, ('F', 'R'): -3.2, ('F', 'V'): 0.1, ('L', 'C'): -1.5,
-('F', 'F'): 7.0, ('D', 'A'): -0.3, ('F', 'N'): -3.1, ('W', 'D'): -5.2,
-('L', 'P'): -2.3, ('Q', 'S'): 0.2, ('N', 'C'): -1.8, ('N', 'G'): 0.4,
-('H', 'N'): 1.2, ('W', 'T'): -3.5, ('Q', 'G'): -1.0, ('W', 'P'): -5.0,
-('Q', 'C'): -2.4, ('N', 'S'): 0.9, ('L', 'H'): -1.9, ('L', 'L'): 4.0,
-('G', 'T'): -1.1, ('M', 'M'): 4.3, ('G', 'P'): -1.6, ('Y', 'K'): -2.1,
-('Y', 'G'): -4.0, ('Y', 'C'): -0.5, ('E', 'A'): 0.0, ('E', 'E'): 3.6,
-('Y', 'S'): -1.9, ('M', 'P'): -2.4, ('V', 'C'): 0.0, ('M', 'T'): -0.6,
-('V', 'G'): -3.3, ('R', 'E'): 0.4, ('V', 'K'): -1.7, ('K', 'Q'): 1.5,
-('R', 'A'): -0.6, ('I', 'R'): -2.4, ('N', 'A'): -0.3, ('V', 'S'): -1.0,
-('M', 'D'): -3.0, ('M', 'H'): -1.3, ('K', 'A'): -0.4, ('R', 'Q'): 1.5,
-('K', 'E'): 1.2, ('F', 'S'): -2.8, ('I', 'K'): -2.1, ('D', 'P'): -0.7,
-('D', 'T'): 0.0, ('I', 'M'): 2.5, ('F', 'C'): -0.8, ('W', 'L'): -0.7,
-('F', 'G'): -5.2, ('F', 'K'): -3.3, ('F', 'T'): -2.2, ('D', 'D'): 4.7,
-('Q', 'T'): 0.0, ('W', 'G'): -4.0, ('Q', 'P'): -0.2, ('W', 'C'): -1.0,
-('W', 'K'): -3.5, ('H', 'Q'): 1.2, ('Q', 'D'): 0.9, ('W', 'W'): 14.2,
-('V', 'L'): 1.8, ('L', 'G'): -4.4, ('W', 'S'): -3.3, ('L', 'K'): -2.1,
-('N', 'P'): -0.9, ('H', 'E'): 0.4, ('N', 'T'): 0.5, ('H', 'A'): -0.8,
-('Y', 'L'): 0.0, ('Y', 'H'): 2.2, ('G', 'S'): 0.4, ('Y', 'D'): -2.8,
-('V', 'Q'): -1.5, ('L', 'T'): -1.3, ('G', 'G'): 6.6, ('G', 'C'): -2.0,
-('E', 'N'): 0.9, ('Y', 'T'): -1.9, ('Y', 'P'): -3.1, ('R', 'N'): 0.3,
-('V', 'D'): -2.9, ('K', 'R'): 2.7, ('V', 'H'): -2.0, ('I', 'Q'): -1.9,
-('V', 'P'): -1.8, ('M', 'C'): -0.9, ('K', 'N'): 0.8, ('V', 'T'): 0.0,
-('M', 'G'): -3.5, ('T', 'S'): 1.5, ('I', 'E'): -2.7, ('M', 'K'): -1.4,
-('I', 'A'): -0.8, ('N', 'N'): 3.8, ('R', 'R'): 4.7, ('F', 'P'): -3.8,
-('L', 'I'): 2.8, ('I', 'S'): -1.8, ('D', 'S'): 0.5, ('L', 'S'): -2.1,
-('I', 'H'): -2.2, ('F', 'D'): -4.5, ('D', 'C'): -3.2, ('F', 'H'): -0.1,
-('D', 'G'): 0.1, ('F', 'L'): 2.0
-}
+        ('W', 'F'): 3.6, ('L', 'R'): -2.2, ('I', 'I'): 4.0, ('Q', 'Q'): 2.7,
+        ('W', 'N'): -3.6, ('V', 'I'): 3.1, ('H', 'T'): -0.3, ('H', 'P'): -1.1,
+        ('W', 'V'): -2.6, ('Q', 'E'): 1.7, ('W', 'R'): -1.6, ('Q', 'A'): -0.2,
+        ('H', 'H'): 6.0, ('H', 'D'): 0.4, ('L', 'N'): -3.0, ('Y', 'M'): -0.2,
+        ('Y', 'I'): -0.7, ('Y', 'E'): -2.7, ('E', 'S'): 0.2, ('Y', 'A'): -2.2,
+        ('Y', 'Y'): 7.8, ('T', 'C'): -0.5, ('E', 'C'): -3.0, ('Y', 'Q'): -1.7,
+        ('E', 'G'): -0.8, ('V', 'A'): 0.1, ('C', 'C'): 11.5, ('M', 'R'): -1.7,
+        ('P', 'T'): 0.1, ('V', 'E'): -1.9, ('P', 'P'): 7.6, ('I', 'T'): -0.6,
+        ('K', 'S'): 0.1, ('R', 'G'): -1.0, ('I', 'P'): -2.6, ('R', 'C'): -2.2,
+        ('A', 'T'): 0.6, ('K', 'K'): 3.2, ('A', 'P'): 0.3, ('V', 'M'): 1.6,
+        ('I', 'D'): -3.8, ('K', 'C'): -2.8, ('K', 'G'): -1.1, ('R', 'S'): -0.2,
+        ('F', 'Q'): -2.6, ('F', 'A'): -2.3, ('V', 'V'): 3.4, ('M', 'N'): -2.2,
+        ('F', 'E'): -3.9, ('D', 'N'): 2.2, ('F', 'I'): 1.0, ('F', 'M'): 1.6,
+        ('M', 'S'): -1.4, ('S', 'S'): 2.2, ('L', 'Q'): -1.6, ('W', 'E'): -4.3,
+        ('W', 'A'): -3.6, ('W', 'M'): -1.0, ('H', 'S'): -0.2, ('W', 'I'): -1.8,
+        ('S', 'C'): 0.1, ('L', 'A'): -1.2, ('L', 'E'): -2.8, ('W', 'Q'): -2.7,
+        ('H', 'G'): -1.4, ('Q', 'N'): 0.7, ('H', 'C'): -1.3, ('L', 'M'): 2.8,
+        ('W', 'Y'): 4.1, ('Y', 'N'): -1.4, ('E', 'P'): -0.5, ('Y', 'F'): 5.1,
+        ('E', 'T'): -0.1, ('A', 'A'): 2.4, ('I', 'N'): -2.8, ('G', 'A'): 0.5,
+        ('Y', 'V'): -1.1, ('E', 'D'): 2.7, ('W', 'H'): -0.8, ('Y', 'R'): -1.8,
+        ('M', 'Q'): -1.0, ('P', 'S'): 0.4, ('R', 'H'): 0.6, ('A', 'C'): 0.5,
+        ('R', 'D'): -0.3, ('K', 'P'): -0.6, ('L', 'D'): -4.0, ('K', 'T'): 0.1,
+        ('V', 'N'): -2.2, ('M', 'A'): -0.7, ('K', 'H'): 0.6, ('V', 'R'): -2.0,
+        ('P', 'C'): -3.1, ('M', 'E'): -2.0, ('A', 'S'): 1.1, ('T', 'T'): 2.5,
+        ('R', 'T'): -0.2, ('I', 'G'): -4.5, ('R', 'P'): -0.9, ('K', 'D'): 0.5,
+        ('I', 'C'): -1.1, ('F', 'R'): -3.2, ('F', 'V'): 0.1, ('L', 'C'): -1.5,
+        ('F', 'F'): 7.0, ('D', 'A'): -0.3, ('F', 'N'): -3.1, ('W', 'D'): -5.2,
+        ('L', 'P'): -2.3, ('Q', 'S'): 0.2, ('N', 'C'): -1.8, ('N', 'G'): 0.4,
+        ('H', 'N'): 1.2, ('W', 'T'): -3.5, ('Q', 'G'): -1.0, ('W', 'P'): -5.0,
+        ('Q', 'C'): -2.4, ('N', 'S'): 0.9, ('L', 'H'): -1.9, ('L', 'L'): 4.0,
+        ('G', 'T'): -1.1, ('M', 'M'): 4.3, ('G', 'P'): -1.6, ('Y', 'K'): -2.1,
+        ('Y', 'G'): -4.0, ('Y', 'C'): -0.5, ('E', 'A'): 0.0, ('E', 'E'): 3.6,
+        ('Y', 'S'): -1.9, ('M', 'P'): -2.4, ('V', 'C'): 0.0, ('M', 'T'): -0.6,
+        ('V', 'G'): -3.3, ('R', 'E'): 0.4, ('V', 'K'): -1.7, ('K', 'Q'): 1.5,
+        ('R', 'A'): -0.6, ('I', 'R'): -2.4, ('N', 'A'): -0.3, ('V', 'S'): -1.0,
+        ('M', 'D'): -3.0, ('M', 'H'): -1.3, ('K', 'A'): -0.4, ('R', 'Q'): 1.5,
+        ('K', 'E'): 1.2, ('F', 'S'): -2.8, ('I', 'K'): -2.1, ('D', 'P'): -0.7,
+        ('D', 'T'): 0.0, ('I', 'M'): 2.5, ('F', 'C'): -0.8, ('W', 'L'): -0.7,
+        ('F', 'G'): -5.2, ('F', 'K'): -3.3, ('F', 'T'): -2.2, ('D', 'D'): 4.7,
+        ('Q', 'T'): 0.0, ('W', 'G'): -4.0, ('Q', 'P'): -0.2, ('W', 'C'): -1.0,
+        ('W', 'K'): -3.5, ('H', 'Q'): 1.2, ('Q', 'D'): 0.9, ('W', 'W'): 14.2,
+        ('V', 'L'): 1.8, ('L', 'G'): -4.4, ('W', 'S'): -3.3, ('L', 'K'): -2.1,
+        ('N', 'P'): -0.9, ('H', 'E'): 0.4, ('N', 'T'): 0.5, ('H', 'A'): -0.8,
+        ('Y', 'L'): 0.0, ('Y', 'H'): 2.2, ('G', 'S'): 0.4, ('Y', 'D'): -2.8,
+        ('V', 'Q'): -1.5, ('L', 'T'): -1.3, ('G', 'G'): 6.6, ('G', 'C'): -2.0,
+        ('E', 'N'): 0.9, ('Y', 'T'): -1.9, ('Y', 'P'): -3.1, ('R', 'N'): 0.3,
+        ('V', 'D'): -2.9, ('K', 'R'): 2.7, ('V', 'H'): -2.0, ('I', 'Q'): -1.9,
+        ('V', 'P'): -1.8, ('M', 'C'): -0.9, ('K', 'N'): 0.8, ('V', 'T'): 0.0,
+        ('M', 'G'): -3.5, ('T', 'S'): 1.5, ('I', 'E'): -2.7, ('M', 'K'): -1.4,
+        ('I', 'A'): -0.8, ('N', 'N'): 3.8, ('R', 'R'): 4.7, ('F', 'P'): -3.8,
+        ('L', 'I'): 2.8, ('I', 'S'): -1.8, ('D', 'S'): 0.5, ('L', 'S'): -2.1,
+        ('I', 'H'): -2.2, ('F', 'D'): -4.5, ('D', 'C'): -3.2, ('F', 'H'): -0.1,
+        ('D', 'G'): 0.1, ('F', 'L'): 2.0
+        }
 gonnet = _temp()
 del _temp
 
@@ -1686,60 +1686,60 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/grant.cmp
 def _temp():
     return {
-('L', 'R'): 103, ('I', 'I'): 215, ('Q', 'Q'): 215, ('N', 'E'): 150,
-('Q', 'Y'): 128, ('H', 'P'): 138, ('W', 'V'): 186, ('Q', 'E'): 173,
-('H', 'L'): 129, ('W', 'R'): 118, ('H', 'H'): 215, ('N', 'Q'): 169,
-('U', 'S'): 70, ('N', 'U'): 62, ('G', 'V'): 94, ('G', 'R'): 161,
-('I', 'N'): 121, ('Y', 'E'): 156, ('E', 'S'): 157, ('G', 'F'): 75,
-('Y', 'Y'): 215, ('R', 'R'): 215, ('Y', 'U'): 77, ('C', 'C'): 215,
-('M', 'R'): 124, ('V', 'E'): 146, ('T', 'N'): 41, ('M', 'V'): 194,
-('P', 'P'): 215, ('A', 'L'): 89, ('V', 'S'): 91, ('O', 'E'): 123,
-('I', 'P'): 112, ('T', 'F'): 175, ('I', 'L'): 109, ('C', 'S'): 103,
-('A', 'P'): 107, ('C', 'W'): 17, ('M', 'F'): 187, ('O', 'Y'): 68,
-('T', 'R'): 114, ('O', 'U'): 179, ('V', 'R'): 119, ('U', 'R'): 113,
-('R', 'S'): 105, ('F', 'U'): 193, ('F', 'Y'): 62, ('M', 'N'): 73,
-('F', 'E'): 112, ('G', 'N'): 173, ('P', 'U'): 117, ('S', 'S'): 215,
-('Q', 'V'): 119, ('W', 'E'): 126, ('Q', 'R'): 172, ('N', 'N'): 215,
-('H', 'W'): 121, ('Q', 'H'): 191, ('H', 'S'): 126, ('N', 'F'): 57,
-('H', 'O'): 132, ('Q', 'F'): 99, ('W', 'U'): 210, ('L', 'E'): 157,
-('C', 'P'): 46, ('N', 'R'): 129, ('H', 'C'): 41, ('N', 'V'): 82,
-('G', 'U'): 77, ('A', 'S'): 150, ('Q', 'W'): 106, ('G', 'Q'): 186,
-('E', 'P'): 177, ('A', 'N'): 192, ('G', 'Y'): 117, ('A', 'A'): 215,
-('G', 'E'): 150, ('G', 'A'): 170, ('Y', 'V'): 106, ('Y', 'R'): 90,
-('G', 'I'): 159, ('C', 'F'): 10, ('M', 'Q'): 114, ('T', 'I'): 105,
-('P', 'S'): 141, ('M', 'U'): 200, ('T', 'M'): 148, ('A', 'C'): 61,
-('O', 'F'): 193, ('M', 'Y'): 88, ('T', 'A'): 34, ('A', 'O'): 55,
-('C', 'L'): 20, ('I', 'S'): 94, ('C', 'O'): 21, ('T', 'Y'): 31,
-('I', 'O'): 130, ('M', 'E'): 134, ('V', 'V'): 215, ('O', 'V'): 160,
-('M', 'I'): 120, ('T', 'Q'): 85, ('O', 'R'): 138, ('M', 'M'): 215,
-('T', 'U'): 154, ('I', 'C'): 13, ('F', 'R'): 118, ('A', 'W'): 47,
-('F', 'V'): 165, ('I', 'H'): 183, ('C', 'E'): 66, ('F', 'F'): 215,
-('M', 'A'): 55, ('Q', 'U'): 102, ('L', 'P'): 188, ('N', 'O'): 72,
-('Q', 'S'): 147, ('H', 'V'): 131, ('W', 'L'): 121, ('H', 'R'): 186,
-('W', 'P'): 120, ('Q', 'C'): 61, ('H', 'F'): 115, ('N', 'S'): 169,
-('Q', 'O'): 116, ('U', 'U'): 215, ('N', 'W'): 66, ('L', 'L'): 215,
-('G', 'P'): 122, ('A', 'U'): 43, ('E', 'U'): 123, ('T', 'P'): 68,
-('I', 'Q'): 162, ('G', 'L'): 108, ('E', 'E'): 215, ('G', 'H'): 175,
-('Y', 'S'): 159, ('M', 'P'): 128, ('O', 'O'): 215, ('A', 'F'): 38,
-('T', 'H'): 100, ('P', 'R'): 112, ('T', 'L'): 67, ('I', 'V'): 118,
-('I', 'R'): 189, ('A', 'V'): 63, ('A', 'R'): 119, ('C', 'U'): 17,
-('M', 'H'): 128, ('O', 'W'): 182, ('I', 'F'): 113, ('C', 'Y'): 56,
-('M', 'L'): 131, ('O', 'S'): 71, ('T', 'T'): 215, ('F', 'S'): 60,
-('F', 'W'): 194, ('L', 'S'): 116, ('N', 'H'): 147, ('A', 'H'): 134,
-('Q', 'P'): 139, ('N', 'L'): 104, ('H', 'Y'): 117, ('H', 'U'): 116,
-('A', 'I'): 114, ('W', 'W'): 215, ('W', 'S'): 73, ('Q', 'L'): 124,
-('N', 'P'): 124, ('H', 'E'): 168, ('L', 'U'): 119, ('I', 'W'): 113,
-('Y', 'L'): 155, ('G', 'W'): 81, ('G', 'S'): 135, ('E', 'R'): 144,
-('W', 'Y'): 80, ('G', 'G'): 215, ('T', 'V'): 127, ('G', 'C'): 45,
-('G', 'O'): 93, ('Y', 'P'): 173, ('A', 'E'): 130, ('O', 'L'): 103,
-('M', 'S'): 80, ('T', 'O'): 178, ('I', 'Y'): 88, ('M', 'W'): 205,
-('T', 'C'): 0, ('I', 'U'): 108, ('T', 'G'): 63, ('V', 'L'): 151,
-('C', 'R'): 35, ('V', 'P'): 147, ('M', 'C'): 19, ('C', 'V'): 23,
-('A', 'Q'): 154, ('M', 'G'): 89, ('T', 'S'): 38, ('I', 'E'): 137,
-('T', 'W'): 154, ('A', 'Y'): 121, ('O', 'P'): 105, ('M', 'O'): 179,
-('F', 'P'): 101, ('N', 'Y'): 135, ('T', 'E'): 87, ('V', 'U'): 183,
-('N', 'C'): 76, ('F', 'L'): 102
-}
+        ('L', 'R'): 103, ('I', 'I'): 215, ('Q', 'Q'): 215, ('N', 'E'): 150,
+        ('Q', 'Y'): 128, ('H', 'P'): 138, ('W', 'V'): 186, ('Q', 'E'): 173,
+        ('H', 'L'): 129, ('W', 'R'): 118, ('H', 'H'): 215, ('N', 'Q'): 169,
+        ('U', 'S'): 70, ('N', 'U'): 62, ('G', 'V'): 94, ('G', 'R'): 161,
+        ('I', 'N'): 121, ('Y', 'E'): 156, ('E', 'S'): 157, ('G', 'F'): 75,
+        ('Y', 'Y'): 215, ('R', 'R'): 215, ('Y', 'U'): 77, ('C', 'C'): 215,
+        ('M', 'R'): 124, ('V', 'E'): 146, ('T', 'N'): 41, ('M', 'V'): 194,
+        ('P', 'P'): 215, ('A', 'L'): 89, ('V', 'S'): 91, ('O', 'E'): 123,
+        ('I', 'P'): 112, ('T', 'F'): 175, ('I', 'L'): 109, ('C', 'S'): 103,
+        ('A', 'P'): 107, ('C', 'W'): 17, ('M', 'F'): 187, ('O', 'Y'): 68,
+        ('T', 'R'): 114, ('O', 'U'): 179, ('V', 'R'): 119, ('U', 'R'): 113,
+        ('R', 'S'): 105, ('F', 'U'): 193, ('F', 'Y'): 62, ('M', 'N'): 73,
+        ('F', 'E'): 112, ('G', 'N'): 173, ('P', 'U'): 117, ('S', 'S'): 215,
+        ('Q', 'V'): 119, ('W', 'E'): 126, ('Q', 'R'): 172, ('N', 'N'): 215,
+        ('H', 'W'): 121, ('Q', 'H'): 191, ('H', 'S'): 126, ('N', 'F'): 57,
+        ('H', 'O'): 132, ('Q', 'F'): 99, ('W', 'U'): 210, ('L', 'E'): 157,
+        ('C', 'P'): 46, ('N', 'R'): 129, ('H', 'C'): 41, ('N', 'V'): 82,
+        ('G', 'U'): 77, ('A', 'S'): 150, ('Q', 'W'): 106, ('G', 'Q'): 186,
+        ('E', 'P'): 177, ('A', 'N'): 192, ('G', 'Y'): 117, ('A', 'A'): 215,
+        ('G', 'E'): 150, ('G', 'A'): 170, ('Y', 'V'): 106, ('Y', 'R'): 90,
+        ('G', 'I'): 159, ('C', 'F'): 10, ('M', 'Q'): 114, ('T', 'I'): 105,
+        ('P', 'S'): 141, ('M', 'U'): 200, ('T', 'M'): 148, ('A', 'C'): 61,
+        ('O', 'F'): 193, ('M', 'Y'): 88, ('T', 'A'): 34, ('A', 'O'): 55,
+        ('C', 'L'): 20, ('I', 'S'): 94, ('C', 'O'): 21, ('T', 'Y'): 31,
+        ('I', 'O'): 130, ('M', 'E'): 134, ('V', 'V'): 215, ('O', 'V'): 160,
+        ('M', 'I'): 120, ('T', 'Q'): 85, ('O', 'R'): 138, ('M', 'M'): 215,
+        ('T', 'U'): 154, ('I', 'C'): 13, ('F', 'R'): 118, ('A', 'W'): 47,
+        ('F', 'V'): 165, ('I', 'H'): 183, ('C', 'E'): 66, ('F', 'F'): 215,
+        ('M', 'A'): 55, ('Q', 'U'): 102, ('L', 'P'): 188, ('N', 'O'): 72,
+        ('Q', 'S'): 147, ('H', 'V'): 131, ('W', 'L'): 121, ('H', 'R'): 186,
+        ('W', 'P'): 120, ('Q', 'C'): 61, ('H', 'F'): 115, ('N', 'S'): 169,
+        ('Q', 'O'): 116, ('U', 'U'): 215, ('N', 'W'): 66, ('L', 'L'): 215,
+        ('G', 'P'): 122, ('A', 'U'): 43, ('E', 'U'): 123, ('T', 'P'): 68,
+        ('I', 'Q'): 162, ('G', 'L'): 108, ('E', 'E'): 215, ('G', 'H'): 175,
+        ('Y', 'S'): 159, ('M', 'P'): 128, ('O', 'O'): 215, ('A', 'F'): 38,
+        ('T', 'H'): 100, ('P', 'R'): 112, ('T', 'L'): 67, ('I', 'V'): 118,
+        ('I', 'R'): 189, ('A', 'V'): 63, ('A', 'R'): 119, ('C', 'U'): 17,
+        ('M', 'H'): 128, ('O', 'W'): 182, ('I', 'F'): 113, ('C', 'Y'): 56,
+        ('M', 'L'): 131, ('O', 'S'): 71, ('T', 'T'): 215, ('F', 'S'): 60,
+        ('F', 'W'): 194, ('L', 'S'): 116, ('N', 'H'): 147, ('A', 'H'): 134,
+        ('Q', 'P'): 139, ('N', 'L'): 104, ('H', 'Y'): 117, ('H', 'U'): 116,
+        ('A', 'I'): 114, ('W', 'W'): 215, ('W', 'S'): 73, ('Q', 'L'): 124,
+        ('N', 'P'): 124, ('H', 'E'): 168, ('L', 'U'): 119, ('I', 'W'): 113,
+        ('Y', 'L'): 155, ('G', 'W'): 81, ('G', 'S'): 135, ('E', 'R'): 144,
+        ('W', 'Y'): 80, ('G', 'G'): 215, ('T', 'V'): 127, ('G', 'C'): 45,
+        ('G', 'O'): 93, ('Y', 'P'): 173, ('A', 'E'): 130, ('O', 'L'): 103,
+        ('M', 'S'): 80, ('T', 'O'): 178, ('I', 'Y'): 88, ('M', 'W'): 205,
+        ('T', 'C'): 0, ('I', 'U'): 108, ('T', 'G'): 63, ('V', 'L'): 151,
+        ('C', 'R'): 35, ('V', 'P'): 147, ('M', 'C'): 19, ('C', 'V'): 23,
+        ('A', 'Q'): 154, ('M', 'G'): 89, ('T', 'S'): 38, ('I', 'E'): 137,
+        ('T', 'W'): 154, ('A', 'Y'): 121, ('O', 'P'): 105, ('M', 'O'): 179,
+        ('F', 'P'): 101, ('N', 'Y'): 135, ('T', 'E'): 87, ('V', 'U'): 183,
+        ('N', 'C'): 76, ('F', 'L'): 102
+        }
 grant = _temp()
 del _temp
 
@@ -1747,60 +1747,60 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/ident.cmp
 def _temp():
     return {
-('W', 'F'): -1, ('L', 'R'): -1, ('I', 'I'): 6, ('Q', 'Q'): 6,
-('W', 'N'): -1, ('V', 'I'): -1, ('H', 'T'): -1, ('H', 'P'): -1,
-('W', 'V'): -1, ('Q', 'E'): -1, ('W', 'R'): -1, ('Q', 'A'): -1,
-('H', 'H'): 6, ('H', 'D'): -1, ('L', 'N'): -1, ('Y', 'M'): -1,
-('Y', 'I'): -1, ('Y', 'E'): -1, ('E', 'S'): -1, ('Y', 'A'): -1,
-('Y', 'Y'): 6, ('T', 'C'): -1, ('E', 'C'): -1, ('Y', 'Q'): -1,
-('E', 'G'): -1, ('V', 'A'): -1, ('C', 'C'): 6, ('M', 'R'): -1,
-('P', 'T'): -1, ('V', 'E'): -1, ('P', 'P'): 6, ('I', 'T'): -1,
-('K', 'S'): -1, ('R', 'G'): -1, ('I', 'P'): -1, ('R', 'C'): -1,
-('A', 'T'): -1, ('K', 'K'): 6, ('A', 'P'): -1, ('V', 'M'): -1,
-('I', 'D'): -1, ('K', 'C'): -1, ('K', 'G'): -1, ('R', 'S'): -1,
-('F', 'Q'): -1, ('F', 'A'): -1, ('V', 'V'): 6, ('M', 'N'): -1,
-('F', 'E'): -1, ('D', 'N'): -1, ('F', 'I'): -1, ('F', 'M'): -1,
-('M', 'S'): -1, ('S', 'S'): 6, ('L', 'Q'): -1, ('W', 'E'): -1,
-('W', 'A'): -1, ('W', 'M'): -1, ('H', 'S'): -1, ('W', 'I'): -1,
-('S', 'C'): -1, ('L', 'A'): -1, ('L', 'E'): -1, ('W', 'Q'): -1,
-('H', 'G'): -1, ('Q', 'N'): -1, ('H', 'C'): -1, ('L', 'M'): -1,
-('W', 'Y'): -1, ('Y', 'N'): -1, ('E', 'P'): -1, ('Y', 'F'): -1,
-('E', 'T'): -1, ('A', 'A'): 6, ('I', 'N'): -1, ('G', 'A'): -1,
-('Y', 'V'): -1, ('E', 'D'): -1, ('W', 'H'): -1, ('Y', 'R'): -1,
-('M', 'Q'): -1, ('P', 'S'): -1, ('R', 'H'): -1, ('A', 'C'): -1,
-('R', 'D'): -1, ('K', 'P'): -1, ('L', 'D'): -1, ('K', 'T'): -1,
-('V', 'N'): -1, ('M', 'A'): -1, ('K', 'H'): -1, ('V', 'R'): -1,
-('P', 'C'): -1, ('M', 'E'): -1, ('A', 'S'): -1, ('T', 'T'): 6,
-('R', 'T'): -1, ('I', 'G'): -1, ('R', 'P'): -1, ('K', 'D'): -1,
-('I', 'C'): -1, ('F', 'R'): -1, ('F', 'V'): -1, ('L', 'C'): -1,
-('F', 'F'): 6, ('D', 'A'): -1, ('F', 'N'): -1, ('W', 'D'): -1,
-('L', 'P'): -1, ('Q', 'S'): -1, ('N', 'C'): -1, ('N', 'G'): -1,
-('H', 'N'): -1, ('W', 'T'): -1, ('Q', 'G'): -1, ('W', 'P'): -1,
-('Q', 'C'): -1, ('N', 'S'): -1, ('L', 'H'): -1, ('L', 'L'): 6,
-('G', 'T'): -1, ('M', 'M'): 6, ('G', 'P'): -1, ('Y', 'K'): -1,
-('Y', 'G'): -1, ('Y', 'C'): -1, ('E', 'A'): -1, ('E', 'E'): 6,
-('Y', 'S'): -1, ('M', 'P'): -1, ('V', 'C'): -1, ('M', 'T'): -1,
-('V', 'G'): -1, ('R', 'E'): -1, ('V', 'K'): -1, ('K', 'Q'): -1,
-('R', 'A'): -1, ('I', 'R'): -1, ('N', 'A'): -1, ('V', 'S'): -1,
-('M', 'D'): -1, ('M', 'H'): -1, ('K', 'A'): -1, ('R', 'Q'): -1,
-('K', 'E'): -1, ('F', 'S'): -1, ('I', 'K'): -1, ('D', 'P'): -1,
-('D', 'T'): -1, ('I', 'M'): -1, ('F', 'C'): -1, ('W', 'L'): -1,
-('F', 'G'): -1, ('F', 'K'): -1, ('F', 'T'): -1, ('D', 'D'): 6,
-('Q', 'T'): -1, ('W', 'G'): -1, ('Q', 'P'): -1, ('W', 'C'): -1,
-('W', 'K'): -1, ('H', 'Q'): -1, ('Q', 'D'): -1, ('W', 'W'): 6,
-('V', 'L'): -1, ('L', 'G'): -1, ('W', 'S'): -1, ('L', 'K'): -1,
-('N', 'P'): -1, ('H', 'E'): -1, ('N', 'T'): -1, ('H', 'A'): -1,
-('Y', 'L'): -1, ('Y', 'H'): -1, ('G', 'S'): -1, ('Y', 'D'): -1,
-('V', 'Q'): -1, ('L', 'T'): -1, ('G', 'G'): 6, ('G', 'C'): -1,
-('E', 'N'): -1, ('Y', 'T'): -1, ('Y', 'P'): -1, ('R', 'N'): -1,
-('V', 'D'): -1, ('K', 'R'): -1, ('V', 'H'): -1, ('I', 'Q'): -1,
-('V', 'P'): -1, ('M', 'C'): -1, ('K', 'N'): -1, ('V', 'T'): -1,
-('M', 'G'): -1, ('T', 'S'): -1, ('I', 'E'): -1, ('M', 'K'): -1,
-('I', 'A'): -1, ('N', 'N'): 6, ('R', 'R'): 6, ('F', 'P'): -1,
-('L', 'I'): -1, ('I', 'S'): -1, ('D', 'S'): -1, ('L', 'S'): -1,
-('I', 'H'): -1, ('F', 'D'): -1, ('D', 'C'): -1, ('F', 'H'): -1,
-('D', 'G'): -1, ('F', 'L'): -1
-}
+        ('W', 'F'): -1, ('L', 'R'): -1, ('I', 'I'): 6, ('Q', 'Q'): 6,
+        ('W', 'N'): -1, ('V', 'I'): -1, ('H', 'T'): -1, ('H', 'P'): -1,
+        ('W', 'V'): -1, ('Q', 'E'): -1, ('W', 'R'): -1, ('Q', 'A'): -1,
+        ('H', 'H'): 6, ('H', 'D'): -1, ('L', 'N'): -1, ('Y', 'M'): -1,
+        ('Y', 'I'): -1, ('Y', 'E'): -1, ('E', 'S'): -1, ('Y', 'A'): -1,
+        ('Y', 'Y'): 6, ('T', 'C'): -1, ('E', 'C'): -1, ('Y', 'Q'): -1,
+        ('E', 'G'): -1, ('V', 'A'): -1, ('C', 'C'): 6, ('M', 'R'): -1,
+        ('P', 'T'): -1, ('V', 'E'): -1, ('P', 'P'): 6, ('I', 'T'): -1,
+        ('K', 'S'): -1, ('R', 'G'): -1, ('I', 'P'): -1, ('R', 'C'): -1,
+        ('A', 'T'): -1, ('K', 'K'): 6, ('A', 'P'): -1, ('V', 'M'): -1,
+        ('I', 'D'): -1, ('K', 'C'): -1, ('K', 'G'): -1, ('R', 'S'): -1,
+        ('F', 'Q'): -1, ('F', 'A'): -1, ('V', 'V'): 6, ('M', 'N'): -1,
+        ('F', 'E'): -1, ('D', 'N'): -1, ('F', 'I'): -1, ('F', 'M'): -1,
+        ('M', 'S'): -1, ('S', 'S'): 6, ('L', 'Q'): -1, ('W', 'E'): -1,
+        ('W', 'A'): -1, ('W', 'M'): -1, ('H', 'S'): -1, ('W', 'I'): -1,
+        ('S', 'C'): -1, ('L', 'A'): -1, ('L', 'E'): -1, ('W', 'Q'): -1,
+        ('H', 'G'): -1, ('Q', 'N'): -1, ('H', 'C'): -1, ('L', 'M'): -1,
+        ('W', 'Y'): -1, ('Y', 'N'): -1, ('E', 'P'): -1, ('Y', 'F'): -1,
+        ('E', 'T'): -1, ('A', 'A'): 6, ('I', 'N'): -1, ('G', 'A'): -1,
+        ('Y', 'V'): -1, ('E', 'D'): -1, ('W', 'H'): -1, ('Y', 'R'): -1,
+        ('M', 'Q'): -1, ('P', 'S'): -1, ('R', 'H'): -1, ('A', 'C'): -1,
+        ('R', 'D'): -1, ('K', 'P'): -1, ('L', 'D'): -1, ('K', 'T'): -1,
+        ('V', 'N'): -1, ('M', 'A'): -1, ('K', 'H'): -1, ('V', 'R'): -1,
+        ('P', 'C'): -1, ('M', 'E'): -1, ('A', 'S'): -1, ('T', 'T'): 6,
+        ('R', 'T'): -1, ('I', 'G'): -1, ('R', 'P'): -1, ('K', 'D'): -1,
+        ('I', 'C'): -1, ('F', 'R'): -1, ('F', 'V'): -1, ('L', 'C'): -1,
+        ('F', 'F'): 6, ('D', 'A'): -1, ('F', 'N'): -1, ('W', 'D'): -1,
+        ('L', 'P'): -1, ('Q', 'S'): -1, ('N', 'C'): -1, ('N', 'G'): -1,
+        ('H', 'N'): -1, ('W', 'T'): -1, ('Q', 'G'): -1, ('W', 'P'): -1,
+        ('Q', 'C'): -1, ('N', 'S'): -1, ('L', 'H'): -1, ('L', 'L'): 6,
+        ('G', 'T'): -1, ('M', 'M'): 6, ('G', 'P'): -1, ('Y', 'K'): -1,
+        ('Y', 'G'): -1, ('Y', 'C'): -1, ('E', 'A'): -1, ('E', 'E'): 6,
+        ('Y', 'S'): -1, ('M', 'P'): -1, ('V', 'C'): -1, ('M', 'T'): -1,
+        ('V', 'G'): -1, ('R', 'E'): -1, ('V', 'K'): -1, ('K', 'Q'): -1,
+        ('R', 'A'): -1, ('I', 'R'): -1, ('N', 'A'): -1, ('V', 'S'): -1,
+        ('M', 'D'): -1, ('M', 'H'): -1, ('K', 'A'): -1, ('R', 'Q'): -1,
+        ('K', 'E'): -1, ('F', 'S'): -1, ('I', 'K'): -1, ('D', 'P'): -1,
+        ('D', 'T'): -1, ('I', 'M'): -1, ('F', 'C'): -1, ('W', 'L'): -1,
+        ('F', 'G'): -1, ('F', 'K'): -1, ('F', 'T'): -1, ('D', 'D'): 6,
+        ('Q', 'T'): -1, ('W', 'G'): -1, ('Q', 'P'): -1, ('W', 'C'): -1,
+        ('W', 'K'): -1, ('H', 'Q'): -1, ('Q', 'D'): -1, ('W', 'W'): 6,
+        ('V', 'L'): -1, ('L', 'G'): -1, ('W', 'S'): -1, ('L', 'K'): -1,
+        ('N', 'P'): -1, ('H', 'E'): -1, ('N', 'T'): -1, ('H', 'A'): -1,
+        ('Y', 'L'): -1, ('Y', 'H'): -1, ('G', 'S'): -1, ('Y', 'D'): -1,
+        ('V', 'Q'): -1, ('L', 'T'): -1, ('G', 'G'): 6, ('G', 'C'): -1,
+        ('E', 'N'): -1, ('Y', 'T'): -1, ('Y', 'P'): -1, ('R', 'N'): -1,
+        ('V', 'D'): -1, ('K', 'R'): -1, ('V', 'H'): -1, ('I', 'Q'): -1,
+        ('V', 'P'): -1, ('M', 'C'): -1, ('K', 'N'): -1, ('V', 'T'): -1,
+        ('M', 'G'): -1, ('T', 'S'): -1, ('I', 'E'): -1, ('M', 'K'): -1,
+        ('I', 'A'): -1, ('N', 'N'): 6, ('R', 'R'): 6, ('F', 'P'): -1,
+        ('L', 'I'): -1, ('I', 'S'): -1, ('D', 'S'): -1, ('L', 'S'): -1,
+        ('I', 'H'): -1, ('F', 'D'): -1, ('D', 'C'): -1, ('F', 'H'): -1,
+        ('D', 'G'): -1, ('F', 'L'): -1
+        }
 ident = _temp()
 del _temp
 
@@ -1808,60 +1808,60 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/johnson.cmp
 def _temp():
     return {
-('W', 'F'): 3.4, ('S', 'P'): -1.0, ('N', 'M'): -3.7, ('Q', 'Q'): 9.0,
-('N', 'A'): -1.4, ('N', 'E'): -0.7, ('W', 'V'): -4.9, ('Q', 'E'): 2.4,
-('L', 'H'): -4.2, ('W', 'R'): -3.8, ('Q', 'A'): -0.6, ('S', 'D'): -0.2,
-('H', 'H'): 12.7, ('Q', 'M'): -0.6, ('S', 'H'): -2.6, ('H', 'D'): -0.7,
-('Q', 'I'): -7.0, ('S', 'L'): -5.2, ('Y', 'M'): -1.3, ('Y', 'I'): -2.5,
-('Y', 'E'): -3.7, ('Y', 'A'): -4.0, ('G', 'F'): -8.6, ('V', 'T'): -1.9,
-('Y', 'Y'): 10.5, ('V', 'H'): -3.9, ('E', 'C'): -6.9, ('Y', 'Q'): -5.1,
-('V', 'A'): -0.5, ('C', 'C'): 16.1, ('V', 'E'): -4.2, ('T', 'N'): 0.1,
-('R', 'K'): 3.2, ('P', 'P'): 10.3, ('V', 'I'): 3.9, ('R', 'G'): -2.8,
-('V', 'M'): 0.7, ('T', 'F'): -5.0, ('R', 'C'): -5.6, ('V', 'Q'): -3.6,
-('K', 'K'): 7.6, ('P', 'D'): -1.0, ('I', 'H'): -5.1, ('M', 'F'): -0.6,
-('I', 'D'): -4.8, ('K', 'C'): -8.7, ('P', 'L'): -2.8, ('K', 'G'): -3.5,
-('P', 'H'): -4.3, ('T', 'R'): -1.4, ('F', 'A'): -3.2, ('F', 'E'): -6.4,
-('S', 'S'): 5.8, ('W', 'E'): -7.6, ('N', 'N'): 8.0, ('W', 'M'): -0.9,
-('Q', 'C'): -6.9, ('N', 'F'): -3.8, ('S', 'C'): -7.7, ('L', 'A'): -3.3,
-('S', 'G'): -1.3, ('L', 'E'): -5.6, ('W', 'Q'): -8.2, ('H', 'G'): -3.2,
-('S', 'K'): -1.5, ('Q', 'N'): -0.8, ('V', 'D'): -5.2, ('H', 'C'): -8.2,
-('Y', 'N'): -1.3, ('Y', 'F'): 3.4, ('W', 'I'): -3.3, ('C', 'A'): -3.4,
-('G', 'E'): -2.5, ('G', 'A'): -0.5, ('Y', 'V'): -1.8, ('E', 'D'): 2.4,
-('W', 'H'): -4.0, ('Y', 'R'): -2.1, ('N', 'I'): -4.7, ('R', 'L'): -3.7,
-('T', 'I'): -3.2, ('Q', 'L'): -4.4, ('R', 'H'): 0.1, ('T', 'M'): -3.2,
-('V', 'F'): -1.3, ('R', 'D'): -3.4, ('T', 'A'): -0.8, ('T', 'P'): -2.0,
-('T', 'E'): -0.5, ('V', 'N'): -5.7, ('P', 'G'): -2.5, ('M', 'A'): -1.5,
-('K', 'H'): 0.1, ('V', 'R'): -4.9, ('P', 'C'): -8.9, ('M', 'E'): -2.8,
-('V', 'V'): 7.0, ('T', 'T'): 6.8, ('M', 'I'): 2.6, ('T', 'Q'): -0.4,
-('I', 'G'): -5.5, ('P', 'K'): -0.6, ('M', 'M'): 11.2, ('K', 'D'): -1.5,
-('I', 'C'): -7.7, ('L', 'C'): -8.7, ('F', 'F'): 10.4, ('D', 'A'): -1.6,
-('S', 'R'): -0.6, ('W', 'D'): -6.0, ('N', 'C'): -7.6, ('N', 'G'): -1.4,
-('W', 'T'): -9.3, ('Q', 'G'): -2.8, ('S', 'F'): -4.8, ('W', 'P'): -7.4,
-('L', 'D'): -8.0, ('H', 'F'): -1.7, ('Q', 'K'): 1.1, ('S', 'N'): 1.0,
-('L', 'L'): 7.3, ('Q', 'F'): -6.4, ('Y', 'K'): -3.7, ('Y', 'G'): -5.4,
-('Y', 'C'): -7.7, ('G', 'D'): -2.1, ('E', 'A'): -0.7, ('Y', 'W'): 2.3,
-('E', 'E'): 8.6, ('Y', 'S'): -3.4, ('R', 'M'): -4.2, ('V', 'C'): -4.8,
-('T', 'H'): -3.0, ('R', 'I'): -5.4, ('V', 'G'): -5.6, ('T', 'L'): -4.6,
-('R', 'E'): -0.2, ('V', 'K'): -3.7, ('R', 'Q'): 2.1, ('R', 'A'): -1.6,
-('T', 'D'): -1.8, ('P', 'F'): -5.0, ('V', 'S'): -4.3, ('K', 'I'): -4.7,
-('M', 'D'): -5.9, ('W', 'W'): 15.2, ('M', 'H'): -2.3, ('P', 'N'): -2.4,
-('I', 'F'): 0.5, ('K', 'A'): -0.9, ('M', 'L'): 4.4, ('K', 'E'): 1.1,
-('N', 'K'): 0.1, ('R', 'P'): -3.6, ('L', 'F'): 1.8, ('F', 'C'): -4.4,
-('W', 'G'): -6.3, ('W', 'L'): -1.0, ('D', 'D'): 8.5, ('N', 'H'): 1.7,
-('S', 'Q'): -1.2, ('Q', 'P'): -3.6, ('N', 'L'): -4.8, ('W', 'K'): -5.4,
-('Q', 'D'): -1.1, ('W', 'N'): -6.1, ('S', 'A'): 0.0, ('L', 'G'): -7.2,
-('W', 'S'): -6.2, ('S', 'E'): -2.2, ('L', 'K'): -3.4, ('H', 'E'): -2.3,
-('S', 'I'): -4.7, ('Q', 'H'): 1.4, ('H', 'A'): -3.1, ('S', 'M'): -4.8,
-('Y', 'L'): -2.4, ('Y', 'H'): -0.4, ('Y', 'D'): -3.8, ('G', 'G'): 8.0,
-('G', 'C'): -8.2, ('Y', 'T'): -2.7, ('W', 'C'): -9.1, ('Y', 'P'): -7.0,
-('T', 'K'): -0.2, ('R', 'N'): -1.5, ('A', 'A'): 6.0, ('W', 'A'): -5.8,
-('T', 'C'): -6.0, ('N', 'D'): 2.6, ('R', 'F'): -6.0, ('T', 'G'): -3.8,
-('V', 'L'): 1.8, ('V', 'P'): -5.2, ('P', 'E'): -1.5, ('M', 'C'): -4.4,
-('I', 'I'): 8.1, ('P', 'A'): -1.0, ('M', 'G'): -5.2, ('T', 'S'): 2.0,
-('I', 'E'): -4.8, ('P', 'M'): -9.8, ('M', 'K'): -1.9, ('K', 'F'): -5.6,
-('I', 'A'): -2.2, ('P', 'I'): -5.7, ('R', 'R'): 10.0, ('L', 'I'): 2.6,
-('F', 'D'): -7.0, ('D', 'C'): -9.7
-}
+        ('W', 'F'): 3.4, ('S', 'P'): -1.0, ('N', 'M'): -3.7, ('Q', 'Q'): 9.0,
+        ('N', 'A'): -1.4, ('N', 'E'): -0.7, ('W', 'V'): -4.9, ('Q', 'E'): 2.4,
+        ('L', 'H'): -4.2, ('W', 'R'): -3.8, ('Q', 'A'): -0.6, ('S', 'D'): -0.2,
+        ('H', 'H'): 12.7, ('Q', 'M'): -0.6, ('S', 'H'): -2.6, ('H', 'D'): -0.7,
+        ('Q', 'I'): -7.0, ('S', 'L'): -5.2, ('Y', 'M'): -1.3, ('Y', 'I'): -2.5,
+        ('Y', 'E'): -3.7, ('Y', 'A'): -4.0, ('G', 'F'): -8.6, ('V', 'T'): -1.9,
+        ('Y', 'Y'): 10.5, ('V', 'H'): -3.9, ('E', 'C'): -6.9, ('Y', 'Q'): -5.1,
+        ('V', 'A'): -0.5, ('C', 'C'): 16.1, ('V', 'E'): -4.2, ('T', 'N'): 0.1,
+        ('R', 'K'): 3.2, ('P', 'P'): 10.3, ('V', 'I'): 3.9, ('R', 'G'): -2.8,
+        ('V', 'M'): 0.7, ('T', 'F'): -5.0, ('R', 'C'): -5.6, ('V', 'Q'): -3.6,
+        ('K', 'K'): 7.6, ('P', 'D'): -1.0, ('I', 'H'): -5.1, ('M', 'F'): -0.6,
+        ('I', 'D'): -4.8, ('K', 'C'): -8.7, ('P', 'L'): -2.8, ('K', 'G'): -3.5,
+        ('P', 'H'): -4.3, ('T', 'R'): -1.4, ('F', 'A'): -3.2, ('F', 'E'): -6.4,
+        ('S', 'S'): 5.8, ('W', 'E'): -7.6, ('N', 'N'): 8.0, ('W', 'M'): -0.9,
+        ('Q', 'C'): -6.9, ('N', 'F'): -3.8, ('S', 'C'): -7.7, ('L', 'A'): -3.3,
+        ('S', 'G'): -1.3, ('L', 'E'): -5.6, ('W', 'Q'): -8.2, ('H', 'G'): -3.2,
+        ('S', 'K'): -1.5, ('Q', 'N'): -0.8, ('V', 'D'): -5.2, ('H', 'C'): -8.2,
+        ('Y', 'N'): -1.3, ('Y', 'F'): 3.4, ('W', 'I'): -3.3, ('C', 'A'): -3.4,
+        ('G', 'E'): -2.5, ('G', 'A'): -0.5, ('Y', 'V'): -1.8, ('E', 'D'): 2.4,
+        ('W', 'H'): -4.0, ('Y', 'R'): -2.1, ('N', 'I'): -4.7, ('R', 'L'): -3.7,
+        ('T', 'I'): -3.2, ('Q', 'L'): -4.4, ('R', 'H'): 0.1, ('T', 'M'): -3.2,
+        ('V', 'F'): -1.3, ('R', 'D'): -3.4, ('T', 'A'): -0.8, ('T', 'P'): -2.0,
+        ('T', 'E'): -0.5, ('V', 'N'): -5.7, ('P', 'G'): -2.5, ('M', 'A'): -1.5,
+        ('K', 'H'): 0.1, ('V', 'R'): -4.9, ('P', 'C'): -8.9, ('M', 'E'): -2.8,
+        ('V', 'V'): 7.0, ('T', 'T'): 6.8, ('M', 'I'): 2.6, ('T', 'Q'): -0.4,
+        ('I', 'G'): -5.5, ('P', 'K'): -0.6, ('M', 'M'): 11.2, ('K', 'D'): -1.5,
+        ('I', 'C'): -7.7, ('L', 'C'): -8.7, ('F', 'F'): 10.4, ('D', 'A'): -1.6,
+        ('S', 'R'): -0.6, ('W', 'D'): -6.0, ('N', 'C'): -7.6, ('N', 'G'): -1.4,
+        ('W', 'T'): -9.3, ('Q', 'G'): -2.8, ('S', 'F'): -4.8, ('W', 'P'): -7.4,
+        ('L', 'D'): -8.0, ('H', 'F'): -1.7, ('Q', 'K'): 1.1, ('S', 'N'): 1.0,
+        ('L', 'L'): 7.3, ('Q', 'F'): -6.4, ('Y', 'K'): -3.7, ('Y', 'G'): -5.4,
+        ('Y', 'C'): -7.7, ('G', 'D'): -2.1, ('E', 'A'): -0.7, ('Y', 'W'): 2.3,
+        ('E', 'E'): 8.6, ('Y', 'S'): -3.4, ('R', 'M'): -4.2, ('V', 'C'): -4.8,
+        ('T', 'H'): -3.0, ('R', 'I'): -5.4, ('V', 'G'): -5.6, ('T', 'L'): -4.6,
+        ('R', 'E'): -0.2, ('V', 'K'): -3.7, ('R', 'Q'): 2.1, ('R', 'A'): -1.6,
+        ('T', 'D'): -1.8, ('P', 'F'): -5.0, ('V', 'S'): -4.3, ('K', 'I'): -4.7,
+        ('M', 'D'): -5.9, ('W', 'W'): 15.2, ('M', 'H'): -2.3, ('P', 'N'): -2.4,
+        ('I', 'F'): 0.5, ('K', 'A'): -0.9, ('M', 'L'): 4.4, ('K', 'E'): 1.1,
+        ('N', 'K'): 0.1, ('R', 'P'): -3.6, ('L', 'F'): 1.8, ('F', 'C'): -4.4,
+        ('W', 'G'): -6.3, ('W', 'L'): -1.0, ('D', 'D'): 8.5, ('N', 'H'): 1.7,
+        ('S', 'Q'): -1.2, ('Q', 'P'): -3.6, ('N', 'L'): -4.8, ('W', 'K'): -5.4,
+        ('Q', 'D'): -1.1, ('W', 'N'): -6.1, ('S', 'A'): 0.0, ('L', 'G'): -7.2,
+        ('W', 'S'): -6.2, ('S', 'E'): -2.2, ('L', 'K'): -3.4, ('H', 'E'): -2.3,
+        ('S', 'I'): -4.7, ('Q', 'H'): 1.4, ('H', 'A'): -3.1, ('S', 'M'): -4.8,
+        ('Y', 'L'): -2.4, ('Y', 'H'): -0.4, ('Y', 'D'): -3.8, ('G', 'G'): 8.0,
+        ('G', 'C'): -8.2, ('Y', 'T'): -2.7, ('W', 'C'): -9.1, ('Y', 'P'): -7.0,
+        ('T', 'K'): -0.2, ('R', 'N'): -1.5, ('A', 'A'): 6.0, ('W', 'A'): -5.8,
+        ('T', 'C'): -6.0, ('N', 'D'): 2.6, ('R', 'F'): -6.0, ('T', 'G'): -3.8,
+        ('V', 'L'): 1.8, ('V', 'P'): -5.2, ('P', 'E'): -1.5, ('M', 'C'): -4.4,
+        ('I', 'I'): 8.1, ('P', 'A'): -1.0, ('M', 'G'): -5.2, ('T', 'S'): 2.0,
+        ('I', 'E'): -4.8, ('P', 'M'): -9.8, ('M', 'K'): -1.9, ('K', 'F'): -5.6,
+        ('I', 'A'): -2.2, ('P', 'I'): -5.7, ('R', 'R'): 10.0, ('L', 'I'): 2.6,
+        ('F', 'D'): -7.0, ('D', 'C'): -9.7
+        }
 johnson = _temp()
 del _temp
 
@@ -1869,60 +1869,60 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/levin.cmp
 def _temp():
     return {
-('W', 'F'): 0, ('L', 'R'): -1, ('S', 'P'): 0, ('I', 'I'): 2,
-('Q', 'Q'): 2, ('N', 'A'): 0, ('H', 'T'): 0, ('N', 'E'): 0,
-('H', 'P'): 0, ('W', 'V'): 0, ('Q', 'E'): 1, ('W', 'R'): 0,
-('Q', 'A'): 0, ('S', 'D'): 0, ('H', 'H'): 2, ('H', 'D'): 0,
-('L', 'N'): -1, ('W', 'A'): -1, ('Y', 'M'): 0, ('Y', 'I'): 0,
-('Y', 'E'): -1, ('Y', 'A'): -1, ('Y', 'Y'): 2, ('Y', 'Q'): -1,
-('E', 'G'): 0, ('A', 'D'): 0, ('C', 'C'): 2, ('M', 'R'): -1,
-('V', 'E'): -1, ('T', 'N'): 0, ('R', 'K'): 1, ('P', 'P'): 3,
-('I', 'T'): 0, ('K', 'S'): 0, ('R', 'G'): 0, ('I', 'P'): -1,
-('C', 'G'): 0, ('C', 'S'): 0, ('A', 'P'): -1, ('I', 'D'): -1,
-('M', 'I'): 0, ('K', 'G'): 0, ('M', 'N'): -1, ('F', 'Q'): -1,
-('I', 'V'): 1, ('F', 'A'): -1, ('V', 'V'): 2, ('F', 'E'): -1,
-('C', 'M'): 0, ('F', 'I'): 1, ('F', 'M'): 0, ('S', 'S'): 2,
-('L', 'Q'): -1, ('W', 'E'): -1, ('N', 'N'): 3, ('V', 'A'): 0,
-('C', 'K'): 0, ('W', 'M'): 0, ('H', 'S'): 0, ('L', 'V'): 1,
-('L', 'A'): 0, ('H', 'K'): 0, ('S', 'G'): 0, ('L', 'E'): -1,
-('W', 'Q'): -1, ('H', 'G'): 0, ('Q', 'N'): 1, ('T', 'A'): 0,
-('L', 'M'): 2, ('W', 'Y'): 0, ('Y', 'N'): -1, ('E', 'P'): -1,
-('Y', 'F'): 1, ('W', 'I'): 0, ('R', 'S'): 0, ('Y', 'V'): 0,
-('E', 'D'): 1, ('W', 'H'): -1, ('Y', 'R'): -1, ('M', 'Q'): -1,
-('A', 'G'): 0, ('C', 'D'): 0, ('R', 'D'): 0, ('C', 'H'): 0,
-('T', 'P'): 0, ('K', 'T'): 0, ('V', 'N'): -1, ('P', 'G'): 0,
-('M', 'A'): 0, ('C', 'P'): 0, ('V', 'R'): -1, ('M', 'V'): 0,
-('M', 'E'): -1, ('C', 'T'): 0, ('I', 'K'): -1, ('R', 'T'): 0,
-('T', 'Q'): 0, ('I', 'G'): -1, ('R', 'P'): 0, ('K', 'D'): 0,
-('F', 'R'): -1, ('F', 'V'): 0, ('K', 'P'): 0, ('L', 'C'): 0,
-('F', 'F'): 2, ('F', 'N'): -1, ('V', 'D'): -1, ('L', 'P'): -1,
-('W', 'K'): -1, ('L', 'T'): 0, ('I', 'N'): -1, ('I', 'S'): -1,
-('H', 'R'): 0, ('N', 'G'): 0, ('C', 'I'): 0, ('H', 'N'): 0,
-('W', 'T'): -1, ('Q', 'G'): 0, ('W', 'P'): -1, ('L', 'D'): -1,
-('L', 'H'): -1, ('S', 'N'): 0, ('L', 'L'): 2, ('M', 'M'): 2,
-('Y', 'K'): -1, ('Y', 'G'): -1, ('Y', 'C'): -1, ('E', 'E'): 2,
-('Y', 'S'): -1, ('M', 'P'): -1, ('C', 'A'): 0, ('M', 'T'): 0,
-('V', 'G'): -1, ('C', 'E'): 0, ('R', 'E'): 0, ('V', 'K'): -1,
-('K', 'Q'): 0, ('R', 'A'): 0, ('I', 'R'): -1, ('T', 'D'): 0,
-('V', 'S'): -1, ('C', 'Q'): 0, ('M', 'D'): -1, ('W', 'W'): 2,
-('M', 'H'): -1, ('T', 'G'): 0, ('K', 'A'): 0, ('R', 'Q'): 0,
-('T', 'T'): 2, ('F', 'S'): -1, ('D', 'P'): 0, ('F', 'C'): -1,
-('W', 'L'): 0, ('F', 'G'): -1, ('F', 'K'): -1, ('D', 'D'): 2,
-('L', 'S'): -1, ('W', 'G'): -1, ('S', 'Q'): 0, ('Q', 'P'): 0,
-('W', 'C'): -1, ('N', 'D'): 1, ('H', 'Q'): 0, ('Q', 'D'): 0,
-('W', 'N'): -1, ('S', 'A'): 1, ('L', 'G'): -1, ('W', 'S'): -1,
-('S', 'E'): 0, ('L', 'K'): -1, ('N', 'P'): 0, ('H', 'E'): 0,
-('H', 'A'): 0, ('Y', 'L'): 0, ('Y', 'H'): 0, ('Y', 'D'): -1,
-('V', 'Q'): -1, ('G', 'G'): 2, ('Y', 'T'): -1, ('R', 'N'): 0,
-('Y', 'P'): -1, ('A', 'E'): 1, ('C', 'V'): 0, ('M', 'S'): -1,
-('A', 'A'): 2, ('V', 'H'): -1, ('T', 'E'): 0, ('C', 'N'): 0,
-('I', 'Q'): -1, ('C', 'R'): 0, ('V', 'P'): -1, ('K', 'E'): 0,
-('K', 'N'): 1, ('V', 'T'): 0, ('M', 'G'): -1, ('T', 'S'): 0,
-('I', 'E'): -1, ('M', 'K'): -1, ('I', 'A'): 0, ('R', 'R'): 2,
-('F', 'P'): -1, ('L', 'I'): 0, ('W', 'D'): -1, ('F', 'T'): -1,
-('K', 'K'): 2, ('I', 'H'): -1, ('F', 'D'): -1, ('F', 'H'): -1,
-('D', 'G'): 0, ('F', 'L'): 0
-}
+        ('W', 'F'): 0, ('L', 'R'): -1, ('S', 'P'): 0, ('I', 'I'): 2,
+        ('Q', 'Q'): 2, ('N', 'A'): 0, ('H', 'T'): 0, ('N', 'E'): 0,
+        ('H', 'P'): 0, ('W', 'V'): 0, ('Q', 'E'): 1, ('W', 'R'): 0,
+        ('Q', 'A'): 0, ('S', 'D'): 0, ('H', 'H'): 2, ('H', 'D'): 0,
+        ('L', 'N'): -1, ('W', 'A'): -1, ('Y', 'M'): 0, ('Y', 'I'): 0,
+        ('Y', 'E'): -1, ('Y', 'A'): -1, ('Y', 'Y'): 2, ('Y', 'Q'): -1,
+        ('E', 'G'): 0, ('A', 'D'): 0, ('C', 'C'): 2, ('M', 'R'): -1,
+        ('V', 'E'): -1, ('T', 'N'): 0, ('R', 'K'): 1, ('P', 'P'): 3,
+        ('I', 'T'): 0, ('K', 'S'): 0, ('R', 'G'): 0, ('I', 'P'): -1,
+        ('C', 'G'): 0, ('C', 'S'): 0, ('A', 'P'): -1, ('I', 'D'): -1,
+        ('M', 'I'): 0, ('K', 'G'): 0, ('M', 'N'): -1, ('F', 'Q'): -1,
+        ('I', 'V'): 1, ('F', 'A'): -1, ('V', 'V'): 2, ('F', 'E'): -1,
+        ('C', 'M'): 0, ('F', 'I'): 1, ('F', 'M'): 0, ('S', 'S'): 2,
+        ('L', 'Q'): -1, ('W', 'E'): -1, ('N', 'N'): 3, ('V', 'A'): 0,
+        ('C', 'K'): 0, ('W', 'M'): 0, ('H', 'S'): 0, ('L', 'V'): 1,
+        ('L', 'A'): 0, ('H', 'K'): 0, ('S', 'G'): 0, ('L', 'E'): -1,
+        ('W', 'Q'): -1, ('H', 'G'): 0, ('Q', 'N'): 1, ('T', 'A'): 0,
+        ('L', 'M'): 2, ('W', 'Y'): 0, ('Y', 'N'): -1, ('E', 'P'): -1,
+        ('Y', 'F'): 1, ('W', 'I'): 0, ('R', 'S'): 0, ('Y', 'V'): 0,
+        ('E', 'D'): 1, ('W', 'H'): -1, ('Y', 'R'): -1, ('M', 'Q'): -1,
+        ('A', 'G'): 0, ('C', 'D'): 0, ('R', 'D'): 0, ('C', 'H'): 0,
+        ('T', 'P'): 0, ('K', 'T'): 0, ('V', 'N'): -1, ('P', 'G'): 0,
+        ('M', 'A'): 0, ('C', 'P'): 0, ('V', 'R'): -1, ('M', 'V'): 0,
+        ('M', 'E'): -1, ('C', 'T'): 0, ('I', 'K'): -1, ('R', 'T'): 0,
+        ('T', 'Q'): 0, ('I', 'G'): -1, ('R', 'P'): 0, ('K', 'D'): 0,
+        ('F', 'R'): -1, ('F', 'V'): 0, ('K', 'P'): 0, ('L', 'C'): 0,
+        ('F', 'F'): 2, ('F', 'N'): -1, ('V', 'D'): -1, ('L', 'P'): -1,
+        ('W', 'K'): -1, ('L', 'T'): 0, ('I', 'N'): -1, ('I', 'S'): -1,
+        ('H', 'R'): 0, ('N', 'G'): 0, ('C', 'I'): 0, ('H', 'N'): 0,
+        ('W', 'T'): -1, ('Q', 'G'): 0, ('W', 'P'): -1, ('L', 'D'): -1,
+        ('L', 'H'): -1, ('S', 'N'): 0, ('L', 'L'): 2, ('M', 'M'): 2,
+        ('Y', 'K'): -1, ('Y', 'G'): -1, ('Y', 'C'): -1, ('E', 'E'): 2,
+        ('Y', 'S'): -1, ('M', 'P'): -1, ('C', 'A'): 0, ('M', 'T'): 0,
+        ('V', 'G'): -1, ('C', 'E'): 0, ('R', 'E'): 0, ('V', 'K'): -1,
+        ('K', 'Q'): 0, ('R', 'A'): 0, ('I', 'R'): -1, ('T', 'D'): 0,
+        ('V', 'S'): -1, ('C', 'Q'): 0, ('M', 'D'): -1, ('W', 'W'): 2,
+        ('M', 'H'): -1, ('T', 'G'): 0, ('K', 'A'): 0, ('R', 'Q'): 0,
+        ('T', 'T'): 2, ('F', 'S'): -1, ('D', 'P'): 0, ('F', 'C'): -1,
+        ('W', 'L'): 0, ('F', 'G'): -1, ('F', 'K'): -1, ('D', 'D'): 2,
+        ('L', 'S'): -1, ('W', 'G'): -1, ('S', 'Q'): 0, ('Q', 'P'): 0,
+        ('W', 'C'): -1, ('N', 'D'): 1, ('H', 'Q'): 0, ('Q', 'D'): 0,
+        ('W', 'N'): -1, ('S', 'A'): 1, ('L', 'G'): -1, ('W', 'S'): -1,
+        ('S', 'E'): 0, ('L', 'K'): -1, ('N', 'P'): 0, ('H', 'E'): 0,
+        ('H', 'A'): 0, ('Y', 'L'): 0, ('Y', 'H'): 0, ('Y', 'D'): -1,
+        ('V', 'Q'): -1, ('G', 'G'): 2, ('Y', 'T'): -1, ('R', 'N'): 0,
+        ('Y', 'P'): -1, ('A', 'E'): 1, ('C', 'V'): 0, ('M', 'S'): -1,
+        ('A', 'A'): 2, ('V', 'H'): -1, ('T', 'E'): 0, ('C', 'N'): 0,
+        ('I', 'Q'): -1, ('C', 'R'): 0, ('V', 'P'): -1, ('K', 'E'): 0,
+        ('K', 'N'): 1, ('V', 'T'): 0, ('M', 'G'): -1, ('T', 'S'): 0,
+        ('I', 'E'): -1, ('M', 'K'): -1, ('I', 'A'): 0, ('R', 'R'): 2,
+        ('F', 'P'): -1, ('L', 'I'): 0, ('W', 'D'): -1, ('F', 'T'): -1,
+        ('K', 'K'): 2, ('I', 'H'): -1, ('F', 'D'): -1, ('F', 'H'): -1,
+        ('D', 'G'): 0, ('F', 'L'): 0
+        }
 levin = _temp()
 del _temp
 
@@ -1930,60 +1930,60 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/mclach.cmp
 def _temp():
     return {
-('N', 'I'): 1, ('K', 'V'): 2, ('S', 'P'): 3, ('N', 'M'): 2,
-('L', 'V'): 5, ('N', 'A'): 3, ('H', 'T'): 4, ('N', 'E'): 4,
-('Q', 'Y'): 1, ('H', 'P'): 3, ('W', 'V'): 2, ('H', 'L'): 2,
-('Q', 'A'): 3, ('H', 'H'): 8, ('N', 'Q'): 4, ('Q', 'M'): 3,
-('Q', 'I'): 0, ('S', 'L'): 2, ('G', 'V'): 2, ('Y', 'M'): 2,
-('K', 'L'): 2, ('Y', 'I'): 3, ('E', 'S'): 4, ('K', 'A'): 3,
-('E', 'W'): 1, ('G', 'F'): 0, ('E', 'K'): 4, ('Y', 'Y'): 9,
-('K', 'F'): 0, ('E', 'G'): 3, ('C', 'C'): 9, ('C', 'G'): 1,
-('M', 'V'): 4, ('P', 'P'): 8, ('A', 'L'): 2, ('K', 'S'): 3,
-('R', 'G'): 3, ('K', 'W'): 1, ('R', 'C'): 1, ('I', 'L'): 5,
-('C', 'S'): 2, ('C', 'W'): 2, ('K', 'C'): 0, ('R', 'W'): 3,
-('P', 'L'): 1, ('K', 'G'): 3, ('R', 'S'): 4, ('D', 'R'): 1,
-('D', 'V'): 1, ('D', 'N'): 5, ('F', 'I'): 3, ('F', 'M'): 5,
-('D', 'F'): 1, ('S', 'S'): 8, ('Q', 'V'): 2, ('S', 'W'): 3,
-('Q', 'R'): 5, ('N', 'N'): 8, ('H', 'W'): 3, ('W', 'M'): 1,
-('H', 'S'): 3, ('W', 'I'): 3, ('T', 'F'): 1, ('Q', 'F'): 0,
-('S', 'G'): 3, ('H', 'G'): 2, ('C', 'P'): 0, ('N', 'R'): 3,
-('H', 'C'): 3, ('N', 'V'): 1, ('E', 'P'): 4, ('Y', 'F'): 6,
-('E', 'T'): 4, ('G', 'Y'): 0, ('E', 'H'): 2, ('E', 'L'): 1,
-('Y', 'V'): 3, ('G', 'M'): 1, ('G', 'I'): 1, ('P', 'W'): 0,
-('R', 'L'): 2, ('T', 'I'): 3, ('A', 'G'): 3, ('R', 'H'): 5,
-('T', 'M'): 3, ('T', 'A'): 3, ('K', 'T'): 3, ('P', 'G'): 3,
-('T', 'Y'): 1, ('A', 'W'): 1, ('C', 'T'): 2, ('V', 'V'): 8,
-('R', 'T'): 3, ('R', 'P'): 3, ('D', 'Y'): 1, ('F', 'V'): 3,
-('D', 'Q'): 4, ('K', 'P'): 3, ('D', 'I'): 1, ('D', 'M'): 2,
-('F', 'F'): 9, ('D', 'A'): 3, ('D', 'E'): 5, ('N', 'K'): 4,
-('Q', 'W'): 2, ('S', 'V'): 2, ('Q', 'S'): 4, ('H', 'V'): 2,
-('W', 'L'): 3, ('N', 'G'): 3, ('Q', 'G'): 2, ('S', 'F'): 2,
-('Q', 'C'): 0, ('H', 'F'): 4, ('N', 'S'): 5, ('Q', 'K'): 4,
-('N', 'W'): 0, ('L', 'L'): 8, ('E', 'Y'): 2, ('M', 'M'): 8,
-('E', 'Q'): 5, ('E', 'I'): 1, ('E', 'M'): 1, ('E', 'A'): 4,
-('G', 'L'): 1, ('Y', 'W'): 6, ('E', 'E'): 8, ('R', 'M'): 1,
-('P', 'V'): 2, ('A', 'F'): 1, ('C', 'A'): 1, ('R', 'I'): 1,
-('T', 'L'): 3, ('I', 'V'): 5, ('C', 'I'): 1, ('R', 'A'): 2,
-('C', 'Y'): 1, ('C', 'M'): 3, ('P', 'F'): 1, ('A', 'V'): 3,
-('K', 'I'): 1, ('R', 'Y'): 2, ('K', 'M'): 1, ('K', 'H'): 4,
-('T', 'P'): 3, ('M', 'L'): 6, ('T', 'T'): 8, ('C', 'L'): 0,
-('D', 'P'): 3, ('N', 'F'): 0, ('K', 'Y'): 1, ('D', 'T'): 3,
-('D', 'H'): 4, ('D', 'L'): 1, ('K', 'K'): 8, ('D', 'D'): 8,
-('Q', 'T'): 3, ('N', 'H'): 4, ('Q', 'P'): 3, ('N', 'L'): 1,
-('H', 'Y'): 4, ('S', 'Y'): 3, ('W', 'W'): 9, ('H', 'M'): 3,
-('S', 'A'): 4, ('H', 'I'): 2, ('Q', 'L'): 3, ('N', 'P'): 1,
-('S', 'I'): 2, ('Q', 'H'): 4, ('N', 'T'): 3, ('H', 'A'): 3,
-('S', 'M'): 2, ('Y', 'L'): 3, ('G', 'W'): 1, ('E', 'R'): 3,
-('E', 'V'): 2, ('G', 'G'): 8, ('T', 'V'): 3, ('E', 'F'): 0,
-('C', 'F'): 0, ('A', 'A'): 8, ('K', 'R'): 5, ('A', 'M'): 3,
-('Q', 'Q'): 8, ('R', 'F'): 1, ('T', 'G'): 2, ('A', 'I'): 2,
-('P', 'Y'): 0, ('C', 'V'): 1, ('I', 'I'): 8, ('P', 'A'): 4,
-('T', 'S'): 5, ('P', 'M'): 1, ('R', 'V'): 2, ('T', 'W'): 2,
-('A', 'Y'): 1, ('P', 'I'): 1, ('R', 'R'): 8, ('N', 'Y'): 2,
-('D', 'S'): 3, ('D', 'W'): 0, ('M', 'I'): 5, ('D', 'K'): 3,
-('N', 'C'): 1, ('E', 'C'): 0, ('D', 'C'): 1, ('D', 'G'): 3,
-('F', 'L'): 5, ('W', 'F'): 6
-}
+        ('N', 'I'): 1, ('K', 'V'): 2, ('S', 'P'): 3, ('N', 'M'): 2,
+        ('L', 'V'): 5, ('N', 'A'): 3, ('H', 'T'): 4, ('N', 'E'): 4,
+        ('Q', 'Y'): 1, ('H', 'P'): 3, ('W', 'V'): 2, ('H', 'L'): 2,
+        ('Q', 'A'): 3, ('H', 'H'): 8, ('N', 'Q'): 4, ('Q', 'M'): 3,
+        ('Q', 'I'): 0, ('S', 'L'): 2, ('G', 'V'): 2, ('Y', 'M'): 2,
+        ('K', 'L'): 2, ('Y', 'I'): 3, ('E', 'S'): 4, ('K', 'A'): 3,
+        ('E', 'W'): 1, ('G', 'F'): 0, ('E', 'K'): 4, ('Y', 'Y'): 9,
+        ('K', 'F'): 0, ('E', 'G'): 3, ('C', 'C'): 9, ('C', 'G'): 1,
+        ('M', 'V'): 4, ('P', 'P'): 8, ('A', 'L'): 2, ('K', 'S'): 3,
+        ('R', 'G'): 3, ('K', 'W'): 1, ('R', 'C'): 1, ('I', 'L'): 5,
+        ('C', 'S'): 2, ('C', 'W'): 2, ('K', 'C'): 0, ('R', 'W'): 3,
+        ('P', 'L'): 1, ('K', 'G'): 3, ('R', 'S'): 4, ('D', 'R'): 1,
+        ('D', 'V'): 1, ('D', 'N'): 5, ('F', 'I'): 3, ('F', 'M'): 5,
+        ('D', 'F'): 1, ('S', 'S'): 8, ('Q', 'V'): 2, ('S', 'W'): 3,
+        ('Q', 'R'): 5, ('N', 'N'): 8, ('H', 'W'): 3, ('W', 'M'): 1,
+        ('H', 'S'): 3, ('W', 'I'): 3, ('T', 'F'): 1, ('Q', 'F'): 0,
+        ('S', 'G'): 3, ('H', 'G'): 2, ('C', 'P'): 0, ('N', 'R'): 3,
+        ('H', 'C'): 3, ('N', 'V'): 1, ('E', 'P'): 4, ('Y', 'F'): 6,
+        ('E', 'T'): 4, ('G', 'Y'): 0, ('E', 'H'): 2, ('E', 'L'): 1,
+        ('Y', 'V'): 3, ('G', 'M'): 1, ('G', 'I'): 1, ('P', 'W'): 0,
+        ('R', 'L'): 2, ('T', 'I'): 3, ('A', 'G'): 3, ('R', 'H'): 5,
+        ('T', 'M'): 3, ('T', 'A'): 3, ('K', 'T'): 3, ('P', 'G'): 3,
+        ('T', 'Y'): 1, ('A', 'W'): 1, ('C', 'T'): 2, ('V', 'V'): 8,
+        ('R', 'T'): 3, ('R', 'P'): 3, ('D', 'Y'): 1, ('F', 'V'): 3,
+        ('D', 'Q'): 4, ('K', 'P'): 3, ('D', 'I'): 1, ('D', 'M'): 2,
+        ('F', 'F'): 9, ('D', 'A'): 3, ('D', 'E'): 5, ('N', 'K'): 4,
+        ('Q', 'W'): 2, ('S', 'V'): 2, ('Q', 'S'): 4, ('H', 'V'): 2,
+        ('W', 'L'): 3, ('N', 'G'): 3, ('Q', 'G'): 2, ('S', 'F'): 2,
+        ('Q', 'C'): 0, ('H', 'F'): 4, ('N', 'S'): 5, ('Q', 'K'): 4,
+        ('N', 'W'): 0, ('L', 'L'): 8, ('E', 'Y'): 2, ('M', 'M'): 8,
+        ('E', 'Q'): 5, ('E', 'I'): 1, ('E', 'M'): 1, ('E', 'A'): 4,
+        ('G', 'L'): 1, ('Y', 'W'): 6, ('E', 'E'): 8, ('R', 'M'): 1,
+        ('P', 'V'): 2, ('A', 'F'): 1, ('C', 'A'): 1, ('R', 'I'): 1,
+        ('T', 'L'): 3, ('I', 'V'): 5, ('C', 'I'): 1, ('R', 'A'): 2,
+        ('C', 'Y'): 1, ('C', 'M'): 3, ('P', 'F'): 1, ('A', 'V'): 3,
+        ('K', 'I'): 1, ('R', 'Y'): 2, ('K', 'M'): 1, ('K', 'H'): 4,
+        ('T', 'P'): 3, ('M', 'L'): 6, ('T', 'T'): 8, ('C', 'L'): 0,
+        ('D', 'P'): 3, ('N', 'F'): 0, ('K', 'Y'): 1, ('D', 'T'): 3,
+        ('D', 'H'): 4, ('D', 'L'): 1, ('K', 'K'): 8, ('D', 'D'): 8,
+        ('Q', 'T'): 3, ('N', 'H'): 4, ('Q', 'P'): 3, ('N', 'L'): 1,
+        ('H', 'Y'): 4, ('S', 'Y'): 3, ('W', 'W'): 9, ('H', 'M'): 3,
+        ('S', 'A'): 4, ('H', 'I'): 2, ('Q', 'L'): 3, ('N', 'P'): 1,
+        ('S', 'I'): 2, ('Q', 'H'): 4, ('N', 'T'): 3, ('H', 'A'): 3,
+        ('S', 'M'): 2, ('Y', 'L'): 3, ('G', 'W'): 1, ('E', 'R'): 3,
+        ('E', 'V'): 2, ('G', 'G'): 8, ('T', 'V'): 3, ('E', 'F'): 0,
+        ('C', 'F'): 0, ('A', 'A'): 8, ('K', 'R'): 5, ('A', 'M'): 3,
+        ('Q', 'Q'): 8, ('R', 'F'): 1, ('T', 'G'): 2, ('A', 'I'): 2,
+        ('P', 'Y'): 0, ('C', 'V'): 1, ('I', 'I'): 8, ('P', 'A'): 4,
+        ('T', 'S'): 5, ('P', 'M'): 1, ('R', 'V'): 2, ('T', 'W'): 2,
+        ('A', 'Y'): 1, ('P', 'I'): 1, ('R', 'R'): 8, ('N', 'Y'): 2,
+        ('D', 'S'): 3, ('D', 'W'): 0, ('M', 'I'): 5, ('D', 'K'): 3,
+        ('N', 'C'): 1, ('E', 'C'): 0, ('D', 'C'): 1, ('D', 'G'): 3,
+        ('F', 'L'): 5, ('W', 'F'): 6
+        }
 mclach = _temp()
 del _temp
 
@@ -1991,60 +1991,60 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/miyata.cmp
 def _temp():
     return {
-('W', 'F'): 0.14, ('L', 'R'): -1.37, ('S', 'P'): 0.69, ('I', 'I'): 1.25,
-('Q', 'Q'): 1.25, ('N', 'A'): -0.53, ('H', 'T'): -0.07, ('N', 'E'): 0.4,
-('H', 'P'): -0.9, ('W', 'V'): -1.26, ('W', 'R'): -1.47, ('Q', 'A'): -0.67,
-('H', 'H'): 1.25, ('N', 'Q'): 0.26, ('H', 'D'): -0.47, ('L', 'N'): -2.24,
-('Y', 'M'): 0.32, ('Y', 'I'): 0.39, ('Y', 'E'): -1.97, ('E', 'S'): -0.81,
-('Y', 'A'): -1.93, ('Y', 'Y'): 1.25, ('E', 'C'): -2.01, ('Y', 'Q'): -1.23,
-('E', 'G'): -1.53, ('V', 'A'): -0.6, ('C', 'C'): 1.25, ('M', 'R'): -1.04,
-('V', 'E'): -1.72, ('R', 'K'): 0.85, ('P', 'P'): 1.25, ('I', 'T'): -0.89,
-('K', 'S'): -1.46, ('R', 'G'): -2.33, ('I', 'P'): -1.37, ('R', 'C'): -1.81,
-('V', 'Q'): -0.88, ('K', 'K'): 1.25, ('A', 'P'): 1.19, ('I', 'D'): -2.73,
-('K', 'C'): -2.02, ('M', 'I'): 0.96, ('K', 'G'): -2.29, ('R', 'S'): -1.49,
-('F', 'Q'): -1.56, ('I', 'V'): 0.4, ('M', 'V'): 0.63, ('F', 'A'): -1.98,
-('V', 'V'): 1.25, ('M', 'N'): -1.83, ('F', 'E'): -2.34, ('D', 'N'): 0.6,
-('F', 'I'): 0.64, ('F', 'M'): 0.43, ('M', 'S'): -1.42, ('S', 'S'): 1.25,
-('L', 'Q'): -1.45, ('W', 'E'): -2.83, ('W', 'A'): -2.98, ('W', 'M'): -0.64,
-('H', 'S'): -0.69, ('L', 'V'): 0.34, ('S', 'C'): -0.59, ('L', 'A'): -1.51,
-('S', 'G'): 0.4, ('L', 'E'): -2.28, ('W', 'Q'): -2.17, ('H', 'G'): -1.53,
-('H', 'C'): -1.31, ('W', 'Y'): 0.19, ('Y', 'N'): -2.17, ('E', 'P'): -1.23,
-('I', 'L'): 1.11, ('E', 'T'): -0.58, ('W', 'I'): -0.47, ('A', 'A'): 1.25,
-('I', 'N'): -2.12, ('G', 'A'): 0.34, ('Y', 'V'): -0.27, ('W', 'H'): -1.91,
-('Y', 'R'): -0.77, ('M', 'Q'): -1.05, ('R', 'H'): 0.43, ('A', 'C'): -0.14,
-('R', 'D'): -1.09, ('T', 'A'): 0.35, ('T', 'P'): 0.38, ('L', 'D'): -2.85,
-('K', 'T'): -0.85, ('V', 'N'): -1.51, ('M', 'A'): -1.17, ('K', 'H'): 0.46,
-('V', 'R'): -1.18, ('P', 'C'): -0.08, ('M', 'E'): -1.88, ('I', 'K'): -1.59,
-('T', 'T'): 1.25, ('R', 'T'): -0.78, ('I', 'G'): -2.35, ('R', 'P'): -1.65,
-('K', 'D'): -0.8, ('I', 'C'): -0.38, ('F', 'R'): -1.22, ('F', 'V'): -0.18,
-('D', 'Q'): -0.22, ('K', 'P'): -1.69, ('F', 'F'): 1.25, ('D', 'A'): -1.12,
-('D', 'E'): 0.35, ('F', 'N'): -2.45, ('W', 'D'): -3.63, ('L', 'P'): -1.45,
-('Q', 'S'): -0.4, ('N', 'C'): -1.58, ('N', 'G'): -0.71, ('H', 'N'): -0.04,
-('W', 'T'): -2.25, ('Q', 'G'): -1.23, ('W', 'P'): -2.92, ('Q', 'C'): -1.23,
-('N', 'S'): -0.06, ('L', 'H'): -1.34, ('L', 'L'): 1.25, ('M', 'M'): 1.25,
-('G', 'P'): 0.28, ('Y', 'K'): -1.17, ('E', 'Q'): 0.41, ('Y', 'G'): -2.83,
-('Y', 'C'): -1.13, ('E', 'A'): -1.21, ('E', 'E'): 1.25, ('Y', 'S'): -2.08,
-('M', 'P'): -1.11, ('V', 'C'): 0.39, ('M', 'T'): -0.61, ('V', 'G'): -1.51,
-('R', 'E'): -0.2, ('V', 'K'): -1.45, ('K', 'Q'): 0.19, ('R', 'A'): -1.67,
-('I', 'R'): -1.24, ('V', 'S'): -0.9, ('M', 'L'): 0.84, ('M', 'D'): -2.44,
-('W', 'W'): 1.25, ('M', 'H'): -0.94, ('K', 'A'): -1.71, ('R', 'Q'): 0.12,
-('K', 'E'): 0.11, ('F', 'S'): -2.2, ('D', 'P'): -1.15, ('D', 'T'): -0.8,
-('F', 'C'): -0.99, ('W', 'L'): -0.48, ('F', 'G'): -2.89, ('F', 'K'): -1.6,
-('F', 'T'): -1.35, ('D', 'D'): 1.25, ('Q', 'T'): 0.13, ('W', 'G'): -3.88,
-('Q', 'P'): -0.67, ('W', 'C'): -2.09, ('W', 'K'): -1.86, ('H', 'Q'): 0.93,
-('L', 'C'): -0.4, ('W', 'N'): -3.14, ('S', 'A'): 0.74, ('L', 'G'): -2.42,
-('W', 'S'): -3.13, ('L', 'K'): -1.73, ('N', 'P'): -0.55, ('H', 'E'): 0.29,
-('N', 'T'): -0.15, ('H', 'A'): -0.92, ('Y', 'L'): 0.31, ('Y', 'H'): -1.02,
-('Y', 'D'): -2.7, ('L', 'T'): -1.0, ('G', 'G'): 1.25, ('G', 'C'): -0.97,
-('Y', 'T'): -1.2, ('Y', 'P'): -1.87, ('R', 'N'): -0.79, ('V', 'D'): -2.15,
-('T', 'C'): -0.2, ('V', 'H'): -0.86, ('T', 'G'): -0.45, ('I', 'Q'): -1.32,
-('V', 'P'): -0.54, ('M', 'C'): -0.21, ('K', 'N'): -0.59, ('V', 'T'): -0.17,
-('M', 'G'): -2.09, ('T', 'S'): 0.36, ('I', 'E'): -2.14, ('M', 'K'): -1.38,
-('I', 'A'): -1.44, ('N', 'N'): 1.25, ('R', 'R'): 1.25, ('F', 'P'): -1.92,
-('I', 'S'): -1.7, ('D', 'S'): -0.62, ('Y', 'F'): 0.77, ('L', 'S'): -1.79,
-('I', 'H'): -1.2, ('F', 'D'): -3.02, ('D', 'C'): -2.23, ('F', 'H'): -1.38,
-('D', 'G'): -1.12, ('F', 'L'): 0.62
-}
+        ('W', 'F'): 0.14, ('L', 'R'): -1.37, ('S', 'P'): 0.69, ('I', 'I'): 1.25,
+        ('Q', 'Q'): 1.25, ('N', 'A'): -0.53, ('H', 'T'): -0.07, ('N', 'E'): 0.4,
+        ('H', 'P'): -0.9, ('W', 'V'): -1.26, ('W', 'R'): -1.47, ('Q', 'A'): -0.67,
+        ('H', 'H'): 1.25, ('N', 'Q'): 0.26, ('H', 'D'): -0.47, ('L', 'N'): -2.24,
+        ('Y', 'M'): 0.32, ('Y', 'I'): 0.39, ('Y', 'E'): -1.97, ('E', 'S'): -0.81,
+        ('Y', 'A'): -1.93, ('Y', 'Y'): 1.25, ('E', 'C'): -2.01, ('Y', 'Q'): -1.23,
+        ('E', 'G'): -1.53, ('V', 'A'): -0.6, ('C', 'C'): 1.25, ('M', 'R'): -1.04,
+        ('V', 'E'): -1.72, ('R', 'K'): 0.85, ('P', 'P'): 1.25, ('I', 'T'): -0.89,
+        ('K', 'S'): -1.46, ('R', 'G'): -2.33, ('I', 'P'): -1.37, ('R', 'C'): -1.81,
+        ('V', 'Q'): -0.88, ('K', 'K'): 1.25, ('A', 'P'): 1.19, ('I', 'D'): -2.73,
+        ('K', 'C'): -2.02, ('M', 'I'): 0.96, ('K', 'G'): -2.29, ('R', 'S'): -1.49,
+        ('F', 'Q'): -1.56, ('I', 'V'): 0.4, ('M', 'V'): 0.63, ('F', 'A'): -1.98,
+        ('V', 'V'): 1.25, ('M', 'N'): -1.83, ('F', 'E'): -2.34, ('D', 'N'): 0.6,
+        ('F', 'I'): 0.64, ('F', 'M'): 0.43, ('M', 'S'): -1.42, ('S', 'S'): 1.25,
+        ('L', 'Q'): -1.45, ('W', 'E'): -2.83, ('W', 'A'): -2.98, ('W', 'M'): -0.64,
+        ('H', 'S'): -0.69, ('L', 'V'): 0.34, ('S', 'C'): -0.59, ('L', 'A'): -1.51,
+        ('S', 'G'): 0.4, ('L', 'E'): -2.28, ('W', 'Q'): -2.17, ('H', 'G'): -1.53,
+        ('H', 'C'): -1.31, ('W', 'Y'): 0.19, ('Y', 'N'): -2.17, ('E', 'P'): -1.23,
+        ('I', 'L'): 1.11, ('E', 'T'): -0.58, ('W', 'I'): -0.47, ('A', 'A'): 1.25,
+        ('I', 'N'): -2.12, ('G', 'A'): 0.34, ('Y', 'V'): -0.27, ('W', 'H'): -1.91,
+        ('Y', 'R'): -0.77, ('M', 'Q'): -1.05, ('R', 'H'): 0.43, ('A', 'C'): -0.14,
+        ('R', 'D'): -1.09, ('T', 'A'): 0.35, ('T', 'P'): 0.38, ('L', 'D'): -2.85,
+        ('K', 'T'): -0.85, ('V', 'N'): -1.51, ('M', 'A'): -1.17, ('K', 'H'): 0.46,
+        ('V', 'R'): -1.18, ('P', 'C'): -0.08, ('M', 'E'): -1.88, ('I', 'K'): -1.59,
+        ('T', 'T'): 1.25, ('R', 'T'): -0.78, ('I', 'G'): -2.35, ('R', 'P'): -1.65,
+        ('K', 'D'): -0.8, ('I', 'C'): -0.38, ('F', 'R'): -1.22, ('F', 'V'): -0.18,
+        ('D', 'Q'): -0.22, ('K', 'P'): -1.69, ('F', 'F'): 1.25, ('D', 'A'): -1.12,
+        ('D', 'E'): 0.35, ('F', 'N'): -2.45, ('W', 'D'): -3.63, ('L', 'P'): -1.45,
+        ('Q', 'S'): -0.4, ('N', 'C'): -1.58, ('N', 'G'): -0.71, ('H', 'N'): -0.04,
+        ('W', 'T'): -2.25, ('Q', 'G'): -1.23, ('W', 'P'): -2.92, ('Q', 'C'): -1.23,
+        ('N', 'S'): -0.06, ('L', 'H'): -1.34, ('L', 'L'): 1.25, ('M', 'M'): 1.25,
+        ('G', 'P'): 0.28, ('Y', 'K'): -1.17, ('E', 'Q'): 0.41, ('Y', 'G'): -2.83,
+        ('Y', 'C'): -1.13, ('E', 'A'): -1.21, ('E', 'E'): 1.25, ('Y', 'S'): -2.08,
+        ('M', 'P'): -1.11, ('V', 'C'): 0.39, ('M', 'T'): -0.61, ('V', 'G'): -1.51,
+        ('R', 'E'): -0.2, ('V', 'K'): -1.45, ('K', 'Q'): 0.19, ('R', 'A'): -1.67,
+        ('I', 'R'): -1.24, ('V', 'S'): -0.9, ('M', 'L'): 0.84, ('M', 'D'): -2.44,
+        ('W', 'W'): 1.25, ('M', 'H'): -0.94, ('K', 'A'): -1.71, ('R', 'Q'): 0.12,
+        ('K', 'E'): 0.11, ('F', 'S'): -2.2, ('D', 'P'): -1.15, ('D', 'T'): -0.8,
+        ('F', 'C'): -0.99, ('W', 'L'): -0.48, ('F', 'G'): -2.89, ('F', 'K'): -1.6,
+        ('F', 'T'): -1.35, ('D', 'D'): 1.25, ('Q', 'T'): 0.13, ('W', 'G'): -3.88,
+        ('Q', 'P'): -0.67, ('W', 'C'): -2.09, ('W', 'K'): -1.86, ('H', 'Q'): 0.93,
+        ('L', 'C'): -0.4, ('W', 'N'): -3.14, ('S', 'A'): 0.74, ('L', 'G'): -2.42,
+        ('W', 'S'): -3.13, ('L', 'K'): -1.73, ('N', 'P'): -0.55, ('H', 'E'): 0.29,
+        ('N', 'T'): -0.15, ('H', 'A'): -0.92, ('Y', 'L'): 0.31, ('Y', 'H'): -1.02,
+        ('Y', 'D'): -2.7, ('L', 'T'): -1.0, ('G', 'G'): 1.25, ('G', 'C'): -0.97,
+        ('Y', 'T'): -1.2, ('Y', 'P'): -1.87, ('R', 'N'): -0.79, ('V', 'D'): -2.15,
+        ('T', 'C'): -0.2, ('V', 'H'): -0.86, ('T', 'G'): -0.45, ('I', 'Q'): -1.32,
+        ('V', 'P'): -0.54, ('M', 'C'): -0.21, ('K', 'N'): -0.59, ('V', 'T'): -0.17,
+        ('M', 'G'): -2.09, ('T', 'S'): 0.36, ('I', 'E'): -2.14, ('M', 'K'): -1.38,
+        ('I', 'A'): -1.44, ('N', 'N'): 1.25, ('R', 'R'): 1.25, ('F', 'P'): -1.92,
+        ('I', 'S'): -1.7, ('D', 'S'): -0.62, ('Y', 'F'): 0.77, ('L', 'S'): -1.79,
+        ('I', 'H'): -1.2, ('F', 'D'): -3.02, ('D', 'C'): -2.23, ('F', 'H'): -1.38,
+        ('D', 'G'): -1.12, ('F', 'L'): 0.62
+        }
 miyata = _temp()
 del _temp
 
@@ -2052,71 +2052,71 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/nwsgappep.cmp
 def _temp():
     return {
-('W', 'F'): 1.3, ('S', 'P'): 0.4, ('W', 'B'): -0.7, ('N', 'N'): 1.5,
-('N', 'A'): 0.2, ('N', 'E'): 0.5, ('Z', 'Y'): -0.6, ('W', 'V'): -0.8,
-('L', 'B'): -0.5, ('W', 'R'): 1.4, ('Q', 'A'): 0.2, ('S', 'D'): 0.2,
-('H', 'H'): 1.5, ('Q', 'M'): 0.0, ('S', 'H'): -0.2, ('H', 'D'): 0.4,
-('Q', 'I'): -0.3, ('S', 'L'): -0.4, ('Y', 'M'): -0.1, ('Q', 'E'): 0.7,
-('Y', 'I'): 0.1, ('Y', 'E'): -0.5, ('Y', 'A'): -0.3, ('G', 'F'): -0.6,
-('V', 'T'): 0.2, ('G', 'B'): 0.6, ('Y', 'Y'): 1.5, ('N', 'L'): -0.4,
-('E', 'C'): -0.6, ('Y', 'Q'): -0.6, ('Z', 'Z'): 1.1, ('V', 'A'): 0.2,
-('C', 'C'): 1.5, ('V', 'E'): -0.2, ('T', 'N'): 0.2, ('R', 'K'): 0.8,
-('P', 'P'): 1.5, ('V', 'I'): 1.1, ('T', 'B'): 0.2, ('R', 'G'): -0.3,
-('V', 'M'): 0.6, ('T', 'F'): -0.3, ('R', 'C'): -0.3, ('V', 'Q'): -0.2,
-('K', 'K'): 1.5, ('M', 'B'): -0.3, ('P', 'D'): 0.1, ('I', 'H'): -0.3,
-('M', 'F'): 0.5, ('I', 'D'): -0.2, ('K', 'C'): -0.6, ('L', 'L'): 1.5,
-('K', 'G'): -0.1, ('P', 'H'): 0.2, ('Z', 'G'): 0.3, ('W', 'M'): -0.3,
-('Z', 'C'): -0.6, ('T', 'R'): -0.1, ('Z', 'K'): 0.4, ('F', 'A'): -0.5,
-('Z', 'W'): -0.8, ('F', 'E'): -0.7, ('Z', 'S'): 0.0, ('D', 'B'): 1.1,
-('S', 'S'): 1.5, ('W', 'E'): -1.1, ('W', 'A'): -0.8, ('N', 'B'): 1.1,
-('Q', 'C'): -0.6, ('Z', 'Q'): 1.1, ('N', 'F'): -0.5, ('S', 'C'): 0.7,
-('Q', 'F'): -0.8, ('S', 'G'): 0.6, ('Q', 'B'): 0.5, ('W', 'Q'): -0.5,
-('H', 'G'): -0.2, ('S', 'K'): 0.2, ('L', 'I'): 0.8, ('V', 'D'): -0.2,
-('H', 'C'): -0.1, ('L', 'E'): -0.3, ('Y', 'N'): -0.1, ('Y', 'F'): 1.4,
-('W', 'I'): -0.5, ('C', 'A'): 0.3, ('G', 'E'): 0.5, ('G', 'A'): 0.7,
-('Y', 'V'): -0.1, ('E', 'D'): 1.0, ('W', 'H'): -0.1, ('Y', 'R'): -0.6,
-('N', 'I'): -0.3, ('R', 'L'): -0.4, ('T', 'I'): 0.2, ('V', 'B'): -0.2,
-('R', 'H'): 0.5, ('T', 'M'): 0.0, ('V', 'F'): 0.2, ('R', 'D'): 0.0,
-('T', 'A'): 0.4, ('T', 'P'): 0.3, ('T', 'E'): 0.2, ('V', 'N'): -0.3,
-('P', 'G'): 0.3, ('M', 'A'): 0.0, ('K', 'H'): 0.1, ('V', 'R'): -0.3,
-('P', 'C'): 0.1, ('M', 'E'): -0.2, ('V', 'V'): 1.5, ('T', 'T'): 1.5,
-('M', 'I'): 0.6, ('T', 'Q'): -0.1, ('I', 'G'): -0.3, ('P', 'K'): 0.1,
-('M', 'M'): 1.5, ('K', 'D'): 0.3, ('I', 'C'): 0.2, ('Z', 'D'): 0.9,
-('Y', 'W'): 1.1, ('Z', 'L'): -0.2, ('P', 'L'): -0.3, ('Z', 'I'): -0.2,
-('Z', 'T'): 0.1, ('L', 'C'): -0.8, ('F', 'B'): -0.7, ('Z', 'P'): 0.2,
-('F', 'F'): 1.5, ('D', 'A'): 0.3, ('S', 'R'): 0.1, ('W', 'D'): -1.1,
-('R', 'R'): 1.5, ('W', 'K'): 0.1, ('N', 'M'): -0.3, ('N', 'C'): -0.3,
-('N', 'G'): 0.4, ('S', 'B'): 0.3, ('W', 'T'): -0.6, ('Q', 'G'): 0.2,
-('S', 'F'): -0.3, ('W', 'P'): -0.8, ('L', 'D'): -0.5, ('H', 'F'): -0.1,
-('L', 'H'): -0.2, ('S', 'N'): 0.3, ('H', 'B'): 0.4, ('Q', 'K'): 0.4,
-('R', 'P'): 0.3, ('Y', 'K'): -0.6, ('Y', 'B'): -0.3, ('Y', 'G'): -0.7,
-('Y', 'C'): 1.0, ('G', 'D'): 0.7, ('E', 'A'): 0.3, ('T', 'S'): 0.3,
-('E', 'E'): 1.5, ('Y', 'S'): -0.4, ('R', 'M'): 0.2, ('V', 'C'): 0.2,
-('T', 'H'): -0.1, ('R', 'I'): -0.3, ('V', 'S'): -0.1, ('V', 'G'): 0.2,
-('T', 'L'): -0.1, ('R', 'E'): 0.0, ('V', 'K'): -0.2, ('R', 'Q'): 0.4,
-('R', 'A'): -0.3, ('Z', 'H'): 0.5, ('T', 'D'): 0.2, ('P', 'F'): -0.7,
-('L', 'A'): -0.1, ('K', 'I'): -0.2, ('M', 'D'): -0.4, ('P', 'B'): 0.1,
-('W', 'W'): 1.5, ('M', 'H'): -0.3, ('P', 'N'): 0.0, ('I', 'F'): 0.7,
-('K', 'A'): 0.0, ('M', 'L'): 1.3, ('I', 'B'): -0.2, ('K', 'E'): 0.3,
-('Z', 'E'): 1.1, ('Q', 'N'): 0.4, ('Z', 'A'): 0.2, ('Z', 'M'): -0.1,
-('L', 'F'): 1.2, ('F', 'C'): -0.1, ('W', 'G'): -1.0, ('W', 'L'): 0.5,
-('C', 'B'): -0.4, ('B', 'A'): 0.2, ('D', 'D'): 1.5, ('N', 'H'): 0.5,
-('S', 'Q'): -0.1, ('Q', 'P'): 0.3, ('W', 'C'): -1.2, ('N', 'D'): 0.7,
-('Q', 'D'): 0.7, ('W', 'N'): -0.3, ('S', 'A'): 0.4, ('L', 'G'): -0.5,
-('W', 'S'): 0.3, ('S', 'E'): 0.2, ('L', 'K'): -0.3, ('H', 'E'): 0.4,
-('S', 'I'): -0.1, ('Q', 'H'): 0.7, ('H', 'A'): -0.1, ('S', 'M'): -0.3,
-('Y', 'L'): 0.3, ('Y', 'H'): 0.3, ('Y', 'D'): -0.5, ('G', 'G'): 1.5,
-('G', 'C'): 0.2, ('Y', 'T'): -0.3, ('E', 'B'): 0.7, ('Y', 'P'): -0.8,
-('T', 'K'): 0.2, ('R', 'N'): 0.1, ('A', 'A'): 1.5, ('N', 'K'): 0.4,
-('T', 'C'): 0.2, ('V', 'H'): -0.3, ('Q', 'Q'): 1.5, ('R', 'F'): -0.5,
-('T', 'G'): 0.4, ('V', 'L'): 0.8, ('R', 'B'): 0.1, ('V', 'P'): 0.1,
-('P', 'E'): 0.1, ('M', 'C'): -0.6, ('I', 'I'): 1.5, ('P', 'A'): 0.5,
-('M', 'G'): -0.3, ('K', 'B'): 0.4, ('I', 'E'): -0.2, ('P', 'M'): -0.2,
-('M', 'K'): 0.2, ('K', 'F'): -0.7, ('I', 'A'): 0.0, ('P', 'I'): -0.2,
-('Q', 'L'): -0.1, ('Z', 'F'): -0.7, ('Z', 'B'): 0.6, ('Z', 'N'): 0.4,
-('Z', 'V'): -0.2, ('F', 'D'): -1.0, ('Z', 'R'): 0.2, ('D', 'C'): -0.5,
-('B', 'B'): 1.1
-}
+        ('W', 'F'): 1.3, ('S', 'P'): 0.4, ('W', 'B'): -0.7, ('N', 'N'): 1.5,
+        ('N', 'A'): 0.2, ('N', 'E'): 0.5, ('Z', 'Y'): -0.6, ('W', 'V'): -0.8,
+        ('L', 'B'): -0.5, ('W', 'R'): 1.4, ('Q', 'A'): 0.2, ('S', 'D'): 0.2,
+        ('H', 'H'): 1.5, ('Q', 'M'): 0.0, ('S', 'H'): -0.2, ('H', 'D'): 0.4,
+        ('Q', 'I'): -0.3, ('S', 'L'): -0.4, ('Y', 'M'): -0.1, ('Q', 'E'): 0.7,
+        ('Y', 'I'): 0.1, ('Y', 'E'): -0.5, ('Y', 'A'): -0.3, ('G', 'F'): -0.6,
+        ('V', 'T'): 0.2, ('G', 'B'): 0.6, ('Y', 'Y'): 1.5, ('N', 'L'): -0.4,
+        ('E', 'C'): -0.6, ('Y', 'Q'): -0.6, ('Z', 'Z'): 1.1, ('V', 'A'): 0.2,
+        ('C', 'C'): 1.5, ('V', 'E'): -0.2, ('T', 'N'): 0.2, ('R', 'K'): 0.8,
+        ('P', 'P'): 1.5, ('V', 'I'): 1.1, ('T', 'B'): 0.2, ('R', 'G'): -0.3,
+        ('V', 'M'): 0.6, ('T', 'F'): -0.3, ('R', 'C'): -0.3, ('V', 'Q'): -0.2,
+        ('K', 'K'): 1.5, ('M', 'B'): -0.3, ('P', 'D'): 0.1, ('I', 'H'): -0.3,
+        ('M', 'F'): 0.5, ('I', 'D'): -0.2, ('K', 'C'): -0.6, ('L', 'L'): 1.5,
+        ('K', 'G'): -0.1, ('P', 'H'): 0.2, ('Z', 'G'): 0.3, ('W', 'M'): -0.3,
+        ('Z', 'C'): -0.6, ('T', 'R'): -0.1, ('Z', 'K'): 0.4, ('F', 'A'): -0.5,
+        ('Z', 'W'): -0.8, ('F', 'E'): -0.7, ('Z', 'S'): 0.0, ('D', 'B'): 1.1,
+        ('S', 'S'): 1.5, ('W', 'E'): -1.1, ('W', 'A'): -0.8, ('N', 'B'): 1.1,
+        ('Q', 'C'): -0.6, ('Z', 'Q'): 1.1, ('N', 'F'): -0.5, ('S', 'C'): 0.7,
+        ('Q', 'F'): -0.8, ('S', 'G'): 0.6, ('Q', 'B'): 0.5, ('W', 'Q'): -0.5,
+        ('H', 'G'): -0.2, ('S', 'K'): 0.2, ('L', 'I'): 0.8, ('V', 'D'): -0.2,
+        ('H', 'C'): -0.1, ('L', 'E'): -0.3, ('Y', 'N'): -0.1, ('Y', 'F'): 1.4,
+        ('W', 'I'): -0.5, ('C', 'A'): 0.3, ('G', 'E'): 0.5, ('G', 'A'): 0.7,
+        ('Y', 'V'): -0.1, ('E', 'D'): 1.0, ('W', 'H'): -0.1, ('Y', 'R'): -0.6,
+        ('N', 'I'): -0.3, ('R', 'L'): -0.4, ('T', 'I'): 0.2, ('V', 'B'): -0.2,
+        ('R', 'H'): 0.5, ('T', 'M'): 0.0, ('V', 'F'): 0.2, ('R', 'D'): 0.0,
+        ('T', 'A'): 0.4, ('T', 'P'): 0.3, ('T', 'E'): 0.2, ('V', 'N'): -0.3,
+        ('P', 'G'): 0.3, ('M', 'A'): 0.0, ('K', 'H'): 0.1, ('V', 'R'): -0.3,
+        ('P', 'C'): 0.1, ('M', 'E'): -0.2, ('V', 'V'): 1.5, ('T', 'T'): 1.5,
+        ('M', 'I'): 0.6, ('T', 'Q'): -0.1, ('I', 'G'): -0.3, ('P', 'K'): 0.1,
+        ('M', 'M'): 1.5, ('K', 'D'): 0.3, ('I', 'C'): 0.2, ('Z', 'D'): 0.9,
+        ('Y', 'W'): 1.1, ('Z', 'L'): -0.2, ('P', 'L'): -0.3, ('Z', 'I'): -0.2,
+        ('Z', 'T'): 0.1, ('L', 'C'): -0.8, ('F', 'B'): -0.7, ('Z', 'P'): 0.2,
+        ('F', 'F'): 1.5, ('D', 'A'): 0.3, ('S', 'R'): 0.1, ('W', 'D'): -1.1,
+        ('R', 'R'): 1.5, ('W', 'K'): 0.1, ('N', 'M'): -0.3, ('N', 'C'): -0.3,
+        ('N', 'G'): 0.4, ('S', 'B'): 0.3, ('W', 'T'): -0.6, ('Q', 'G'): 0.2,
+        ('S', 'F'): -0.3, ('W', 'P'): -0.8, ('L', 'D'): -0.5, ('H', 'F'): -0.1,
+        ('L', 'H'): -0.2, ('S', 'N'): 0.3, ('H', 'B'): 0.4, ('Q', 'K'): 0.4,
+        ('R', 'P'): 0.3, ('Y', 'K'): -0.6, ('Y', 'B'): -0.3, ('Y', 'G'): -0.7,
+        ('Y', 'C'): 1.0, ('G', 'D'): 0.7, ('E', 'A'): 0.3, ('T', 'S'): 0.3,
+        ('E', 'E'): 1.5, ('Y', 'S'): -0.4, ('R', 'M'): 0.2, ('V', 'C'): 0.2,
+        ('T', 'H'): -0.1, ('R', 'I'): -0.3, ('V', 'S'): -0.1, ('V', 'G'): 0.2,
+        ('T', 'L'): -0.1, ('R', 'E'): 0.0, ('V', 'K'): -0.2, ('R', 'Q'): 0.4,
+        ('R', 'A'): -0.3, ('Z', 'H'): 0.5, ('T', 'D'): 0.2, ('P', 'F'): -0.7,
+        ('L', 'A'): -0.1, ('K', 'I'): -0.2, ('M', 'D'): -0.4, ('P', 'B'): 0.1,
+        ('W', 'W'): 1.5, ('M', 'H'): -0.3, ('P', 'N'): 0.0, ('I', 'F'): 0.7,
+        ('K', 'A'): 0.0, ('M', 'L'): 1.3, ('I', 'B'): -0.2, ('K', 'E'): 0.3,
+        ('Z', 'E'): 1.1, ('Q', 'N'): 0.4, ('Z', 'A'): 0.2, ('Z', 'M'): -0.1,
+        ('L', 'F'): 1.2, ('F', 'C'): -0.1, ('W', 'G'): -1.0, ('W', 'L'): 0.5,
+        ('C', 'B'): -0.4, ('B', 'A'): 0.2, ('D', 'D'): 1.5, ('N', 'H'): 0.5,
+        ('S', 'Q'): -0.1, ('Q', 'P'): 0.3, ('W', 'C'): -1.2, ('N', 'D'): 0.7,
+        ('Q', 'D'): 0.7, ('W', 'N'): -0.3, ('S', 'A'): 0.4, ('L', 'G'): -0.5,
+        ('W', 'S'): 0.3, ('S', 'E'): 0.2, ('L', 'K'): -0.3, ('H', 'E'): 0.4,
+        ('S', 'I'): -0.1, ('Q', 'H'): 0.7, ('H', 'A'): -0.1, ('S', 'M'): -0.3,
+        ('Y', 'L'): 0.3, ('Y', 'H'): 0.3, ('Y', 'D'): -0.5, ('G', 'G'): 1.5,
+        ('G', 'C'): 0.2, ('Y', 'T'): -0.3, ('E', 'B'): 0.7, ('Y', 'P'): -0.8,
+        ('T', 'K'): 0.2, ('R', 'N'): 0.1, ('A', 'A'): 1.5, ('N', 'K'): 0.4,
+        ('T', 'C'): 0.2, ('V', 'H'): -0.3, ('Q', 'Q'): 1.5, ('R', 'F'): -0.5,
+        ('T', 'G'): 0.4, ('V', 'L'): 0.8, ('R', 'B'): 0.1, ('V', 'P'): 0.1,
+        ('P', 'E'): 0.1, ('M', 'C'): -0.6, ('I', 'I'): 1.5, ('P', 'A'): 0.5,
+        ('M', 'G'): -0.3, ('K', 'B'): 0.4, ('I', 'E'): -0.2, ('P', 'M'): -0.2,
+        ('M', 'K'): 0.2, ('K', 'F'): -0.7, ('I', 'A'): 0.0, ('P', 'I'): -0.2,
+        ('Q', 'L'): -0.1, ('Z', 'F'): -0.7, ('Z', 'B'): 0.6, ('Z', 'N'): 0.4,
+        ('Z', 'V'): -0.2, ('F', 'D'): -1.0, ('Z', 'R'): 0.2, ('D', 'C'): -0.5,
+        ('B', 'B'): 1.1
+        }
 nwsgappep = _temp()
 del _temp
 
@@ -2124,76 +2124,76 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/pam120.cmp
 def _temp():
     return {
-('W', 'F'): -1, ('L', 'R'): -4, ('S', 'P'): 1, ('V', 'T'): 0,
-('Q', 'Q'): 6, ('N', 'A'): -1, ('Z', 'Y'): -5, ('W', 'R'): 1,
-('Q', 'A'): -1, ('S', 'D'): 0, ('H', 'H'): 7, ('S', 'H'): -2,
-('H', 'D'): 0, ('L', 'N'): -4, ('W', 'A'): -7, ('Y', 'M'): -4,
-('G', 'R'): -4, ('Y', 'I'): -2, ('Y', 'E'): -5, ('B', 'Y'): -3,
-('Y', 'A'): -4, ('V', 'D'): -3, ('B', 'S'): 0, ('Y', 'Y'): 8,
-('G', 'N'): 0, ('E', 'C'): -7, ('Y', 'Q'): -5, ('Z', 'Z'): 4,
-('V', 'A'): 0, ('C', 'C'): 9, ('M', 'R'): -1, ('V', 'E'): -3,
-('T', 'N'): 0, ('P', 'P'): 6, ('V', 'I'): 3, ('V', 'S'): -2,
-('Z', 'P'): -1, ('V', 'M'): 1, ('T', 'F'): -4, ('V', 'Q'): -3,
-('K', 'K'): 5, ('P', 'D'): -3, ('I', 'H'): -4, ('I', 'D'): -3,
-('T', 'R'): -2, ('P', 'L'): -3, ('K', 'G'): -3, ('M', 'N'): -3,
-('P', 'H'): -1, ('F', 'Q'): -6, ('Z', 'G'): -2, ('X', 'L'): -2,
-('T', 'M'): -1, ('Z', 'C'): -7, ('X', 'H'): -2, ('D', 'R'): -3,
-('B', 'W'): -6, ('X', 'D'): -2, ('Z', 'K'): -1, ('F', 'A'): -4,
-('Z', 'W'): -7, ('F', 'E'): -7, ('D', 'N'): 2, ('B', 'K'): 0,
-('X', 'X'): -2, ('F', 'I'): 0, ('B', 'G'): 0, ('X', 'T'): -1,
-('F', 'M'): -1, ('B', 'C'): -6, ('Z', 'I'): -3, ('Z', 'V'): -3,
-('S', 'S'): 3, ('L', 'Q'): -2, ('W', 'E'): -8, ('Q', 'R'): 1,
-('N', 'N'): 4, ('W', 'M'): -6, ('Q', 'C'): -7, ('W', 'I'): -6,
-('S', 'C'): 0, ('L', 'A'): -3, ('S', 'G'): 1, ('L', 'E'): -4,
-('W', 'Q'): -6, ('H', 'G'): -4, ('S', 'K'): -1, ('Q', 'N'): 0,
-('N', 'R'): -1, ('H', 'C'): -4, ('Y', 'N'): -2, ('G', 'Q'): -3,
-('Y', 'F'): 4, ('C', 'A'): -3, ('V', 'L'): 1, ('G', 'E'): -1,
-('G', 'A'): 1, ('K', 'R'): 2, ('E', 'D'): 3, ('Y', 'R'): -5,
-('M', 'Q'): -1, ('T', 'I'): 0, ('C', 'D'): -7, ('V', 'F'): -3,
-('T', 'A'): 1, ('T', 'P'): -1, ('B', 'P'): -2, ('T', 'E'): -2,
-('V', 'N'): -3, ('P', 'G'): -2, ('M', 'A'): -2, ('K', 'H'): -2,
-('V', 'R'): -3, ('P', 'C'): -4, ('M', 'E'): -3, ('K', 'L'): -4,
-('V', 'V'): 5, ('M', 'I'): 1, ('T', 'Q'): -2, ('I', 'G'): -4,
-('P', 'K'): -2, ('M', 'M'): 8, ('K', 'D'): -1, ('I', 'C'): -3,
-('Z', 'D'): 3, ('F', 'R'): -5, ('X', 'K'): -2, ('Q', 'D'): 1,
-('X', 'G'): -2, ('Z', 'L'): -3, ('X', 'C'): -4, ('Z', 'H'): 1,
-('B', 'L'): -4, ('B', 'H'): 1, ('F', 'F'): 8, ('X', 'W'): -5,
-('B', 'D'): 4, ('D', 'A'): 0, ('S', 'L'): -4, ('X', 'S'): -1,
-('F', 'N'): -4, ('S', 'R'): -1, ('W', 'D'): -8, ('V', 'Y'): -3,
-('W', 'L'): -3, ('H', 'R'): 1, ('W', 'H'): -3, ('H', 'N'): 2,
-('W', 'T'): -6, ('T', 'T'): 4, ('S', 'F'): -3, ('W', 'P'): -7,
-('L', 'D'): -5, ('B', 'I'): -3, ('L', 'H'): -3, ('S', 'N'): 1,
-('B', 'T'): 0, ('L', 'L'): 5, ('Y', 'K'): -5, ('E', 'Q'): 2,
-('Y', 'G'): -6, ('Z', 'S'): -1, ('Y', 'C'): -1, ('G', 'D'): 0,
-('B', 'V'): -3, ('E', 'A'): 0, ('Y', 'W'): -2, ('E', 'E'): 5,
-('Y', 'S'): -3, ('C', 'N'): -5, ('V', 'C'): -3, ('T', 'H'): -3,
-('P', 'R'): -1, ('V', 'G'): -2, ('T', 'L'): -3, ('V', 'K'): -4,
-('K', 'Q'): 0, ('R', 'A'): -3, ('I', 'R'): -2, ('T', 'D'): -1,
-('P', 'F'): -5, ('I', 'N'): -2, ('K', 'I'): -3, ('M', 'D'): -4,
-('V', 'W'): -8, ('W', 'W'): 12, ('M', 'H'): -4, ('P', 'N'): -2,
-('K', 'A'): -2, ('M', 'L'): 3, ('K', 'E'): -1, ('Z', 'E'): 4,
-('X', 'N'): -1, ('Z', 'A'): -1, ('Z', 'M'): -2, ('X', 'F'): -3,
-('K', 'C'): -7, ('B', 'Q'): 0, ('X', 'B'): -1, ('B', 'M'): -4,
-('F', 'C'): -6, ('Z', 'Q'): 4, ('X', 'Z'): -1, ('F', 'G'): -5,
-('B', 'E'): 3, ('X', 'V'): -1, ('F', 'K'): -7, ('B', 'A'): 0,
-('X', 'R'): -2, ('D', 'D'): 5, ('W', 'G'): -8, ('Z', 'F'): -6,
-('S', 'Q'): -2, ('W', 'C'): -8, ('W', 'K'): -5, ('H', 'Q'): 3,
-('L', 'C'): -7, ('W', 'N'): -4, ('S', 'A'): 1, ('L', 'G'): -5,
-('W', 'S'): -2, ('S', 'E'): -1, ('H', 'E'): -1, ('S', 'I'): -2,
-('H', 'A'): -3, ('S', 'M'): -2, ('Y', 'L'): -2, ('Y', 'H'): -1,
-('Y', 'D'): -5, ('E', 'R'): -3, ('X', 'P'): -2, ('G', 'G'): 5,
-('G', 'C'): -4, ('E', 'N'): 1, ('Y', 'T'): -3, ('Y', 'P'): -6,
-('T', 'K'): -1, ('A', 'A'): 3, ('P', 'Q'): 0, ('T', 'C'): -3,
-('V', 'H'): -3, ('T', 'G'): -1, ('I', 'Q'): -3, ('Z', 'T'): -2,
-('C', 'R'): -4, ('V', 'P'): -2, ('P', 'E'): -2, ('M', 'C'): -6,
-('K', 'N'): 1, ('I', 'I'): 6, ('P', 'A'): 1, ('M', 'G'): -4,
-('T', 'S'): 2, ('I', 'E'): -3, ('P', 'M'): -3, ('M', 'K'): 0,
-('I', 'A'): -1, ('P', 'I'): -3, ('R', 'R'): 6, ('X', 'M'): -2,
-('L', 'I'): 1, ('X', 'I'): -1, ('Z', 'B'): 2, ('X', 'E'): -1,
-('Z', 'N'): 0, ('X', 'A'): -1, ('B', 'R'): -2, ('B', 'N'): 3,
-('F', 'D'): -7, ('X', 'Y'): -3, ('Z', 'R'): -1, ('F', 'H'): -3,
-('B', 'F'): -5, ('F', 'L'): 0, ('X', 'Q'): -1, ('B', 'B'): 4
-}
+        ('W', 'F'): -1, ('L', 'R'): -4, ('S', 'P'): 1, ('V', 'T'): 0,
+        ('Q', 'Q'): 6, ('N', 'A'): -1, ('Z', 'Y'): -5, ('W', 'R'): 1,
+        ('Q', 'A'): -1, ('S', 'D'): 0, ('H', 'H'): 7, ('S', 'H'): -2,
+        ('H', 'D'): 0, ('L', 'N'): -4, ('W', 'A'): -7, ('Y', 'M'): -4,
+        ('G', 'R'): -4, ('Y', 'I'): -2, ('Y', 'E'): -5, ('B', 'Y'): -3,
+        ('Y', 'A'): -4, ('V', 'D'): -3, ('B', 'S'): 0, ('Y', 'Y'): 8,
+        ('G', 'N'): 0, ('E', 'C'): -7, ('Y', 'Q'): -5, ('Z', 'Z'): 4,
+        ('V', 'A'): 0, ('C', 'C'): 9, ('M', 'R'): -1, ('V', 'E'): -3,
+        ('T', 'N'): 0, ('P', 'P'): 6, ('V', 'I'): 3, ('V', 'S'): -2,
+        ('Z', 'P'): -1, ('V', 'M'): 1, ('T', 'F'): -4, ('V', 'Q'): -3,
+        ('K', 'K'): 5, ('P', 'D'): -3, ('I', 'H'): -4, ('I', 'D'): -3,
+        ('T', 'R'): -2, ('P', 'L'): -3, ('K', 'G'): -3, ('M', 'N'): -3,
+        ('P', 'H'): -1, ('F', 'Q'): -6, ('Z', 'G'): -2, ('X', 'L'): -2,
+        ('T', 'M'): -1, ('Z', 'C'): -7, ('X', 'H'): -2, ('D', 'R'): -3,
+        ('B', 'W'): -6, ('X', 'D'): -2, ('Z', 'K'): -1, ('F', 'A'): -4,
+        ('Z', 'W'): -7, ('F', 'E'): -7, ('D', 'N'): 2, ('B', 'K'): 0,
+        ('X', 'X'): -2, ('F', 'I'): 0, ('B', 'G'): 0, ('X', 'T'): -1,
+        ('F', 'M'): -1, ('B', 'C'): -6, ('Z', 'I'): -3, ('Z', 'V'): -3,
+        ('S', 'S'): 3, ('L', 'Q'): -2, ('W', 'E'): -8, ('Q', 'R'): 1,
+        ('N', 'N'): 4, ('W', 'M'): -6, ('Q', 'C'): -7, ('W', 'I'): -6,
+        ('S', 'C'): 0, ('L', 'A'): -3, ('S', 'G'): 1, ('L', 'E'): -4,
+        ('W', 'Q'): -6, ('H', 'G'): -4, ('S', 'K'): -1, ('Q', 'N'): 0,
+        ('N', 'R'): -1, ('H', 'C'): -4, ('Y', 'N'): -2, ('G', 'Q'): -3,
+        ('Y', 'F'): 4, ('C', 'A'): -3, ('V', 'L'): 1, ('G', 'E'): -1,
+        ('G', 'A'): 1, ('K', 'R'): 2, ('E', 'D'): 3, ('Y', 'R'): -5,
+        ('M', 'Q'): -1, ('T', 'I'): 0, ('C', 'D'): -7, ('V', 'F'): -3,
+        ('T', 'A'): 1, ('T', 'P'): -1, ('B', 'P'): -2, ('T', 'E'): -2,
+        ('V', 'N'): -3, ('P', 'G'): -2, ('M', 'A'): -2, ('K', 'H'): -2,
+        ('V', 'R'): -3, ('P', 'C'): -4, ('M', 'E'): -3, ('K', 'L'): -4,
+        ('V', 'V'): 5, ('M', 'I'): 1, ('T', 'Q'): -2, ('I', 'G'): -4,
+        ('P', 'K'): -2, ('M', 'M'): 8, ('K', 'D'): -1, ('I', 'C'): -3,
+        ('Z', 'D'): 3, ('F', 'R'): -5, ('X', 'K'): -2, ('Q', 'D'): 1,
+        ('X', 'G'): -2, ('Z', 'L'): -3, ('X', 'C'): -4, ('Z', 'H'): 1,
+        ('B', 'L'): -4, ('B', 'H'): 1, ('F', 'F'): 8, ('X', 'W'): -5,
+        ('B', 'D'): 4, ('D', 'A'): 0, ('S', 'L'): -4, ('X', 'S'): -1,
+        ('F', 'N'): -4, ('S', 'R'): -1, ('W', 'D'): -8, ('V', 'Y'): -3,
+        ('W', 'L'): -3, ('H', 'R'): 1, ('W', 'H'): -3, ('H', 'N'): 2,
+        ('W', 'T'): -6, ('T', 'T'): 4, ('S', 'F'): -3, ('W', 'P'): -7,
+        ('L', 'D'): -5, ('B', 'I'): -3, ('L', 'H'): -3, ('S', 'N'): 1,
+        ('B', 'T'): 0, ('L', 'L'): 5, ('Y', 'K'): -5, ('E', 'Q'): 2,
+        ('Y', 'G'): -6, ('Z', 'S'): -1, ('Y', 'C'): -1, ('G', 'D'): 0,
+        ('B', 'V'): -3, ('E', 'A'): 0, ('Y', 'W'): -2, ('E', 'E'): 5,
+        ('Y', 'S'): -3, ('C', 'N'): -5, ('V', 'C'): -3, ('T', 'H'): -3,
+        ('P', 'R'): -1, ('V', 'G'): -2, ('T', 'L'): -3, ('V', 'K'): -4,
+        ('K', 'Q'): 0, ('R', 'A'): -3, ('I', 'R'): -2, ('T', 'D'): -1,
+        ('P', 'F'): -5, ('I', 'N'): -2, ('K', 'I'): -3, ('M', 'D'): -4,
+        ('V', 'W'): -8, ('W', 'W'): 12, ('M', 'H'): -4, ('P', 'N'): -2,
+        ('K', 'A'): -2, ('M', 'L'): 3, ('K', 'E'): -1, ('Z', 'E'): 4,
+        ('X', 'N'): -1, ('Z', 'A'): -1, ('Z', 'M'): -2, ('X', 'F'): -3,
+        ('K', 'C'): -7, ('B', 'Q'): 0, ('X', 'B'): -1, ('B', 'M'): -4,
+        ('F', 'C'): -6, ('Z', 'Q'): 4, ('X', 'Z'): -1, ('F', 'G'): -5,
+        ('B', 'E'): 3, ('X', 'V'): -1, ('F', 'K'): -7, ('B', 'A'): 0,
+        ('X', 'R'): -2, ('D', 'D'): 5, ('W', 'G'): -8, ('Z', 'F'): -6,
+        ('S', 'Q'): -2, ('W', 'C'): -8, ('W', 'K'): -5, ('H', 'Q'): 3,
+        ('L', 'C'): -7, ('W', 'N'): -4, ('S', 'A'): 1, ('L', 'G'): -5,
+        ('W', 'S'): -2, ('S', 'E'): -1, ('H', 'E'): -1, ('S', 'I'): -2,
+        ('H', 'A'): -3, ('S', 'M'): -2, ('Y', 'L'): -2, ('Y', 'H'): -1,
+        ('Y', 'D'): -5, ('E', 'R'): -3, ('X', 'P'): -2, ('G', 'G'): 5,
+        ('G', 'C'): -4, ('E', 'N'): 1, ('Y', 'T'): -3, ('Y', 'P'): -6,
+        ('T', 'K'): -1, ('A', 'A'): 3, ('P', 'Q'): 0, ('T', 'C'): -3,
+        ('V', 'H'): -3, ('T', 'G'): -1, ('I', 'Q'): -3, ('Z', 'T'): -2,
+        ('C', 'R'): -4, ('V', 'P'): -2, ('P', 'E'): -2, ('M', 'C'): -6,
+        ('K', 'N'): 1, ('I', 'I'): 6, ('P', 'A'): 1, ('M', 'G'): -4,
+        ('T', 'S'): 2, ('I', 'E'): -3, ('P', 'M'): -3, ('M', 'K'): 0,
+        ('I', 'A'): -1, ('P', 'I'): -3, ('R', 'R'): 6, ('X', 'M'): -2,
+        ('L', 'I'): 1, ('X', 'I'): -1, ('Z', 'B'): 2, ('X', 'E'): -1,
+        ('Z', 'N'): 0, ('X', 'A'): -1, ('B', 'R'): -2, ('B', 'N'): 3,
+        ('F', 'D'): -7, ('X', 'Y'): -3, ('Z', 'R'): -1, ('F', 'H'): -3,
+        ('B', 'F'): -5, ('F', 'L'): 0, ('X', 'Q'): -1, ('B', 'B'): 4
+        }
 pam120 = _temp()
 del _temp
 
@@ -2201,76 +2201,76 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/pam180.cmp
 def _temp():
     return {
-('W', 'F'): 0, ('L', 'R'): -4, ('S', 'P'): 1, ('V', 'T'): 0,
-('Q', 'Q'): 6, ('N', 'A'): 0, ('Z', 'Y'): -6, ('W', 'R'): 2,
-('Q', 'A'): -1, ('S', 'D'): 0, ('H', 'H'): 8, ('S', 'H'): -2,
-('H', 'D'): 0, ('L', 'N'): -4, ('W', 'A'): -8, ('Y', 'M'): -4,
-('G', 'R'): -4, ('Y', 'I'): -2, ('Y', 'E'): -6, ('B', 'Y'): -4,
-('Y', 'A'): -5, ('V', 'D'): -3, ('B', 'S'): 1, ('Y', 'Y'): 11,
-('G', 'N'): 0, ('E', 'C'): -7, ('Y', 'Q'): -6, ('Z', 'Z'): 5,
-('V', 'A'): 0, ('C', 'C'): 13, ('M', 'R'): -1, ('V', 'E'): -3,
-('T', 'N'): 0, ('P', 'P'): 8, ('V', 'I'): 5, ('V', 'S'): -2,
-('Z', 'P'): -1, ('V', 'M'): 2, ('T', 'F'): -4, ('V', 'Q'): -3,
-('K', 'K'): 6, ('P', 'D'): -2, ('I', 'H'): -4, ('I', 'D'): -3,
-('T', 'R'): -2, ('P', 'L'): -4, ('K', 'G'): -3, ('M', 'N'): -3,
-('P', 'H'): -1, ('F', 'Q'): -6, ('Z', 'G'): -1, ('X', 'L'): -2,
-('T', 'M'): -1, ('Z', 'C'): -7, ('X', 'H'): -1, ('D', 'R'): -3,
-('B', 'W'): -7, ('X', 'D'): -1, ('Z', 'K'): 0, ('F', 'A'): -5,
-('Z', 'W'): -8, ('F', 'E'): -7, ('D', 'N'): 3, ('B', 'K'): 0,
-('X', 'X'): -1, ('F', 'I'): 1, ('B', 'G'): 0, ('X', 'T'): -1,
-('F', 'M'): 0, ('B', 'C'): -6, ('Z', 'I'): -3, ('Z', 'V'): -3,
-('S', 'S'): 3, ('L', 'Q'): -2, ('W', 'E'): -9, ('Q', 'R'): 1,
-('N', 'N'): 4, ('W', 'M'): -6, ('Q', 'C'): -7, ('W', 'I'): -7,
-('S', 'C'): 0, ('L', 'A'): -3, ('S', 'G'): 1, ('L', 'E'): -5,
-('W', 'Q'): -6, ('H', 'G'): -3, ('S', 'K'): -1, ('Q', 'N'): 0,
-('N', 'R'): -1, ('H', 'C'): -4, ('Y', 'N'): -2, ('G', 'Q'): -2,
-('Y', 'F'): 7, ('C', 'A'): -3, ('V', 'L'): 2, ('G', 'E'): 0,
-('G', 'A'): 1, ('K', 'R'): 4, ('E', 'D'): 4, ('Y', 'R'): -6,
-('M', 'Q'): -1, ('T', 'I'): 0, ('C', 'D'): -7, ('V', 'F'): -2,
-('T', 'A'): 2, ('T', 'P'): 0, ('B', 'P'): -2, ('T', 'E'): -1,
-('V', 'N'): -3, ('P', 'G'): -1, ('M', 'A'): -2, ('K', 'H'): -1,
-('V', 'R'): -4, ('P', 'C'): -4, ('M', 'E'): -3, ('K', 'L'): -4,
-('V', 'V'): 6, ('M', 'I'): 2, ('T', 'Q'): -2, ('I', 'G'): -4,
-('P', 'K'): -2, ('M', 'M'): 9, ('K', 'D'): 0, ('I', 'C'): -3,
-('Z', 'D'): 3, ('F', 'R'): -6, ('X', 'K'): -1, ('Q', 'D'): 2,
-('X', 'G'): -2, ('Z', 'L'): -3, ('X', 'C'): -4, ('Z', 'H'): 2,
-('B', 'L'): -5, ('B', 'H'): 1, ('F', 'F'): 10, ('X', 'W'): -6,
-('B', 'D'): 4, ('D', 'A'): 0, ('S', 'L'): -4, ('X', 'S'): 0,
-('F', 'N'): -5, ('S', 'R'): -1, ('W', 'D'): -9, ('V', 'Y'): -4,
-('W', 'L'): -3, ('H', 'R'): 2, ('W', 'H'): -4, ('H', 'N'): 2,
-('W', 'T'): -7, ('T', 'T'): 4, ('S', 'F'): -4, ('W', 'P'): -7,
-('L', 'D'): -6, ('B', 'I'): -3, ('L', 'H'): -3, ('S', 'N'): 1,
-('B', 'T'): 0, ('L', 'L'): 7, ('Y', 'K'): -6, ('E', 'Q'): 3,
-('Y', 'G'): -7, ('Z', 'S'): -1, ('Y', 'C'): 0, ('G', 'D'): 0,
-('B', 'V'): -3, ('E', 'A'): 0, ('Y', 'W'): -1, ('E', 'E'): 5,
-('Y', 'S'): -4, ('C', 'N'): -5, ('V', 'C'): -3, ('T', 'H'): -2,
-('P', 'R'): -1, ('V', 'G'): -2, ('T', 'L'): -3, ('V', 'K'): -4,
-('K', 'Q'): 0, ('R', 'A'): -3, ('I', 'R'): -3, ('T', 'D'): -1,
-('P', 'F'): -6, ('I', 'N'): -3, ('K', 'I'): -3, ('M', 'D'): -4,
-('V', 'W'): -8, ('W', 'W'): 18, ('M', 'H'): -3, ('P', 'N'): -1,
-('K', 'A'): -2, ('M', 'L'): 4, ('K', 'E'): -1, ('Z', 'E'): 5,
-('X', 'N'): -1, ('Z', 'A'): 0, ('Z', 'M'): -2, ('X', 'F'): -3,
-('K', 'C'): -7, ('B', 'Q'): 1, ('X', 'B'): -1, ('B', 'M'): -3,
-('F', 'C'): -6, ('Z', 'Q'): 5, ('X', 'Z'): -1, ('F', 'G'): -6,
-('B', 'E'): 3, ('X', 'V'): -1, ('F', 'K'): -7, ('B', 'A'): 0,
-('X', 'R'): -2, ('D', 'D'): 5, ('W', 'G'): -9, ('Z', 'F'): -7,
-('S', 'Q'): -1, ('W', 'C'): -10, ('W', 'K'): -5, ('H', 'Q'): 4,
-('L', 'C'): -8, ('W', 'N'): -5, ('S', 'A'): 1, ('L', 'G'): -6,
-('W', 'S'): -3, ('S', 'E'): -1, ('H', 'E'): 0, ('S', 'I'): -2,
-('H', 'A'): -2, ('S', 'M'): -2, ('Y', 'L'): -2, ('Y', 'H'): 0,
-('Y', 'D'): -6, ('E', 'R'): -2, ('X', 'P'): -1, ('G', 'G'): 6,
-('G', 'C'): -5, ('E', 'N'): 2, ('Y', 'T'): -4, ('Y', 'P'): -7,
-('T', 'K'): 0, ('A', 'A'): 3, ('P', 'Q'): 0, ('T', 'C'): -3,
-('V', 'H'): -3, ('T', 'G'): -1, ('I', 'Q'): -3, ('Z', 'T'): -1,
-('C', 'R'): -5, ('V', 'P'): -2, ('P', 'E'): -1, ('M', 'C'): -7,
-('K', 'N'): 1, ('I', 'I'): 6, ('P', 'A'): 1, ('M', 'G'): -4,
-('T', 'S'): 2, ('I', 'E'): -3, ('P', 'M'): -3, ('M', 'K'): 1,
-('I', 'A'): -1, ('P', 'I'): -3, ('R', 'R'): 8, ('X', 'M'): -1,
-('L', 'I'): 2, ('X', 'I'): -1, ('Z', 'B'): 3, ('X', 'E'): -1,
-('Z', 'N'): 1, ('X', 'A'): -1, ('B', 'R'): -2, ('B', 'N'): 3,
-('F', 'D'): -8, ('X', 'Y'): -3, ('Z', 'R'): 0, ('F', 'H'): -3,
-('B', 'F'): -6, ('F', 'L'): 1, ('X', 'Q'): -1, ('B', 'B'): 4
-}
+        ('W', 'F'): 0, ('L', 'R'): -4, ('S', 'P'): 1, ('V', 'T'): 0,
+        ('Q', 'Q'): 6, ('N', 'A'): 0, ('Z', 'Y'): -6, ('W', 'R'): 2,
+        ('Q', 'A'): -1, ('S', 'D'): 0, ('H', 'H'): 8, ('S', 'H'): -2,
+        ('H', 'D'): 0, ('L', 'N'): -4, ('W', 'A'): -8, ('Y', 'M'): -4,
+        ('G', 'R'): -4, ('Y', 'I'): -2, ('Y', 'E'): -6, ('B', 'Y'): -4,
+        ('Y', 'A'): -5, ('V', 'D'): -3, ('B', 'S'): 1, ('Y', 'Y'): 11,
+        ('G', 'N'): 0, ('E', 'C'): -7, ('Y', 'Q'): -6, ('Z', 'Z'): 5,
+        ('V', 'A'): 0, ('C', 'C'): 13, ('M', 'R'): -1, ('V', 'E'): -3,
+        ('T', 'N'): 0, ('P', 'P'): 8, ('V', 'I'): 5, ('V', 'S'): -2,
+        ('Z', 'P'): -1, ('V', 'M'): 2, ('T', 'F'): -4, ('V', 'Q'): -3,
+        ('K', 'K'): 6, ('P', 'D'): -2, ('I', 'H'): -4, ('I', 'D'): -3,
+        ('T', 'R'): -2, ('P', 'L'): -4, ('K', 'G'): -3, ('M', 'N'): -3,
+        ('P', 'H'): -1, ('F', 'Q'): -6, ('Z', 'G'): -1, ('X', 'L'): -2,
+        ('T', 'M'): -1, ('Z', 'C'): -7, ('X', 'H'): -1, ('D', 'R'): -3,
+        ('B', 'W'): -7, ('X', 'D'): -1, ('Z', 'K'): 0, ('F', 'A'): -5,
+        ('Z', 'W'): -8, ('F', 'E'): -7, ('D', 'N'): 3, ('B', 'K'): 0,
+        ('X', 'X'): -1, ('F', 'I'): 1, ('B', 'G'): 0, ('X', 'T'): -1,
+        ('F', 'M'): 0, ('B', 'C'): -6, ('Z', 'I'): -3, ('Z', 'V'): -3,
+        ('S', 'S'): 3, ('L', 'Q'): -2, ('W', 'E'): -9, ('Q', 'R'): 1,
+        ('N', 'N'): 4, ('W', 'M'): -6, ('Q', 'C'): -7, ('W', 'I'): -7,
+        ('S', 'C'): 0, ('L', 'A'): -3, ('S', 'G'): 1, ('L', 'E'): -5,
+        ('W', 'Q'): -6, ('H', 'G'): -3, ('S', 'K'): -1, ('Q', 'N'): 0,
+        ('N', 'R'): -1, ('H', 'C'): -4, ('Y', 'N'): -2, ('G', 'Q'): -2,
+        ('Y', 'F'): 7, ('C', 'A'): -3, ('V', 'L'): 2, ('G', 'E'): 0,
+        ('G', 'A'): 1, ('K', 'R'): 4, ('E', 'D'): 4, ('Y', 'R'): -6,
+        ('M', 'Q'): -1, ('T', 'I'): 0, ('C', 'D'): -7, ('V', 'F'): -2,
+        ('T', 'A'): 2, ('T', 'P'): 0, ('B', 'P'): -2, ('T', 'E'): -1,
+        ('V', 'N'): -3, ('P', 'G'): -1, ('M', 'A'): -2, ('K', 'H'): -1,
+        ('V', 'R'): -4, ('P', 'C'): -4, ('M', 'E'): -3, ('K', 'L'): -4,
+        ('V', 'V'): 6, ('M', 'I'): 2, ('T', 'Q'): -2, ('I', 'G'): -4,
+        ('P', 'K'): -2, ('M', 'M'): 9, ('K', 'D'): 0, ('I', 'C'): -3,
+        ('Z', 'D'): 3, ('F', 'R'): -6, ('X', 'K'): -1, ('Q', 'D'): 2,
+        ('X', 'G'): -2, ('Z', 'L'): -3, ('X', 'C'): -4, ('Z', 'H'): 2,
+        ('B', 'L'): -5, ('B', 'H'): 1, ('F', 'F'): 10, ('X', 'W'): -6,
+        ('B', 'D'): 4, ('D', 'A'): 0, ('S', 'L'): -4, ('X', 'S'): 0,
+        ('F', 'N'): -5, ('S', 'R'): -1, ('W', 'D'): -9, ('V', 'Y'): -4,
+        ('W', 'L'): -3, ('H', 'R'): 2, ('W', 'H'): -4, ('H', 'N'): 2,
+        ('W', 'T'): -7, ('T', 'T'): 4, ('S', 'F'): -4, ('W', 'P'): -7,
+        ('L', 'D'): -6, ('B', 'I'): -3, ('L', 'H'): -3, ('S', 'N'): 1,
+        ('B', 'T'): 0, ('L', 'L'): 7, ('Y', 'K'): -6, ('E', 'Q'): 3,
+        ('Y', 'G'): -7, ('Z', 'S'): -1, ('Y', 'C'): 0, ('G', 'D'): 0,
+        ('B', 'V'): -3, ('E', 'A'): 0, ('Y', 'W'): -1, ('E', 'E'): 5,
+        ('Y', 'S'): -4, ('C', 'N'): -5, ('V', 'C'): -3, ('T', 'H'): -2,
+        ('P', 'R'): -1, ('V', 'G'): -2, ('T', 'L'): -3, ('V', 'K'): -4,
+        ('K', 'Q'): 0, ('R', 'A'): -3, ('I', 'R'): -3, ('T', 'D'): -1,
+        ('P', 'F'): -6, ('I', 'N'): -3, ('K', 'I'): -3, ('M', 'D'): -4,
+        ('V', 'W'): -8, ('W', 'W'): 18, ('M', 'H'): -3, ('P', 'N'): -1,
+        ('K', 'A'): -2, ('M', 'L'): 4, ('K', 'E'): -1, ('Z', 'E'): 5,
+        ('X', 'N'): -1, ('Z', 'A'): 0, ('Z', 'M'): -2, ('X', 'F'): -3,
+        ('K', 'C'): -7, ('B', 'Q'): 1, ('X', 'B'): -1, ('B', 'M'): -3,
+        ('F', 'C'): -6, ('Z', 'Q'): 5, ('X', 'Z'): -1, ('F', 'G'): -6,
+        ('B', 'E'): 3, ('X', 'V'): -1, ('F', 'K'): -7, ('B', 'A'): 0,
+        ('X', 'R'): -2, ('D', 'D'): 5, ('W', 'G'): -9, ('Z', 'F'): -7,
+        ('S', 'Q'): -1, ('W', 'C'): -10, ('W', 'K'): -5, ('H', 'Q'): 4,
+        ('L', 'C'): -8, ('W', 'N'): -5, ('S', 'A'): 1, ('L', 'G'): -6,
+        ('W', 'S'): -3, ('S', 'E'): -1, ('H', 'E'): 0, ('S', 'I'): -2,
+        ('H', 'A'): -2, ('S', 'M'): -2, ('Y', 'L'): -2, ('Y', 'H'): 0,
+        ('Y', 'D'): -6, ('E', 'R'): -2, ('X', 'P'): -1, ('G', 'G'): 6,
+        ('G', 'C'): -5, ('E', 'N'): 2, ('Y', 'T'): -4, ('Y', 'P'): -7,
+        ('T', 'K'): 0, ('A', 'A'): 3, ('P', 'Q'): 0, ('T', 'C'): -3,
+        ('V', 'H'): -3, ('T', 'G'): -1, ('I', 'Q'): -3, ('Z', 'T'): -1,
+        ('C', 'R'): -5, ('V', 'P'): -2, ('P', 'E'): -1, ('M', 'C'): -7,
+        ('K', 'N'): 1, ('I', 'I'): 6, ('P', 'A'): 1, ('M', 'G'): -4,
+        ('T', 'S'): 2, ('I', 'E'): -3, ('P', 'M'): -3, ('M', 'K'): 1,
+        ('I', 'A'): -1, ('P', 'I'): -3, ('R', 'R'): 8, ('X', 'M'): -1,
+        ('L', 'I'): 2, ('X', 'I'): -1, ('Z', 'B'): 3, ('X', 'E'): -1,
+        ('Z', 'N'): 1, ('X', 'A'): -1, ('B', 'R'): -2, ('B', 'N'): 3,
+        ('F', 'D'): -8, ('X', 'Y'): -3, ('Z', 'R'): 0, ('F', 'H'): -3,
+        ('B', 'F'): -6, ('F', 'L'): 1, ('X', 'Q'): -1, ('B', 'B'): 4
+        }
 pam180 = _temp()
 del _temp
 
@@ -2278,76 +2278,76 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/pam250.cmp
 def _temp():
     return {
-('W', 'F'): 0, ('L', 'R'): -3, ('S', 'P'): 1, ('V', 'T'): 0,
-('Q', 'Q'): 4, ('N', 'A'): 0, ('Z', 'Y'): -4, ('W', 'R'): 2,
-('Q', 'A'): 0, ('S', 'D'): 0, ('H', 'H'): 6, ('S', 'H'): -1,
-('H', 'D'): 1, ('L', 'N'): -3, ('W', 'A'): -6, ('Y', 'M'): -2,
-('G', 'R'): -3, ('Y', 'I'): -1, ('Y', 'E'): -4, ('B', 'Y'): -3,
-('Y', 'A'): -3, ('V', 'D'): -2, ('B', 'S'): 0, ('Y', 'Y'): 10,
-('G', 'N'): 0, ('E', 'C'): -5, ('Y', 'Q'): -4, ('Z', 'Z'): 3,
-('V', 'A'): 0, ('C', 'C'): 12, ('M', 'R'): 0, ('V', 'E'): -2,
-('T', 'N'): 0, ('P', 'P'): 6, ('V', 'I'): 4, ('V', 'S'): -1,
-('Z', 'P'): 0, ('V', 'M'): 2, ('T', 'F'): -3, ('V', 'Q'): -2,
-('K', 'K'): 5, ('P', 'D'): -1, ('I', 'H'): -2, ('I', 'D'): -2,
-('T', 'R'): -1, ('P', 'L'): -3, ('K', 'G'): -2, ('M', 'N'): -2,
-('P', 'H'): 0, ('F', 'Q'): -5, ('Z', 'G'): 0, ('X', 'L'): -1,
-('T', 'M'): -1, ('Z', 'C'): -5, ('X', 'H'): -1, ('D', 'R'): -1,
-('B', 'W'): -5, ('X', 'D'): -1, ('Z', 'K'): 0, ('F', 'A'): -3,
-('Z', 'W'): -6, ('F', 'E'): -5, ('D', 'N'): 2, ('B', 'K'): 1,
-('X', 'X'): -1, ('F', 'I'): 1, ('B', 'G'): 0, ('X', 'T'): 0,
-('F', 'M'): 0, ('B', 'C'): -4, ('Z', 'I'): -2, ('Z', 'V'): -2,
-('S', 'S'): 2, ('L', 'Q'): -2, ('W', 'E'): -7, ('Q', 'R'): 1,
-('N', 'N'): 2, ('W', 'M'): -4, ('Q', 'C'): -5, ('W', 'I'): -5,
-('S', 'C'): 0, ('L', 'A'): -2, ('S', 'G'): 1, ('L', 'E'): -3,
-('W', 'Q'): -5, ('H', 'G'): -2, ('S', 'K'): 0, ('Q', 'N'): 1,
-('N', 'R'): 0, ('H', 'C'): -3, ('Y', 'N'): -2, ('G', 'Q'): -1,
-('Y', 'F'): 7, ('C', 'A'): -2, ('V', 'L'): 2, ('G', 'E'): 0,
-('G', 'A'): 1, ('K', 'R'): 3, ('E', 'D'): 3, ('Y', 'R'): -4,
-('M', 'Q'): -1, ('T', 'I'): 0, ('C', 'D'): -5, ('V', 'F'): -1,
-('T', 'A'): 1, ('T', 'P'): 0, ('B', 'P'): -1, ('T', 'E'): 0,
-('V', 'N'): -2, ('P', 'G'): 0, ('M', 'A'): -1, ('K', 'H'): 0,
-('V', 'R'): -2, ('P', 'C'): -3, ('M', 'E'): -2, ('K', 'L'): -3,
-('V', 'V'): 4, ('M', 'I'): 2, ('T', 'Q'): -1, ('I', 'G'): -3,
-('P', 'K'): -1, ('M', 'M'): 6, ('K', 'D'): 0, ('I', 'C'): -2,
-('Z', 'D'): 3, ('F', 'R'): -4, ('X', 'K'): -1, ('Q', 'D'): 2,
-('X', 'G'): -1, ('Z', 'L'): -3, ('X', 'C'): -3, ('Z', 'H'): 2,
-('B', 'L'): -3, ('B', 'H'): 1, ('F', 'F'): 9, ('X', 'W'): -4,
-('B', 'D'): 3, ('D', 'A'): 0, ('S', 'L'): -3, ('X', 'S'): 0,
-('F', 'N'): -3, ('S', 'R'): 0, ('W', 'D'): -7, ('V', 'Y'): -2,
-('W', 'L'): -2, ('H', 'R'): 2, ('W', 'H'): -3, ('H', 'N'): 2,
-('W', 'T'): -5, ('T', 'T'): 3, ('S', 'F'): -3, ('W', 'P'): -6,
-('L', 'D'): -4, ('B', 'I'): -2, ('L', 'H'): -2, ('S', 'N'): 1,
-('B', 'T'): 0, ('L', 'L'): 6, ('Y', 'K'): -4, ('E', 'Q'): 2,
-('Y', 'G'): -5, ('Z', 'S'): 0, ('Y', 'C'): 0, ('G', 'D'): 1,
-('B', 'V'): -2, ('E', 'A'): 0, ('Y', 'W'): 0, ('E', 'E'): 4,
-('Y', 'S'): -3, ('C', 'N'): -4, ('V', 'C'): -2, ('T', 'H'): -1,
-('P', 'R'): 0, ('V', 'G'): -1, ('T', 'L'): -2, ('V', 'K'): -2,
-('K', 'Q'): 1, ('R', 'A'): -2, ('I', 'R'): -2, ('T', 'D'): 0,
-('P', 'F'): -5, ('I', 'N'): -2, ('K', 'I'): -2, ('M', 'D'): -3,
-('V', 'W'): -6, ('W', 'W'): 17, ('M', 'H'): -2, ('P', 'N'): 0,
-('K', 'A'): -1, ('M', 'L'): 4, ('K', 'E'): 0, ('Z', 'E'): 3,
-('X', 'N'): 0, ('Z', 'A'): 0, ('Z', 'M'): -2, ('X', 'F'): -2,
-('K', 'C'): -5, ('B', 'Q'): 1, ('X', 'B'): -1, ('B', 'M'): -2,
-('F', 'C'): -4, ('Z', 'Q'): 3, ('X', 'Z'): -1, ('F', 'G'): -5,
-('B', 'E'): 3, ('X', 'V'): -1, ('F', 'K'): -5, ('B', 'A'): 0,
-('X', 'R'): -1, ('D', 'D'): 4, ('W', 'G'): -7, ('Z', 'F'): -5,
-('S', 'Q'): -1, ('W', 'C'): -8, ('W', 'K'): -3, ('H', 'Q'): 3,
-('L', 'C'): -6, ('W', 'N'): -4, ('S', 'A'): 1, ('L', 'G'): -4,
-('W', 'S'): -2, ('S', 'E'): 0, ('H', 'E'): 1, ('S', 'I'): -1,
-('H', 'A'): -1, ('S', 'M'): -2, ('Y', 'L'): -1, ('Y', 'H'): 0,
-('Y', 'D'): -4, ('E', 'R'): -1, ('X', 'P'): -1, ('G', 'G'): 5,
-('G', 'C'): -3, ('E', 'N'): 1, ('Y', 'T'): -3, ('Y', 'P'): -5,
-('T', 'K'): 0, ('A', 'A'): 2, ('P', 'Q'): 0, ('T', 'C'): -2,
-('V', 'H'): -2, ('T', 'G'): 0, ('I', 'Q'): -2, ('Z', 'T'): -1,
-('C', 'R'): -4, ('V', 'P'): -1, ('P', 'E'): -1, ('M', 'C'): -5,
-('K', 'N'): 1, ('I', 'I'): 5, ('P', 'A'): 1, ('M', 'G'): -3,
-('T', 'S'): 1, ('I', 'E'): -2, ('P', 'M'): -2, ('M', 'K'): 0,
-('I', 'A'): -1, ('P', 'I'): -2, ('R', 'R'): 6, ('X', 'M'): -1,
-('L', 'I'): 2, ('X', 'I'): -1, ('Z', 'B'): 2, ('X', 'E'): -1,
-('Z', 'N'): 1, ('X', 'A'): 0, ('B', 'R'): -1, ('B', 'N'): 2,
-('F', 'D'): -6, ('X', 'Y'): -2, ('Z', 'R'): 0, ('F', 'H'): -2,
-('B', 'F'): -4, ('F', 'L'): 2, ('X', 'Q'): -1, ('B', 'B'): 3
-}
+        ('W', 'F'): 0, ('L', 'R'): -3, ('S', 'P'): 1, ('V', 'T'): 0,
+        ('Q', 'Q'): 4, ('N', 'A'): 0, ('Z', 'Y'): -4, ('W', 'R'): 2,
+        ('Q', 'A'): 0, ('S', 'D'): 0, ('H', 'H'): 6, ('S', 'H'): -1,
+        ('H', 'D'): 1, ('L', 'N'): -3, ('W', 'A'): -6, ('Y', 'M'): -2,
+        ('G', 'R'): -3, ('Y', 'I'): -1, ('Y', 'E'): -4, ('B', 'Y'): -3,
+        ('Y', 'A'): -3, ('V', 'D'): -2, ('B', 'S'): 0, ('Y', 'Y'): 10,
+        ('G', 'N'): 0, ('E', 'C'): -5, ('Y', 'Q'): -4, ('Z', 'Z'): 3,
+        ('V', 'A'): 0, ('C', 'C'): 12, ('M', 'R'): 0, ('V', 'E'): -2,
+        ('T', 'N'): 0, ('P', 'P'): 6, ('V', 'I'): 4, ('V', 'S'): -1,
+        ('Z', 'P'): 0, ('V', 'M'): 2, ('T', 'F'): -3, ('V', 'Q'): -2,
+        ('K', 'K'): 5, ('P', 'D'): -1, ('I', 'H'): -2, ('I', 'D'): -2,
+        ('T', 'R'): -1, ('P', 'L'): -3, ('K', 'G'): -2, ('M', 'N'): -2,
+        ('P', 'H'): 0, ('F', 'Q'): -5, ('Z', 'G'): 0, ('X', 'L'): -1,
+        ('T', 'M'): -1, ('Z', 'C'): -5, ('X', 'H'): -1, ('D', 'R'): -1,
+        ('B', 'W'): -5, ('X', 'D'): -1, ('Z', 'K'): 0, ('F', 'A'): -3,
+        ('Z', 'W'): -6, ('F', 'E'): -5, ('D', 'N'): 2, ('B', 'K'): 1,
+        ('X', 'X'): -1, ('F', 'I'): 1, ('B', 'G'): 0, ('X', 'T'): 0,
+        ('F', 'M'): 0, ('B', 'C'): -4, ('Z', 'I'): -2, ('Z', 'V'): -2,
+        ('S', 'S'): 2, ('L', 'Q'): -2, ('W', 'E'): -7, ('Q', 'R'): 1,
+        ('N', 'N'): 2, ('W', 'M'): -4, ('Q', 'C'): -5, ('W', 'I'): -5,
+        ('S', 'C'): 0, ('L', 'A'): -2, ('S', 'G'): 1, ('L', 'E'): -3,
+        ('W', 'Q'): -5, ('H', 'G'): -2, ('S', 'K'): 0, ('Q', 'N'): 1,
+        ('N', 'R'): 0, ('H', 'C'): -3, ('Y', 'N'): -2, ('G', 'Q'): -1,
+        ('Y', 'F'): 7, ('C', 'A'): -2, ('V', 'L'): 2, ('G', 'E'): 0,
+        ('G', 'A'): 1, ('K', 'R'): 3, ('E', 'D'): 3, ('Y', 'R'): -4,
+        ('M', 'Q'): -1, ('T', 'I'): 0, ('C', 'D'): -5, ('V', 'F'): -1,
+        ('T', 'A'): 1, ('T', 'P'): 0, ('B', 'P'): -1, ('T', 'E'): 0,
+        ('V', 'N'): -2, ('P', 'G'): 0, ('M', 'A'): -1, ('K', 'H'): 0,
+        ('V', 'R'): -2, ('P', 'C'): -3, ('M', 'E'): -2, ('K', 'L'): -3,
+        ('V', 'V'): 4, ('M', 'I'): 2, ('T', 'Q'): -1, ('I', 'G'): -3,
+        ('P', 'K'): -1, ('M', 'M'): 6, ('K', 'D'): 0, ('I', 'C'): -2,
+        ('Z', 'D'): 3, ('F', 'R'): -4, ('X', 'K'): -1, ('Q', 'D'): 2,
+        ('X', 'G'): -1, ('Z', 'L'): -3, ('X', 'C'): -3, ('Z', 'H'): 2,
+        ('B', 'L'): -3, ('B', 'H'): 1, ('F', 'F'): 9, ('X', 'W'): -4,
+        ('B', 'D'): 3, ('D', 'A'): 0, ('S', 'L'): -3, ('X', 'S'): 0,
+        ('F', 'N'): -3, ('S', 'R'): 0, ('W', 'D'): -7, ('V', 'Y'): -2,
+        ('W', 'L'): -2, ('H', 'R'): 2, ('W', 'H'): -3, ('H', 'N'): 2,
+        ('W', 'T'): -5, ('T', 'T'): 3, ('S', 'F'): -3, ('W', 'P'): -6,
+        ('L', 'D'): -4, ('B', 'I'): -2, ('L', 'H'): -2, ('S', 'N'): 1,
+        ('B', 'T'): 0, ('L', 'L'): 6, ('Y', 'K'): -4, ('E', 'Q'): 2,
+        ('Y', 'G'): -5, ('Z', 'S'): 0, ('Y', 'C'): 0, ('G', 'D'): 1,
+        ('B', 'V'): -2, ('E', 'A'): 0, ('Y', 'W'): 0, ('E', 'E'): 4,
+        ('Y', 'S'): -3, ('C', 'N'): -4, ('V', 'C'): -2, ('T', 'H'): -1,
+        ('P', 'R'): 0, ('V', 'G'): -1, ('T', 'L'): -2, ('V', 'K'): -2,
+        ('K', 'Q'): 1, ('R', 'A'): -2, ('I', 'R'): -2, ('T', 'D'): 0,
+        ('P', 'F'): -5, ('I', 'N'): -2, ('K', 'I'): -2, ('M', 'D'): -3,
+        ('V', 'W'): -6, ('W', 'W'): 17, ('M', 'H'): -2, ('P', 'N'): 0,
+        ('K', 'A'): -1, ('M', 'L'): 4, ('K', 'E'): 0, ('Z', 'E'): 3,
+        ('X', 'N'): 0, ('Z', 'A'): 0, ('Z', 'M'): -2, ('X', 'F'): -2,
+        ('K', 'C'): -5, ('B', 'Q'): 1, ('X', 'B'): -1, ('B', 'M'): -2,
+        ('F', 'C'): -4, ('Z', 'Q'): 3, ('X', 'Z'): -1, ('F', 'G'): -5,
+        ('B', 'E'): 3, ('X', 'V'): -1, ('F', 'K'): -5, ('B', 'A'): 0,
+        ('X', 'R'): -1, ('D', 'D'): 4, ('W', 'G'): -7, ('Z', 'F'): -5,
+        ('S', 'Q'): -1, ('W', 'C'): -8, ('W', 'K'): -3, ('H', 'Q'): 3,
+        ('L', 'C'): -6, ('W', 'N'): -4, ('S', 'A'): 1, ('L', 'G'): -4,
+        ('W', 'S'): -2, ('S', 'E'): 0, ('H', 'E'): 1, ('S', 'I'): -1,
+        ('H', 'A'): -1, ('S', 'M'): -2, ('Y', 'L'): -1, ('Y', 'H'): 0,
+        ('Y', 'D'): -4, ('E', 'R'): -1, ('X', 'P'): -1, ('G', 'G'): 5,
+        ('G', 'C'): -3, ('E', 'N'): 1, ('Y', 'T'): -3, ('Y', 'P'): -5,
+        ('T', 'K'): 0, ('A', 'A'): 2, ('P', 'Q'): 0, ('T', 'C'): -2,
+        ('V', 'H'): -2, ('T', 'G'): 0, ('I', 'Q'): -2, ('Z', 'T'): -1,
+        ('C', 'R'): -4, ('V', 'P'): -1, ('P', 'E'): -1, ('M', 'C'): -5,
+        ('K', 'N'): 1, ('I', 'I'): 5, ('P', 'A'): 1, ('M', 'G'): -3,
+        ('T', 'S'): 1, ('I', 'E'): -2, ('P', 'M'): -2, ('M', 'K'): 0,
+        ('I', 'A'): -1, ('P', 'I'): -2, ('R', 'R'): 6, ('X', 'M'): -1,
+        ('L', 'I'): 2, ('X', 'I'): -1, ('Z', 'B'): 2, ('X', 'E'): -1,
+        ('Z', 'N'): 1, ('X', 'A'): 0, ('B', 'R'): -1, ('B', 'N'): 2,
+        ('F', 'D'): -6, ('X', 'Y'): -2, ('Z', 'R'): 0, ('F', 'H'): -2,
+        ('B', 'F'): -4, ('F', 'L'): 2, ('X', 'Q'): -1, ('B', 'B'): 3
+        }
 pam250 = _temp()
 del _temp
 
@@ -2355,76 +2355,76 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/pam30.cmp
 def _temp():
     return {
-('W', 'F'): -4, ('L', 'R'): -8, ('S', 'P'): -2, ('V', 'T'): -3,
-('Q', 'Q'): 8, ('N', 'A'): -4, ('Z', 'Y'): -9, ('W', 'R'): -2,
-('Q', 'A'): -4, ('S', 'D'): -4, ('H', 'H'): 9, ('S', 'H'): -6,
-('H', 'D'): -4, ('L', 'N'): -7, ('W', 'A'): -13, ('Y', 'M'): -11,
-('G', 'R'): -9, ('Y', 'I'): -6, ('Y', 'E'): -8, ('B', 'Y'): -6,
-('Y', 'A'): -8, ('V', 'D'): -8, ('B', 'S'): -1, ('Y', 'Y'): 10,
-('G', 'N'): -3, ('E', 'C'): -14, ('Y', 'Q'): -12, ('Z', 'Z'): 6,
-('V', 'A'): -2, ('C', 'C'): 10, ('M', 'R'): -4, ('V', 'E'): -6,
-('T', 'N'): -2, ('P', 'P'): 8, ('V', 'I'): 2, ('V', 'S'): -6,
-('Z', 'P'): -4, ('V', 'M'): -1, ('T', 'F'): -9, ('V', 'Q'): -7,
-('K', 'K'): 7, ('P', 'D'): -8, ('I', 'H'): -9, ('I', 'D'): -7,
-('T', 'R'): -6, ('P', 'L'): -7, ('K', 'G'): -7, ('M', 'N'): -9,
-('P', 'H'): -4, ('F', 'Q'): -13, ('Z', 'G'): -5, ('X', 'L'): -6,
-('T', 'M'): -4, ('Z', 'C'): -14, ('X', 'H'): -5, ('D', 'R'): -10,
-('B', 'W'): -10, ('X', 'D'): -5, ('Z', 'K'): -4, ('F', 'A'): -8,
-('Z', 'W'): -14, ('F', 'E'): -14, ('D', 'N'): 2, ('B', 'K'): -2,
-('X', 'X'): -5, ('F', 'I'): -2, ('B', 'G'): -3, ('X', 'T'): -4,
-('F', 'M'): -4, ('B', 'C'): -12, ('Z', 'I'): -6, ('Z', 'V'): -6,
-('S', 'S'): 6, ('L', 'Q'): -5, ('W', 'E'): -17, ('Q', 'R'): -2,
-('N', 'N'): 8, ('W', 'M'): -13, ('Q', 'C'): -14, ('W', 'I'): -14,
-('S', 'C'): -3, ('L', 'A'): -6, ('S', 'G'): -2, ('L', 'E'): -9,
-('W', 'Q'): -13, ('H', 'G'): -9, ('S', 'K'): -4, ('Q', 'N'): -3,
-('N', 'R'): -6, ('H', 'C'): -7, ('Y', 'N'): -4, ('G', 'Q'): -7,
-('Y', 'F'): 2, ('C', 'A'): -6, ('V', 'L'): -2, ('G', 'E'): -4,
-('G', 'A'): -2, ('K', 'R'): 0, ('E', 'D'): 2, ('Y', 'R'): -10,
-('M', 'Q'): -4, ('T', 'I'): -2, ('C', 'D'): -14, ('V', 'F'): -8,
-('T', 'A'): -1, ('T', 'P'): -4, ('B', 'P'): -7, ('T', 'E'): -6,
-('V', 'N'): -8, ('P', 'G'): -6, ('M', 'A'): -5, ('K', 'H'): -6,
-('V', 'R'): -8, ('P', 'C'): -8, ('M', 'E'): -7, ('K', 'L'): -8,
-('V', 'V'): 7, ('M', 'I'): -1, ('T', 'Q'): -5, ('I', 'G'): -11,
-('P', 'K'): -6, ('M', 'M'): 11, ('K', 'D'): -4, ('I', 'C'): -6,
-('Z', 'D'): 1, ('F', 'R'): -9, ('X', 'K'): -5, ('Q', 'D'): -2,
-('X', 'G'): -5, ('Z', 'L'): -7, ('X', 'C'): -9, ('Z', 'H'): -1,
-('B', 'L'): -9, ('B', 'H'): -1, ('F', 'F'): 9, ('X', 'W'): -11,
-('B', 'D'): 6, ('D', 'A'): -3, ('S', 'L'): -8, ('X', 'S'): -3,
-('F', 'N'): -9, ('S', 'R'): -3, ('W', 'D'): -15, ('V', 'Y'): -7,
-('W', 'L'): -6, ('H', 'R'): -2, ('W', 'H'): -7, ('H', 'N'): 0,
-('W', 'T'): -13, ('T', 'T'): 7, ('S', 'F'): -6, ('W', 'P'): -14,
-('L', 'D'): -12, ('B', 'I'): -6, ('L', 'H'): -6, ('S', 'N'): 0,
-('B', 'T'): -3, ('L', 'L'): 7, ('Y', 'K'): -9, ('E', 'Q'): 1,
-('Y', 'G'): -14, ('Z', 'S'): -5, ('Y', 'C'): -4, ('G', 'D'): -3,
-('B', 'V'): -8, ('E', 'A'): -2, ('Y', 'W'): -5, ('E', 'E'): 8,
-('Y', 'S'): -7, ('C', 'N'): -11, ('V', 'C'): -6, ('T', 'H'): -7,
-('P', 'R'): -4, ('V', 'G'): -5, ('T', 'L'): -7, ('V', 'K'): -9,
-('K', 'Q'): -3, ('R', 'A'): -7, ('I', 'R'): -5, ('T', 'D'): -5,
-('P', 'F'): -10, ('I', 'N'): -5, ('K', 'I'): -6, ('M', 'D'): -11,
-('V', 'W'): -15, ('W', 'W'): 13, ('M', 'H'): -10, ('P', 'N'): -6,
-('K', 'A'): -7, ('M', 'L'): 1, ('K', 'E'): -4, ('Z', 'E'): 6,
-('X', 'N'): -3, ('Z', 'A'): -3, ('Z', 'M'): -5, ('X', 'F'): -8,
-('K', 'C'): -14, ('B', 'Q'): -3, ('X', 'B'): -5, ('B', 'M'): -10,
-('F', 'C'): -13, ('Z', 'Q'): 6, ('X', 'Z'): -5, ('F', 'G'): -9,
-('B', 'E'): 1, ('X', 'V'): -5, ('F', 'K'): -14, ('B', 'A'): -3,
-('X', 'R'): -6, ('D', 'D'): 8, ('W', 'G'): -15, ('Z', 'F'): -13,
-('S', 'Q'): -5, ('W', 'C'): -15, ('W', 'K'): -12, ('H', 'Q'): 1,
-('L', 'C'): -15, ('W', 'N'): -8, ('S', 'A'): 0, ('L', 'G'): -10,
-('W', 'S'): -5, ('S', 'E'): -4, ('H', 'E'): -5, ('S', 'I'): -7,
-('H', 'A'): -7, ('S', 'M'): -5, ('Y', 'L'): -7, ('Y', 'H'): -3,
-('Y', 'D'): -11, ('E', 'R'): -9, ('X', 'P'): -5, ('G', 'G'): 6,
-('G', 'C'): -9, ('E', 'N'): -2, ('Y', 'T'): -6, ('Y', 'P'): -13,
-('T', 'K'): -3, ('A', 'A'): 6, ('P', 'Q'): -3, ('T', 'C'): -8,
-('V', 'H'): -6, ('T', 'G'): -6, ('I', 'Q'): -8, ('Z', 'T'): -6,
-('C', 'R'): -8, ('V', 'P'): -6, ('P', 'E'): -5, ('M', 'C'): -13,
-('K', 'N'): -1, ('I', 'I'): 8, ('P', 'A'): -2, ('M', 'G'): -8,
-('T', 'S'): 0, ('I', 'E'): -5, ('P', 'M'): -8, ('M', 'K'): -2,
-('I', 'A'): -5, ('P', 'I'): -8, ('R', 'R'): 8, ('X', 'M'): -5,
-('L', 'I'): -1, ('X', 'I'): -5, ('Z', 'B'): 0, ('X', 'E'): -5,
-('Z', 'N'): -3, ('X', 'A'): -3, ('B', 'R'): -7, ('B', 'N'): 6,
-('F', 'D'): -15, ('X', 'Y'): -7, ('Z', 'R'): -4, ('F', 'H'): -6,
-('B', 'F'): -10, ('F', 'L'): -3, ('X', 'Q'): -5, ('B', 'B'): 6
-}
+        ('W', 'F'): -4, ('L', 'R'): -8, ('S', 'P'): -2, ('V', 'T'): -3,
+        ('Q', 'Q'): 8, ('N', 'A'): -4, ('Z', 'Y'): -9, ('W', 'R'): -2,
+        ('Q', 'A'): -4, ('S', 'D'): -4, ('H', 'H'): 9, ('S', 'H'): -6,
+        ('H', 'D'): -4, ('L', 'N'): -7, ('W', 'A'): -13, ('Y', 'M'): -11,
+        ('G', 'R'): -9, ('Y', 'I'): -6, ('Y', 'E'): -8, ('B', 'Y'): -6,
+        ('Y', 'A'): -8, ('V', 'D'): -8, ('B', 'S'): -1, ('Y', 'Y'): 10,
+        ('G', 'N'): -3, ('E', 'C'): -14, ('Y', 'Q'): -12, ('Z', 'Z'): 6,
+        ('V', 'A'): -2, ('C', 'C'): 10, ('M', 'R'): -4, ('V', 'E'): -6,
+        ('T', 'N'): -2, ('P', 'P'): 8, ('V', 'I'): 2, ('V', 'S'): -6,
+        ('Z', 'P'): -4, ('V', 'M'): -1, ('T', 'F'): -9, ('V', 'Q'): -7,
+        ('K', 'K'): 7, ('P', 'D'): -8, ('I', 'H'): -9, ('I', 'D'): -7,
+        ('T', 'R'): -6, ('P', 'L'): -7, ('K', 'G'): -7, ('M', 'N'): -9,
+        ('P', 'H'): -4, ('F', 'Q'): -13, ('Z', 'G'): -5, ('X', 'L'): -6,
+        ('T', 'M'): -4, ('Z', 'C'): -14, ('X', 'H'): -5, ('D', 'R'): -10,
+        ('B', 'W'): -10, ('X', 'D'): -5, ('Z', 'K'): -4, ('F', 'A'): -8,
+        ('Z', 'W'): -14, ('F', 'E'): -14, ('D', 'N'): 2, ('B', 'K'): -2,
+        ('X', 'X'): -5, ('F', 'I'): -2, ('B', 'G'): -3, ('X', 'T'): -4,
+        ('F', 'M'): -4, ('B', 'C'): -12, ('Z', 'I'): -6, ('Z', 'V'): -6,
+        ('S', 'S'): 6, ('L', 'Q'): -5, ('W', 'E'): -17, ('Q', 'R'): -2,
+        ('N', 'N'): 8, ('W', 'M'): -13, ('Q', 'C'): -14, ('W', 'I'): -14,
+        ('S', 'C'): -3, ('L', 'A'): -6, ('S', 'G'): -2, ('L', 'E'): -9,
+        ('W', 'Q'): -13, ('H', 'G'): -9, ('S', 'K'): -4, ('Q', 'N'): -3,
+        ('N', 'R'): -6, ('H', 'C'): -7, ('Y', 'N'): -4, ('G', 'Q'): -7,
+        ('Y', 'F'): 2, ('C', 'A'): -6, ('V', 'L'): -2, ('G', 'E'): -4,
+        ('G', 'A'): -2, ('K', 'R'): 0, ('E', 'D'): 2, ('Y', 'R'): -10,
+        ('M', 'Q'): -4, ('T', 'I'): -2, ('C', 'D'): -14, ('V', 'F'): -8,
+        ('T', 'A'): -1, ('T', 'P'): -4, ('B', 'P'): -7, ('T', 'E'): -6,
+        ('V', 'N'): -8, ('P', 'G'): -6, ('M', 'A'): -5, ('K', 'H'): -6,
+        ('V', 'R'): -8, ('P', 'C'): -8, ('M', 'E'): -7, ('K', 'L'): -8,
+        ('V', 'V'): 7, ('M', 'I'): -1, ('T', 'Q'): -5, ('I', 'G'): -11,
+        ('P', 'K'): -6, ('M', 'M'): 11, ('K', 'D'): -4, ('I', 'C'): -6,
+        ('Z', 'D'): 1, ('F', 'R'): -9, ('X', 'K'): -5, ('Q', 'D'): -2,
+        ('X', 'G'): -5, ('Z', 'L'): -7, ('X', 'C'): -9, ('Z', 'H'): -1,
+        ('B', 'L'): -9, ('B', 'H'): -1, ('F', 'F'): 9, ('X', 'W'): -11,
+        ('B', 'D'): 6, ('D', 'A'): -3, ('S', 'L'): -8, ('X', 'S'): -3,
+        ('F', 'N'): -9, ('S', 'R'): -3, ('W', 'D'): -15, ('V', 'Y'): -7,
+        ('W', 'L'): -6, ('H', 'R'): -2, ('W', 'H'): -7, ('H', 'N'): 0,
+        ('W', 'T'): -13, ('T', 'T'): 7, ('S', 'F'): -6, ('W', 'P'): -14,
+        ('L', 'D'): -12, ('B', 'I'): -6, ('L', 'H'): -6, ('S', 'N'): 0,
+        ('B', 'T'): -3, ('L', 'L'): 7, ('Y', 'K'): -9, ('E', 'Q'): 1,
+        ('Y', 'G'): -14, ('Z', 'S'): -5, ('Y', 'C'): -4, ('G', 'D'): -3,
+        ('B', 'V'): -8, ('E', 'A'): -2, ('Y', 'W'): -5, ('E', 'E'): 8,
+        ('Y', 'S'): -7, ('C', 'N'): -11, ('V', 'C'): -6, ('T', 'H'): -7,
+        ('P', 'R'): -4, ('V', 'G'): -5, ('T', 'L'): -7, ('V', 'K'): -9,
+        ('K', 'Q'): -3, ('R', 'A'): -7, ('I', 'R'): -5, ('T', 'D'): -5,
+        ('P', 'F'): -10, ('I', 'N'): -5, ('K', 'I'): -6, ('M', 'D'): -11,
+        ('V', 'W'): -15, ('W', 'W'): 13, ('M', 'H'): -10, ('P', 'N'): -6,
+        ('K', 'A'): -7, ('M', 'L'): 1, ('K', 'E'): -4, ('Z', 'E'): 6,
+        ('X', 'N'): -3, ('Z', 'A'): -3, ('Z', 'M'): -5, ('X', 'F'): -8,
+        ('K', 'C'): -14, ('B', 'Q'): -3, ('X', 'B'): -5, ('B', 'M'): -10,
+        ('F', 'C'): -13, ('Z', 'Q'): 6, ('X', 'Z'): -5, ('F', 'G'): -9,
+        ('B', 'E'): 1, ('X', 'V'): -5, ('F', 'K'): -14, ('B', 'A'): -3,
+        ('X', 'R'): -6, ('D', 'D'): 8, ('W', 'G'): -15, ('Z', 'F'): -13,
+        ('S', 'Q'): -5, ('W', 'C'): -15, ('W', 'K'): -12, ('H', 'Q'): 1,
+        ('L', 'C'): -15, ('W', 'N'): -8, ('S', 'A'): 0, ('L', 'G'): -10,
+        ('W', 'S'): -5, ('S', 'E'): -4, ('H', 'E'): -5, ('S', 'I'): -7,
+        ('H', 'A'): -7, ('S', 'M'): -5, ('Y', 'L'): -7, ('Y', 'H'): -3,
+        ('Y', 'D'): -11, ('E', 'R'): -9, ('X', 'P'): -5, ('G', 'G'): 6,
+        ('G', 'C'): -9, ('E', 'N'): -2, ('Y', 'T'): -6, ('Y', 'P'): -13,
+        ('T', 'K'): -3, ('A', 'A'): 6, ('P', 'Q'): -3, ('T', 'C'): -8,
+        ('V', 'H'): -6, ('T', 'G'): -6, ('I', 'Q'): -8, ('Z', 'T'): -6,
+        ('C', 'R'): -8, ('V', 'P'): -6, ('P', 'E'): -5, ('M', 'C'): -13,
+        ('K', 'N'): -1, ('I', 'I'): 8, ('P', 'A'): -2, ('M', 'G'): -8,
+        ('T', 'S'): 0, ('I', 'E'): -5, ('P', 'M'): -8, ('M', 'K'): -2,
+        ('I', 'A'): -5, ('P', 'I'): -8, ('R', 'R'): 8, ('X', 'M'): -5,
+        ('L', 'I'): -1, ('X', 'I'): -5, ('Z', 'B'): 0, ('X', 'E'): -5,
+        ('Z', 'N'): -3, ('X', 'A'): -3, ('B', 'R'): -7, ('B', 'N'): 6,
+        ('F', 'D'): -15, ('X', 'Y'): -7, ('Z', 'R'): -4, ('F', 'H'): -6,
+        ('B', 'F'): -10, ('F', 'L'): -3, ('X', 'Q'): -5, ('B', 'B'): 6
+        }
 pam30 = _temp()
 del _temp
 
@@ -2432,76 +2432,76 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/pam300.cmp
 def _temp():
     return {
-('W', 'F'): 1, ('L', 'R'): -3, ('S', 'P'): 1, ('V', 'T'): 0,
-('Q', 'Q'): 4, ('N', 'A'): 0, ('Z', 'Y'): -5, ('W', 'R'): 3,
-('Q', 'A'): 0, ('S', 'D'): 0, ('H', 'H'): 7, ('S', 'H'): -1,
-('H', 'D'): 1, ('L', 'N'): -3, ('W', 'A'): -6, ('Y', 'M'): -2,
-('G', 'R'): -2, ('Y', 'I'): -1, ('Y', 'E'): -5, ('B', 'Y'): -4,
-('Y', 'A'): -4, ('V', 'D'): -2, ('B', 'S'): 1, ('Y', 'Y'): 12,
-('G', 'N'): 1, ('E', 'C'): -6, ('Y', 'Q'): -4, ('Z', 'Z'): 3,
-('V', 'A'): 0, ('C', 'C'): 15, ('M', 'R'): 0, ('V', 'E'): -2,
-('T', 'N'): 0, ('P', 'P'): 6, ('V', 'I'): 4, ('V', 'S'): -1,
-('Z', 'P'): 0, ('V', 'M'): 2, ('T', 'F'): -3, ('V', 'Q'): -2,
-('K', 'K'): 5, ('P', 'D'): -1, ('I', 'H'): -2, ('I', 'D'): -2,
-('T', 'R'): -1, ('P', 'L'): -3, ('K', 'G'): -2, ('M', 'N'): -2,
-('P', 'H'): 0, ('F', 'Q'): -5, ('Z', 'G'): 0, ('X', 'L'): -1,
-('T', 'M'): -1, ('Z', 'C'): -6, ('X', 'H'): 0, ('D', 'R'): -1,
-('B', 'W'): -6, ('X', 'D'): -1, ('Z', 'K'): 1, ('F', 'A'): -4,
-('Z', 'W'): -6, ('F', 'E'): -6, ('D', 'N'): 2, ('B', 'K'): 1,
-('X', 'X'): -1, ('F', 'I'): 1, ('B', 'G'): 1, ('X', 'T'): 0,
-('F', 'M'): 1, ('B', 'C'): -5, ('Z', 'I'): -2, ('Z', 'V'): -2,
-('S', 'S'): 1, ('L', 'Q'): -2, ('W', 'E'): -8, ('Q', 'R'): 2,
-('N', 'N'): 2, ('W', 'M'): -5, ('Q', 'C'): -6, ('W', 'I'): -6,
-('S', 'C'): 0, ('L', 'A'): -2, ('S', 'G'): 1, ('L', 'E'): -4,
-('W', 'Q'): -5, ('H', 'G'): -2, ('S', 'K'): 0, ('Q', 'N'): 1,
-('N', 'R'): 0, ('H', 'C'): -4, ('Y', 'N'): -2, ('G', 'Q'): -1,
-('Y', 'F'): 9, ('C', 'A'): -2, ('V', 'L'): 2, ('G', 'E'): 0,
-('G', 'A'): 2, ('K', 'R'): 4, ('E', 'D'): 4, ('Y', 'R'): -5,
-('M', 'Q'): -1, ('T', 'I'): 0, ('C', 'D'): -6, ('V', 'F'): -1,
-('T', 'A'): 1, ('T', 'P'): 1, ('B', 'P'): 0, ('T', 'E'): 0,
-('V', 'N'): -2, ('P', 'G'): 0, ('M', 'A'): -1, ('K', 'H'): 0,
-('V', 'R'): -3, ('P', 'C'): -3, ('M', 'E'): -2, ('K', 'L'): -3,
-('V', 'V'): 5, ('M', 'I'): 3, ('T', 'Q'): -1, ('I', 'G'): -3,
-('P', 'K'): -1, ('M', 'M'): 6, ('K', 'D'): 0, ('I', 'C'): -3,
-('Z', 'D'): 3, ('F', 'R'): -5, ('X', 'K'): -1, ('Q', 'D'): 2,
-('X', 'G'): -1, ('Z', 'L'): -3, ('X', 'C'): -3, ('Z', 'H'): 2,
-('B', 'L'): -4, ('B', 'H'): 1, ('F', 'F'): 11, ('X', 'W'): -4,
-('B', 'D'): 3, ('D', 'A'): 0, ('S', 'L'): -3, ('X', 'S'): 0,
-('F', 'N'): -4, ('S', 'R'): 0, ('W', 'D'): -7, ('V', 'Y'): -3,
-('W', 'L'): -2, ('H', 'R'): 2, ('W', 'H'): -3, ('H', 'N'): 2,
-('W', 'T'): -6, ('T', 'T'): 2, ('S', 'F'): -4, ('W', 'P'): -6,
-('L', 'D'): -4, ('B', 'I'): -2, ('L', 'H'): -2, ('S', 'N'): 1,
-('B', 'T'): 0, ('L', 'L'): 7, ('Y', 'K'): -5, ('E', 'Q'): 3,
-('Y', 'G'): -6, ('Z', 'S'): 0, ('Y', 'C'): 1, ('G', 'D'): 1,
-('B', 'V'): -2, ('E', 'A'): 0, ('Y', 'W'): 0, ('E', 'E'): 4,
-('Y', 'S'): -3, ('C', 'N'): -4, ('V', 'C'): -2, ('T', 'H'): -1,
-('P', 'R'): 0, ('V', 'G'): -1, ('T', 'L'): -2, ('V', 'K'): -2,
-('K', 'Q'): 1, ('R', 'A'): -1, ('I', 'R'): -2, ('T', 'D'): 0,
-('P', 'F'): -5, ('I', 'N'): -2, ('K', 'I'): -2, ('M', 'D'): -3,
-('V', 'W'): -7, ('W', 'W'): 22, ('M', 'H'): -2, ('P', 'N'): 0,
-('K', 'A'): -1, ('M', 'L'): 4, ('K', 'E'): 0, ('Z', 'E'): 3,
-('X', 'N'): 0, ('Z', 'A'): 0, ('Z', 'M'): -2, ('X', 'F'): -2,
-('K', 'C'): -6, ('B', 'Q'): 2, ('X', 'B'): 0, ('B', 'M'): -2,
-('F', 'C'): -5, ('Z', 'Q'): 3, ('X', 'Z'): -1, ('F', 'G'): -5,
-('B', 'E'): 3, ('X', 'V'): 0, ('F', 'K'): -6, ('B', 'A'): 0,
-('X', 'R'): -1, ('D', 'D'): 4, ('W', 'G'): -8, ('Z', 'F'): -5,
-('S', 'Q'): 0, ('W', 'C'): -9, ('W', 'K'): -4, ('H', 'Q'): 3,
-('L', 'C'): -7, ('W', 'N'): -5, ('S', 'A'): 1, ('L', 'G'): -4,
-('W', 'S'): -3, ('S', 'E'): 0, ('H', 'E'): 1, ('S', 'I'): -1,
-('H', 'A'): -1, ('S', 'M'): -2, ('Y', 'L'): 0, ('Y', 'H'): 0,
-('Y', 'D'): -5, ('E', 'R'): -1, ('X', 'P'): -1, ('G', 'G'): 5,
-('G', 'C'): -4, ('E', 'N'): 2, ('Y', 'T'): -3, ('Y', 'P'): -5,
-('T', 'K'): 0, ('A', 'A'): 2, ('P', 'Q'): 0, ('T', 'C'): -2,
-('V', 'H'): -2, ('T', 'G'): 0, ('I', 'Q'): -2, ('Z', 'T'): 0,
-('C', 'R'): -4, ('V', 'P'): -1, ('P', 'E'): 0, ('M', 'C'): -6,
-('K', 'N'): 1, ('I', 'I'): 5, ('P', 'A'): 1, ('M', 'G'): -3,
-('T', 'S'): 1, ('I', 'E'): -2, ('P', 'M'): -2, ('M', 'K'): 0,
-('I', 'A'): 0, ('P', 'I'): -2, ('R', 'R'): 7, ('X', 'M'): -1,
-('L', 'I'): 3, ('X', 'I'): -1, ('Z', 'B'): 2, ('X', 'E'): -1,
-('Z', 'N'): 1, ('X', 'A'): 0, ('B', 'R'): 0, ('B', 'N'): 2,
-('F', 'D'): -6, ('X', 'Y'): -2, ('Z', 'R'): 0, ('F', 'H'): -2,
-('B', 'F'): -5, ('F', 'L'): 3, ('X', 'Q'): 0, ('B', 'B'): 3
-}
+        ('W', 'F'): 1, ('L', 'R'): -3, ('S', 'P'): 1, ('V', 'T'): 0,
+        ('Q', 'Q'): 4, ('N', 'A'): 0, ('Z', 'Y'): -5, ('W', 'R'): 3,
+        ('Q', 'A'): 0, ('S', 'D'): 0, ('H', 'H'): 7, ('S', 'H'): -1,
+        ('H', 'D'): 1, ('L', 'N'): -3, ('W', 'A'): -6, ('Y', 'M'): -2,
+        ('G', 'R'): -2, ('Y', 'I'): -1, ('Y', 'E'): -5, ('B', 'Y'): -4,
+        ('Y', 'A'): -4, ('V', 'D'): -2, ('B', 'S'): 1, ('Y', 'Y'): 12,
+        ('G', 'N'): 1, ('E', 'C'): -6, ('Y', 'Q'): -4, ('Z', 'Z'): 3,
+        ('V', 'A'): 0, ('C', 'C'): 15, ('M', 'R'): 0, ('V', 'E'): -2,
+        ('T', 'N'): 0, ('P', 'P'): 6, ('V', 'I'): 4, ('V', 'S'): -1,
+        ('Z', 'P'): 0, ('V', 'M'): 2, ('T', 'F'): -3, ('V', 'Q'): -2,
+        ('K', 'K'): 5, ('P', 'D'): -1, ('I', 'H'): -2, ('I', 'D'): -2,
+        ('T', 'R'): -1, ('P', 'L'): -3, ('K', 'G'): -2, ('M', 'N'): -2,
+        ('P', 'H'): 0, ('F', 'Q'): -5, ('Z', 'G'): 0, ('X', 'L'): -1,
+        ('T', 'M'): -1, ('Z', 'C'): -6, ('X', 'H'): 0, ('D', 'R'): -1,
+        ('B', 'W'): -6, ('X', 'D'): -1, ('Z', 'K'): 1, ('F', 'A'): -4,
+        ('Z', 'W'): -6, ('F', 'E'): -6, ('D', 'N'): 2, ('B', 'K'): 1,
+        ('X', 'X'): -1, ('F', 'I'): 1, ('B', 'G'): 1, ('X', 'T'): 0,
+        ('F', 'M'): 1, ('B', 'C'): -5, ('Z', 'I'): -2, ('Z', 'V'): -2,
+        ('S', 'S'): 1, ('L', 'Q'): -2, ('W', 'E'): -8, ('Q', 'R'): 2,
+        ('N', 'N'): 2, ('W', 'M'): -5, ('Q', 'C'): -6, ('W', 'I'): -6,
+        ('S', 'C'): 0, ('L', 'A'): -2, ('S', 'G'): 1, ('L', 'E'): -4,
+        ('W', 'Q'): -5, ('H', 'G'): -2, ('S', 'K'): 0, ('Q', 'N'): 1,
+        ('N', 'R'): 0, ('H', 'C'): -4, ('Y', 'N'): -2, ('G', 'Q'): -1,
+        ('Y', 'F'): 9, ('C', 'A'): -2, ('V', 'L'): 2, ('G', 'E'): 0,
+        ('G', 'A'): 2, ('K', 'R'): 4, ('E', 'D'): 4, ('Y', 'R'): -5,
+        ('M', 'Q'): -1, ('T', 'I'): 0, ('C', 'D'): -6, ('V', 'F'): -1,
+        ('T', 'A'): 1, ('T', 'P'): 1, ('B', 'P'): 0, ('T', 'E'): 0,
+        ('V', 'N'): -2, ('P', 'G'): 0, ('M', 'A'): -1, ('K', 'H'): 0,
+        ('V', 'R'): -3, ('P', 'C'): -3, ('M', 'E'): -2, ('K', 'L'): -3,
+        ('V', 'V'): 5, ('M', 'I'): 3, ('T', 'Q'): -1, ('I', 'G'): -3,
+        ('P', 'K'): -1, ('M', 'M'): 6, ('K', 'D'): 0, ('I', 'C'): -3,
+        ('Z', 'D'): 3, ('F', 'R'): -5, ('X', 'K'): -1, ('Q', 'D'): 2,
+        ('X', 'G'): -1, ('Z', 'L'): -3, ('X', 'C'): -3, ('Z', 'H'): 2,
+        ('B', 'L'): -4, ('B', 'H'): 1, ('F', 'F'): 11, ('X', 'W'): -4,
+        ('B', 'D'): 3, ('D', 'A'): 0, ('S', 'L'): -3, ('X', 'S'): 0,
+        ('F', 'N'): -4, ('S', 'R'): 0, ('W', 'D'): -7, ('V', 'Y'): -3,
+        ('W', 'L'): -2, ('H', 'R'): 2, ('W', 'H'): -3, ('H', 'N'): 2,
+        ('W', 'T'): -6, ('T', 'T'): 2, ('S', 'F'): -4, ('W', 'P'): -6,
+        ('L', 'D'): -4, ('B', 'I'): -2, ('L', 'H'): -2, ('S', 'N'): 1,
+        ('B', 'T'): 0, ('L', 'L'): 7, ('Y', 'K'): -5, ('E', 'Q'): 3,
+        ('Y', 'G'): -6, ('Z', 'S'): 0, ('Y', 'C'): 1, ('G', 'D'): 1,
+        ('B', 'V'): -2, ('E', 'A'): 0, ('Y', 'W'): 0, ('E', 'E'): 4,
+        ('Y', 'S'): -3, ('C', 'N'): -4, ('V', 'C'): -2, ('T', 'H'): -1,
+        ('P', 'R'): 0, ('V', 'G'): -1, ('T', 'L'): -2, ('V', 'K'): -2,
+        ('K', 'Q'): 1, ('R', 'A'): -1, ('I', 'R'): -2, ('T', 'D'): 0,
+        ('P', 'F'): -5, ('I', 'N'): -2, ('K', 'I'): -2, ('M', 'D'): -3,
+        ('V', 'W'): -7, ('W', 'W'): 22, ('M', 'H'): -2, ('P', 'N'): 0,
+        ('K', 'A'): -1, ('M', 'L'): 4, ('K', 'E'): 0, ('Z', 'E'): 3,
+        ('X', 'N'): 0, ('Z', 'A'): 0, ('Z', 'M'): -2, ('X', 'F'): -2,
+        ('K', 'C'): -6, ('B', 'Q'): 2, ('X', 'B'): 0, ('B', 'M'): -2,
+        ('F', 'C'): -5, ('Z', 'Q'): 3, ('X', 'Z'): -1, ('F', 'G'): -5,
+        ('B', 'E'): 3, ('X', 'V'): 0, ('F', 'K'): -6, ('B', 'A'): 0,
+        ('X', 'R'): -1, ('D', 'D'): 4, ('W', 'G'): -8, ('Z', 'F'): -5,
+        ('S', 'Q'): 0, ('W', 'C'): -9, ('W', 'K'): -4, ('H', 'Q'): 3,
+        ('L', 'C'): -7, ('W', 'N'): -5, ('S', 'A'): 1, ('L', 'G'): -4,
+        ('W', 'S'): -3, ('S', 'E'): 0, ('H', 'E'): 1, ('S', 'I'): -1,
+        ('H', 'A'): -1, ('S', 'M'): -2, ('Y', 'L'): 0, ('Y', 'H'): 0,
+        ('Y', 'D'): -5, ('E', 'R'): -1, ('X', 'P'): -1, ('G', 'G'): 5,
+        ('G', 'C'): -4, ('E', 'N'): 2, ('Y', 'T'): -3, ('Y', 'P'): -5,
+        ('T', 'K'): 0, ('A', 'A'): 2, ('P', 'Q'): 0, ('T', 'C'): -2,
+        ('V', 'H'): -2, ('T', 'G'): 0, ('I', 'Q'): -2, ('Z', 'T'): 0,
+        ('C', 'R'): -4, ('V', 'P'): -1, ('P', 'E'): 0, ('M', 'C'): -6,
+        ('K', 'N'): 1, ('I', 'I'): 5, ('P', 'A'): 1, ('M', 'G'): -3,
+        ('T', 'S'): 1, ('I', 'E'): -2, ('P', 'M'): -2, ('M', 'K'): 0,
+        ('I', 'A'): 0, ('P', 'I'): -2, ('R', 'R'): 7, ('X', 'M'): -1,
+        ('L', 'I'): 3, ('X', 'I'): -1, ('Z', 'B'): 2, ('X', 'E'): -1,
+        ('Z', 'N'): 1, ('X', 'A'): 0, ('B', 'R'): 0, ('B', 'N'): 2,
+        ('F', 'D'): -6, ('X', 'Y'): -2, ('Z', 'R'): 0, ('F', 'H'): -2,
+        ('B', 'F'): -5, ('F', 'L'): 3, ('X', 'Q'): 0, ('B', 'B'): 3
+        }
 pam300 = _temp()
 del _temp
 
@@ -2509,76 +2509,76 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/pam60.cmp
 def _temp():
     return {
-('W', 'F'): -3, ('L', 'R'): -6, ('S', 'P'): 0, ('V', 'T'): -1,
-('Q', 'Q'): 7, ('N', 'A'): -2, ('Z', 'Y'): -7, ('W', 'R'): 0,
-('Q', 'A'): -3, ('S', 'D'): -2, ('H', 'H'): 8, ('S', 'H'): -4,
-('H', 'D'): -2, ('L', 'N'): -5, ('W', 'A'): -10, ('Y', 'M'): -7,
-('G', 'R'): -7, ('Y', 'I'): -4, ('Y', 'E'): -7, ('B', 'Y'): -5,
-('Y', 'A'): -6, ('V', 'D'): -6, ('B', 'S'): 0, ('Y', 'Y'): 9,
-('G', 'N'): -1, ('E', 'C'): -10, ('Y', 'Q'): -8, ('Z', 'Z'): 5,
-('V', 'A'): -1, ('C', 'C'): 9, ('M', 'R'): -2, ('V', 'E'): -4,
-('T', 'N'): -1, ('P', 'P'): 7, ('V', 'I'): 3, ('V', 'S'): -4,
-('Z', 'P'): -2, ('V', 'M'): 0, ('T', 'F'): -6, ('V', 'Q'): -5,
-('K', 'K'): 6, ('P', 'D'): -5, ('I', 'H'): -6, ('I', 'D'): -5,
-('T', 'R'): -4, ('P', 'L'): -5, ('K', 'G'): -5, ('M', 'N'): -6,
-('P', 'H'): -2, ('F', 'Q'): -9, ('Z', 'G'): -3, ('X', 'L'): -4,
-('T', 'M'): -2, ('Z', 'C'): -10, ('X', 'H'): -3, ('D', 'R'): -6,
-('B', 'W'): -8, ('X', 'D'): -3, ('Z', 'K'): -2, ('F', 'A'): -6,
-('Z', 'W'): -11, ('F', 'E'): -10, ('D', 'N'): 2, ('B', 'K'): -1,
-('X', 'X'): -3, ('F', 'I'): -1, ('B', 'G'): -2, ('X', 'T'): -2,
-('F', 'M'): -2, ('B', 'C'): -9, ('Z', 'I'): -4, ('Z', 'V'): -5,
-('S', 'S'): 5, ('L', 'Q'): -3, ('W', 'E'): -12, ('Q', 'R'): 0,
-('N', 'N'): 6, ('W', 'M'): -9, ('Q', 'C'): -10, ('W', 'I'): -10,
-('S', 'C'): -1, ('L', 'A'): -4, ('S', 'G'): 0, ('L', 'E'): -7,
-('W', 'Q'): -9, ('H', 'G'): -6, ('S', 'K'): -2, ('Q', 'N'): -2,
-('N', 'R'): -3, ('H', 'C'): -6, ('Y', 'N'): -3, ('G', 'Q'): -5,
-('Y', 'F'): 3, ('C', 'A'): -5, ('V', 'L'): -1, ('G', 'E'): -2,
-('G', 'A'): 0, ('K', 'R'): 2, ('E', 'D'): 3, ('Y', 'R'): -8,
-('M', 'Q'): -2, ('T', 'I'): -1, ('C', 'D'): -10, ('V', 'F'): -5,
-('T', 'A'): 1, ('T', 'P'): -2, ('B', 'P'): -4, ('T', 'E'): -4,
-('V', 'N'): -5, ('P', 'G'): -4, ('M', 'A'): -3, ('K', 'H'): -4,
-('V', 'R'): -5, ('P', 'C'): -6, ('M', 'E'): -5, ('K', 'L'): -6,
-('V', 'V'): 6, ('M', 'I'): 1, ('T', 'Q'): -4, ('I', 'G'): -7,
-('P', 'K'): -4, ('M', 'M'): 10, ('K', 'D'): -2, ('I', 'C'): -4,
-('Z', 'D'): 2, ('F', 'R'): -7, ('X', 'K'): -3, ('Q', 'D'): -1,
-('X', 'G'): -3, ('Z', 'L'): -5, ('X', 'C'): -6, ('Z', 'H'): 0,
-('B', 'L'): -7, ('B', 'H'): 0, ('F', 'F'): 8, ('X', 'W'): -8,
-('B', 'D'): 5, ('D', 'A'): -2, ('S', 'L'): -6, ('X', 'S'): -2,
-('F', 'N'): -6, ('S', 'R'): -2, ('W', 'D'): -11, ('V', 'Y'): -5,
-('W', 'L'): -4, ('H', 'R'): 0, ('W', 'H'): -5, ('H', 'N'): 1,
-('W', 'T'): -9, ('T', 'T'): 6, ('S', 'F'): -5, ('W', 'P'): -10,
-('L', 'D'): -9, ('B', 'I'): -4, ('L', 'H'): -4, ('S', 'N'): 1,
-('B', 'T'): -2, ('L', 'L'): 6, ('Y', 'K'): -7, ('E', 'Q'): 2,
-('Y', 'G'): -10, ('Z', 'S'): -3, ('Y', 'C'): -2, ('G', 'D'): -2,
-('B', 'V'): -5, ('E', 'A'): -1, ('Y', 'W'): -3, ('E', 'E'): 7,
-('Y', 'S'): -5, ('C', 'N'): -7, ('V', 'C'): -4, ('T', 'H'): -5,
-('P', 'R'): -2, ('V', 'G'): -4, ('T', 'L'): -5, ('V', 'K'): -6,
-('K', 'Q'): -1, ('R', 'A'): -5, ('I', 'R'): -4, ('T', 'D'): -3,
-('P', 'F'): -7, ('I', 'N'): -4, ('K', 'I'): -4, ('M', 'D'): -7,
-('V', 'W'): -11, ('W', 'W'): 13, ('M', 'H'): -7, ('P', 'N'): -4,
-('K', 'A'): -5, ('M', 'L'): 2, ('K', 'E'): -3, ('Z', 'E'): 5,
-('X', 'N'): -2, ('Z', 'A'): -2, ('Z', 'M'): -4, ('X', 'F'): -5,
-('K', 'C'): -10, ('B', 'Q'): -1, ('X', 'B'): -3, ('B', 'M'): -6,
-('F', 'C'): -9, ('Z', 'Q'): 6, ('X', 'Z'): -3, ('F', 'G'): -7,
-('B', 'E'): 2, ('X', 'V'): -3, ('F', 'K'): -10, ('B', 'A'): -2,
-('X', 'R'): -4, ('D', 'D'): 7, ('W', 'G'): -11, ('Z', 'F'): -10,
-('S', 'Q'): -3, ('W', 'C'): -12, ('W', 'K'): -8, ('H', 'Q'): 2,
-('L', 'C'): -11, ('W', 'N'): -6, ('S', 'A'): 1, ('L', 'G'): -8,
-('W', 'S'): -4, ('S', 'E'): -2, ('H', 'E'): -3, ('S', 'I'): -4,
-('H', 'A'): -5, ('S', 'M'): -4, ('Y', 'L'): -5, ('Y', 'H'): -2,
-('Y', 'D'): -8, ('E', 'R'): -6, ('X', 'P'): -3, ('G', 'G'): 6,
-('G', 'C'): -7, ('E', 'N'): 0, ('Y', 'T'): -5, ('Y', 'P'): -10,
-('T', 'K'): -2, ('A', 'A'): 5, ('P', 'Q'): -1, ('T', 'C'): -5,
-('V', 'H'): -5, ('T', 'G'): -3, ('I', 'Q'): -5, ('Z', 'T'): -4,
-('C', 'R'): -6, ('V', 'P'): -4, ('P', 'E'): -3, ('M', 'C'): -10,
-('K', 'N'): 0, ('I', 'I'): 7, ('P', 'A'): 0, ('M', 'G'): -6,
-('T', 'S'): 1, ('I', 'E'): -4, ('P', 'M'): -6, ('M', 'K'): 0,
-('I', 'A'): -3, ('P', 'I'): -6, ('R', 'R'): 8, ('X', 'M'): -3,
-('L', 'I'): 0, ('X', 'I'): -3, ('Z', 'B'): 1, ('X', 'E'): -3,
-('Z', 'N'): -1, ('X', 'A'): -2, ('B', 'R'): -5, ('B', 'N'): 5,
-('F', 'D'): -11, ('X', 'Y'): -5, ('Z', 'R'): -2, ('F', 'H'): -4,
-('B', 'F'): -8, ('F', 'L'): -1, ('X', 'Q'): -3, ('B', 'B'): 5
-}
+        ('W', 'F'): -3, ('L', 'R'): -6, ('S', 'P'): 0, ('V', 'T'): -1,
+        ('Q', 'Q'): 7, ('N', 'A'): -2, ('Z', 'Y'): -7, ('W', 'R'): 0,
+        ('Q', 'A'): -3, ('S', 'D'): -2, ('H', 'H'): 8, ('S', 'H'): -4,
+        ('H', 'D'): -2, ('L', 'N'): -5, ('W', 'A'): -10, ('Y', 'M'): -7,
+        ('G', 'R'): -7, ('Y', 'I'): -4, ('Y', 'E'): -7, ('B', 'Y'): -5,
+        ('Y', 'A'): -6, ('V', 'D'): -6, ('B', 'S'): 0, ('Y', 'Y'): 9,
+        ('G', 'N'): -1, ('E', 'C'): -10, ('Y', 'Q'): -8, ('Z', 'Z'): 5,
+        ('V', 'A'): -1, ('C', 'C'): 9, ('M', 'R'): -2, ('V', 'E'): -4,
+        ('T', 'N'): -1, ('P', 'P'): 7, ('V', 'I'): 3, ('V', 'S'): -4,
+        ('Z', 'P'): -2, ('V', 'M'): 0, ('T', 'F'): -6, ('V', 'Q'): -5,
+        ('K', 'K'): 6, ('P', 'D'): -5, ('I', 'H'): -6, ('I', 'D'): -5,
+        ('T', 'R'): -4, ('P', 'L'): -5, ('K', 'G'): -5, ('M', 'N'): -6,
+        ('P', 'H'): -2, ('F', 'Q'): -9, ('Z', 'G'): -3, ('X', 'L'): -4,
+        ('T', 'M'): -2, ('Z', 'C'): -10, ('X', 'H'): -3, ('D', 'R'): -6,
+        ('B', 'W'): -8, ('X', 'D'): -3, ('Z', 'K'): -2, ('F', 'A'): -6,
+        ('Z', 'W'): -11, ('F', 'E'): -10, ('D', 'N'): 2, ('B', 'K'): -1,
+        ('X', 'X'): -3, ('F', 'I'): -1, ('B', 'G'): -2, ('X', 'T'): -2,
+        ('F', 'M'): -2, ('B', 'C'): -9, ('Z', 'I'): -4, ('Z', 'V'): -5,
+        ('S', 'S'): 5, ('L', 'Q'): -3, ('W', 'E'): -12, ('Q', 'R'): 0,
+        ('N', 'N'): 6, ('W', 'M'): -9, ('Q', 'C'): -10, ('W', 'I'): -10,
+        ('S', 'C'): -1, ('L', 'A'): -4, ('S', 'G'): 0, ('L', 'E'): -7,
+        ('W', 'Q'): -9, ('H', 'G'): -6, ('S', 'K'): -2, ('Q', 'N'): -2,
+        ('N', 'R'): -3, ('H', 'C'): -6, ('Y', 'N'): -3, ('G', 'Q'): -5,
+        ('Y', 'F'): 3, ('C', 'A'): -5, ('V', 'L'): -1, ('G', 'E'): -2,
+        ('G', 'A'): 0, ('K', 'R'): 2, ('E', 'D'): 3, ('Y', 'R'): -8,
+        ('M', 'Q'): -2, ('T', 'I'): -1, ('C', 'D'): -10, ('V', 'F'): -5,
+        ('T', 'A'): 1, ('T', 'P'): -2, ('B', 'P'): -4, ('T', 'E'): -4,
+        ('V', 'N'): -5, ('P', 'G'): -4, ('M', 'A'): -3, ('K', 'H'): -4,
+        ('V', 'R'): -5, ('P', 'C'): -6, ('M', 'E'): -5, ('K', 'L'): -6,
+        ('V', 'V'): 6, ('M', 'I'): 1, ('T', 'Q'): -4, ('I', 'G'): -7,
+        ('P', 'K'): -4, ('M', 'M'): 10, ('K', 'D'): -2, ('I', 'C'): -4,
+        ('Z', 'D'): 2, ('F', 'R'): -7, ('X', 'K'): -3, ('Q', 'D'): -1,
+        ('X', 'G'): -3, ('Z', 'L'): -5, ('X', 'C'): -6, ('Z', 'H'): 0,
+        ('B', 'L'): -7, ('B', 'H'): 0, ('F', 'F'): 8, ('X', 'W'): -8,
+        ('B', 'D'): 5, ('D', 'A'): -2, ('S', 'L'): -6, ('X', 'S'): -2,
+        ('F', 'N'): -6, ('S', 'R'): -2, ('W', 'D'): -11, ('V', 'Y'): -5,
+        ('W', 'L'): -4, ('H', 'R'): 0, ('W', 'H'): -5, ('H', 'N'): 1,
+        ('W', 'T'): -9, ('T', 'T'): 6, ('S', 'F'): -5, ('W', 'P'): -10,
+        ('L', 'D'): -9, ('B', 'I'): -4, ('L', 'H'): -4, ('S', 'N'): 1,
+        ('B', 'T'): -2, ('L', 'L'): 6, ('Y', 'K'): -7, ('E', 'Q'): 2,
+        ('Y', 'G'): -10, ('Z', 'S'): -3, ('Y', 'C'): -2, ('G', 'D'): -2,
+        ('B', 'V'): -5, ('E', 'A'): -1, ('Y', 'W'): -3, ('E', 'E'): 7,
+        ('Y', 'S'): -5, ('C', 'N'): -7, ('V', 'C'): -4, ('T', 'H'): -5,
+        ('P', 'R'): -2, ('V', 'G'): -4, ('T', 'L'): -5, ('V', 'K'): -6,
+        ('K', 'Q'): -1, ('R', 'A'): -5, ('I', 'R'): -4, ('T', 'D'): -3,
+        ('P', 'F'): -7, ('I', 'N'): -4, ('K', 'I'): -4, ('M', 'D'): -7,
+        ('V', 'W'): -11, ('W', 'W'): 13, ('M', 'H'): -7, ('P', 'N'): -4,
+        ('K', 'A'): -5, ('M', 'L'): 2, ('K', 'E'): -3, ('Z', 'E'): 5,
+        ('X', 'N'): -2, ('Z', 'A'): -2, ('Z', 'M'): -4, ('X', 'F'): -5,
+        ('K', 'C'): -10, ('B', 'Q'): -1, ('X', 'B'): -3, ('B', 'M'): -6,
+        ('F', 'C'): -9, ('Z', 'Q'): 6, ('X', 'Z'): -3, ('F', 'G'): -7,
+        ('B', 'E'): 2, ('X', 'V'): -3, ('F', 'K'): -10, ('B', 'A'): -2,
+        ('X', 'R'): -4, ('D', 'D'): 7, ('W', 'G'): -11, ('Z', 'F'): -10,
+        ('S', 'Q'): -3, ('W', 'C'): -12, ('W', 'K'): -8, ('H', 'Q'): 2,
+        ('L', 'C'): -11, ('W', 'N'): -6, ('S', 'A'): 1, ('L', 'G'): -8,
+        ('W', 'S'): -4, ('S', 'E'): -2, ('H', 'E'): -3, ('S', 'I'): -4,
+        ('H', 'A'): -5, ('S', 'M'): -4, ('Y', 'L'): -5, ('Y', 'H'): -2,
+        ('Y', 'D'): -8, ('E', 'R'): -6, ('X', 'P'): -3, ('G', 'G'): 6,
+        ('G', 'C'): -7, ('E', 'N'): 0, ('Y', 'T'): -5, ('Y', 'P'): -10,
+        ('T', 'K'): -2, ('A', 'A'): 5, ('P', 'Q'): -1, ('T', 'C'): -5,
+        ('V', 'H'): -5, ('T', 'G'): -3, ('I', 'Q'): -5, ('Z', 'T'): -4,
+        ('C', 'R'): -6, ('V', 'P'): -4, ('P', 'E'): -3, ('M', 'C'): -10,
+        ('K', 'N'): 0, ('I', 'I'): 7, ('P', 'A'): 0, ('M', 'G'): -6,
+        ('T', 'S'): 1, ('I', 'E'): -4, ('P', 'M'): -6, ('M', 'K'): 0,
+        ('I', 'A'): -3, ('P', 'I'): -6, ('R', 'R'): 8, ('X', 'M'): -3,
+        ('L', 'I'): 0, ('X', 'I'): -3, ('Z', 'B'): 1, ('X', 'E'): -3,
+        ('Z', 'N'): -1, ('X', 'A'): -2, ('B', 'R'): -5, ('B', 'N'): 5,
+        ('F', 'D'): -11, ('X', 'Y'): -5, ('Z', 'R'): -2, ('F', 'H'): -4,
+        ('B', 'F'): -8, ('F', 'L'): -1, ('X', 'Q'): -3, ('B', 'B'): 5
+        }
 pam60 = _temp()
 del _temp
 
@@ -2586,71 +2586,71 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/pam90.cmp
 def _temp():
     return {
-('W', 'F'): -2, ('L', 'R'): -5, ('S', 'P'): 0, ('V', 'T'): -1,
-('Q', 'Q'): 6, ('N', 'A'): -1, ('Z', 'Y'): -6, ('W', 'R'): 0,
-('Q', 'A'): -2, ('S', 'D'): -1, ('H', 'H'): 8, ('S', 'H'): -3,
-('H', 'D'): -1, ('L', 'N'): -4, ('W', 'A'): -8, ('Y', 'M'): -6,
-('G', 'R'): -5, ('Y', 'I'): -3, ('Y', 'E'): -6, ('B', 'Y'): -4,
-('Y', 'A'): -5, ('V', 'D'): -4, ('B', 'S'): 0, ('Y', 'Y'): 9,
-('G', 'N'): -1, ('E', 'C'): -8, ('Y', 'Q'): -6, ('Z', 'Z'): 5,
-('V', 'A'): 0, ('C', 'C'): 9, ('M', 'R'): -2, ('V', 'E'): -3,
-('T', 'N'): 0, ('P', 'P'): 7, ('V', 'I'): 3, ('V', 'S'): -3,
-('Z', 'P'): -2, ('V', 'M'): 1, ('T', 'F'): -5, ('V', 'Q'): -4,
-('K', 'K'): 5, ('P', 'D'): -4, ('I', 'H'): -5, ('I', 'D'): -4,
-('T', 'R'): -3, ('P', 'L'): -4, ('K', 'G'): -4, ('M', 'N'): -4,
-('P', 'H'): -2, ('F', 'Q'): -7, ('Z', 'G'): -2, ('T', 'M'): -2,
-('Z', 'C'): -8, ('D', 'R'): -5, ('B', 'W'): -7, ('Z', 'K'): -1,
-('F', 'A'): -5, ('Z', 'W'): -8, ('F', 'E'): -8, ('D', 'N'): 3,
-('B', 'K'): 0, ('F', 'I'): 0, ('B', 'G'): -1, ('F', 'M'): -1,
-('B', 'C'): -7, ('Z', 'I'): -3, ('Z', 'V'): -3, ('S', 'S'): 4,
-('L', 'Q'): -3, ('W', 'E'): -10, ('Q', 'R'): 0, ('N', 'N'): 5,
-('W', 'M'): -7, ('Q', 'C'): -8, ('W', 'I'): -8, ('S', 'C'): -1,
-('L', 'A'): -3, ('S', 'G'): 0, ('L', 'E'): -5, ('W', 'Q'): -7,
-('H', 'G'): -5, ('S', 'K'): -1, ('L', 'I'): 1, ('N', 'R'): -2,
-('H', 'C'): -5, ('Y', 'N'): -2, ('G', 'Q'): -3, ('Y', 'F'): 4,
-('C', 'A'): -3, ('V', 'L'): 0, ('G', 'E'): -1, ('G', 'A'): 0,
-('K', 'R'): 2, ('E', 'D'): 4, ('Y', 'R'): -6, ('M', 'Q'): -2,
-('T', 'I'): 0, ('C', 'D'): -8, ('V', 'F'): -4, ('T', 'A'): 1,
-('T', 'P'): -1, ('B', 'P'): -3, ('T', 'E'): -2, ('V', 'N'): -4,
-('P', 'G'): -3, ('M', 'A'): -2, ('K', 'H'): -2, ('V', 'R'): -4,
-('P', 'C'): -5, ('M', 'E'): -4, ('K', 'L'): -5, ('V', 'V'): 6,
-('M', 'I'): 1, ('T', 'Q'): -3, ('I', 'G'): -5, ('P', 'K'): -3,
-('M', 'M'): 9, ('K', 'D'): -2, ('I', 'C'): -3, ('Z', 'D'): 3,
-('F', 'R'): -6, ('Q', 'D'): 0, ('Z', 'L'): -4, ('Z', 'H'): 1,
-('B', 'L'): -5, ('B', 'H'): 1, ('F', 'F'): 8, ('B', 'D'): 5,
-('D', 'A'): -1, ('S', 'L'): -5, ('F', 'N'): -5, ('S', 'R'): -1,
-('W', 'D'): -9, ('W', 'L'): -3, ('H', 'R'): 1, ('W', 'H'): -4,
-('H', 'N'): 2, ('W', 'T'): -7, ('T', 'T'): 5, ('S', 'F'): -4,
-('W', 'P'): -8, ('L', 'D'): -7, ('B', 'I'): -3, ('L', 'H'): -3,
-('S', 'N'): 1, ('B', 'T'): -1, ('L', 'L'): 6, ('Y', 'K'): -6,
-('E', 'Q'): 2, ('Y', 'G'): -8, ('Z', 'S'): -2, ('Y', 'C'): -1,
-('G', 'D'): -1, ('B', 'V'): -4, ('E', 'A'): 0, ('Y', 'W'): -2,
-('E', 'E'): 6, ('Y', 'S'): -4, ('C', 'N'): -6, ('V', 'C'): -3,
-('T', 'H'): -3, ('P', 'R'): -1, ('V', 'G'): -3, ('T', 'L'): -3,
-('V', 'K'): -5, ('K', 'Q'): -1, ('R', 'A'): -4, ('I', 'R'): -3,
-('T', 'D'): -2, ('P', 'F'): -6, ('I', 'N'): -3, ('K', 'I'): -3,
-('M', 'D'): -5, ('V', 'W'): -9, ('W', 'W'): 13, ('M', 'H'): -5,
-('P', 'N'): -2, ('K', 'A'): -3, ('M', 'L'): 2, ('K', 'E'): -2,
-('Z', 'E'): 5, ('Q', 'N'): -1, ('Z', 'A'): -1, ('Z', 'M'): -3,
-('K', 'C'): -8, ('B', 'Q'): 0, ('B', 'M'): -5, ('F', 'C'): -7,
-('Z', 'Q'): 5, ('F', 'G'): -6, ('B', 'E'): 2, ('F', 'K'): -8,
-('B', 'A'): -1, ('D', 'D'): 6, ('W', 'G'): -9, ('S', 'Q'): -2,
-('W', 'C'): -10, ('W', 'K'): -6, ('H', 'Q'): 2, ('L', 'C'): -9,
-('W', 'N'): -5, ('S', 'A'): 1, ('L', 'G'): -6, ('W', 'S'): -3,
-('S', 'E'): -2, ('H', 'E'): -1, ('S', 'I'): -3, ('H', 'A'): -4,
-('S', 'M'): -3, ('Y', 'L'): -3, ('Y', 'H'): -1, ('Y', 'D'): -6,
-('E', 'R'): -4, ('G', 'G'): 5, ('G', 'C'): -5, ('E', 'N'): 0,
-('Y', 'T'): -4, ('Y', 'P'): -8, ('T', 'K'): -1, ('A', 'A'): 4,
-('P', 'Q'): -1, ('T', 'C'): -4, ('V', 'H'): -4, ('T', 'G'): -2,
-('I', 'Q'): -4, ('Z', 'T'): -2, ('C', 'R'): -5, ('V', 'P'): -3,
-('P', 'E'): -2, ('M', 'C'): -8, ('K', 'N'): 1, ('I', 'I'): 6,
-('P', 'A'): 0, ('M', 'G'): -5, ('T', 'S'): 2, ('I', 'E'): -3,
-('P', 'M'): -4, ('M', 'K'): 0, ('I', 'A'): -2, ('P', 'I'): -4,
-('R', 'R'): 7, ('Z', 'F'): -8, ('Z', 'B'): 2, ('Z', 'N'): 0,
-('B', 'R'): -3, ('B', 'N'): 4, ('F', 'D'): -8, ('Z', 'R'): -1,
-('F', 'H'): -3, ('B', 'F'): -6, ('F', 'L'): 0, ('V', 'Y'): -4,
-('B', 'B'): 4
-}
+        ('W', 'F'): -2, ('L', 'R'): -5, ('S', 'P'): 0, ('V', 'T'): -1,
+        ('Q', 'Q'): 6, ('N', 'A'): -1, ('Z', 'Y'): -6, ('W', 'R'): 0,
+        ('Q', 'A'): -2, ('S', 'D'): -1, ('H', 'H'): 8, ('S', 'H'): -3,
+        ('H', 'D'): -1, ('L', 'N'): -4, ('W', 'A'): -8, ('Y', 'M'): -6,
+        ('G', 'R'): -5, ('Y', 'I'): -3, ('Y', 'E'): -6, ('B', 'Y'): -4,
+        ('Y', 'A'): -5, ('V', 'D'): -4, ('B', 'S'): 0, ('Y', 'Y'): 9,
+        ('G', 'N'): -1, ('E', 'C'): -8, ('Y', 'Q'): -6, ('Z', 'Z'): 5,
+        ('V', 'A'): 0, ('C', 'C'): 9, ('M', 'R'): -2, ('V', 'E'): -3,
+        ('T', 'N'): 0, ('P', 'P'): 7, ('V', 'I'): 3, ('V', 'S'): -3,
+        ('Z', 'P'): -2, ('V', 'M'): 1, ('T', 'F'): -5, ('V', 'Q'): -4,
+        ('K', 'K'): 5, ('P', 'D'): -4, ('I', 'H'): -5, ('I', 'D'): -4,
+        ('T', 'R'): -3, ('P', 'L'): -4, ('K', 'G'): -4, ('M', 'N'): -4,
+        ('P', 'H'): -2, ('F', 'Q'): -7, ('Z', 'G'): -2, ('T', 'M'): -2,
+        ('Z', 'C'): -8, ('D', 'R'): -5, ('B', 'W'): -7, ('Z', 'K'): -1,
+        ('F', 'A'): -5, ('Z', 'W'): -8, ('F', 'E'): -8, ('D', 'N'): 3,
+        ('B', 'K'): 0, ('F', 'I'): 0, ('B', 'G'): -1, ('F', 'M'): -1,
+        ('B', 'C'): -7, ('Z', 'I'): -3, ('Z', 'V'): -3, ('S', 'S'): 4,
+        ('L', 'Q'): -3, ('W', 'E'): -10, ('Q', 'R'): 0, ('N', 'N'): 5,
+        ('W', 'M'): -7, ('Q', 'C'): -8, ('W', 'I'): -8, ('S', 'C'): -1,
+        ('L', 'A'): -3, ('S', 'G'): 0, ('L', 'E'): -5, ('W', 'Q'): -7,
+        ('H', 'G'): -5, ('S', 'K'): -1, ('L', 'I'): 1, ('N', 'R'): -2,
+        ('H', 'C'): -5, ('Y', 'N'): -2, ('G', 'Q'): -3, ('Y', 'F'): 4,
+        ('C', 'A'): -3, ('V', 'L'): 0, ('G', 'E'): -1, ('G', 'A'): 0,
+        ('K', 'R'): 2, ('E', 'D'): 4, ('Y', 'R'): -6, ('M', 'Q'): -2,
+        ('T', 'I'): 0, ('C', 'D'): -8, ('V', 'F'): -4, ('T', 'A'): 1,
+        ('T', 'P'): -1, ('B', 'P'): -3, ('T', 'E'): -2, ('V', 'N'): -4,
+        ('P', 'G'): -3, ('M', 'A'): -2, ('K', 'H'): -2, ('V', 'R'): -4,
+        ('P', 'C'): -5, ('M', 'E'): -4, ('K', 'L'): -5, ('V', 'V'): 6,
+        ('M', 'I'): 1, ('T', 'Q'): -3, ('I', 'G'): -5, ('P', 'K'): -3,
+        ('M', 'M'): 9, ('K', 'D'): -2, ('I', 'C'): -3, ('Z', 'D'): 3,
+        ('F', 'R'): -6, ('Q', 'D'): 0, ('Z', 'L'): -4, ('Z', 'H'): 1,
+        ('B', 'L'): -5, ('B', 'H'): 1, ('F', 'F'): 8, ('B', 'D'): 5,
+        ('D', 'A'): -1, ('S', 'L'): -5, ('F', 'N'): -5, ('S', 'R'): -1,
+        ('W', 'D'): -9, ('W', 'L'): -3, ('H', 'R'): 1, ('W', 'H'): -4,
+        ('H', 'N'): 2, ('W', 'T'): -7, ('T', 'T'): 5, ('S', 'F'): -4,
+        ('W', 'P'): -8, ('L', 'D'): -7, ('B', 'I'): -3, ('L', 'H'): -3,
+        ('S', 'N'): 1, ('B', 'T'): -1, ('L', 'L'): 6, ('Y', 'K'): -6,
+        ('E', 'Q'): 2, ('Y', 'G'): -8, ('Z', 'S'): -2, ('Y', 'C'): -1,
+        ('G', 'D'): -1, ('B', 'V'): -4, ('E', 'A'): 0, ('Y', 'W'): -2,
+        ('E', 'E'): 6, ('Y', 'S'): -4, ('C', 'N'): -6, ('V', 'C'): -3,
+        ('T', 'H'): -3, ('P', 'R'): -1, ('V', 'G'): -3, ('T', 'L'): -3,
+        ('V', 'K'): -5, ('K', 'Q'): -1, ('R', 'A'): -4, ('I', 'R'): -3,
+        ('T', 'D'): -2, ('P', 'F'): -6, ('I', 'N'): -3, ('K', 'I'): -3,
+        ('M', 'D'): -5, ('V', 'W'): -9, ('W', 'W'): 13, ('M', 'H'): -5,
+        ('P', 'N'): -2, ('K', 'A'): -3, ('M', 'L'): 2, ('K', 'E'): -2,
+        ('Z', 'E'): 5, ('Q', 'N'): -1, ('Z', 'A'): -1, ('Z', 'M'): -3,
+        ('K', 'C'): -8, ('B', 'Q'): 0, ('B', 'M'): -5, ('F', 'C'): -7,
+        ('Z', 'Q'): 5, ('F', 'G'): -6, ('B', 'E'): 2, ('F', 'K'): -8,
+        ('B', 'A'): -1, ('D', 'D'): 6, ('W', 'G'): -9, ('S', 'Q'): -2,
+        ('W', 'C'): -10, ('W', 'K'): -6, ('H', 'Q'): 2, ('L', 'C'): -9,
+        ('W', 'N'): -5, ('S', 'A'): 1, ('L', 'G'): -6, ('W', 'S'): -3,
+        ('S', 'E'): -2, ('H', 'E'): -1, ('S', 'I'): -3, ('H', 'A'): -4,
+        ('S', 'M'): -3, ('Y', 'L'): -3, ('Y', 'H'): -1, ('Y', 'D'): -6,
+        ('E', 'R'): -4, ('G', 'G'): 5, ('G', 'C'): -5, ('E', 'N'): 0,
+        ('Y', 'T'): -4, ('Y', 'P'): -8, ('T', 'K'): -1, ('A', 'A'): 4,
+        ('P', 'Q'): -1, ('T', 'C'): -4, ('V', 'H'): -4, ('T', 'G'): -2,
+        ('I', 'Q'): -4, ('Z', 'T'): -2, ('C', 'R'): -5, ('V', 'P'): -3,
+        ('P', 'E'): -2, ('M', 'C'): -8, ('K', 'N'): 1, ('I', 'I'): 6,
+        ('P', 'A'): 0, ('M', 'G'): -5, ('T', 'S'): 2, ('I', 'E'): -3,
+        ('P', 'M'): -4, ('M', 'K'): 0, ('I', 'A'): -2, ('P', 'I'): -4,
+        ('R', 'R'): 7, ('Z', 'F'): -8, ('Z', 'B'): 2, ('Z', 'N'): 0,
+        ('B', 'R'): -3, ('B', 'N'): 4, ('F', 'D'): -8, ('Z', 'R'): -1,
+        ('F', 'H'): -3, ('B', 'F'): -6, ('F', 'L'): 0, ('V', 'Y'): -4,
+        ('B', 'B'): 4
+        }
 pam90 = _temp()
 del _temp
 
@@ -2658,60 +2658,60 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/rao.cmp
 def _temp():
     return {
-('W', 'F'): 11, ('S', 'P'): 10, ('N', 'M'): 6, ('Q', 'Q'): 16,
-('N', 'A'): 9, ('N', 'E'): 10, ('W', 'V'): 11, ('Q', 'E'): 11,
-('L', 'H'): 10, ('W', 'R'): 7, ('Q', 'A'): 11, ('S', 'D'): 10,
-('H', 'H'): 16, ('Q', 'M'): 9, ('S', 'H'): 10, ('H', 'D'): 9,
-('Q', 'I'): 6, ('S', 'L'): 8, ('Y', 'M'): 8, ('Y', 'I'): 10,
-('Y', 'E'): 6, ('Y', 'A'): 9, ('G', 'F'): 7, ('V', 'T'): 10,
-('Y', 'Y'): 16, ('V', 'H'): 9, ('E', 'C'): 9, ('Y', 'Q'): 8,
-('V', 'A'): 9, ('C', 'C'): 16, ('V', 'E'): 4, ('T', 'N'): 10,
-('R', 'K'): 11, ('P', 'P'): 16, ('V', 'I'): 12, ('R', 'G'): 7,
-('V', 'M'): 9, ('T', 'F'): 10, ('R', 'C'): 8, ('V', 'Q'): 6,
-('K', 'K'): 16, ('P', 'D'): 8, ('I', 'H'): 8, ('M', 'F'): 10,
-('I', 'D'): 3, ('K', 'C'): 9, ('P', 'L'): 4, ('K', 'G'): 7,
-('P', 'H'): 5, ('T', 'R'): 9, ('F', 'A'): 10, ('F', 'E'): 6,
-('S', 'S'): 16, ('W', 'E'): 7, ('N', 'N'): 16, ('W', 'M'): 10,
-('Q', 'C'): 10, ('N', 'F'): 6, ('S', 'C'): 10, ('L', 'A'): 11,
-('S', 'G'): 11, ('L', 'E'): 7, ('W', 'Q'): 9, ('H', 'G'): 7,
-('S', 'K'): 10, ('Q', 'N'): 11, ('V', 'D'): 3, ('H', 'C'): 10,
-('Y', 'N'): 8, ('Y', 'F'): 10, ('W', 'I'): 11, ('C', 'A'): 11,
-('G', 'E'): 6, ('G', 'A'): 8, ('Y', 'V'): 10, ('E', 'D'): 11,
-('W', 'H'): 10, ('Y', 'R'): 7, ('N', 'I'): 5, ('R', 'L'): 6,
-('T', 'I'): 10, ('Q', 'L'): 9, ('R', 'H'): 10, ('T', 'M'): 8,
-('V', 'F'): 11, ('R', 'D'): 10, ('T', 'A'): 10, ('T', 'P'): 8,
-('T', 'E'): 8, ('V', 'N'): 5, ('P', 'G'): 11, ('M', 'A'): 11,
-('K', 'H'): 11, ('V', 'R'): 5, ('P', 'C'): 7, ('M', 'E'): 8,
-('V', 'V'): 16, ('T', 'T'): 16, ('M', 'I'): 9, ('T', 'Q'): 10,
-('I', 'G'): 6, ('P', 'K'): 6, ('M', 'M'): 16, ('K', 'D'): 11,
-('I', 'C'): 8, ('L', 'C'): 11, ('F', 'F'): 16, ('D', 'A'): 9,
-('S', 'R'): 9, ('W', 'D'): 6, ('N', 'C'): 9, ('N', 'G'): 10,
-('W', 'T'): 11, ('Q', 'G'): 8, ('S', 'F'): 8, ('W', 'P'): 6,
-('L', 'D'): 6, ('H', 'F'): 9, ('Q', 'K'): 12, ('S', 'N'): 11,
-('L', 'L'): 16, ('Q', 'F'): 7, ('Y', 'K'): 7, ('Y', 'G'): 10,
-('Y', 'C'): 10, ('G', 'D'): 9, ('E', 'A'): 10, ('Y', 'W'): 11,
-('E', 'E'): 16, ('Y', 'S'): 11, ('R', 'M'): 6, ('V', 'C'): 8,
-('T', 'H'): 10, ('R', 'I'): 4, ('V', 'G'): 6, ('T', 'L'): 9,
-('R', 'E'): 9, ('V', 'K'): 5, ('R', 'Q'): 10, ('R', 'A'): 8,
-('T', 'D'): 9, ('P', 'F'): 4, ('V', 'S'): 8, ('K', 'I'): 4,
-('M', 'D'): 5, ('W', 'W'): 16, ('M', 'H'): 10, ('P', 'N'): 9,
-('I', 'F'): 12, ('K', 'A'): 10, ('M', 'L'): 11, ('K', 'E'): 11,
-('N', 'K'): 11, ('R', 'P'): 6, ('L', 'F'): 11, ('F', 'C'): 10,
-('W', 'G'): 8, ('W', 'L'): 11, ('D', 'D'): 16, ('N', 'H'): 10,
-('S', 'Q'): 10, ('Q', 'P'): 7, ('N', 'L'): 7, ('W', 'K'): 7,
-('Q', 'D'): 11, ('W', 'N'): 8, ('S', 'A'): 10, ('L', 'G'): 6,
-('W', 'S'): 10, ('S', 'E'): 9, ('L', 'K'): 7, ('H', 'E'): 11,
-('S', 'I'): 8, ('Q', 'H'): 11, ('H', 'A'): 11, ('S', 'M'): 7,
-('Y', 'L'): 9, ('Y', 'H'): 9, ('Y', 'D'): 7, ('G', 'G'): 16,
-('G', 'C'): 8, ('Y', 'T'): 11, ('W', 'C'): 11, ('Y', 'P'): 8,
-('T', 'K'): 9, ('R', 'N'): 10, ('A', 'A'): 16, ('W', 'A'): 11,
-('T', 'C'): 10, ('N', 'D'): 11, ('R', 'F'): 5, ('T', 'G'): 10,
-('V', 'L'): 10, ('V', 'P'): 3, ('P', 'E'): 5, ('M', 'C'): 10,
-('I', 'I'): 16, ('P', 'A'): 6, ('M', 'G'): 4, ('T', 'S'): 11,
-('I', 'E'): 4, ('P', 'M'): 2, ('M', 'K'): 8, ('K', 'F'): 6,
-('I', 'A'): 9, ('P', 'I'): 3, ('R', 'R'): 16, ('L', 'I'): 10,
-('F', 'D'): 4, ('D', 'C'): 8
-}
+        ('W', 'F'): 11, ('S', 'P'): 10, ('N', 'M'): 6, ('Q', 'Q'): 16,
+        ('N', 'A'): 9, ('N', 'E'): 10, ('W', 'V'): 11, ('Q', 'E'): 11,
+        ('L', 'H'): 10, ('W', 'R'): 7, ('Q', 'A'): 11, ('S', 'D'): 10,
+        ('H', 'H'): 16, ('Q', 'M'): 9, ('S', 'H'): 10, ('H', 'D'): 9,
+        ('Q', 'I'): 6, ('S', 'L'): 8, ('Y', 'M'): 8, ('Y', 'I'): 10,
+        ('Y', 'E'): 6, ('Y', 'A'): 9, ('G', 'F'): 7, ('V', 'T'): 10,
+        ('Y', 'Y'): 16, ('V', 'H'): 9, ('E', 'C'): 9, ('Y', 'Q'): 8,
+        ('V', 'A'): 9, ('C', 'C'): 16, ('V', 'E'): 4, ('T', 'N'): 10,
+        ('R', 'K'): 11, ('P', 'P'): 16, ('V', 'I'): 12, ('R', 'G'): 7,
+        ('V', 'M'): 9, ('T', 'F'): 10, ('R', 'C'): 8, ('V', 'Q'): 6,
+        ('K', 'K'): 16, ('P', 'D'): 8, ('I', 'H'): 8, ('M', 'F'): 10,
+        ('I', 'D'): 3, ('K', 'C'): 9, ('P', 'L'): 4, ('K', 'G'): 7,
+        ('P', 'H'): 5, ('T', 'R'): 9, ('F', 'A'): 10, ('F', 'E'): 6,
+        ('S', 'S'): 16, ('W', 'E'): 7, ('N', 'N'): 16, ('W', 'M'): 10,
+        ('Q', 'C'): 10, ('N', 'F'): 6, ('S', 'C'): 10, ('L', 'A'): 11,
+        ('S', 'G'): 11, ('L', 'E'): 7, ('W', 'Q'): 9, ('H', 'G'): 7,
+        ('S', 'K'): 10, ('Q', 'N'): 11, ('V', 'D'): 3, ('H', 'C'): 10,
+        ('Y', 'N'): 8, ('Y', 'F'): 10, ('W', 'I'): 11, ('C', 'A'): 11,
+        ('G', 'E'): 6, ('G', 'A'): 8, ('Y', 'V'): 10, ('E', 'D'): 11,
+        ('W', 'H'): 10, ('Y', 'R'): 7, ('N', 'I'): 5, ('R', 'L'): 6,
+        ('T', 'I'): 10, ('Q', 'L'): 9, ('R', 'H'): 10, ('T', 'M'): 8,
+        ('V', 'F'): 11, ('R', 'D'): 10, ('T', 'A'): 10, ('T', 'P'): 8,
+        ('T', 'E'): 8, ('V', 'N'): 5, ('P', 'G'): 11, ('M', 'A'): 11,
+        ('K', 'H'): 11, ('V', 'R'): 5, ('P', 'C'): 7, ('M', 'E'): 8,
+        ('V', 'V'): 16, ('T', 'T'): 16, ('M', 'I'): 9, ('T', 'Q'): 10,
+        ('I', 'G'): 6, ('P', 'K'): 6, ('M', 'M'): 16, ('K', 'D'): 11,
+        ('I', 'C'): 8, ('L', 'C'): 11, ('F', 'F'): 16, ('D', 'A'): 9,
+        ('S', 'R'): 9, ('W', 'D'): 6, ('N', 'C'): 9, ('N', 'G'): 10,
+        ('W', 'T'): 11, ('Q', 'G'): 8, ('S', 'F'): 8, ('W', 'P'): 6,
+        ('L', 'D'): 6, ('H', 'F'): 9, ('Q', 'K'): 12, ('S', 'N'): 11,
+        ('L', 'L'): 16, ('Q', 'F'): 7, ('Y', 'K'): 7, ('Y', 'G'): 10,
+        ('Y', 'C'): 10, ('G', 'D'): 9, ('E', 'A'): 10, ('Y', 'W'): 11,
+        ('E', 'E'): 16, ('Y', 'S'): 11, ('R', 'M'): 6, ('V', 'C'): 8,
+        ('T', 'H'): 10, ('R', 'I'): 4, ('V', 'G'): 6, ('T', 'L'): 9,
+        ('R', 'E'): 9, ('V', 'K'): 5, ('R', 'Q'): 10, ('R', 'A'): 8,
+        ('T', 'D'): 9, ('P', 'F'): 4, ('V', 'S'): 8, ('K', 'I'): 4,
+        ('M', 'D'): 5, ('W', 'W'): 16, ('M', 'H'): 10, ('P', 'N'): 9,
+        ('I', 'F'): 12, ('K', 'A'): 10, ('M', 'L'): 11, ('K', 'E'): 11,
+        ('N', 'K'): 11, ('R', 'P'): 6, ('L', 'F'): 11, ('F', 'C'): 10,
+        ('W', 'G'): 8, ('W', 'L'): 11, ('D', 'D'): 16, ('N', 'H'): 10,
+        ('S', 'Q'): 10, ('Q', 'P'): 7, ('N', 'L'): 7, ('W', 'K'): 7,
+        ('Q', 'D'): 11, ('W', 'N'): 8, ('S', 'A'): 10, ('L', 'G'): 6,
+        ('W', 'S'): 10, ('S', 'E'): 9, ('L', 'K'): 7, ('H', 'E'): 11,
+        ('S', 'I'): 8, ('Q', 'H'): 11, ('H', 'A'): 11, ('S', 'M'): 7,
+        ('Y', 'L'): 9, ('Y', 'H'): 9, ('Y', 'D'): 7, ('G', 'G'): 16,
+        ('G', 'C'): 8, ('Y', 'T'): 11, ('W', 'C'): 11, ('Y', 'P'): 8,
+        ('T', 'K'): 9, ('R', 'N'): 10, ('A', 'A'): 16, ('W', 'A'): 11,
+        ('T', 'C'): 10, ('N', 'D'): 11, ('R', 'F'): 5, ('T', 'G'): 10,
+        ('V', 'L'): 10, ('V', 'P'): 3, ('P', 'E'): 5, ('M', 'C'): 10,
+        ('I', 'I'): 16, ('P', 'A'): 6, ('M', 'G'): 4, ('T', 'S'): 11,
+        ('I', 'E'): 4, ('P', 'M'): 2, ('M', 'K'): 8, ('K', 'F'): 6,
+        ('I', 'A'): 9, ('P', 'I'): 3, ('R', 'R'): 16, ('L', 'I'): 10,
+        ('F', 'D'): 4, ('D', 'C'): 8
+        }
 rao = _temp()
 del _temp
 
@@ -2719,60 +2719,60 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/risler.cmp
 def _temp():
     return {
-('W', 'F'): -0.9, ('S', 'P'): -0.3, ('N', 'M'): 0.0, ('Q', 'Q'): 2.2,
-('N', 'A'): 1.3, ('N', 'E'): 1.4, ('W', 'V'): -0.7, ('Q', 'E'): 2.1,
-('L', 'H'): -0.9, ('W', 'R'): -0.8, ('Q', 'A'): 1.8, ('S', 'D'): 0.7,
-('H', 'H'): 2.2, ('Q', 'M'): 1.2, ('S', 'H'): -0.4, ('H', 'D'): -1.3,
-('Q', 'I'): 1.4, ('S', 'L'): 1.3, ('Y', 'M'): -0.2, ('Y', 'I'): 0.4,
-('Y', 'E'): 0.2, ('Y', 'A'): 0.2, ('G', 'F'): -0.4, ('V', 'T'): 1.6,
-('Y', 'Y'): 2.2, ('V', 'H'): -0.7, ('E', 'C'): -1.5, ('Y', 'Q'): 0.5,
-('V', 'A'): 2.0, ('C', 'C'): 2.2, ('V', 'E'): 1.6, ('T', 'N'): 1.1,
-('R', 'K'): 2.1, ('P', 'P'): 2.2, ('V', 'I'): 2.2, ('R', 'G'): 0.1,
-('V', 'M'): 0.8, ('T', 'F'): 0.3, ('R', 'C'): -1.5, ('V', 'Q'): 1.5,
-('K', 'K'): 2.2, ('P', 'D'): -1.2, ('I', 'H'): -0.8, ('M', 'F'): -0.2,
-('I', 'D'): 0.0, ('K', 'C'): -1.6, ('P', 'L'): -0.8, ('K', 'G'): -0.1,
-('P', 'H'): -1.6, ('T', 'R'): 1.9, ('F', 'A'): 0.6, ('F', 'E'): 0.6,
-('S', 'S'): 2.2, ('W', 'E'): -1.0, ('N', 'N'): 2.2, ('W', 'M'): -1.3,
-('Q', 'C'): -1.4, ('N', 'F'): 0.4, ('S', 'C'): -1.3, ('L', 'A'): 1.3,
-('S', 'G'): 0.7, ('L', 'E'): 0.9, ('W', 'Q'): -1.0, ('H', 'G'): -1.2,
-('S', 'K'): 1.4, ('Q', 'N'): 1.6, ('V', 'D'): 0.0, ('H', 'C'): -1.8,
-('Y', 'N'): -0.1, ('Y', 'F'): 2.0, ('W', 'I'): -0.7, ('C', 'A'): -1.5,
-('G', 'E'): 0.3, ('G', 'A'): 0.6, ('Y', 'V'): 0.3, ('E', 'D'): 1.0,
-('W', 'H'): -1.7, ('Y', 'R'): 0.8, ('N', 'I'): 0.9, ('R', 'L'): 1.2,
-('T', 'I'): 1.6, ('Q', 'L'): 1.1, ('R', 'H'): -0.4, ('T', 'M'): 0.8,
-('V', 'F'): 0.8, ('R', 'D'): -0.1, ('T', 'A'): 1.9, ('T', 'P'): -0.5,
-('T', 'E'): 1.6, ('V', 'N'): 1.1, ('P', 'G'): -1.2, ('M', 'A'): 1.0,
-('K', 'H'): -1.0, ('V', 'R'): 1.5, ('P', 'C'): -1.8, ('M', 'E'): 0.6,
-('V', 'V'): 2.2, ('T', 'T'): 2.2, ('M', 'I'): 0.9, ('T', 'Q'): 1.7,
-('I', 'G'): 0.0, ('P', 'K'): -0.7, ('M', 'M'): 2.2, ('K', 'D'): 0.1,
-('I', 'C'): -1.6, ('L', 'C'): -1.5, ('F', 'F'): 2.2, ('D', 'A'): 0.2,
-('S', 'R'): 2.0, ('W', 'D'): -1.4, ('N', 'C'): -1.6, ('N', 'G'): 0.2,
-('W', 'T'): -1.0, ('Q', 'G'): 0.2, ('S', 'F'): 0.5, ('W', 'P'): -1.6,
-('L', 'D'): -0.2, ('H', 'F'): -1.1, ('Q', 'K'): 1.7, ('S', 'N'): 1.9,
-('L', 'L'): 2.2, ('Q', 'F'): 0.7, ('Y', 'K'): 0.5, ('Y', 'G'): -0.2,
-('Y', 'C'): -1.1, ('G', 'D'): -0.4, ('E', 'A'): 1.7, ('Y', 'W'): -0.6,
-('E', 'E'): 2.2, ('Y', 'S'): 0.4, ('R', 'M'): 1.1, ('V', 'C'): -1.4,
-('T', 'H'): -0.9, ('R', 'I'): 1.4, ('V', 'G'): 0.1, ('T', 'L'): 1.2,
-('R', 'E'): 1.9, ('V', 'K'): 1.2, ('R', 'Q'): 2.0, ('R', 'A'): 1.5,
-('T', 'D'): 0.0, ('P', 'F'): -1.1, ('V', 'S'): 1.8, ('K', 'I'): 1.0,
-('M', 'D'): -0.5, ('W', 'W'): 2.2, ('M', 'H'): -1.2, ('P', 'N'): -1.0,
-('I', 'F'): 1.0, ('K', 'A'): 1.4, ('M', 'L'): 1.8, ('K', 'E'): 1.4,
-('N', 'K'): 1.0, ('R', 'P'): -0.3, ('L', 'F'): 1.0, ('F', 'C'): -1.6,
-('W', 'G'): -1.3, ('W', 'L'): -0.8, ('D', 'D'): 2.2, ('N', 'H'): -0.3,
-('S', 'Q'): 1.8, ('Q', 'P'): -0.6, ('N', 'L'): 0.8, ('W', 'K'): -1.1,
-('Q', 'D'): 0.6, ('W', 'N'): -1.1, ('S', 'A'): 2.0, ('L', 'G'): -0.2,
-('W', 'S'): -0.8, ('S', 'E'): 1.8, ('L', 'K'): 0.7, ('H', 'E'): -0.6,
-('S', 'I'): 1.6, ('Q', 'H'): -0.5, ('H', 'A'): -0.6, ('S', 'M'): 0.6,
-('Y', 'L'): 0.5, ('Y', 'H'): -0.8, ('Y', 'D'): -0.4, ('G', 'G'): 2.2,
-('G', 'C'): -1.7, ('Y', 'T'): 0.3, ('W', 'C'): -1.8, ('Y', 'P'): -1.2,
-('T', 'K'): 1.2, ('R', 'N'): 1.2, ('A', 'A'): 2.2, ('W', 'A'): -0.9,
-('T', 'C'): -1.4, ('N', 'D'): 0.8, ('R', 'F'): 0.4, ('T', 'G'): 0.2,
-('V', 'L'): 2.0, ('V', 'P'): -0.6, ('P', 'E'): -0.1, ('M', 'C'): -1.6,
-('I', 'I'): 2.2, ('P', 'A'): -0.2, ('M', 'G'): -0.4, ('T', 'S'): 2.1,
-('I', 'E'): 1.5, ('P', 'M'): -1.2, ('M', 'K'): 0.4, ('K', 'F'): 0.1,
-('I', 'A'): 1.7, ('P', 'I'): -0.6, ('R', 'R'): 2.2, ('L', 'I'): 2.1,
-('F', 'D'): -0.3, ('D', 'C'): -1.7
-}
+        ('W', 'F'): -0.9, ('S', 'P'): -0.3, ('N', 'M'): 0.0, ('Q', 'Q'): 2.2,
+        ('N', 'A'): 1.3, ('N', 'E'): 1.4, ('W', 'V'): -0.7, ('Q', 'E'): 2.1,
+        ('L', 'H'): -0.9, ('W', 'R'): -0.8, ('Q', 'A'): 1.8, ('S', 'D'): 0.7,
+        ('H', 'H'): 2.2, ('Q', 'M'): 1.2, ('S', 'H'): -0.4, ('H', 'D'): -1.3,
+        ('Q', 'I'): 1.4, ('S', 'L'): 1.3, ('Y', 'M'): -0.2, ('Y', 'I'): 0.4,
+        ('Y', 'E'): 0.2, ('Y', 'A'): 0.2, ('G', 'F'): -0.4, ('V', 'T'): 1.6,
+        ('Y', 'Y'): 2.2, ('V', 'H'): -0.7, ('E', 'C'): -1.5, ('Y', 'Q'): 0.5,
+        ('V', 'A'): 2.0, ('C', 'C'): 2.2, ('V', 'E'): 1.6, ('T', 'N'): 1.1,
+        ('R', 'K'): 2.1, ('P', 'P'): 2.2, ('V', 'I'): 2.2, ('R', 'G'): 0.1,
+        ('V', 'M'): 0.8, ('T', 'F'): 0.3, ('R', 'C'): -1.5, ('V', 'Q'): 1.5,
+        ('K', 'K'): 2.2, ('P', 'D'): -1.2, ('I', 'H'): -0.8, ('M', 'F'): -0.2,
+        ('I', 'D'): 0.0, ('K', 'C'): -1.6, ('P', 'L'): -0.8, ('K', 'G'): -0.1,
+        ('P', 'H'): -1.6, ('T', 'R'): 1.9, ('F', 'A'): 0.6, ('F', 'E'): 0.6,
+        ('S', 'S'): 2.2, ('W', 'E'): -1.0, ('N', 'N'): 2.2, ('W', 'M'): -1.3,
+        ('Q', 'C'): -1.4, ('N', 'F'): 0.4, ('S', 'C'): -1.3, ('L', 'A'): 1.3,
+        ('S', 'G'): 0.7, ('L', 'E'): 0.9, ('W', 'Q'): -1.0, ('H', 'G'): -1.2,
+        ('S', 'K'): 1.4, ('Q', 'N'): 1.6, ('V', 'D'): 0.0, ('H', 'C'): -1.8,
+        ('Y', 'N'): -0.1, ('Y', 'F'): 2.0, ('W', 'I'): -0.7, ('C', 'A'): -1.5,
+        ('G', 'E'): 0.3, ('G', 'A'): 0.6, ('Y', 'V'): 0.3, ('E', 'D'): 1.0,
+        ('W', 'H'): -1.7, ('Y', 'R'): 0.8, ('N', 'I'): 0.9, ('R', 'L'): 1.2,
+        ('T', 'I'): 1.6, ('Q', 'L'): 1.1, ('R', 'H'): -0.4, ('T', 'M'): 0.8,
+        ('V', 'F'): 0.8, ('R', 'D'): -0.1, ('T', 'A'): 1.9, ('T', 'P'): -0.5,
+        ('T', 'E'): 1.6, ('V', 'N'): 1.1, ('P', 'G'): -1.2, ('M', 'A'): 1.0,
+        ('K', 'H'): -1.0, ('V', 'R'): 1.5, ('P', 'C'): -1.8, ('M', 'E'): 0.6,
+        ('V', 'V'): 2.2, ('T', 'T'): 2.2, ('M', 'I'): 0.9, ('T', 'Q'): 1.7,
+        ('I', 'G'): 0.0, ('P', 'K'): -0.7, ('M', 'M'): 2.2, ('K', 'D'): 0.1,
+        ('I', 'C'): -1.6, ('L', 'C'): -1.5, ('F', 'F'): 2.2, ('D', 'A'): 0.2,
+        ('S', 'R'): 2.0, ('W', 'D'): -1.4, ('N', 'C'): -1.6, ('N', 'G'): 0.2,
+        ('W', 'T'): -1.0, ('Q', 'G'): 0.2, ('S', 'F'): 0.5, ('W', 'P'): -1.6,
+        ('L', 'D'): -0.2, ('H', 'F'): -1.1, ('Q', 'K'): 1.7, ('S', 'N'): 1.9,
+        ('L', 'L'): 2.2, ('Q', 'F'): 0.7, ('Y', 'K'): 0.5, ('Y', 'G'): -0.2,
+        ('Y', 'C'): -1.1, ('G', 'D'): -0.4, ('E', 'A'): 1.7, ('Y', 'W'): -0.6,
+        ('E', 'E'): 2.2, ('Y', 'S'): 0.4, ('R', 'M'): 1.1, ('V', 'C'): -1.4,
+        ('T', 'H'): -0.9, ('R', 'I'): 1.4, ('V', 'G'): 0.1, ('T', 'L'): 1.2,
+        ('R', 'E'): 1.9, ('V', 'K'): 1.2, ('R', 'Q'): 2.0, ('R', 'A'): 1.5,
+        ('T', 'D'): 0.0, ('P', 'F'): -1.1, ('V', 'S'): 1.8, ('K', 'I'): 1.0,
+        ('M', 'D'): -0.5, ('W', 'W'): 2.2, ('M', 'H'): -1.2, ('P', 'N'): -1.0,
+        ('I', 'F'): 1.0, ('K', 'A'): 1.4, ('M', 'L'): 1.8, ('K', 'E'): 1.4,
+        ('N', 'K'): 1.0, ('R', 'P'): -0.3, ('L', 'F'): 1.0, ('F', 'C'): -1.6,
+        ('W', 'G'): -1.3, ('W', 'L'): -0.8, ('D', 'D'): 2.2, ('N', 'H'): -0.3,
+        ('S', 'Q'): 1.8, ('Q', 'P'): -0.6, ('N', 'L'): 0.8, ('W', 'K'): -1.1,
+        ('Q', 'D'): 0.6, ('W', 'N'): -1.1, ('S', 'A'): 2.0, ('L', 'G'): -0.2,
+        ('W', 'S'): -0.8, ('S', 'E'): 1.8, ('L', 'K'): 0.7, ('H', 'E'): -0.6,
+        ('S', 'I'): 1.6, ('Q', 'H'): -0.5, ('H', 'A'): -0.6, ('S', 'M'): 0.6,
+        ('Y', 'L'): 0.5, ('Y', 'H'): -0.8, ('Y', 'D'): -0.4, ('G', 'G'): 2.2,
+        ('G', 'C'): -1.7, ('Y', 'T'): 0.3, ('W', 'C'): -1.8, ('Y', 'P'): -1.2,
+        ('T', 'K'): 1.2, ('R', 'N'): 1.2, ('A', 'A'): 2.2, ('W', 'A'): -0.9,
+        ('T', 'C'): -1.4, ('N', 'D'): 0.8, ('R', 'F'): 0.4, ('T', 'G'): 0.2,
+        ('V', 'L'): 2.0, ('V', 'P'): -0.6, ('P', 'E'): -0.1, ('M', 'C'): -1.6,
+        ('I', 'I'): 2.2, ('P', 'A'): -0.2, ('M', 'G'): -0.4, ('T', 'S'): 2.1,
+        ('I', 'E'): 1.5, ('P', 'M'): -1.2, ('M', 'K'): 0.4, ('K', 'F'): 0.1,
+        ('I', 'A'): 1.7, ('P', 'I'): -0.6, ('R', 'R'): 2.2, ('L', 'I'): 2.1,
+        ('F', 'D'): -0.3, ('D', 'C'): -1.7
+        }
 risler = _temp()
 del _temp
 
@@ -2780,59 +2780,59 @@ del _temp
 # http://www.embl-heidelberg.de/~vogt/matrices/str.cmp
 def _temp():
     return {
-('W', 'F'): 2, ('L', 'R'): -3, ('I', 'I'): 6, ('Q', 'Q'): 6,
-('W', 'N'): -5, ('V', 'I'): 2, ('H', 'T'): -2, ('H', 'P'): -3,
-('W', 'V'): -4, ('Q', 'E'): 2, ('W', 'R'): -2, ('Q', 'A'): 0,
-('H', 'H'): 8, ('H', 'D'): 0, ('L', 'N'): -3, ('Y', 'M'): -1,
-('Y', 'I'): -1, ('Y', 'E'): -2, ('E', 'S'): -1, ('Y', 'A'): -3,
-('Y', 'Y'): 7, ('T', 'C'): -5, ('E', 'C'): -3, ('Y', 'Q'): -3,
-('E', 'G'): -2, ('V', 'A'): 0, ('C', 'C'): 11, ('M', 'R'): -4,
-('P', 'T'): -1, ('V', 'E'): -2, ('P', 'P'): 7, ('I', 'T'): -2,
-('K', 'S'): -1, ('R', 'G'): -2, ('I', 'P'): -4, ('R', 'C'): -2,
-('A', 'T'): -1, ('K', 'K'): 5, ('A', 'P'): -1, ('V', 'M'): 0,
-('I', 'D'): -3, ('K', 'C'): -4, ('K', 'G'): -3, ('R', 'S'): 0,
-('F', 'Q'): -4, ('F', 'A'): -3, ('V', 'V'): 5, ('M', 'N'): -2,
-('F', 'E'): -4, ('D', 'N'): 2, ('F', 'I'): 1, ('F', 'M'): 0,
-('M', 'S'): -4, ('S', 'S'): 4, ('L', 'Q'): -3, ('W', 'E'): -6,
-('W', 'A'): -3, ('W', 'M'): -2, ('H', 'S'): -2, ('W', 'I'): -2,
-('S', 'C'): -4, ('L', 'A'): -2, ('L', 'E'): -4, ('W', 'Q'): -5,
-('H', 'G'): -3, ('Q', 'N'): 0, ('H', 'C'): -6, ('L', 'M'): 3,
-('W', 'Y'): 2, ('Y', 'N'): -1, ('E', 'P'): -1, ('Y', 'F'): 3,
-('E', 'T'): 0, ('A', 'A'): 4, ('I', 'N'): -3, ('G', 'A'): 0,
-('Y', 'V'): -1, ('E', 'D'): 2, ('W', 'H'): -3, ('Y', 'R'): -1,
-('M', 'Q'): 1, ('P', 'S'): -1, ('R', 'H'): 0, ('A', 'C'): -2,
-('R', 'D'): -2, ('K', 'P'): -1, ('L', 'D'): -6, ('K', 'T'): 0,
-('V', 'N'): -4, ('M', 'A'): 0, ('K', 'H'): 0, ('V', 'R'): -3,
-('P', 'C'): -8, ('M', 'E'): -2, ('A', 'S'): 0, ('T', 'T'): 5,
-('R', 'T'): -1, ('I', 'G'): -5, ('R', 'P'): -2, ('K', 'D'): -1,
-('I', 'C'): -4, ('F', 'R'): -4, ('F', 'V'): -1, ('L', 'C'): -6,
-('F', 'F'): 7, ('D', 'A'): -1, ('F', 'N'): -3, ('W', 'D'): -6,
-('L', 'P'): -3, ('Q', 'S'): -1, ('N', 'C'): -6, ('N', 'G'): -1,
-('H', 'N'): 2, ('W', 'T'): -5, ('Q', 'G'): -2, ('W', 'P'): -4,
-('Q', 'C'): -3, ('N', 'S'): 0, ('L', 'H'): -3, ('L', 'L'): 5,
-('G', 'T'): -3, ('M', 'M'): 8, ('G', 'P'): -2, ('Y', 'K'): -2,
-('Y', 'G'): -3, ('Y', 'C'): -6, ('E', 'A'): 0, ('E', 'E'): 5,
-('Y', 'S'): -2, ('M', 'P'): -6, ('V', 'C'): -4, ('M', 'T'): -2,
-('V', 'G'): -4, ('R', 'E'): 0, ('V', 'K'): -3, ('K', 'Q'): 1,
-('R', 'A'): -1, ('I', 'R'): -3, ('N', 'A'): -1, ('V', 'S'): -3,
-('M', 'D'): -4, ('M', 'H'): -2, ('K', 'A'): -1, ('R', 'Q'): 1,
-('K', 'E'): 1, ('F', 'S'): -3, ('I', 'K'): -3, ('D', 'P'): -1,
-('D', 'T'): -1, ('I', 'M'): 1, ('F', 'C'): -2, ('W', 'L'): -1,
-('F', 'G'): -6, ('F', 'K'): -3, ('F', 'T'): -3, ('D', 'D'): 6,
-('Q', 'T'): 0, ('W', 'G'): -4, ('Q', 'P'): -2, ('W', 'C'): -6,
-('W', 'K'): -3, ('H', 'Q'): 0, ('Q', 'D'): 0, ('W', 'W'): 10,
-('V', 'L'): 1, ('L', 'G'): -5, ('W', 'S'): -5, ('L', 'K'): -2,
-('N', 'P'): -2, ('H', 'E'): -2, ('N', 'T'): 0, ('H', 'A'): -2,
-('Y', 'L'): -2, ('Y', 'H'): 0, ('G', 'S'): -1, ('Y', 'D'): -3,
-('V', 'Q'): -2, ('L', 'T'): -3, ('G', 'G'): 5, ('G', 'C'): -6,
-('E', 'N'): 0, ('Y', 'T'): -2, ('Y', 'P'): -6, ('R', 'N'): -1,
-('V', 'D'): -4, ('K', 'R'): 2, ('V', 'H'): -2, ('I', 'Q'): -5,
-('V', 'P'): -4, ('M', 'C'): -5, ('K', 'N'): 0, ('V', 'T'): -1,
-('M', 'G'): -4, ('T', 'S'): 1, ('I', 'E'): -3, ('M', 'K'): -1,
-('I', 'A'): -2, ('N', 'N'): 5, ('R', 'R'): 7, ('F', 'P'): -5,
-('L', 'I'): 2, ('I', 'S'): -3, ('D', 'S'): 0, ('L', 'S'): -4,
-('I', 'H'): -5, ('F', 'D'): -5, ('D', 'C'): -7, ('F', 'H'): -2,
-('D', 'G'): -1, ('F', 'L'): 2
-}
+        ('W', 'F'): 2, ('L', 'R'): -3, ('I', 'I'): 6, ('Q', 'Q'): 6,
+        ('W', 'N'): -5, ('V', 'I'): 2, ('H', 'T'): -2, ('H', 'P'): -3,
+        ('W', 'V'): -4, ('Q', 'E'): 2, ('W', 'R'): -2, ('Q', 'A'): 0,
+        ('H', 'H'): 8, ('H', 'D'): 0, ('L', 'N'): -3, ('Y', 'M'): -1,
+        ('Y', 'I'): -1, ('Y', 'E'): -2, ('E', 'S'): -1, ('Y', 'A'): -3,
+        ('Y', 'Y'): 7, ('T', 'C'): -5, ('E', 'C'): -3, ('Y', 'Q'): -3,
+        ('E', 'G'): -2, ('V', 'A'): 0, ('C', 'C'): 11, ('M', 'R'): -4,
+        ('P', 'T'): -1, ('V', 'E'): -2, ('P', 'P'): 7, ('I', 'T'): -2,
+        ('K', 'S'): -1, ('R', 'G'): -2, ('I', 'P'): -4, ('R', 'C'): -2,
+        ('A', 'T'): -1, ('K', 'K'): 5, ('A', 'P'): -1, ('V', 'M'): 0,
+        ('I', 'D'): -3, ('K', 'C'): -4, ('K', 'G'): -3, ('R', 'S'): 0,
+        ('F', 'Q'): -4, ('F', 'A'): -3, ('V', 'V'): 5, ('M', 'N'): -2,
+        ('F', 'E'): -4, ('D', 'N'): 2, ('F', 'I'): 1, ('F', 'M'): 0,
+        ('M', 'S'): -4, ('S', 'S'): 4, ('L', 'Q'): -3, ('W', 'E'): -6,
+        ('W', 'A'): -3, ('W', 'M'): -2, ('H', 'S'): -2, ('W', 'I'): -2,
+        ('S', 'C'): -4, ('L', 'A'): -2, ('L', 'E'): -4, ('W', 'Q'): -5,
+        ('H', 'G'): -3, ('Q', 'N'): 0, ('H', 'C'): -6, ('L', 'M'): 3,
+        ('W', 'Y'): 2, ('Y', 'N'): -1, ('E', 'P'): -1, ('Y', 'F'): 3,
+        ('E', 'T'): 0, ('A', 'A'): 4, ('I', 'N'): -3, ('G', 'A'): 0,
+        ('Y', 'V'): -1, ('E', 'D'): 2, ('W', 'H'): -3, ('Y', 'R'): -1,
+        ('M', 'Q'): 1, ('P', 'S'): -1, ('R', 'H'): 0, ('A', 'C'): -2,
+        ('R', 'D'): -2, ('K', 'P'): -1, ('L', 'D'): -6, ('K', 'T'): 0,
+        ('V', 'N'): -4, ('M', 'A'): 0, ('K', 'H'): 0, ('V', 'R'): -3,
+        ('P', 'C'): -8, ('M', 'E'): -2, ('A', 'S'): 0, ('T', 'T'): 5,
+        ('R', 'T'): -1, ('I', 'G'): -5, ('R', 'P'): -2, ('K', 'D'): -1,
+        ('I', 'C'): -4, ('F', 'R'): -4, ('F', 'V'): -1, ('L', 'C'): -6,
+        ('F', 'F'): 7, ('D', 'A'): -1, ('F', 'N'): -3, ('W', 'D'): -6,
+        ('L', 'P'): -3, ('Q', 'S'): -1, ('N', 'C'): -6, ('N', 'G'): -1,
+        ('H', 'N'): 2, ('W', 'T'): -5, ('Q', 'G'): -2, ('W', 'P'): -4,
+        ('Q', 'C'): -3, ('N', 'S'): 0, ('L', 'H'): -3, ('L', 'L'): 5,
+        ('G', 'T'): -3, ('M', 'M'): 8, ('G', 'P'): -2, ('Y', 'K'): -2,
+        ('Y', 'G'): -3, ('Y', 'C'): -6, ('E', 'A'): 0, ('E', 'E'): 5,
+        ('Y', 'S'): -2, ('M', 'P'): -6, ('V', 'C'): -4, ('M', 'T'): -2,
+        ('V', 'G'): -4, ('R', 'E'): 0, ('V', 'K'): -3, ('K', 'Q'): 1,
+        ('R', 'A'): -1, ('I', 'R'): -3, ('N', 'A'): -1, ('V', 'S'): -3,
+        ('M', 'D'): -4, ('M', 'H'): -2, ('K', 'A'): -1, ('R', 'Q'): 1,
+        ('K', 'E'): 1, ('F', 'S'): -3, ('I', 'K'): -3, ('D', 'P'): -1,
+        ('D', 'T'): -1, ('I', 'M'): 1, ('F', 'C'): -2, ('W', 'L'): -1,
+        ('F', 'G'): -6, ('F', 'K'): -3, ('F', 'T'): -3, ('D', 'D'): 6,
+        ('Q', 'T'): 0, ('W', 'G'): -4, ('Q', 'P'): -2, ('W', 'C'): -6,
+        ('W', 'K'): -3, ('H', 'Q'): 0, ('Q', 'D'): 0, ('W', 'W'): 10,
+        ('V', 'L'): 1, ('L', 'G'): -5, ('W', 'S'): -5, ('L', 'K'): -2,
+        ('N', 'P'): -2, ('H', 'E'): -2, ('N', 'T'): 0, ('H', 'A'): -2,
+        ('Y', 'L'): -2, ('Y', 'H'): 0, ('G', 'S'): -1, ('Y', 'D'): -3,
+        ('V', 'Q'): -2, ('L', 'T'): -3, ('G', 'G'): 5, ('G', 'C'): -6,
+        ('E', 'N'): 0, ('Y', 'T'): -2, ('Y', 'P'): -6, ('R', 'N'): -1,
+        ('V', 'D'): -4, ('K', 'R'): 2, ('V', 'H'): -2, ('I', 'Q'): -5,
+        ('V', 'P'): -4, ('M', 'C'): -5, ('K', 'N'): 0, ('V', 'T'): -1,
+        ('M', 'G'): -4, ('T', 'S'): 1, ('I', 'E'): -3, ('M', 'K'): -1,
+        ('I', 'A'): -2, ('N', 'N'): 5, ('R', 'R'): 7, ('F', 'P'): -5,
+        ('L', 'I'): 2, ('I', 'S'): -3, ('D', 'S'): 0, ('L', 'S'): -4,
+        ('I', 'H'): -5, ('F', 'D'): -5, ('D', 'C'): -7, ('F', 'H'): -2,
+        ('D', 'G'): -1, ('F', 'L'): 2
+        }
 structure = _temp()
 del _temp
diff --git a/Bio/UniProt/GOA.py b/Bio/UniProt/GOA.py
index 75c9b72..fbbd010 100644
--- a/Bio/UniProt/GOA.py
+++ b/Bio/UniProt/GOA.py
@@ -1,5 +1,5 @@
 #!/usr/bin/env python
-# Copyright 2013 by Iddo Friedberg idoerg at gmail.com
+# Copyright 2013, 2016 by Iddo Friedberg idoerg at gmail.com
 # All rights reserved.
 # This code is part of the Biopython distribution and governed by its
 # license.  Please see the LICENSE file that should have been included
@@ -171,9 +171,14 @@ def gpi_iterator(handle):
     if inline.strip() == '!gpi-version: 1.1':
         sys.stderr.write("gpi 1.1\n")
         return _gpi11iterator(handle)
-    else:
+    elif inline.strip() == '!gpi-version: 1.0':
         sys.stderr.write("gpi 1.0\n")
         return _gpi10iterator(handle)
+    elif inline.strip() == '!gpi-version: 2.1':
+        sys.stderr.write("gpi 2.1\n")
+        return _gpi20iterator(handle)
+    else:
+        raise ValueError('Unknown GPI version {0}\n'.format(inline))
 
 
 def _gpa10iterator(handle):
@@ -228,9 +233,11 @@ def gpa_iterator(handle):
     if inline.strip() == '!gpa-version: 1.1':
         sys.stderr.write("gpa 1.1\n")
         return _gpa11iterator(handle)
-    else:
+    elif inline.strip() == '!gpa-version: 1.0':
         sys.stderr.write("gpa 1.0\n")
         return _gpa10iterator(handle)
+    else:
+        raise ValueError('Unknown GPA version {0}\n'.format(inline))
 
 
 def _gaf20iterator(handle):
@@ -320,14 +327,22 @@ def gafbyproteiniterator(handle):
     This function should be called to read a
     gene_association.goa_uniprot file. Reads the first record and
     returns a gaf 2.0 or a gaf 1.0 iterator as needed
+    2016-04-09: added GAF 2.1 iterator & fixed bug in iterator assignment
+    In the meantime GAF 2.1 uses the GAF 2.0 iterator
     """
     inline = handle.readline()
     if inline.strip() == '!gaf-version: 2.0':
         sys.stderr.write("gaf 2.0\n")
         return _gaf20byproteiniterator(handle)
-    else:
+    elif inline.strip() == '!gaf-version: 1.0':
         sys.stderr.write("gaf 1.0\n")
         return _gaf10byproteiniterator(handle)
+    elif inline.strip() == '!gaf-version: 2.1':
+        # Handle GAF 2.1 as GAF 2.0 for now TODO: fix
+        sys.stderr.write("gaf 2.1\n")
+        return _gaf20byproteiniterator(handle)
+    else:
+        raise ValueError('Unknown GAF version {0}\n'.format(inline))
 
 
 def gafiterator(handle):
@@ -341,9 +356,15 @@ def gafiterator(handle):
     if inline.strip() == '!gaf-version: 2.0':
         sys.stderr.write("gaf 2.0\n")
         return _gaf20iterator(handle)
-    else:
+    elif inline.strip() == '!gaf-version: 2.1':
+        sys.stderr.write("gaf 2.1\n")
+        # Handle GAF 2.1 as GAF 2.0 for now. TODO: fix
+        return _gaf20iterator(handle)
+    elif inline.strip() == '!gaf-version: 1.0':
         sys.stderr.write("gaf 1.0\n")
         return _gaf10iterator(handle)
+    else:
+        raise ValueError('Unknown GAF version {0}\n'.format(inline))
 
 
 def writerec(outrec, handle, fields=GAF20FIELDS):
diff --git a/Bio/__init__.py b/Bio/__init__.py
index ed35488..0fba064 100644
--- a/Bio/__init__.py
+++ b/Bio/__init__.py
@@ -10,7 +10,7 @@ of freely available Python tools for computational molecular biology.
 http://biopython.org
 """
 
-__version__ = "1.67"
+__version__ = "1.68"
 
 
 class MissingExternalDependencyError(Exception):
diff --git a/Bio/_utils.py b/Bio/_utils.py
index ef798e0..0f59456 100644
--- a/Bio/_utils.py
+++ b/Bio/_utils.py
@@ -80,8 +80,8 @@ def find_test_dir(start_dir=None):
 
     target = os.path.abspath(start_dir)
     while True:
-        if os.path.isdir(os.path.join(target, "Bio")) \
-        and os.path.isdir(os.path.join(target, "Tests")):
+        if os.path.isdir(os.path.join(target, "Bio")) and \
+                os.path.isdir(os.path.join(target, "Tests")):
             # Good, we're in the Biopython root now
             return os.path.abspath(os.path.join(target, "Tests"))
         # Recurse up the tree
@@ -91,7 +91,8 @@ def find_test_dir(start_dir=None):
             # Reached root
             break
         target = new
-    raise ValueError("Not within Biopython source tree: %r" % os.path.abspath(start_dir))
+    raise ValueError("Not within Biopython source tree: %r" %
+                     os.path.abspath(start_dir))
 
 
 def run_doctest(target_dir=None, *args, **kwargs):
diff --git a/Bio/bgzf.py b/Bio/bgzf.py
index eb5d3d0..a37780e 100755
--- a/Bio/bgzf.py
+++ b/Bio/bgzf.py
@@ -298,9 +298,11 @@ def make_virtual_offset(block_start_offset, within_block_offset):
 
     """
     if within_block_offset < 0 or within_block_offset >= 65536:
-        raise ValueError("Require 0 <= within_block_offset < 2**16, got %i" % within_block_offset)
+        raise ValueError("Require 0 <= within_block_offset < 2**16, got %i" %
+                         within_block_offset)
     if block_start_offset < 0 or block_start_offset >= 281474976710656:
-        raise ValueError("Require 0 <= block_start_offset < 2**48, got %i" % block_start_offset)
+        raise ValueError("Require 0 <= block_start_offset < 2**48, got %i" %
+                         block_start_offset)
     return (block_start_offset << 16) | within_block_offset
 
 
@@ -434,7 +436,7 @@ def _load_bgzf_block(handle, text_mode=False):
     expected_crc = handle.read(4)
     expected_size = struct.unpack("<I", handle.read(4))[0]
     assert expected_size == len(data), \
-           "Decompressed to %i, not %i" % (len(data), expected_size)
+        "Decompressed to %i, not %i" % (len(data), expected_size)
     # Should cope with a mix of Python platforms...
     crc = zlib.crc32(data)
     if crc < 0:
@@ -442,7 +444,7 @@ def _load_bgzf_block(handle, text_mode=False):
     else:
         crc = struct.pack("<I", crc)
     assert expected_crc == crc, \
-           "CRC is %s, not %s" % (crc, expected_crc)
+        "CRC is %s, not %s" % (crc, expected_crc)
     if text_mode:
         return block_size, _as_string(data)
     else:
@@ -531,8 +533,7 @@ class BgzfReader(object):
             handle = fileobj
             assert "b" in handle.mode.lower()
         else:
-            if "w" in mode.lower() \
-            or "a" in mode.lower():
+            if "w" in mode.lower() or "a" in mode.lower():
                 raise ValueError("Must use read mode (default), not write or append mode")
             handle = _open(filename, "rb")
         self._text = "b" not in mode.lower()
@@ -587,7 +588,8 @@ class BgzfReader(object):
 
     def tell(self):
         """Returns a 64-bit unsigned BGZF virtual offset."""
-        if 0 < self._within_block_offset and self._within_block_offset == len(self._buffer):
+        if 0 < self._within_block_offset and \
+                self._within_block_offset == len(self._buffer):
             # Special case where we're right at the end of a (non empty) block.
             # For non-maximal blocks could give two possible virtual offsets,
             # but for a maximal block can't use 65536 as the within block
@@ -611,15 +613,16 @@ class BgzfReader(object):
             # (this avoids a function call since _load_block would do nothing)
             self._load_block(start_offset)
             assert start_offset == self._block_start_offset
-        if within_block > len(self._buffer) \
-        and not (within_block == 0 and len(self._buffer) == 0):
-            raise ValueError("Within offset %i but block size only %i"
-                             % (within_block, len(self._buffer)))
+        if within_block > len(self._buffer):
+            if not (within_block == 0 and len(self._buffer) == 0):
+                raise ValueError("Within offset %i but block size only %i"
+                                 % (within_block, len(self._buffer)))
         self._within_block_offset = within_block
         # assert virtual_offset == self.tell(), \
         #    "Did seek to %i (%i, %i), but tell says %i (%i, %i)" \
         #    % (virtual_offset, start_offset, within_block,
-        #       self.tell(), self._block_start_offset, self._within_block_offset)
+        #       self.tell(), self._block_start_offset,
+        #       self._within_block_offset)
         return virtual_offset
 
     def read(self, size=-1):
@@ -721,8 +724,7 @@ class BgzfWriter(object):
             assert filename is None
             handle = fileobj
         else:
-            if "w" not in mode.lower() \
-            and "a" not in mode.lower():
+            if "w" not in mode.lower() and "a" not in mode.lower():
                 raise ValueError("Must use write or append mode, not %r" % mode)
             if "a" in mode.lower():
                 handle = _open(filename, "ab")
@@ -737,7 +739,8 @@ class BgzfWriter(object):
         # print("Saving %i bytes" % len(block))
         start_offset = self._handle.tell()
         assert len(block) <= 65536
-        # Giving a negative window bits means no gzip/zlib headers, -15 used in samtools
+        # Giving a negative window bits means no gzip/zlib headers,
+        # -15 used in samtools
         c = zlib.compressobj(self.compresslevel,
                              zlib.DEFLATED,
                              -15,
@@ -745,7 +748,8 @@ class BgzfWriter(object):
                              0)
         compressed = c.compress(block) + c.flush()
         del c
-        assert len(compressed) < 65536, "TODO - Didn't compress enough, try less data in this block"
+        assert len(compressed) < 65536, \
+            "TODO - Didn't compress enough, try less data in this block"
         crc = zlib.crc32(block)
         # Should cope with a mix of Python platforms...
         if crc < 0:
@@ -791,12 +795,15 @@ class BgzfWriter(object):
         self._handle.flush()
 
     def close(self):
-        """Flush data, write 28 bytes empty BGZF EOF marker, and close the BGZF file."""
+        """Flush data, write 28 bytes BGZF EOF marker, and close BGZF file.
+
+        samtools will look for a magic EOF marker, just a 28 byte empty BGZF
+        block, and if it is missing warns the BAM file may be truncated. In
+        addition to samtools writing this block, so too does bgzip - so this
+        implementation does too.
+        """
         if self._buffer:
             self.flush()
-        # samtools will look for a magic EOF marker, just a 28 byte empty BGZF block,
-        # and if it is missing warns the BAM file may be truncated. In addition to
-        # samtools writing this block, so too does bgzip - so we should too.
         self._handle.write(_bgzf_eof)
         self._handle.flush()
         self._handle.close()
diff --git a/Bio/codonalign/__init__.py b/Bio/codonalign/__init__.py
index baedcba..0a127b3 100644
--- a/Bio/codonalign/__init__.py
+++ b/Bio/codonalign/__init__.py
@@ -141,7 +141,7 @@ def build(pro_align, nucl_seqs, corr_dict=None, gap_char='-', unknown='X',
     # corr_method = 1, keyword pairing
     elif corr_method == 1:
         nucl_id = set(nucl_seqs.keys())
-        pro_id = set([i.id for i in pro_align])
+        pro_id = set(i.id for i in pro_align)
         # check if there is pro_id that does not have a nucleotide match
         if pro_id - nucl_id:
             diff = pro_id - nucl_id
diff --git a/Bio/codonalign/codonalignment.py b/Bio/codonalign/codonalignment.py
index f75ae77..1b89cfc 100644
--- a/Bio/codonalign/codonalignment.py
+++ b/Bio/codonalign/codonalignment.py
@@ -201,7 +201,7 @@ def mktest(codon_alns, codon_table=default_codon_table, alpha=0.05):
     for i in range(codon_num):
         uniq_codons = []
         for j in codon_lst:
-            uniq_codon = set([k[i] for k in j])
+            uniq_codon = set(k[i] for k in j)
             uniq_codons.append(uniq_codon)
         codon_set.append(uniq_codons)
     syn_fix, nonsyn_fix, syn_poly, nonsyn_poly = 0, 0, 0, 0
diff --git a/Bio/codonalign/codonseq.py b/Bio/codonalign/codonseq.py
index 0afe6e3..cb4b76f 100644
--- a/Bio/codonalign/codonseq.py
+++ b/Bio/codonalign/codonseq.py
@@ -89,10 +89,10 @@ class CodonSeq(Seq):
             #    assert  len(self) % 3 == 0, \
             #            "Gapped sequence length is not a triple number"
             assert isinstance(rf_table, (tuple, list)), \
-                    "rf_table should be a tuple or list object"
+                "rf_table should be a tuple or list object"
             assert all(isinstance(i, int) for i in rf_table), \
-                    "elements in rf_table should be int that specify " \
-                  + "the codon positions of the sequence"
+                "elements in rf_table should be int that specify " + \
+                "the codon positions of the sequence"
             seq_ungapped = self._data.replace(gap_char, "")
             for i in rf_table:
                 if seq_ungapped[i:i + 3] not in alphabet.letters:
@@ -108,7 +108,7 @@ class CodonSeq(Seq):
     def get_codon(self, index):
         """get the `index`-th codon from the self.seq
         """
-        if len(set([i % 3 for i in self.rf_table])) != 1:
+        if len(set(i % 3 for i in self.rf_table)) != 1:
             raise RuntimeError("frameshift detected. "
                                "CodonSeq object is not able to deal "
                                "with codon sequence with frameshift. "
@@ -243,8 +243,8 @@ class CodonSeq(Seq):
             if not gap:
                 gap = self.alphabet.gap_char
             elif gap != self.alphabet.gap_char:
-                raise ValueError("Gap %s does not match %s from alphabet"
-                        % (repr(gap), repr(self.alphabet.alphabet.gap_char)))
+                raise ValueError("Gap %s does not match %s from alphabet" %
+                                 (repr(gap), repr(self.alphabet.alphabet.gap_char)))
             alpha = _ungap(self.alphabet)
         elif not gap:
             raise ValueError("Gap character not given and not defined in "
@@ -329,7 +329,7 @@ def cal_dn_ds(codon_seq1, codon_seq2, method="NG86",
                            "are not the same".format(
                                len(codon_seq1.get_full_rf_table()),
                                len(codon_seq2.get_full_rf_table()))
-                          )
+                           )
     if cfreq is None:
         cfreq = 'F3x4'
     elif cfreq is not None and method != 'ML':
@@ -338,7 +338,7 @@ def cal_dn_ds(codon_seq1, codon_seq2, method="NG86",
     if cfreq not in ('F1x4', 'F3x4', 'F61'):
         import warnings
         warnings.warn("Unknown cfreq ({0}). Only F1x4, F3x4 and F61 are "
-                     "acceptable. Use F3x4 in the following.".format(cfreq))
+                      "acceptable. Use F3x4 in the following.".format(cfreq))
         cfreq = 'F3x4'
     seq1_codon_lst = _get_codon_list(codon_seq1)
     seq2_codon_lst = _get_codon_list(codon_seq2)
@@ -492,8 +492,8 @@ def _count_diff_NG86(codon1, codon2, codon_table=default_codon_table):
             return (sd, nd)
 
         if len(diff_pos) == 1:
-            SN = [i + j for i, j in zip(SN,
-                    compare_codon(codon1, codon2, codon_table=codon_table))]
+            SN = [i + j for i, j in
+                  zip(SN, compare_codon(codon1, codon2, codon_table=codon_table))]
         elif len(diff_pos) == 2:
             codon2_aa = codon_table.forward_table[codon2]
             for i in diff_pos:
@@ -502,12 +502,12 @@ def _count_diff_NG86(codon1, codon2, codon_table=default_codon_table):
                                                       codon1, temp_codon,
                                                       codon_table=codon_table,
                                                       weight=0.5))
-                     ]
+                      ]
                 SN = [i + j for i, j in zip(SN, compare_codon(
                                                       temp_codon, codon2,
                                                       codon_table=codon_table,
                                                       weight=0.5))
-                     ]
+                      ]
         elif len(diff_pos) == 3:
             codon2_aa = codon_table.forward_table[codon2]
             paths = list(permutations([0, 1, 2], 3))
@@ -565,12 +565,12 @@ def _lwl85(seq1, seq2, k, codon_table):
                                             codon1,
                                             codon2,
                                             fold_dict=codon_fold_dict)
-                                      )]
+                                        )]
     PQ = [i / j for i, j in zip(PQ, L * 2)]
     P = PQ[:3]
     Q = PQ[3:]
     A = [(1. / 2) * log(1. / (1 - 2 * i - j)) - (1. / 4) * log(1. / (1 - 2 * j))
-            for i, j in zip(P, Q)]
+         for i, j in zip(P, Q)]
     B = [(1. / 2) * log(1. / (1 - 2 * i)) for i in Q]
     dS = 3 * (L[2] * A[1] + L[2] * (A[2] + B[2])) / (L[1] + 3 * L[2])
     dN = 3 * (L[2] * B[1] + L[0] * (A[0] + B[0])) / (2 * L[1] + 3 * L[0])
@@ -726,7 +726,7 @@ def _yn00(seq1, seq2, k, codon_table):
         SN = [m + n for m, n in zip(SN, _count_diff_NG86(
                                                   i, j,
                                                   codon_table=codon_table)
-                                  )
+                                    )
               ]
     ps = SN[0] / S_sites
     pn = SN[1] / N_sites
@@ -738,8 +738,8 @@ def _yn00(seq1, seq2, k, codon_table):
     for temp in range(20):
         # count synonymous and nonsynonymous differences under kappa, w, t
         codon_lst = [i for i in
-                                list(codon_table.forward_table.keys()) +
-                                codon_table.stop_codons if 'U' not in i]
+                     list(codon_table.forward_table.keys()) +
+                     codon_table.stop_codons if 'U' not in i]
         Q = _get_Q(pi, kappa, w, codon_lst, codon_table)
         P = expm(Q * t)
         TV = [0, 0, 0, 0]  # synonymous/nonsynonymous transition/transversion
@@ -758,7 +758,8 @@ def _yn00(seq1, seq2, k, codon_table):
         dSdN = []
         for f, tv in zip(bfreqSN, TV):
             dSdN.append(_get_kappa_t(f, tv, t=True))
-        t = dSdN[0] * 3 * S_sites / (S_sites + N_sites) + dSdN[1] * 3 * N_sites / (S_sites + N_sites)
+        t = dSdN[0] * 3 * S_sites / (S_sites + N_sites) + \
+            dSdN[1] * 3 * N_sites / (S_sites + N_sites)
         w = dSdN[1] / dSdN[0]
         if all(map(lambda x: x < tolerance, [abs(i - j) for i, j in zip(dSdN, dSdN_pre)])):
             return dSdN[1], dSdN[0]  # dN, dS
@@ -799,8 +800,8 @@ def _get_kappa_t(pi, TV, t=False):
     pi['Y'] = pi['T'] + pi['C']
     pi['R'] = pi['A'] + pi['G']
     A = (2 * (pi['T'] * pi['C'] + pi['A'] * pi['G']) +
-        2 * (pi['T'] * pi['C'] * pi['R'] / pi['Y'] + pi['A'] * pi['G'] * pi['Y'] / pi['R']) *
-        (1 - TV[1] / (2 * pi['Y'] * pi['R'])) - TV[0]) /\
+         2 * (pi['T'] * pi['C'] * pi['R'] / pi['Y'] + pi['A'] * pi['G'] * pi['Y'] / pi['R']) *
+         (1 - TV[1] / (2 * pi['Y'] * pi['R'])) - TV[0]) / \
         (2 * (pi['T'] * pi['C'] / pi['Y'] + pi['A'] * pi['G'] / pi['R']))
     B = 1 - TV[1] / (2 * pi['Y'] * pi['R'])
     a = -0.5 * log(A)  # this seems to be an error in YANG's original paper
@@ -817,7 +818,7 @@ def _get_kappa_t(pi, TV, t=False):
 
 
 def _count_site_YN00(codon_lst1, codon_lst2, pi, k,
-        codon_table=default_codon_table):
+                     codon_table=default_codon_table):
     """Site counting method from Ina / Yang and Nielsen (PRIVATE).
 
     Method from `Ina (1995)`_ as modified by `Yang and Nielsen (2000)`_.
@@ -1020,8 +1021,8 @@ def _ml(seq1, seq2, cmethod, codon_table):
         if '---' not in (i, j):
             codon_cnt[(i, j)] += 1
     codon_lst = [i for i in
-            list(codon_table.forward_table.keys()) + codon_table.stop_codons
-            if 'U' not in i]
+                 list(codon_table.forward_table.keys()) + codon_table.stop_codons
+                 if 'U' not in i]
 
     # apply optimization
     def func(params, pi=pi, codon_cnt=codon_cnt, codon_lst=codon_lst,
@@ -1118,7 +1119,7 @@ def _get_pi(seq1, seq2, cmethod, codon_table=default_codon_table):
             tot = sum(fcodon[i].values())
             fcodon[i] = dict((j, k / tot) for j, k in fcodon[i].items())
         for i in list(codon_table.forward_table.keys()) + \
-                      codon_table.stop_codons:
+                codon_table.stop_codons:
             if 'U' not in i:
                 pi[i] = fcodon[0][i[0]] * fcodon[1][i[1]] * fcodon[2][i[2]]
     elif cmethod == 'F61':
diff --git a/Bio/cpairwise2module.c b/Bio/cpairwise2module.c
index 17065c3..1d1f4e5 100644
--- a/Bio/cpairwise2module.c
+++ b/Bio/cpairwise2module.c
@@ -1,6 +1,8 @@
-/* Copyright 2002 by Jeffrey Chang.  All rights reserved.
+/* Copyright 2002 by Jeffrey Chang.
+ * Copyright 2016 by Markus Piotrowski.
+ * All rights reserved.
  * This code is part of the Biopython distribution and governed by its
- * license.  Please see the LICENSE file that should have been included
+ * license. Please see the LICENSE file that should have been included
  * as part of this package.
  *
  * cpairwise2module.c
@@ -17,7 +19,7 @@
 
 /* Functions in this module. */
 
-double calc_affine_penalty(int length, double open, double extend,
+static double calc_affine_penalty(int length, double open, double extend,
     int penalize_extend_when_opening)
 {
     double penalty;
@@ -30,124 +32,14 @@ double calc_affine_penalty(int length, double open, double extend,
     return penalty;
 }
 
-struct IndexList {
-    int num_used;
-    int num_allocated;
-    int *indexes; /* Array of ints.  Even ints are rows, odd ones are cols. */
-};
-
-static void IndexList_init(struct IndexList *il)
-{
-    /* il->num_used = 0;
-    il->num_allocated = 0;
-    il->indexes = NULL; */
-    memset((void *)il, 0, sizeof(struct IndexList));
-}
-
-static void IndexList_free(struct IndexList *il)
-{
-    if(il->indexes)
-        free(il->indexes);
-    IndexList_init(il);
-}
-
-static void IndexList_clear(struct IndexList *il)
-{
-    il->num_used = 0;
-}
-
-static int IndexList_contains(struct IndexList *il,
-                              const int row, const int col)
+static double _get_match_score(PyObject *py_sequenceA, PyObject *py_sequenceB,
+                               PyObject *py_match_fn, int i, int j,
+                               char *sequenceA, char *sequenceB,
+                               int use_sequence_cstring,
+                               double match, double mismatch,
+                               int use_match_mismatch_scores)
 {
-    int i;
-    int stop;
-
-    stop = il->num_used*2;
-    for(i=0; i<stop; i+=2) {
-        if((il->indexes[i] == row) && (il->indexes[i+1] == col))
-            return 1;
-    }
-    return 0;
-}
-
-static int IndexList__verify_free_index(struct IndexList *il, int num_needed)
-{
-    int *indexes;
-    int num_to_allocate;
-    int num_bytes;
-
-    if(il->num_allocated >= num_needed)
-        return 1;
-
-    /* Nearly all the cases are for list of length 1 or 2.
-       Empirically, the code seems to run fastest when I allocate the
-       exact amount for these. */
-    if(num_needed <= 2)
-        num_to_allocate = num_needed;
-    else
-        num_to_allocate = num_needed*2;
-    num_bytes = num_to_allocate*sizeof(int)*2;
-    if(!(indexes = realloc((void *)il->indexes, num_bytes))) {
-        PyErr_SetString(PyExc_MemoryError, "Out of memory");
-        return 0;
-    }
-    il->indexes = indexes;
-    il->num_allocated = num_to_allocate;
-    return 1;
-}
-
-static void IndexList_append(struct IndexList *il,
-                             const int row, const int col)
-{
-    int i;
-    if(!IndexList__verify_free_index(il, il->num_used+1))
-        return;
-    i=il->num_used*2;
-    il->indexes[i] = row;
-    il->indexes[i+1] = col;
-    il->num_used += 1;
-}
-
-static void IndexList_extend(struct IndexList *il1, struct IndexList *il2)
-{
-    int i1, i2;
-    int stop;
-
-    if(!IndexList__verify_free_index(il1, il1->num_used+il2->num_used))
-        return;
-    stop=il2->num_used * 2;
-    for(i1=il1->num_used*2, i2=0; i2<stop; i1+=2, i2+=2) {
-        il1->indexes[i1] = il2->indexes[i2];
-        il1->indexes[i1+1] = il2->indexes[i2+1];
-    }
-    il1->num_used += il2->num_used;
-}
-
-/* static void IndexList_copy(struct IndexList *il1, struct IndexList *il2)
-{
-    IndexList_clear(il1);
-    IndexList_extend(il1, il2);
-    } */
-
-/* static void IndexList_assign(struct IndexList *il1, struct IndexList *il2)
-{
-    if(il1->indexes)
-        free(il1->indexes);
-    il1->indexes = il2->indexes;
-    il1->num_used = il2->num_used;
-    il1->num_allocated = il2->num_allocated;
-    } */
-
-
-double _get_match_score(PyObject *py_sequenceA, PyObject *py_sequenceB,
-                        PyObject *py_match_fn, int i, int j,
-                        char *sequenceA, char *sequenceB,
-                        int use_sequence_cstring,
-                        double match, double mismatch,
-                        int use_match_mismatch_scores)
-{
-    PyObject *py_A=NULL,
-        *py_B=NULL;
+    PyObject *py_A=NULL, *py_B=NULL;
     PyObject *py_arglist=NULL, *py_result=NULL;
     double score = 0;
 
@@ -166,6 +58,7 @@ double _get_match_score(PyObject *py_sequenceA, PyObject *py_sequenceB,
     if(!(py_result = PyEval_CallObject(py_match_fn, py_arglist)))
         goto _get_match_score_cleanup;
     score = PyFloat_AsDouble(py_result);
+
  _get_match_score_cleanup:
     if(py_A) {
         Py_DECREF(py_A);
@@ -183,7 +76,8 @@ double _get_match_score(PyObject *py_sequenceA, PyObject *py_sequenceB,
 }
 
 #if PY_MAJOR_VERSION >= 3
-static PyObject* _create_bytes_object(PyObject* o) {
+static PyObject* _create_bytes_object(PyObject* o)
+{
     PyObject* b;
     if (PyBytes_Check(o)) {
         return o;
@@ -201,15 +95,14 @@ static PyObject* _create_bytes_object(PyObject* o) {
 #endif
 
 /* This function is a more-or-less straightforward port of the
- * equivalent function in pairwise2.  Please see there for algorithm
+ * equivalent function in pairwise2. Please see there for algorithm
  * documentation.
  */
-static PyObject *cpairwise2__make_score_matrix_fast(
-    PyObject *self, PyObject *args)
+static PyObject *cpairwise2__make_score_matrix_fast(PyObject *self,
+                                                    PyObject *args)
 {
     int i;
     int row, col;
-
     PyObject *py_sequenceA, *py_sequenceB, *py_match_fn;
 #if PY_MAJOR_VERSION >= 3
     PyObject *py_bytesA, *py_bytesB;
@@ -223,17 +116,14 @@ static PyObject *cpairwise2__make_score_matrix_fast(
     PyObject *py_match=NULL, *py_mismatch=NULL;
     double first_A_gap, first_B_gap;
     double match, mismatch;
+    double score;
     int use_match_mismatch_scores;
     int lenA, lenB;
     double *score_matrix = NULL;
-    struct IndexList *trace_matrix = NULL;
+    unsigned char *trace_matrix = NULL;
     PyObject *py_score_matrix=NULL, *py_trace_matrix=NULL;
 
-    double *row_cache_score = NULL,
-        *col_cache_score = NULL;
-    struct IndexList *row_cache_index = NULL,
-        *col_cache_index = NULL;
-
+    double *col_cache_score = NULL;
     PyObject *py_retval = NULL;
 
     if(!PyArg_ParseTuple(args, "OOOddddi(ii)ii", &py_sequenceA, &py_sequenceB,
@@ -248,7 +138,7 @@ static PyObject *cpairwise2__make_score_matrix_fast(
         return NULL;
     }
 
-    /* Optimize for the common case.  Check to see if py_sequenceA and
+    /* Optimize for the common case. Check to see if py_sequenceA and
        py_sequenceB are strings.  If they are, use the c string
        representation. */
 #if PY_MAJOR_VERSION < 3
@@ -277,8 +167,8 @@ static PyObject *cpairwise2__make_score_matrix_fast(
         PyErr_SetString(PyExc_TypeError, "py_match_fn must be callable.");
         return NULL;
     }
-    /* Optimize for the common case.  Check to see if py_match_fn is
-       an identity_match.  If so, pull out the match and mismatch
+    /* Optimize for the common case. Check to see if py_match_fn is
+       an identity_match. If so, pull out the match and mismatch
        member variables and calculate the scores myself. */
     match = mismatch = 0;
     use_match_mismatch_scores = 0;
@@ -293,7 +183,8 @@ static PyObject *cpairwise2__make_score_matrix_fast(
     if(mismatch==-1.0 && PyErr_Occurred())
         goto cleanup_after_py_match_fn;
     use_match_mismatch_scores = 1;
-cleanup_after_py_match_fn:
+
+ cleanup_after_py_match_fn:
     if(PyErr_Occurred())
         PyErr_Clear();
     if(py_match) {
@@ -302,189 +193,166 @@ cleanup_after_py_match_fn:
     if(py_mismatch) {
         Py_DECREF(py_mismatch);
     }
-
     /* Cache some commonly used gap penalties */
     first_A_gap = calc_affine_penalty(1, open_A, extend_A,
                                       penalize_extend_when_opening);
     first_B_gap = calc_affine_penalty(1, open_B, extend_B,
                                       penalize_extend_when_opening);
 
-    /* Allocate matrices for storing the results and initialize them. */
+    /* Allocate matrices for storing the results and initialize first row and col. */
     lenA = PySequence_Length(py_sequenceA);
     lenB = PySequence_Length(py_sequenceB);
-    score_matrix = malloc(lenA*lenB*sizeof(*score_matrix));
-    trace_matrix = malloc(lenA*lenB*sizeof(*trace_matrix));
-    if(!score_matrix || !trace_matrix) {
+    score_matrix = malloc((lenA+1)*(lenB+1)*sizeof(*score_matrix));
+    if(!score_matrix) {
         PyErr_SetString(PyExc_MemoryError, "Out of memory");
         goto _cleanup_make_score_matrix_fast;
     }
-    for(i=0; i<lenA*lenB; i++) {
+    for(i=0; i<(lenB+1); i++)
         score_matrix[i] = 0;
-        IndexList_init(&trace_matrix[i]);
-    }
+    for(i=0; i<(lenA+1)*(lenB+1); i += (lenB+1))
+        score_matrix[i] = 0;
+    /* If we only want the score, we don't need the trace matrix. */
+    if (!score_only){
+        trace_matrix = malloc((lenA+1)*(lenB+1)*sizeof(*trace_matrix));
+        if(!trace_matrix) {
+            PyErr_SetString(PyExc_MemoryError, "Out of memory");
+            goto _cleanup_make_score_matrix_fast;
+        }
+        for(i=0; i<(lenB+1); i++)
+            trace_matrix[i] = 0;
+        for(i=0; i<(lenA+1)*(lenB+1); i += (lenB+1))
+            trace_matrix[i] = 0;
+        }
+    else
+        trace_matrix = malloc(1);
 
     /* Initialize the first row and col of the score matrix. */
-    for(i=0; i<lenA; i++) {
-        double score = _get_match_score(py_sequenceA, py_sequenceB,
-                                        py_match_fn, i, 0,
-                                        sequenceA, sequenceB,
-                                        use_sequence_cstring,
-                                        match, mismatch,
-                                        use_match_mismatch_scores);
-        if(score==-1.0 && PyErr_Occurred())
-            goto _cleanup_make_score_matrix_fast;
+    for(i=0; i<=lenA; i++) {
         if(penalize_end_gaps_B)
-            score += calc_affine_penalty(i, open_B, extend_B,
-                                         penalize_extend_when_opening);
-        score_matrix[i*lenB] = score;
+            score = calc_affine_penalty(i, open_B, extend_B,
+                                        penalize_extend_when_opening);
+        else
+            score = 0;
+        score_matrix[i*(lenB+1)] = score;
     }
-    for(i=0; i<lenB; i++) {
-        double score = _get_match_score(py_sequenceA, py_sequenceB,
-                                        py_match_fn, 0, i,
-                                        sequenceA, sequenceB,
-                                        use_sequence_cstring,
-                                        match, mismatch,
-                                        use_match_mismatch_scores);
-        if(score==-1.0 && PyErr_Occurred())
-            goto _cleanup_make_score_matrix_fast;
+    for(i=0; i<=lenB; i++) {
         if(penalize_end_gaps_A)
-            score += calc_affine_penalty(i, open_A, extend_A,
-                                         penalize_extend_when_opening);
+            score = calc_affine_penalty(i, open_A, extend_A,
+                                        penalize_extend_when_opening);
+        else
+            score = 0;
         score_matrix[i] = score;
     }
 
-    /* Now initialize the row and col cache. */
-    row_cache_score = malloc((lenA-1)*sizeof(*row_cache_score));
-    row_cache_index = malloc((lenA-1)* sizeof(*row_cache_index));
-    col_cache_score = malloc((lenB-1)*sizeof(*col_cache_score));
-    col_cache_index = malloc((lenB-1)* sizeof(*col_cache_index));
-    if(!row_cache_score || !row_cache_index ||
-       !col_cache_score || !col_cache_index) {
-        PyErr_SetString(PyExc_MemoryError, "Out of memory");
-        goto _cleanup_make_score_matrix_fast;
-    }
-    memset((void *)row_cache_score, 0, (lenA-1)*sizeof(*row_cache_score));
-    memset((void *)row_cache_index, 0, (lenA-1)*sizeof(*row_cache_index));
-    memset((void *)col_cache_score, 0, (lenB-1)*sizeof(*col_cache_score));
-    memset((void *)col_cache_index, 0, (lenB-1)*sizeof(*col_cache_index));
-    for(i=0; i<lenA-1; i++) {
-        row_cache_score[i] = score_matrix[i*lenB] + first_A_gap;
-        IndexList_append(&row_cache_index[i], i, 0);
-    }
-    for(i=0; i<lenB-1; i++) {
-        col_cache_score[i] = score_matrix[i] + first_B_gap;
-        IndexList_append(&col_cache_index[i], 0, i);
+    /* Now initialize the col cache. */
+    col_cache_score = malloc((lenB+1)*sizeof(*col_cache_score));
+    memset((void *)col_cache_score, 0, (lenB+1)*sizeof(*col_cache_score));
+    for(i=0; i<=lenB; i++) {
+        col_cache_score[i] = calc_affine_penalty(i, (2*open_B), extend_B,
+                             penalize_extend_when_opening);
     }
 
-    /* Fill in the score matrix. */
-    for(row=1; row<lenA; row++) {
-        for(col=1; col<lenB; col++) {
-            double nogap_score, row_score, col_score, best_score;
-            int best_score_rint;
-            struct IndexList *il;
-
-            double score, open_score, extend_score, delta_score;
-            int open_score_rint, extend_score_rint;
+    /* Fill in the score matrix. The row cache is calculated on the fly.*/
+    for(row=1; row<=lenA; row++) {
+        double row_cache_score = calc_affine_penalty(row, (2*open_A), extend_A,
+                                 penalize_extend_when_opening);
+        for(col=1; col<=lenB; col++) {
+            double match_score, nogap_score;
+            double row_open, row_extend, col_open, col_extend, best_score;
+            int best_score_rint, row_score_rint, col_score_rint;
+            unsigned char row_trace_score, col_trace_score, trace_score;
 
             /* Calculate the best score. */
-            nogap_score = score_matrix[(row-1)*lenB+col-1];
-            if(col > 1) {
-                row_score = row_cache_score[row-1];
-            } else {
-                row_score = nogap_score-1; /* Make sure it's not best score */
-            }
-            if(row > 1) {
-                col_score = col_cache_score[col-1];
-            } else {
-                col_score = nogap_score-1; /* Make sure it's not best score */
-            }
-
-            best_score = (row_score > col_score) ? row_score : col_score;
-            if(nogap_score > best_score)
-                best_score = nogap_score;
-            best_score_rint = rint(best_score);
-
-            /* Set the score and traceback matrices. */
-            delta_score = _get_match_score(py_sequenceA, py_sequenceB,
-                                           py_match_fn, row, col,
+            match_score = _get_match_score(py_sequenceA, py_sequenceB,
+                                           py_match_fn, row-1, col-1,
                                            sequenceA, sequenceB,
                                            use_sequence_cstring,
                                            match, mismatch,
                                            use_match_mismatch_scores);
-            if(delta_score==-1.0 && PyErr_Occurred())
+            if(match_score==-1.0 && PyErr_Occurred())
                 goto _cleanup_make_score_matrix_fast;
-            score = best_score + delta_score;
-            if(!align_globally && score < 0)
-                score_matrix[row*lenB+col] = 0;
-            else
-                score_matrix[row*lenB+col] = score;
+            nogap_score = score_matrix[(row-1)*(lenB+1)+col-1] + match_score;
 
-            il = &trace_matrix[row*lenB+col];
-            if(best_score_rint == rint(nogap_score)) {
-                IndexList_append(il, row-1, col-1);
-            }
-            if(best_score_rint == rint(row_score)) {
-                IndexList_extend(il, &row_cache_index[row-1]);
+            if (!penalize_end_gaps_A && row==lenA) {
+                row_open = score_matrix[(row)*(lenB+1)+col-1];
+                row_extend = row_cache_score;
             }
-            if(best_score_rint == rint(col_score)) {
-                IndexList_extend(il, &col_cache_index[col-1]);
+            else {
+                row_open = score_matrix[(row)*(lenB+1)+col-1] + first_A_gap;
+                row_extend = row_cache_score + extend_A;
             }
+            row_cache_score = (row_open > row_extend) ? row_open : row_extend;
 
-            /* Update the cached column scores. */
-            open_score = score_matrix[(row-1)*lenB+col-1] + first_B_gap;
-            extend_score = col_cache_score[col-1] + extend_B;
-            open_score_rint = rint(open_score);
-            extend_score_rint = rint(extend_score);
-            if(open_score_rint > extend_score_rint) {
-                col_cache_score[col-1] = open_score;
-                IndexList_clear(&col_cache_index[col-1]);
-                IndexList_append(&col_cache_index[col-1], row-1, col-1);
-            } else if(extend_score_rint > open_score_rint) {
-                col_cache_score[col-1] = extend_score;
-            } else {
-                col_cache_score[col-1] = open_score;
-                if(!IndexList_contains(&col_cache_index[col-1], row-1, col-1))
-                    IndexList_append(&col_cache_index[col-1], row-1, col-1);
+            if (!penalize_end_gaps_B && col==lenB){
+                col_open = score_matrix[(row-1)*(lenB+1)+col];
+                col_extend = col_cache_score[col];
+            }
+            else {
+                col_open = score_matrix[(row-1)*(lenB+1)+col] + first_B_gap;
+                col_extend = col_cache_score[col] + extend_B;
             }
+            col_cache_score[col] = (col_open > col_extend) ? col_open : col_extend;
 
-            /* Update the cached row scores. */
-            open_score = score_matrix[(row-1)*lenB+col-1] + first_A_gap;
-            extend_score = row_cache_score[row-1] + extend_A;
-            open_score_rint = rint(open_score);
-            extend_score_rint = rint(extend_score);
-            if(open_score_rint > extend_score_rint) {
-                row_cache_score[row-1] = open_score;
-                IndexList_clear(&row_cache_index[row-1]);
-                IndexList_append(&row_cache_index[row-1], row-1, col-1);
-            } else if(extend_score_rint > open_score_rint) {
-                row_cache_score[row-1] = extend_score;
-            } else {
-                row_cache_score[row-1] = open_score;
-                if(!IndexList_contains(&row_cache_index[row-1], row-1, col-1))
-                    IndexList_append(&row_cache_index[row-1], row-1, col-1);
+            best_score = (row_cache_score > col_cache_score[col]) ? row_cache_score : col_cache_score[col];
+            if(nogap_score > best_score)
+                best_score = nogap_score;
+
+            if(!align_globally && best_score < 0)
+                score_matrix[row*(lenB+1)+col] = 0;
+            else
+                score_matrix[row*(lenB+1)+col] = best_score;
+
+            if (!score_only) {
+                row_score_rint = rint(row_cache_score);
+                col_score_rint = rint(col_cache_score[col]);
+                row_trace_score = 0;
+                col_trace_score = 0;
+                if (rint(row_open) == row_score_rint)
+                    row_trace_score = row_trace_score|1;
+                if (rint(row_extend) == row_score_rint)
+                    row_trace_score = row_trace_score|8;
+                if (rint(col_open) == col_score_rint)
+                    col_trace_score = col_trace_score|4;
+                if (rint(col_extend) == col_score_rint)
+                    col_trace_score = col_trace_score|16;
+
+                trace_score = 0;
+                best_score_rint = rint(best_score);
+                if (rint(nogap_score) == best_score_rint)
+                    trace_score = trace_score|2;
+                if (row_score_rint == best_score_rint)
+                    trace_score += row_trace_score;
+                if (col_score_rint == best_score_rint)
+                    trace_score += col_trace_score;
+                trace_matrix[row*(lenB+1)+col] = trace_score;
             }
         }
     }
 
     /* Save the score and traceback matrices into real python objects. */
-    if(!(py_score_matrix = PyList_New(lenA)))
-        goto _cleanup_make_score_matrix_fast;
-    if(!(py_trace_matrix = PyList_New(lenA)))
+    if(!(py_score_matrix = PyList_New(lenA+1)))
         goto _cleanup_make_score_matrix_fast;
-    for(row=0; row<lenA; row++) {
+    if(!score_only){
+        if(!(py_trace_matrix = PyList_New(lenA+1)))
+            goto _cleanup_make_score_matrix_fast;
+    }
+    else
+        py_trace_matrix = PyList_New(1);
+
+    for(row=0; row<=lenA; row++) {
         PyObject *py_score_row, *py_trace_row;
-        if(!(py_score_row = PyList_New(lenB)))
+        if(!(py_score_row = PyList_New(lenB+1)))
             goto _cleanup_make_score_matrix_fast;
         PyList_SET_ITEM(py_score_matrix, row, py_score_row);
-        if(!(py_trace_row = PyList_New(lenB)))
-            goto _cleanup_make_score_matrix_fast;
-        PyList_SET_ITEM(py_trace_matrix, row, py_trace_row);
+        if(!score_only){
+            if(!(py_trace_row = PyList_New(lenB+1)))
+                goto _cleanup_make_score_matrix_fast;
+            PyList_SET_ITEM(py_trace_matrix, row, py_trace_row);
+        }
 
-        for(col=0; col<lenB; col++) {
-            int i;
-            PyObject *py_score, *py_indexlist;
-            int offset = row*lenB + col;
-            struct IndexList *il = &trace_matrix[offset];
+        for(col=0; col<=lenB; col++) {
+            PyObject *py_score, *py_trace;
+            int offset = row*(lenB+1) + col;
 
             /* Set py_score_matrix[row][col] to the score. */
             if(!(py_score = PyFloat_FromDouble(score_matrix[offset])))
@@ -497,59 +365,35 @@ cleanup_after_py_match_fn:
                the edges of the matrix (row or column is 0), the
                matrix should be [None]. */
             if(!row || !col) {
-                if(!(py_indexlist = PyList_New(1)))
+                if(!(py_trace = Py_BuildValue("B", 1)))
                     goto _cleanup_make_score_matrix_fast;
                 Py_INCREF(Py_None);
-                PyList_SET_ITEM(py_indexlist, 0, Py_None);
+                PyList_SET_ITEM(py_trace_row, col, Py_None);
             }
             else {
-                if(!(py_indexlist = PyList_New(il->num_used)))
+                if(!(py_trace = Py_BuildValue("B", trace_matrix[offset])))
                     goto _cleanup_make_score_matrix_fast;
-                for(i=0; i<il->num_used; i++) {
-                    PyObject *py_index=NULL;
-                    int row = il->indexes[i*2],
-                        col = il->indexes[i*2+1];
-                    if(!(py_index = Py_BuildValue("(ii)", row, col)))
-                        goto _cleanup_make_score_matrix_fast;
-                    PyList_SET_ITEM(py_indexlist, i, py_index);
-                }
+                PyList_SET_ITEM(py_trace_row, col, py_trace);
+
             }
-            PyList_SET_ITEM(py_trace_row, col, py_indexlist);
         }
     }
-
     py_retval = Py_BuildValue("(OO)", py_score_matrix, py_trace_matrix);
 
-
  _cleanup_make_score_matrix_fast:
     if(score_matrix)
         free(score_matrix);
-    if(trace_matrix) {
-        for(i=0; i<lenA*lenB; i++)
-            IndexList_free(&trace_matrix[i]);
+    if(trace_matrix)
         free(trace_matrix);
-    }
-    if(row_cache_score)
-        free(row_cache_score);
     if(col_cache_score)
         free(col_cache_score);
-    if(row_cache_index) {
-        for(i=0; i<lenA-1; i++)
-            IndexList_free(&row_cache_index[i]);
-        free(row_cache_index);
-    }
-    if(col_cache_index) {
-        for(i=0; i<lenB-1; i++) {
-            IndexList_free(&col_cache_index[i]);
-        }
-        free(col_cache_index);
-    }
-    if(py_score_matrix) {
+    if(py_score_matrix){
         Py_DECREF(py_score_matrix);
     }
-    if(py_trace_matrix) {
+    if(py_trace_matrix){
         Py_DECREF(py_trace_matrix);
     }
+
 #if PY_MAJOR_VERSION >= 3
     if (py_bytesA != NULL && py_bytesA != py_sequenceA) Py_DECREF(py_bytesA);
     if (py_bytesB != NULL && py_bytesB != py_sequenceB) Py_DECREF(py_bytesB);
@@ -558,8 +402,8 @@ cleanup_after_py_match_fn:
     return py_retval;
 }
 
-static PyObject *cpairwise2_rint(
-    PyObject *self, PyObject *args, PyObject *keywds)
+static PyObject *cpairwise2_rint(PyObject *self, PyObject *args,
+                                 PyObject *keywds)
 {
     double x;
     int precision = _PRECISION;
@@ -588,7 +432,7 @@ static PyMethodDef cpairwise2Methods[] = {
 };
 
 static char cpairwise2__doc__[] =
-"XXX document here\n\
+"Optimized C routines that complement pairwise2.py. These are called from within pairwise2.py.\n\
 \n\
 ";
 
@@ -623,4 +467,4 @@ initcpairwise2(void)
 #else
     (void) Py_InitModule3("cpairwise2", cpairwise2Methods, cpairwise2__doc__);
 #endif
-}
+}
\ No newline at end of file
diff --git a/Bio/motifs/__init__.py b/Bio/motifs/__init__.py
index 4118fe2..350088c 100644
--- a/Bio/motifs/__init__.py
+++ b/Bio/motifs/__init__.py
@@ -303,7 +303,10 @@ class Motif(object):
             self._background = dict.fromkeys(self.alphabet.letters, 1.0)
         else:
             if sorted(self.alphabet.letters) != ["A", "C", "G", "T"]:
-                raise Exception("Setting the background to a single value only works for DNA motifs (in which case the value is interpreted as the GC content")
+                # TODO - Should this be a ValueError?
+                raise Exception("Setting the background to a single value only "
+                                "works for DNA motifs (in which case the value "
+                                "is interpreted as the GC content")
             self._background['A'] = (1.0 - value) / 2.0
             self._background['C'] = value / 2.0
             self._background['G'] = value / 2.0
diff --git a/Bio/motifs/_pwm.c b/Bio/motifs/_pwm.c
index 8e36f22..d3f3a73 100644
--- a/Bio/motifs/_pwm.c
+++ b/Bio/motifs/_pwm.c
@@ -40,6 +40,10 @@ calculate(const char sequence[], int s, PyObject* matrix, npy_intp m)
             c = sequence[i+j];
             switch (c)
             {
+              /* Handling mixed case input here rather than converting it to
+                 uppercase in Python code first, since doing so could use too
+                 much memory if sequence is too long (e.g. chromosome or
+                 plasmid). */
                 case 'A':
                 case 'a':
                     score += *((double*)PyArray_GETPTR2(array, j, 0)); break;
diff --git a/Bio/motifs/jaspar/db.py b/Bio/motifs/jaspar/db.py
index e50085c..2912ab7 100644
--- a/Bio/motifs/jaspar/db.py
+++ b/Bio/motifs/jaspar/db.py
@@ -323,7 +323,10 @@ class JASPAR5(object):
         if row:
             latest = row[0]
         else:
-            warnings.warn("Failed to fetch latest version number for JASPAR motif with base ID '{0}'. No JASPAR motif with this base ID appears to exist in the database.".format(base_id), BiopythonWarning)
+            warnings.warn("Failed to fetch latest version number for JASPAR "
+                          "motif with base ID '{0}'. "
+                          "No JASPAR motif with this base ID appears to exist "
+                          "in the database.".format(base_id), BiopythonWarning)
 
         return latest
 
@@ -344,7 +347,10 @@ class JASPAR5(object):
         if row:
             int_id = row[0]
         else:
-            warnings.warn("Failed to fetch internal database ID for JASPAR motif with matrix ID '{0}.{1}'. No JASPAR motif with this matrix ID appears to exist.".format(base_id, version), BiopythonWarning)
+            warnings.warn("Failed to fetch internal database ID for JASPAR "
+                          "motif with matrix ID '{0}.{1}'. "
+                          "No JASPAR motif with this matrix ID appears to "
+                          "exist.".format(base_id, version), BiopythonWarning)
 
         return int_id
 
@@ -359,7 +365,8 @@ class JASPAR5(object):
         # This should never happen as it is an internal method. If it does
         # we should probably raise an exception
         if not row:
-            warnings.warn("Could not fetch JASPAR motif with internal ID = {0}".format(int_id), BiopythonWarning)
+            warnings.warn("Could not fetch JASPAR motif with internal "
+                          "ID = {0}".format(int_id), BiopythonWarning)
             return None
 
         base_id = row[0]
@@ -388,7 +395,8 @@ class JASPAR5(object):
         # Many JASPAR motifs (especially those not in the CORE collection)
         # do not have taxonomy IDs. So this warning would get annoying.
         # if not tax_ids:
-        #    warnings.warn("Could not fetch any taxonomy IDs for JASPAR motif {0}".format(motif.matrix_id), BiopythonWarning)
+        #     warnings.warn("Could not fetch any taxonomy IDs for JASPAR motif"
+        #                   " {0}".format(motif.matrix_id), BiopythonWarning)
 
         motif.species = tax_ids
 
@@ -744,7 +752,8 @@ class JASPAR5(object):
                     int_ids.append(id)
 
         if len(int_ids) < 1:
-            warnings.warn("Zero motifs returned with current select critera", BiopythonWarning)
+            warnings.warn("Zero motifs returned with current select critera",
+                          BiopythonWarning)
 
         return int_ids
 
@@ -756,12 +765,10 @@ class JASPAR5(object):
         """
         cur = self.dbh.cursor()
 
-        cur.execute(
-            """select count(*) from MATRIX
-               where BASE_ID = (select BASE_ID from MATRIX where ID = %s)
-               and VERSION > (select VERSION from MATRIX where ID = %s)""",
-               (int_id, int_id)
-        )
+        cur.execute("select count(*) from MATRIX where "
+                    "BASE_ID = (select BASE_ID from MATRIX where ID = %s) "
+                    "and VERSION > (select VERSION from MATRIX where ID = %s)",
+                    (int_id, int_id))
 
         row = cur.fetchone()
 
diff --git a/Bio/motifs/matrix.py b/Bio/motifs/matrix.py
index 1308627..928f5bd 100644
--- a/Bio/motifs/matrix.py
+++ b/Bio/motifs/matrix.py
@@ -370,8 +370,9 @@ class PositionSpecificScoringMatrix(GenericPositionMatrix):
             raise ValueError("Sequence has wrong alphabet: %r - Use only with DNA sequences"
                                  % sequence.alphabet)
 
-        # TODO - Force uppercase here and optimise switch statement in C
-        # by assuming upper case?
+        # NOTE: The C code handles mixed case input as this could be large
+        # (e.g. contig or chromosome), so requiring it be all upper or lower
+        # case would impose an overhead to allocate the extra memory.
         sequence = str(sequence)
         m = self.length
         n = len(sequence)
diff --git a/Bio/motifs/transfac.py b/Bio/motifs/transfac.py
index 164805d..a6c0473 100644
--- a/Bio/motifs/transfac.py
+++ b/Bio/motifs/transfac.py
@@ -171,7 +171,7 @@ XX
                 ('CC',),        # Comments
                 ('DR',),        # External databases
                 ('OV', 'PV',),  # Versions
-               )
+                )
     for motif in motifs:
         lines = []
         for section in sections:
diff --git a/Bio/pairwise2.py b/Bio/pairwise2.py
index 73d1bd0..6b0c692 100644
--- a/Bio/pairwise2.py
+++ b/Bio/pairwise2.py
@@ -1,4 +1,6 @@
-# Copyright 2002 by Jeffrey Chang.  All rights reserved.
+# Copyright 2002 by Jeffrey Chang.
+# Copyright 2016 by Markus Piotrowski.
+# All rights reserved.
 # This code is part of the Biopython distribution and governed by its
 # license.  Please see the LICENSE file that should have been included
 # as part of this package.
@@ -7,13 +9,13 @@
 programming algorithm.
 
 This provides functions to get global and local alignments between two
-sequences.  A global alignment finds the best concordance between all
-characters in two sequences.  A local alignment finds just the
+sequences. A global alignment finds the best concordance between all
+characters in two sequences. A local alignment finds just the
 subsequences that align the best.
 
 When doing alignments, you can specify the match score and gap
 penalties.  The match score indicates the compatibility between an
-alignment of two characters in the sequences.  Highly compatible
+alignment of two characters in the sequences. Highly compatible
 characters should be given positive scores, and incompatible ones
 should be given negative scores or 0.  The gap penalties should be
 negative.
@@ -29,8 +31,9 @@ the second indicates the parameters for gap penalties.
 The match parameters are::
 
     CODE  DESCRIPTION
-    x     No parameters.  Identical characters have score of 1, otherwise 0.
-    m     A match score is the score of identical chars, otherwise mismatch score.
+    x     No parameters. Identical characters have score of 1, otherwise 0.
+    m     A match score is the score of identical chars, otherwise mismatch
+          score.
     d     A dictionary returns the score of any pair of characters.
     c     A callback function returns scores.
 
@@ -43,78 +46,142 @@ The gap penalty parameters are::
     c     A callback function returns the gap penalties.
 
 All the different alignment functions are contained in an object
-"align".  For example:
+``align``. For example:
 
     >>> from Bio import pairwise2
     >>> alignments = pairwise2.align.globalxx("ACCGT", "ACG")
 
-will return a list of the alignments between the two strings.  The
-parameters of the alignment function depends on the function called.
-Some examples::
+will return a list of the alignments between the two strings. For a nice
+printout, use the ``format_alignment`` method of the module:
 
-    # Find the best global alignment between the two sequences.
-    # Identical characters are given 1 point.  No points are deducted
-    # for mismatches or gaps.
     >>> from Bio.pairwise2 import format_alignment
+    >>> print(format_alignment(*alignments[0]))
+    ACCGT
+    |||||
+    A-CG-
+      Score=3
+    <BLANKLINE>
+
+All alignment functions have the following arguments:
+
+- Two sequences: strings, Biopython sequence objects or lists.
+  Lists are useful for suppling sequences which contain residues that are
+  encoded by more than one letter.
+
+- ``penalize_extend_when_opening``: boolean (default: False).
+  Whether to count an extension penalty when opening a gap. If false, a gap of
+  1 is only penalized an "open" penalty, otherwise it is penalized
+  "open+extend".
+
+- ``penalize_end_gaps``: boolean.
+  Whether to count the gaps at the ends of an alignment. By default, they are
+  counted for global alignments but not for local ones. Setting
+  ``penalize_end_gaps`` to (boolean, boolean) allows you to specify for the
+  two sequences separately whether gaps at the end of the alignment should be
+  counted.
+
+- ``gap_char``: string (default: ``'-'``).
+  Which character to use as a gap character in the alignment returned. If your
+  input sequences are lists, you must change this to ``['-']``.
+
+- ``force_generic``: boolean (default: False).
+  Always use the generic, non-cached, dynamic programming function (slow!).
+  For debugging.
+
+- ``score_only``: boolean (default: False).
+  Only get the best score, don't recover any alignments. The return value of
+  the function is the score. Faster and uses less memory.
+
+- ``one_alignment_only``: boolean (default: False).
+  Only recover one alignment.
+
+The other parameters of the alignment function depend on the function called.
+Some examples:
+
+- Find the best global alignment between the two sequences. Identical
+  characters are given 1 point. No points are deducted for mismatches or gaps.
+
     >>> for a in pairwise2.align.globalxx("ACCGT", "ACG"):
     ...     print(format_alignment(*a))
     ACCGT
     |||||
-    AC-G-
+    A-CG-
       Score=3
     <BLANKLINE>
     ACCGT
     |||||
-    A-CG-
+    AC-G-
       Score=3
     <BLANKLINE>
 
-    # Same thing as before, but with a local alignment.
+- Same thing as before, but with a local alignment.
+
     >>> for a in pairwise2.align.localxx("ACCGT", "ACG"):
     ...     print(format_alignment(*a))
     ACCGT
     ||||
-    AC-G-
+    A-CG-
       Score=3
     <BLANKLINE>
     ACCGT
     ||||
-    A-CG-
+    AC-G-
       Score=3
     <BLANKLINE>
 
-    # Do a global alignment.  Identical characters are given 2 points,
-    # 1 point is deducted for each non-identical character.
+- Do a global alignment. Identical characters are given 2 points, 1 point is
+  deducted for each non-identical character. Don't penalize gaps.
+
     >>> for a in pairwise2.align.globalmx("ACCGT", "ACG", 2, -1):
     ...     print(format_alignment(*a))
     ACCGT
     |||||
-    AC-G-
+    A-CG-
       Score=6
     <BLANKLINE>
     ACCGT
     |||||
-    A-CG-
+    AC-G-
       Score=6
     <BLANKLINE>
 
-    # Same as above, except now 0.5 points are deducted when opening a
-    # gap, and 0.1 points are deducted when extending it.
+- Same as above, except now 0.5 points are deducted when opening a gap, and
+  0.1 points are deducted when extending it.
+
     >>> for a in pairwise2.align.globalms("ACCGT", "ACG", 2, -1, -.5, -.1):
     ...     print(format_alignment(*a))
     ACCGT
     |||||
-    AC-G-
+    A-CG-
       Score=5
     <BLANKLINE>
     ACCGT
     |||||
-    A-CG-
+    AC-G-
       Score=5
     <BLANKLINE>
 
-The alignment function can also use known matrices already included in
-Biopython ( Bio.SubsMat -> MatrixInfo )::
+- Depending on the penalties, a gap in one sequence may be followed by a gap in
+  the other sequence.If you don't like this behaviour, increase the gap-open
+  penalty:
+
+    >>> for a in pairwise2.align.globalms("A", "T", 5, -4, -1, -.1):
+    ...     print(format_alignment(*a))
+    A-
+    ||
+    -T
+      Score=-2
+    <BLANKLINE>
+    >>> for a in pairwise2.align.globalms("A", "T", 5, -4, -3, -.1):
+    ...	    print(format_alignment(*a))
+    A
+    |
+    T
+      Score=-4
+    <BLANKLINE>
+
+- The alignment function can also use known matrices already included in
+  Biopython (``MatrixInfo`` from ``Bio.SubsMat``):
 
     >>> from Bio.SubsMat import MatrixInfo as matlist
     >>> matrix = matlist.blosum62
@@ -126,35 +193,35 @@ Biopython ( Bio.SubsMat -> MatrixInfo )::
       Score=13
     <BLANKLINE>
 
+- With the parameter ``c`` you can define your own match- and gap functions.
+  E.g. to define an affine logarithmic gap function and using it:
+
+    >>> from math import log
+    >>> def gap_function(x, y):  # x is gap position in seq, y is gap length
+    ...     if y == 0:  # No gap
+    ...         return 0
+    ...     elif y == 1:  # Gap open penalty
+    ...         return -2
+    ...     return - (2 + y/4.0 + log(y)/2.0)
+    ...
+    >>> alignment = pairwise2.align.globalmc("ACCCCCGT", "ACG", 5, -4,
+    ...                                      gap_function, gap_function)
+
+  You can define different gap functions for each sequence.
+  Self-defined match functions must take the two residues to be compared and
+  return a score.
+
 To see a description of the parameters for a function, please look at
 the docstring for the function via the help function, e.g.
-type help(pairwise2.align.localds) at the Python prompt.
-"""
-# The alignment functions take some undocumented keyword parameters:
-# - penalize_extend_when_opening: boolean
-#   Whether to count an extension penalty when opening a gap.  If
-#   false, a gap of 1 is only penalize an "open" penalty, otherwise it
-#   is penalized "open+extend".
-# - penalize_end_gaps: boolean
-#   Whether to count the gaps at the ends of an alignment.  By
-#   default, they are counted for global alignments but not for local
-#   ones. Setting penalize_end_gaps to (boolean, boolean) allows you to
-#   specify for the two sequences separately whether gaps at the end of
-#   the alignment should be counted.
-# - gap_char: string
-#   Which character to use as a gap character in the alignment
-#   returned.  By default, uses '-'.
-# - force_generic: boolean
-#   Always use the generic, non-cached, dynamic programming function.
-#   For debugging.
-# - score_only: boolean
-#   Only get the best score, don't recover any alignments.  The return
-#   value of the function is the score.
-# - one_alignment_only: boolean
-#   Only recover one alignment.
+type ``help(pairwise2.align.localds``) at the Python prompt.
 
+"""
 from __future__ import print_function
 
+import warnings
+
+from Bio import BiopythonWarning
+
 
 MAX_ALIGNMENTS = 1000   # maximum alignments recovered in traceback
 
@@ -173,29 +240,31 @@ class align(object):
         match2args = {
             'x': ([], ''),
             'm': (['match', 'mismatch'],
-"""match is the score to given to identical characters.  mismatch is
-the score given to non-identical ones."""),
+                  "match is the score to given to identical characters. "
+                  "mismatch is the score given to non-identical ones."),
             'd': (['match_dict'],
-"""match_dict is a dictionary where the keys are tuples of pairs of
-characters and the values are the scores, e.g. ("A", "C") : 2.5."""),
+                  "match_dict is a dictionary where the keys are tuples "
+                  "of pairs of characters and the values are the scores, "
+                  "e.g. ('A', 'C') : 2.5."),
             'c': (['match_fn'],
-"""match_fn is a callback function that takes two characters and
-returns the score between them."""),
-            }
+                  "match_fn is a callback function that takes two "
+                  "characters and returns the score between them."),
+        }
         # penalty code -> tuple of (parameters, docstring)
         penalty2args = {
             'x': ([], ''),
             's': (['open', 'extend'],
-"""open and extend are the gap penalties when a gap is opened and
-extended.  They should be negative."""),
+                  "open and extend are the gap penalties when a gap is "
+                  "opened and extended.  They should be negative."),
             'd': (['openA', 'extendA', 'openB', 'extendB'],
-"""openA and extendA are the gap penalties for sequenceA, and openB
-and extendB for sequeneB.  The penalties should be negative."""),
+                  "openA and extendA are the gap penalties for sequenceA, "
+                  "and openB and extendB for sequeneB.  The penalties "
+                  "should be negative."),
             'c': (['gap_A_fn', 'gap_B_fn'],
-"""gap_A_fn and gap_B_fn are callback functions that takes 1) the
-index where the gap is opened, and 2) the length of the gap.  They
-should return a gap penalty."""),
-            }
+                  "gap_A_fn and gap_B_fn are callback functions that takes "
+                  "(1) the index where the gap is opened, and (2) the length "
+                  "of the gap.  They should return a gap penalty."),
+        }
 
         def __init__(self, name):
             # Check to make sure the name of the function is
@@ -209,14 +278,14 @@ should return a gap penalty."""),
             else:
                 raise AttributeError(name)
             align_type, match_type, penalty_type = \
-                        name[:-2], name[-2], name[-1]
+                name[:-2], name[-2], name[-1]
             try:
                 match_args, match_doc = self.match2args[match_type]
-            except KeyError as x:
+            except KeyError:
                 raise AttributeError("unknown match type %r" % match_type)
             try:
                 penalty_args, penalty_doc = self.penalty2args[penalty_type]
-            except KeyError as x:
+            except KeyError:
                 raise AttributeError("unknown penalty type %r" % penalty_type)
 
             # Now get the names of the parameters to this function.
@@ -235,8 +304,8 @@ should return a gap penalty."""),
                 doc += "\n%s\n" % match_doc
             if penalty_doc:
                 doc += "\n%s\n" % penalty_doc
-            doc += (
-"""\nalignments is a list of tuples (seqA, seqB, score, begin, end).
+            doc += ("""\
+\nalignments is a list of tuples (seqA, seqB, score, begin, end).
 seqA and seqB are strings showing the alignment between the
 sequences.  score is the score of the alignment.  begin and end
 are indexes into seqA and seqB that indicate the where the
@@ -251,7 +320,8 @@ alignment occurs.
             keywds = keywds.copy()
             if len(args) != len(self.param_names):
                 raise TypeError("%s takes exactly %d argument (%d given)"
-                    % (self.function_name, len(self.param_names), len(args)))
+                                % (self.function_name, len(self.param_names),
+                                   len(args)))
             i = 0
             while i < len(self.param_names):
                 if self.param_names[i] in [
@@ -298,8 +368,8 @@ alignment occurs.
                 ('gap_char', '-'),
                 ('force_generic', 0),
                 ('score_only', 0),
-                ('one_alignment_only', 0)
-                ]
+                ('one_alignment_only', 0),
+            ]
             for name, default in default_params:
                 keywds[name] = keywds.get(name, default)
             value = keywds['penalize_end_gaps']
@@ -324,32 +394,42 @@ def _align(sequenceA, sequenceB, match_fn, gap_A_fn, gap_B_fn,
            penalize_extend_when_opening, penalize_end_gaps,
            align_globally, gap_char, force_generic, score_only,
            one_alignment_only):
+    """Return a list of alignments between two sequences or its score"""
     if not sequenceA or not sequenceB:
         return []
+    try:
+        sequenceA + gap_char
+        sequenceB + gap_char
+    except TypeError:
+        raise TypeError('both sequences must be of the same type, either ' +
+                        'string/sequence object or list. Gap character must ' +
+                        'fit the sequence type (string or list)')
+
+    if not isinstance(sequenceA, list):
+        sequenceA = str(sequenceA)
+    if not isinstance(sequenceB, list):
+        sequenceB = str(sequenceB)
 
     if (not force_generic) and isinstance(gap_A_fn, affine_penalty) \
-    and isinstance(gap_B_fn, affine_penalty):
+       and isinstance(gap_B_fn, affine_penalty):
         open_A, extend_A = gap_A_fn.open, gap_A_fn.extend
         open_B, extend_B = gap_B_fn.open, gap_B_fn.extend
         x = _make_score_matrix_fast(
-            sequenceA, sequenceB, match_fn, open_A, extend_A, open_B, extend_B,
-            penalize_extend_when_opening, penalize_end_gaps, align_globally,
-            score_only)
+            sequenceA, sequenceB, match_fn, open_A, extend_A, open_B,
+            extend_B, penalize_extend_when_opening, penalize_end_gaps,
+            align_globally, score_only)
     else:
         x = _make_score_matrix_generic(
             sequenceA, sequenceB, match_fn, gap_A_fn, gap_B_fn,
-            penalize_extend_when_opening, penalize_end_gaps, align_globally,
-            score_only)
+            penalize_end_gaps, align_globally, score_only)
     score_matrix, trace_matrix = x
 
     # print("SCORE %s" % print_matrix(score_matrix))
     # print("TRACEBACK %s" % print_matrix(trace_matrix))
 
-    # Look for the proper starting point.  Get a list of all possible
+    # Look for the proper starting point. Get a list of all possible
     # starting points.
-    starts = _find_start(
-        score_matrix, sequenceA, sequenceB,
-        gap_A_fn, gap_B_fn, penalize_end_gaps, align_globally)
+    starts = _find_start(score_matrix, align_globally)
     # Find the highest score.
     best_score = max([x[0] for x in starts])
 
@@ -360,363 +440,383 @@ def _align(sequenceA, sequenceB, match_fn, gap_A_fn, gap_B_fn,
     tolerance = 0  # XXX do anything with this?
     # Now find all the positions within some tolerance of the best
     # score.
-    starts = [
-        (score, pos) for score, pos in starts
-        if rint(abs(score - best_score)) <= rint(tolerance)
-    ]
+    starts = [(score, pos) for score, pos in starts
+              if rint(abs(score - best_score)) <= rint(tolerance)]
 
     # Recover the alignments and return them.
-    x = _recover_alignments(
-        sequenceA, sequenceB, starts, score_matrix, trace_matrix,
-        align_globally, gap_char, one_alignment_only)
-    return x
+    return _recover_alignments(sequenceA, sequenceB, starts, score_matrix,
+                               trace_matrix, align_globally, gap_char,
+                               one_alignment_only, gap_A_fn, gap_B_fn)
 
 
-def _make_score_matrix_generic(
-        sequenceA, sequenceB, match_fn, gap_A_fn, gap_B_fn,
-        penalize_extend_when_opening, penalize_end_gaps, align_globally,
-        score_only):
-    # This is an implementation of the Needleman-Wunsch dynamic
-    # programming algorithm for aligning sequences.
+def _make_score_matrix_generic(sequenceA, sequenceB, match_fn, gap_A_fn,
+                               gap_B_fn, penalize_end_gaps, align_globally,
+                               score_only):
+    """Generate a score and traceback matrix according to Needleman-Wunsch
 
-    # Create the score and traceback matrices.  These should be in the
+    This implementation allows the usage of general gap functions and is rather
+    slow. It is automatically called if you define your own gap functions. You
+    can force the usage of this method with ``force_generic=True``.
+    """
+    # Create the score and traceback matrices. These should be in the
     # shape:
     # sequenceA (down) x sequenceB (across)
     lenA, lenB = len(sequenceA), len(sequenceB)
     score_matrix, trace_matrix = [], []
-    for i in range(lenA):
-        score_matrix.append([None] * lenB)
-        trace_matrix.append([[None]] * lenB)
-
-    # The top and left borders of the matrices are special cases
-    # because there are no previously aligned characters.  To simplify
-    # the main loop, handle these separately.
-    for i in range(lenA):
-        # Align the first residue in sequenceB to the ith residue in
-        # sequence A.  This is like opening up i gaps at the beginning
-        # of sequence B.
-        score = match_fn(sequenceA[i], sequenceB[0])
-        if penalize_end_gaps[1]:
-            score += gap_B_fn(0, i)
+    for i in range(lenA + 1):
+        score_matrix.append([None] * (lenB + 1))
+        if not score_only:
+            trace_matrix.append([None] * (lenB + 1))
+
+    # Initialize first row and column with gap scores. This is like opening up
+    # i gaps at the beginning of sequence A or B.
+    for i in range(lenA + 1):
+        if penalize_end_gaps[1]:  # [1]:gap in sequence B
+            score = gap_B_fn(0, i)
+        else:
+            score = 0
         score_matrix[i][0] = score
-    for i in range(1, lenB):
-        score = match_fn(sequenceA[0], sequenceB[i])
-        if penalize_end_gaps[0]:
-            score += gap_A_fn(0, i)
+    for i in range(lenB + 1):
+        if penalize_end_gaps[0]:  # [0]:gap in sequence A
+            score = gap_A_fn(0, i)
+        else:
+            score = 0
         score_matrix[0][i] = score
 
     # Fill in the score matrix.  Each position in the matrix
-    # represents an alignment between a character from sequenceA to
+    # represents an alignment between a character from sequence A to
     # one in sequence B.  As I iterate through the matrix, find the
     # alignment by choose the best of:
     #    1) extending a previous alignment without gaps
     #    2) adding a gap in sequenceA
     #    3) adding a gap in sequenceB
-    for row in range(1, lenA):
-        for col in range(1, lenB):
+    for row in range(1, lenA + 1):
+        for col in range(1, lenB + 1):
             # First, calculate the score that would occur by extending
             # the alignment without gaps.
-            best_score = score_matrix[row - 1][col - 1]
-            best_score_rint = rint(best_score)
-            best_indexes = [(row - 1, col - 1)]
+            nogap_score = score_matrix[row - 1][col - 1] + \
+                match_fn(sequenceA[row - 1], sequenceB[col - 1])
 
             # Try to find a better score by opening gaps in sequenceA.
-            # Do this by checking alignments from each column in the
-            # previous row.  Each column represents a different
-            # character to align from, and thus a different length
-            # gap.
-            for i in range(0, col - 1):
-                score = score_matrix[row - 1][i] + gap_A_fn(row, col - 1 - i)
-                score_rint = rint(score)
-                if score_rint == best_score_rint:
-                    best_score, best_score_rint = score, score_rint
-                    best_indexes.append((row - 1, i))
-                elif score_rint > best_score_rint:
-                    best_score, best_score_rint = score, score_rint
-                    best_indexes = [(row - 1, i)]
+            # Do this by checking alignments from each column in the row.
+            # Each column represents a different character to align from,
+            # and thus a different length gap.
+            # Although the gap function does not distinguish between opening
+            # and extending a gap, we distinguish them for the backtrace.
+            if not penalize_end_gaps[0] and row == lenA:
+                row_open = score_matrix[row][col - 1]
+                row_extend = max([score_matrix[row][x] for x in range(col)])
+            else:
+                row_open = score_matrix[row][col - 1] + gap_A_fn(row, 1)
+                row_extend = max([score_matrix[row][x] + gap_A_fn(row, col - x)
+                                  for x in range(col)])
 
             # Try to find a better score by opening gaps in sequenceB.
-            for i in range(0, row - 1):
-                score = score_matrix[i][col - 1] + gap_B_fn(col, row - 1 - i)
-                score_rint = rint(score)
-                if score_rint == best_score_rint:
-                    best_score, best_score_rint = score, score_rint
-                    best_indexes.append((i, col - 1))
-                elif score_rint > best_score_rint:
-                    best_score, best_score_rint = score, score_rint
-                    best_indexes = [(i, col - 1)]
-
-            score_matrix[row][col] = best_score + \
-                                     match_fn(sequenceA[row], sequenceB[col])
-            if not align_globally and score_matrix[row][col] < 0:
+            if not penalize_end_gaps[1] and col == lenB:
+                col_open = score_matrix[row - 1][col]
+                col_extend = max([score_matrix[x][col] for x in range(row)])
+            else:
+                col_open = score_matrix[row - 1][col] + gap_B_fn(col, 1)
+                col_extend = max([score_matrix[x][col] + gap_B_fn(col, row - x)
+                                  for x in range(row)])
+
+            best_score = max(nogap_score, row_open, row_extend, col_open,
+                             col_extend)
+            if not align_globally and best_score < 0:
                 score_matrix[row][col] = 0
-            trace_matrix[row][col] = best_indexes
+            else:
+                score_matrix[row][col] = best_score
+
+            # The backtrace is encoded binary. See _make_score_matrix_fast
+            # for details.
+            if not score_only:
+                trace_score = 0
+                if rint(nogap_score) == rint(best_score):
+                    trace_score += 2
+                if rint(row_open) == rint(best_score):
+                    trace_score += 1
+                if rint(row_extend) == rint(best_score):
+                    trace_score += 8
+                if rint(col_open) == rint(best_score):
+                    trace_score += 4
+                if rint(col_extend) == rint(best_score):
+                    trace_score += 16
+                trace_matrix[row][col] = trace_score
+
     return score_matrix, trace_matrix
 
 
-def _make_score_matrix_fast(
-        sequenceA, sequenceB, match_fn, open_A, extend_A, open_B, extend_B,
-        penalize_extend_when_opening, penalize_end_gaps,
-        align_globally, score_only):
+def _make_score_matrix_fast(sequenceA, sequenceB, match_fn, open_A, extend_A,
+                            open_B, extend_B, penalize_extend_when_opening,
+                            penalize_end_gaps, align_globally, score_only):
+    """Generate a score and traceback matrix according to Gotoh"""
+    # This is an implementation of the Needleman-Wunsch dynamic programming
+    # algorithm as modified by Gotoh, implementing affine gap penalties.
+    # In short, we have three matrices, holding scores for alignments ending
+    # in (1) a match/mismatch, (2) a gap in sequence A, and (3) a gap in
+    # sequence B, respectively. However, we can combine them in one matrix,
+    # which holds the best scores, and store only those values from the
+    # other matrices that are actually used for the next step of calculation.
+    # The traceback matrix holds the positions for backtracing the alignment.
+
     first_A_gap = calc_affine_penalty(1, open_A, extend_A,
                                       penalize_extend_when_opening)
     first_B_gap = calc_affine_penalty(1, open_B, extend_B,
                                       penalize_extend_when_opening)
 
-    # Create the score and traceback matrices.  These should be in the
+    # Create the score and traceback matrices. These should be in the
     # shape:
     # sequenceA (down) x sequenceB (across)
     lenA, lenB = len(sequenceA), len(sequenceB)
     score_matrix, trace_matrix = [], []
-    for i in range(lenA):
-        score_matrix.append([None] * lenB)
-        trace_matrix.append([[None]] * lenB)
-
-    # The top and left borders of the matrices are special cases
-    # because there are no previously aligned characters.  To simplify
-    # the main loop, handle these separately.
-    for i in range(lenA):
-        # Align the first residue in sequenceB to the ith residue in
-        # sequence A.  This is like opening up i gaps at the beginning
-        # of sequence B.
-        score = match_fn(sequenceA[i], sequenceB[0])
-        if penalize_end_gaps[1]:
-            score += calc_affine_penalty(
-                i, open_B, extend_B, penalize_extend_when_opening)
+    for i in range(lenA + 1):
+        score_matrix.append([None] * (lenB + 1))
+        if not score_only:
+            trace_matrix.append([None] * (lenB + 1))
+
+    # Initialize first row and column with gap scores. This is like opening up
+    # i gaps at the beginning of sequence A or B.
+    for i in range(lenA + 1):
+        if penalize_end_gaps[1]:  # [1]:gap in sequence B
+            score = calc_affine_penalty(i, open_B, extend_B,
+                                        penalize_extend_when_opening)
+        else:
+            score = 0
         score_matrix[i][0] = score
-    for i in range(1, lenB):
-        score = match_fn(sequenceA[0], sequenceB[i])
-        if penalize_end_gaps[0]:
-            score += calc_affine_penalty(
-                i, open_A, extend_A, penalize_extend_when_opening)
+    for i in range(lenB + 1):
+        if penalize_end_gaps[0]:  # [0]:gap in sequence A
+            score = calc_affine_penalty(i, open_A, extend_A,
+                                        penalize_extend_when_opening)
+        else:
+            score = 0
         score_matrix[0][i] = score
 
-    # In the generic algorithm, at each row and column in the score
-    # matrix, we had to scan all previous rows and columns to see
-    # whether opening a gap might yield a higher score.  Here, since
-    # we know the penalties are affine, we can cache just the best
-    # score in the previous rows and columns.  Instead of scanning
-    # through all the previous rows and cols, we can just look at the
-    # cache for the best one.  Whenever the row or col increments, the
-    # best cached score just decreases by extending the gap longer.
-
-    # The best score and indexes for each row (goes down all columns).
-    # I don't need to store the last row because it's the end of the
-    # sequence.
-    row_cache_score, row_cache_index = [None] * (lenA - 1), [None] * (lenA - 1)
-    # The best score and indexes for each column (goes across rows).
-    col_cache_score, col_cache_index = [None] * (lenB - 1), [None] * (lenB - 1)
-
-    for i in range(lenA - 1):
-        # Initialize each row to be the alignment of sequenceA[i] to
-        # sequenceB[0], plus opening a gap in sequenceA.
-        row_cache_score[i] = score_matrix[i][0] + first_A_gap
-        row_cache_index[i] = [(i, 0)]
-    for i in range(lenB - 1):
-        col_cache_score[i] = score_matrix[0][i] + first_B_gap
-        col_cache_index[i] = [(0, i)]
-
-    # Fill in the score_matrix.
-    for row in range(1, lenA):
-        for col in range(1, lenB):
+    # Now initialize the col 'matrix'. Actually this is only a one dimensional
+    # list, since we only need the col scores from the last row.
+    col_score = [0]  # Best score, if actual alignment ends with gap in seqB
+    for i in range(1, lenB + 1):
+        col_score.append(calc_affine_penalty(i, 2 * open_B, extend_B,
+                                             penalize_extend_when_opening))
+
+    # The row 'matrix' is calculated on the fly. Here we only need the actual
+    # score.
+    # Now, filling up the score and traceback matrices:
+    for row in range(1, lenA + 1):
+        row_score = calc_affine_penalty(row, 2 * open_A, extend_A,
+                                        penalize_extend_when_opening)
+        for col in range(1, lenB + 1):
             # Calculate the score that would occur by extending the
             # alignment without gaps.
-            nogap_score = score_matrix[row - 1][col - 1]
+            nogap_score = score_matrix[row - 1][col - 1] + \
+                match_fn(sequenceA[row - 1], sequenceB[col - 1])
 
             # Check the score that would occur if there were a gap in
-            # sequence A.
-            if col > 1:
-                row_score = row_cache_score[row - 1]
+            # sequence A. This could come from opening a new gap or
+            # extending an existing one.
+            # A gap in sequence A can also be opened if it follows a gap in
+            # sequence B:  A-
+            #              -B
+            if not penalize_end_gaps[0] and row == lenA:
+                row_open = score_matrix[row][col - 1]
+                row_extend = row_score
             else:
-                row_score = nogap_score - 1   # Make sure it's not the best.
-            # Check the score that would occur if there were a gap in
-            # sequence B.
-            if row > 1:
-                col_score = col_cache_score[col - 1]
+                row_open = score_matrix[row][col - 1] + first_A_gap
+                row_extend = row_score + extend_A
+            row_score = max(row_open, row_extend)
+
+            # The same for sequence B:
+            if not penalize_end_gaps[1] and col == lenB:
+                col_open = score_matrix[row - 1][col]
+                col_extend = col_score[col]
             else:
-                col_score = nogap_score - 1
-
-            best_score = max(nogap_score, row_score, col_score)
-            best_score_rint = rint(best_score)
-            best_index = []
-            if best_score_rint == rint(nogap_score):
-                best_index.append((row - 1, col - 1))
-            if best_score_rint == rint(row_score):
-                best_index.extend(row_cache_index[row - 1])
-            if best_score_rint == rint(col_score):
-                best_index.extend(col_cache_index[col - 1])
-
-            # Set the score and traceback matrices.
-            score = best_score + match_fn(sequenceA[row], sequenceB[col])
-            if not align_globally and score < 0:
+                col_open = score_matrix[row - 1][col] + first_B_gap
+                col_extend = col_score[col] + extend_B
+            col_score[col] = max(col_open, col_extend)
+
+            best_score = max(nogap_score, col_score[col], row_score)
+            if not align_globally and best_score < 0:
                 score_matrix[row][col] = 0
             else:
-                score_matrix[row][col] = score
-            trace_matrix[row][col] = best_index
-
-            # Update the cached column scores.  The best score for
-            # this can come from either extending the gap in the
-            # previous cached score, or opening a new gap from the
-            # most previously seen character.  Compare the two scores
-            # and keep the best one.
-            open_score = score_matrix[row - 1][col - 1] + first_B_gap
-            extend_score = col_cache_score[col - 1] + extend_B
-            open_score_rint, extend_score_rint = \
-                             rint(open_score), rint(extend_score)
-            if open_score_rint > extend_score_rint:
-                col_cache_score[col - 1] = open_score
-                col_cache_index[col - 1] = [(row - 1, col - 1)]
-            elif extend_score_rint > open_score_rint:
-                col_cache_score[col - 1] = extend_score
-            else:
-                col_cache_score[col - 1] = open_score
-                if (row - 1, col - 1) not in col_cache_index[col - 1]:
-                    col_cache_index[col - 1] = col_cache_index[col - 1] + \
-                                             [(row - 1, col - 1)]
-
-            # Update the cached row scores.
-            open_score = score_matrix[row - 1][col - 1] + first_A_gap
-            extend_score = row_cache_score[row - 1] + extend_A
-            open_score_rint, extend_score_rint = \
-                             rint(open_score), rint(extend_score)
-            if open_score_rint > extend_score_rint:
-                row_cache_score[row - 1] = open_score
-                row_cache_index[row - 1] = [(row - 1, col - 1)]
-            elif extend_score_rint > open_score_rint:
-                row_cache_score[row - 1] = extend_score
-            else:
-                row_cache_score[row - 1] = open_score
-                if (row - 1, col - 1) not in row_cache_index[row - 1]:
-                    row_cache_index[row - 1] = row_cache_index[row - 1] + \
-                                             [(row - 1, col - 1)]
+                score_matrix[row][col] = best_score
+
+            # Now the trace_matrix. The edges of the backtrace are encoded
+            # binary: 1 = open gap in seqA, 2 = match/mismatch of seqA and
+            # seqB, 4 = open gap in seqB, 8 = extend gap in seqA, and
+            # 16 = extend gap in seqA. This values can be summed up.
+            # Thus, the trace score 7 means that the best score can either
+            # come from opening a gap in seqA (=1), pairing two characters
+            # of seqA and seqB (+2=3) or opening a gap in seqB (+4=7).
+            # However, if we only want the score we don't care about the trace.
+            if not score_only:
+                row_score_rint = rint(row_score)
+                col_score_rint = rint(col_score[col])
+                row_trace_score = 0
+                col_trace_score = 0
+                if rint(row_open) == row_score_rint:
+                    row_trace_score += 1  # Open gap in seqA
+                if rint(row_extend) == row_score_rint:
+                    row_trace_score += 8  # Extend gap in seqA
+                if rint(col_open) == col_score_rint:
+                    col_trace_score += 4  # Open gap in seqB
+                if rint(col_extend) == col_score_rint:
+                    col_trace_score += 16  # Extend gap in seqB
+
+                trace_score = 0
+                best_score_rint = rint(best_score)
+                if rint(nogap_score) == best_score_rint:
+                    trace_score += 2  # Align seqA with seqB
+                if row_score_rint == best_score_rint:
+                    trace_score += row_trace_score
+                if col_score_rint == best_score_rint:
+                    trace_score += col_trace_score
+                trace_matrix[row][col] = trace_score
 
     return score_matrix, trace_matrix
 
 
-def _recover_alignments(sequenceA, sequenceB, starts,
-                        score_matrix, trace_matrix, align_globally,
-                        gap_char, one_alignment_only):
+def _recover_alignments(sequenceA, sequenceB, starts, score_matrix,
+                        trace_matrix, align_globally, gap_char,
+                        one_alignment_only, gap_A_fn, gap_B_fn):
+    """Do the backtracing and return a list of alignments"""
     # Recover the alignments by following the traceback matrix.  This
     # is a recursive procedure, but it's implemented here iteratively
     # with a stack.
     lenA, lenB = len(sequenceA), len(sequenceB)
-    tracebacks = []  # list of (seq1, seq2, score, begin, end)
-    in_process = []  # list of ([same as tracebacks], prev_pos, next_pos)
-
-    # sequenceA and sequenceB may be sequences, including strings,
-    # lists, or list-like objects.  In order to preserve the type of
-    # the object, we need to use slices on the sequences instead of
-    # indexes.  For example, sequenceA[row] may return a type that's
-    # not compatible with sequenceA, e.g. if sequenceA is a list and
-    # sequenceA[row] is a string.  Thus, avoid using indexes and use
-    # slices, e.g. sequenceA[row:row+1].  Assume that client-defined
-    # sequence classes preserve these semantics.
-
-    # Initialize the in_process stack
-    for score, (row, col) in starts:
+    ali_seqA, ali_seqB = sequenceA[0:0], sequenceB[0:0]
+    tracebacks = []
+    in_process = []
+
+    for start in starts:
+        score, (row, col) = start
+        begin = 0
         if align_globally:
-            begin, end = None, None
+            end = None
         else:
-            begin, end = None, -max(lenA - row, lenB - col) + 1
+            # Local alignments should start with a positive score!
+            if score <= 0:
+                continue
+            # Local alignments should not end with a gap!:
+            trace = trace_matrix[row][col]
+            if (trace - trace % 2) % 4 == 2:  # Trace contains 'nogap', fine!
+                trace_matrix[row][col] = 2
+            # If not, don't start here!
+            else:
+                continue
+            end = -max(lenA - row, lenB - col)
             if not end:
                 end = None
-        # Initialize the in_process list with empty sequences of the
-        # same type as sequenceA.  To do this, take empty slices of
-        # the sequences.
-        in_process.append(
-            (sequenceA[0:0], sequenceB[0:0], score, begin, end,
-             (lenA, lenB), (row, col)))
-        if one_alignment_only:
-            break
+            col_distance = lenB - col
+            row_distance = lenA - row
+            ali_seqA = ((col_distance - row_distance) * gap_char +
+                        sequenceA[lenA - 1:row - 1:-1])
+            ali_seqB = ((row_distance - col_distance) * gap_char +
+                        sequenceB[lenB - 1:col - 1:-1])
+        in_process += [(ali_seqA, ali_seqB, end, row, col, False,
+                        trace_matrix[row][col])]
     while in_process and len(tracebacks) < MAX_ALIGNMENTS:
-        seqA, seqB, score, begin, end, prev_pos, next_pos = in_process.pop()
-        prevA, prevB = prev_pos
-        if next_pos is None:
-            prevlen = len(seqA)
-            # add the rest of the sequences
-            seqA = sequenceA[:prevA] + seqA
-            seqB = sequenceB[:prevB] + seqB
-            # add the rest of the gaps
-            seqA, seqB = _lpad_until_equal(seqA, seqB, gap_char)
-
-            # Now make sure begin is set.
-            if begin is None:
-                if align_globally:
-                    begin = 0
+        # Although we allow a gap in seqB to be followed by a gap in seqA,
+        # we don't want to allow it the other way round, since this would
+        # give redundant alignments of type: A-  vs.  -A
+        #                                    -B       B-
+        # Thus we need to keep track if a gap in seqA was opened (col_gap)
+        # and stop the backtrace (dead_end) if a gap in seqB follows.
+        dead_end = False
+        ali_seqA, ali_seqB, end, row, col, col_gap, trace = in_process.pop()
+
+        while (row > 0 or col > 0) and not dead_end:
+            cache = (ali_seqA[:], ali_seqB[:], end, row, col, col_gap)
+
+            # If trace is empty we have reached at least one border of the
+            # matrix or the end of a local aligment. Just add the rest of
+            # the sequence(s) and fill with gaps if neccessary.
+            if not trace:
+                if col and col_gap:
+                    dead_end = True
                 else:
-                    begin = len(seqA) - prevlen
-            tracebacks.append((seqA, seqB, score, begin, end))
-        else:
-            nextA, nextB = next_pos
-            nseqA, nseqB = prevA - nextA, prevB - nextB
-            maxseq = max(nseqA, nseqB)
-            ngapA, ngapB = maxseq - nseqA, maxseq - nseqB
-            seqA = sequenceA[nextA:nextA + nseqA] + gap_char * ngapA + seqA
-            seqB = sequenceB[nextB:nextB + nseqB] + gap_char * ngapB + seqB
-            prev_pos = next_pos
-            # local alignment stops early if score falls < 0
-            if not align_globally and score_matrix[nextA][nextB] <= 0:
-                begin = max(prevA, prevB)
-                in_process.append(
-                    (seqA, seqB, score, begin, end, prev_pos, None))
-            else:
-                for next_pos in trace_matrix[nextA][nextB]:
-                    in_process.append(
-                        (seqA, seqB, score, begin, end, prev_pos, next_pos))
-                    if one_alignment_only:
-                        break
-
+                    ali_seqA, ali_seqB = _finish_backtrace(
+                        sequenceA, sequenceB, ali_seqA, ali_seqB,
+                        row, col, gap_char)
+                break
+            elif trace % 2 == 1:  # = row open = open gap in seqA
+                trace -= 1
+                if col_gap:
+                    dead_end = True
+                else:
+                    col -= 1
+                    ali_seqA += gap_char
+                    ali_seqB += sequenceB[col]
+                    col_gap = False
+            elif trace % 4 == 2:  # = match/mismatch of seqA with seqB
+                trace -= 2
+                row -= 1
+                col -= 1
+                ali_seqA += sequenceA[row]
+                ali_seqB += sequenceB[col]
+                col_gap = False
+            elif trace % 8 == 4:  # = col open = open gap in seqB
+                trace -= 4
+                row -= 1
+                ali_seqA += sequenceA[row]
+                ali_seqB += gap_char
+                col_gap = True
+            elif trace in (8, 24):  # = row extend = extend gap in seqA
+                trace -= 8
+                if col_gap:
+                    dead_end = True
+                else:
+                    col_gap = False
+                    # We need to find the starting point of the extended gap
+                    x = _find_gap_open(sequenceA, sequenceB, ali_seqA,
+                                       ali_seqB, end, row, col, col_gap,
+                                       gap_char, score_matrix, trace_matrix,
+                                       in_process, gap_A_fn, col, row, 'col')
+                    ali_seqA, ali_seqB, row, col, in_process, dead_end = x
+            elif trace == 16:  # = col extend = extend gap in seqB
+                trace -= 16
+                col_gap = True
+                x = _find_gap_open(sequenceA, sequenceB, ali_seqA, ali_seqB,
+                                   end, row, col, col_gap, gap_char,
+                                   score_matrix, trace_matrix, in_process,
+                                   gap_B_fn, row, col, 'row')
+                ali_seqA, ali_seqB, row, col, in_process, dead_end = x
+
+            if trace:  # There is another path to follow...
+                cache += (trace,)
+                in_process.append(cache)
+            trace = trace_matrix[row][col]
+            if not align_globally and score_matrix[row][col] <= 0:
+                begin = max(row, col)
+                trace = 0
+        if not dead_end:
+            tracebacks.append((ali_seqA[::-1], ali_seqB[::-1], score, begin,
+                               end))
+            if one_alignment_only:
+                break
     return _clean_alignments(tracebacks)
 
 
-def _find_start(score_matrix, sequenceA, sequenceB, gap_A_fn, gap_B_fn,
-                penalize_end_gaps, align_globally):
-    # Return a list of (score, (row, col)) indicating every possible
-    # place to start the tracebacks.
+def _find_start(score_matrix, align_globally):
+    """Return a list of starting points (score, (row, col)).
+
+    Indicating every possible place to start the tracebacks.
+    """
+    nrows, ncols = len(score_matrix), len(score_matrix[0])
+    # In this implementation of the global algorithm, the start will always be
+    # the bottom right corner of the matrix.
     if align_globally:
-        starts = _find_global_start(
-            sequenceA, sequenceB, score_matrix, gap_A_fn, gap_B_fn, penalize_end_gaps)
+        starts = [(score_matrix[-1][-1], (nrows - 1, ncols - 1))]
     else:
-        starts = _find_local_start(score_matrix)
+        starts = []
+        for row in range(nrows):
+            for col in range(ncols):
+                score = score_matrix[row][col]
+                starts.append((score, (row, col)))
     return starts
 
 
-def _find_global_start(sequenceA, sequenceB,
-                       score_matrix, gap_A_fn, gap_B_fn, penalize_end_gaps):
-    # The whole sequence should be aligned, so return the positions at
-    # the end of either one of the sequences.
-    nrows, ncols = len(score_matrix), len(score_matrix[0])
-    positions = []
-    # Search all rows in the last column.
-    for row in range(nrows):
-        # Find the score, penalizing end gaps if necessary.
-        score = score_matrix[row][ncols - 1]
-        if penalize_end_gaps[1]:
-            score += gap_B_fn(ncols, nrows - row - 1)
-        positions.append((score, (row, ncols - 1)))
-    # Search all columns in the last row.
-    for col in range(ncols - 1):
-        score = score_matrix[nrows - 1][col]
-        if penalize_end_gaps[0]:
-            score += gap_A_fn(nrows, ncols - col - 1)
-        positions.append((score, (nrows - 1, col)))
-    return positions
-
-
-def _find_local_start(score_matrix):
-    # Return every position in the matrix.
-    positions = []
-    nrows, ncols = len(score_matrix), len(score_matrix[0])
-    for row in range(nrows):
-        for col in range(ncols):
-            score = score_matrix[row][col]
-            positions.append((score, (row, col)))
-    return positions
-
-
 def _clean_alignments(alignments):
-    # Take a list of alignments and return a cleaned version.  Remove
-    # duplicates, make sure begin and end are set correctly, remove
+    """Take a list of alignments and return a cleaned version."""
+    # Remove duplicates, make sure begin and end are set correctly, remove
     # empty alignments.
     unique_alignments = []
     for align in alignments:
@@ -739,35 +839,46 @@ def _clean_alignments(alignments):
     return unique_alignments
 
 
-def _pad_until_equal(s1, s2, char):
-    # Add char to the end of s1 or s2 until they are equal length.
-    ls1, ls2 = len(s1), len(s2)
-    if ls1 < ls2:
-        s1 = _pad(s1, char, ls2 - ls1)
-    elif ls2 < ls1:
-        s2 = _pad(s2, char, ls1 - ls2)
-    return s1, s2
-
-
-def _lpad_until_equal(s1, s2, char):
-    # Add char to the beginning of s1 or s2 until they are equal
-    # length.
-    ls1, ls2 = len(s1), len(s2)
-    if ls1 < ls2:
-        s1 = _lpad(s1, char, ls2 - ls1)
-    elif ls2 < ls1:
-        s2 = _lpad(s2, char, ls1 - ls2)
-    return s1, s2
-
-
-def _pad(s, char, n):
-    # Append n chars to the end of s.
-    return s + char * n
-
+def _finish_backtrace(sequenceA, sequenceB, ali_seqA, ali_seqB, row, col,
+                      gap_char):
+    """Add remaining sequences and fill with gaps if neccessary"""
+    if row:
+        ali_seqA += sequenceA[row - 1::-1]
+    if col:
+        ali_seqB += sequenceB[col - 1::-1]
+    if row > col:
+            ali_seqB += gap_char * (len(ali_seqA) - len(ali_seqB))
+    elif col > row:
+            ali_seqA += gap_char * (len(ali_seqB) - len(ali_seqA))
+    return ali_seqA, ali_seqB
+
+
+def _find_gap_open(sequenceA, sequenceB, ali_seqA, ali_seqB, end, row, col,
+                   col_gap, gap_char, score_matrix, trace_matrix, in_process,
+                   gap_fn, target, index, direction):
+    """Find the starting point(s) of the extended gap"""
+    dead_end = False
+    target_score = score_matrix[row][col]
+    for n in range(target):
+        if direction == 'col':
+            col -= 1
+            ali_seqA += gap_char
+            ali_seqB += sequenceB[col]
+        else:
+            row -= 1
+            ali_seqA += sequenceA[row]
+            ali_seqB += gap_char
+        actual_score = score_matrix[row][col] + gap_fn(index, n + 1)
+        if rint(actual_score) == rint(target_score) and n > 0:
+            if not trace_matrix[row][col]:
+                break
+            else:
+                in_process.append((ali_seqA[:], ali_seqB[:], end, row, col,
+                                   col_gap, trace_matrix[row][col]))
+        if not trace_matrix[row][col]:
+            dead_end = True
+    return ali_seqA, ali_seqB, row, col, in_process, dead_end
 
-def _lpad(s, char, n):
-    # Prepend n chars to the beginning of s.
-    return char * n + s
 
 _PRECISION = 1000
 
@@ -782,7 +893,6 @@ class identity_match(object):
     Create a match function for use in an alignment.  match and
     mismatch are the scores to give when two residues are equal or
     unequal.  By default, match is 1 and mismatch is 0.
-
     """
     def __init__(self, match=1, mismatch=0):
         self.match = match
@@ -797,13 +907,12 @@ class identity_match(object):
 class dictionary_match(object):
     """dictionary_match(score_dict[, symmetric]) -> match_fn
 
-    Create a match function for use in an alignment.  score_dict is a
+    Create a match function for use in an alignment. score_dict is a
     dictionary where the keys are tuples (residue 1, residue 2) and
     the values are the match scores between those residues.  symmetric
     is a flag that indicates whether the scores are symmetric.  If
     true, then if (res 1, res 2) doesn't exist, I will use the score
     at (res 2, res 1).
-
     """
     def __init__(self, score_dict, symmetric=1):
         self.score_dict = score_dict
@@ -821,11 +930,13 @@ class affine_penalty(object):
     """affine_penalty(open, extend[, penalize_extend_when_opening]) -> gap_fn
 
     Create a gap function for use in an alignment.
-
     """
     def __init__(self, open, extend, penalize_extend_when_opening=0):
         if open > 0 or extend > 0:
             raise ValueError("Gap penalties should be non-positive.")
+        if not penalize_extend_when_opening and (extend < open):
+            raise ValueError("Gap opening penalty should be higher than " +
+                             "gap extension penalty (or equal)")
         self.open, self.extend = open, extend
         self.penalize_extend_when_opening = penalize_extend_when_opening
 
@@ -847,7 +958,6 @@ def print_matrix(matrix):
     """print_matrix(matrix)
 
     Print out a matrix.  For debugging purposes.
-
     """
     # Transpose the matrix and get the length of the values in each column.
     matrixT = [[] for x in range(len(matrix[0]))]
@@ -865,7 +975,6 @@ def format_alignment(align1, align2, score, begin, end):
     """format_alignment(align1, align2, score, begin, end) -> string
 
     Format the alignment prettily into a string.
-
     """
     s = []
     s.append("%s\n" % align1)
@@ -875,20 +984,10 @@ def format_alignment(align1, align2, score, begin, end):
     return ''.join(s)
 
 
-# Try and load C implementations of functions.  If I can't,
-# then just ignore and use the pure python implementations.
+# Try and load C implementations of functions. If I can't,
+# then throw a warning and use the pure Python implementations.
 try:
     from .cpairwise2 import rint, _make_score_matrix_fast
 except ImportError:
-    pass
-
-
-def _test():
-    """Run the module's doctests (PRIVATE)."""
-    print("Running doctests...")
-    import doctest
-    doctest.testmod(optionflags=doctest.IGNORE_EXCEPTION_DETAIL)
-    print("Done")
-
-if __name__ == "__main__":
-    _test()
+    warnings.warn('Import of C module failed. Falling back to pure Python ' +
+                  'implementation. This may be slooow...', BiopythonWarning)
diff --git a/BioSQL/BioSeq.py b/BioSQL/BioSeq.py
index d430c17..16b4340 100644
--- a/BioSQL/BioSeq.py
+++ b/BioSQL/BioSeq.py
@@ -1,5 +1,5 @@
 # Copyright 2002 by Andrew Dalke.  All rights reserved.
-# Revisions 2007-2009 copyright by Peter Cock.  All rights reserved.
+# Revisions 2007-2016 copyright by Peter Cock.  All rights reserved.
 # Revisions 2008-2009 copyright by Cymon J. Cox.  All rights reserved.
 # This code is part of the Biopython distribution and governed by its
 # license.  Please see the LICENSE file that should have been included
@@ -285,8 +285,8 @@ def _retrieve_features(adaptor, primary_id):
                 v = "%s.%s" % (accession, version)
             else:
                 v = accession
-            # subfeature remote location db_ref are stored as a empty string when
-            # not present
+            # subfeature remote location db_ref are stored as a empty string
+            # when not present
             if dbname == "":
                 dbname = None
             lookup[location_id] = (dbname, v)
@@ -309,39 +309,28 @@ def _retrieve_features(adaptor, primary_id):
             feature.ref_db = dbname
             feature.ref = version
         else:
-            sub_features = feature.sub_features
-            assert sub_features == []
+            locs = []
             for location in locations:
                 location_id, start, end, strand = location
                 dbname, version = lookup.get(location_id, (None, None))
-                subfeature = SeqFeature.SeqFeature()
-                subfeature.type = seqfeature_type
-                subfeature.location = SeqFeature.FeatureLocation(start, end)
-                # subfeature.location_operator = \
-                #    _retrieve_location_qualifier_value(adaptor, location_id)
-                subfeature.strand = strand
-                subfeature.ref_db = dbname
-                subfeature.ref = version
-                sub_features.append(subfeature)
-            # Locations are in order, but because of remote locations for
+                locs.append(SeqFeature.FeatureLocation(start, end,
+                                                       strand=strand,
+                                                       ref=version,
+                                                       ref_db=dbname))
+            # Locations are typically in biological in order (see negative
+            # strands below), but because of remote locations for
             # sub-features they are not necessarily in numerical order:
-            strands = set(sf.strand for sf in sub_features)
+            strands = set(l.strand for l in locs)
             if len(strands) == 1 and -1 in strands:
                 # Evil hack time for backwards compatibility
                 # TODO - Check if BioPerl and (old) Biopython did the same,
                 # we may have an existing incompatibility lurking here...
-                locs = [f.location for f in sub_features[::-1]]
-            else:
-                # All forward, or mixed strands
-                locs = [f.location for f in sub_features]
-            feature.location = SeqFeature.CompoundLocation(
-                locs, seqfeature_type)
-            # TODO - See Bug 2677 - we don't yet record location_operator,
+                locs = locs[::-1]
+            feature.location = SeqFeature.CompoundLocation(locs, "join")
+            # TODO - See Bug 2677 - we don't yet record location operator,
             # so for consistency with older versions of Biopython default
             # to assuming its a join.
-            feature.location_operator = "join"
         seq_feature_list.append(feature)
-
     return seq_feature_list
 
 
diff --git a/BioSQL/BioSeqDatabase.py b/BioSQL/BioSeqDatabase.py
index 72cfc3f..45a3260 100644
--- a/BioSQL/BioSeqDatabase.py
+++ b/BioSQL/BioSeqDatabase.py
@@ -186,7 +186,7 @@ class DBServer(object):
             return [self[key] for key in self]
 
         def items(self):
-            """List of (namespace, BioSeqDatabase) for entries in the database."""
+            """List of (namespace, BioSeqDatabase) for entries in database."""
             return [(key, self[key]) for key in self]
 
         def iterkeys(self):
@@ -657,7 +657,8 @@ class BioSeqDatabase(object):
     def __delitem__(self, key):
         """Remove an entry and all its annotation."""
         if key not in self:
-            raise KeyError("Entry %r cannot be deleted. It was not found or is invalid" % key)
+            raise KeyError("Entry %r cannot be deleted. "
+                           "It was not found or is invalid" % key)
         # Assuming this will automatically cascade to the other tables...
         sql = "DELETE FROM bioentry " + \
               "WHERE biodatabase_id=%s AND bioentry_id=%s;"
@@ -802,8 +803,9 @@ class BioSeqDatabase(object):
                 self.adaptor.execute(
                     sql % (gi, self.dbid, accession, version, self.dbid))
                 if self.adaptor.cursor.fetchone():
-                    raise self.adaptor.conn.IntegrityError("Duplicate record "
-                                                           "detected: record has not been inserted")
+                    raise self.adaptor.conn.IntegrityError(
+                        "Duplicate record detected: "
+                        "record has not been inserted")
             # End of hack
             db_loader.load_seqrecord(cur_record)
         return num_records
diff --git a/BioSQL/Loader.py b/BioSQL/Loader.py
index 0f08f37..bec6cb9 100644
--- a/BioSQL/Loader.py
+++ b/BioSQL/Loader.py
@@ -41,12 +41,16 @@ class DatabaseLoader(object):
         BioSeqDatabase DBServer object, for example::
 
             from BioSQL import BioSeqDatabase
-            server = BioSeqDatabase.open_database(driver="MySQLdb", user="gbrowse",
-                             passwd = "biosql", host = "localhost", db="test_biosql")
+            server = BioSeqDatabase.open_database(driver="MySQLdb",
+                                                  user="gbrowse",
+                                                  passwd="biosql",
+                                                  host="localhost",
+                                                  db="test_biosql")
             try:
                 db = server["test"]
             except KeyError:
-                db = server.new_database("test", description="For testing GBrowse")
+                db = server.new_database("test",
+                description="For testing GBrowse")
         """
         self.adaptor = adaptor
         self.dbid = dbid
@@ -336,14 +340,15 @@ class DatabaseLoader(object):
         # table we cannot simply update them through an SQL statement as we risk
         # colliding values. Instead we must select all of the rows that we want to
         # update, modify the values in python and then update the rows
-        # self.adaptor.execute("UPDATE taxon SET right_value = right_value + 2 WHERE right_value >= %s", (left_value,))
-        # self.adaptor.execute("UPDATE taxon SET left_value = left_value + 2 WHERE left_value > %s", (left_value,))
+        # self.adaptor.execute("UPDATE taxon SET right_value = right_value + 2 "
+        #                      "WHERE right_value >= %s", (left_value,))
+        # self.adaptor.execute("UPDATE taxon SET left_value = left_value + 2 "
+        #                      "WHERE left_value > %s", (left_value,))
 
         rows = self.adaptor.execute_and_fetchall(
-                "SELECT left_value, right_value, taxon_id FROM taxon WHERE right_value >= %s or left_value > %s",
-                # "SELECT left_value, right_value, taxon_id FROM taxon",
-                (left_value, left_value)
-                )
+            "SELECT left_value, right_value, taxon_id FROM taxon "
+            "WHERE right_value >= %s or left_value > %s",
+            (left_value, left_value))
 
         right_rows = []
         left_rows = []
@@ -363,13 +368,15 @@ class DatabaseLoader(object):
         right_rows = sorted(right_rows, key=lambda x: x[0], reverse=True)
         left_rows = sorted(left_rows, key=lambda x: x[0], reverse=True)
 
-        self.adaptor.executemany("UPDATE taxon SET left_value = %s WHERE taxon_id = %s", left_rows)
-        self.adaptor.executemany("UPDATE taxon SET right_value = %s WHERE taxon_id = %s", right_rows)
+        self.adaptor.executemany("UPDATE taxon SET left_value = %s "
+                                 "WHERE taxon_id = %s", left_rows)
+        self.adaptor.executemany("UPDATE taxon SET right_value = %s "
+                                 "WHERE taxon_id = %s", right_rows)
 
     def _get_taxon_id_from_ncbi_taxon_id(self, ncbi_taxon_id,
                                          scientific_name=None,
                                          common_name=None):
-        """Get the taxon id for this record from the NCBI taxon ID (PRIVATE).
+        """Get the taxon id for record from NCBI taxon ID (PRIVATE).
 
         ncbi_taxon_id - string containing an NCBI taxon id
         scientific_name - string, used if a stub entry is recorded
@@ -429,8 +436,8 @@ class DatabaseLoader(object):
                     "%s versus %s" % (taxonomic_record[0]["TaxId"],
                                       ncbi_taxon_id)
 
-                parent_taxon_id, parent_left_value, parent_right_value = self._get_taxon_id_from_ncbi_lineage(
-                    taxonomic_record[0]["LineageEx"])
+                parent_taxon_id, parent_left_value, parent_right_value \
+                    = self._get_taxon_id_from_ncbi_lineage(taxonomic_record[0]["LineageEx"])
 
                 left_value = parent_right_value
                 right_value = parent_right_value + 1
@@ -500,8 +507,8 @@ class DatabaseLoader(object):
 
         taxonomic_lineage - list of taxonomy dictionaries from Bio.Entrez
 
-        First dictionary in list is the taxonomy root, highest would be the species.
-        Each dictionary includes:
+        First dictionary in list is the taxonomy root, highest would be
+        the species. Each dictionary includes:
         - TaxID (string, NCBI taxon id)
         - Rank (string, e.g. "species", "genus", ..., "phylum", ...)
         - ScientificName (string)
@@ -529,8 +536,8 @@ class DatabaseLoader(object):
         if len(taxonomic_lineage) > 1:
             # Use recursion to find out the taxon id (database key) of the
             # parent.
-            parent_taxon_id, parent_left_value, parent_right_value = self._get_taxon_id_from_ncbi_lineage(
-                taxonomic_lineage[:-1])
+            parent_taxon_id, parent_left_value, parent_right_value = \
+                self._get_taxon_id_from_ncbi_lineage(taxonomic_lineage[:-1])
             left_value = parent_right_value
             right_value = parent_right_value + 1
             assert _is_int_or_long(parent_taxon_id), repr(parent_taxon_id)
@@ -550,8 +557,9 @@ class DatabaseLoader(object):
         # INSERT new taxon
         rank = str(taxonomic_lineage[-1].get("Rank"))
         self.adaptor.execute(
-            "INSERT INTO taxon(ncbi_taxon_id, parent_taxon_id, node_rank, left_value, right_value)"
-            " VALUES (%s, %s, %s, %s, %s)", (ncbi_taxon_id, parent_taxon_id, rank, left_value, right_value))
+            "INSERT INTO taxon(ncbi_taxon_id, parent_taxon_id, node_rank, "
+            "left_value, right_value) VALUES (%s, %s, %s, %s, %s)",
+            (ncbi_taxon_id, parent_taxon_id, rank, left_value, right_value))
 
         taxon_id = self.adaptor.last_id("taxon")
         # assert isinstance(taxon_id, int), repr(taxon_id)
@@ -559,9 +567,9 @@ class DatabaseLoader(object):
         scientific_name = taxonomic_lineage[-1].get("ScientificName")
         if scientific_name:
             self.adaptor.execute(
-                "INSERT INTO taxon_name(taxon_id, name, name_class)"
-                " VALUES (%s, %s, 'scientific name')", (taxon_id,
-                                                        scientific_name[:255]))
+                "INSERT INTO taxon_name(taxon_id, name, name_class) "
+                "VALUES (%s, %s, 'scientific name')",
+                (taxon_id, scientific_name[:255]))
         return taxon_id, left_value, right_value
 
     def _load_bioentry_table(self, record):
@@ -657,7 +665,7 @@ class DatabaseLoader(object):
         self.adaptor.execute(sql, (bioentry_id, date_id, date))
 
     def _load_biosequence(self, record, bioentry_id):
-        """Record a SeqRecord's sequence and alphabet in the database (PRIVATE).
+        """Record SeqRecord's sequence and alphabet in DB (PRIVATE).
 
         record - a SeqRecord object with a seq property
         bioentry_id - corresponding database identifier
@@ -740,11 +748,10 @@ class DatabaseLoader(object):
                         # Easy case
                         rank += 1
                         self.adaptor.execute(many_sql,
-                                             (bioentry_id, term_id, str(entry), rank))
+                                             (bioentry_id, term_id,
+                                              str(entry), rank))
                     else:
                         pass
-                        # print "Ignoring annotation '%s' sub-entry of type '%s'" \
-                        #      % (key, str(type(entry)))
             elif isinstance(value, (str, int)):
                 # Have a simple single entry, leave rank as the DB default
                 self.adaptor.execute(mono_sql,
@@ -755,7 +762,7 @@ class DatabaseLoader(object):
                 #      % (key, type(value))
 
     def _load_reference(self, reference, rank, bioentry_id):
-        """Record a SeqRecord's annotated references in the database (PRIVATE).
+        """Record SeqRecord's annotated references in the database (PRIVATE).
 
         record - a SeqRecord object with annotated references
         bioentry_id - corresponding database identifier
@@ -814,16 +821,14 @@ class DatabaseLoader(object):
             end = None
 
         sql = "INSERT INTO bioentry_reference (bioentry_id, reference_id," \
-              " start_pos, end_pos, rank)" \
-              " VALUES (%s, %s, %s, %s, %s)"
+              " start_pos, end_pos, rank) VALUES (%s, %s, %s, %s, %s)"
         self.adaptor.execute(sql, (bioentry_id, reference_id,
                                    start, end, rank + 1))
 
     def _load_seqfeature(self, feature, feature_rank, bioentry_id):
-        """Load a biopython SeqFeature into the database (PRIVATE).
-        """
-        # records loaded from a gff file using BCBio.GFF will contain the value
-        # of the 2nd column of the gff as a feature qualifier. The BioSQL wiki
+        """Load a biopython SeqFeature into the database (PRIVATE)."""
+        # records loaded from a gff file using BCBio.GFF will contain value
+        # of 2nd column of the gff as a feature qualifier. The BioSQL wiki
         # suggests that the source should not go in with the other feature
         # mappings but instead be put in the term table
         # (http://www.biosql.org/wiki/Annotation_Mapping)
@@ -831,16 +836,20 @@ class DatabaseLoader(object):
             source = feature.qualifiers['source']
             if isinstance(source, list):
                 source = source[0]
-            seqfeature_id = self._load_seqfeature_basic(feature.type, feature_rank,
-                                                bioentry_id, source=source)
+            seqfeature_id = self._load_seqfeature_basic(feature.type,
+                                                        feature_rank,
+                                                        bioentry_id,
+                                                        source=source)
         except KeyError:
-            seqfeature_id = self._load_seqfeature_basic(feature.type, feature_rank,
-                                                bioentry_id)
+            seqfeature_id = self._load_seqfeature_basic(feature.type,
+                                                        feature_rank,
+                                                        bioentry_id)
 
         self._load_seqfeature_locations(feature, seqfeature_id)
         self._load_seqfeature_qualifiers(feature.qualifiers, seqfeature_id)
 
-    def _load_seqfeature_basic(self, feature_type, feature_rank, bioentry_id, source='EMBL/GenBank/SwissProt'):
+    def _load_seqfeature_basic(self, feature_type, feature_rank, bioentry_id,
+                               source='EMBL/GenBank/SwissProt'):
         """Load the first tables of a seqfeature and returns the id (PRIVATE).
 
         This loads the "key" of the seqfeature (ie. CDS, gene) and
@@ -895,7 +904,7 @@ class DatabaseLoader(object):
             self._insert_location(loc, rank + 1, seqfeature_id)
 
     def _insert_location(self, location, rank, seqfeature_id):
-        """Add a location of a SeqFeature to the seqfeature_location table (PRIVATE).
+        """Add SeqFeatue location to seqfeature_location table (PRIVATE).
 
         TODO - Add location operator to location_qualifier_value?
         """
@@ -913,13 +922,14 @@ class DatabaseLoader(object):
         # TODO - Record an ontology term for the location (location.term_id)
         # which for now like BioPerl we'll leave as NULL.
         # This might allow us to record "between" positions properly, but I
-        # doesn't really see how it could work for before/after fuzzy positions
+        # don't really see how it could work for before/after fuzzy positions
         loc_term_id = None
 
         if location.ref:
-            # sub_feature remote locations when they are in the same db as the current
-            # record do not have a value for ref_db, which the SeqFeature object
-            # stores as None. BioSQL schema requires a varchar and is not NULL
+            # sub_feature remote locations when they are in the same db as the
+            # current record do not have a value for ref_db, which SeqFeature
+            # object stores as None. BioSQL schema requires a varchar and is
+            # not NULL
             dbxref_id = self._get_dbxref_id(
                 location.ref_db or "", location.ref)
         else:
@@ -952,7 +962,7 @@ class DatabaseLoader(object):
         """
 
     def _load_seqfeature_qualifiers(self, qualifiers, seqfeature_id):
-        """Insert the (key, value) pair qualifiers relating to a feature (PRIVATE).
+        """Insert feature's (key, value) pair qualifiers (PRIVATE).
 
         Qualifiers should be a dictionary of the form:
             {key : [value1, value2]}
@@ -990,7 +1000,7 @@ class DatabaseLoader(object):
                                              seqfeature_id)
 
     def _load_seqfeature_dbxref(self, dbxrefs, seqfeature_id):
-        """Add database crossreferences of a SeqFeature to the database (PRIVATE).
+        """Add SeqFeature's DB cross-references to the database (PRIVATE).
 
             o dbxrefs           List, dbxref data from the source file in the
                                 format <database>:<accession>
@@ -1101,10 +1111,11 @@ class DatabaseLoader(object):
             self._get_bioentry_dbxref(bioentry_id, dbxref_id, rank + 1)
 
     def _get_bioentry_dbxref(self, bioentry_id, dbxref_id, rank):
-        """ Check for a pre-existing bioentry_dbxref entry with the passed
-            seqfeature_id and dbxref_id.  If one does not exist, insert new
-            data
+        """Get pre-existing db-xref, or create and return it (PRIVATE).
 
+        Check for a pre-existing bioentry_dbxref entry with the passed
+        seqfeature_id and dbxref_id.  If one does not exist, insert new
+        data
         """
         # Check for an existing record
         sql = r"SELECT bioentry_id, dbxref_id FROM bioentry_dbxref " \
@@ -1118,8 +1129,9 @@ class DatabaseLoader(object):
         return self._add_bioentry_dbxref(bioentry_id, dbxref_id, rank)
 
     def _add_bioentry_dbxref(self, bioentry_id, dbxref_id, rank):
-        """ Insert a bioentry_dbxref row and return the seqfeature_id and
-            dbxref_id
+        """Insert a bioentry_dbxref row (PRIVATE).
+
+        Returns the seqfeature_id and dbxref_id (PRIVATE).
         """
         sql = r'INSERT INTO bioentry_dbxref ' \
               '(bioentry_id,dbxref_id,rank) VALUES ' \
diff --git a/CONTRIB b/CONTRIB
index d45870a..a185bfa 100644
--- a/CONTRIB
+++ b/CONTRIB
@@ -16,141 +16,146 @@ Paul T. Bathen
 Yair Benita <Y.Benita at domain pharm.uu.nl>
 Peter Bienstman <Peter.Bienstman at domain rug.ac.be>
 Jose Blanca
-Kai Blin < https://github.com/kblin >
-Steve Bond < https://github.com/biologyguy >
+Kai Blin <https://github.com/kblin>
+Steve Bond <https://github.com/biologyguy>
 Bob Bussell <rgb2003 at domain med.cornell.edu>
-John Bradley < https://github.com/johnbradley >
+Anthony Bradley <https://github.com/abradle>
+John Bradley <https://github.com/johnbradley>
 Diego Brouard <diego at domain conysis.com>
 Christian Brueffer <christian at domain brueffer.de>
 David Cain <gmail, david joseph cain>
-Christiam Camacho < https://github.com/christiam >
-Franco Caramia < https://github.com/fcaramia >
+Christiam Camacho <https://github.com/christiam>
+Franco Caramia <https://github.com/fcaramia>
 James Casbon <j.a.casbon at domain qmul.ac.uk>
 Hye-Shik Chang <perky at domain fallin.lv>
 Jeffrey Chang <jchang at domain smi.stanford.edu>
 Brad Chapman <chapmanb at domain arches.uga.edu>
-Saket Choudhary < https://github.com/saketkc >
-Peter Cock <p.j.a.cock at googlemail dot com / https://github.com/peterjc >
+Saket Choudhary <https://github.com/saketkc>
+Peter Cock <https://github.com/peterjc>
 Marc Colosimo <mcolosimo at domain mitre.org>
 Andres Colubri <andres dot colubri at gmail dot com>
-Joe Cora < https://github.com/JoeCora >
+Joe Cora <https://github.com/JoeCora>
 Cymon J Cox <cymon at domain duke.edu>
 Gavin E Crooks <gec at domain compbio.berkeley.edu>
 Andrew Dalke <dalke at domain acm.org>
-Wayne Decatur < https://github.com/fomightez >
-Nigel Delaney < https://github.com/evolvedmicrobe/ >
+Kristian Davidsen <https://github.com/krdav>
+Wayne Decatur <https://github.com/fomightez>
+Nigel Delaney <https://github.com/evolvedmicrobe/>
 Michiel de Hoon <mdehoon at domain c2b2.columbia.edu>
 Bart de Koning <bratdaking gmail>
 Sjoerd de Vries <sjoerd at domain nmr.chem.uu.nl>
 Nathan J. Edwards <nje5 at edu domain georgetown>
-Kyle Ellrott
-Gokcen Eraslan < https://github.com/gokceneraslan >
-Tarcisio Fedrizzi < https://github.com/hcraT >
-João D Ferreira < https://github.com/jdferreira >
+Kyle Ellrott <https://github.com/kellrott>
+Gokcen Eraslan <https://github.com/gokceneraslan>
+Tarcisio Fedrizzi <https://github.com/hcraT>
+João D Ferreira <https://github.com/jdferreira>
 Jeffrey Finkelstein <jeffrey.finkelstein at domain gmail.com>
-Konrad Förstner < https://github.com/konrad >
+Konrad Förstner <https://github.com/konrad>
 Iddo Friedberg <idoerg at domain burnham.org>
 Bertrand Frottier <bertrand.frottier at domain free.fr>
-Ben Fulton < https://github.com/benfulton >
-Marco Galardini < https://github.com/mgalardini >
+Ben Fulton <https://github.com/benfulton>
+Marco Galardini <https://github.com/mgalardini>
 Aaron Gallagher <habnabit at gmail>
 Phillip Garland <pgarland at gmail>
-Walter Gillett < https://github.com/wgillett >
-Chaitanya Gupta < https://github.com/iCHAIT >
-Melissa Gymrek < https://github.com/mgymrek >
+Walter Gillett <https://github.com/wgillett>
+Chaitanya Gupta <https://github.com/iCHAIT>
+Melissa Gymrek <https://github.com/mgymrek>
 Frederik Gwinner
 Jason A. Hackney <jhackney at domain stanford.edu>
 Thomas Hamelryck <thamelry at domain binf.ku.dk>
-Kian Ho < https://github.com/kianho >
+Kian Ho <https://github.com/kianho>
 Michael Hoffman <hoffman+biopython at domain ebi.ac.uk>
-Thomas Holder
+Thomas Holder <https://github.com/speleo3>
 Yu Huang <krocea at domain yahoo.com.cn>
-Gert Hulselmans < https://github.com/ghuls >
+Gert Hulselmans <https://github.com/ghuls>
 Jeff Hussmann <first dot last at gmail dot com>
 Kevin Jacobs <jacobs at bioinformed dot com>
 Diana Jaunzeikare
-Sunhwan Jo < https://github.com/sunhwan >
-Terry Jones < https://github.com/terrycojones >
+Sunhwan Jo <https://github.com/sunhwan>
+Terry Jones <https://github.com/terrycojones>
 Joanna & Dominik Kasprzak
 Frank Kauff <fkauff at domain duke.edu>
 Siong Kong
-David Koppstein < https://github.com/dkoppstein >
+David Koppstein <https://github.com/dkoppstein>
 Andreas Kuntzagk <andreas.kuntzagk at domain mdc-berlin.de>
 Michal Kurowski <michal at domain genesilico.pl>
-Gleb Kuznetsov < https://github.com/glebkuznetsov >
+Gleb Kuznetsov <https://github.com/glebkuznetsov>
 Uri Laserson <laserson at Massachusetts Institute of Technology dot edu>
 Chris Lasher <chris.lasher at gmail.com>
-Sergei Lebedev < https://github.com/superbobry >
-Antony Lee < https://github.com/anntzer >
+Sergei Lebedev <https://github.com/superbobry>
+Antony Lee <https://github.com/anntzer>
 Gaetan Lehman <gaetan.lehmann at domain jouy.inra.fr>
-Kuan-Yi Li < https://github.com/kuanyili >
-Edward Liaw < https://github.com/edliaw >
+Kuan-Yi Li <https://github.com/kuanyili>
+Edward Liaw <https://github.com/edliaw>
 Katharine Lindner <katel at domain worldpath.net>
-Bryan Lunt < https://github.com/bryan-lunt >
-Fábio Madeira< https://github.com/biomadeira >
+Bryan Lunt <https://github.com/bryan-lunt>
+Fábio Madeira<https://github.com/biomadeira>
 Erick Matsen <surname at fhcrc dot org>
 Connor McCoy <cmccoy at the dot org domain fhcrc>
-Alan Medlar < https://github.com/ajm >
+Alan Medlar <https://github.com/ajm>
 Tarjei Mikkelsen <tarjei at domain genome.wi.mit.edu>
-Chris Mitchell < https://github.com/chrismit >
-Ben Morris
-Nader Morshed < https://github.com/naderm >
-Barbara Mühlemann < https://github.com/bamueh >
-Bertrand Néron < https://github.com/bneron >
-David Nicholson < https://github.com/danich1 >
-Kozo Nishida < https://github.com/kozo2 >
-Emmanuel Noutahi < https://github.com/maclandrol >
+Chris Mitchell <https://github.com/chrismit>
+Olivier Morelle <https://github.com/Oli4>
+Ben Morris <https://github.com/bendmorris>
+Nader Morshed <https://github.com/naderm>
+Barbara Mühlemann <https://github.com/bamueh>
+Bertrand Néron <https://github.com/bneron>
+David Nicholson <https://github.com/danich1>
+Kozo Nishida <https://github.com/kozo2>
+Emmanuel Noutahi <https://github.com/maclandrol>
 Konstantin Okonechnikov <k.okonechnikov at domain gmail.com>
 Cheng Soon Ong <chengsoon.ong at tuebingen.mpg.de>
-Brian Osborne < https://github.com/bosborne >
+Brian Osborne <https://github.com/bosborne>
 Anne Pajon <ap one two at sanger ac uk>
 Alessio Papini <first dot last at unifi dot it>
 Claude Paroz <claude at two (as digit) xlibre dot net>
-Carlos Pena < https://github.com/carlosp420 >
+Carlos Pena <https://github.com/carlosp420>
 Lenna Peterson <ark first-name at gmail dot com>
 Andrea Pierleoni <andrea at the Italian domain biocomp dot unibo>
-Markus Piotrowski < https://github.com/MarkusPiotrowski >
-Anders Pitman < https://github.com/anderspitman >
+Markus Piotrowski <https://github.com/MarkusPiotrowski>
+Anders Pitman <https://github.com/anderspitman>
 Mike Poidinger <Michael.Poidinger at domain eBioinformatics.com>
 Leighton Pritchard <lpritc at domain scri.sari.ac.uk>
-Leszek Pryszcz < https://github.com/lpryszcz >
-Eric Rasche < https://github.com/erasche >
-Andrea Rizzi < https://github.com/andrrizzi >
+Leszek Pryszcz <https://github.com/lpryszcz>
+Eric Rasche <https://github.com/erasche>
+Andrea Rizzi <https://github.com/andrrizzi>
 Joao Rodrigues <anaryin at the domain gmail dot com>
-Aaron Rosenfeld < https://github.com/arosenfeld >
+Aaron Rosenfeld <https://github.com/arosenfeld>
 Thomas Rosleff Soerensen <rosleff at domain mpiz-koeln.mpg.de>
-Matt Ruffalo < https://github.com/mruffalo >
+Matt Ruffalo <https://github.com/mruffalo>
 Thomas Schmitt <Thomas dot Schmitt at Swedish domain sbc.su>
+Uwe Schmitt <https://github.com/uweschmitt>
 Wolfgang Schueler <wolfgang at domain proceryon.at>
-Anuj Sharma < https://github.com/xulesc >
-Matt Shirley < https://github.com/mdshw5 >
+Anuj Sharma <https://github.com/xulesc>
+Matt Shirley <https://github.com/mdshw5>
 Thomas Sicheritz-Ponten <thomas at domain cbs.dtu.dk>
 Seth Sims <seth.sims at gmail>
-Lucas Sinclair < https://github.com/xapple >
-Connor T. Skennerton < https://github.com/ctSkennerton >
+Lucas Sinclair <https://github.com/xapple>
+Connor T. Skennerton <https://github.com/ctSkennerton>
 Peter Slickers <piet at domain clondiag.com>
 Kamil Slowikowski <k no dot slowikowski at gmail dot com>
-Jacek Śmietański < https://github.com/dadoskawina >
+Jacek Śmietański <https://github.com/dadoskawina>
 Frederic Sohm <fsms at domain users.sourceforge.net>
-Owen Solberg < https://github.com/odoublewen >
-Matteo Sticco < https://github.com/sticken88/ >
-Nate Sutton
-Anuj Sharma
-Eric Talevich <etal at domain uga.edu / https://github.com/etal>
+Owen Solberg <https://github.com/odoublewen>
+Matteo Sticco <https://github.com/sticken88/>
+Nate Sutton <https://github.com/nmsutton>
+Anuj Sharma <https://github.com/xulesc>
+Eric Talevich <https://github.com/etal>
 Bartosz Telenczuk <bartosz.telenczuk at domain gmail.com>
-Bogdan T. (bogdan at pearlgen dot com)
-Tyghe Vallard < https://github.com/necrolyte2 >
+Bogdan T. <bogdan at pearlgen dot com>
+Tyghe Vallard <https://github.com/necrolyte2>
 Carlos Rios Vera <crosvera at domain gmail.com>
 Johann Visagie <wjv at domain cityip.co.za>
 Dan Vogel <dmv at domain andrew.cmu.edu>
-Chris Warth < https://github.com/cswarth >
+Chris Warth <https://github.com/cswarth>
 David Weisman <david.weisman at domain acm.org>
 Bartek Wilczynski <bartek at domain rezolwenta.eu.org>
 David Winter <david dot winter at gmail dot com>
-Ben Woodcroft < https://github.com/wwood >
-Chunlei Wu < https://github.com/newgene/ >
-Kevin Wu < https://github.com/kevinwuhoo >
-Yanbo Ye < https://github.com/lijax >
-Hongbo Zhu < https://github.com/hongbo-zhu-cn >
-Christian Zmasek
+Ben Woodcroft <https://github.com/wwood>
+Chunlei Wu <https://github.com/newgene/>
+Kevin Wu <https://github.com/kevinwuhoo>
+Yanbo Ye <https://github.com/lijax>
+Hongbo Zhu <https://github.com/hongbo-zhu-cn>
+Christian Zmasek <https://github.com/cmzmasek>
+Xiaoyu Zhuo <https://github.com/xzhuo>
 Harry Zuzan <iliketobicycle at domain yahoo.ca>
diff --git a/DEPRECATED b/DEPRECATED
index 2721a1a..3bf30ad 100644
--- a/DEPRECATED
+++ b/DEPRECATED
@@ -101,7 +101,7 @@ include when installing Biopython from source due to a dependency on flex.
 Bio.SeqFeature
 ==============
 With the introduction of the CompoundLocation in Release 1.62, the SeqFeature
-attribute sub_features was deprecated.
+attribute sub_features was deprecated. It was removed in Release 1.68.
 
 Bio.Motif
 =========
@@ -674,3 +674,18 @@ Release 1.63. The Martel specific EventGenerator was removed in Release 1.67..
 
 Bio.ParserSupport.SGMLStrippingConsumer was deprecated in Release 1.59, and
 removed in Release 1.61.
+
+Bio.PopGen.Async
+================
+Bio.PopGen.Async was deprecated in Release 1.68. It will be removed in
+Release 1.70.
+
+Bio.PopGen.FDist
+================
+Bio.PopGen.FDist was deprecated in Release 1.68. It will be removed in
+Release 1.70.
+
+Bio.PopGen.SimCoal
+==================
+Bio.PopGen.SimCoal was deprecated in Release 1.68. It will be removed in
+Release 1.70.
diff --git a/Doc/Tutorial.tex b/Doc/Tutorial.tex
index d6db866..37463c6 100644
--- a/Doc/Tutorial.tex
+++ b/Doc/Tutorial.tex
@@ -47,6 +47,7 @@
 \usepackage{fullpage}
 \usepackage{hevea}
 \usepackage{graphicx}
+\usepackage{listings}
 
 % make everything have section numbers
 \setcounter{secnumdepth}{4}
@@ -80,7 +81,7 @@ Biopython Tutorial and Cookbook}
 
 \author{Jeff Chang, Brad Chapman, Iddo Friedberg, Thomas Hamelryck, \\
 Michiel de Hoon, Peter Cock, Tiago Antao, Eric Talevich, Bartek Wilczy\'{n}ski}
-\date{Last Update -- 8 June 2016 (Biopython 1.67)}
+\date{Last Update -- 25 August 2016 (Biopython 1.68)}
 
 %Hack to get the logo at the start of the HTML front page:
 %(hopefully this isn't going to be too wide for most people)
diff --git a/Doc/Tutorial/chapter_align.tex b/Doc/Tutorial/chapter_align.tex
index b0dbd13..0028abb 100644
--- a/Doc/Tutorial/chapter_align.tex
+++ b/Doc/Tutorial/chapter_align.tex
@@ -836,8 +836,10 @@ in memory as separate objects - editing one will not update the other!
 
 There are \emph{lots} of algorithms out there for aligning sequences, both pairwise alignments
 and multiple sequence alignments. These calculations are relatively slow, and you generally
-wouldn't want to write such an algorithm in Python. Instead, you can use Biopython to invoke
-a command line tool on your behalf. Normally you would:
+wouldn't want to write such an algorithm in Python. For pairwise alignments Biopython contains
+the \verb|Bio.pairwise2| module (see Section~\ref{sec:pairwise2}), which is supplemented by
+functions written in C for speed enhancements. In addition, you can use Biopython to invoke a
+command line tool on your behalf. Normally you would:
 \begin{enumerate}
 \item Prepare an input file of your unaligned sequences, typically this will be a FASTA file
       which you might create using \verb|Bio.SeqIO| (see Chapter~\ref{chapter:Bio.SeqIO}).
@@ -1286,7 +1288,7 @@ KKVADALTNAVAHVDDMPNALSALSDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTP
 AVHASLDKFLASVSTVLTSKYR
 \end{verbatim}
 
-\noindent in a file \texttt{alpha.fasta}, and secondly in a file \texttt{beta.fasta}:
+\noindent in a file \texttt{alpha.faa}, and secondly in a file \texttt{beta.faa}:
 
 \begin{verbatim}
 >HBB_HUMAN
@@ -1295,6 +1297,9 @@ VKAHGKKVLGAFSDGLAHLDNLKGTFATLSELHCDKLHVDPENFRLLGNVLVCVLAHHFG
 KEFTPPVQAAYQKVVAGVANALAHKYH
 \end{verbatim}
 
+You can find copies of these example files with the Biopython source code
+under the \verb|Doc/examples/| directory.
+
 Let's start by creating a complete \texttt{needle} command line object in one go:
 
 %doctest
@@ -1389,8 +1394,144 @@ and \texttt{water}. One useful trick is that the second file can contain
 multiple sequences (say five), and then EMBOSS will do five pairwise
 alignments.
 
-Note - Biopython includes its own pairwise alignment code in the \verb|Bio.pairwise2|
-module (written in C for speed, but with a pure Python fallback available too). This
-doesn't work with alignment objects, so we have not covered it within this chapter.
-See the module's docstring (built in help) for details.
+\subsection{Biopython's pairwise2}
+\label{sec:pairwise2}
+Biopython has its own module to make local and global pairwise alignments,
+\verb|Bio.pairwise2|. This module contains essentially the same algorithms as
+\texttt{water} (local) and \texttt{needle} (global) from the
+\href{http://emboss.sourceforge.net/}{EMBOSS} suite (see above) and should
+return the same results.
+
+Suppose you want to do a global pairwise alignment between the same two
+hemoglobin sequences from above (\texttt{HBA\_HUMAN}, \texttt{HBB\_HUMAN})
+stored in \texttt{alpha.faa} and \texttt{beta.faa}:
+
+%doctest examples
+\begin{verbatim}
+>>> from Bio import pairwise2
+>>> from Bio import SeqIO
+>>> seq1 = SeqIO.read("alpha.faa", "fasta")
+>>> seq2 = SeqIO.read("beta.faa", "fasta")
+>>> alignments = pairwise2.align.globalxx(seq1.seq, seq2.seq)
+\end{verbatim}
+
+As you see, we call the alignment function with \verb|align.globalxx|. The tricky
+part are the last two letters of the function name (here: \texttt{xx}), which are
+used for  decoding the scores and penalties for matches (and mismatches) and gaps.
+The first letter decodes the match score, e.g. \texttt{x} means that a match counts
+1 while mismatches have no costs. With \texttt{m} general values for either matches
+or mismatches can be defined
+(for more options see \href{http://biopython.org/DIST/docs/api/Bio.pairwise2-module.html}{Biopython's API}).
+The second letter decodes the cost for gaps; \texttt{x} means no gap costs at all,
+with \texttt{s} different penalties for opening and extending a gap can be assigned.
+So, \verb|globalxx| means that only matches between both sequences are counted.
+
+Our variable \texttt{alignments} now contains a list of alignments (at least one) which
+have the same optimal score for the given conditions. In our example this are 80
+different alignments with the score 72 (\verb|Bio.pairwise2| will return up to 1000
+alignments). Have a look at one of these alignments:
+
+%cont-doctest
+\begin{verbatim}
+>>> len(alignments)
+80
+\end{verbatim}
+%This has been abbreviated, can't use as doctest
+\begin{verbatim}
+>>> print(alignments[0])
+('MV-LSPADKTNV---K-A--A-WGKVGAHAG...YR-', 'MVHL-----T--PEEKSAVTALWGKV----...Y-H',
+72.0, 0, 217)
+\end{verbatim}
+
+Each alignment is a tuple consisting of the two aligned sequences, the score, the
+start and the end positions of the alignment (in global alignments the start is
+always 0 and the end the length of the alignment). \verb|Bio.pairwise2| has a
+function \verb|format_alignment| for a nicer printout:
+
+%This has been abbreviated, can't use as doctest
+\begin{verbatim}
+>>> print(pairwise2.format_alignment(*alignment[0]))
+MV-LSPADKTNV---K-A--A-WGKVGAHAG---EY-GA-EALE-RMFLSF----PTTK-TY--F...YR-
+|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||...|||
+MVHL-----T--PEEKSAVTALWGKV-----NVDE-VG-GEAL-GR--L--LVVYP---WT-QRF...Y-H
+  Score=72
+\end{verbatim}
+
+Better alignments are usually obtained by penalizing gaps: higher costs
+for opening a gap and lower costs for extending an existing gap. For amino
+acid sequences match scores are usually encoded in matrices like \texttt{PAM}
+or \texttt{BLOSUM}. Thus, a more meaningful alignment for our example can be
+obtained by using the BLOSUM62 matrix, together with a gap open penalty of 10
+and a gap extension penalty of 0.5 (using \verb|globalds|):
+
+%doctest examples
+\begin{verbatim}
+>>> from Bio import pairwise2
+>>> from Bio import SeqIO
+>>> from Bio.SubsMat.MatrixInfo import blosum62
+>>> seq1 = SeqIO.read("alpha.faa", "fasta")
+>>> seq2 = SeqIO.read("beta.faa", "fasta")
+>>> alignments = pairwise2.align.globalds(seq1.seq, seq2.seq, blosum62, -10, -0.5)
+>>> len(alignments)
+2
+\end{verbatim}
+%This has been abbreviated, can't use as doctest
+\begin{verbatim}
+>>> print(pairwise2.format_alignment(*alignments[0]))
+MV-LSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTY...KYR
+||||||||||||||||||||||||||||||||||||||||||||...|||
+MVHLTPEEKSAVTALWGKV-NVDEVGGEALGRLLVVYPWTQRFF...KYH
+  Score=292.5
+\end{verbatim}
+
+This alignment has the same score that we obtained earlier with EMBOSS needle
+using the same sequences and the same parameters.
+
+Local alignments are called similarly with the function \verb|align.localXX|,
+where again XX stands for a two letter code for the match and gap functions:
+
+%doctest
+\begin{verbatim}
+>>> from Bio import pairwise2
+>>> from Bio.SubsMat.MatrixInfo import blosum62
+>>> alignments = pairwise2.align.localds("LSPADKTNVKAA", "PEEKSAV", blosum62, -10, -1)
+>>> print(pairwise2.format_alignment(*alignments[0]))
+LSPADKTNVKAA
+  |||||||
+--PEEKSAV---
+  Score=16
+<BLANKLINE>
+\end{verbatim}
+
+Instead of supplying a complete match/mismatch matrix, the match code
+\texttt{m} allows for easy defining general match/mismatch values. The next
+example uses match/mismatch scores of 5/-4 and gap penalties (open/extend)
+of 2/0.5 using \verb|localms|):
+
+%cont-doctest
+\begin{verbatim}
+>>> alignments = pairwise2.align.localms("AGAACT", "GAC", 5, -4, -2, -0.5)
+>>> print(pairwise2.format_alignment(*alignments[0]))
+AGAACT
+ ||||
+-G-AC-
+  Score=13
+<BLANKLINE>
+\end{verbatim}
+
+One useful keyword argument of the \verb|Bio.pairwise2.align| functions is
+\texttt{score\_only}. When set to \texttt{True} it will only return the score
+of the best alignment(s), but in a significantly shorter time. It will also
+allow the alignment of longer sequences before a memory error is raised.
+
+Unfortunately, \verb|Bio.pairwise2| does not work with Biopython's multiple
+sequence alignment objects (yet).
+However, the module has some interesting advanced features: you can
+define your own match and gap functions (interested in testing affine
+logarithmic gap costs?), gap penalties and end gaps penalties can be different
+for both sequences, sequences can be supplied as lists (useful if you have
+residues that are encoded by more than one character), etc. These features
+are hard (if at all) to realize with other alignment tools. For more details
+see the modules documentation in
+\href{http://biopython.org/DIST/docs/api/Bio.pairwise2-module.html}{Biopython's API}.
 
diff --git a/Doc/Tutorial/chapter_introduction.tex b/Doc/Tutorial/chapter_introduction.tex
index 39e2ee6..bd4c8bc 100644
--- a/Doc/Tutorial/chapter_introduction.tex
+++ b/Doc/Tutorial/chapter_introduction.tex
@@ -168,8 +168,16 @@ from __future__ import print_function
   If the ``\verb|import Bio|'' line fails, Biopython is not installed.
   Note that those are double underscores before and after version.
   If the second line fails, your version is \emph{very} out of date.
-  If the version string ends with a plus, you don't have an official
-  release, but a snapshot of the in development code.
+
+  If the version string ends with a plus like ``\verb|1.66+|'', you
+  don't have an official release, but an old snapshot of the in
+  development code \emph{after} that version was released. This naming
+  was used until June 2016 in the run-up to Biopython 1.68..
+
+  If the version string ends with ``\verb|.dev<number>|'' like
+  ``\verb|1.68.dev0|'', again you don't have an official release,
+  but instead a snapshot of the in developement code \emph{before}
+  that version was released.
 
   \item \emph{Where is the latest version of this document?}\\
   If you download a Biopython source code archive, it will include the
@@ -179,13 +187,6 @@ from __future__ import print_function
   \item \url{http://biopython.org/DIST/docs/tutorial/Tutorial.html}
   \item \url{http://biopython.org/DIST/docs/tutorial/Tutorial.pdf}
   \end{itemize}
-  If you are using the very latest unreleased code from our repository
-  you can find copies of the in-progress tutorial here:
-  \begin{itemize}
-  \item \url{http://biopython.org/DIST/docs/tutorial/Tutorial-dev.html}
-  \item \url{http://biopython.org/DIST/docs/tutorial/Tutorial-dev.pdf}
-  \end{itemize}
-
 
   \item \emph{What is wrong with my sequence comparisons?} \\
   There was a major change in Biopython 1.65 making the \verb|Seq| and
diff --git a/Doc/Tutorial/chapter_pdb.tex b/Doc/Tutorial/chapter_pdb.tex
index b7d420c..9d25454 100644
--- a/Doc/Tutorial/chapter_pdb.tex
+++ b/Doc/Tutorial/chapter_pdb.tex
@@ -89,6 +89,38 @@ Example: get the list of the $y$ coordinates of all atoms
 >>> y_list = mmcif_dict['_atom_site.Cartn_y']
 \end{verbatim}
 
+
+\subsection{Reading files in the MMTF format}
+
+You can use the direct MMTFParser to read a structure from a file:
+%want to use doctest ../Tests lib:mmtf
+%but will trigger PDBConstructionWarning
+\begin{verbatim}
+>>> from Bio.PDB.mmtf import MMTFParser
+>>> structure = MMTFParser.get_structure("PDB/4CUP.mmtf")
+\end{verbatim}
+
+Or you can use the same class to get a structure by it's PDB ID:
+%want online doctest here
+\begin{verbatim}
+>>> structure = MMTFParser.get_structure_from_url("4CUP")
+\end{verbatim}
+
+This gives you a Structure object as if read from a PDB or mmCIF file.
+
+You can also have access to the underlying data using the external
+MMTF library which Biopython is using internally:
+%want online doctest here
+\begin{verbatim}
+>>> from mmtf import fetch
+>>> decoded_data = fetch("4CUP")
+\end{verbatim}
+For example you can access just the X-coordinate.
+\begin{verbatim}
+>>> print(decoded_data.x_coord_list)
+...
+\end{verbatim}
+
 \subsection{Reading files in the PDB XML format}
 
 That's not yet supported, but we are definitely planning to support that
diff --git a/Doc/Tutorial/chapter_popgen.tex b/Doc/Tutorial/chapter_popgen.tex
index 7002cf0..37fb271 100644
--- a/Doc/Tutorial/chapter_popgen.tex
+++ b/Doc/Tutorial/chapter_popgen.tex
@@ -111,478 +111,3 @@ being planned for Biopython. These extensions won't break compatibility in
 any way with the standard format.  In the medium term, we would also like to
 support the GenePop web service.
 
-\section{Coalescent simulation}
-
-A coalescent simulation is a backward model of population genetics with relation to
-time. A simulation of ancestry is done until the Most Recent Common Ancestor (MRCA) is found.
-This ancestry relationship starting on the MRCA and ending on the current generation
-sample is sometimes called a genealogy. Simple cases assume a population of constant
-size in time, haploidy, no population structure, and simulate the alleles of a single
-locus under no selection pressure.
-
-Coalescent theory is used in many fields like selection detection, estimation of
-demographic parameters of real populations or disease gene mapping.
-
-The strategy followed in the Biopython implementation of the coalescent was not
-to create a new, built-in, simulator from scratch but to use an existing one,
-Fastsimcoal2 (\url{http://cmpg.unibe.ch/software/fastsimcoal2/}). Fastsimcoal2 allows for,
-among others, population structure, multiple demographic events, simulation
-of multiple types of loci (SNPs, sequences, STRs/microsatellites and RFLPs)
-with recombination, diploidy multiple chromosomes or ascertainment bias. Notably
-Fastsimcoal2 doesn't support any selection model. We recommend reading
-Fastsimcoal2's
-documentation, available in the link above.
-
-The input for Fastsimcoal2 is a file specifying the desired demography and genome,
-the output is a set of files (typically around 1000) with the simulated genomes
-of a sample of individuals per subpopulation. This set of files can be used
-in many ways, like to compute confidence intervals where which certain
-statistics (e.g., $F_{st}$ or Tajima D) are expected to lie. Real population
-genetics datasets statistics can then be compared to those confidence intervals.
-
-Biopython coalescent code allows to create demographic scenarios and genomes and
-to run Fastsimcoal2.
-
-\subsection{Creating scenarios}
-
-Creating a scenario involves both creating a demography and a chromosome structure.
-In many cases (e.g. when doing Approximate Bayesian Computations -- ABC) it is
-important to test many parameter variations (e.g. vary the effective population size,
-$N_e$, between 10, 50, 500 and 1000 individuals). The code provided allows for
-the simulation of scenarios with different demographic parameters very easily.
-
-Below we see how we can create scenarios and then how simulate them.
-
-\subsubsection{Demography}
-
-A few predefined demographies are built-in, all have two shared parameters: sample size
-(called sample\_size on the template, see below for its use) per deme and deme size, i.e.
-subpopulation size (pop\_size). All demographies are available as templates where all
-parameters can be varied, each template has a system name. The prefedined
-demographies/templates are:
-
-\begin{description}
-\item[Single population, constant size] The standard parameters are enough to specify
-it. Template name: simple.
-\item[Single population, bottleneck] As seen on figure \ref{fig:bottle}. The parameters
-are current population size (pop\_size on template ne3 on figure), time of expansion,
-given as the generation in the past when it occurred (expand\_gen),
-effective population size during bottleneck (ne2), time of contraction
-(contract\_gen) and original size in the remote past (ne3). Template name: bottle.
-\item[Island model] The typical island model. The total number of demes is specified
-by total\_demes and the migration rate by mig. Template name island.
-\item[Stepping stone model - 1 dimension] The stepping stone model in 1 dimension,
-extremes disconnected. The total number of demes is total\_demes, migration rate
-is mig. Template name is ssm\_1d.
-\item[Stepping stone model - 2 dimensions] The stepping stone model in 2 dimensions,
-extremes disconnected. The parameters are x for the horizontal dimension and y
-for the vertical (being the total number of demes x times y), migration rate is mig.
-Template name is ssm\_2d.
-\end{description}
-
-\begin{htmlonly}
-\label{fig:bottle}
-\imgsrc{images/bottle.png}
-\end{htmlonly}
-
-\begin{latexonly}
-\begin{figure}[htbp]
-\centering
-\includegraphics{images/bottle.png}
-\caption{A bottleneck}
-\label{fig:bottle}
-\end{figure}
-\end{latexonly}
-
-In our first example, we will generate a template for a single population, constant size
-model with a sample size of 30 and a deme size of 500. The code for this is:
-
-\begin{verbatim}
-from Bio.PopGen.SimCoal.Template import generate_simcoal_from_template
-
-generate_simcoal_from_template('simple',
-    [(1, [('SNP', [24, 0.0005, 0.0])])],
-    [('sample_size', [30]),
-    ('pop_size', [100])])
-\end{verbatim}
-
-Executing this code snippet will generate a file on the current directory called
-simple\_100\_300.par this file can be given as input to Fastsimcoal2 to simulate the
-demography (below we will see how Biopython can take care of calling
-Fastsimcoal2).
-
-This code consists of a single function call, let's discuss it parameter by parameter.
-
-The first parameter is the template id (from the list above). We are using the id
-'simple' which is the template for a single population of constant size along time.
-
-The second parameter is the chromosome structure. Please ignore it for now, it will be
-explained in the next section.
-
-The third parameter is a list of all required parameters (recall that the simple model
-only needs sample\_size and pop\_size) and possible values (in this case each
-parameter only has a possible value).
-
-Now, let's consider an example where we want to generate several island models, and we
-are interested in varying the number of demes: 10, 50 and 100 with a migration
-rate of 1\%. Sample size and deme
-size will be the same as before. Here is the code:
-
-
-\begin{verbatim}
-from Bio.PopGen.SimCoal.Template import generate_simcoal_from_template
-
-generate_simcoal_from_template('island',
-    [(1, [('SNP', [24, 0.0005, 0.0])])],
-    [('sample_size', [30]),
-    ('pop_size', [100]),
-    ('mig', [0.01]),
-    ('total_demes', [10, 50, 100])])
-\end{verbatim}
-
-In this case, 3 files will be generated: island\_100\_0.01\_100\_30.par,
-island\_10\_0.01\_100\_30.par and island\_50\_0.01\_100\_30.par. Notice the
-rule to make file names: template name, followed by parameter values in
-reverse order.
-
-A few, arguably more esoteric template demographies exist (please check the
-Bio/PopGen/SimCoal/data directory on Biopython source tree). Furthermore it is possible
-for the user to create new templates. That functionality will be discussed in a future
-version of this document.
-
-\subsubsection{Chromosome structure}
-
-We strongly recommend reading Fastsimcoal2 documentation to understand the full potential
-available in modeling chromosome structures. In this subsection we only discuss how
-to implement chromosome structures using the Biopython interface, not the underlying
-Fastsimcoal2 capabilities.
-
-We will start by implementing a single chromosome, with 24 SNPs with
-a recombination rate immediately on the right of each locus of 0.0005 and a
-minimum frequency of the minor allele of 0. This will be specified by the
-following list (to be passed as second parameter to the function
-generate\_simcoal\_from\_template):
-
-\begin{verbatim}
-[(1, [('SNP', [24, 0.0005, 0.0])])]
-\end{verbatim}
-
-This is actually the chromosome structure used in the above examples.
-
-
-The chromosome structure is represented by a list of chromosomes,
-each chromosome (i.e., each element in the list)
-is composed by a tuple (a pair): the first element
-is the number of times the chromosome is to be repeated (as there
-might be interest in repeating the same chromosome many times).
-The second element is a list of the actual components of the chromosome.
-Each element is again a pair, the first member is the locus type and
-the second element the parameters for that locus type. Confused?
-Before showing more examples let's review the example above: We have
-a list with one element (thus one chromosome), the chromosome is
-a single instance (therefore not to be repeated), it is composed
-of 24 SNPs, with a recombination rate of 0.0005 between each
-consecutive SNP, the minimum frequency of the minor allele is
-0.0 (i.e, it can be absent from a certain population).
-
-Let's see a more complicated example:
-
-\begin{verbatim}
-[
-  (5, [
-       ('SNP', [24, 0.0005, 0.0])
-      ]
-  ),
-  (2, [
-       ('DNA', [10, 0.0, 0.00005, 0.33]),
-       ('RFLP', [1, 0.0, 0.0001]),
-       ('MICROSAT', [1, 0.0, 0.001, 0.0, 0.0])
-      ]
-  )
-]
-\end{verbatim}
-
-We start by having 5 chromosomes with the same structure as
-above (i.e., 24 SNPs). We then have 2 chromosomes which
-have a DNA sequence with 10 nucleotides, 0.0 recombination rate,
-0.0005 mutation rate, and a transition rate of 0.33. Then we
-have an RFLP with 0.0 recombination rate to the next locus and
-a 0.0001 mutation rate. Finally we have a microsatellite (or STR),
-with 0.0 recombination rate to the next locus (note, that as this
-is a single microsatellite which has no loci following, this
-recombination rate here is irrelevant), with a mutation rate
-of 0.001, geometric parameter of 0.0 and a range constraint
-of 0.0 (for information about this parameters please consult
-the Fastsimcoal2 documentation, you can use them to simulate
-various mutation models, including the typical  -- for microsatellites --
-stepwise mutation model among others).
-
-
-\subsection{Running Fastsimcoal2}
-
-We now discuss how to run Fastsimcoal2 from inside Biopython. It is required
-that the binary for Fastsimcoal2 is called fastsimcoal21 (or fastsimcoal21.exe on Windows
-based platforms), please note that the typical name when downloading the
-program is in the format fastsimcoal2\_x\_y. As such, when installing
-Fastsimcoal2
-you will need to rename of the downloaded executable so that Biopython can
-find it.
-
-It is possible to run Fastsimcoal2 on files that were not generated using the method
-above (e.g., writing a parameter file by hand), but we will show an
-example by creating a model using the framework presented above.
-
-\begin{verbatim}
-from Bio.PopGen.SimCoal.Template import generate_simcoal_from_template
-from Bio.PopGen.SimCoal.Controller import FastSimCoalController
-
-
-generate_simcoal_from_template('simple',
-    [
-      (5, [
-           ('SNP', [24, 0.0005, 0.0])
-          ]
-      ),
-      (2, [
-           ('DNA', [10, 0.0, 0.00005, 0.33]),
-           ('RFLP', [1, 0.0, 0.0001]),
-           ('MICROSAT', [1, 0.0, 0.001, 0.0, 0.0])
-          ]
-      )
-    ],
-    [('sample_size', [30]),
-    ('pop_size', [100])])
-
-ctrl = FastSimCoalController()
-ctrl.run_fastsimcoal('simple_100_30.par', 50)
-\end{verbatim}
-
-The lines of interest are the last two (plus the new import).
-Firstly a controller for the
-application is created. The directory where the binary is located has
-to be specified.
-
-The simulator is then run on the last line: we know, from the rules explained
-above, that the input file name is simple\_100\_30.par for the
-simulation parameter file created. We then specify
-that we want to run 50 independent simulations, by default Biopython
-requests a simulation of diploid data, but a third parameter can
-be added to simulate haploid data (adding as a parameter the
-string '0'). Fastsimcoal2 will now run (please
-note that this can take quite a lot of time) and will create a directory
-with the simulation results. The results can now be analysed (typically
-studying the data with Arlequin3). In the future Biopython might support
-reading the Arlequin3 format and thus allowing for the analysis of
-Fastsimcoal2
-data inside Biopython.
-
-
-\section{Other applications}
-
-Here we discuss interfaces and utilities to deal with population genetics'
-applications which arguably have a smaller user base.
-
-\subsection{FDist: Detecting selection and molecular adaptation}
-
-FDist is a selection detection application suite based on computing
-(i.e. simulating) a ``neutral'' confidence interval based on $F_{st}$ and
-heterozygosity. Markers (which can be SNPs, microsatellites, AFLPs
-among others) which lie outside the ``neutral'' interval are to be
-considered as possible candidates for being under selection.
-
-FDist is mainly used when the number of markers is considered enough
-to estimate an average $F_{st}$, but not enough to either have outliers
-calculated from the dataset directly or, with even more markers for
-which the relative positions in the genome are known, to use
-approaches based on, e.g., Extended Haplotype Heterozygosity (EHH).
-
-The typical usage pattern for FDist is as follows:
-
-\begin{enumerate}
-\item Import a dataset from an external format into FDist format.
-\item Compute average $F_{st}$. This is done by datacal inside FDist.
-\item Simulate ``neutral'' markers based on the
-    average $F_{st}$ and expected number of total populations.
-    This is the core operation, done by fdist inside FDist.
-\item Calculate the confidence interval, based on the desired
-    confidence boundaries (typically 95\% or 99\%). This is done by
-    cplot and is mainly used to plot the interval.
-\item Assess each marker status against the simulation ``neutral''
-    confidence interval. Done
-    by pv. This is used to detect the outlier status of each marker
-    against the simulation.
-\end{enumerate}
-
-We will now discuss each step with illustrating example code
-(for this example to work FDist binaries have to be on the
-executable PATH).
-
-The FDist data format is application specific and is not used at
-all by other applications, as such you will probably have to convert
-your data for use with FDist. Biopython can help you do this.
-Here is an example converting from GenePop format to FDist format
-(along with imports that will be needed on examples further below):
-
-\begin{verbatim}
-from Bio.PopGen import GenePop
-from Bio.PopGen import FDist
-from Bio.PopGen.FDist import Controller
-from Bio.PopGen.FDist.Utils import convert_genepop_to_fdist
-
-gp_rec = GenePop.read(open("example.gen"))
-fd_rec = convert_genepop_to_fdist(gp_rec)
-in_file = open("infile", "w")
-in_file.write(str(fd_rec))
-in_file.close()
-\end{verbatim}
-
-In this code we simply parse a GenePop file and convert it to a FDist
-record.
-
-Printing an FDist record will generate
-a string that can be directly saved to a file and supplied to FDist. FDist
-requires the input file to be called infile, therefore we save the record on
-a file with that name.
-
-The most important fields on a FDist record are: num\_pops, the number of
-populations; num\_loci, the number of loci and loci\_data with the marker
-data itself. Most probably the details of the record are of no interest
-to the user, as the record only purpose is to be passed to FDist.
-
-The next step is to calculate the average $F_{st}$ of the dataset (along
-with the sample size):
-
-\begin{verbatim}
-ctrl = Controller.FDistController()
-fst, samp_size = ctrl.run_datacal()
-\end{verbatim}
-
-On the first line we create an object to control the call of  FDist
-suite, this object will be used further on in order to call other
-suite applications.
-
-On the second line we call the datacal application which computes the
-average $F_{st}$
-and the sample size. It is worth noting that the $F_{st}$ computed by
-datacal is a \emph{variation} of Weir and Cockerham's $\theta$.
-
-We can now call the main fdist application in order to simulate neutral
-markers.
-
-\begin{verbatim}
-sim_fst = ctrl.run_fdist(npops = 15, nsamples = fd_rec.num_pops, fst = fst,
-    sample_size = samp_size, mut = 0, num_sims = 40000)
-\end{verbatim}
-
-\begin{description}
-\item[npops] Number of populations existing in nature. This is really a
-    ``guestimate''. Has to be lower than 100.
-\item[nsamples] Number of populations sampled, has to be lower than npops.
-\item[fst] Average $F_{st}$.
-\item[sample\_size] Average number of individuals sampled on each population.
-\item[mut] Mutation model: 0 - Infinite alleles; 1 - Stepwise mutations
-\item[num\_sims] Number of simulations to perform. Typically a number around
-    40000 will be OK, but if you get a confidence interval that looks sharp
-    (this can be detected when plotting the confidence interval computed
-    below) the value can be increased (a suggestion would be steps of 10000
-    simulations).
-\end{description}
-
-The confusion in wording between number of samples and sample size
-stems from the original application.
-
-A file named out.dat will be created with the simulated heterozygosities
-and $F_{st}$s, it will have as many lines as the number of simulations
-requested.
-
-Note that fdist returns the average $F_{st}$ that it was \emph{capable} of
-simulating, for more details about this issue please read below the paragraph
-on approximating the desired average $F_{st}$.
-
-The next (optional) step is to calculate the confidence interval:
-
-\begin{verbatim}
-cpl_interval = ctrl.run_cplot(ci=0.99)
-\end{verbatim}
-
-You can only call cplot after having run fdist.
-
-This will calculate the confidence intervals (99\% in this case)
-for a previous fdist run. A list of quadruples is returned. The
-first element represents the heterozygosity, the second the lower
-bound of $F_{st}$ confidence interval for that heterozygosity,
-the third the average and the fourth the upper bound. This can
-be used to trace the confidence interval contour. This list
-is also written to a file, out.cpl.
-
-The main purpose of this step is return a set of points which can
-be easily used to plot a confidence interval. It can be skipped
-if the objective is only to assess the status of each marker against
-the simulation, which is the next step...
-
-\begin{verbatim}
-pv_data = ctrl.run_pv()
-\end{verbatim}
-
-You can only call cplot after having run datacal and fdist.
-
-This will use the simulated markers to assess the status of each
-individual real marker. A list, in the same order than the loci\_list
-that is on the FDist record (which is in the same order that the GenePop
-record) is returned. Each element in the list is a quadruple, the
-fundamental member of each quadruple is the last element (regarding the
-other elements, please refer to the pv documentation -- for the
-sake of simplicity we will not discuss them here) which returns the
-probability of the simulated $F_{st}$ being lower than the marker $F_{st}$.
-Higher values would indicate a stronger candidate for positive selection,
-lower values a candidate for balancing selection, and intermediate values
-a possible neutral marker. What is ``higher'', ``lower'' or ``intermediate''
-is really a subjective issue, but taking a ``confidence interval'' approach
-and considering a 95\% confidence interval, ``higher'' would be between 0.95
-and 1.0, ``lower'' between 0.0 and 0.05 and ``intermediate'' between 0.05 and
-0.95.
-
-\subsubsection{Approximating the desired average $F_{st}$}
-
-Fdist tries to approximate the desired average $F_{st}$ by doing a
-coalescent simulation using migration rates based on the formula
-
-\[ N_{m} = \frac{1 - F_{st}}{4F_{st}} \]
-
-This formula assumes a few premises like an infinite number of populations.
-
-In practice, when the number of populations is low, the mutation model
-is stepwise and the sample size increases, fdist will not be able to
-simulate an acceptable approximate average $F_{st}$.
-
-To address that, a function is provided to iteratively approach the desired
-value by running several fdists in sequence. This approach is computationally
-more intensive than running a single fdist run, but yields good results.
-The following code runs fdist approximating the desired $F_{st}$:
-
-\begin{verbatim}
-sim_fst = ctrl.run_fdist_force_fst(npops = 15, nsamples = fd_rec.num_pops,
-    fst = fst, sample_size = samp_size, mut = 0, num_sims = 40000,
-    limit = 0.05)
-\end{verbatim}
-
-The only new optional parameter, when comparing with run\_fdist, is limit
-which is the desired maximum error. run\_fdist can (and probably should)
-be safely replaced with run\_fdist\_force\_fst.
-
-\subsubsection{Final notes}
-
-The process to determine the average $F_{st}$ can be more sophisticated than
-the one presented here. For more information we refer you to the FDist
-README file. Biopython's code can be used to implement more sophisticated
-approaches.
-
-\section{Future Developments}
-
-The most desired future developments would be the ones you add yourself ;) .
-
-That being said, already existing fully functional code is currently being
-incorporated in Bio.PopGen, that code covers the applications FDist and
-SimCoal2, the HapMap and UCSC Table Browser databases and some simple statistics
-like $F_{st}$, or allele counts.
-
diff --git a/Doc/Tutorial/chapter_seq_annot.tex b/Doc/Tutorial/chapter_seq_annot.tex
index f6da0fe..c38038a 100644
--- a/Doc/Tutorial/chapter_seq_annot.tex
+++ b/Doc/Tutorial/chapter_seq_annot.tex
@@ -1028,7 +1028,7 @@ Consider this example record:
 >>> from Bio import SeqIO
 >>> record = SeqIO.read("NC_005816.gb", "genbank")
 >>> print("%s %i %i %i %i" % (record.id, len(record), len(record.features), len(record.dbxrefs), len(record.annotations)))
-NC_005816.1 9609 41 1 11
+NC_005816.1 9609 41 1 12
 \end{verbatim}
 
 Here we take the reverse complement and specify a new identifier -- but notice
diff --git a/Doc/Tutorial/chapter_testing.tex b/Doc/Tutorial/chapter_testing.tex
index 9fe5228..6969367 100644
--- a/Doc/Tutorial/chapter_testing.tex
+++ b/Doc/Tutorial/chapter_testing.tex
@@ -50,14 +50,19 @@ To run the docstring tests (see section \ref{section:doctest}), you can use
 \begin{verbatim}
 python run_tests.py doctest
 \end{verbatim}
+You can also skip any tests which have been setup with an explicit
+online component by adding \verb|--offline|, e.g.
+\begin{verbatim}
+python run_tests.py --offline
+\end{verbatim}
 By default, \verb|run_tests.py| runs all tests, including the docstring tests.
 
 If an individual test is failing, you can also try running it
 directly, which may give you more information.
 
-Importantly, note that the individual unit tests come in two types:
+Importantly, note that the individual unit test files come in two types:
 \begin{itemize}
-\item Simple print-and-compare scripts.  These unit tests are
+\item Older simple print-and-compare scripts.  These unit tests are
       essentially short example Python programs, which print out
       various output text.  For a test file named \verb|test_XXX.py|
       there will be a matching text file called \verb|test_XXX| under
@@ -129,9 +134,9 @@ Each Biopython test can have three important files and directories involved with
 \begin{enumerate}
   \item \verb|test_Biospam.py| -- The actual test code for your module.
   \item \verb|Biospam| [optional]-- A directory where any necessary input files
-    will be located. Any output files that will be generated should also
-    be written here (and preferably cleaned up after the tests are
-    done) to prevent clogging up the main Tests directory.
+    will be located. If you have any output files that should be manually
+    reviewed, output them here (but this is discouraged) to prevent clogging
+    up the main Tests directory. In general use a temporary file/folder.
   \item \verb|output/Biospam| -- [for print-and-compare tests only] This
     file contains the expected output from running \verb|test_Biospam.py|.
     This file is not needed for \verb|unittest|-style tests, since there
@@ -402,7 +407,7 @@ OK
 \end{itemize}
 
 If your module contains docstring tests (see section \ref{section:doctest}),
-you may want to include those in the tests to be run. You can do so as
+you \emph{may} want to include those in the tests to be run. You can do so as
 follows by modifying the code under \verb|if __name__ == "__main__":|
 to look like this:
 
@@ -416,10 +421,11 @@ if __name__ == "__main__":
 \end{verbatim}
 
 This is only relevant if you want to run the docstring tests when you
-execute \verb|python test_Biospam.py|; with
-\verb|python run_tests.py|, the docstring tests are run automatically
-(assuming they are included in the list of docstring tests in
-\verb|run_tests.py|, see the section below).
+execute \verb|python test_Biospam.py| if it has some complex run-time
+dependency checking.
+
+In general instead include the docstring tests by adding them to the
+\verb|run_tests.py| as explained below.
 
 \section{Writing doctests}
 \label{section:doctest}
@@ -471,3 +477,61 @@ To run the docstring tests only, use
 $ python run_tests.py doctest
 \end{verbatim}
 
+Note that the doctest system is fragile and care is needed to ensure
+your output will match on all the different versions of Python that
+Biopython supports (e.g. differences in floating point numbers).
+
+\section{Writing doctests in the Tutorial}
+\label{section:doctest-tutorial}
+
+This Tutorial you are reading has a lot of code snippets, which are
+often formatted like a doctest. We have our own system in file
+\verb|test_Tutorial.py| to allow tagging code snippets in the
+Tutorial source to be run as Python doctests. This works by adding
+special \verb|%doctest| comment lines before each verbatim block,
+e.g.
+
+\begin{lstlisting}
+%doctest
+\begin{verbatim}
+>>> from Bio.Alphabet import generic_dna
+>>> from Bio.Seq import Seq
+>>> len("ACGT")
+4
+\end{verbatim}
+\end{lstlisting}
+
+\noindent Often code examples are not self-contained, but
+continue from the previous verbatim block. Here we use the
+magic comment \verb|%cont-doctest| as shown here:
+
+\begin{lstlisting}
+%cont-doctest
+\begin{verbatim}
+>>> Seq("ACGT") == Seq("ACGT", generic_dna)
+True
+\end{verbatim}
+\end{lstlisting}
+
+The special \verb|%doctest| comment line can take a working directory
+(relative to the \verb|Doc/| folder) to use if you have any example
+data files, e.g. \verb|%doctest examples| will use the
+\verb|Doc/examples| folder, while  \verb|%doctest ../Tests/GenBank|
+will use the \verb|Tests/GenBank| folder.
+
+After the directory argument, you can specify any Python dependencies
+which must be present in order to run the test by adding \verb|lib:XXX|
+to indicate \verb|import XXX| must work, e.g.
+\verb|%doctest examples lib:numpy|
+
+You can run the Tutorial doctests via:
+
+\begin{verbatim}
+$ python test_Tutorial.py
+\end{verbatim}
+
+or:
+
+\begin{verbatim}
+$ python run_tests.py test_Tutorial.py
+\end{verbatim}
diff --git a/Doc/examples/ACT_example.py b/Doc/examples/ACT_example.py
index 7ed10bf..3896cf3 100644
--- a/Doc/examples/ACT_example.py
+++ b/Doc/examples/ACT_example.py
@@ -91,9 +91,9 @@ for i, crunch_file in enumerate(comparisons):
                 c = colors.Color(1, 0, 0, alpha=0.25)
                 b = False
             q_feature = q_set.add_feature(SeqFeature(FeatureLocation(q_start - 1, q_end)),
-                                                     color=c, border=b)
+                                          color=c, border=b)
             s_feature = s_set.add_feature(SeqFeature(FeatureLocation(s_start - 1, s_end)),
-                                                     color=c, border=b)
+                                          color=c, border=b)
             gd_diagram.cross_track_links.append(CrossLink(q_feature, s_feature, c, b))
             # NOTE: We are using the same colour for all the matches,
             # with transparency. This means overlayed matches will appear darker.
diff --git a/Doc/examples/Proux_et_al_2002_Figure_6.py b/Doc/examples/Proux_et_al_2002_Figure_6.py
index 095dbcf..a4dece1 100644
--- a/Doc/examples/Proux_et_al_2002_Figure_6.py
+++ b/Doc/examples/Proux_et_al_2002_Figure_6.py
@@ -13,7 +13,8 @@ which produces a GenomeDiagram figure close to Proux et al 2002 Figure 6.
 See http://dx.doi.org/10.1128/JB.184.21.6026-6036.2002
 """
 from reportlab.lib import colors
-from reportlab.lib.colors import red, grey, orange, green, brown, blue, lightblue, purple
+from reportlab.lib.colors import red, grey, orange, green, brown
+from reportlab.lib.colors import blue, lightblue, purple
 
 from Bio.Graphics import GenomeDiagram
 from Bio.Graphics.GenomeDiagram import CrossLink
@@ -30,7 +31,8 @@ name = "Proux Fig 6"
 
 A_rec = SeqIO.read("NC_002703.gbk", "gb")
 B_rec = SeqIO.read("AF323668.gbk", "gb")
-C_rec = SeqIO.read("NC_003212.gbk", "gb")[2587879:2625807].reverse_complement(name=True)
+C_rec = SeqIO.read("NC_003212.gbk",
+                   "gb")[2587879:2625807].reverse_complement(name=True)
 records = dict((rec.name, rec) for rec in [A_rec, B_rec, C_rec])
 
 # Here we hard code the gene colors for simiplicity and to match the target image.
@@ -120,9 +122,9 @@ for i, record in enumerate([A_rec, B_rec, C_rec]):
     # (empty tracks 2 and 4 add useful white space to emphasise the cross links
     # and also serve to make the tracks vertically more compressed)
     gd_track_for_features = gd_diagram.new_track(5 - 2 * i,
-                            name=record.name,
-                            greytrack=True, height=0.5,
-                            start=0, end=len(record))
+                                                 name=record.name,
+                                                 greytrack=True, height=0.5,
+                                                 start=0, end=len(record))
     assert record.name not in feature_sets
     feature_sets[record.name] = gd_track_for_features.new_set()
 
@@ -135,18 +137,24 @@ for X, Y, X_vs_Y in [("NC_002703", "AF323668", A_vs_B),
     set_X = feature_sets[X]
     set_Y = feature_sets[Y]
     for score, x, y in X_vs_Y:
-        color = colors.linearlyInterpolatedColor(colors.white, colors.firebrick, 0, 100, score)
+        color = colors.linearlyInterpolatedColor(colors.white, colors.firebrick,
+                                                 0, 100, score)
         border = colors.lightgrey
         f_x = get_feature(features_X, x)
-        F_x = set_X.add_feature(SeqFeature(FeatureLocation(f_x.location.start, f_x.location.end, strand=0)),
+        F_x = set_X.add_feature(SeqFeature(FeatureLocation(f_x.location.start,
+                                                           f_x.location.end,
+                                                           strand=0)),
                                 color=color, border=border)
         f_y = get_feature(features_Y, y)
-        F_y = set_Y.add_feature(SeqFeature(FeatureLocation(f_y.location.start, f_y.location.end, strand=0)),
+        F_y = set_Y.add_feature(SeqFeature(FeatureLocation(f_y.location.start,
+                                                           f_y.location.end,
+                                                           strand=0)),
                                 color=color, border=border)
         gd_diagram.cross_track_links.append(CrossLink(F_x, F_y, color, border))
 
 
-for record, gene_colors in zip([A_rec, B_rec, C_rec], [A_colors, B_colors, C_colors]):
+for record, gene_colors in zip([A_rec, B_rec, C_rec],
+                               [A_colors, B_colors, C_colors]):
     gd_feature_set = feature_sets[record.name]
 
     i = 0
diff --git a/Doc/examples/alpha.faa b/Doc/examples/alpha.faa
new file mode 100644
index 0000000..9e7f93b
--- /dev/null
+++ b/Doc/examples/alpha.faa
@@ -0,0 +1,4 @@
+>HBA_HUMAN
+MVLSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHFDLSHGSAQVKGHG
+KKVADALTNAVAHVDDMPNALSALSDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTP
+AVHASLDKFLASVSTVLTSKYR
diff --git a/Doc/examples/beta.faa b/Doc/examples/beta.faa
new file mode 100644
index 0000000..293e359
--- /dev/null
+++ b/Doc/examples/beta.faa
@@ -0,0 +1,4 @@
+>HBB_HUMAN
+MVHLTPEEKSAVTALWGKVNVDEVGGEALGRLLVVYPWTQRFFESFGDLSTPDAVMGNPK
+VKAHGKKVLGAFSDGLAHLDNLKGTFATLSELHCDKLHVDPENFRLLGNVLVCVLAHHFG
+KEFTPPVQAAYQKVVAGVANALAHKYH
diff --git a/Doc/examples/getgene.py b/Doc/examples/getgene.py
index 16cc848..183bee2 100755
--- a/Doc/examples/getgene.py
+++ b/Doc/examples/getgene.py
@@ -4,29 +4,32 @@
 # thomas at cbs.dtu.dk, http://www.cbs.dtu.dk/thomas
 # File: getgene.py
 
-""" Example code to index a non-reduntant protein database of
-    SwissProt + TrEMBL for fast lookup and retrieval.
+"""Example indexing plain text SwissProt files.
 
-    To build the database and index it:
-        cd /opt/bio/data/
-        wget -N -nd -r -l1 -A'.dat.Z' ftp://expasy.cbr.nrc.ca/databases/sp_tr_nrdb/
-        zcat *.dat.Z > nr.dat
-        ./getgene.py --index nr.dat
-        setenv PYPHY '/opt/bio/data'
+Example code to index a non-reduntant protein database of
+SwissProt + TrEMBL for fast lookup and retrieval.
+
+To build the database and index it::
+
+    cd /opt/bio/data/
+    wget -N -nd -r -l1 -A'.dat.Z' ftp://expasy.cbr.nrc.ca/databases/sp_tr_nrdb/
+    zcat *.dat.Z > nr.dat
+    ./getgene.py --index nr.dat
+    setenv PYPHY '/opt/bio/data'
+
+To retrieve entries from the command line::
 
-    To retrieve entries from the command line:
     ./getgene.py EFTU_ECOLI
 
-    To use from a python script:
-    from getgene import DB_Index
+To use from a python script::
 
+    from getgene import DB_Index
     db_index = DB_Index()
-
     # retrieve a complete entry:
     db_index.Get('EFTU_ECOLI')
-
     # get organism, lineage and gene
     db_index.Get_OS_OC_GN('EFTU_ECOLI')
+
 """
 
 from __future__ import print_function
@@ -75,7 +78,8 @@ class DB_Index(object):
                         db[acc] = value
                         id, acc, start, stop = None, None, None, None
                     except:
-                        print("AARRGGGG %d %d %s %s" % (start, stop, type(start), type(stop)))
+                        print("AARRGGGG %d %d %s %s" %
+                              (start, stop, type(start), type(stop)))
                         print("%s %s" % (id, acc))
 
             db.close()
@@ -264,7 +268,7 @@ class DB_Index(object):
         return keywords
 
 
-def help(exit=0):
+def usage(exit=0):
     name = os.path.basename(sys.argv[0])
     print('Usage: %s <db> <gene ID>' % name)
     print('  or   %s --index <db.dat>' % name)
@@ -275,7 +279,7 @@ if __name__ == '__main__':
     pyphy_home = os.environ.get('PYPHY')
 
     if len(sys.argv) == 1:
-        help(exit=1)
+        usage(exit=1)
     db_index = DB_Index(open=0)
     func = db_index.Get
     for arg in sys.argv[1:]:
@@ -291,7 +295,7 @@ if __name__ == '__main__':
             func = getattr(db_index, arg[1:])
 
         elif arg == '-h' or arg == '--help':
-            help(exit=1)
+            usage(exit=1)
 
     db = 'nr.dat'
     if len(sys.argv) == 2:
@@ -302,7 +306,7 @@ if __name__ == '__main__':
             db = sys.argv[1]
             ids = sys.argv[2:]
         except:
-            help(exit=1)
+            usage(exit=1)
 
     dbfile = os.path.join(pyphy_home, db + '.indexed')
     db_index.Open(dbfile)
diff --git a/Doc/examples/nmr/simplepredict.py b/Doc/examples/nmr/simplepredict.py
index 558937e..323e765 100755
--- a/Doc/examples/nmr/simplepredict.py
+++ b/Doc/examples/nmr/simplepredict.py
@@ -125,9 +125,9 @@ while (res <= MAXRES):
         # intensity of the resonance.
 
         print(string.split(entry1.fields["15N2.L"], ".")[0], "-->",
-            string.split(entry1.fields["N15.L"], ".")[0], "\t",
-            entry1.fields["H1.P"], entry1.fields["N15.P"],
-            entry1.fields["15N2.P"], entry1.fields["int"])
+              string.split(entry1.fields["N15.L"], ".")[0], "\t",
+              entry1.fields["H1.P"], entry1.fields["N15.P"],
+              entry1.fields["15N2.P"], entry1.fields["int"])
 
         noe1 = noe1 + "\012"
         noe1 = xpktools.replace_entry(noe1, 1, count)
diff --git a/Doc/images/bottle.png b/Doc/images/bottle.png
deleted file mode 100644
index c9ff068..0000000
Binary files a/Doc/images/bottle.png and /dev/null differ
diff --git a/MANIFEST.in b/MANIFEST.in
index 53f1c4a..b526a1d 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -20,6 +20,7 @@ recursive-include Doc *.html
 recursive-include Doc *.fasta
 recursive-include Doc Makefile
 recursive-include Doc/examples *.aln
+recursive-include Doc/examples *.faa
 recursive-include Doc/examples *.xpk
 recursive-include Doc/examples *.gbk
 recursive-include Doc/examples *.sth
diff --git a/NEWS b/NEWS
index ab69ac9..9338cbd 100644
--- a/NEWS
+++ b/NEWS
@@ -10,6 +10,62 @@ The latest news is at the top of this file.
 
 ===================================================================
 
+(In progress, not yet released) Biopython 1.68
+
+This release of Biopython supports Python 2.6, 2.7, 3.3, 3.4 and 3.5, but
+this will be our final release to run on Python 2.6. It has also been tested
+on PyPy 5.0, PyPy3 version 2.4, and Jython 2.7.
+
+Bio.PDB has been extended to parse the RSSB's new binary Macromolecular
+Transmission Format (MMTF, see http://mmtf.rcsb.org), in addition to the
+mmCIF and PDB file formats (contributed by Anthony Bradley). This requires
+an optional external dependency on the mmtf-python library.
+
+Module Bio.pairwise2 has been re-written (contributed by Markus Piotrowski).
+It is now faster, addresses some problems with local alignments, and also
+now allows gap insertions after deletions, and vice versa, inspired by the
+http://dx.doi.org/10.1101/031500 preprint from Flouri et al.
+
+The two sample graphical tools SeqGui (Sequence Graphical User Interface)
+and xbbtools were rewritten (SeqGui) or updated (xbbtools) using the tkinter
+library (contributed by Markus Piotrowski). SeqGui allows simple nucleotide
+transcription, back-transcription and translation into amino acids using
+Bio.Seq internally, offering of the NCBI genetic codes supported in Biopython.
+xbbtools is able to open Fasta formatted files, does simple nucleotide
+operations and translations in any reading frame using one of the NCBI genetic
+codes. In addition, it supports standalone Blast installations to do local
+Blast searches.
+
+New NCBI genetic code table 26 (Pachysolen tannophilus Nuclear Code) has been
+added to Bio.Data (and the translation functionality), and table 11 is now
+also available under the alias Archaeal.
+
+In line with NCBI website changes, Biopython now uses HTTPS rather than HTTP
+to connect to the NCBI Entrez and QBLAST API.
+
+Additionally, a number of small bugs have been fixed with further additions
+to the test suite, and there has been further work to follow the Python PEP8
+and best practice standard coding style.
+
+Many thanks to the Biopython developers and community for making this release
+possible, especially the following contributors:
+
+Anthony Bradley (first contribution)
+Carlos Pena
+Connor T. Skennerton
+Iddo Friedberg
+Kai Blin
+Kristian Davidsen (first contribution)
+Markus Piotrowski
+Olivier Morelle (first contribution)
+Peter Cock
+Tiago Antao
+Travis Wrightsman
+Uwe Schmitt (first contribution)
+Xiaoyu Zhuo (first contribution)
+
+===================================================================
+
 8 June 2016: Biopython 1.67
 
 This release of Biopython supports Python 2.6, 2.7, 3.3, 3.4 and 3.5, but
diff --git a/Scripts/GenBank/check_output.py b/Scripts/GenBank/check_output.py
index 18a9b23..0bc9764 100644
--- a/Scripts/GenBank/check_output.py
+++ b/Scripts/GenBank/check_output.py
@@ -49,8 +49,8 @@ def do_comparison(good_record, test_record):
                                      % good_line)
 
         assert test_line == good_line, \
-               "Expected does not match Test.\nExpect:`%s`\nTest  :`%s`\n" % \
-               (good_line, test_line)
+            "Expected does not match Test.\nExpect:`%s`\nTest  :`%s`\n" % \
+            (good_line, test_line)
 
 
 def write_format(file):
diff --git a/Scripts/Performance/biosql_performance_load.py b/Scripts/Performance/biosql_performance_load.py
index 464f2a6..f4cb88a 100644
--- a/Scripts/Performance/biosql_performance_load.py
+++ b/Scripts/Performance/biosql_performance_load.py
@@ -11,7 +11,7 @@ from BioSQL import BioSeqDatabase
 __docformat__ = "restructuredtext en"
 
 server = BioSeqDatabase.open_database(host="192.168.0.192", user="root",
-                                       passwd="", db="pythonloadtest")
+                                      passwd="", db="pythonloadtest")
 
 # remove the database if it already exists
 db_name = "testload"
diff --git a/Scripts/Performance/biosql_performance_read.py b/Scripts/Performance/biosql_performance_read.py
index db4668b..8484570 100644
--- a/Scripts/Performance/biosql_performance_read.py
+++ b/Scripts/Performance/biosql_performance_read.py
@@ -10,7 +10,7 @@ from BioSQL import BioSeqDatabase
 __docformat__ = "restructuredtext en"
 
 server = BioSeqDatabase.open_database(host="192.168.0.192", user="root",
-                                       passwd="", db="test_biosql")
+                                      passwd="", db="test_biosql")
 db = server["embl_rod"]
 
 # -- do the fasta-only timing part
diff --git a/Scripts/Restriction/ranacompiler.py b/Scripts/Restriction/ranacompiler.py
index b380ea6..82237cd 100644
--- a/Scripts/Restriction/ranacompiler.py
+++ b/Scripts/Restriction/ranacompiler.py
@@ -462,6 +462,7 @@ class DictionaryBuilder(object):
                   'classes...')
             results.write(start)
             results.write('rest_dict = {}\n')
+            results.write("\n\n")
             for name in sorted(classdict):
                 results.write("def _temp():\n")
                 results.write("    return {\n")
@@ -470,10 +471,11 @@ class DictionaryBuilder(object):
                                   (repr(key), repr(value)))
                 results.write("    }\n")
                 results.write("rest_dict[%s] = _temp()\n" % repr(name))
-                results.write("\n")
+                results.write("\n\n")
             print('OK.\n')
             print('Writing the dictionary containing the suppliers data...')
             results.write('suppliers = {}\n')
+            results.write("\n\n")
             for name in sorted(suppliersdict):
                 results.write("def _temp():\n")
                 results.write("    return (\n")
@@ -481,10 +483,11 @@ class DictionaryBuilder(object):
                     results.write("        %s,\n" % repr(value))
                 results.write("    )\n")
                 results.write("suppliers[%s] = _temp()\n" % repr(name))
-                results.write("\n")
+                results.write("\n\n")
             print('OK.\n')
             print('Writing the dictionary containing the Restriction types...')
             results.write('typedict = {}\n')
+            results.write("\n\n")
             for name in sorted(typedict):
                 results.write("def _temp():\n")
                 results.write("    return (\n")
@@ -492,7 +495,7 @@ class DictionaryBuilder(object):
                     results.write("        %s,\n" % repr(value))
                 results.write("    )\n")
                 results.write("typedict[%s] = _temp()\n" % repr(name))
-                results.write("\n")
+                results.write("\n\n")
             # I had wanted to do "del _temp" at each stage (just for clarity),
             # but that pushed the code size just over the Jython JVM limit. We
             # include one the final "del _temp" to clean up the namespace.
@@ -693,8 +696,9 @@ class DictionaryBuilder(object):
                 continue
 
     def parseline(self, line):
-        line = [line[0]] + [line[1].upper()] + [int(i) for i in line[2:9]] + \
-               line[9:]
+        line = [line[0]] + \
+            [line[1].upper()] + [int(i) for i in line[2:9]] + \
+            line[9:]
         name = line[0].replace("-", "_").replace(".", "_")
         site = line[1]  # sequence of the recognition site
         dna = Seq(site, generic_dna)
diff --git a/Scripts/SeqGui/SeqGui.py b/Scripts/SeqGui/SeqGui.py
index a054971..fea8f4b 100644
--- a/Scripts/SeqGui/SeqGui.py
+++ b/Scripts/SeqGui/SeqGui.py
@@ -1,242 +1,186 @@
+# Copyright 2000 by Katharine Lindner (Cayte).
+# Copyright 2016 by Markus Piotrowski.
+# All rights reserved.
 # This code is part of the Biopython distribution and governed by its
 # license.  Please see the LICENSE file that should have been included
 # as part of this package.
 #
+# The original SeqGui was written by Katharine Lindner (Cayte) in 2000 using
+# the wxPython library for the GUI. It was rewritten by Markus Piotrowski in
+# 2016 using tkinter and tkinter's themed widgets (ttk).
+"""A small GUI tool to demonstrate some basic sequence operations.
+
+SeqGui (sequence graphical user interface) is a little tool that allows
+transcription, translation and back translation of a sequence that the
+user can type or copy into a text field. For translation the user can select
+from several codon tables which are implemented in Biopython.
+It runs as a standalone application.
+
+"""
 
 from __future__ import print_function
 
 from Bio.Seq import translate, transcribe, back_transcribe
-import wx
-
-
-ID_APPLY = 101
-ID_CLEAR = 102
-ID_EXIT = 103
-ID_CLOSE = 104
-ID_ABOUT = 105
-ID_CODON = 106
-ID_TRANSFORM = 107
-
-
-class ParamsPanel(wx.Panel):
-    def __init__(self, parent, log):
-        wx.Panel.__init__(self, parent, -1)
-        codon_table_static = wx.StaticText(self, -1, 'Codon Tables',
-                                           style=wx.ALIGN_CENTER)
-        lc = wx.LayoutConstraints()
-        lc.top.SameAs(self, wx.Top, 5)
-        lc.left.SameAs(self, wx.Left, 5)
-        lc.height.AsIs()
-        lc.right.SameAs(self, wx.Right, 5)
-        codon_table_static.SetConstraints(lc)
-
-        codon_table_lb = wx.ListBox(self, ID_CODON)
-        lc = wx.LayoutConstraints()
-        lc.top.Below(codon_table_static, 5)
-        lc.left.SameAs(self, wx.Left, 5)
-        lc.height.PercentOf(self, wx.Height, 30)
-        lc.right.SameAs(self, wx.Right, 5)
-        codon_table_lb.SetConstraints(lc)
-        self.codon_table_lb = codon_table_lb
-
-        codon_table_lb.Append('Standard')
-        codon_table_lb.Append('Vertebrate Mitochondrial')
-        codon_table_lb.Append('Yeast Mitochondrial')
-        codon_table_lb.Append('Mold Mitochondrial')
-        codon_table_lb.Append('Invertebrate Mitochondrial')
-        codon_table_lb.Append('Echinoderm Mitochondrial')
-        codon_table_lb.Append('Euplotid Nuclear')
-        codon_table_lb.Append('Bacterial')
-        codon_table_lb.Append('Alternative Yeast Nuclear')
-        codon_table_lb.Append('Ascidian Mitochondrial')
-        codon_table_lb.Append('Flatworm Mitochondrial')
-        codon_table_lb.Append('Blepharisma Macronuclear')
-        codon_table_lb.SetSelection(0)
-
-        transform_static = wx.StaticText(self, -1, 'Transformation',
-                                         style=wx.ALIGN_CENTER)
-        lc = wx.LayoutConstraints()
-        lc.top.Below(codon_table_lb, 5)
-        lc.left.SameAs(self, wx.Left, 5)
-        lc.height.AsIs()
-        lc.right.SameAs(self, wx.Right, 5)
-        transform_static.SetConstraints(lc)
-
-        transform_lb = wx.ListBox(self, ID_TRANSFORM)
-        lc = wx.LayoutConstraints()
-        lc.top.Below(transform_static, 5)
-        lc.left.SameAs(self, wx.Left, 5)
-        lc.height.PercentOf(self, wx.Height, 30)
-        lc.right.SameAs(self, wx.Right, 5)
-        transform_lb.SetConstraints(lc)
-
-        transform_lb.Append('Transcribe')
-        transform_lb.Append('Translate')
-        transform_lb.Append('Back transcribe')
-        transform_lb.SetSelection(1)
-        self.transform_lb = transform_lb
-
-
-class SeqPanel(wx.Panel):
-    def __init__(self, parent, log):
-        self.parent = parent
-        wx.Panel.__init__(self, parent, -1)
-        apply_button = wx.Button(self, ID_APPLY, "Apply")
-        clear_button = wx.Button(self, ID_CLEAR, "Clear")
-        close_button = wx.Button(self, ID_CLOSE, "Close")
-        wx.EVT_BUTTON(self, ID_CLOSE, self.OnClose)
-        wx.EVT_BUTTON(self, ID_APPLY, self.OnApply)
-        wx.EVT_BUTTON(self, ID_CLEAR, self.OnClear)
-
-        lc = wx.LayoutConstraints()
-        lc.bottom.SameAs(self, wx.Bottom, 10)
-        lc.left.SameAs(self, wx.Left, 10)
-        lc.height.AsIs()
-        lc.width.PercentOf(self, wx.Width, 25)
-        apply_button.SetConstraints(lc)
-
-        lc = wx.LayoutConstraints()
-        lc.bottom.SameAs(self, wx.Bottom, 10)
-        lc.left.RightOf(apply_button, 5)
-        lc.height.AsIs()
-        lc.width.PercentOf(self, wx.Width, 25)
-        clear_button.SetConstraints(lc)
-
-        lc = wx.LayoutConstraints()
-        lc.bottom.SameAs(self, wx.Bottom, 10)
-        lc.left.RightOf(clear_button, 5)
-        lc.height.AsIs()
-        lc.width.PercentOf(self, wx.Width, 25)
-        close_button.SetConstraints(lc)
-
-        src_static = wx.StaticText(self, -1, 'Original Sequence',
-                                   style=wx.ALIGN_CENTER)
-        lc = wx.LayoutConstraints()
-        lc.top.SameAs(self, wx.Top, 5)
-        lc.left.SameAs(self, wx.Left, 5)
-        lc.height.AsIs()
-        lc.right.SameAs(self, wx.Right, 5)
-        src_static.SetConstraints(lc)
-
-        src_text = wx.TextCtrl(self, -1, '', style=wx.TE_MULTILINE)
-        lc = wx.LayoutConstraints()
-        lc.top.Below(src_static, 5)
-        lc.left.SameAs(self, wx.Left, 5)
-        lc.height.PercentOf(self, wx.Height, 30)
-        lc.right.SameAs(self, wx.Right, 5)
-        src_text.SetConstraints(lc)
-        self.src_text = src_text
-
-        dest_static = wx.StaticText(self, -1, 'Transformed Sequence',
-                                    style=wx.ALIGN_CENTER)
-        lc = wx.LayoutConstraints()
-        lc.top.Below(src_text, 5)
-        lc.left.SameAs(self, wx.Left, 5)
-        lc.height.AsIs()
-        lc.right.SameAs(self, wx.Right, 5)
-        dest_static.SetConstraints(lc)
-
-        dest_text = wx.TextCtrl(self, -1, '', style=wx.TE_MULTILINE)
-        lc = wx.LayoutConstraints()
-        lc.top.Below(dest_static, 5)
-        lc.left.SameAs(self, wx.Left, 5)
-        lc.height.PercentOf(self, wx.Height, 30)
-        lc.right.SameAs(self, wx.Right, 5)
-        dest_text.SetConstraints(lc)
-        self.dest_text = dest_text
-
-    def OnClose(self, event):
-        parent = self.GetParent()
-        parent.Destroy()
-
-    def OnApply(self, event):
-        codon_table_lb = self.parent.params_panel.codon_table_lb
-        selection = codon_table_lb.GetStringSelection()
-        print(selection)
-        codon_table = selection[:]
-        transform_lb = self.parent.params_panel.transform_lb
-        selection = transform_lb.GetStringSelection()
-        transform = selection[:]
-        print(transform)
-        if(transform == 'Translate'):
-            self.translate(codon_table)
-        elif(transform == 'Transcribe'):
-            self.transcribe()
-        elif(transform == 'Back transcribe'):
-            self.back_transcribe()
-
-    def OnClear(self, event):
-        self.src_text.Clear()
-        self.dest_text.Clear()
-
-    def translate(self, codon_table):
-        seq = "".join(self.src_text.GetValue().split())  # remove whitespace
-        print(seq)
-        self.dest_text.Clear()
-        self.dest_text.SetValue(translate(seq, table=codon_table,
-                                          to_stop=True))
-
-    def transcribe(self):
-        seq = "".join(self.src_text.GetValue().split())  # remove whitespace
-        print(seq)
-        self.dest_text.Clear()
-        self.dest_text.SetValue(transcribe(seq))
-
-    def back_transcribe(self):
-        seq = "".join(self.src_text.GetValue().split())  # remove whitespace
-        print(seq)
-        self.dest_text.Clear()
-        self.dest_text.SetValue(back_transcribe(seq))
-
-
-class SeqFrame(wx.Frame):
-    def __init__(self, parent, ID, title):
-        wx.Frame.__init__(self, parent, ID, title,
-                          wx.DefaultPosition, wx.Size(500, 400))
-        self.SetAutoLayout(True)
-        self.CreateStatusBar()
-        self.SetStatusText("This is the statusbar")
-        menu = wx.Menu()
-        menu.Append(ID_ABOUT, "&About",
-                    "More information about this program")
-        menu.AppendSeparator()
-        menu.Append(ID_EXIT, "E&xit", "Terminate the program")
-
-        menuBar = wx.MenuBar()
-        menuBar.Append(menu, "&File")
-        self.SetMenuBar(menuBar)
-
-        params_panel = ParamsPanel(self, -1)
-        lc = wx.LayoutConstraints()
-        lc.top.SameAs(self, wx.Top, 10)
-        lc.left.SameAs(self, wx.Left, 5)
-        lc.bottom.SameAs(self, wx.Bottom, 5)
-        lc.width.PercentOf(self, wx.Width, 40)
-        params_panel.SetConstraints(lc)
-
-        seq_panel = SeqPanel(self, -1)
-        lc = wx.LayoutConstraints()
-        lc.top.SameAs(self, wx.Top, 10)
-        lc.left.RightOf(params_panel, 5)
-        lc.bottom.SameAs(self, wx.Bottom, 5)
-        lc.right.SameAs(self, wx.Right)
-        seq_panel.SetConstraints(lc)
-
-        self.seq_panel = seq_panel
-        self.params_panel = params_panel
-
-        wx.EVT_MENU(self, ID_EXIT, self.exit)
-
-    def exit(self, event):
-        self.Close(True)
-
-
-class MyApp(wx.App):
-    def OnInit(self):
-        frame = SeqFrame(None, -1, "Greetings from Biopython")
-        frame.Show(True)
-        self.SetTopWindow(frame)
-        return True
-
-app = MyApp(0)
-app.MainLoop()
+from Bio.Data import CodonTable
+
+try:  # Python 2
+    import Tkinter as tk
+    import ttk
+except ImportError:  # Python 3
+    import tkinter as tk
+    import tkinter.ttk as ttk
+
+
+main_window = tk.Tk()
+main_window.title('Greetings from Biopython')
+
+menue = tk.Menu(main_window)
+menue_single = tk.Menu(menue, tearoff=0)
+menue.add_cascade(menu=menue_single, label='File')
+menue_single.add_command(label='About')
+menue_single.add_separator()
+menue_single.add_command(label='Exit', command=main_window.destroy)
+main_window.config(menu=menue)
+
+# Left panel with parameters
+param_panel = ttk.Frame(main_window, relief=tk.GROOVE, padding=5)
+
+codon_panel = ttk.LabelFrame(param_panel, text='Codon Tables')
+codon_scroller = ttk.Scrollbar(codon_panel, orient=tk.VERTICAL)
+codon_list = tk.Listbox(codon_panel, height=5, width=25,
+                        yscrollcommand=codon_scroller.set)
+
+# Import actual codon tables from Biopython and sort alphabetically
+codon_table_list = sorted([table.names[0] for n, table in
+                           CodonTable.generic_by_id.items()])
+
+# 'Standard' table should be first in the list
+del(codon_table_list[codon_table_list.index('Standard')])
+codon_table_list.insert(0, 'Standard')
+
+for codon_table in codon_table_list:
+    codon_list.insert(tk.END, codon_table)
+codon_list.selection_set(0)
+codon_list.configure(exportselection=False)
+codon_scroller.config(command=codon_list.yview)
+
+# Radiobuttons are more appropiate than another listbox here:
+transform_panel = ttk.LabelFrame(param_panel, text='Transformation')
+
+transform_var = tk.StringVar()
+transform_transcribe = ttk.Radiobutton(transform_panel, text='Transcribe',
+                                       variable=transform_var,
+                                       value='transcribe')
+transform_translate = ttk.Radiobutton(transform_panel, text='Translate',
+                                      variable=transform_var,
+                                      value='translate')
+transform_backtranscribe = ttk.Radiobutton(transform_panel,
+                                           text='Back transcribe',
+                                           variable=transform_var,
+                                           value='back transcribe')
+transform_translate.invoke()
+
+# Right panel with sequence in- and output
+seq_panel = ttk.Frame(main_window, relief=tk.GROOVE, padding=5)
+
+input_panel = ttk.LabelFrame(seq_panel, text='Original Sequence')
+input_scroller = ttk.Scrollbar(input_panel, orient=tk.VERTICAL)
+input_text = tk.Text(input_panel, width=39, height=5,
+                     yscrollcommand=input_scroller.set)
+input_scroller.config(command=input_text.yview)
+
+output_panel = ttk.LabelFrame(seq_panel, text='Transformed Sequence')
+output_scroller = ttk.Scrollbar(output_panel, orient=tk.VERTICAL)
+output_text = tk.Text(output_panel, width=39, height=5,
+                      yscrollcommand=output_scroller.set)
+output_scroller.config(command=output_text.yview)
+
+# Buttons
+apply_button = ttk.Button(seq_panel, text='Apply')
+clear_button = ttk.Button(seq_panel, text='Clear')
+close_button = ttk.Button(seq_panel, text='Close', command=main_window.destroy)
+
+
+# Statusbar
+statustext = tk.StringVar()
+statusbar = ttk.Label(main_window, textvariable=statustext, relief=tk.GROOVE,
+                      padding=5)
+statustext.set('This is the statusbar')
+sizegrip = ttk.Sizegrip(statusbar)
+
+
+# Event methods
+def clear_output():
+    """Clear the output window."""
+    input_text.delete(1.0, tk.END)
+    output_text.delete(1.0, tk.END)
+    return
+
+
+def apply_operation():
+    """Do the selected operation."""
+    codon_table = codon_list.get(codon_list.curselection())
+    print('Code: {}'.format(codon_table))
+
+    seq = ''.join(input_text.get(1.0, tk.END).split())
+    print('Input sequence: {}'.format(seq))
+
+    operation = transform_var.get()
+    print('Operation: {}'.format(operation))
+
+    if operation == 'transcribe':
+        result = transcribe(seq)
+    elif operation == 'translate':
+        result = translate(seq, table=codon_table, to_stop=True)
+    elif operation == 'back transcribe':
+        result = back_transcribe(seq)
+    else:
+        result = ''
+
+    output_text.delete(1.0, tk.END)
+    output_text.insert(tk.END, result)
+    print('Result: {}'.format(result))
+    return
+
+
+def set_statusbar(event):
+    """Show statusbar comments from menu selection."""
+    index = main_window.call(event.widget, "index", "active")
+    if index == 0:
+        statustext.set('More information about this program')
+    elif index == 2:
+        statustext.set('Terminate the program')
+    else:
+        statustext.set('This is the statusbar')
+    return
+
+# Set commands and bind events
+menue_single.bind('<<MenuSelect>>', set_statusbar)
+apply_button.config(command=apply_operation)
+clear_button.config(command=clear_output)
+
+# Build GUI
+statusbar.pack(side=tk.BOTTOM, padx=1, fill=tk.X)
+sizegrip.pack(side=tk.RIGHT, padx=3, pady=4)
+
+param_panel.pack(side=tk.LEFT, anchor=tk.N, padx=5, pady=10, fill=tk.Y)
+codon_panel.pack(fill=tk.Y, expand=True)
+codon_scroller.pack(side=tk.RIGHT, fill=tk.Y)
+codon_list.pack(fill=tk.Y, expand=True)
+transform_panel.pack(pady=10, fill=tk.X)
+transform_transcribe.pack(anchor=tk.W)
+transform_translate.pack(anchor=tk.W)
+transform_backtranscribe.pack(anchor=tk.W)
+
+seq_panel.pack(anchor=tk.N, padx=5, pady=10, fill=tk.BOTH, expand=True)
+input_panel.pack(fill=tk.BOTH, expand=True)
+input_scroller.pack(side=tk.RIGHT, fill=tk.Y)
+input_text.pack(fill=tk.BOTH, expand=True)
+output_panel.pack(pady=10, fill=tk.BOTH, expand=True)
+output_scroller.pack(side=tk.RIGHT, fill=tk.Y)
+output_text.pack(fill=tk.BOTH, expand=True)
+apply_button.pack(side=tk.LEFT)
+clear_button.pack(side=tk.LEFT, padx=10)
+close_button.pack(side=tk.LEFT)
+
+main_window.mainloop()
diff --git a/Scripts/scop_pdb.py b/Scripts/scop_pdb.py
index a1465ad..d7d7ff6 100755
--- a/Scripts/scop_pdb.py
+++ b/Scripts/scop_pdb.py
@@ -58,7 +58,7 @@ Usage: scop_pdb [-h] [-i file] [-o file] [-p pdb_url_prefix]
 """)
 
 default_pdb_url = "http://www.rcsb.org/pdb/cgi/export.cgi/somefile.pdb?" \
-                      "format=PDB&pdbId=%s&compression=None"
+    "format=PDB&pdbId=%s&compression=None"
 # default_pdb_url = "file://usr/local/db/pdb/data/010331/snapshot/all/pdb%s.ent"
 
 
@@ -73,7 +73,7 @@ def open_pdb(pdbid, pdb_url=None):
 def main():
     try:
         opts, args = getopt.getopt(sys.argv[1:], "hp:o:i:",
-             ["help", "usage", "pdb=", "output=", "input="])
+                                   ["help", "usage", "pdb=", "output=", "input="])
     except getopt.GetoptError:
         # show help information and exit:
         usage()
diff --git a/Scripts/update_ncbi_codon_table.py b/Scripts/update_ncbi_codon_table.py
new file mode 100644
index 0000000..f05220d
--- /dev/null
+++ b/Scripts/update_ncbi_codon_table.py
@@ -0,0 +1,96 @@
+# This code is part of the Biopython distribution and governed by its
+# license.  Please see the LICENSE file that should have been included
+# as part of this package.
+"""Helper script to update Codon tables from the NCBI.
+
+These tables are based on parsing the NCBI file:
+ftp://ftp.ncbi.nih.gov/entrez/misc/data/gc.prt
+
+This script is used to update Bio/Data/CodonTable.py
+
+Note that the NCBI sometimes revise the older tables,
+so don't just add new tables - replace all of them
+and check for any differences in the old tables.
+"""
+
+import re
+
+INDENT = len("register_ncbi_table(")
+
+
+def line_wrap(text, indent=0, max_len=78):
+    if len(text) <= max_len:
+        return text
+    line = text[:max_len]
+    assert " " in line, line
+    line, rest = line.rsplit(" ", 1)
+    rest = " " * indent + rest + text[max_len:]
+    assert len(line) < max_len
+    if indent + len(rest) <= max_len:
+        return line + "\n" + rest
+    else:
+        return line + "\n" + line_wrap(rest, max_len)
+
+
+print("##########################################################################")
+print("# Start of auto-generated output from Scripts/update_ncbi_codon_table.py #")
+print("##########################################################################")
+print("")
+print("")
+
+for line in open("gc.prt").readlines():
+    if line[:2] == " {":
+        names = []
+        id = None
+        aa = None
+        start = None
+        bases = []
+    elif line[:6] == "  name":
+        names.append(re.search('"([^"]*)"', line).group(1))
+    elif line[:8] == "    name":
+        names.append(re.search('"(.*)$', line).group(1))
+    elif line == ' Mitochondrial; Mycoplasma; Spiroplasma" ,\n':
+        names[-1] = names[-1] + " Mitochondrial; Mycoplasma; Spiroplasma"
+    elif line[:4] == "  id":
+        id = int(re.search('(\d+)', line).group(1))
+    elif line[:10] == "  ncbieaa ":
+        aa = line[12:12 + 64]
+    elif line[:10] == "  sncbieaa":
+        start = line[12:12 + 64]
+    elif line[:9] == "  -- Base":
+        bases.append(line[12:12 + 64])
+    elif line[:2] == " }":
+        assert names != [] and id is not None and aa is not None
+        assert start is not None and bases != []
+        if len(names) == 1:
+            names.append(None)
+        print("register_ncbi_table(name=%r," % names[0])
+        print(" " * INDENT + "alt_name=%r, id=%d," % (names[1], id))
+        print(" " * INDENT + "table={")
+        s = "    "
+        for i in range(64):
+            if aa[i] != "*":
+                t = " '%s%s%s': '%s'," % (bases[0][i], bases[1][i],
+                                          bases[2][i], aa[i])
+                if len(s) + len(t) > 75:
+                    print(s)
+                    s = "    " + t
+                else:
+                    s += t
+        print("%s }," % s)
+        codons = [bases[0][i] + bases[1][i] + bases[2][i]
+                  for i in range(64) if aa[i] == "*"]
+        print(line_wrap(" " * INDENT + "stop_codons=%r," % codons, indent=INDENT + 13))
+        codons = [bases[0][i] + bases[1][i] + bases[2][i]
+                  for i in range(64) if start[i] == "M"]
+        print(line_wrap(" " * INDENT + "start_codons=%r)" % codons, indent=INDENT + 14))
+        print("")
+    elif line[:2] == "--" or line in ("\n", "}\n", 'Genetic-code-table ::= {\n'):
+        pass
+    else:
+        raise Exception("Unparsed: " + repr(line))
+
+print("")
+print("########################################################################")
+print("# End of auto-generated output from Scripts/update_ncbi_codon_table.py #")
+print("########################################################################")
diff --git a/Scripts/xbbtools/nextorf.py b/Scripts/xbbtools/nextorf.py
index b2faebb..a6f3e90 100755
--- a/Scripts/xbbtools/nextorf.py
+++ b/Scripts/xbbtools/nextorf.py
@@ -45,9 +45,9 @@ class MissingTable(object):
 def makeTableX(table):
     assert table.protein_alphabet == IUPAC.extended_protein
     return CodonTable.CodonTable(table.nucleotide_alphabet, proteinX,
-                                MissingTable(table.forward_table),
-                                table.back_table, table.start_codons,
-                                table.stop_codons)
+                                 MissingTable(table.forward_table),
+                                 table.back_table, table.start_codons,
+                                 table.stop_codons)
 
 
 class NextOrf(object):
@@ -85,7 +85,8 @@ class NextOrf(object):
             self.Output(CDS)
 
     def ToFasta(self, header, seq):
-        seq = re.sub('(............................................................)', '\\1\n', seq)
+        seq = re.sub('(............................................................)',
+                     '\\1\n', seq)
         return '>%s\n%s' % (header, seq)
 
     def Gc(self, seq):
@@ -180,7 +181,8 @@ class NextOrf(object):
                         if nostart == '1' and start_site == 1:
                             start_site = start_site + f - 1
                         if codon == 'XXX':
-                            stop = start_site + 3 * ((int((stop - 1) - start_site) // 3))
+                            stop = start_site \
+                                + 3 * ((int((stop - 1) - start_site) // 3))
                         s = seq[start_site - 1:stop]
                         CDS.append((start_site, stop, length, s, strand * f))
                         start_site = 0
@@ -200,9 +202,13 @@ class NextOrf(object):
         for start, stop, length, subs, strand in CDS:
             self.counter += 1
             if strand > 0:
-                head = 'orf_%s:%s:%d:%d:%d' % (self.counter, self.header, strand, start, stop)
+                head = 'orf_%s:%s:%d:%d:%d' % (self.counter, self.header,
+                                               strand, start, stop)
             if strand < 0:
-                head = 'orf_%s:%s:%d:%d:%d' % (self.counter, self.header, strand, n - stop + 1, n - start + 1)
+                head = 'orf_%s:%s:%d:%d:%d' % (self.counter, self.header,
+                                               strand,
+                                               n - stop + 1,
+                                               n - start + 1)
             if self.options['gc']:
                 head = '%s:%s' % (head, self.Gc2(subs.data))
 
@@ -237,7 +243,8 @@ def help():
     print("\nNCBI's Codon Tables:")
     for key, table in CodonTable.ambiguous_dna_by_id.items():
         print('\t%s %s' % (key, table._codon_table.names[0]))
-    print('\ne.g.\n./nextorf.py --minlength 5 --strand plus --output nt --gc 1 testjan.fas')
+    print('\ne.g.')
+    print('./nextorf.py --minlength 5 --strand plus --output nt --gc 1 testjan.fas')
     sys.exit(0)
 
 
@@ -252,7 +259,7 @@ options = {
     'gc': 0,
     'nostart': 0,
     'table': 1,
-    }
+}
 
 if __name__ == '__main__':
     args = sys.argv[1:]
diff --git a/Scripts/xbbtools/test.fas b/Scripts/xbbtools/test.fas
index 7cc6763..7d80432 100644
--- a/Scripts/xbbtools/test.fas
+++ b/Scripts/xbbtools/test.fas
@@ -1,4 +1,4 @@
->R. prowazekii 25/8/98, 1111523 bases, 59968998 checksum.
+>R_prowazekii 25/8/98, 1111523 bases, 59968998 checksum.
 ATGACAAAGCTAATTATTCACTTGGTTTCAGACTCTTCTGTGCAAACTGC
 AAAACATGCAGCAAATTCTGCTCTTGCTCAATTTACTTCTATAAAACAAA
 AATTNNNNNNNNNNCCAATGATTAGAAATTGTGAATTACTAAATGAAGTA
diff --git a/Scripts/xbbtools/testrp.fas b/Scripts/xbbtools/testrp.fas
index fdf260c..c5cc5f6 100644
--- a/Scripts/xbbtools/testrp.fas
+++ b/Scripts/xbbtools/testrp.fas
@@ -1,4 +1,4 @@
->R. prowazekii 25/8/98, 1111523 bases, 59968998 checksum.
+>R_prowazekii 25/8/98, 1111523 bases, 59968998 checksum.
 ATGACAAAGCTAATTATTCACTTGGTTTCAGACTCTTCTGTGCAAACTGC
 AAAACATGCAGCAAATTCTGCTCTTGCTCAATTTACTTCTATAAAACAAA
 AATTGTATCATTGGCCAATGATTAGAAATTGTGAATTACTAAATGAAGTA
diff --git a/Scripts/xbbtools/xbb_blast.py b/Scripts/xbbtools/xbb_blast.py
index de8d36c..bb78164 100644
--- a/Scripts/xbbtools/xbb_blast.py
+++ b/Scripts/xbbtools/xbb_blast.py
@@ -1,6 +1,12 @@
 #!/usr/bin/env python
+# Copyright 2000 by Thomas Sicheritz-Ponten.
+# Copyrigth 2016 by Markus Piotrowski.
+# All rights reserved.
+# This code is part of the Biopython distribution and governed by its
+# license.  Please see the LICENSE file that should have been included
+# as part of this package.
+
 # Created: Thu Jul 13 14:07:25 2000
-# Last changed: Time-stamp: <00/12/03 13:27:24 thomas>
 # thomas at cbs.dtu.dk, http://www.cbs.dtu.dk/thomas
 # File: xbb_blast.py
 
@@ -9,157 +15,192 @@ from __future__ import print_function
 import glob
 import os
 import sys
-from threading import *
 
-try:
-    from Tkinter import *  # Python 2
-except ImportError:
-    from tkinter import *  # Python 3
+try:  # Python 2
+    import Tkinter as tk
+    import ttk
+    import tkFileDialog as filedialog
+    import tkMessageBox as messagebox
+except ImportError:  # Python 3
+    import tkinter as tk
+    import tkinter.ttk as ttk
+    from tkinter import filedialog
+    from tkinter import messagebox
 
-import Pmw
-sys.path.insert(0, '.')
 
 from xbb_utils import NotePad
 import xbb_blastbg
 
 
 class BlastIt(object):
+
+    nin, pin = [], []
+    blast_ok = False
+    blast_path = ''
+
     def __init__(self, seq, parent=None):
         self.seq = seq
         self.parent = parent
-        self.toplevel = Toplevel(parent)
-        Pmw.initialise(parent)
-        self.GetBlasts()
+        self.toplevel = tk.Toplevel(parent)
+        self.toplevel.title('BLAST parameters')
+        if not self.get_blast_databases() or not self.get_blast_binaries():
+            return
         self.Choices()
+        self.dbs.bind('<<ComboboxSelected>>', self.Validate)
+        self.blasts.bind('<<ComboboxSelected>>', self.Validate)
 
-    def GetBlasts(self):
-        pin, nin = [], []
-        try:
-            pin.extend(glob.glob(os.environ['BLASTDB'] + '/*.pin'))
-        except:
-            pass
-        pin.extend(glob.glob('*.pin'))
+    def get_blast_databases(self):
+        """Try to locate the BLAST databases and put into lists."""
+        if not (BlastIt.nin and BlastIt.pin):
+            pin, nin = [], []
 
-        try:
-            nin.extend(glob.glob(os.environ['BLASTDB'] + '/*.nin'))
-        except:
-            pass
-        nin.extend(glob.glob('*.nin'))
+            try:
+                pin.extend(glob.glob(os.environ['BLASTDB'] + '/*.pin'))
+            except KeyError:
+                pass
+            pin.extend(glob.glob('C:*.pin'))
 
-        self.pin = [os.path.splitext(x)[0] for x in pin]
-        self.nin = [os.path.splitext(x)[0] for x in nin]
+            try:
+                nin.extend(glob.glob(os.environ['BLASTDB'] + '/*.nin'))
+            except KeyError:
+                pass
+
+            # If no system variable BLASTDB exists, give user the chance to
+            # locate his database folder:
+            if not(nin and pin):
+                database_folder = filedialog.askdirectory(
+                    title='Please locate your BLAST database(s) folder:')
+                nin.extend(glob.glob(database_folder + '/*.nin'))
+                pin.extend(glob.glob(database_folder + '/*.pin'))
+                if not (nin and pin):
+                    messagebox.showerror('xbb tools', 'This folder does not'
+                                         ' contain any BLAST databases!')
+                    self.toplevel.destroy()
+                    return False
+
+            self.pin = [os.path.splitext(x)[0] for x in pin]
+            self.nin = [os.path.splitext(x)[0] for x in nin]
+
+            BlastIt.pin = self.pin
+            BlastIt.nin = self.nin
+
+        return True
+
+    def get_blast_binaries(self):
+        """Test if BLAST binaries are in PATH or let user locate them."""
+        if not BlastIt.blast_ok:
+            # Test if blast binaries are in path
+            if os.system('blastn -version'):  # Return of non-zero means error
+                self.blast_path = filedialog.askdirectory(
+                    title='Please locate your BLAST program folder:')
+                self.blast_path += os.sep
+                if os.system('{}blastn -version'.format(self.blast_path)):
+                    messagebox.showerror(
+                        'xbb tools', 'Wrong folder or missing BLAST'
+                        ' binaries!\n  To run BLAST you must install the '
+                        ' standalone BLAST binaries.')
+                    self.toplevel.destroy()
+                    return False
+                else:
+                    BlastIt.blast_ok = True
+
+            else:  # BLAST binaries are in PATH
+                BlastIt.blast_ok = True
+                self.blast_path = ''
+        BlastIt.blast_path = self.blast_path
+        self.toplevel.lift()
+        return True
+
+    def database_readable(self, db_paths):
+        """Return the name of the blast database without path and extension."""
+        db_names = [entry.split(os.sep)[-1].split('.')[0]
+                    for entry in db_paths]
+        return db_names
+
+    def convert_dbname_to_dbpath(self, db_name):
+        """Return the full path for a given blast database name."""
+        database_path = ''
+        for database in self.nin:
+            if database.endswith(db_name):
+                database_path = database
+                break
+        for database in self.pin:
+            if database.endswith(db_name):
+                database_path = database
+                break
+        return database_path
 
     def Choices(self):
-        self.GetBlasts()
-        self.cf = Frame(self.toplevel)
-        self.cf.pack(side=TOP, expand=1, fill=X)
-        self.dbs = Pmw.ComboBox(self.cf,
-                                label_text='Blast Databases:',
-                                labelpos='nw',
-                                scrolledlist_items=self.nin + self.pin,
-                                selectioncommand=self.Validate
-                                )
-        self.blasts = Pmw.ComboBox(self.cf,
-                                   label_text='Blast Programs:',
-                                   labelpos='nw',
-                                   scrolledlist_items=['blastn', 'blastp', 'blastx', 'tblastn', 'tblastx'],
-                                   selectioncommand=self.Validate
-                                   )
-        self.dbs.pack(side=LEFT, expand=1, fill=X)
-        self.blasts.pack(side=LEFT, expand=1, fill=X)
-
-        self.alternative_f = Frame(self.cf)
-        self.alternative = Entry(self.alternative_f)
-        self.alternative_f.pack(side=TOP, fill=X, expand=1)
-        self.alternative.pack(side=LEFT, fill=X, expand=1)
-        self.ok = Button(self.alternative_f, text='Run',
-                         command=self._Run)
-        self.ok.pack(side=RIGHT)
-
-        self.dbs.selectitem(0)
-        self.blasts.selectitem(0)
+        self.blast_string = tk.StringVar()
+        self.blast_string.set('blastn')
+        self.cf = ttk.Frame(self.toplevel)
+        self.cf.pack(side='top', expand=1, fill='x')
+        self.dbs_frame = ttk.LabelFrame(self.cf, text='Databases')
+        self.dbs_frame.pack(side='left', padx=5, pady=5, expand=1, fill='x')
+        nin_values = self.database_readable(self.nin)
+        pin_values = self.database_readable(self.pin)
+        self.dbs = ttk.Combobox(self.dbs_frame, exportselection=0,
+                                values=nin_values + pin_values)
+        self.dbs.current(0)
+
+        self.blast_frame = ttk.LabelFrame(self.cf, text='BLAST programs')
+        self.blast_frame.pack(side='left', padx=5, pady=5, expand=1, fill='x')
+        self.blasts = ttk.Combobox(self.blast_frame, exportselection=0,
+                                   textvariable=self.blast_string,
+                                   values=['blastn', 'blastp', 'blastx',
+                                           'tblastn', 'tblastx'])
+
+        self.dbs.pack(side='left', padx=5, pady=5, expand=1, fill='x')
+        self.blasts.pack(side='left', padx=5, pady=5, expand=1, fill='x')
+
+        self.option_f = ttk.LabelFrame(self.cf, text='Command line options')
+        self.option_f.pack(side='left', padx=5, pady=5, expand=1, fill='x')
+        self.option = ttk.Entry(self.option_f)
+        self.option.pack(side='left', padx=5, pady=5, fill='x', expand=1)
+        self.ok = ttk.Button(self.cf, text='Run', command=self._Run,
+                             state='disabled')
+        self.ok.pack(side='right')
+
         self.Validate()
 
     def Validate(self, *args):
-        db = self.dbs.get()
+        db = self.convert_dbname_to_dbpath(self.dbs.get())
         prog = self.blasts.get()
-        color = 'red'
         if (prog in ['blastn', 'tblastx', 'tblastn']) == (db in self.nin):
-            color = 'green'
+            self.ok.config(state='normal')
         elif (prog in ['blastp', 'blastx']) == (db in self.pin):
-            color = 'green'
-
-        self.dbs.component('entry').configure(bg=color)
-        self.blasts.component('entry').configure(bg=color)
-
-    def _Run(self):
-        alternative_command = self.alternative.get()
-        if len(alternative_command.strip()):
-            self.command = alternative_command.strip()
+            self.ok.config(state='normal')
         else:
-            db = self.dbs.get()
-            prog = self.blasts.get()
-            self.command = 'echo %s | nice blastall -d %s -p %s' % (self.seq, db, prog)
-
-        self.Run()
+            self.ok.config(state='disabled')
 
-    def Update(self):
-        self.notepad.update()
-        self.notepad.after(1, self.Update)
-
-    def oldRun(self):
-        self.notepad = NotePad()
-        self.notepad.menubar.configure(bg='red')
-        self.notepad.bind('<Destroy>', self.Exit)
-
-        self.Update()
+    def _Run(self):
+        """Setup options for Blast commandline (PRIVATE)."""
+        command_options = self.option.get()
+        options = ''
+        if len(command_options.strip()):
+            options = command_options.strip()
 
-        print(self.command)
-        self.pipe = os.popen(self.command)
-        while True:
-            try:
-                char = self.pipe.read(1)
-                self.notepad.insert(END, char)
-                self.notepad.update()
-            except:
-                break
-            if not char:
-                break
+        db = self.convert_dbname_to_dbpath(self.dbs.get())
+        prog = self.blast_path + self.blasts.get()
+        self.command_data = [self.seq, prog, db, options]
 
-        try:
-            self.notepad.menubar.configure(bg='green')
-        except:
-            pass
+        self.Run()
 
     def Run(self):
         self.notepad = NotePad()
         tid = self.notepad.tid
-        self.notepad.menubar.configure(bg='red')
 
         self.toplevel.destroy()
-        blastbg = xbb_blastbg.BlastDisplayer(self.command, tid)
+        blastbg = xbb_blastbg.BlastDisplayer(self.command_data, tid)
         blastbg.RunCommand()
 
-        # indicate the finished run by changing color
-        try:
-            self.notepad.menubar.configure(bg='green4')
-        except:
-            pass
-
-    def Exit(self, *args):
-
-        try:
-            self.pipe.close()
-            del(self.pipe)
-        except:
-            pass
-        self.notepad.destroy()
-
-        sys.exit(0)
-
 
 if __name__ == '__main__':
-    seq = sys.argv[1]
-    win = Tk()
+    try:
+        seq = sys.argv[1]
+    except IndexError:  # Started script without providing a sequence
+        seq = 'ATGACAAAGCTAATTATTCACTTGGTTTCAGACTCTTCTGTGCAAACTGC'
+    win = tk.Tk()
+    win.title('Dummy windows for BLAST test')
     test = BlastIt(seq)
     win.mainloop()
diff --git a/Scripts/xbbtools/xbb_blastbg.py b/Scripts/xbbtools/xbb_blastbg.py
index 35041c8..cbf8808 100644
--- a/Scripts/xbbtools/xbb_blastbg.py
+++ b/Scripts/xbbtools/xbb_blastbg.py
@@ -1,102 +1,134 @@
 #!/usr/bin/env python
+# Copyright 2000 by Thomas Sicheritz-Ponten.
+# Copyrigth 2016 by Markus Piotrowski.
+# All rights reserved.
+# This code is part of the Biopython distribution and governed by its
+# license.  Please see the LICENSE file that should have been included
+# as part of this package.
+
 # Created: Sat Dec  2 16:02:17 2000
-# Last changed: Time-stamp: <00/12/03 13:12:39 thomas>
-# Thomas.Sicheritz at molbio.uu.se, http://evolution.bmc.uu.se/~thomas
+# thomas at cbs.dtu.dk, http://www.cbs.dtu.dk/thomas
 # File: xbb_blastbg.py
 
 from __future__ import print_function
 
 import os
-import sys
-sys.path.insert(0, '.')
-
-try:
-    import Queue as queue  # Python 2
-except ImportError:
-    import queue  # Python 3
-
 import tempfile
 import threading
 
 try:
-    from Tkinter import *  # Python 2
+    import tkMessageBox as messagebox  # Python 2
 except ImportError:
-    from tkinter import *  # Python 3
+    from tkinter import messagebox  # Python 3
 
-from xbb_utils import NotePad
+from Bio.Blast.Applications import (NcbiblastnCommandline,
+                                    NcbiblastpCommandline,
+                                    NcbiblastxCommandline,
+                                    NcbitblastnCommandline,
+                                    NcbitblastxCommandline)
 
 
 class BlastDisplayer(object):
-    def __init__(self, command, text_id=None):
-        self.command = command
+    def __init__(self, command_data, text_id=None):
+        self.command_data = command_data
         self.tid = text_id
 
     def RunCommand(self):
-        self.outfile = tempfile.mktemp()
-
-        # make sure outfile exists and is empty
-        with open(self.outfile, 'w+') as fid:
-            pass
-
-        com = '%s > %s' % (self.command, self.outfile)
-
-        self.worker = BlastWorker(com)
+        self.fh_in, self.infile = tempfile.mkstemp()
+        self.fh_out, self.outfile = tempfile.mkstemp()
+
+        with open(self.infile, 'w+') as f:
+            f.write('>Name\n')
+            f.write(self.command_data[0])
+
+        blast_program = self.command_data[1]
+        database = self.command_data[2]
+
+        # Check if user supplied additional options and extract them
+        if self.command_data[3]:
+            option = self.command_data[3]
+            options = {}
+            for x in range(0, len(option.split()) - 1, 2):
+                options[option.split()[x]] = option.split()[x + 1]
+        else:
+            options = {}
+
+        args, kwargs = blast_program, {'query': self.infile, 'db': database,
+                                       'out': self.outfile}
+
+        if blast_program.endswith('blastn'):
+            blast_cmd = NcbiblastnCommandline(args, **kwargs)
+        elif blast_program.endswith('blastp'):
+            blast_cmd = NcbiblastpCommandline(args, **kwargs)
+        elif blast_program.endswith('blastx'):
+            blast_cmd = NcbiblastxCommandline(args, **kwargs)
+        elif blast_program.endswith('tblastn'):
+            blast_cmd = NcbitblastnCommandline(args, **kwargs)
+        elif blast_program.endswith('tblastx'):
+            blast_cmd = NcbitblastxCommandline(args, **kwargs)
+        else:
+            return
+
+        if options:
+            try:
+                for key in options:
+                    blast_cmd.set_parameter(key, options[key])
+            except ValueError as e:
+                messagebox.showerror('xbb tools',
+                                     'Commandline error:\n\n' + str(e))
+                self.tid.destroy()
+                return
+
+        self.worker = BlastWorker(blast_cmd)
         self.worker.start()
+
         self.UpdateResults()
 
     def UpdateResults(self):
         # open the oufile and displays new appended text
+        self.tid.insert('end', 'BLAST is running...')
+        while True:
+            self.tid.update()
+            if self.worker.finished:
+                self.tid.delete('1.0', 'end')
+                break
         with open(self.outfile) as fid:
-            size = 0
-            while True:
-                if self.worker.finished:
-                    break
-                fid.seek(size)
+            try:
                 txt = fid.read()
-                size = os.stat(self.outfile)[6]
-                try:
-                    self.tid.insert(END, txt)
-                    self.tid.update()
-                except:
-                    # text widget is detroyed, we assume the search
-                    # has been cancelled
-                    break
-
+                self.tid.insert('end', txt)
+                self.tid.update()
+            except:
+                # text widget is detroyed, we assume the search
+                # has been cancelled
+                pass
         self.Exit()
 
     def Exit(self):
         if os.path.exists(self.outfile):
+            os.close(self.fh_out)
             os.remove(self.outfile)
+        if os.path.exists(self.infile):
+            os.close(self.fh_in)
+            os.remove(self.infile)
 
-        # do I need to stop the queue ?
-        self.worker.shutdown()
         del self.worker
 
 
 class BlastWorker(threading.Thread):
 
-    def __init__(self, command):
-        self.com = command
-        q = queue.Queue(0)
-        self.queue = q
+    def __init__(self, blast_command):
+        self.com = blast_command
         threading.Thread.__init__(self)
         self.finished = 0
-        print(dir(q))
-        print(q.queue)
-
-    def shutdown(self):
-        # GRRRR How do I explicitely kill a thread ???????
-        # self.queue.put(None)
-        del self.queue
 
     def run(self):
-        print('running %s' % self.com)
-        os.system(self.com)
+        try:
+            self.com()
+        except Exception as e:
+            messagebox.showwarning('BLAST error',
+                                   'BLAST error:\n\n' + str(e))
         self.finished = 1
 
-
 if __name__ == '__main__':
-    np = NotePad()
-    com = "blastall -d nr -i test.fas -p blastx"
-    test = BlastDisplayer(com, np.tid)
-    test.RunCommand()
+    os.system('python xbb_blast.py' +
+              ' ATGACAAAGCTAATTATTCACTTGGTTTCAGACTCTTCTGTGCAAACTGC')
diff --git a/Scripts/xbbtools/xbb_help.py b/Scripts/xbbtools/xbb_help.py
index 4949e62..e50499c 100644
--- a/Scripts/xbbtools/xbb_help.py
+++ b/Scripts/xbbtools/xbb_help.py
@@ -1,30 +1,34 @@
 #!/usr/bin/env python
+# Copyright 2000 by Thomas Sicheritz-Ponten.
+# Copyrigth 2016 by Markus Piotrowski.
+# All rights reserved.
+# This code is part of the Biopython distribution and governed by its
+# license.  Please see the LICENSE file that should have been included
+# as part of this package.
+
 # Created: Tue Sep  4 09:05:16 2001
-# Last changed: Time-stamp: <01/09/04 09:42:37 thomas>
 # thomas at cbs.dtu.dk, http://www.cbs.dtu.dk/thomas
 # File: xbb_help.py
 
-try:
-    from Tkinter import *  # Python 2
-except ImportError:
-    from tkinter import *  # Python 3
-
-try:
-    import ScrolledText as scrolledtext  # Python 2
-except ImportError:
-    from tkinter import scrolledtext  # Python 3
+try:  # Python 2
+    import Tkinter as tk
+    import ScrolledText as scrolledtext
+except ImportError:  # Python 3
+    import tkinter as tk
+    from tkinter import scrolledtext
 
 
-class xbbtools_help(Toplevel):
+class xbbtools_help(tk.Toplevel):
     def __init__(self, *args):
-        Toplevel.__init__(self)
+        tk.Toplevel.__init__(self)
         self.tid = scrolledtext.ScrolledText(self)
-        self.tid.pack(fill=BOTH, expand=1)
+        self.tid.pack(fill=tk.BOTH, expand=1)
         self.Styles()
         self.Show()
 
     def Styles(self):
-        for c in ['red', 'blue', 'magenta', 'yellow', 'green', 'red4', 'green4', 'blue4']:
+        for c in ['red', 'blue', 'magenta', 'yellow', 'green', 'red4',
+                  'green4', 'blue4']:
             self.tid.tag_configure(c, foreground=c)
 
         self.tid.tag_config('underline', underline=1)
@@ -36,23 +40,25 @@ class xbbtools_help(Toplevel):
 
     def Show(self):
         t = self.tid
-        t.insert(END, "XBBtools Help\n", 'title')
-        t.insert(END, """
-Copyright 2001 by Thomas Sicheritz-Ponten.  All rights reserved.
+        t.insert(tk.END, "XBBtools Help\n", 'title')
+        t.insert(tk.END, """
+Copyright 2001 by Thomas Sicheritz-Ponten.
+Modified 2016 by Markus Piotrowski.
+All rights reserved.
 This code is part of the Biopython distribution and governed by its
 license.  Please see the LICENSE file that should have been included
 as part of this package.\n
 """, 'italic')
-        t.insert(END, 'thomas at biopython.org\n\n', 'blue')
-        t.insert(END, '* Goto Field\n', 'bold')
-        t.insert(END, '\tinserting one position moves cursor to position\n')
-        t.insert(END, "\tinserting two positions, sperated by ':' ")
-        t.insert(END, 'highlights', 'highlight')
-        t.insert(END, ' selected range\n')
-        t.insert(END, '\n')
-        t.insert(END, '* Search\n', 'bold')
-        t.insert(END, '\tambiguous dna values are\n')
-        t.insert(END, """
+        t.insert(tk.END, 'thomas at biopython.org\n\n', 'blue')
+        t.insert(tk.END, '* Goto Field\n', 'bold')
+        t.insert(tk.END, '\tinserting one position moves cursor to position\n')
+        t.insert(tk.END, "\tinserting two positions, seperated by ':' ")
+        t.insert(tk.END, 'highlights', 'highlight')
+        t.insert(tk.END, ' selected range\n')
+        t.insert(tk.END, '\n')
+        t.insert(tk.END, '* Search\n', 'bold')
+        t.insert(tk.END, '\tambiguous dna values are\n')
+        t.insert(tk.END, """
                 A: A
                 C: C
                 G: G
@@ -69,5 +75,9 @@ as part of this package.\n
                 B: CGT
                 X: GATC
                 N: GATC
-
                 """, 'small')
+        t.insert(tk.END, '\n')
+        t.insert(tk.END, '* BLAST\n', 'bold')
+        t.insert(tk.END, "\tto use the 'Blast' option, you need to have the "
+                 "BLAST binaries installed\n\tand at least one database in "
+                 "BLAST format")
diff --git a/Scripts/xbbtools/xbb_search.py b/Scripts/xbbtools/xbb_search.py
index 40d4d5e..e142f77 100644
--- a/Scripts/xbbtools/xbb_search.py
+++ b/Scripts/xbbtools/xbb_search.py
@@ -1,28 +1,32 @@
 #!/usr/bin/env python
+# Copyright 2000 by Thomas Sicheritz-Ponten.
+# Copyrigth 2016 by Markus Piotrowski.
+# All rights reserved.
+# This code is part of the Biopython distribution and governed by its
+# license.  Please see the LICENSE file that should have been included
+# as part of this package.
+
 # Created: Sun Dec  3 13:38:52 2000
-# Last changed: Time-stamp: <01/09/04 09:51:21 thomas>
 # thomas at cbs.dtu.dk, http://www.cbs.dtu.dk/thomas
 # File: xbb_search.py
 
-import os
 import re
-import sys
-
-sys.path.insert(0, '.')
 
-try:
-    from Tkinter import *  # Python 2
-except ImportError:
-    from tkinter import *  # Python 3
 
-try:
-    import tkColorChooser as colorchooser  # Python 2
-except ImportError:
-    from tkinter import colorchooser  # Python 3
+try:  # Python 2
+    import Tkinter as tk
+    import ttk
+    import tkColorChooser as colorchooser
+except ImportError:  # Python 3
+    import tkinter as tk
+    import tkinter.ttk as ttk
+    from tkinter import colorchooser
 
 from Bio.Data.IUPACData import ambiguous_dna_values
 from Bio.Seq import reverse_complement
 
+import xbb_widget
+
 
 class DNAsearch(object):
     def __init__(self):
@@ -84,7 +88,7 @@ class DNAsearch(object):
         return positions
 
 
-class XDNAsearch(Toplevel, DNAsearch):
+class XDNAsearch(tk.Toplevel, DNAsearch):
     def __init__(self, seq='', master=None, highlight=0):
         DNAsearch.__init__(self)
         self.master = master
@@ -95,47 +99,46 @@ class XDNAsearch(Toplevel, DNAsearch):
         self.cur_pos = 0
 
     def init_graphics(self):
-        Toplevel.__init__(self, self.master)
-        self.frame = Frame(self)
-        self.frame.pack(fill=BOTH, expand=1)
+        tk.Toplevel.__init__(self, self.master)
+        self.frame = ttk.Frame(self)
+        self.frame.pack(fill=tk.BOTH, expand=1)
 
-        self.search_entry = Entry(self.frame)
-        self.search_entry.pack(fill=BOTH, expand=1)
+        self.search_entry = ttk.Entry(self.frame)
+        self.search_entry.pack(fill=tk.BOTH, expand=1)
 
-        f2 = Frame(self.frame)
-        f2.pack(side=TOP, fill=BOTH, expand=1)
+        f2 = ttk.Frame(self.frame)
+        f2.pack(side=tk.TOP, fill=tk.BOTH, expand=1)
 
         f = f2
-        self.forward = Button(f, text='Search +', command=self.do_search)
-        self.forward.pack(side=LEFT)
-        self.forward = Button(f, text='Search -',
-                              command=lambda x=self.do_search: x(other_strand=1))
-        self.forward.pack(side=LEFT)
-        self.cancel = Button(f, text='Cancel', command=self.exit)
-        self.cancel.pack(side=LEFT)
+        self.forward = ttk.Button(f, text='Search +', command=self.do_search)
+        self.forward.pack(side=tk.LEFT)
+        self.forward = ttk.Button(
+            f, text='Search -',
+            command=lambda x=self.do_search: x(other_strand=1))
+        self.forward.pack(side=tk.LEFT)
+        self.cancel = ttk.Button(f, text='Cancel', command=self.exit)
+        self.cancel.pack(side=tk.LEFT)
         self.current_color = 'cyan'
-        self.colorb = Button(f, text='Color', command=self.change_color, foreground=self.current_color)
-        self.colorb.pack(side=LEFT)
+        self.colorb = ttk.Button(f, text='Color', command=self.change_color)
+        self.colorb.pack(side=tk.LEFT)
         self.config_color(self.current_color)
 
     def config_color(self, color=None):
         if not self.highlight:
             return
         if not color:
-            try:
-                color = colorchooser.askcolor()[1]
-            except Exception:  # TODO - Which exceptions?
+            color = colorchooser.askcolor()[1]
+            if not color:
                 color = 'cyan'
         self.current_color = color
         self.current_tag = 'searched_%s' % self.current_color
         self.master.tag_config(self.current_tag, background=self.current_color)
-        self.master.tag_config(self.current_tag + 'R', background=self.current_color, underline=1)
+        self.master.tag_config(self.current_tag + 'R',
+                               background=self.current_color, underline=1)
         self.colors.append(color)
 
     def change_color(self):
         self.config_color()
-        self.colorb.configure(foreground=self.current_color)
-        self.colorb.update()
 
     def get_pattern(self):
         pattern = self.search_entry.get()
@@ -153,25 +156,26 @@ class XDNAsearch(Toplevel, DNAsearch):
             if self.highlight:
                 start, stop = pos, pos + len(self.pattern)
                 if other_strand:
-                    w.tag_add(self.current_tag + 'R', '1.%d' % start, '1.%s' % stop)
+                    w.tag_add(self.current_tag + 'R', '1.%d' % start,
+                              '1.%s' % stop)
                 else:
                     w.tag_add(self.current_tag, '1.%d' % start, '1.%s' % stop)
                 w.see('1.%d' % start)
 
     def exit(self):
         for c in self.colors:
-            self.master.tag_remove('searched_%s' % c, 1.0, END)
-            self.master.tag_remove('searched_%sR' % c, 1.0, END)
+            self.master.tag_remove('searched_%s' % c, 1.0, tk.END)
+            self.master.tag_remove('searched_%sR' % c, 1.0, tk.END)
         self.destroy()
         del(self)
 
-    def showcolor(self):
-        pass
-
 
 if __name__ == '__main__':
+    win = tk.Tk()
+    xbbtools = xbb_widget.xbb_widget()
+
     seq = 'ATGGTGTGTGTGTACGATCGCCCCCCCCAGTCGATCGATGCATCGTA'
-    win = Tk()
-    xtest = XDNAsearch(seq=seq, master=win)
+    xbbtools.insert_sequence(('Test_seq', seq))
+    xbbtools.search()
 
     win.mainloop()
diff --git a/Scripts/xbbtools/xbb_translations.py b/Scripts/xbbtools/xbb_translations.py
index 705de05..21fdf45 100644
--- a/Scripts/xbbtools/xbb_translations.py
+++ b/Scripts/xbbtools/xbb_translations.py
@@ -1,36 +1,32 @@
 #!/usr/bin/env python
+# Copyright 2000 by Thomas Sicheritz-Ponten.
+# Copyright 2016 by Markus Piotrowski.
+# All rights reserved.
+# This code is part of the Biopython distribution and governed by its
+# license.  Please see the LICENSE file that should have been included
+# as part of this package.
+
 # Created: Wed Jun 21 15:53:22 2000
-# Last changed: Time-stamp: <00/12/02 15:56:27 thomas>
 # thomas at cbs.dtu.dk, http://www.cbs.dtu.dk/thomas
 # File: xbb_translations.py
 
 from __future__ import print_function
 
-import sys
 import time
 
-sys.path.insert(0, '.')
-
-try:
-    from Tkinter import *  # Python 2
-except ImportError:
-    from tkinter import *  # Python 3
-
-
-from Bio.Seq import reverse_complement, translate
+from Bio.Seq import Seq, reverse_complement, translate
 from Bio.SeqUtils import GC
 
 
 class xbb_translations(object):
     def __init__(self):
-        ""
+        pass
 
     def frame1(self, seq, translation_table=1):
         return translate(seq, table=translation_table)
 
     def complement(self, seq):
-        # TODO - use Seq methods instead of this hack:?
-        return reverse_complement(seq)[::-1]
+        return Seq.complement(Seq(seq))
 
     def reverse(self, seq):
         return seq[::-1]
@@ -39,14 +35,9 @@ class xbb_translations(object):
         return reverse_complement(seq)
 
     def frame(self, seq, frame, translation_table=1):
-        if not ((-3 <= frame <= -1) or (1 <= frame <= 3)):
-            frame = 1
-        if frame != 1:
-            raise NotImplementedError
-            # TODO - Support the frame argument
-            # The old code didn't, but I can guess from
-            # the code the expected 1,2,3 for the forward
-            # strands and -1,-2,-3 for the reverse.
+        if frame < 0:
+            seq = reverse_complement(seq)
+        seq = seq[(abs(frame) - 1):]
         return translate(seq, table=translation_table)
 
     def header_nice(self, txt, seq):
@@ -62,29 +53,42 @@ class xbb_translations(object):
         for nt in ['a', 't', 'g', 'c']:
             res += '%s:%d ' % (nt, seq.count(nt.upper()))
 
-        res += '\nSequence: %s, %d nt, %0.2f %%GC\n' % (short.lower(), length, self.gc(seq))
+        res += '\nSequence: %s, %d nt, %0.2f %%GC\n' % (short.lower(),
+                                                        length, self.gc(seq))
         res += '\n\n'
         return res
 
     def frame_nice(self, seq, frame, translation_table=1):
         length = len(seq)
         protein = self.frame(seq, frame, translation_table)
-        res = self.header_nice('Plus one frame translation', seq)
+        protein_length = len(protein)
+        protein = '  '.join([aa for aa in protein])
+        protein += (((length - (abs(frame) - 1)) % 3) + 2) * ' '
+        if frame < 0:
+            protein = protein[::-1]
+        res = self.header_nice('Frame {} translation'.format(frame), seq)
         for i in range(0, length, 60):
             subseq = seq[i:i + 60]
             p = i // 3
-            res += '%d/%d\n' % (i + 1, i // 3 + 1)
-            res += '  '.join(protein[p:p + 20]) + '\n'
-            # seq
-            res += subseq.lower() + '%5d %%\n' % int(self.gc(subseq))
-
+            if frame > 0:
+                res += '%d/%d\n' % (i + 1, p + 1)
+                res += ' ' * (frame - 1) + protein[i:i + 60] + '\n'
+                # seq
+                res += (subseq.lower() + '%5d %%\n' % int(self.gc(subseq)) +
+                        '\n')
+            else:
+                res += '%d/%d\n' % (i + 1, protein_length -
+                                    len(protein[:i].split()))
+                # seq
+                res += subseq.lower() + '%5d %%\n' % int(self.gc(subseq))
+                res += protein[i:i + 60] + '\n\n'
         return res
 
     def gc(self, seq):
         """Returns a float between 0 and 100."""
         return GC(seq)
 
-    def gcframe(self, seq, translation_table=1):
+    def gcframe(self, seq, translation_table=1, direction='both'):
         # always use uppercase nt-sequence !!
         comp = self.complement(seq)
         anti = self.reverse(comp)
@@ -92,7 +96,8 @@ class xbb_translations(object):
         frames = {}
         for i in range(0, 3):
             frames[i + 1] = self.frame1(seq[i:], translation_table)
-            frames[-(i + 1)] = self.reverse(self.frame1(anti[i:], translation_table))
+            frames[-(i + 1)] = self.reverse(self.frame1(anti[i:],
+                                                        translation_table))
 
         res = self.header_nice('GCFrame', seq)
 
@@ -100,32 +105,40 @@ class xbb_translations(object):
             subseq = seq[i:i + 60]
             csubseq = comp[i:i + 60]
             p = i // 3
-            # + frames
-            res += '%d/%d\n' % (i + 1, i // 3 + 1)
-            res += '  ' + '  '.join(frames[3][p:p + 20]) + '\n'
-            res += ' ' + '  '.join(frames[2][p:p + 20]) + '\n'
-            res += '  '.join(frames[1][p:p + 20]) + '\n'
+            if direction in ('plus', 'both'):
+                # + frames
+                res += '%d/%d\n' % (i + 1, i // 3 + 1)
+                res += '  ' + '  '.join(frames[3][p:p + 20]) + '\n'
+                res += ' ' + '  '.join(frames[2][p:p + 20]) + '\n'
+                res += '  '.join(frames[1][p:p + 20]) + '\n'
             # seq
             res += subseq.lower() + '%5d %%\n' % int(self.gc(subseq))
             res += csubseq.lower() + '\n'
-            # - frames
-            res += '  '.join(frames[-2][p:p + 20]) + ' \n'
-            res += ' ' + '  '.join(frames[-1][p:p + 20]) + '\n'
-            res += '  ' + '  '.join(frames[-3][p:p + 20]) + '\n\n'
+            if direction == 'plus':
+                res += '\n'
+            if direction in ('minus', 'both'):
+                # - frames
+                res += '  '.join(frames[-2][p:p + 20]) + ' \n'
+                res += ' ' + '  '.join(frames[-1][p:p + 20]) + '\n'
+                res += '  ' + '  '.join(frames[-3][p:p + 20]) + '\n\n'
 
         return res
 
 if __name__ == '__main__':
-    # s = 'GCCCTTTCTTATTAGTGCTACCGCTAATAGGTAAATATGAAAAACCTTTG'
-    s = 'ATTCCGGTTGATCCTGCCGGACCCGACCGCTATCGGGGTAGGGATAAGCCATGGGAGTCTTACACTCCCGGGTAAGGGAGTGTGGCGGACGGCTGAGTAACACGTGGCTAACCTACCCTCGGGACGGGGATAACCCCGGGAAACTGGGGATAATCCCCGATAGGGAAGGAGTCCTGGAATGGTTCCTTCCCTAAAGGGCTATAGGCTATTTCCCGTTTGTAGCCGCCCGAGGATGGGGCTACGGCCCATCAGGCTGTCGGTGGGGTAAAGGCCCACCGAACCTATAACGGGTAGGGGCCGTGGAAGCGGGAGCCTCCAGTTGGGCACTGAGACAAGGGCCCAGGCCCTACGGGGCGCACCAGGCGCGAAACGTCCCCAATGCGCGAAAGCGTGAGGGCGCTACCCCGAGTGCCTCCGCAAGGAGGCTTTTCCCCGCTCTAAAAAGGCGGGGGAATAAGCGGGGGGCAAGTCTGGTGTCAGCCG [...]
+    s = 'ATTCCGGTTGATCCTGCCGGACCCGACCGCTATCGGGGTAGGGATAAGCCATGGGAGTCT' \
+        'TACACTCCCGGGTAAGGGAGTGTGGCGGACGGCTGAGTAACACGTGGCTAACCTACCCTC' \
+        'GGGACGGGGATAACCCCGGGAAACTGGGGATAATCCCCGATAGGGAAGGAGTCCTGGAAT' \
+        'GGTTCCTTCCCTAAAGGGCTATAGGCTATTTCCCGTTTGTAGCCGCCCGAGGATGGGGCT' \
+        'ACGGCCCATCAGGCTGTCGGTGGGGTAAAGGCCCACCGAACCTATAACGGGTAGGGGCCG' \
+        'TGGAAGCGGGAGCCTCCAGTTGGGCACTGAGACAAGGGCCCAGGCCCTACGGGGCGCACC' \
+        'AGGCGCGAAACGTCCCCAATGCGCGAAAGCGTGAGGGCGCTACCCCGAGTGCCTCCGCAA' \
+        'GGAGGCTTTTCCCCGCTCTAAAAAGGCGGGGGAATAAGCGGGGGGCAAGTCTGGTGTCAG' \
+        'CCGCCGCGGTAATACCAGCTCCGCGAGTGGTCGGGGTGATTACTGGGCCTAAAGCGCCTG' \
+        'TAGCCGGCCCACCAAGTCGCCCCTTAAAGTCCCCGGCTCAACCGGGGAACTGGGGGCGAT' \
+        'ACTGGTGGGCTAGGGGGCGGGAGAGGCGGGGGGTACTCCCGGAGTAGGGGCGAAATCCTT' \
+        'AGATACCGGGAGGACCACCAGTGGCGGAAGCGCCCCGCTA'
 
     test = xbb_translations()
-#    for i in range(0, 4):
-#        print(test.frame1(s[i:]))
-    # print(s)
-    # print(test.complement(s))
+
     print('============================================================')
     print(test.gcframe(s))
-
-#    for i in Translate.unambiguous_dna_by_id:
-#        print(Translate.unambiguous_dna_by_id[i].table.names[0])
diff --git a/Scripts/xbbtools/xbb_utils.py b/Scripts/xbbtools/xbb_utils.py
index 34834c5..be647af 100644
--- a/Scripts/xbbtools/xbb_utils.py
+++ b/Scripts/xbbtools/xbb_utils.py
@@ -1,40 +1,41 @@
 #!/usr/bin/env python
+# Copyright 2000 by Thomas Sicheritz-Ponten.
+# Copyright 2016 by Markus Piotrowski.
+# All rights reserved.
+# This code is part of the Biopython distribution and governed by its
+# license.  Please see the LICENSE file that should have been included
+# as part of this package.
+
 # Created: Thu Jul 13 12:09:58 2000
-# Last changed: Time-stamp: <00/12/03 12:10:58 thomas>
 # thomas at cbs.dtu.dk, http://www.cbs.dtu.dk/thomas
 # File: xbb_utils.py
 
-import sys
-
-sys.path.insert(0, '.')
-
-try:
-    from Tkinter import *  # Python 2
-except ImportError:
-    from tkinter import *  # Python 3
-
-try:
-    import tkFileDialog as filedialog  # Python 2
-except ImportError:
-    from tkinter import filedialog  # Python 3
+try:  # Python 2
+    import Tkinter as tk
+    import ttk
+    import tkFileDialog as filedialog
+except ImportError:  # Python 3
+    import tkinter as tk
+    import tkinter.ttk as ttk
+    from tkinter import filedialog
 
 
-class NotePad(Toplevel):
+class NotePad(tk.Toplevel):
     def __init__(self, master=None):
-        Toplevel.__init__(self, master)
-        self.menubar = Menu(self)
-        self.filemenu = Menu(self.menubar)
+        tk.Toplevel.__init__(self, master)
+        self.menubar = tk.Menu(self)
+        self.filemenu = tk.Menu(self.menubar)
         self.filemenu.add_command(label="Save", command=self.save)
         self.filemenu.add_separator()
         self.filemenu.add_command(label="Dismiss", command=self.destroy)
 
         self.menubar.add_cascade(label="File", menu=self.filemenu)
         self.configure(menu=self.menubar)
-        self.yscroll = Scrollbar(self, orient=VERTICAL)
-        self.tid = Text(self, yscrollcommand=self.yscroll.set)
+        self.yscroll = ttk.Scrollbar(self, orient='vertical')
+        self.tid = tk.Text(self, width=88, yscrollcommand=self.yscroll.set)
         self.yscroll.configure(command=self.tid.yview)
-        self.tid.pack(side=LEFT, fill=BOTH, expand=1)
-        self.yscroll.pack(side=RIGHT, fill=Y)
+        self.tid.pack(side='left', fill='both', expand=1)
+        self.yscroll.pack(side='right', fill='y')
 
     def text_id(self):
         return self.tid
@@ -43,8 +44,7 @@ class NotePad(Toplevel):
         self.tid.insert(start, txt)
 
     def save(self):
-        fd = filedialog.SaveFileDialog(self)
-        file = fd.go(key="test")
+        file = filedialog.asksaveasfilename()
         if file:
             with open(file, 'w') as fid:
-                fid.write(self.tid.get(0.0, END))
+                fid.write(self.tid.get(0.0, 'end'))
diff --git a/Scripts/xbbtools/xbb_widget.py b/Scripts/xbbtools/xbb_widget.py
index 200f867..334878b 100644
--- a/Scripts/xbbtools/xbb_widget.py
+++ b/Scripts/xbbtools/xbb_widget.py
@@ -1,32 +1,31 @@
 #!/usr/bin/env python
-# Created: Wed Jun 21 10:28:14 2000
-# Last changed: Time-stamp: <01/09/04 09:42:06 thomas>
-# thomas at cbs.dtu.dk, http://www.cbs.dtu.dk/thomas
-# File: xbb_widget.py
-
-# Copyright 2000 by Thomas Sicheritz-Ponten.  All rights reserved.
+# Copyright 2000 by Thomas Sicheritz-Ponten.
+# Copyright 2016 by Markus Piotrowski.
+# All rights reserved.
 # This code is part of the Biopython distribution and governed by its
 # license.  Please see the LICENSE file that should have been included
 # as part of this package.
 
+# Created: Wed Jun 21 10:28:14 2000
+# thomas at cbs.dtu.dk, http://www.cbs.dtu.dk/thomas
+# File: xbb_widget.py
+
 from __future__ import print_function
 
 import re
 import sys
 import time
 
-try:
-    from Tkinter import *  # Python 2
-except ImportError:
-    from tkinter import *  # Python 3
-
-try:
-    import tkFileDialog as filedialog  # Python 2
-except ImportError:
-    from tkinter import filedialog  # Python 3
+try:  # Python 2
+    import Tkinter as tk
+    import ttk
+    import tkFileDialog as filedialog
+except ImportError:  # Python 3
+    import tkinter as tk
+    import tkinter.ttk as ttk
+    from tkinter import filedialog
 
-sys.path.insert(0, '.')
-from xbb_utils import *
+from xbb_utils import NotePad
 from xbb_translations import xbb_translations
 from xbb_blast import BlastIt
 from xbb_search import XDNAsearch
@@ -41,25 +40,25 @@ class xbb_widget(object):
         self.parent = parent
 
         self.init_variables()
-        self.init_colors()
+
         # master frame
-        self.main_frame = Frame(parent)
+        self.main_frame = ttk.Frame(parent)
         if not parent:
-            self.init_optionsdb()
             self.parent = self.main_frame.master
+            self.parent.option_add('*tearOff', 0)
 
-        self.main_frame.pack(fill=BOTH, expand=1)
+        self.main_frame.pack(fill='both', expand=1)
 
         # sequence info (GC%, positins etc.)
-        self.info_frame = Frame(self.main_frame)
-        self.info_frame.pack(fill=BOTH, expand=1)
+        self.info_frame = ttk.Frame(self.main_frame)
+        self.info_frame.pack(fill='both', expand=1)
 
         self.create_menu(self.info_frame)
         self.create_seqinfo(self.info_frame)
 
         # sequence field and fast buttons
-        self.seq_frame = Frame(self.main_frame)
-        self.seq_frame.pack(fill=BOTH, expand=1)
+        self.seq_frame = ttk.Frame(self.main_frame)
+        self.seq_frame.pack(fill='both', expand=1)
 
         self.create_buttons(self.seq_frame)
         self.create_seqfield(self.seq_frame)
@@ -74,72 +73,18 @@ class xbb_widget(object):
             self.translation_tables[table.names[0]] = i
         self.translator = xbb_translations()
 
-    def init_colors(self):
-        self.colorsbg = {'frame': 'brown',
-                         'canvas': 'brown',
-                         'button': 'darkgreen',
-                         'radiobutton': 'darkgrey',
-                         'checkbutton': 'darkgrey',
-                         'label': 'dimgrey',
-                         'text': 'bisque1',
-                         'entry': 'bisque1',
-                         'menu': 'darkgreen',
-                         'menubutton': 'darkgreen',
-                         'seqinfo': 'dimgrey'}
-        self.colorsfg = {'button': 'lightblue',
-                         'radiobutton': 'lightblue',
-                         'checkbutton': 'lightblue',
-                         'label': 'green3',
-                         'text': 'black',
-                         'entry': 'black',
-                         'menu': 'black',
-                         'menubutton': 'lightblue'}
-        self.colorsNT = {'A': 'green',
-                         'C': 'lightblue',
-                         'G': 'orange',
-                         'T': 'tomato'
-                         }
-
-        self.colorsPMWbg = {
-            'ComboBox': 'darkgreen',
-            'ComboBox.Label': 'darkgreen',
-            }
-
-        self.colorsPMWfg = {
-            'ComboBox.Label': 'lightblue',
-            }
-
-    def init_optionsdb(self):
-        # does anybody know a better way of defining colors ?
-        # how would one implement Tk's -class ?
-        tk = self.main_frame.master
-        for k, v in self.colorsbg.items():
-            name = '*' + k[0].upper() + k[1:] + '.background'
-            tk.option_add(name, v)
-
-        for k, v in self.colorsfg.items():
-            name = '*' + k[0].upper() + k[1:] + '.foreground'
-            tk.option_add(name, v)
-
-        for k, v in self.colorsPMWbg.items():
-            name = '*' + k[0].upper() + k[1:] + '.background'
-            tk.option_add(name, v)
-
-        for k, v in self.colorsPMWfg.items():
-            name = '*' + k[0].upper() + k[1:] + '.foreground'
-            tk.option_add(name, v)
-
     def create_menu(self, parent):
-        self.menubar = Menu(self.main_frame)
+        self.menubar = tk.Menu(self.main_frame)
 
         # File menu
-        self.file_menu = Menu(self.menubar)
+        self.file_menu = tk.Menu(self.menubar)
         menu = self.file_menu
+        menu.add_command(label='Open', command=self.open)
         menu.add_command(label='Exit', command=self.exit)
         self.menubar.add_cascade(label="File", menu=self.file_menu)
 
         # Edit menu
-        self.edit_menu = Menu(self.menubar)
+        self.edit_menu = tk.Menu(self.menubar)
         menu = self.edit_menu
         menu.add_command(label='Complement', command=self.complement)
         menu.add_command(label='Antiparallel', command=self.antiparallel)
@@ -149,109 +94,134 @@ class xbb_widget(object):
         self.menubar.add_cascade(label="Edit", menu=self.edit_menu)
 
         # Translation menu
-        self.translation_menu = Menu(self.menubar)
+        self.translation_menu = tk.Menu(self.menubar)
+
+        self.gencode_menu = tk.Menu(self.translation_menu)
+        self.frame_menu = tk.Menu(self.translation_menu)
+
         menu = self.translation_menu
-        menu.add_command(label='+1 Frame', command=self.translate)
-        menu.add_command(label='6 Frames', command=self.gcframe)
+        menu.add_cascade(label="Genetic Codes", menu=self.gencode_menu)
+        menu.add_cascade(label='Frame', menu=self.frame_menu)
+        menu.add_separator()
+        menu.add_command(label='Single frame translation',
+                         command=self.translate)
+        menu.add_command(label='Three frame translation (+)',
+                         command=lambda: self.gcframe(direction='plus'))
+        menu.add_command(label='Three frame translation (-)',
+                         command=lambda: self.gcframe(direction='minus'))
+        menu.add_command(label='Six frame translation', command=self.gcframe)
         menu.add_command(label='Extract to FASTA', command=self.extract)
 
-        self.current_codon_table = StringVar()
+        # Frames submenu
+        self.frame_int = tk.IntVar()
+        menu = self.frame_menu
+        menu.add_radiobutton(label='+1', variable=self.frame_int, value=1)
+        menu.add_radiobutton(label='+2', variable=self.frame_int, value=2)
+        menu.add_radiobutton(label='+3', variable=self.frame_int, value=3)
+        menu.add_radiobutton(label='-1', variable=self.frame_int, value=-1)
+        menu.add_radiobutton(label='-2', variable=self.frame_int, value=-2)
+        menu.add_radiobutton(label='-3', variable=self.frame_int, value=-3)
+        self.frame_int.set(1)
+
+        # Codon tables submenu
+        self.current_codon_table = tk.StringVar()
         self.current_codon_table.set('Standard')
         self.current_codon_table_id = 1
 
-        keys = self.translation_tables.keys()
+        keys = list(self.translation_tables.keys())
         keys.remove('Standard')
         keys.sort()
         keys = ['Standard'] + keys
 
-        self.gencode_menu = Menu(self.translation_menu)
         menu = self.gencode_menu
         for table in keys:
-            menu.add_radiobutton(label=table, command=self.set_codon_table, variable=self.current_codon_table)
-        self.translation_menu.add_cascade(label="Genetic Codes", menu=self.gencode_menu)
+            menu.add_radiobutton(label=table,
+                                 command=self.set_codon_table,
+                                 variable=self.current_codon_table)
 
-        self.menubar.add_cascade(label="Translations", menu=self.translation_menu)
+        self.menubar.add_cascade(label="Translations",
+                                 menu=self.translation_menu)
 
         # Tools menu
-        self.tools_menu = Menu(self.menubar)
+        self.tools_menu = tk.Menu(self.menubar)
         menu = self.tools_menu
         menu.add_command(label='Blast', command=self.blast)
         menu.add_command(label='Stats', command=self.statistics)
         self.menubar.add_cascade(label="Tools", menu=self.tools_menu)
 
         # Help menu
-        self.help_menu = Menu(self.menubar, name='help')
+        self.help_menu = tk.Menu(self.menubar)
         menu = self.help_menu
-        menu.add_command(label='Help', command=xbbtools_help)
+        menu.add_command(label='Help', command=lambda: xbbtools_help())
         self.menubar.add_cascade(label="Help", menu=self.help_menu)
 
         self.parent.config(menu=self.menubar)
 
     def set_codon_table(self):
-        self.current_codon_table_id = self.translation_tables[self.current_codon_table.get()]
+        self.current_codon_table_id = \
+            self.translation_tables[self.current_codon_table.get()]
 
     def exit(self, *args):
         # depending on if this widget is the first created or a child widget
         if self.is_a_master:
-            sys.exit(0)
+            sys.exit()
         else:
             self.main_frame.destroy()
 
     def create_seqinfo(self, parent):
         # all the sequence information in the top labels
-        self.seq_info1 = Frame(parent, relief=RIDGE,
-                               borderwidth=5, height=30)
-        self.seq_info1.pack(fill=BOTH, expand=1, side=TOP)
+        self.seq_info1 = ttk.Frame(parent, relief='ridge',
+                                   borderwidth=5, height=30)
+        self.seq_info1.pack(fill='both', expand=1, side='top')
 
         self.position_ids = {}
         d = self.position_ids
-        d['id'] = Label(self.seq_info1, width=10)
-        d['from_id'] = Label(self.seq_info1, width=10)
-        d['to_id'] = Label(self.seq_info1, width=10)
-        d['length_id'] = Label(self.seq_info1, width=10)
-        d['label'] = Label(self.seq_info1, width=10)
+        d['id'] = ttk.Label(self.seq_info1, width=10)
+        d['from_id'] = ttk.Label(self.seq_info1, width=10)
+        d['to_id'] = ttk.Label(self.seq_info1, width=10)
+        d['length_id'] = ttk.Label(self.seq_info1, width=10)
+        d['label'] = ttk.Label(self.seq_info1, width=10)
         for i in ['id', 'from_id', 'to_id', 'length_id', 'label']:
-            d[i].pack(side=LEFT, fill=BOTH, expand=1)
+            d[i].pack(side='left', fill='both', expand=1)
 
-        self.seq_info2 = Frame(parent, relief=RIDGE,
-                               borderwidth=5, height=30)
-        self.seq_info2.pack(fill=BOTH, expand=1, side=TOP)
+        self.seq_info2 = ttk.Frame(parent, relief='ridge',
+                                   borderwidth=5, height=30)
+        self.seq_info2.pack(fill='both', expand=1, side='top')
         self.statistics_ids = {}
         d = self.statistics_ids
-        d['length_id'] = Label(self.seq_info2, width=10)
-        d['length_id'].pack(side=LEFT, fill=BOTH, expand=1)
+        d['length_id'] = ttk.Label(self.seq_info2, width=10)
+        d['length_id'].pack(side='left', fill='both', expand=1)
         for nt in ['A', 'C', 'G', 'T']:
-            d[nt] = Label(self.seq_info2, width=10, fg=self.colorsNT[nt])
-            d[nt].pack(side=LEFT, fill=BOTH, expand=1)
+            d[nt] = ttk.Label(self.seq_info2, width=10)
+            d[nt].pack(side='left', fill='both', expand=1)
 
     def create_buttons(self, parent):
-        self.button_frame = Frame(parent)
-        self.button_frame.pack(fill=Y, side=LEFT)
+        self.button_frame = ttk.Frame(parent)
+        self.button_frame.pack(fill='y', side='left')
         self.buttons = {}
         for text, func in [('Open', self.open),
                            ('Export', self.export),
                            ('GC Frame', self.gcframe),
                            ('Blast', self.blast),
                            ('Exit', self.exit)]:
-            b_id = Button(self.button_frame, text=text,
-                          command=func, width=7)
-            b_id.pack(side=TOP, pady=5, padx=10)
+            b_id = ttk.Button(self.button_frame, text=text,
+                              command=func, width=7)
+            b_id.pack(side='top', pady=5, padx=10)
             self.buttons[text] = b_id
 
-        f = Frame(self.button_frame)
-        l = Label(f, text='Goto:', bg=self.colorsbg['frame'], fg=self.colorsfg['button'])
-        l.pack(side=LEFT)
+        f = ttk.Frame(self.button_frame)
+        l = ttk.Label(f, text='Goto:')
+        l.pack(side='left')
         l.bind('<Button-1>', self.goto)
 
-        self.goto_entry = Entry(f, width=5)
-        self.goto_entry.pack(side=RIGHT, pady=5, padx=4)
+        self.goto_entry = ttk.Entry(f, width=5)
+        self.goto_entry.pack(side='right', pady=5, padx=4)
         self.goto_entry.bind('<Return>', self.goto)
-        f.pack(side=BOTTOM)
+        f.pack(side='bottom')
 
     def create_seqfield(self, parent):
-        self.sequence_id = Text(parent, wrap='char',
-                                width=self.seqwidth)
-        self.sequence_id.pack(fill=BOTH, expand=1, side=RIGHT)
+        self.sequence_id = tk.Text(parent, wrap='char', width=self.seqwidth)
+        self.sequence_id.pack(fill='both', expand=1, side='right')
 
     def create_bindings(self):
         self.sequence_id.bind('<Motion>', self.position)
@@ -262,12 +232,11 @@ class xbb_widget(object):
         self.sequence_id.bind('<Double-Button-1>', self.select_all)
 
     def zero(self, event):
-        p = self.position_ids
         for i in ['from_id', 'to_id', 'length_id']:
             self.position_ids[i].configure(text='')
 
     def get_length(self):
-        self.sequence_length = len(self.sequence_id.get(1.0, END))
+        self.sequence_length = len(self.sequence_id.get(1.0, 'end'))
         return self.sequence_length
 
     def select_all(self, event):
@@ -281,32 +250,25 @@ class xbb_widget(object):
         self.count_selection(None)
 
     def get_selection_or_sequence(self):
-        w = self.sequence_id
         seq = self.get_selection()
         if not len(seq):
-            seq = self.sequence_id.get(1.0, END)
+            seq = self.sequence_id.get(1.0, 'end')
 
         seq = re.sub('[^A-Z]', '', seq)
-        return seq
+        return str(seq)
 
     def get_selection(self):
         w = self.sequence_id
-        # print(w.selection_own())
-        # w.selection_own()
         try:
             return w.selection_get()
-            # return string.upper(w.get(sel.first, sel.last))
-        except Exception:  # TODO - Which exceptions?
+        except tk.TclError:  # Nothing is selected
             return ''
 
     def get_self_selection(self):
         w = self.sequence_id
-        # w.selection_own()
         try:
             return w.selection_get()
-            # return string.upper(w.get(sel.first, sel.last))
-            # return string.upper(w.selection_own_get())
-        except Exception:  # TODO - Which exceptions?
+        except tk.TclError:  # Nothing is selected
             return ''
 
     def count_selection(self, event):
@@ -321,12 +283,13 @@ class xbb_widget(object):
             self.position_ids['to_id'].configure(text='Stop:%d' % b)
             self.position_ids['length_id'].configure(text='%d nt' % length)
 
-            self.statistics_ids['length_id'].configure(text='Length=%d' % length)
+            self.statistics_ids['length_id'].configure(text='Length=%d'
+                                                       % length)
             seq = self.get_self_selection()
             for nt in ['A', 'C', 'G', 'T']:
                 n = seq.count(nt)
                 self.statistics_ids[nt].configure(text='%s=%d' % (nt, n))
-        except Exception:  # TODO - Which exceptions?
+        except tk.TclError:  # Problem with tag 'sel' when actually selecting
             pass
 
     def position(self, event):
@@ -346,17 +309,17 @@ class xbb_widget(object):
 
     def insert_sequence(self, name_sequence):
         (name, sequence) = name_sequence
-        self.sequence_id.delete(0.0, END)
-        self.sequence_id.insert(END, sequence.upper())
+        self.sequence_id.delete(0.0, 'end')
+        self.sequence_id.insert('end', sequence.upper())
         self.fix_sequence()
         self.update_label(name)
 
     def fix_sequence(self):
-        seq = self.sequence_id.get(1.0, END)
+        seq = str(self.sequence_id.get(1.0, 'end'))
         seq = seq.upper()
         seq = re.sub('[^A-Z]', '', seq)
-        self.sequence_id.delete(0.0, END)
-        self.sequence_id.insert(END, seq)
+        self.sequence_id.delete(0.0, 'end')
+        self.sequence_id.insert('end', seq)
 
     def update_label(self, header):
         name = header.split(' ')[0]
@@ -364,35 +327,45 @@ class xbb_widget(object):
         self.position_ids['label'].configure(text=name)
 
     def export(self):
-        seq = self.get_self_selection()
-        print("%s %i" % (seq, len(seq)))
+        """Export selected text to new text window."""
+        seq = self.get_selection_or_sequence()
+        if not seq:
+            return
+        np = NotePad()
+        tid = np.text_id()
+        tid.insert('end', seq)
 
-    def gcframe(self):
+    def gcframe(self, direction='both'):
         seq = self.get_selection_or_sequence()
         if not seq:
             return
         np = NotePad()
         tid = np.text_id()
-        tid.insert(END, self.translator.gcframe(seq, self.current_codon_table_id))
+        tid.insert('end',
+                   self.translator.gcframe(seq, self.current_codon_table_id,
+                                           direction))
 
-    def translate(self, frame=1):
+    def translate(self):
         seq = self.get_selection_or_sequence()
+        frame = self.frame_int.get()
         if not seq:
             return
         np = NotePad()
         tid = np.text_id()
-        tid.insert(END, self.translator.frame_nice(seq, frame, self.current_codon_table_id))
+        tid.insert('end',
+                   self.translator.frame_nice(seq, frame,
+                                              self.current_codon_table_id))
 
-    def extract(self, frame=1):
+    def extract(self):
         seq = self.get_selection_or_sequence()
+        frame = self.frame_int.get()
         if not seq:
             return
         aa_seq = self.translator.frame(seq, frame, self.current_codon_table_id)
-        print('>%s<' % aa_seq)
         aa_seq = re.sub('(.{50})', '\\1\n', str(aa_seq))
         np = NotePad()
         tid = np.text_id()
-        tid.insert(END, '>frame%d\n%s' % (frame, aa_seq))
+        tid.insert('end', '>frame%d\n%s' % (frame, aa_seq))
 
     def statistics(self):
         seq = self.get_selection_or_sequence()
@@ -410,15 +383,11 @@ class xbb_widget(object):
         np = NotePad()
         tid = np.text_id()
 
-        tid.insert(END, """%s
-
-Length = %d
-A=%d C=%d G=%d T=%d other=%d
-GC=%f
-
-""" % (time.strftime('%y %b %d, %X\n', time.localtime(time.time())),
-               len(seq), aa['A'], aa['C'], aa['G'], aa['T'], aa['N'], GC)
-                   )
+        tid.insert('end', "%s\n\n" %
+                   (time.strftime('%y %b %d, %X\n',
+                                  time.localtime(time.time()))) +
+                   "Length = %d\nA=%d C=%d G=%d T=%d other=%d\nGC=%f\n\n" %
+                   (len(seq), aa['A'], aa['C'], aa['G'], aa['T'], aa['N'], GC))
 
     def blast(self):
         seq = self.get_selection_or_sequence()
@@ -428,9 +397,9 @@ GC=%f
         w = self.sequence_id
         w.selection_own()
         try:
-            start, stop = w.tag_ranges(SEL)
-        except Exception:  # TODO - Which exceptions?
-            start, stop = 1.0, self.sequence_id.index(END)
+            start, stop = w.tag_ranges('sel')
+        except ValueError:  # Nothing selected
+            start, stop = 1.0, self.sequence_id.index('end')
 
         seq = w.get(start, stop)
         seq = list(re.sub('[^A-Z]', '', seq))
@@ -439,50 +408,50 @@ GC=%f
 
         w.delete(start, stop)
         w.insert(start, seq)
-        w.tag_remove(SEL, 1.0, start)
-        w.tag_add(SEL, start, stop)
-        w.tag_remove(SEL, stop, END)
+        w.tag_remove('sel', 1.0, start)
+        w.tag_add('sel', start, stop)
+        w.tag_remove('sel', stop, 'end')
 
     def complement(self):
         w = self.sequence_id
         w.selection_own()
         try:
-            start, stop = w.tag_ranges(SEL)
-        except Exception:  # Which exceptions?
-            start, stop = 1.0, self.sequence_id.index(END)
+            start, stop = w.tag_ranges('sel')
+        except ValueError:  # Nothing selected
+            start, stop = 1.0, self.sequence_id.index('end')
+
+        seq = str(w.get(start, stop))
 
-        seq = w.get(start, stop)
         seq = re.sub('[^A-Z]', '', seq)
 
-        # print('seq >%s<' % seq)
         complementary = self.translator.complement(seq)
         w.delete(start, stop)
         w.insert(start, complementary)
-        w.tag_remove(SEL, 1.0, start)
-        w.tag_add(SEL, start, stop)
-        w.tag_remove(SEL, stop, END)
+        w.tag_remove('sel', 1.0, start)
+        w.tag_add('sel', start, stop)
+        w.tag_remove('sel', stop, 'end')
 
     def antiparallel(self):
         w = self.sequence_id
         w.selection_own()
         try:
-            start, stop = w.tag_ranges(SEL)
-        except Exception:  # TODO - Which exceptions?
-            start, stop = 1.0, self.sequence_id.index(END)
+            start, stop = w.tag_ranges('sel')
+        except tk.TclError:
+            start, stop = 1.0, self.sequence_id.index('end')
 
-        seq = w.get(start, stop)
+        seq = str(w.get(start, stop))
         seq = re.sub('[^A-Z]', '', seq)
 
         antip = self.translator.antiparallel(seq)
         w.delete(start, stop)
         w.insert(start, antip)
-        w.tag_remove(SEL, 1.0, start)
-        w.tag_add(SEL, start, stop)
-        w.tag_remove(SEL, stop, END)
+        w.tag_remove('sel', 1.0, start)
+        w.tag_add('sel', start, stop)
+        w.tag_remove('sel', stop, 'end')
 
     def search(self):
         seq = self.get_selection_or_sequence()
-        searcher = XDNAsearch(seq, master=self.sequence_id, highlight=1)
+        XDNAsearch(seq, master=self.sequence_id, highlight=1)
 
     def goto(self, *args):
         pos = self.goto_entry.get()
@@ -495,11 +464,11 @@ GC=%f
                 stop = int(stop)
                 self.mark(start, stop)
                 return
-            except Exception:  # TODO - which exceptions?
+            except ValueError:
                 import traceback
                 traceback.print_exc()
 
-                self.goto_entry.delete(0, END)
+                self.goto_entry.delete(0, 'end')
                 return
 
         self.sequence_id.focus()
@@ -508,9 +477,10 @@ GC=%f
     def mark(self, start, stop):
         self.sequence_id.focus()
         self.sequence_id.mark_set('insert', '1.%d' % start)
-        self.sequence_id.tag_add(SEL, '1.%d' % start, '1.%d' % stop)
+        self.sequence_id.tag_add('sel', '1.%d' % start, '1.%d' % stop)
 
 if __name__ == '__main__':
+    win = tk.Tk()
     xbbtools = xbb_widget()
-    xbbtools.main_frame.option_add('*frame.background', 'dimgrey')
     xbbtools.open('test.fas')
+    win.mainloop()
diff --git a/Scripts/xbbtools/xbbtools.py b/Scripts/xbbtools/xbbtools.py
index 3409559..38dccc8 100755
--- a/Scripts/xbbtools/xbbtools.py
+++ b/Scripts/xbbtools/xbbtools.py
@@ -1,32 +1,32 @@
 #!/usr/bin/env python
-# Created: Thu Jul 13 11:09:00 2000
-# Last changed: Time-stamp: <00/12/02 15:57:45 thomas>
-# thomas at cbs.dtu.dk, http://www.cbs.dtu.dk/thomas
-# File: xbbtools.py
-
-# Copyright 2000 by Thomas Sicheritz-Ponten.  All rights reserved.
+# Copyright 2000 by Thomas Sicheritz-Ponten.
+# Copyrigth 2016 by Markus Piotrowski.
+# All rights reserved.
 # This code is part of the Biopython distribution and governed by its
 # license.  Please see the LICENSE file that should have been included
 # as part of this package.
 
-import sys
+# Created: Thu Jul 13 11:09:00 2000
+# thomas at cbs.dtu.dk, http://www.cbs.dtu.dk/thomas
+# File: xbbtools.py
 
-sys.path.insert(0, '.')
+import sys
 
 try:
-    from Tkinter import *  # Python 2
+    import Tkinter as tk  # Python 2
 except ImportError:
-    from tkinter import *  # Python 3
+    import tkinter as tk  # Python 3
 
 from xbb_widget import xbb_widget
 
-win = Tk()
+
+win = tk.Tk()
+win.title('xbb tools')
 xbbtools = xbb_widget()
-xbbtools.main_frame.option_add('*frame.background', 'dimgrey')
 
 try:
     xbbtools.open(sys.argv[1])
-except Exception:  # TODO - Which exceptions?
+except IndexError:  # Started script without specifying a filename
     pass
 
 win.mainloop()
diff --git a/Tests/EMBL/embl_with_0_line.embl b/Tests/EMBL/embl_with_0_line.embl
new file mode 100644
index 0000000..0f2f7e9
--- /dev/null
+++ b/Tests/EMBL/embl_with_0_line.embl
@@ -0,0 +1,48 @@
+ID   TIR43YW1_CE     repeatmasker; DNA;  ???;  1740 BP.
+CC   TIR43YW1_CE DNA
+XX
+DE   RepbaseID: TIR43YW1_CE
+XX
+KW   DNA/.
+XX
+CC   consensus - See RepBase for additional annotations.
+XX
+CC   RepeatMasker Annotations:
+CC        Type: DNA
+CC        SubType: 
+CC        Species: Caenorhabditis_elegans
+CC        SearchStages: 
+CC        BufferStages:
+XX
+SQ   Sequence 1740 BP; 595 A; 300 C; 260 G; 585 T; 0 other;
+     ctcagacaaa cgcttagtag cttaattaga tttcaaccat attaaacgag atttcaacca   60
+     tatttgttta gaaaatccat attggattat atttgctcca tattttatta gaaatccatg   120
+     ttagattaga tttcctccat atttcattag aaaacaaatc aaatccaata tggcacgatc   180
+     tcatccatat tggattagat ttgtccatgt tagattagat ttgttccgta ttggattaga   240
+     aatccatgtt ggattagatt tcctccatat ttcattaaaa aacaaatcta atccaatatg   300
+     gtcgaaatct aatccaatat ggcacgctct cagccatatt tgattagatt tcgcccatgt   360
+     tagattagaa atctcacgag aaatgggcgt attaaaataa ataaataaat aagaagaaaa   420
+     cggaaagtgc aaacgcgtag ggcttaaaat tttttaaatt aaaattgaag acctttaaaa   480
+     agttttaaaa taaaattatg atttgaaaat aagaattatc tcctgcaaat aataatctaa   540
+     agatgatgtc cgctgactga ctttgacgaa tctccgaaaa gtctccaact ggtaatgttt   600
+     ttttcagaaa cacttttttt ttcaaaatcc ggcaagaaat ttcacggcta caactgtgac   660
+     aacttcgatg gttacaaaca acgaaataac atattctatt aatttaaatt aactcctaca   720
+     aaccattact tttttcggta taattcgtgg aaaaattata tcatttcaca caaatgatac   780
+     tagagctctt gctgcgaaaa gcggaaacag tcaataccgt acttttaaag ttttcatgaa   840
+     ttttgtattt tacgtctgtt ttgtgccaac ccgcagacca tagttaaata aaattacttt   900
+     tcctagcatt tacattttga tacaaaatac tttaattcac acttccagca accaaaaagt   960
+     atgatttaac gatttttttt tagaaaaaac tcttttccaa attttctgag actaaaaaaa   1020
+     tctttgttct cttctattgg ttagtacgat tggaggctaa gattaacgaa agcggttaac   1080
+     aaactttttc aaatgaaaaa ccttgatatc aagccgttca agacttcaaa atacattccc   1140
+     tctactcagt tcatctaatt ttccttaact tatcgaagaa acaacgcgcg ccaccaccac   1200
+     cagctattta accgaacagt tcatcgaaag ttcatgtgtg cagattggcc gagtcggtaa   1260
+     gaacacagtc tttagaatat aacatcctgg atcgattccc cacagtggca actccagaga   1320
+     agcgcagtag gggagtttat agagcggcta cagttatcag gcgagacagc cagtgtgtag   1380
+     tgtaagatat atgcgagaca tgagatgttt tctcattttc tttatttttt ccacattatt   1440
+     ttcgggtaaa acattcttcg aaaaaaaatt attcagaaaa tccgagccaa atttgattag   1500
+     attttgtcca tatttgatta gatttgttcc atattggatt agatttcaac catattggat   1560
+     tagaattgtt ccatatttga ttagatttgt tccatattgg attagatttc aaccatattt   1620
+     gattagaaaa tccatattgg attagaatag gaagcctatt aattatgtcc ccattatatt   1680
+     tgctcagttt ctaatcaaat atggttgaaa tctaattaag ctactaagcg tttgtctgag   1740
+                                                                         1740
+//
diff --git a/Tests/PAML/gen_results.py b/Tests/PAML/gen_results.py
index 9872980..326aa9a 100644
--- a/Tests/PAML/gen_results.py
+++ b/Tests/PAML/gen_results.py
@@ -130,8 +130,8 @@ def yn00(vers=None, verbose=False):
 
 def print_usage():
     versions = ", ".join(vers.replace("_", ".") for vers in VERSIONS)
-    usage = \
-'''Usage: gen_results.py [-v] PROGRAM [VERSION]
+    usage = """Usage: gen_results.py [-v] PROGRAM [VERSION]
+
 Generate result files to be used in Bio.Phylo.PAML unit tests.
 
   -v         Use verbose output
@@ -142,7 +142,7 @@ To use this, the PAML programs must be in your executable path and
 they must be named programX_Y, where X and Y are the version numbers
 (i.e. baseml4_5 or codeml4_4c). If VERSION is not specified, test
 results will be generated for all versions listed above.
-'''%(versions)
+""" % (versions)
     sys.exit(usage)
 
 if __name__ == "__main__":
diff --git a/Tests/PDB/1A8O.mmtf b/Tests/PDB/1A8O.mmtf
new file mode 100644
index 0000000..4d0cecc
Binary files /dev/null and b/Tests/PDB/1A8O.mmtf differ
diff --git a/Tests/PDB/4CUP.cif b/Tests/PDB/4CUP.cif
new file mode 100644
index 0000000..3f88049
--- /dev/null
+++ b/Tests/PDB/4CUP.cif
@@ -0,0 +1,3305 @@
+data_4CUP
+# 
+_entry.id   4CUP 
+# 
+_audit_conform.dict_name       mmcif_pdbx.dic 
+_audit_conform.dict_version    4.040 
+_audit_conform.dict_location   http://mmcif.pdb.org/dictionaries/ascii/mmcif_pdbx.dic 
+# 
+loop_
+_database_2.database_id 
+_database_2.database_code 
+PDB  4CUP      
+PDBE EBI-60082 
+# 
+_database_PDB_rev.num             1 
+_database_PDB_rev.date            2014-04-02 
+_database_PDB_rev.date_original   2014-03-21 
+_database_PDB_rev.status          ? 
+_database_PDB_rev.replaces        4CUP 
+_database_PDB_rev.mod_type        0 
+# 
+loop_
+_pdbx_database_related.db_name 
+_pdbx_database_related.db_id 
+_pdbx_database_related.content_type 
+_pdbx_database_related.details 
+PDB 4CUQ unspecified 'CRYSTAL STRUCTURE OF HUMAN BAZ2B IN COMPLEX WITH FRAGMENT-2 N09594' 
+PDB 4CUR unspecified 'CRYSTAL STRUCTURE OF HUMAN BAZ2B IN COMPLEX WITH FRAGMENT-3 N09555' 
+PDB 4CUS unspecified 'CRYSTAL STRUCTURE OF HUMAN BAZ2B IN COMPLEX WITH FRAGMENT-4 N09496' 
+PDB 4CUT unspecified 'CRYSTAL STRUCTURE OF HUMAN BAZ2B IN COMPLEX WITH FRAGMENT-5 N09428' 
+PDB 4CUU unspecified 'CRYSTAL STRUCTURE OF HUMAN BAZ2B IN COMPLEX WITH FRAGMENT-6 N09645' 
+# 
+_pdbx_database_status.status_code    REL 
+_pdbx_database_status.entry_id       4CUP 
+_pdbx_database_status.deposit_site   PDBE 
+_pdbx_database_status.process_site   PDBE 
+_pdbx_database_status.SG_entry       . 
+# 
+loop_
+_audit_author.name 
+_audit_author.pdbx_ordinal 
+'Bradley, A.R.'    1 
+'Liu, Y.'          2 
+'Krojer, T.'       3 
+'Bountra, C.'      4 
+'Arrowsmith, C.H.' 5 
+'Edwards, A.'      6 
+'Knapp, S.'        7 
+'von Delft, F.'    8 
+# 
+_citation.id                        primary 
+_citation.title                     'Crystal Structure of Human Baz2B in Complex with Fragment-1 N09421' 
+_citation.journal_abbrev            'To be Published' 
+_citation.journal_volume            ? 
+_citation.page_first                ? 
+_citation.page_last                 ? 
+_citation.year                      ? 
+_citation.journal_id_ASTM           ? 
+_citation.country                   ? 
+_citation.journal_id_ISSN           ? 
+_citation.journal_id_CSD            0353 
+_citation.book_publisher            ? 
+_citation.pdbx_database_id_PubMed   ? 
+_citation.pdbx_database_id_DOI      ? 
+# 
+loop_
+_citation_author.citation_id 
+_citation_author.name 
+_citation_author.ordinal 
+primary 'R Bradley, A.'    1 
+primary 'Liu, Y.'          2 
+primary 'Krojer, T.'       3 
+primary 'Bountra, C.'      4 
+primary 'Arrowsmith, C.H.' 5 
+primary 'Edwards, A.'      6 
+primary 'Knapp, S.'        7 
+primary 'Von Delft, F.'    8 
+# 
+_cell.entry_id           4CUP 
+_cell.length_a           80.370 
+_cell.length_b           96.120 
+_cell.length_c           57.670 
+_cell.angle_alpha        90.00 
+_cell.angle_beta         90.00 
+_cell.angle_gamma        90.00 
+_cell.Z_PDB              8 
+_cell.pdbx_unique_axis   ? 
+# 
+_symmetry.entry_id                         4CUP 
+_symmetry.space_group_name_H-M             'C 2 2 21' 
+_symmetry.pdbx_full_space_group_name_H-M   ? 
+_symmetry.cell_setting                     ? 
+_symmetry.Int_Tables_number                ? 
+# 
+loop_
+_entity.id 
+_entity.type 
+_entity.src_method 
+_entity.pdbx_description 
+_entity.formula_weight 
+_entity.pdbx_number_of_molecules 
+_entity.details 
+_entity.pdbx_mutation 
+_entity.pdbx_fragment 
+_entity.pdbx_ec 
+1 polymer     man 'BROMODOMAIN ADJACENT TO ZINC FINGER DOMAIN PROTEIN 2B' 13618.761 1   ? ? 'BROMODOMAIN, RESIDUES 1858-1972' ? 
+2 non-polymer syn 4-FLUOROBENZAMIDOXIME                                   154.144   1   ? ? ?                                 ? 
+3 non-polymer syn METHANOL                                                32.042    3   ? ? ?                                 ? 
+4 water       nat water                                                   18.015    146 ? ? ?                                 ? 
+# 
+loop_
+_entity_keywords.entity_id 
+_entity_keywords.text 
+1 ? 
+2 ? 
+3 ? 
+4 ? 
+# 
+loop_
+_entity_name_com.entity_id 
+_entity_name_com.name 
+1 'HWALP4, BAZ2B' 
+2 ?               
+3 ?               
+4 ?               
+# 
+_entity_poly.entity_id                      1 
+_entity_poly.type                           'polypeptide(L)' 
+_entity_poly.nstd_linkage                   no 
+_entity_poly.nstd_monomer                   no 
+_entity_poly.pdbx_seq_one_letter_code       
+;SMSVKKPKRDDSKDLALCSMILTEMETHEDAWPFLLPVNLKLVPGYKKVIKKPMDFSTIREKLSSGQYPNLETFALDVRL
+VFDNCETFNEDDSDIGRAGHNMRKYFEKKWTDTFKVS
+;
+_entity_poly.pdbx_seq_one_letter_code_can   
+;SMSVKKPKRDDSKDLALCSMILTEMETHEDAWPFLLPVNLKLVPGYKKVIKKPMDFSTIREKLSSGQYPNLETFALDVRL
+VFDNCETFNEDDSDIGRAGHNMRKYFEKKWTDTFKVS
+;
+_entity_poly.pdbx_strand_id                 A 
+# 
+loop_
+_entity_poly_seq.entity_id 
+_entity_poly_seq.num 
+_entity_poly_seq.mon_id 
+_entity_poly_seq.hetero 
+1 1   SER n 
+1 2   MET n 
+1 3   SER n 
+1 4   VAL n 
+1 5   LYS n 
+1 6   LYS n 
+1 7   PRO n 
+1 8   LYS n 
+1 9   ARG n 
+1 10  ASP n 
+1 11  ASP n 
+1 12  SER n 
+1 13  LYS n 
+1 14  ASP n 
+1 15  LEU n 
+1 16  ALA n 
+1 17  LEU n 
+1 18  CYS n 
+1 19  SER n 
+1 20  MET n 
+1 21  ILE n 
+1 22  LEU n 
+1 23  THR n 
+1 24  GLU n 
+1 25  MET n 
+1 26  GLU n 
+1 27  THR n 
+1 28  HIS n 
+1 29  GLU n 
+1 30  ASP n 
+1 31  ALA n 
+1 32  TRP n 
+1 33  PRO n 
+1 34  PHE n 
+1 35  LEU n 
+1 36  LEU n 
+1 37  PRO n 
+1 38  VAL n 
+1 39  ASN n 
+1 40  LEU n 
+1 41  LYS n 
+1 42  LEU n 
+1 43  VAL n 
+1 44  PRO n 
+1 45  GLY n 
+1 46  TYR n 
+1 47  LYS n 
+1 48  LYS n 
+1 49  VAL n 
+1 50  ILE n 
+1 51  LYS n 
+1 52  LYS n 
+1 53  PRO n 
+1 54  MET n 
+1 55  ASP n 
+1 56  PHE n 
+1 57  SER n 
+1 58  THR n 
+1 59  ILE n 
+1 60  ARG n 
+1 61  GLU n 
+1 62  LYS n 
+1 63  LEU n 
+1 64  SER n 
+1 65  SER n 
+1 66  GLY n 
+1 67  GLN n 
+1 68  TYR n 
+1 69  PRO n 
+1 70  ASN n 
+1 71  LEU n 
+1 72  GLU n 
+1 73  THR n 
+1 74  PHE n 
+1 75  ALA n 
+1 76  LEU n 
+1 77  ASP n 
+1 78  VAL n 
+1 79  ARG n 
+1 80  LEU n 
+1 81  VAL n 
+1 82  PHE n 
+1 83  ASP n 
+1 84  ASN n 
+1 85  CYS n 
+1 86  GLU n 
+1 87  THR n 
+1 88  PHE n 
+1 89  ASN n 
+1 90  GLU n 
+1 91  ASP n 
+1 92  ASP n 
+1 93  SER n 
+1 94  ASP n 
+1 95  ILE n 
+1 96  GLY n 
+1 97  ARG n 
+1 98  ALA n 
+1 99  GLY n 
+1 100 HIS n 
+1 101 ASN n 
+1 102 MET n 
+1 103 ARG n 
+1 104 LYS n 
+1 105 TYR n 
+1 106 PHE n 
+1 107 GLU n 
+1 108 LYS n 
+1 109 LYS n 
+1 110 TRP n 
+1 111 THR n 
+1 112 ASP n 
+1 113 THR n 
+1 114 PHE n 
+1 115 LYS n 
+1 116 VAL n 
+1 117 SER n 
+# 
+_entity_src_gen.entity_id                          1 
+_entity_src_gen.gene_src_common_name               HUMAN 
+_entity_src_gen.gene_src_genus                     ? 
+_entity_src_gen.pdbx_gene_src_gene                 ? 
+_entity_src_gen.gene_src_species                   ? 
+_entity_src_gen.gene_src_strain                    ? 
+_entity_src_gen.gene_src_tissue                    ? 
+_entity_src_gen.gene_src_tissue_fraction           ? 
+_entity_src_gen.gene_src_details                   ? 
+_entity_src_gen.pdbx_gene_src_fragment             ? 
+_entity_src_gen.pdbx_gene_src_scientific_name      'HOMO SAPIENS' 
+_entity_src_gen.pdbx_gene_src_ncbi_taxonomy_id     9606 
+_entity_src_gen.pdbx_gene_src_variant              ? 
+_entity_src_gen.pdbx_gene_src_cell_line            ? 
+_entity_src_gen.pdbx_gene_src_atcc                 ? 
+_entity_src_gen.pdbx_gene_src_organ                ? 
+_entity_src_gen.pdbx_gene_src_organelle            ? 
+_entity_src_gen.pdbx_gene_src_cell                 ? 
+_entity_src_gen.pdbx_gene_src_cellular_location    ? 
+_entity_src_gen.host_org_common_name               ? 
+_entity_src_gen.pdbx_host_org_scientific_name      'ESCHERICHIA COLI' 
+_entity_src_gen.pdbx_host_org_ncbi_taxonomy_id     469008 
+_entity_src_gen.host_org_genus                     ? 
+_entity_src_gen.pdbx_host_org_gene                 ? 
+_entity_src_gen.pdbx_host_org_organ                ? 
+_entity_src_gen.host_org_species                   ? 
+_entity_src_gen.pdbx_host_org_tissue               ? 
+_entity_src_gen.pdbx_host_org_tissue_fraction      ? 
+_entity_src_gen.pdbx_host_org_strain               'BL21(DE3)' 
+_entity_src_gen.pdbx_host_org_variant              R3 
+_entity_src_gen.pdbx_host_org_cell_line            ? 
+_entity_src_gen.pdbx_host_org_atcc                 ? 
+_entity_src_gen.pdbx_host_org_culture_collection   ? 
+_entity_src_gen.pdbx_host_org_cell                 ? 
+_entity_src_gen.pdbx_host_org_organelle            ? 
+_entity_src_gen.pdbx_host_org_cellular_location    ? 
+_entity_src_gen.pdbx_host_org_vector_type          PLASMID 
+_entity_src_gen.pdbx_host_org_vector               ? 
+_entity_src_gen.plasmid_name                       PNIC28-BSA4 
+_entity_src_gen.plasmid_details                    ? 
+_entity_src_gen.pdbx_description                   ? 
+# 
+_struct_ref.id                         1 
+_struct_ref.db_name                    UNP 
+_struct_ref.db_code                    BAZ2B_HUMAN 
+_struct_ref.entity_id                  1 
+_struct_ref.pdbx_seq_one_letter_code   ? 
+_struct_ref.pdbx_align_begin           ? 
+_struct_ref.biol_id                    . 
+_struct_ref.pdbx_db_accession          Q9UIF8 
+# 
+_struct_ref_seq.align_id                      1 
+_struct_ref_seq.ref_id                        1 
+_struct_ref_seq.pdbx_PDB_id_code              4CUP 
+_struct_ref_seq.pdbx_strand_id                A 
+_struct_ref_seq.seq_align_beg                 3 
+_struct_ref_seq.pdbx_seq_align_beg_ins_code   ? 
+_struct_ref_seq.seq_align_end                 117 
+_struct_ref_seq.pdbx_seq_align_end_ins_code   ? 
+_struct_ref_seq.pdbx_db_accession             Q9UIF8 
+_struct_ref_seq.db_align_beg                  1858 
+_struct_ref_seq.pdbx_db_align_beg_ins_code    ? 
+_struct_ref_seq.db_align_end                  1972 
+_struct_ref_seq.pdbx_db_align_end_ins_code    ? 
+_struct_ref_seq.pdbx_auth_seq_align_beg       1858 
+_struct_ref_seq.pdbx_auth_seq_align_end       1972 
+# 
+loop_
+_struct_ref_seq_dif.align_id 
+_struct_ref_seq_dif.pdbx_pdb_id_code 
+_struct_ref_seq_dif.mon_id 
+_struct_ref_seq_dif.pdbx_pdb_strand_id 
+_struct_ref_seq_dif.seq_num 
+_struct_ref_seq_dif.pdbx_pdb_ins_code 
+_struct_ref_seq_dif.pdbx_seq_db_name 
+_struct_ref_seq_dif.pdbx_seq_db_accession_code 
+_struct_ref_seq_dif.db_mon_id 
+_struct_ref_seq_dif.pdbx_seq_db_seq_num 
+_struct_ref_seq_dif.details 
+_struct_ref_seq_dif.pdbx_auth_seq_num 
+_struct_ref_seq_dif.pdbx_ordinal 
+1 4CUP SER A 1 ? UNP Q9UIF8 ? ? 'EXPRESSION TAG' 1856 1 
+1 4CUP MET A 2 ? UNP Q9UIF8 ? ? 'EXPRESSION TAG' 1857 2 
+# 
+loop_
+_chem_comp.id 
+_chem_comp.type 
+_chem_comp.mon_nstd_flag 
+_chem_comp.name 
+_chem_comp.pdbx_synonyms 
+_chem_comp.formula 
+_chem_comp.formula_weight 
+SER 'L-peptide linking' y SERINE                ? 'C3 H7 N O3'     105.093 
+MET 'L-peptide linking' y METHIONINE            ? 'C5 H11 N O2 S'  149.207 
+VAL 'L-peptide linking' y VALINE                ? 'C5 H11 N O2'    117.147 
+LYS 'L-peptide linking' y LYSINE                ? 'C6 H15 N2 O2 1' 147.197 
+PRO 'L-peptide linking' y PROLINE               ? 'C5 H9 N O2'     115.132 
+ARG 'L-peptide linking' y ARGININE              ? 'C6 H15 N4 O2 1' 175.210 
+ASP 'L-peptide linking' y 'ASPARTIC ACID'       ? 'C4 H7 N O4'     133.104 
+LEU 'L-peptide linking' y LEUCINE               ? 'C6 H13 N O2'    131.174 
+ALA 'L-peptide linking' y ALANINE               ? 'C3 H7 N O2'     89.094  
+CYS 'L-peptide linking' y CYSTEINE              ? 'C3 H7 N O2 S'   121.154 
+ILE 'L-peptide linking' y ISOLEUCINE            ? 'C6 H13 N O2'    131.174 
+THR 'L-peptide linking' y THREONINE             ? 'C4 H9 N O3'     119.120 
+GLU 'L-peptide linking' y 'GLUTAMIC ACID'       ? 'C5 H9 N O4'     147.130 
+HIS 'L-peptide linking' y HISTIDINE             ? 'C6 H10 N3 O2 1' 156.164 
+TRP 'L-peptide linking' y TRYPTOPHAN            ? 'C11 H12 N2 O2'  204.228 
+PHE 'L-peptide linking' y PHENYLALANINE         ? 'C9 H11 N O2'    165.191 
+ASN 'L-peptide linking' y ASPARAGINE            ? 'C4 H8 N2 O3'    132.119 
+GLY 'PEPTIDE LINKING'   y GLYCINE               ? 'C2 H5 N O2'     75.067  
+TYR 'L-peptide linking' y TYROSINE              ? 'C9 H11 N O3'    181.191 
+GLN 'L-peptide linking' y GLUTAMINE             ? 'C5 H10 N2 O3'   146.146 
+ZYB NON-POLYMER         . 4-FLUOROBENZAMIDOXIME ? 'C7 H7 F N2 O'   154.144 
+MOH NON-POLYMER         . METHANOL              ? 'C H4 O'         32.042  
+HOH NON-POLYMER         . WATER                 ? 'H2 O'           18.015  
+# 
+_exptl.entry_id          4CUP 
+_exptl.method            'X-RAY DIFFRACTION' 
+_exptl.crystals_number   1 
+# 
+_exptl_crystal.id                    1 
+_exptl_crystal.density_meas          ? 
+_exptl_crystal.density_Matthews      4.3 
+_exptl_crystal.density_percent_sol   70 
+_exptl_crystal.description           NONE 
+# 
+_exptl_crystal_grow.crystal_id      1 
+_exptl_crystal_grow.method          ? 
+_exptl_crystal_grow.temp            ? 
+_exptl_crystal_grow.temp_details    ? 
+_exptl_crystal_grow.pH              6.4 
+_exptl_crystal_grow.pdbx_pH_range   ? 
+_exptl_crystal_grow.pdbx_details    '34% PEG SMEAR LOW, 0.1M MES PH 6.4' 
+# 
+_diffrn.id                     1 
+_diffrn.ambient_temp           100 
+_diffrn.ambient_temp_details   ? 
+_diffrn.crystal_id             1 
+# 
+_diffrn_detector.diffrn_id              1 
+_diffrn_detector.detector               'PIXEL (PILATUS)' 
+_diffrn_detector.type                   DECTRIS 
+_diffrn_detector.pdbx_collection_date   2012-04-29 
+_diffrn_detector.details                ? 
+# 
+_diffrn_radiation.diffrn_id                        1 
+_diffrn_radiation.wavelength_id                    1 
+_diffrn_radiation.pdbx_monochromatic_or_laue_m_l   M 
+_diffrn_radiation.monochromator                    ? 
+_diffrn_radiation.pdbx_diffrn_protocol             'SINGLE WAVELENGTH' 
+_diffrn_radiation.pdbx_scattering_type             x-ray 
+# 
+_diffrn_radiation_wavelength.id           1 
+_diffrn_radiation_wavelength.wavelength   0.97 
+_diffrn_radiation_wavelength.wt           1.0 
+# 
+_diffrn_source.diffrn_id                   1 
+_diffrn_source.source                      SYNCHROTRON 
+_diffrn_source.type                        'DIAMOND BEAMLINE I04' 
+_diffrn_source.pdbx_synchrotron_site       DIAMOND 
+_diffrn_source.pdbx_synchrotron_beamline   I04 
+_diffrn_source.pdbx_wavelength             0.97 
+_diffrn_source.pdbx_wavelength_list        ? 
+# 
+_reflns.pdbx_diffrn_id               1 
+_reflns.pdbx_ordinal                 1 
+_reflns.entry_id                     4CUP 
+_reflns.observed_criterion_sigma_I   -3.0 
+_reflns.observed_criterion_sigma_F   ? 
+_reflns.d_resolution_low             32.97 
+_reflns.d_resolution_high            1.88 
+_reflns.number_obs                   18470 
+_reflns.number_all                   ? 
+_reflns.percent_possible_obs         99.5 
+_reflns.pdbx_Rmerge_I_obs            0.06 
+_reflns.pdbx_Rsym_value              ? 
+_reflns.pdbx_netI_over_sigmaI        16.20 
+_reflns.B_iso_Wilson_estimate        26.58 
+_reflns.pdbx_redundancy              5.4 
+# 
+_reflns_shell.pdbx_diffrn_id         1 
+_reflns_shell.pdbx_ordinal           1 
+_reflns_shell.d_res_high             1.88 
+_reflns_shell.d_res_low              1.93 
+_reflns_shell.percent_possible_all   98.6 
+_reflns_shell.Rmerge_I_obs           0.74 
+_reflns_shell.pdbx_Rsym_value        ? 
+_reflns_shell.meanI_over_sigI_obs    1.90 
+_reflns_shell.pdbx_redundancy        4.8 
+# 
+_computing.entry_id                           4CUP 
+_computing.pdbx_data_reduction_ii             XDS 
+_computing.pdbx_data_reduction_ds             AIMLESS 
+_computing.data_collection                    ? 
+_computing.structure_solution                 ? 
+_computing.structure_refinement               'PHENIX (PHENIX.REFINE)' 
+_computing.pdbx_structure_refinement_method   ? 
+# 
+_refine.pdbx_refine_id                           'X-RAY DIFFRACTION' 
+_refine.entry_id                                 4CUP 
+_refine.pdbx_diffrn_id                           1 
+_refine.pdbx_TLS_residual_ADP_flag               ? 
+_refine.ls_number_reflns_obs                     18429 
+_refine.ls_number_reflns_all                     ? 
+_refine.pdbx_ls_sigma_I                          ? 
+_refine.pdbx_ls_sigma_F                          1.90 
+_refine.pdbx_data_cutoff_high_absF               ? 
+_refine.pdbx_data_cutoff_low_absF                ? 
+_refine.pdbx_data_cutoff_high_rms_absF           ? 
+_refine.ls_d_res_low                             18.538 
+_refine.ls_d_res_high                            1.880 
+_refine.ls_percent_reflns_obs                    99.44 
+_refine.ls_R_factor_obs                          0.1779 
+_refine.ls_R_factor_all                          ? 
+_refine.ls_R_factor_R_work                       0.1763 
+_refine.ls_R_factor_R_free                       0.2078 
+_refine.ls_R_factor_R_free_error                 ? 
+_refine.ls_R_factor_R_free_error_details         ? 
+_refine.ls_percent_reflns_R_free                 5.1 
+_refine.ls_number_reflns_R_free                  940 
+_refine.ls_number_parameters                     ? 
+_refine.ls_number_restraints                     ? 
+_refine.occupancy_min                            ? 
+_refine.occupancy_max                            ? 
+_refine.correlation_coeff_Fo_to_Fc               ? 
+_refine.correlation_coeff_Fo_to_Fc_free          ? 
+_refine.B_iso_mean                               ? 
+_refine.aniso_B[1][1]                            ? 
+_refine.aniso_B[2][2]                            ? 
+_refine.aniso_B[3][3]                            ? 
+_refine.aniso_B[1][2]                            ? 
+_refine.aniso_B[1][3]                            ? 
+_refine.aniso_B[2][3]                            ? 
+_refine.solvent_model_details                    'FLAT BULK SOLVENT MODEL' 
+_refine.solvent_model_param_ksol                 ? 
+_refine.solvent_model_param_bsol                 ? 
+_refine.pdbx_solvent_vdw_probe_radii             1.11 
+_refine.pdbx_solvent_ion_probe_radii             ? 
+_refine.pdbx_solvent_shrinkage_radii             0.90 
+_refine.pdbx_ls_cross_valid_method               ? 
+_refine.details                                  ? 
+_refine.pdbx_starting_model                      ? 
+_refine.pdbx_method_to_determine_struct          'MOLECULAR REPLACEMENT' 
+_refine.pdbx_isotropic_thermal_model             ? 
+_refine.pdbx_stereochemistry_target_values       ML 
+_refine.pdbx_stereochem_target_val_spec_case     ? 
+_refine.pdbx_R_Free_selection_details            ? 
+_refine.pdbx_overall_ESU_R                       ? 
+_refine.pdbx_overall_ESU_R_Free                  ? 
+_refine.overall_SU_ML                            0.20 
+_refine.pdbx_overall_phase_error                 25.38 
+_refine.overall_SU_B                             ? 
+_refine.overall_SU_R_Cruickshank_DPI             ? 
+_refine.pdbx_overall_SU_R_free_Cruickshank_DPI   ? 
+_refine.pdbx_overall_SU_R_Blow_DPI               ? 
+_refine.pdbx_overall_SU_R_free_Blow_DPI          ? 
+# 
+_refine_hist.pdbx_refine_id                   'X-RAY DIFFRACTION' 
+_refine_hist.cycle_id                         LAST 
+_refine_hist.pdbx_number_atoms_protein        924 
+_refine_hist.pdbx_number_atoms_nucleic_acid   0 
+_refine_hist.pdbx_number_atoms_ligand         17 
+_refine_hist.number_atoms_solvent             146 
+_refine_hist.number_atoms_total               1087 
+_refine_hist.d_res_high                       1.880 
+_refine_hist.d_res_low                        18.538 
+# 
+loop_
+_refine_ls_restr.type 
+_refine_ls_restr.dev_ideal 
+_refine_ls_restr.dev_ideal_target 
+_refine_ls_restr.weight 
+_refine_ls_restr.number 
+_refine_ls_restr.pdbx_refine_id 
+_refine_ls_restr.pdbx_restraint_function 
+f_bond_d           0.006  ? ? 973  'X-RAY DIFFRACTION' ? 
+f_angle_d          0.898  ? ? 1309 'X-RAY DIFFRACTION' ? 
+f_dihedral_angle_d 12.740 ? ? 365  'X-RAY DIFFRACTION' ? 
+f_chiral_restr     0.034  ? ? 141  'X-RAY DIFFRACTION' ? 
+f_plane_restr      0.005  ? ? 168  'X-RAY DIFFRACTION' ? 
+# 
+loop_
+_refine_ls_shell.pdbx_refine_id 
+_refine_ls_shell.pdbx_total_number_of_bins_used 
+_refine_ls_shell.d_res_high 
+_refine_ls_shell.d_res_low 
+_refine_ls_shell.number_reflns_R_work 
+_refine_ls_shell.R_factor_R_work 
+_refine_ls_shell.percent_reflns_obs 
+_refine_ls_shell.R_factor_R_free 
+_refine_ls_shell.R_factor_R_free_error 
+_refine_ls_shell.percent_reflns_R_free 
+_refine_ls_shell.number_reflns_R_free 
+_refine_ls_shell.number_reflns_all 
+_refine_ls_shell.R_factor_all 
+'X-RAY DIFFRACTION' ? 1.8800 1.9790  2458 0.3152 99.00  0.3338 ? ? 133 ? ? 
+'X-RAY DIFFRACTION' ? 1.9790 2.1029  2430 0.2368 99.00  0.2971 ? ? 139 ? ? 
+'X-RAY DIFFRACTION' ? 2.1029 2.2650  2453 0.1915 99.00  0.2154 ? ? 138 ? ? 
+'X-RAY DIFFRACTION' ? 2.2650 2.4924  2496 0.1683 100.00 0.2131 ? ? 137 ? ? 
+'X-RAY DIFFRACTION' ? 2.4924 2.8519  2493 0.1662 100.00 0.2138 ? ? 138 ? ? 
+'X-RAY DIFFRACTION' ? 2.8519 3.5889  2505 0.1669 100.00 0.1748 ? ? 143 ? ? 
+'X-RAY DIFFRACTION' ? 3.5889 18.5386 2654 0.1558 100.00 0.1894 ? ? 112 ? ? 
+# 
+_struct.entry_id                  4CUP 
+_struct.title                     'Crystal structure of human BAZ2B in complex with fragment-1 N09421' 
+_struct.pdbx_descriptor           'BROMODOMAIN ADJACENT TO ZINC FINGER DOMAIN PROTEIN 2B' 
+_struct.pdbx_model_details        ? 
+_struct.pdbx_CASP_flag            ? 
+_struct.pdbx_model_type_details   ? 
+# 
+_struct_keywords.entry_id        4CUP 
+_struct_keywords.pdbx_keywords   TRANSCRIPTION 
+_struct_keywords.text            TRANSCRIPTION 
+# 
+loop_
+_struct_asym.id 
+_struct_asym.pdbx_blank_PDB_chainid_flag 
+_struct_asym.pdbx_modified 
+_struct_asym.entity_id 
+_struct_asym.details 
+A N N 1 ? 
+B N N 2 ? 
+C N N 3 ? 
+D N N 3 ? 
+E N N 3 ? 
+F N N 4 ? 
+# 
+_struct_biol.id   1 
+# 
+loop_
+_struct_conf.conf_type_id 
+_struct_conf.id 
+_struct_conf.pdbx_PDB_helix_id 
+_struct_conf.beg_label_comp_id 
+_struct_conf.beg_label_asym_id 
+_struct_conf.beg_label_seq_id 
+_struct_conf.pdbx_beg_PDB_ins_code 
+_struct_conf.end_label_comp_id 
+_struct_conf.end_label_asym_id 
+_struct_conf.end_label_seq_id 
+_struct_conf.pdbx_end_PDB_ins_code 
+_struct_conf.beg_auth_comp_id 
+_struct_conf.beg_auth_asym_id 
+_struct_conf.beg_auth_seq_id 
+_struct_conf.end_auth_comp_id 
+_struct_conf.end_auth_asym_id 
+_struct_conf.end_auth_seq_id 
+_struct_conf.pdbx_PDB_helix_class 
+_struct_conf.details 
+_struct_conf.pdbx_PDB_helix_length 
+HELX_P HELX_P1 1 LYS A 13 ? HIS A 28  ? LYS A 1868 HIS A 1883 1 ? 16 
+HELX_P HELX_P2 2 ALA A 31 ? LEU A 35  ? ALA A 1886 LEU A 1890 5 ? 5  
+HELX_P HELX_P3 3 GLY A 45 ? ILE A 50  ? GLY A 1900 ILE A 1905 1 ? 6  
+HELX_P HELX_P4 4 ASP A 55 ? SER A 65  ? ASP A 1910 SER A 1920 1 ? 11 
+HELX_P HELX_P5 5 ASN A 70 ? ASN A 89  ? ASN A 1925 ASN A 1944 1 ? 20 
+HELX_P HELX_P6 6 SER A 93 ? LYS A 115 ? SER A 1948 LYS A 1970 1 ? 23 
+# 
+_struct_conf_type.id          HELX_P 
+_struct_conf_type.criteria    ? 
+_struct_conf_type.reference   ? 
+# 
+_struct_site.id                   AC1 
+_struct_site.details              'BINDING SITE FOR RESIDUE ZYB A 2971' 
+_struct_site.pdbx_evidence_code   SOFTWARE 
+# 
+loop_
+_struct_site_gen.id 
+_struct_site_gen.site_id 
+_struct_site_gen.pdbx_num_res 
+_struct_site_gen.label_comp_id 
+_struct_site_gen.label_asym_id 
+_struct_site_gen.label_seq_id 
+_struct_site_gen.pdbx_auth_ins_code 
+_struct_site_gen.auth_comp_id 
+_struct_site_gen.auth_asym_id 
+_struct_site_gen.auth_seq_id 
+_struct_site_gen.label_atom_id 
+_struct_site_gen.label_alt_id 
+_struct_site_gen.symmetry 
+_struct_site_gen.details 
+1 AC1 6 VAL A 43 ? VAL A 1898 . . 1_555 ? 
+2 AC1 6 PRO A 44 ? PRO A 1899 . . 4_566 ? 
+3 AC1 6 ASN A 89 ? ASN A 1944 . . 1_555 ? 
+4 AC1 6 ILE A 95 ? ILE A 1950 . . 1_555 ? 
+5 AC1 6 HOH F .  ? HOH A 2072 . . 4_566 ? 
+6 AC1 6 HOH F .  ? HOH A 2124 . . 1_555 ? 
+# 
+_database_PDB_matrix.entry_id          4CUP 
+_database_PDB_matrix.origx[1][1]       1.000000 
+_database_PDB_matrix.origx[1][2]       0.000000 
+_database_PDB_matrix.origx[1][3]       0.000000 
+_database_PDB_matrix.origx[2][1]       0.000000 
+_database_PDB_matrix.origx[2][2]       1.000000 
+_database_PDB_matrix.origx[2][3]       0.000000 
+_database_PDB_matrix.origx[3][1]       0.000000 
+_database_PDB_matrix.origx[3][2]       0.000000 
+_database_PDB_matrix.origx[3][3]       1.000000 
+_database_PDB_matrix.origx_vector[1]   0.00000 
+_database_PDB_matrix.origx_vector[2]   0.00000 
+_database_PDB_matrix.origx_vector[3]   0.00000 
+# 
+_atom_sites.entry_id                    4CUP 
+_atom_sites.Cartn_transform_axes        ? 
+_atom_sites.fract_transf_matrix[1][1]   0.012442 
+_atom_sites.fract_transf_matrix[1][2]   0.000000 
+_atom_sites.fract_transf_matrix[1][3]   0.000000 
+_atom_sites.fract_transf_matrix[2][1]   0.000000 
+_atom_sites.fract_transf_matrix[2][2]   0.010404 
+_atom_sites.fract_transf_matrix[2][3]   0.000000 
+_atom_sites.fract_transf_matrix[3][1]   0.000000 
+_atom_sites.fract_transf_matrix[3][2]   0.000000 
+_atom_sites.fract_transf_matrix[3][3]   0.017340 
+_atom_sites.fract_transf_vector[1]      0.00000 
+_atom_sites.fract_transf_vector[2]      0.00000 
+_atom_sites.fract_transf_vector[3]      0.00000 
+# 
+loop_
+_atom_type.symbol 
+C 
+F 
+H 
+N 
+O 
+S 
+# 
+loop_
+_atom_site.group_PDB 
+_atom_site.id 
+_atom_site.type_symbol 
+_atom_site.label_atom_id 
+_atom_site.label_alt_id 
+_atom_site.label_comp_id 
+_atom_site.label_asym_id 
+_atom_site.label_entity_id 
+_atom_site.label_seq_id 
+_atom_site.pdbx_PDB_ins_code 
+_atom_site.Cartn_x 
+_atom_site.Cartn_y 
+_atom_site.Cartn_z 
+_atom_site.occupancy 
+_atom_site.B_iso_or_equiv 
+_atom_site.Cartn_x_esd 
+_atom_site.Cartn_y_esd 
+_atom_site.Cartn_z_esd 
+_atom_site.occupancy_esd 
+_atom_site.B_iso_or_equiv_esd 
+_atom_site.pdbx_formal_charge 
+_atom_site.auth_seq_id 
+_atom_site.auth_comp_id 
+_atom_site.auth_asym_id 
+_atom_site.auth_atom_id 
+_atom_site.pdbx_PDB_model_num 
+ATOM   1    N N   . SER A 1 1   ? 50.346 19.287 17.288 1.00 32.02 ? ? ? ? ? ? 1856 SER A N   1 
+ATOM   2    C CA  . SER A 1 1   ? 50.745 19.964 16.058 1.00 34.08 ? ? ? ? ? ? 1856 SER A CA  1 
+ATOM   3    C C   . SER A 1 1   ? 50.691 18.998 14.887 1.00 35.85 ? ? ? ? ? ? 1856 SER A C   1 
+ATOM   4    O O   . SER A 1 1   ? 50.070 17.937 14.987 1.00 33.26 ? ? ? ? ? ? 1856 SER A O   1 
+ATOM   5    C CB  . SER A 1 1   ? 52.146 20.564 16.199 1.00 30.82 ? ? ? ? ? ? 1856 SER A CB  1 
+ATOM   6    O OG  . SER A 1 1   ? 53.116 19.545 16.371 1.00 32.50 ? ? ? ? ? ? 1856 SER A OG  1 
+ATOM   7    N N   . MET A 1 2   ? 51.330 19.363 13.776 1.00 35.47 ? ? ? ? ? ? 1857 MET A N   1 
+ATOM   8    C CA  . MET A 1 2   ? 51.310 18.508 12.593 1.00 36.62 ? ? ? ? ? ? 1857 MET A CA  1 
+ATOM   9    C C   . MET A 1 2   ? 51.837 17.105 12.904 1.00 32.24 ? ? ? ? ? ? 1857 MET A C   1 
+ATOM   10   O O   . MET A 1 2   ? 52.974 16.947 13.359 1.00 34.35 ? ? ? ? ? ? 1857 MET A O   1 
+ATOM   11   C CB  . MET A 1 2   ? 52.123 19.127 11.456 1.00 36.12 ? ? ? ? ? ? 1857 MET A CB  1 
+ATOM   12   C CG  . MET A 1 2   ? 51.875 18.454 10.119 1.00 37.34 ? ? ? ? ? ? 1857 MET A CG  1 
+ATOM   13   S SD  . MET A 1 2   ? 52.981 18.997 8.800  1.00 39.70 ? ? ? ? ? ? 1857 MET A SD  1 
+ATOM   14   C CE  . MET A 1 2   ? 52.932 20.770 8.993  1.00 36.58 ? ? ? ? ? ? 1857 MET A CE  1 
+ATOM   15   N N   . SER A 1 3   ? 50.992 16.104 12.654 1.00 35.27 ? ? ? ? ? ? 1858 SER A N   1 
+ATOM   16   C CA  . SER A 1 3   ? 51.276 14.687 12.929 1.00 35.35 ? ? ? ? ? ? 1858 SER A CA  1 
+ATOM   17   C C   . SER A 1 3   ? 51.511 14.388 14.413 1.00 36.48 ? ? ? ? ? ? 1858 SER A C   1 
+ATOM   18   O O   . SER A 1 3   ? 52.097 13.363 14.762 1.00 33.72 ? ? ? ? ? ? 1858 SER A O   1 
+ATOM   19   C CB  . SER A 1 3   ? 52.482 14.212 12.114 1.00 35.21 ? ? ? ? ? ? 1858 SER A CB  1 
+ATOM   20   O OG  . SER A 1 3   ? 52.279 14.436 10.727 1.00 35.86 ? ? ? ? ? ? 1858 SER A OG  1 
+ATOM   21   N N   . VAL A 1 4   ? 51.048 15.277 15.285 1.00 30.95 ? ? ? ? ? ? 1859 VAL A N   1 
+ATOM   22   C CA  . VAL A 1 4   ? 51.130 15.041 16.731 1.00 31.15 ? ? ? ? ? ? 1859 VAL A CA  1 
+ATOM   23   C C   . VAL A 1 4   ? 49.768 15.284 17.370 1.00 35.24 ? ? ? ? ? ? 1859 VAL A C   1 
+ATOM   24   O O   . VAL A 1 4   ? 49.410 16.424 17.672 1.00 36.46 ? ? ? ? ? ? 1859 VAL A O   1 
+ATOM   25   C CB  . VAL A 1 4   ? 52.177 15.945 17.413 1.00 31.83 ? ? ? ? ? ? 1859 VAL A CB  1 
+ATOM   26   C CG1 . VAL A 1 4   ? 52.253 15.637 18.914 1.00 31.15 ? ? ? ? ? ? 1859 VAL A CG1 1 
+ATOM   27   C CG2 . VAL A 1 4   ? 53.546 15.779 16.764 1.00 33.39 ? ? ? ? ? ? 1859 VAL A CG2 1 
+ATOM   28   N N   . LYS A 1 5   ? 49.005 14.214 17.571 1.00 42.36 ? ? ? ? ? ? 1860 LYS A N   1 
+ATOM   29   C CA  . LYS A 1 5   ? 47.636 14.345 18.058 1.00 45.72 ? ? ? ? ? ? 1860 LYS A CA  1 
+ATOM   30   C C   . LYS A 1 5   ? 47.418 13.675 19.410 1.00 44.41 ? ? ? ? ? ? 1860 LYS A C   1 
+ATOM   31   O O   . LYS A 1 5   ? 47.998 12.625 19.688 1.00 45.19 ? ? ? ? ? ? 1860 LYS A O   1 
+ATOM   32   C CB  . LYS A 1 5   ? 46.661 13.761 17.032 1.00 46.44 ? ? ? ? ? ? 1860 LYS A CB  1 
+ATOM   33   C CG  . LYS A 1 5   ? 46.603 14.552 15.731 1.00 61.31 ? ? ? ? ? ? 1860 LYS A CG  1 
+ATOM   34   C CD  . LYS A 1 5   ? 45.784 15.830 15.892 1.00 65.67 ? ? ? ? ? ? 1860 LYS A CD  1 
+ATOM   35   C CE  . LYS A 1 5   ? 46.118 16.850 14.820 1.00 68.56 ? ? ? ? ? ? 1860 LYS A CE  1 
+ATOM   36   N NZ  . LYS A 1 5   ? 47.383 17.565 15.134 1.00 71.00 ? ? ? ? ? ? 1860 LYS A NZ  1 
+ATOM   37   N N   . LYS A 1 6   ? 46.582 14.292 20.245 1.00 47.64 ? ? ? ? ? ? 1861 LYS A N   1 
+ATOM   38   C CA  . LYS A 1 6   ? 46.107 13.653 21.467 1.00 58.98 ? ? ? ? ? ? 1861 LYS A CA  1 
+ATOM   39   C C   . LYS A 1 6   ? 45.212 12.495 21.075 1.00 56.13 ? ? ? ? ? ? 1861 LYS A C   1 
+ATOM   40   O O   . LYS A 1 6   ? 44.629 12.513 19.990 1.00 58.78 ? ? ? ? ? ? 1861 LYS A O   1 
+ATOM   41   C CB  . LYS A 1 6   ? 45.323 14.628 22.354 1.00 69.74 ? ? ? ? ? ? 1861 LYS A CB  1 
+ATOM   42   C CG  . LYS A 1 6   ? 46.129 15.745 22.995 1.00 73.06 ? ? ? ? ? ? 1861 LYS A CG  1 
+ATOM   43   C CD  . LYS A 1 6   ? 45.315 16.398 24.110 1.00 76.41 ? ? ? ? ? ? 1861 LYS A CD  1 
+ATOM   44   C CE  . LYS A 1 6   ? 45.913 17.721 24.569 1.00 77.31 ? ? ? ? ? ? 1861 LYS A CE  1 
+ATOM   45   N NZ  . LYS A 1 6   ? 45.777 18.787 23.539 1.00 76.95 ? ? ? ? ? ? 1861 LYS A NZ  1 
+ATOM   46   N N   . PRO A 1 7   ? 45.102 11.484 21.949 1.00 56.20 ? ? ? ? ? ? 1862 PRO A N   1 
+ATOM   47   C CA  . PRO A 1 7   ? 44.136 10.405 21.727 1.00 60.79 ? ? ? ? ? ? 1862 PRO A CA  1 
+ATOM   48   C C   . PRO A 1 7   ? 42.751 10.956 21.409 1.00 65.14 ? ? ? ? ? ? 1862 PRO A C   1 
+ATOM   49   O O   . PRO A 1 7   ? 42.303 11.920 22.036 1.00 61.93 ? ? ? ? ? ? 1862 PRO A O   1 
+ATOM   50   C CB  . PRO A 1 7   ? 44.149 9.652  23.055 1.00 62.28 ? ? ? ? ? ? 1862 PRO A CB  1 
+ATOM   51   C CG  . PRO A 1 7   ? 45.547 9.829  23.540 1.00 62.61 ? ? ? ? ? ? 1862 PRO A CG  1 
+ATOM   52   C CD  . PRO A 1 7   ? 45.950 11.224 23.125 1.00 57.35 ? ? ? ? ? ? 1862 PRO A CD  1 
+ATOM   53   N N   . LYS A 1 8   ? 42.100 10.360 20.416 1.00 68.79 ? ? ? ? ? ? 1863 LYS A N   1 
+ATOM   54   C CA  . LYS A 1 8   ? 40.836 10.879 19.914 1.00 73.53 ? ? ? ? ? ? 1863 LYS A CA  1 
+ATOM   55   C C   . LYS A 1 8   ? 39.701 10.620 20.892 1.00 72.50 ? ? ? ? ? ? 1863 LYS A C   1 
+ATOM   56   O O   . LYS A 1 8   ? 39.396 9.473  21.215 1.00 73.78 ? ? ? ? ? ? 1863 LYS A O   1 
+ATOM   57   C CB  . LYS A 1 8   ? 40.507 10.266 18.550 1.00 73.63 ? ? ? ? ? ? 1863 LYS A CB  1 
+ATOM   58   N N   . ARG A 1 9   ? 39.091 11.698 21.369 1.00 70.21 ? ? ? ? ? ? 1864 ARG A N   1 
+ATOM   59   C CA  . ARG A 1 9   ? 37.895 11.604 22.190 1.00 69.66 ? ? ? ? ? ? 1864 ARG A CA  1 
+ATOM   60   C C   . ARG A 1 9   ? 36.694 11.259 21.314 1.00 70.65 ? ? ? ? ? ? 1864 ARG A C   1 
+ATOM   61   O O   . ARG A 1 9   ? 36.517 11.839 20.241 1.00 70.51 ? ? ? ? ? ? 1864 ARG A O   1 
+ATOM   62   C CB  . ARG A 1 9   ? 37.651 12.914 22.938 1.00 67.41 ? ? ? ? ? ? 1864 ARG A CB  1 
+ATOM   63   C CG  . ARG A 1 9   ? 36.356 12.937 23.721 1.00 64.44 ? ? ? ? ? ? 1864 ARG A CG  1 
+ATOM   64   C CD  . ARG A 1 9   ? 35.997 14.337 24.184 1.00 62.86 ? ? ? ? ? ? 1864 ARG A CD  1 
+ATOM   65   N NE  . ARG A 1 9   ? 34.678 14.349 24.805 1.00 62.84 ? ? ? ? ? ? 1864 ARG A NE  1 
+ATOM   66   C CZ  . ARG A 1 9   ? 33.550 14.599 24.151 1.00 65.98 ? ? ? ? ? ? 1864 ARG A CZ  1 
+ATOM   67   N NH1 . ARG A 1 9   ? 33.579 14.880 22.855 1.00 71.46 ? ? ? ? ? ? 1864 ARG A NH1 1 
+ATOM   68   N NH2 . ARG A 1 9   ? 32.392 14.578 24.795 1.00 67.66 ? ? ? ? ? ? 1864 ARG A NH2 1 
+ATOM   69   N N   . ASP A 1 10  ? 35.876 10.311 21.763 1.00 71.15 ? ? ? ? ? ? 1865 ASP A N   1 
+ATOM   70   C CA  . ASP A 1 10  ? 34.693 9.915  21.008 1.00 66.70 ? ? ? ? ? ? 1865 ASP A CA  1 
+ATOM   71   C C   . ASP A 1 10  ? 33.597 10.965 21.142 1.00 60.95 ? ? ? ? ? ? 1865 ASP A C   1 
+ATOM   72   O O   . ASP A 1 10  ? 32.969 11.089 22.191 1.00 62.37 ? ? ? ? ? ? 1865 ASP A O   1 
+ATOM   73   C CB  . ASP A 1 10  ? 34.183 8.548  21.472 1.00 71.14 ? ? ? ? ? ? 1865 ASP A CB  1 
+ATOM   74   C CG  . ASP A 1 10  ? 32.882 8.151  20.796 1.00 72.95 ? ? ? ? ? ? 1865 ASP A CG  1 
+ATOM   75   O OD1 . ASP A 1 10  ? 32.567 8.705  19.717 1.00 65.36 ? ? ? ? ? ? 1865 ASP A OD1 1 
+ATOM   76   O OD2 . ASP A 1 10  ? 32.173 7.280  21.343 1.00 74.36 ? ? ? ? ? ? 1865 ASP A OD2 1 
+ATOM   77   N N   . ASP A 1 11  ? 33.361 11.711 20.068 1.00 48.20 ? ? ? ? ? ? 1866 ASP A N   1 
+ATOM   78   C CA  . ASP A 1 11  ? 32.406 12.813 20.113 1.00 43.93 ? ? ? ? ? ? 1866 ASP A CA  1 
+ATOM   79   C C   . ASP A 1 11  ? 31.081 12.473 19.431 1.00 40.69 ? ? ? ? ? ? 1866 ASP A C   1 
+ATOM   80   O O   . ASP A 1 11  ? 30.235 13.348 19.233 1.00 41.33 ? ? ? ? ? ? 1866 ASP A O   1 
+ATOM   81   C CB  . ASP A 1 11  ? 33.020 14.063 19.472 1.00 47.30 ? ? ? ? ? ? 1866 ASP A CB  1 
+ATOM   82   C CG  . ASP A 1 11  ? 33.442 13.838 18.029 1.00 58.18 ? ? ? ? ? ? 1866 ASP A CG  1 
+ATOM   83   O OD1 . ASP A 1 11  ? 33.545 12.666 17.610 1.00 64.93 ? ? ? ? ? ? 1866 ASP A OD1 1 
+ATOM   84   O OD2 . ASP A 1 11  ? 33.681 14.834 17.313 1.00 64.43 ? ? ? ? ? ? 1866 ASP A OD2 1 
+ATOM   85   N N   . SER A 1 12  ? 30.896 11.200 19.096 1.00 44.14 ? ? ? ? ? ? 1867 SER A N   1 
+ATOM   86   C CA  . SER A 1 12  ? 29.765 10.775 18.275 1.00 43.67 ? ? ? ? ? ? 1867 SER A CA  1 
+ATOM   87   C C   . SER A 1 12  ? 28.422 10.980 18.960 1.00 42.67 ? ? ? ? ? ? 1867 SER A C   1 
+ATOM   88   O O   . SER A 1 12  ? 27.394 11.083 18.291 1.00 43.89 ? ? ? ? ? ? 1867 SER A O   1 
+ATOM   89   C CB  . SER A 1 12  ? 29.917 9.303  17.883 1.00 49.00 ? ? ? ? ? ? 1867 SER A CB  1 
+ATOM   90   O OG  . SER A 1 12  ? 29.813 8.468  19.024 1.00 54.91 ? ? ? ? ? ? 1867 SER A OG  1 
+ATOM   91   N N   . LYS A 1 13  ? 28.430 11.041 20.289 1.00 40.18 ? ? ? ? ? ? 1868 LYS A N   1 
+ATOM   92   C CA  . LYS A 1 13  ? 27.201 11.234 21.060 1.00 34.76 ? ? ? ? ? ? 1868 LYS A CA  1 
+ATOM   93   C C   . LYS A 1 13  ? 26.971 12.672 21.532 1.00 34.13 ? ? ? ? ? ? 1868 LYS A C   1 
+ATOM   94   O O   . LYS A 1 13  ? 25.970 12.949 22.194 1.00 35.15 ? ? ? ? ? ? 1868 LYS A O   1 
+ATOM   95   C CB  . LYS A 1 13  ? 27.201 10.318 22.285 1.00 36.58 ? ? ? ? ? ? 1868 LYS A CB  1 
+ATOM   96   C CG  . LYS A 1 13  ? 27.235 8.825  21.961 1.00 41.60 ? ? ? ? ? ? 1868 LYS A CG  1 
+ATOM   97   C CD  . LYS A 1 13  ? 27.236 8.002  23.238 1.00 58.66 ? ? ? ? ? ? 1868 LYS A CD  1 
+ATOM   98   N N   . ASP A 1 14  ? 27.893 13.577 21.220 1.00 36.26 ? ? ? ? ? ? 1869 ASP A N   1 
+ATOM   99   C CA  . ASP A 1 14  ? 27.801 14.944 21.749 1.00 33.90 ? ? ? ? ? ? 1869 ASP A CA  1 
+ATOM   100  C C   . ASP A 1 14  ? 26.513 15.639 21.331 1.00 36.45 ? ? ? ? ? ? 1869 ASP A C   1 
+ATOM   101  O O   . ASP A 1 14  ? 25.872 16.309 22.140 1.00 36.50 ? ? ? ? ? ? 1869 ASP A O   1 
+ATOM   102  C CB  . ASP A 1 14  ? 28.997 15.789 21.307 1.00 31.90 ? ? ? ? ? ? 1869 ASP A CB  1 
+ATOM   103  C CG  . ASP A 1 14  ? 30.280 15.382 21.990 1.00 43.01 ? ? ? ? ? ? 1869 ASP A CG  1 
+ATOM   104  O OD1 . ASP A 1 14  ? 30.229 14.494 22.871 1.00 40.83 ? ? ? ? ? ? 1869 ASP A OD1 1 
+ATOM   105  O OD2 . ASP A 1 14  ? 31.334 15.964 21.664 1.00 39.80 ? ? ? ? ? ? 1869 ASP A OD2 1 
+ATOM   106  N N   . LEU A 1 15  ? 26.130 15.476 20.069 1.00 32.79 ? ? ? ? ? ? 1870 LEU A N   1 
+ATOM   107  C CA  . LEU A 1 15  ? 24.940 16.138 19.558 1.00 32.80 ? ? ? ? ? ? 1870 LEU A CA  1 
+ATOM   108  C C   . LEU A 1 15  ? 23.701 15.689 20.336 1.00 35.75 ? ? ? ? ? ? 1870 LEU A C   1 
+ATOM   109  O O   . LEU A 1 15  ? 22.925 16.521 20.806 1.00 36.32 ? ? ? ? ? ? 1870 LEU A O   1 
+ATOM   110  C CB  . LEU A 1 15  ? 24.776 15.869 18.056 1.00 33.83 ? ? ? ? ? ? 1870 LEU A CB  1 
+ATOM   111  C CG  . LEU A 1 15  ? 23.582 16.530 17.365 1.00 31.69 ? ? ? ? ? ? 1870 LEU A CG  1 
+ATOM   112  C CD1 . LEU A 1 15  ? 23.636 18.058 17.479 1.00 32.12 ? ? ? ? ? ? 1870 LEU A CD1 1 
+ATOM   113  C CD2 . LEU A 1 15  ? 23.507 16.090 15.894 1.00 33.01 ? ? ? ? ? ? 1870 LEU A CD2 1 
+ATOM   114  N N   . ALA A 1 16  ? 23.540 14.380 20.504 1.00 34.82 ? ? ? ? ? ? 1871 ALA A N   1 
+ATOM   115  C CA  . ALA A 1 16  ? 22.419 13.834 21.269 1.00 36.97 ? ? ? ? ? ? 1871 ALA A CA  1 
+ATOM   116  C C   . ALA A 1 16  ? 22.444 14.286 22.729 1.00 37.20 ? ? ? ? ? ? 1871 ALA A C   1 
+ATOM   117  O O   . ALA A 1 16  ? 21.403 14.588 23.312 1.00 36.24 ? ? ? ? ? ? 1871 ALA A O   1 
+ATOM   118  C CB  . ALA A 1 16  ? 22.418 12.303 21.195 1.00 38.32 ? ? ? ? ? ? 1871 ALA A CB  1 
+ATOM   119  N N   . LEU A 1 17  ? 23.634 14.325 23.320 1.00 35.33 ? ? ? ? ? ? 1872 LEU A N   1 
+ATOM   120  C CA  . LEU A 1 17  ? 23.770 14.709 24.723 1.00 34.07 ? ? ? ? ? ? 1872 LEU A CA  1 
+ATOM   121  C C   . LEU A 1 17  ? 23.462 16.196 24.942 1.00 34.96 ? ? ? ? ? ? 1872 LEU A C   1 
+ATOM   122  O O   . LEU A 1 17  ? 22.828 16.574 25.930 1.00 37.32 ? ? ? ? ? ? 1872 LEU A O   1 
+ATOM   123  C CB  . LEU A 1 17  ? 25.175 14.377 25.229 1.00 35.88 ? ? ? ? ? ? 1872 LEU A CB  1 
+ATOM   124  C CG  . LEU A 1 17  ? 25.474 12.879 25.339 1.00 39.51 ? ? ? ? ? ? 1872 LEU A CG  1 
+ATOM   125  C CD1 . LEU A 1 17  ? 26.935 12.631 25.680 1.00 39.12 ? ? ? ? ? ? 1872 LEU A CD1 1 
+ATOM   126  C CD2 . LEU A 1 17  ? 24.560 12.228 26.367 1.00 44.69 ? ? ? ? ? ? 1872 LEU A CD2 1 
+ATOM   127  N N   . CYS A 1 18  ? 23.908 17.042 24.019 1.00 34.73 ? ? ? ? ? ? 1873 CYS A N   1 
+ATOM   128  C CA  . CYS A 1 18  ? 23.589 18.466 24.098 1.00 33.93 ? ? ? ? ? ? 1873 CYS A CA  1 
+ATOM   129  C C   . CYS A 1 18  ? 22.087 18.706 23.956 1.00 35.83 ? ? ? ? ? ? 1873 CYS A C   1 
+ATOM   130  O O   . CYS A 1 18  ? 21.515 19.559 24.648 1.00 32.57 ? ? ? ? ? ? 1873 CYS A O   1 
+ATOM   131  C CB  . CYS A 1 18  ? 24.360 19.249 23.033 1.00 32.12 ? ? ? ? ? ? 1873 CYS A CB  1 
+ATOM   132  S SG  . CYS A 1 18  ? 26.096 19.489 23.460 1.00 34.87 ? ? ? ? ? ? 1873 CYS A SG  1 
+ATOM   133  N N   . SER A 1 19  ? 21.456 17.945 23.063 1.00 31.48 ? ? ? ? ? ? 1874 SER A N   1 
+ATOM   134  C CA  . SER A 1 19  ? 20.009 18.011 22.874 1.00 29.68 ? ? ? ? ? ? 1874 SER A CA  1 
+ATOM   135  C C   . SER A 1 19  ? 19.281 17.609 24.153 1.00 31.01 ? ? ? ? ? ? 1874 SER A C   1 
+ATOM   136  O O   . SER A 1 19  ? 18.287 18.229 24.550 1.00 32.67 ? ? ? ? ? ? 1874 SER A O   1 
+ATOM   137  C CB  . SER A 1 19  ? 19.573 17.102 21.720 1.00 29.36 ? ? ? ? ? ? 1874 SER A CB  1 
+ATOM   138  O OG  . SER A 1 19  ? 18.157 17.090 21.603 1.00 37.19 ? ? ? ? ? ? 1874 SER A OG  1 
+ATOM   139  N N   . MET A 1 20  ? 19.779 16.554 24.786 1.00 32.48 ? ? ? ? ? ? 1875 MET A N   1 
+ATOM   140  C CA  . MET A 1 20  ? 19.235 16.095 26.056 1.00 34.40 ? ? ? ? ? ? 1875 MET A CA  1 
+ATOM   141  C C   . MET A 1 20  ? 19.314 17.198 27.110 1.00 34.75 ? ? ? ? ? ? 1875 MET A C   1 
+ATOM   142  O O   . MET A 1 20  ? 18.325 17.506 27.775 1.00 34.20 ? ? ? ? ? ? 1875 MET A O   1 
+ATOM   143  C CB  . MET A 1 20  ? 19.985 14.857 26.541 1.00 36.76 ? ? ? ? ? ? 1875 MET A CB  1 
+ATOM   144  C CG  . MET A 1 20  ? 19.603 14.413 27.948 1.00 46.65 ? ? ? ? ? ? 1875 MET A CG  1 
+ATOM   145  S SD  . MET A 1 20  ? 20.818 13.270 28.644 1.00 70.07 ? ? ? ? ? ? 1875 MET A SD  1 
+ATOM   146  C CE  . MET A 1 20  ? 22.116 14.422 29.100 1.00 61.11 ? ? ? ? ? ? 1875 MET A CE  1 
+ATOM   147  N N   . ILE A 1 21  ? 20.500 17.774 27.263 1.00 33.13 ? ? ? ? ? ? 1876 ILE A N   1 
+ATOM   148  C CA  . ILE A 1 21  ? 20.703 18.842 28.243 1.00 34.10 ? ? ? ? ? ? 1876 ILE A CA  1 
+ATOM   149  C C   . ILE A 1 21  ? 19.798 20.028 27.926 1.00 36.98 ? ? ? ? ? ? 1876 ILE A C   1 
+ATOM   150  O O   . ILE A 1 21  ? 19.167 20.590 28.820 1.00 31.38 ? ? ? ? ? ? 1876 ILE A O   1 
+ATOM   151  C CB  . ILE A 1 21  ? 22.178 19.300 28.292 1.00 32.28 ? ? ? ? ? ? 1876 ILE A CB  1 
+ATOM   152  C CG1 . ILE A 1 21  ? 23.049 18.201 28.905 1.00 35.04 ? ? ? ? ? ? 1876 ILE A CG1 1 
+ATOM   153  C CG2 . ILE A 1 21  ? 22.324 20.616 29.088 1.00 32.40 ? ? ? ? ? ? 1876 ILE A CG2 1 
+ATOM   154  C CD1 . ILE A 1 21  ? 24.534 18.477 28.796 1.00 37.95 ? ? ? ? ? ? 1876 ILE A CD1 1 
+ATOM   155  N N   . LEU A 1 22  ? 19.709 20.387 26.647 1.00 34.79 ? ? ? ? ? ? 1877 LEU A N   1 
+ATOM   156  C CA  . LEU A 1 22  ? 18.880 21.519 26.252 1.00 31.03 ? ? ? ? ? ? 1877 LEU A CA  1 
+ATOM   157  C C   . LEU A 1 22  ? 17.412 21.245 26.591 1.00 28.71 ? ? ? ? ? ? 1877 LEU A C   1 
+ATOM   158  O O   . LEU A 1 22  ? 16.713 22.127 27.087 1.00 29.96 ? ? ? ? ? ? 1877 LEU A O   1 
+ATOM   159  C CB  . LEU A 1 22  ? 19.060 21.827 24.757 1.00 26.02 ? ? ? ? ? ? 1877 LEU A CB  1 
+ATOM   160  C CG  . LEU A 1 22  ? 18.305 23.039 24.209 1.00 30.76 ? ? ? ? ? ? 1877 LEU A CG  1 
+ATOM   161  C CD1 . LEU A 1 22  ? 18.668 24.315 24.969 1.00 32.05 ? ? ? ? ? ? 1877 LEU A CD1 1 
+ATOM   162  C CD2 . LEU A 1 22  ? 18.606 23.191 22.724 1.00 29.86 ? ? ? ? ? ? 1877 LEU A CD2 1 
+ATOM   163  N N   . THR A 1 23  ? 16.960 20.010 26.365 1.00 29.80 ? ? ? ? ? ? 1878 THR A N   1 
+ATOM   164  C CA  . THR A 1 23  ? 15.604 19.615 26.744 1.00 30.76 ? ? ? ? ? ? 1878 THR A CA  1 
+ATOM   165  C C   . THR A 1 23  ? 15.344 19.795 28.249 1.00 36.26 ? ? ? ? ? ? 1878 THR A C   1 
+ATOM   166  O O   . THR A 1 23  ? 14.270 20.242 28.658 1.00 34.92 ? ? ? ? ? ? 1878 THR A O   1 
+ATOM   167  C CB  . THR A 1 23  ? 15.326 18.162 26.348 1.00 40.24 ? ? ? ? ? ? 1878 THR A CB  1 
+ATOM   168  O OG1 . THR A 1 23  ? 15.391 18.058 24.921 1.00 37.15 ? ? ? ? ? ? 1878 THR A OG1 1 
+ATOM   169  C CG2 . THR A 1 23  ? 13.950 17.736 26.815 1.00 39.79 ? ? ? ? ? ? 1878 THR A CG2 1 
+ATOM   170  N N   . GLU A 1 24  ? 16.334 19.469 29.069 1.00 34.69 ? ? ? ? ? ? 1879 GLU A N   1 
+ATOM   171  C CA  . GLU A 1 24  ? 16.199 19.640 30.517 1.00 38.00 ? ? ? ? ? ? 1879 GLU A CA  1 
+ATOM   172  C C   . GLU A 1 24  ? 16.114 21.121 30.904 1.00 31.79 ? ? ? ? ? ? 1879 GLU A C   1 
+ATOM   173  O O   . GLU A 1 24  ? 15.377 21.491 31.814 1.00 31.13 ? ? ? ? ? ? 1879 GLU A O   1 
+ATOM   174  C CB  . GLU A 1 24  ? 17.362 18.971 31.239 1.00 34.00 ? ? ? ? ? ? 1879 GLU A CB  1 
+ATOM   175  C CG  . GLU A 1 24  ? 17.390 17.463 31.079 1.00 42.64 ? ? ? ? ? ? 1879 GLU A CG  1 
+ATOM   176  C CD  . GLU A 1 24  ? 18.576 16.834 31.775 1.00 57.52 ? ? ? ? ? ? 1879 GLU A CD  1 
+ATOM   177  O OE1 . GLU A 1 24  ? 19.720 17.088 31.343 1.00 59.47 ? ? ? ? ? ? 1879 GLU A OE1 1 
+ATOM   178  O OE2 . GLU A 1 24  ? 18.365 16.095 32.759 1.00 68.87 ? ? ? ? ? ? 1879 GLU A OE2 1 
+ATOM   179  N N   A MET A 1 25  ? 16.894 21.946 30.214 0.50 29.83 ? ? ? ? ? ? 1880 MET A N   1 
+ATOM   180  N N   B MET A 1 25  ? 16.861 21.973 30.215 0.50 30.08 ? ? ? ? ? ? 1880 MET A N   1 
+ATOM   181  C CA  A MET A 1 25  ? 16.841 23.392 30.395 0.50 32.58 ? ? ? ? ? ? 1880 MET A CA  1 
+ATOM   182  C CA  B MET A 1 25  ? 16.776 23.400 30.498 0.50 33.02 ? ? ? ? ? ? 1880 MET A CA  1 
+ATOM   183  C C   A MET A 1 25  ? 15.470 23.918 30.013 0.50 35.67 ? ? ? ? ? ? 1880 MET A C   1 
+ATOM   184  C C   B MET A 1 25  ? 15.465 23.980 29.993 0.50 35.47 ? ? ? ? ? ? 1880 MET A C   1 
+ATOM   185  O O   A MET A 1 25  ? 14.851 24.668 30.763 0.50 33.66 ? ? ? ? ? ? 1880 MET A O   1 
+ATOM   186  O O   B MET A 1 25  ? 14.881 24.839 30.646 0.50 33.82 ? ? ? ? ? ? 1880 MET A O   1 
+ATOM   187  C CB  A MET A 1 25  ? 17.914 24.079 29.553 0.50 27.06 ? ? ? ? ? ? 1880 MET A CB  1 
+ATOM   188  C CB  B MET A 1 25  ? 17.952 24.144 29.886 0.50 29.17 ? ? ? ? ? ? 1880 MET A CB  1 
+ATOM   189  C CG  A MET A 1 25  ? 19.311 23.593 29.839 0.50 35.88 ? ? ? ? ? ? 1880 MET A CG  1 
+ATOM   190  C CG  B MET A 1 25  ? 19.275 23.710 30.456 0.50 37.28 ? ? ? ? ? ? 1880 MET A CG  1 
+ATOM   191  S SD  A MET A 1 25  ? 19.882 24.127 31.457 0.50 28.14 ? ? ? ? ? ? 1880 MET A SD  1 
+ATOM   192  S SD  B MET A 1 25  ? 20.611 24.675 29.769 0.50 50.99 ? ? ? ? ? ? 1880 MET A SD  1 
+ATOM   193  C CE  A MET A 1 25  ? 20.137 25.867 31.121 0.50 39.07 ? ? ? ? ? ? 1880 MET A CE  1 
+ATOM   194  C CE  B MET A 1 25  ? 20.256 26.231 30.541 0.50 42.98 ? ? ? ? ? ? 1880 MET A CE  1 
+ATOM   195  N N   . GLU A 1 26  ? 15.004 23.503 28.839 1.00 31.13 ? ? ? ? ? ? 1881 GLU A N   1 
+ATOM   196  C CA  . GLU A 1 26  ? 13.712 23.922 28.308 1.00 29.36 ? ? ? ? ? ? 1881 GLU A CA  1 
+ATOM   197  C C   . GLU A 1 26  ? 12.547 23.576 29.227 1.00 34.55 ? ? ? ? ? ? 1881 GLU A C   1 
+ATOM   198  O O   . GLU A 1 26  ? 11.561 24.305 29.284 1.00 32.96 ? ? ? ? ? ? 1881 GLU A O   1 
+ATOM   199  C CB  . GLU A 1 26  ? 13.474 23.286 26.935 1.00 32.30 ? ? ? ? ? ? 1881 GLU A CB  1 
+ATOM   200  C CG  . GLU A 1 26  ? 14.297 23.903 25.821 1.00 33.09 ? ? ? ? ? ? 1881 GLU A CG  1 
+ATOM   201  C CD  . GLU A 1 26  ? 14.350 23.025 24.574 1.00 38.42 ? ? ? ? ? ? 1881 GLU A CD  1 
+ATOM   202  O OE1 . GLU A 1 26  ? 13.998 21.829 24.664 1.00 39.73 ? ? ? ? ? ? 1881 GLU A OE1 1 
+ATOM   203  O OE2 . GLU A 1 26  ? 14.760 23.530 23.510 1.00 45.56 ? ? ? ? ? ? 1881 GLU A OE2 1 
+ATOM   204  N N   . THR A 1 27  ? 12.651 22.460 29.945 1.00 25.47 ? ? ? ? ? ? 1882 THR A N   1 
+ATOM   205  C CA  . THR A 1 27  ? 11.531 22.002 30.761 1.00 30.27 ? ? ? ? ? ? 1882 THR A CA  1 
+ATOM   206  C C   . THR A 1 27  ? 11.632 22.451 32.232 1.00 31.67 ? ? ? ? ? ? 1882 THR A C   1 
+ATOM   207  O O   . THR A 1 27  ? 10.696 22.263 33.008 1.00 34.96 ? ? ? ? ? ? 1882 THR A O   1 
+ATOM   208  C CB  . THR A 1 27  ? 11.394 20.460 30.692 1.00 33.67 ? ? ? ? ? ? 1882 THR A CB  1 
+ATOM   209  O OG1 . THR A 1 27  ? 12.640 19.855 31.035 1.00 38.66 ? ? ? ? ? ? 1882 THR A OG1 1 
+ATOM   210  C CG2 . THR A 1 27  ? 11.036 20.041 29.285 1.00 37.00 ? ? ? ? ? ? 1882 THR A CG2 1 
+ATOM   211  N N   . HIS A 1 28  ? 12.760 23.047 32.605 1.00 29.70 ? ? ? ? ? ? 1883 HIS A N   1 
+ATOM   212  C CA  . HIS A 1 28  ? 12.923 23.639 33.936 1.00 32.25 ? ? ? ? ? ? 1883 HIS A CA  1 
+ATOM   213  C C   . HIS A 1 28  ? 11.846 24.700 34.183 1.00 36.99 ? ? ? ? ? ? 1883 HIS A C   1 
+ATOM   214  O O   . HIS A 1 28  ? 11.529 25.487 33.293 1.00 30.64 ? ? ? ? ? ? 1883 HIS A O   1 
+ATOM   215  C CB  . HIS A 1 28  ? 14.320 24.251 34.061 1.00 30.48 ? ? ? ? ? ? 1883 HIS A CB  1 
+ATOM   216  C CG  . HIS A 1 28  ? 14.718 24.603 35.462 1.00 33.35 ? ? ? ? ? ? 1883 HIS A CG  1 
+ATOM   217  N ND1 . HIS A 1 28  ? 14.036 25.526 36.223 1.00 36.28 ? ? ? ? ? ? 1883 HIS A ND1 1 
+ATOM   218  C CD2 . HIS A 1 28  ? 15.757 24.182 36.222 1.00 30.70 ? ? ? ? ? ? 1883 HIS A CD2 1 
+ATOM   219  C CE1 . HIS A 1 28  ? 14.626 25.647 37.401 1.00 34.92 ? ? ? ? ? ? 1883 HIS A CE1 1 
+ATOM   220  N NE2 . HIS A 1 28  ? 15.672 24.843 37.425 1.00 39.78 ? ? ? ? ? ? 1883 HIS A NE2 1 
+ATOM   221  N N   . GLU A 1 29  ? 11.278 24.738 35.385 1.00 34.00 ? ? ? ? ? ? 1884 GLU A N   1 
+ATOM   222  C CA  . GLU A 1 29  ? 10.160 25.645 35.622 1.00 35.82 ? ? ? ? ? ? 1884 GLU A CA  1 
+ATOM   223  C C   . GLU A 1 29  ? 10.586 27.122 35.551 1.00 34.04 ? ? ? ? ? ? 1884 GLU A C   1 
+ATOM   224  O O   . GLU A 1 29  ? 9.746  28.004 35.369 1.00 36.46 ? ? ? ? ? ? 1884 GLU A O   1 
+ATOM   225  C CB  . GLU A 1 29  ? 9.483  25.343 36.969 1.00 49.90 ? ? ? ? ? ? 1884 GLU A CB  1 
+ATOM   226  C CG  . GLU A 1 29  ? 10.188 25.869 38.208 1.00 53.04 ? ? ? ? ? ? 1884 GLU A CG  1 
+ATOM   227  C CD  . GLU A 1 29  ? 9.307  25.790 39.459 1.00 68.03 ? ? ? ? ? ? 1884 GLU A CD  1 
+ATOM   228  O OE1 . GLU A 1 29  ? 8.420  26.658 39.624 1.00 64.96 ? ? ? ? ? ? 1884 GLU A OE1 1 
+ATOM   229  O OE2 . GLU A 1 29  ? 9.501  24.864 40.281 1.00 72.50 ? ? ? ? ? ? 1884 GLU A OE2 1 
+ATOM   230  N N   . ASP A 1 30  ? 11.882 27.391 35.668 1.00 30.65 ? ? ? ? ? ? 1885 ASP A N   1 
+ATOM   231  C CA  . ASP A 1 30  ? 12.369 28.766 35.569 1.00 33.88 ? ? ? ? ? ? 1885 ASP A CA  1 
+ATOM   232  C C   . ASP A 1 30  ? 12.913 29.088 34.175 1.00 33.81 ? ? ? ? ? ? 1885 ASP A C   1 
+ATOM   233  O O   . ASP A 1 30  ? 13.650 30.056 34.003 1.00 27.56 ? ? ? ? ? ? 1885 ASP A O   1 
+ATOM   234  C CB  . ASP A 1 30  ? 13.463 29.036 36.605 1.00 28.96 ? ? ? ? ? ? 1885 ASP A CB  1 
+ATOM   235  C CG  . ASP A 1 30  ? 12.966 28.918 38.042 1.00 31.94 ? ? ? ? ? ? 1885 ASP A CG  1 
+ATOM   236  O OD1 . ASP A 1 30  ? 11.742 28.962 38.296 1.00 35.25 ? ? ? ? ? ? 1885 ASP A OD1 1 
+ATOM   237  O OD2 . ASP A 1 30  ? 13.827 28.805 38.927 1.00 32.07 ? ? ? ? ? ? 1885 ASP A OD2 1 
+ATOM   238  N N   . ALA A 1 31  ? 12.558 28.279 33.181 1.00 29.61 ? ? ? ? ? ? 1886 ALA A N   1 
+ATOM   239  C CA  . ALA A 1 31  ? 13.059 28.492 31.823 1.00 28.61 ? ? ? ? ? ? 1886 ALA A CA  1 
+ATOM   240  C C   . ALA A 1 31  ? 12.324 29.611 31.095 1.00 26.63 ? ? ? ? ? ? 1886 ALA A C   1 
+ATOM   241  O O   . ALA A 1 31  ? 12.806 30.122 30.092 1.00 31.44 ? ? ? ? ? ? 1886 ALA A O   1 
+ATOM   242  C CB  . ALA A 1 31  ? 12.955 27.206 31.015 1.00 29.69 ? ? ? ? ? ? 1886 ALA A CB  1 
+ATOM   243  N N   . TRP A 1 32  ? 11.158 29.990 31.607 1.00 29.05 ? ? ? ? ? ? 1887 TRP A N   1 
+ATOM   244  C CA  . TRP A 1 32  ? 10.261 30.870 30.869 1.00 32.31 ? ? ? ? ? ? 1887 TRP A CA  1 
+ATOM   245  C C   . TRP A 1 32  ? 10.870 32.201 30.396 1.00 33.67 ? ? ? ? ? ? 1887 TRP A C   1 
+ATOM   246  O O   . TRP A 1 32  ? 10.483 32.682 29.337 1.00 34.21 ? ? ? ? ? ? 1887 TRP A O   1 
+ATOM   247  C CB  . TRP A 1 32  ? 8.996  31.146 31.691 1.00 34.38 ? ? ? ? ? ? 1887 TRP A CB  1 
+ATOM   248  C CG  . TRP A 1 32  ? 9.226  31.762 33.047 1.00 33.00 ? ? ? ? ? ? 1887 TRP A CG  1 
+ATOM   249  C CD1 . TRP A 1 32  ? 9.416  31.096 34.231 1.00 28.53 ? ? ? ? ? ? 1887 TRP A CD1 1 
+ATOM   250  C CD2 . TRP A 1 32  ? 9.259  33.161 33.360 1.00 34.53 ? ? ? ? ? ? 1887 TRP A CD2 1 
+ATOM   251  N NE1 . TRP A 1 32  ? 9.578  32.000 35.257 1.00 30.56 ? ? ? ? ? ? 1887 TRP A NE1 1 
+ATOM   252  C CE2 . TRP A 1 32  ? 9.492  33.273 34.749 1.00 35.49 ? ? ? ? ? ? 1887 TRP A CE2 1 
+ATOM   253  C CE3 . TRP A 1 32  ? 9.139  34.330 32.600 1.00 33.60 ? ? ? ? ? ? 1887 TRP A CE3 1 
+ATOM   254  C CZ2 . TRP A 1 32  ? 9.594  34.509 35.394 1.00 35.74 ? ? ? ? ? ? 1887 TRP A CZ2 1 
+ATOM   255  C CZ3 . TRP A 1 32  ? 9.239  35.559 33.242 1.00 34.23 ? ? ? ? ? ? 1887 TRP A CZ3 1 
+ATOM   256  C CH2 . TRP A 1 32  ? 9.463  35.638 34.625 1.00 35.07 ? ? ? ? ? ? 1887 TRP A CH2 1 
+ATOM   257  N N   . PRO A 1 33  ? 11.829 32.792 31.146 1.00 28.38 ? ? ? ? ? ? 1888 PRO A N   1 
+ATOM   258  C CA  . PRO A 1 33  ? 12.350 34.041 30.578 1.00 27.50 ? ? ? ? ? ? 1888 PRO A CA  1 
+ATOM   259  C C   . PRO A 1 33  ? 13.239 33.826 29.347 1.00 26.54 ? ? ? ? ? ? 1888 PRO A C   1 
+ATOM   260  O O   . PRO A 1 33  ? 13.584 34.806 28.679 1.00 27.61 ? ? ? ? ? ? 1888 PRO A O   1 
+ATOM   261  C CB  . PRO A 1 33  ? 13.180 34.638 31.733 1.00 28.19 ? ? ? ? ? ? 1888 PRO A CB  1 
+ATOM   262  C CG  . PRO A 1 33  ? 12.712 33.929 32.972 1.00 28.71 ? ? ? ? ? ? 1888 PRO A CG  1 
+ATOM   263  C CD  . PRO A 1 33  ? 12.373 32.550 32.496 1.00 25.46 ? ? ? ? ? ? 1888 PRO A CD  1 
+ATOM   264  N N   . PHE A 1 34  ? 13.588 32.572 29.062 1.00 28.06 ? ? ? ? ? ? 1889 PHE A N   1 
+ATOM   265  C CA  . PHE A 1 34  ? 14.655 32.264 28.111 1.00 27.14 ? ? ? ? ? ? 1889 PHE A CA  1 
+ATOM   266  C C   . PHE A 1 34  ? 14.199 31.419 26.939 1.00 26.62 ? ? ? ? ? ? 1889 PHE A C   1 
+ATOM   267  O O   . PHE A 1 34  ? 15.010 31.052 26.090 1.00 27.89 ? ? ? ? ? ? 1889 PHE A O   1 
+ATOM   268  C CB  . PHE A 1 34  ? 15.799 31.547 28.835 1.00 30.41 ? ? ? ? ? ? 1889 PHE A CB  1 
+ATOM   269  C CG  . PHE A 1 34  ? 16.170 32.186 30.136 1.00 29.02 ? ? ? ? ? ? 1889 PHE A CG  1 
+ATOM   270  C CD1 . PHE A 1 34  ? 16.737 33.452 30.154 1.00 28.32 ? ? ? ? ? ? 1889 PHE A CD1 1 
+ATOM   271  C CD2 . PHE A 1 34  ? 15.933 31.541 31.339 1.00 26.75 ? ? ? ? ? ? 1889 PHE A CD2 1 
+ATOM   272  C CE1 . PHE A 1 34  ? 17.069 34.073 31.359 1.00 27.87 ? ? ? ? ? ? 1889 PHE A CE1 1 
+ATOM   273  C CE2 . PHE A 1 34  ? 16.267 32.147 32.548 1.00 28.96 ? ? ? ? ? ? 1889 PHE A CE2 1 
+ATOM   274  C CZ  . PHE A 1 34  ? 16.840 33.419 32.556 1.00 30.62 ? ? ? ? ? ? 1889 PHE A CZ  1 
+ATOM   275  N N   . LEU A 1 35  ? 12.913 31.083 26.901 1.00 27.89 ? ? ? ? ? ? 1890 LEU A N   1 
+ATOM   276  C CA  . LEU A 1 35  ? 12.435 30.097 25.937 1.00 31.41 ? ? ? ? ? ? 1890 LEU A CA  1 
+ATOM   277  C C   . LEU A 1 35  ? 12.409 30.654 24.523 1.00 36.61 ? ? ? ? ? ? 1890 LEU A C   1 
+ATOM   278  O O   . LEU A 1 35  ? 12.694 29.937 23.567 1.00 29.63 ? ? ? ? ? ? 1890 LEU A O   1 
+ATOM   279  C CB  . LEU A 1 35  ? 11.042 29.594 26.326 1.00 29.84 ? ? ? ? ? ? 1890 LEU A CB  1 
+ATOM   280  C CG  . LEU A 1 35  ? 11.004 28.701 27.566 1.00 32.90 ? ? ? ? ? ? 1890 LEU A CG  1 
+ATOM   281  C CD1 . LEU A 1 35  ? 9.569  28.385 27.953 1.00 34.21 ? ? ? ? ? ? 1890 LEU A CD1 1 
+ATOM   282  C CD2 . LEU A 1 35  ? 11.793 27.421 27.314 1.00 39.56 ? ? ? ? ? ? 1890 LEU A CD2 1 
+ATOM   283  N N   . LEU A 1 36  ? 12.075 31.934 24.407 1.00 28.94 ? ? ? ? ? ? 1891 LEU A N   1 
+ATOM   284  C CA  . LEU A 1 36  ? 11.895 32.575 23.112 1.00 30.89 ? ? ? ? ? ? 1891 LEU A CA  1 
+ATOM   285  C C   . LEU A 1 36  ? 12.724 33.845 23.030 1.00 33.60 ? ? ? ? ? ? 1891 LEU A C   1 
+ATOM   286  O O   . LEU A 1 36  ? 13.086 34.417 24.064 1.00 29.30 ? ? ? ? ? ? 1891 LEU A O   1 
+ATOM   287  C CB  . LEU A 1 36  ? 10.419 32.893 22.884 1.00 35.28 ? ? ? ? ? ? 1891 LEU A CB  1 
+ATOM   288  C CG  . LEU A 1 36  ? 9.467  31.700 22.830 1.00 35.57 ? ? ? ? ? ? 1891 LEU A CG  1 
+ATOM   289  C CD1 . LEU A 1 36  ? 8.034  32.196 22.731 1.00 39.91 ? ? ? ? ? ? 1891 LEU A CD1 1 
+ATOM   290  C CD2 . LEU A 1 36  ? 9.805  30.796 21.657 1.00 41.14 ? ? ? ? ? ? 1891 LEU A CD2 1 
+ATOM   291  N N   . PRO A 1 37  ? 13.034 34.296 21.801 1.00 29.55 ? ? ? ? ? ? 1892 PRO A N   1 
+ATOM   292  C CA  . PRO A 1 37  ? 13.814 35.533 21.691 1.00 27.16 ? ? ? ? ? ? 1892 PRO A CA  1 
+ATOM   293  C C   . PRO A 1 37  ? 13.045 36.734 22.242 1.00 25.28 ? ? ? ? ? ? 1892 PRO A C   1 
+ATOM   294  O O   . PRO A 1 37  ? 11.820 36.781 22.132 1.00 30.03 ? ? ? ? ? ? 1892 PRO A O   1 
+ATOM   295  C CB  . PRO A 1 37  ? 14.056 35.674 20.176 1.00 31.06 ? ? ? ? ? ? 1892 PRO A CB  1 
+ATOM   296  C CG  . PRO A 1 37  ? 13.058 34.797 19.530 1.00 30.15 ? ? ? ? ? ? 1892 PRO A CG  1 
+ATOM   297  C CD  . PRO A 1 37  ? 12.741 33.696 20.481 1.00 27.23 ? ? ? ? ? ? 1892 PRO A CD  1 
+ATOM   298  N N   . VAL A 1 38  ? 13.758 37.666 22.864 1.00 29.36 ? ? ? ? ? ? 1893 VAL A N   1 
+ATOM   299  C CA  . VAL A 1 38  ? 13.161 38.932 23.290 1.00 31.65 ? ? ? ? ? ? 1893 VAL A CA  1 
+ATOM   300  C C   . VAL A 1 38  ? 12.647 39.692 22.076 1.00 39.03 ? ? ? ? ? ? 1893 VAL A C   1 
+ATOM   301  O O   . VAL A 1 38  ? 13.336 39.764 21.056 1.00 37.18 ? ? ? ? ? ? 1893 VAL A O   1 
+ATOM   302  C CB  . VAL A 1 38  ? 14.175 39.803 24.058 1.00 35.58 ? ? ? ? ? ? 1893 VAL A CB  1 
+ATOM   303  C CG1 . VAL A 1 38  ? 13.634 41.215 24.274 1.00 37.63 ? ? ? ? ? ? 1893 VAL A CG1 1 
+ATOM   304  C CG2 . VAL A 1 38  ? 14.528 39.150 25.388 1.00 34.79 ? ? ? ? ? ? 1893 VAL A CG2 1 
+ATOM   305  N N   . ASN A 1 39  ? 11.425 40.216 22.168 1.00 39.34 ? ? ? ? ? ? 1894 ASN A N   1 
+ATOM   306  C CA  . ASN A 1 39  ? 10.860 41.038 21.102 1.00 47.30 ? ? ? ? ? ? 1894 ASN A CA  1 
+ATOM   307  C C   . ASN A 1 39  ? 11.486 42.426 21.145 1.00 43.68 ? ? ? ? ? ? 1894 ASN A C   1 
+ATOM   308  O O   . ASN A 1 39  ? 11.179 43.228 22.023 1.00 43.55 ? ? ? ? ? ? 1894 ASN A O   1 
+ATOM   309  C CB  . ASN A 1 39  ? 9.335  41.130 21.229 1.00 47.40 ? ? ? ? ? ? 1894 ASN A CB  1 
+ATOM   310  C CG  . ASN A 1 39  ? 8.686  41.844 20.053 1.00 50.62 ? ? ? ? ? ? 1894 ASN A CG  1 
+ATOM   311  O OD1 . ASN A 1 39  ? 9.260  42.764 19.468 1.00 51.95 ? ? ? ? ? ? 1894 ASN A OD1 1 
+ATOM   312  N ND2 . ASN A 1 39  ? 7.479  41.424 19.705 1.00 48.95 ? ? ? ? ? ? 1894 ASN A ND2 1 
+ATOM   313  N N   . LEU A 1 40  ? 12.356 42.701 20.179 1.00 42.52 ? ? ? ? ? ? 1895 LEU A N   1 
+ATOM   314  C CA  . LEU A 1 40  ? 13.168 43.910 20.186 1.00 40.45 ? ? ? ? ? ? 1895 LEU A CA  1 
+ATOM   315  C C   . LEU A 1 40  ? 12.364 45.167 19.869 1.00 41.59 ? ? ? ? ? ? 1895 LEU A C   1 
+ATOM   316  O O   . LEU A 1 40  ? 12.845 46.289 20.060 1.00 40.45 ? ? ? ? ? ? 1895 LEU A O   1 
+ATOM   317  C CB  . LEU A 1 40  ? 14.322 43.760 19.193 1.00 42.57 ? ? ? ? ? ? 1895 LEU A CB  1 
+ATOM   318  C CG  . LEU A 1 40  ? 15.246 42.566 19.440 1.00 44.45 ? ? ? ? ? ? 1895 LEU A CG  1 
+ATOM   319  C CD1 . LEU A 1 40  ? 16.345 42.506 18.379 1.00 48.93 ? ? ? ? ? ? 1895 LEU A CD1 1 
+ATOM   320  C CD2 . LEU A 1 40  ? 15.835 42.620 20.854 1.00 40.29 ? ? ? ? ? ? 1895 LEU A CD2 1 
+ATOM   321  N N   . LYS A 1 41  ? 11.138 44.982 19.391 1.00 49.11 ? ? ? ? ? ? 1896 LYS A N   1 
+ATOM   322  C CA  . LYS A 1 41  ? 10.271 46.113 19.099 1.00 57.85 ? ? ? ? ? ? 1896 LYS A CA  1 
+ATOM   323  C C   . LYS A 1 41  ? 9.396  46.467 20.298 1.00 58.57 ? ? ? ? ? ? 1896 LYS A C   1 
+ATOM   324  O O   . LYS A 1 41  ? 8.780  47.529 20.324 1.00 58.04 ? ? ? ? ? ? 1896 LYS A O   1 
+ATOM   325  C CB  . LYS A 1 41  ? 9.395  45.822 17.876 1.00 61.41 ? ? ? ? ? ? 1896 LYS A CB  1 
+ATOM   326  C CG  . LYS A 1 41  ? 10.183 45.455 16.627 1.00 66.66 ? ? ? ? ? ? 1896 LYS A CG  1 
+ATOM   327  C CD  . LYS A 1 41  ? 9.506  45.982 15.364 1.00 80.59 ? ? ? ? ? ? 1896 LYS A CD  1 
+ATOM   328  C CE  . LYS A 1 41  ? 8.207  45.248 15.057 1.00 89.11 ? ? ? ? ? ? 1896 LYS A CE  1 
+ATOM   329  N NZ  . LYS A 1 41  ? 8.440  43.883 14.504 1.00 90.85 ? ? ? ? ? ? 1896 LYS A NZ  1 
+ATOM   330  N N   . LEU A 1 42  ? 9.344  45.589 21.296 1.00 51.72 ? ? ? ? ? ? 1897 LEU A N   1 
+ATOM   331  C CA  . LEU A 1 42  ? 8.461  45.825 22.437 1.00 56.54 ? ? ? ? ? ? 1897 LEU A CA  1 
+ATOM   332  C C   . LEU A 1 42  ? 9.205  46.067 23.744 1.00 55.52 ? ? ? ? ? ? 1897 LEU A C   1 
+ATOM   333  O O   . LEU A 1 42  ? 8.626  46.570 24.704 1.00 60.78 ? ? ? ? ? ? 1897 LEU A O   1 
+ATOM   334  C CB  . LEU A 1 42  ? 7.495  44.656 22.615 1.00 52.50 ? ? ? ? ? ? 1897 LEU A CB  1 
+ATOM   335  C CG  . LEU A 1 42  ? 6.563  44.373 21.433 1.00 64.69 ? ? ? ? ? ? 1897 LEU A CG  1 
+ATOM   336  C CD1 . LEU A 1 42  ? 5.508  43.344 21.818 1.00 69.25 ? ? ? ? ? ? 1897 LEU A CD1 1 
+ATOM   337  C CD2 . LEU A 1 42  ? 5.915  45.651 20.923 1.00 68.57 ? ? ? ? ? ? 1897 LEU A CD2 1 
+ATOM   338  N N   . VAL A 1 43  ? 10.484 45.716 23.784 1.00 45.98 ? ? ? ? ? ? 1898 VAL A N   1 
+ATOM   339  C CA  . VAL A 1 43  ? 11.266 45.878 25.004 1.00 42.42 ? ? ? ? ? ? 1898 VAL A CA  1 
+ATOM   340  C C   . VAL A 1 43  ? 12.303 46.989 24.850 1.00 41.98 ? ? ? ? ? ? 1898 VAL A C   1 
+ATOM   341  O O   . VAL A 1 43  ? 13.318 46.808 24.174 1.00 39.52 ? ? ? ? ? ? 1898 VAL A O   1 
+ATOM   342  C CB  . VAL A 1 43  ? 11.976 44.571 25.396 1.00 42.66 ? ? ? ? ? ? 1898 VAL A CB  1 
+ATOM   343  C CG1 . VAL A 1 43  ? 12.746 44.759 26.696 1.00 42.08 ? ? ? ? ? ? 1898 VAL A CG1 1 
+ATOM   344  C CG2 . VAL A 1 43  ? 10.965 43.431 25.515 1.00 40.06 ? ? ? ? ? ? 1898 VAL A CG2 1 
+ATOM   345  N N   . PRO A 1 44  ? 12.045 48.151 25.476 1.00 40.07 ? ? ? ? ? ? 1899 PRO A N   1 
+ATOM   346  C CA  . PRO A 1 44  ? 12.974 49.281 25.405 1.00 40.44 ? ? ? ? ? ? 1899 PRO A CA  1 
+ATOM   347  C C   . PRO A 1 44  ? 14.377 48.914 25.877 1.00 41.94 ? ? ? ? ? ? 1899 PRO A C   1 
+ATOM   348  O O   . PRO A 1 44  ? 14.525 48.134 26.821 1.00 38.75 ? ? ? ? ? ? 1899 PRO A O   1 
+ATOM   349  C CB  . PRO A 1 44  ? 12.337 50.325 26.338 1.00 47.77 ? ? ? ? ? ? 1899 PRO A CB  1 
+ATOM   350  C CG  . PRO A 1 44  ? 10.892 49.974 26.362 1.00 50.19 ? ? ? ? ? ? 1899 PRO A CG  1 
+ATOM   351  C CD  . PRO A 1 44  ? 10.840 48.473 26.260 1.00 42.99 ? ? ? ? ? ? 1899 PRO A CD  1 
+ATOM   352  N N   . GLY A 1 45  ? 15.389 49.449 25.202 1.00 33.46 ? ? ? ? ? ? 1900 GLY A N   1 
+ATOM   353  C CA  . GLY A 1 45  ? 16.771 49.217 25.580 1.00 32.23 ? ? ? ? ? ? 1900 GLY A CA  1 
+ATOM   354  C C   . GLY A 1 45  ? 17.421 47.944 25.066 1.00 33.36 ? ? ? ? ? ? 1900 GLY A C   1 
+ATOM   355  O O   . GLY A 1 45  ? 18.625 47.926 24.815 1.00 35.28 ? ? ? ? ? ? 1900 GLY A O   1 
+ATOM   356  N N   . TYR A 1 46  ? 16.646 46.876 24.903 1.00 32.27 ? ? ? ? ? ? 1901 TYR A N   1 
+ATOM   357  C CA  . TYR A 1 46  ? 17.257 45.557 24.700 1.00 30.42 ? ? ? ? ? ? 1901 TYR A CA  1 
+ATOM   358  C C   . TYR A 1 46  ? 18.127 45.468 23.444 1.00 36.14 ? ? ? ? ? ? 1901 TYR A C   1 
+ATOM   359  O O   . TYR A 1 46  ? 19.244 44.943 23.500 1.00 30.38 ? ? ? ? ? ? 1901 TYR A O   1 
+ATOM   360  C CB  . TYR A 1 46  ? 16.198 44.459 24.660 1.00 34.29 ? ? ? ? ? ? 1901 TYR A CB  1 
+ATOM   361  C CG  . TYR A 1 46  ? 16.781 43.117 25.064 1.00 35.59 ? ? ? ? ? ? 1901 TYR A CG  1 
+ATOM   362  C CD1 . TYR A 1 46  ? 17.358 42.268 24.123 1.00 30.79 ? ? ? ? ? ? 1901 TYR A CD1 1 
+ATOM   363  C CD2 . TYR A 1 46  ? 16.801 42.728 26.401 1.00 30.40 ? ? ? ? ? ? 1901 TYR A CD2 1 
+ATOM   364  C CE1 . TYR A 1 46  ? 17.915 41.043 24.505 1.00 31.12 ? ? ? ? ? ? 1901 TYR A CE1 1 
+ATOM   365  C CE2 . TYR A 1 46  ? 17.353 41.512 26.791 1.00 34.55 ? ? ? ? ? ? 1901 TYR A CE2 1 
+ATOM   366  C CZ  . TYR A 1 46  ? 17.909 40.678 25.843 1.00 36.23 ? ? ? ? ? ? 1901 TYR A CZ  1 
+ATOM   367  O OH  . TYR A 1 46  ? 18.459 39.483 26.247 1.00 32.02 ? ? ? ? ? ? 1901 TYR A OH  1 
+ATOM   368  N N   . LYS A 1 47  ? 17.634 45.987 22.322 1.00 37.30 ? ? ? ? ? ? 1902 LYS A N   1 
+ATOM   369  C CA  . LYS A 1 47  ? 18.369 45.871 21.066 1.00 37.06 ? ? ? ? ? ? 1902 LYS A CA  1 
+ATOM   370  C C   . LYS A 1 47  ? 19.692 46.641 21.093 1.00 32.98 ? ? ? ? ? ? 1902 LYS A C   1 
+ATOM   371  O O   . LYS A 1 47  ? 20.710 46.152 20.601 1.00 38.46 ? ? ? ? ? ? 1902 LYS A O   1 
+ATOM   372  C CB  . LYS A 1 47  ? 17.509 46.348 19.890 1.00 37.99 ? ? ? ? ? ? 1902 LYS A CB  1 
+ATOM   373  C CG  . LYS A 1 47  ? 18.141 46.051 18.527 1.00 40.43 ? ? ? ? ? ? 1902 LYS A CG  1 
+ATOM   374  C CD  . LYS A 1 47  ? 17.258 46.494 17.371 1.00 42.73 ? ? ? ? ? ? 1902 LYS A CD  1 
+ATOM   375  C CE  . LYS A 1 47  ? 17.951 46.245 16.036 1.00 50.85 ? ? ? ? ? ? 1902 LYS A CE  1 
+ATOM   376  N NZ  . LYS A 1 47  ? 17.207 46.890 14.923 1.00 57.37 ? ? ? ? ? ? 1902 LYS A NZ  1 
+ATOM   377  N N   . LYS A 1 48  ? 19.683 47.838 21.673 1.00 32.27 ? ? ? ? ? ? 1903 LYS A N   1 
+ATOM   378  C CA  . LYS A 1 48  ? 20.895 48.649 21.746 1.00 32.40 ? ? ? ? ? ? 1903 LYS A CA  1 
+ATOM   379  C C   . LYS A 1 48  ? 21.882 48.107 22.787 1.00 35.38 ? ? ? ? ? ? 1903 LYS A C   1 
+ATOM   380  O O   . LYS A 1 48  ? 23.098 48.167 22.607 1.00 36.08 ? ? ? ? ? ? 1903 LYS A O   1 
+ATOM   381  C CB  . LYS A 1 48  ? 20.543 50.111 22.073 1.00 33.13 ? ? ? ? ? ? 1903 LYS A CB  1 
+ATOM   382  C CG  . LYS A 1 48  ? 21.739 51.039 22.110 1.00 34.50 ? ? ? ? ? ? 1903 LYS A CG  1 
+ATOM   383  C CD  . LYS A 1 48  ? 22.399 51.137 20.737 1.00 39.54 ? ? ? ? ? ? 1903 LYS A CD  1 
+ATOM   384  C CE  . LYS A 1 48  ? 23.422 52.266 20.683 1.00 37.79 ? ? ? ? ? ? 1903 LYS A CE  1 
+ATOM   385  N NZ  . LYS A 1 48  ? 22.789 53.615 20.601 1.00 37.62 ? ? ? ? ? ? 1903 LYS A NZ  1 
+ATOM   386  N N   . VAL A 1 49  ? 21.351 47.577 23.880 1.00 30.58 ? ? ? ? ? ? 1904 VAL A N   1 
+ATOM   387  C CA  . VAL A 1 49  ? 22.188 47.139 24.992 1.00 32.15 ? ? ? ? ? ? 1904 VAL A CA  1 
+ATOM   388  C C   . VAL A 1 49  ? 22.761 45.735 24.761 1.00 34.56 ? ? ? ? ? ? 1904 VAL A C   1 
+ATOM   389  O O   . VAL A 1 49  ? 23.956 45.509 24.950 1.00 33.83 ? ? ? ? ? ? 1904 VAL A O   1 
+ATOM   390  C CB  . VAL A 1 49  ? 21.398 47.184 26.317 1.00 30.41 ? ? ? ? ? ? 1904 VAL A CB  1 
+ATOM   391  C CG1 . VAL A 1 49  ? 22.159 46.483 27.445 1.00 31.36 ? ? ? ? ? ? 1904 VAL A CG1 1 
+ATOM   392  C CG2 . VAL A 1 49  ? 21.081 48.650 26.706 1.00 30.57 ? ? ? ? ? ? 1904 VAL A CG2 1 
+ATOM   393  N N   . ILE A 1 50  ? 21.920 44.799 24.336 1.00 30.97 ? ? ? ? ? ? 1905 ILE A N   1 
+ATOM   394  C CA  . ILE A 1 50  ? 22.343 43.402 24.225 1.00 32.63 ? ? ? ? ? ? 1905 ILE A CA  1 
+ATOM   395  C C   . ILE A 1 50  ? 22.824 43.113 22.811 1.00 36.52 ? ? ? ? ? ? 1905 ILE A C   1 
+ATOM   396  O O   . ILE A 1 50  ? 22.019 42.933 21.902 1.00 33.48 ? ? ? ? ? ? 1905 ILE A O   1 
+ATOM   397  C CB  . ILE A 1 50  ? 21.203 42.441 24.604 1.00 31.55 ? ? ? ? ? ? 1905 ILE A CB  1 
+ATOM   398  C CG1 . ILE A 1 50  ? 20.724 42.736 26.029 1.00 35.63 ? ? ? ? ? ? 1905 ILE A CG1 1 
+ATOM   399  C CG2 . ILE A 1 50  ? 21.638 40.961 24.450 1.00 25.75 ? ? ? ? ? ? 1905 ILE A CG2 1 
+ATOM   400  C CD1 . ILE A 1 50  ? 21.817 42.611 27.087 1.00 30.40 ? ? ? ? ? ? 1905 ILE A CD1 1 
+ATOM   401  N N   . LYS A 1 51  ? 24.140 43.070 22.635 1.00 32.04 ? ? ? ? ? ? 1906 LYS A N   1 
+ATOM   402  C CA  . LYS A 1 51  ? 24.726 43.008 21.302 1.00 37.03 ? ? ? ? ? ? 1906 LYS A CA  1 
+ATOM   403  C C   . LYS A 1 51  ? 24.508 41.665 20.624 1.00 42.60 ? ? ? ? ? ? 1906 LYS A C   1 
+ATOM   404  O O   . LYS A 1 51  ? 24.452 41.591 19.401 1.00 36.95 ? ? ? ? ? ? 1906 LYS A O   1 
+ATOM   405  C CB  . LYS A 1 51  ? 26.222 43.317 21.366 1.00 43.52 ? ? ? ? ? ? 1906 LYS A CB  1 
+ATOM   406  C CG  . LYS A 1 51  ? 26.531 44.687 21.956 1.00 51.77 ? ? ? ? ? ? 1906 LYS A CG  1 
+ATOM   407  C CD  . LYS A 1 51  ? 25.713 45.780 21.283 1.00 56.04 ? ? ? ? ? ? 1906 LYS A CD  1 
+ATOM   408  C CE  . LYS A 1 51  ? 26.063 47.155 21.843 1.00 60.15 ? ? ? ? ? ? 1906 LYS A CE  1 
+ATOM   409  N NZ  . LYS A 1 51  ? 25.459 48.252 21.038 1.00 68.25 ? ? ? ? ? ? 1906 LYS A NZ  1 
+ATOM   410  N N   . LYS A 1 52  ? 24.400 40.606 21.421 1.00 32.40 ? ? ? ? ? ? 1907 LYS A N   1 
+ATOM   411  C CA  . LYS A 1 52  ? 24.177 39.271 20.878 1.00 38.26 ? ? ? ? ? ? 1907 LYS A CA  1 
+ATOM   412  C C   . LYS A 1 52  ? 23.059 38.573 21.636 1.00 32.50 ? ? ? ? ? ? 1907 LYS A C   1 
+ATOM   413  O O   . LYS A 1 52  ? 23.324 37.822 22.566 1.00 32.01 ? ? ? ? ? ? 1907 LYS A O   1 
+ATOM   414  C CB  . LYS A 1 52  ? 25.451 38.425 20.954 1.00 40.79 ? ? ? ? ? ? 1907 LYS A CB  1 
+ATOM   415  C CG  . LYS A 1 52  ? 26.658 38.995 20.226 1.00 52.88 ? ? ? ? ? ? 1907 LYS A CG  1 
+ATOM   416  C CD  . LYS A 1 52  ? 27.825 38.022 20.317 1.00 64.25 ? ? ? ? ? ? 1907 LYS A CD  1 
+ATOM   417  C CE  . LYS A 1 52  ? 29.103 38.594 19.730 1.00 70.75 ? ? ? ? ? ? 1907 LYS A CE  1 
+ATOM   418  N NZ  . LYS A 1 52  ? 30.235 37.639 19.894 1.00 74.50 ? ? ? ? ? ? 1907 LYS A NZ  1 
+ATOM   419  N N   . PRO A 1 53  ? 21.805 38.835 21.249 1.00 34.48 ? ? ? ? ? ? 1908 PRO A N   1 
+ATOM   420  C CA  . PRO A 1 53  ? 20.656 38.155 21.850 1.00 35.95 ? ? ? ? ? ? 1908 PRO A CA  1 
+ATOM   421  C C   . PRO A 1 53  ? 20.735 36.641 21.643 1.00 32.19 ? ? ? ? ? ? 1908 PRO A C   1 
+ATOM   422  O O   . PRO A 1 53  ? 21.178 36.187 20.593 1.00 29.35 ? ? ? ? ? ? 1908 PRO A O   1 
+ATOM   423  C CB  . PRO A 1 53  ? 19.462 38.744 21.090 1.00 32.29 ? ? ? ? ? ? 1908 PRO A CB  1 
+ATOM   424  C CG  . PRO A 1 53  ? 19.952 40.057 20.564 1.00 35.82 ? ? ? ? ? ? 1908 PRO A CG  1 
+ATOM   425  C CD  . PRO A 1 53  ? 21.391 39.810 20.226 1.00 40.19 ? ? ? ? ? ? 1908 PRO A CD  1 
+ATOM   426  N N   . MET A 1 54  ? 20.317 35.874 22.638 1.00 31.14 ? ? ? ? ? ? 1909 MET A N   1 
+ATOM   427  C CA  . MET A 1 54  ? 20.273 34.420 22.502 1.00 31.21 ? ? ? ? ? ? 1909 MET A CA  1 
+ATOM   428  C C   . MET A 1 54  ? 19.186 33.889 23.421 1.00 36.10 ? ? ? ? ? ? 1909 MET A C   1 
+ATOM   429  O O   . MET A 1 54  ? 18.899 34.476 24.464 1.00 32.24 ? ? ? ? ? ? 1909 MET A O   1 
+ATOM   430  C CB  . MET A 1 54  ? 21.632 33.786 22.821 1.00 27.46 ? ? ? ? ? ? 1909 MET A CB  1 
+ATOM   431  C CG  . MET A 1 54  ? 21.703 32.276 22.560 1.00 30.39 ? ? ? ? ? ? 1909 MET A CG  1 
+ATOM   432  S SD  . MET A 1 54  ? 21.231 31.849 20.860 1.00 31.61 ? ? ? ? ? ? 1909 MET A SD  1 
+ATOM   433  C CE  . MET A 1 54  ? 22.413 32.841 19.935 1.00 31.97 ? ? ? ? ? ? 1909 MET A CE  1 
+ATOM   434  N N   . ASP A 1 55  ? 18.559 32.797 23.006 1.00 28.10 ? ? ? ? ? ? 1910 ASP A N   1 
+ATOM   435  C CA  . ASP A 1 55  ? 17.488 32.167 23.764 1.00 26.44 ? ? ? ? ? ? 1910 ASP A CA  1 
+ATOM   436  C C   . ASP A 1 55  ? 17.478 30.676 23.438 1.00 27.11 ? ? ? ? ? ? 1910 ASP A C   1 
+ATOM   437  O O   . ASP A 1 55  ? 18.103 30.252 22.462 1.00 28.75 ? ? ? ? ? ? 1910 ASP A O   1 
+ATOM   438  C CB  . ASP A 1 55  ? 16.142 32.797 23.420 1.00 30.13 ? ? ? ? ? ? 1910 ASP A CB  1 
+ATOM   439  C CG  . ASP A 1 55  ? 15.704 32.466 22.000 1.00 36.62 ? ? ? ? ? ? 1910 ASP A CG  1 
+ATOM   440  O OD1 . ASP A 1 55  ? 16.234 33.093 21.063 1.00 31.77 ? ? ? ? ? ? 1910 ASP A OD1 1 
+ATOM   441  O OD2 . ASP A 1 55  ? 14.859 31.562 21.821 1.00 31.86 ? ? ? ? ? ? 1910 ASP A OD2 1 
+ATOM   442  N N   . PHE A 1 56  ? 16.754 29.888 24.235 1.00 24.97 ? ? ? ? ? ? 1911 PHE A N   1 
+ATOM   443  C CA  . PHE A 1 56  ? 16.744 28.437 24.077 1.00 27.50 ? ? ? ? ? ? 1911 PHE A CA  1 
+ATOM   444  C C   . PHE A 1 56  ? 16.227 27.982 22.709 1.00 26.99 ? ? ? ? ? ? 1911 PHE A C   1 
+ATOM   445  O O   . PHE A 1 56  ? 16.751 27.029 22.142 1.00 25.02 ? ? ? ? ? ? 1911 PHE A O   1 
+ATOM   446  C CB  . PHE A 1 56  ? 15.903 27.769 25.174 1.00 27.27 ? ? ? ? ? ? 1911 PHE A CB  1 
+ATOM   447  C CG  . PHE A 1 56  ? 16.472 27.918 26.573 1.00 31.18 ? ? ? ? ? ? 1911 PHE A CG  1 
+ATOM   448  C CD1 . PHE A 1 56  ? 17.757 28.402 26.783 1.00 26.63 ? ? ? ? ? ? 1911 PHE A CD1 1 
+ATOM   449  C CD2 . PHE A 1 56  ? 15.715 27.551 27.681 1.00 27.78 ? ? ? ? ? ? 1911 PHE A CD2 1 
+ATOM   450  C CE1 . PHE A 1 56  ? 18.268 28.534 28.077 1.00 27.00 ? ? ? ? ? ? 1911 PHE A CE1 1 
+ATOM   451  C CE2 . PHE A 1 56  ? 16.224 27.670 28.970 1.00 28.79 ? ? ? ? ? ? 1911 PHE A CE2 1 
+ATOM   452  C CZ  . PHE A 1 56  ? 17.500 28.165 29.165 1.00 30.35 ? ? ? ? ? ? 1911 PHE A CZ  1 
+ATOM   453  N N   . SER A 1 57  ? 15.190 28.633 22.191 1.00 26.47 ? ? ? ? ? ? 1912 SER A N   1 
+ATOM   454  C CA  . SER A 1 57  ? 14.603 28.194 20.930 1.00 33.83 ? ? ? ? ? ? 1912 SER A CA  1 
+ATOM   455  C C   . SER A 1 57  ? 15.586 28.418 19.779 1.00 34.95 ? ? ? ? ? ? 1912 SER A C   1 
+ATOM   456  O O   . SER A 1 57  ? 15.630 27.642 18.820 1.00 28.99 ? ? ? ? ? ? 1912 SER A O   1 
+ATOM   457  C CB  . SER A 1 57  ? 13.281 28.913 20.652 1.00 33.80 ? ? ? ? ? ? 1912 SER A CB  1 
+ATOM   458  O OG  . SER A 1 57  ? 13.496 30.242 20.197 1.00 38.46 ? ? ? ? ? ? 1912 SER A OG  1 
+ATOM   459  N N   . THR A 1 58  ? 16.388 29.471 19.885 1.00 31.25 ? ? ? ? ? ? 1913 THR A N   1 
+ATOM   460  C CA  . THR A 1 58  ? 17.395 29.745 18.866 1.00 31.67 ? ? ? ? ? ? 1913 THR A CA  1 
+ATOM   461  C C   . THR A 1 58  ? 18.520 28.719 18.986 1.00 29.55 ? ? ? ? ? ? 1913 THR A C   1 
+ATOM   462  O O   . THR A 1 58  ? 19.008 28.205 17.984 1.00 34.32 ? ? ? ? ? ? 1913 THR A O   1 
+ATOM   463  C CB  . THR A 1 58  ? 17.940 31.187 18.983 1.00 30.13 ? ? ? ? ? ? 1913 THR A CB  1 
+ATOM   464  O OG1 . THR A 1 58  ? 16.860 32.105 18.780 1.00 29.32 ? ? ? ? ? ? 1913 THR A OG1 1 
+ATOM   465  C CG2 . THR A 1 58  ? 19.016 31.461 17.927 1.00 31.08 ? ? ? ? ? ? 1913 THR A CG2 1 
+ATOM   466  N N   . ILE A 1 59  ? 18.918 28.414 20.218 1.00 25.28 ? ? ? ? ? ? 1914 ILE A N   1 
+ATOM   467  C CA  . ILE A 1 59  ? 19.932 27.393 20.446 1.00 26.38 ? ? ? ? ? ? 1914 ILE A CA  1 
+ATOM   468  C C   . ILE A 1 59  ? 19.460 26.062 19.866 1.00 30.29 ? ? ? ? ? ? 1914 ILE A C   1 
+ATOM   469  O O   . ILE A 1 59  ? 20.231 25.338 19.228 1.00 30.05 ? ? ? ? ? ? 1914 ILE A O   1 
+ATOM   470  C CB  . ILE A 1 59  ? 20.247 27.240 21.947 1.00 26.58 ? ? ? ? ? ? 1914 ILE A CB  1 
+ATOM   471  C CG1 . ILE A 1 59  ? 20.925 28.510 22.466 1.00 26.62 ? ? ? ? ? ? 1914 ILE A CG1 1 
+ATOM   472  C CG2 . ILE A 1 59  ? 21.136 26.013 22.205 1.00 21.45 ? ? ? ? ? ? 1914 ILE A CG2 1 
+ATOM   473  C CD1 . ILE A 1 59  ? 21.130 28.533 23.994 1.00 24.52 ? ? ? ? ? ? 1914 ILE A CD1 1 
+ATOM   474  N N   . ARG A 1 60  ? 18.183 25.757 20.077 1.00 29.81 ? ? ? ? ? ? 1915 ARG A N   1 
+ATOM   475  C CA  . ARG A 1 60  ? 17.607 24.512 19.602 1.00 30.33 ? ? ? ? ? ? 1915 ARG A CA  1 
+ATOM   476  C C   . ARG A 1 60  ? 17.611 24.470 18.072 1.00 35.06 ? ? ? ? ? ? 1915 ARG A C   1 
+ATOM   477  O O   . ARG A 1 60  ? 17.918 23.437 17.476 1.00 31.40 ? ? ? ? ? ? 1915 ARG A O   1 
+ATOM   478  C CB  . ARG A 1 60  ? 16.188 24.338 20.151 1.00 28.64 ? ? ? ? ? ? 1915 ARG A CB  1 
+ATOM   479  C CG  . ARG A 1 60  ? 15.384 23.225 19.497 1.00 29.90 ? ? ? ? ? ? 1915 ARG A CG  1 
+ATOM   480  C CD  . ARG A 1 60  ? 15.922 21.873 19.869 1.00 33.14 ? ? ? ? ? ? 1915 ARG A CD  1 
+ATOM   481  N NE  . ARG A 1 60  ? 15.700 21.544 21.276 1.00 35.58 ? ? ? ? ? ? 1915 ARG A NE  1 
+ATOM   482  C CZ  . ARG A 1 60  ? 16.197 20.459 21.861 1.00 40.70 ? ? ? ? ? ? 1915 ARG A CZ  1 
+ATOM   483  N NH1 . ARG A 1 60  ? 16.937 19.615 21.157 1.00 35.66 ? ? ? ? ? ? 1915 ARG A NH1 1 
+ATOM   484  N NH2 . ARG A 1 60  ? 15.958 20.219 23.141 1.00 37.90 ? ? ? ? ? ? 1915 ARG A NH2 1 
+ATOM   485  N N   . GLU A 1 61  ? 17.295 25.596 17.435 1.00 29.84 ? ? ? ? ? ? 1916 GLU A N   1 
+ATOM   486  C CA  . GLU A 1 61  ? 17.260 25.633 15.973 1.00 30.91 ? ? ? ? ? ? 1916 GLU A CA  1 
+ATOM   487  C C   . GLU A 1 61  ? 18.666 25.472 15.398 1.00 29.06 ? ? ? ? ? ? 1916 GLU A C   1 
+ATOM   488  O O   . GLU A 1 61  ? 18.861 24.764 14.401 1.00 31.85 ? ? ? ? ? ? 1916 GLU A O   1 
+ATOM   489  C CB  . GLU A 1 61  ? 16.612 26.929 15.467 1.00 28.90 ? ? ? ? ? ? 1916 GLU A CB  1 
+ATOM   490  C CG  . GLU A 1 61  ? 16.574 27.044 13.930 1.00 37.82 ? ? ? ? ? ? 1916 GLU A CG  1 
+ATOM   491  C CD  . GLU A 1 61  ? 15.696 25.986 13.251 1.00 49.56 ? ? ? ? ? ? 1916 GLU A CD  1 
+ATOM   492  O OE1 . GLU A 1 61  ? 14.669 25.588 13.839 1.00 50.88 ? ? ? ? ? ? 1916 GLU A OE1 1 
+ATOM   493  O OE2 . GLU A 1 61  ? 16.030 25.555 12.118 1.00 51.91 ? ? ? ? ? ? 1916 GLU A OE2 1 
+ATOM   494  N N   . LYS A 1 62  ? 19.642 26.112 16.042 1.00 29.56 ? ? ? ? ? ? 1917 LYS A N   1 
+ATOM   495  C CA  . LYS A 1 62  ? 21.041 25.972 15.641 1.00 29.59 ? ? ? ? ? ? 1917 LYS A CA  1 
+ATOM   496  C C   . LYS A 1 62  ? 21.544 24.535 15.813 1.00 30.33 ? ? ? ? ? ? 1917 LYS A C   1 
+ATOM   497  O O   . LYS A 1 62  ? 22.188 23.971 14.913 1.00 30.89 ? ? ? ? ? ? 1917 LYS A O   1 
+ATOM   498  C CB  . LYS A 1 62  ? 21.919 26.939 16.441 1.00 25.57 ? ? ? ? ? ? 1917 LYS A CB  1 
+ATOM   499  C CG  . LYS A 1 62  ? 21.718 28.409 16.027 1.00 30.26 ? ? ? ? ? ? 1917 LYS A CG  1 
+ATOM   500  C CD  . LYS A 1 62  ? 22.485 29.397 16.918 1.00 35.48 ? ? ? ? ? ? 1917 LYS A CD  1 
+ATOM   501  C CE  . LYS A 1 62  ? 23.988 29.313 16.704 1.00 33.84 ? ? ? ? ? ? 1917 LYS A CE  1 
+ATOM   502  N NZ  . LYS A 1 62  ? 24.696 30.465 17.350 1.00 36.79 ? ? ? ? ? ? 1917 LYS A NZ  1 
+ATOM   503  N N   . LEU A 1 63  ? 21.248 23.952 16.968 1.00 29.86 ? ? ? ? ? ? 1918 LEU A N   1 
+ATOM   504  C CA  . LEU A 1 63  ? 21.651 22.587 17.267 1.00 34.49 ? ? ? ? ? ? 1918 LEU A CA  1 
+ATOM   505  C C   . LEU A 1 63  ? 21.065 21.617 16.240 1.00 31.75 ? ? ? ? ? ? 1918 LEU A C   1 
+ATOM   506  O O   . LEU A 1 63  ? 21.771 20.739 15.735 1.00 38.05 ? ? ? ? ? ? 1918 LEU A O   1 
+ATOM   507  C CB  . LEU A 1 63  ? 21.216 22.199 18.685 1.00 35.71 ? ? ? ? ? ? 1918 LEU A CB  1 
+ATOM   508  C CG  . LEU A 1 63  ? 21.814 20.910 19.261 1.00 32.32 ? ? ? ? ? ? 1918 LEU A CG  1 
+ATOM   509  C CD1 . LEU A 1 63  ? 23.322 21.051 19.401 1.00 33.35 ? ? ? ? ? ? 1918 LEU A CD1 1 
+ATOM   510  C CD2 . LEU A 1 63  ? 21.179 20.541 20.603 1.00 30.86 ? ? ? ? ? ? 1918 LEU A CD2 1 
+ATOM   511  N N   . SER A 1 64  ? 19.782 21.797 15.925 1.00 31.49 ? ? ? ? ? ? 1919 SER A N   1 
+ATOM   512  C CA  . SER A 1 64  ? 19.055 20.898 15.026 1.00 35.20 ? ? ? ? ? ? 1919 SER A CA  1 
+ATOM   513  C C   . SER A 1 64  ? 19.457 21.063 13.567 1.00 34.05 ? ? ? ? ? ? 1919 SER A C   1 
+ATOM   514  O O   . SER A 1 64  ? 19.078 20.255 12.728 1.00 38.36 ? ? ? ? ? ? 1919 SER A O   1 
+ATOM   515  C CB  . SER A 1 64  ? 17.540 21.109 15.152 1.00 40.18 ? ? ? ? ? ? 1919 SER A CB  1 
+ATOM   516  O OG  . SER A 1 64  ? 17.080 20.795 16.459 1.00 47.92 ? ? ? ? ? ? 1919 SER A OG  1 
+ATOM   517  N N   . SER A 1 65  ? 20.219 22.102 13.260 1.00 33.75 ? ? ? ? ? ? 1920 SER A N   1 
+ATOM   518  C CA  . SER A 1 65  ? 20.567 22.378 11.861 1.00 36.24 ? ? ? ? ? ? 1920 SER A CA  1 
+ATOM   519  C C   . SER A 1 65  ? 22.078 22.408 11.653 1.00 34.46 ? ? ? ? ? ? 1920 SER A C   1 
+ATOM   520  O O   . SER A 1 65  ? 22.570 23.001 10.691 1.00 36.07 ? ? ? ? ? ? 1920 SER A O   1 
+ATOM   521  C CB  . SER A 1 65  ? 19.938 23.697 11.403 1.00 34.42 ? ? ? ? ? ? 1920 SER A CB  1 
+ATOM   522  O OG  . SER A 1 65  ? 20.338 24.791 12.220 1.00 34.45 ? ? ? ? ? ? 1920 SER A OG  1 
+ATOM   523  N N   . GLY A 1 66  ? 22.803 21.767 12.573 1.00 33.82 ? ? ? ? ? ? 1921 GLY A N   1 
+ATOM   524  C CA  . GLY A 1 66  ? 24.244 21.625 12.461 1.00 34.38 ? ? ? ? ? ? 1921 GLY A CA  1 
+ATOM   525  C C   . GLY A 1 66  ? 25.022 22.927 12.495 1.00 34.51 ? ? ? ? ? ? 1921 GLY A C   1 
+ATOM   526  O O   . GLY A 1 66  ? 26.042 23.067 11.830 1.00 36.20 ? ? ? ? ? ? 1921 GLY A O   1 
+ATOM   527  N N   . GLN A 1 67  ? 24.560 23.889 13.281 1.00 33.26 ? ? ? ? ? ? 1922 GLN A N   1 
+ATOM   528  C CA  . GLN A 1 67  ? 25.256 25.167 13.328 1.00 35.41 ? ? ? ? ? ? 1922 GLN A CA  1 
+ATOM   529  C C   . GLN A 1 67  ? 26.207 25.285 14.528 1.00 35.45 ? ? ? ? ? ? 1922 GLN A C   1 
+ATOM   530  O O   . GLN A 1 67  ? 26.852 26.311 14.701 1.00 34.29 ? ? ? ? ? ? 1922 GLN A O   1 
+ATOM   531  C CB  . GLN A 1 67  ? 24.244 26.316 13.318 1.00 34.27 ? ? ? ? ? ? 1922 GLN A CB  1 
+ATOM   532  C CG  . GLN A 1 67  ? 23.422 26.361 12.032 1.00 37.66 ? ? ? ? ? ? 1922 GLN A CG  1 
+ATOM   533  C CD  . GLN A 1 67  ? 22.535 27.579 11.947 1.00 43.12 ? ? ? ? ? ? 1922 GLN A CD  1 
+ATOM   534  O OE1 . GLN A 1 67  ? 22.998 28.706 12.094 1.00 51.92 ? ? ? ? ? ? 1922 GLN A OE1 1 
+ATOM   535  N NE2 . GLN A 1 67  ? 21.250 27.359 11.707 1.00 46.61 ? ? ? ? ? ? 1922 GLN A NE2 1 
+ATOM   536  N N   . TYR A 1 68  ? 26.305 24.235 15.345 1.00 31.80 ? ? ? ? ? ? 1923 TYR A N   1 
+ATOM   537  C CA  . TYR A 1 68  ? 27.362 24.153 16.358 1.00 31.75 ? ? ? ? ? ? 1923 TYR A CA  1 
+ATOM   538  C C   . TYR A 1 68  ? 28.434 23.185 15.879 1.00 40.06 ? ? ? ? ? ? 1923 TYR A C   1 
+ATOM   539  O O   . TYR A 1 68  ? 28.165 21.999 15.682 1.00 36.46 ? ? ? ? ? ? 1923 TYR A O   1 
+ATOM   540  C CB  . TYR A 1 68  ? 26.816 23.710 17.730 1.00 31.01 ? ? ? ? ? ? 1923 TYR A CB  1 
+ATOM   541  C CG  . TYR A 1 68  ? 25.900 24.749 18.330 1.00 32.47 ? ? ? ? ? ? 1923 TYR A CG  1 
+ATOM   542  C CD1 . TYR A 1 68  ? 26.367 26.024 18.612 1.00 30.54 ? ? ? ? ? ? 1923 TYR A CD1 1 
+ATOM   543  C CD2 . TYR A 1 68  ? 24.566 24.466 18.585 1.00 30.01 ? ? ? ? ? ? 1923 TYR A CD2 1 
+ATOM   544  C CE1 . TYR A 1 68  ? 25.529 26.993 19.136 1.00 30.27 ? ? ? ? ? ? 1923 TYR A CE1 1 
+ATOM   545  C CE2 . TYR A 1 68  ? 23.718 25.429 19.107 1.00 31.24 ? ? ? ? ? ? 1923 TYR A CE2 1 
+ATOM   546  C CZ  . TYR A 1 68  ? 24.209 26.686 19.383 1.00 30.03 ? ? ? ? ? ? 1923 TYR A CZ  1 
+ATOM   547  O OH  . TYR A 1 68  ? 23.366 27.644 19.882 1.00 30.30 ? ? ? ? ? ? 1923 TYR A OH  1 
+ATOM   548  N N   . PRO A 1 69  ? 29.652 23.694 15.669 1.00 33.86 ? ? ? ? ? ? 1924 PRO A N   1 
+ATOM   549  C CA  . PRO A 1 69  ? 30.730 22.832 15.181 1.00 35.51 ? ? ? ? ? ? 1924 PRO A CA  1 
+ATOM   550  C C   . PRO A 1 69  ? 31.306 21.926 16.269 1.00 43.48 ? ? ? ? ? ? 1924 PRO A C   1 
+ATOM   551  O O   . PRO A 1 69  ? 31.987 20.958 15.941 1.00 40.53 ? ? ? ? ? ? 1924 PRO A O   1 
+ATOM   552  C CB  . PRO A 1 69  ? 31.780 23.828 14.676 1.00 40.57 ? ? ? ? ? ? 1924 PRO A CB  1 
+ATOM   553  C CG  . PRO A 1 69  ? 31.490 25.101 15.394 1.00 43.85 ? ? ? ? ? ? 1924 PRO A CG  1 
+ATOM   554  C CD  . PRO A 1 69  ? 30.013 25.123 15.648 1.00 42.71 ? ? ? ? ? ? 1924 PRO A CD  1 
+ATOM   555  N N   . ASN A 1 70  ? 31.026 22.226 17.535 1.00 35.69 ? ? ? ? ? ? 1925 ASN A N   1 
+ATOM   556  C CA  . ASN A 1 70  ? 31.537 21.419 18.646 1.00 38.09 ? ? ? ? ? ? 1925 ASN A CA  1 
+ATOM   557  C C   . ASN A 1 70  ? 30.831 21.743 19.965 1.00 38.90 ? ? ? ? ? ? 1925 ASN A C   1 
+ATOM   558  O O   . ASN A 1 70  ? 30.026 22.675 20.019 1.00 34.01 ? ? ? ? ? ? 1925 ASN A O   1 
+ATOM   559  C CB  . ASN A 1 70  ? 33.051 21.620 18.797 1.00 38.20 ? ? ? ? ? ? 1925 ASN A CB  1 
+ATOM   560  C CG  . ASN A 1 70  ? 33.436 23.076 19.015 1.00 43.89 ? ? ? ? ? ? 1925 ASN A CG  1 
+ATOM   561  O OD1 . ASN A 1 70  ? 32.795 23.801 19.779 1.00 43.39 ? ? ? ? ? ? 1925 ASN A OD1 1 
+ATOM   562  N ND2 . ASN A 1 70  ? 34.491 23.511 18.340 1.00 44.29 ? ? ? ? ? ? 1925 ASN A ND2 1 
+ATOM   563  N N   . LEU A 1 71  ? 31.143 20.972 21.013 1.00 34.25 ? ? ? ? ? ? 1926 LEU A N   1 
+ATOM   564  C CA  . LEU A 1 71  ? 30.608 21.194 22.363 1.00 35.00 ? ? ? ? ? ? 1926 LEU A CA  1 
+ATOM   565  C C   . LEU A 1 71  ? 30.763 22.617 22.868 1.00 35.07 ? ? ? ? ? ? 1926 LEU A C   1 
+ATOM   566  O O   . LEU A 1 71  ? 29.817 23.223 23.386 1.00 37.04 ? ? ? ? ? ? 1926 LEU A O   1 
+ATOM   567  C CB  . LEU A 1 71  ? 31.307 20.275 23.368 1.00 44.18 ? ? ? ? ? ? 1926 LEU A CB  1 
+ATOM   568  C CG  . LEU A 1 71  ? 30.919 18.812 23.382 1.00 49.79 ? ? ? ? ? ? 1926 LEU A CG  1 
+ATOM   569  C CD1 . LEU A 1 71  ? 31.581 18.126 24.560 1.00 55.29 ? ? ? ? ? ? 1926 LEU A CD1 1 
+ATOM   570  C CD2 . LEU A 1 71  ? 29.425 18.712 23.477 1.00 55.89 ? ? ? ? ? ? 1926 LEU A CD2 1 
+ATOM   571  N N   . GLU A 1 72  ? 31.987 23.118 22.749 1.00 39.82 ? ? ? ? ? ? 1927 GLU A N   1 
+ATOM   572  C CA  . GLU A 1 72  ? 32.363 24.426 23.263 1.00 40.34 ? ? ? ? ? ? 1927 GLU A CA  1 
+ATOM   573  C C   . GLU A 1 72  ? 31.459 25.539 22.733 1.00 39.22 ? ? ? ? ? ? 1927 GLU A C   1 
+ATOM   574  O O   . GLU A 1 72  ? 31.051 26.423 23.486 1.00 35.73 ? ? ? ? ? ? 1927 GLU A O   1 
+ATOM   575  C CB  . GLU A 1 72  ? 33.826 24.715 22.911 1.00 46.91 ? ? ? ? ? ? 1927 GLU A CB  1 
+ATOM   576  C CG  . GLU A 1 72  ? 34.325 26.079 23.362 1.00 63.97 ? ? ? ? ? ? 1927 GLU A CG  1 
+ATOM   577  N N   . THR A 1 73  ? 31.130 25.494 21.443 1.00 38.59 ? ? ? ? ? ? 1928 THR A N   1 
+ATOM   578  C CA  . THR A 1 73  ? 30.324 26.561 20.860 1.00 33.76 ? ? ? ? ? ? 1928 THR A CA  1 
+ATOM   579  C C   . THR A 1 73  ? 28.870 26.490 21.323 1.00 33.70 ? ? ? ? ? ? 1928 THR A C   1 
+ATOM   580  O O   . THR A 1 73  ? 28.206 27.518 21.432 1.00 32.64 ? ? ? ? ? ? 1928 THR A O   1 
+ATOM   581  C CB  . THR A 1 73  ? 30.384 26.548 19.317 1.00 30.44 ? ? ? ? ? ? 1928 THR A CB  1 
+ATOM   582  O OG1 . THR A 1 73  ? 29.892 25.298 18.816 1.00 37.12 ? ? ? ? ? ? 1928 THR A OG1 1 
+ATOM   583  C CG2 . THR A 1 73  ? 31.808 26.752 18.857 1.00 31.73 ? ? ? ? ? ? 1928 THR A CG2 1 
+ATOM   584  N N   . PHE A 1 74  ? 28.378 25.285 21.603 1.00 30.48 ? ? ? ? ? ? 1929 PHE A N   1 
+ATOM   585  C CA  . PHE A 1 74  ? 27.052 25.116 22.203 1.00 29.85 ? ? ? ? ? ? 1929 PHE A CA  1 
+ATOM   586  C C   . PHE A 1 74  ? 26.994 25.742 23.606 1.00 35.95 ? ? ? ? ? ? 1929 PHE A C   1 
+ATOM   587  O O   . PHE A 1 74  ? 26.075 26.511 23.937 1.00 30.77 ? ? ? ? ? ? 1929 PHE A O   1 
+ATOM   588  C CB  . PHE A 1 74  ? 26.688 23.621 22.265 1.00 32.02 ? ? ? ? ? ? 1929 PHE A CB  1 
+ATOM   589  C CG  . PHE A 1 74  ? 25.453 23.323 23.078 1.00 28.04 ? ? ? ? ? ? 1929 PHE A CG  1 
+ATOM   590  C CD1 . PHE A 1 74  ? 24.185 23.520 22.541 1.00 28.81 ? ? ? ? ? ? 1929 PHE A CD1 1 
+ATOM   591  C CD2 . PHE A 1 74  ? 25.557 22.827 24.376 1.00 24.98 ? ? ? ? ? ? 1929 PHE A CD2 1 
+ATOM   592  C CE1 . PHE A 1 74  ? 23.043 23.240 23.284 1.00 26.80 ? ? ? ? ? ? 1929 PHE A CE1 1 
+ATOM   593  C CE2 . PHE A 1 74  ? 24.417 22.552 25.128 1.00 28.74 ? ? ? ? ? ? 1929 PHE A CE2 1 
+ATOM   594  C CZ  . PHE A 1 74  ? 23.161 22.754 24.580 1.00 30.78 ? ? ? ? ? ? 1929 PHE A CZ  1 
+ATOM   595  N N   . ALA A 1 75  ? 27.985 25.416 24.432 1.00 31.73 ? ? ? ? ? ? 1930 ALA A N   1 
+ATOM   596  C CA  . ALA A 1 75  ? 28.056 25.955 25.784 1.00 31.43 ? ? ? ? ? ? 1930 ALA A CA  1 
+ATOM   597  C C   . ALA A 1 75  ? 28.166 27.482 25.772 1.00 30.25 ? ? ? ? ? ? 1930 ALA A C   1 
+ATOM   598  O O   . ALA A 1 75  ? 27.612 28.159 26.642 1.00 31.91 ? ? ? ? ? ? 1930 ALA A O   1 
+ATOM   599  C CB  . ALA A 1 75  ? 29.230 25.350 26.533 1.00 31.56 ? ? ? ? ? ? 1930 ALA A CB  1 
+ATOM   600  N N   . LEU A 1 76  ? 28.887 28.019 24.796 1.00 34.82 ? ? ? ? ? ? 1931 LEU A N   1 
+ATOM   601  C CA  . LEU A 1 76  ? 29.039 29.467 24.685 1.00 35.94 ? ? ? ? ? ? 1931 LEU A CA  1 
+ATOM   602  C C   . LEU A 1 76  ? 27.695 30.170 24.500 1.00 35.82 ? ? ? ? ? ? 1931 LEU A C   1 
+ATOM   603  O O   . LEU A 1 76  ? 27.444 31.208 25.118 1.00 32.68 ? ? ? ? ? ? 1931 LEU A O   1 
+ATOM   604  C CB  . LEU A 1 76  ? 29.978 29.824 23.535 1.00 41.45 ? ? ? ? ? ? 1931 LEU A CB  1 
+ATOM   605  C CG  . LEU A 1 76  ? 31.462 29.590 23.818 1.00 53.37 ? ? ? ? ? ? 1931 LEU A CG  1 
+ATOM   606  C CD1 . LEU A 1 76  ? 32.308 29.881 22.586 1.00 57.14 ? ? ? ? ? ? 1931 LEU A CD1 1 
+ATOM   607  C CD2 . LEU A 1 76  ? 31.915 30.436 24.997 1.00 60.29 ? ? ? ? ? ? 1931 LEU A CD2 1 
+ATOM   608  N N   . ASP A 1 77  ? 26.839 29.614 23.647 1.00 31.25 ? ? ? ? ? ? 1932 ASP A N   1 
+ATOM   609  C CA  . ASP A 1 77  ? 25.517 30.203 23.423 1.00 32.01 ? ? ? ? ? ? 1932 ASP A CA  1 
+ATOM   610  C C   . ASP A 1 77  ? 24.640 30.072 24.670 1.00 28.29 ? ? ? ? ? ? 1932 ASP A C   1 
+ATOM   611  O O   . ASP A 1 77  ? 23.914 31.002 25.032 1.00 27.78 ? ? ? ? ? ? 1932 ASP A O   1 
+ATOM   612  C CB  . ASP A 1 77  ? 24.827 29.556 22.215 1.00 30.42 ? ? ? ? ? ? 1932 ASP A CB  1 
+ATOM   613  C CG  . ASP A 1 77  ? 25.064 30.328 20.924 1.00 32.46 ? ? ? ? ? ? 1932 ASP A CG  1 
+ATOM   614  O OD1 . ASP A 1 77  ? 25.721 31.397 20.973 1.00 38.41 ? ? ? ? ? ? 1932 ASP A OD1 1 
+ATOM   615  O OD2 . ASP A 1 77  ? 24.573 29.882 19.862 1.00 32.64 ? ? ? ? ? ? 1932 ASP A OD2 1 
+ATOM   616  N N   . VAL A 1 78  ? 24.706 28.921 25.333 1.00 26.03 ? ? ? ? ? ? 1933 VAL A N   1 
+ATOM   617  C CA  . VAL A 1 78  ? 23.919 28.735 26.541 1.00 25.19 ? ? ? ? ? ? 1933 VAL A CA  1 
+ATOM   618  C C   . VAL A 1 78  ? 24.327 29.778 27.596 1.00 28.73 ? ? ? ? ? ? 1933 VAL A C   1 
+ATOM   619  O O   . VAL A 1 78  ? 23.479 30.393 28.248 1.00 29.59 ? ? ? ? ? ? 1933 VAL A O   1 
+ATOM   620  C CB  . VAL A 1 78  ? 24.076 27.309 27.118 1.00 25.85 ? ? ? ? ? ? 1933 VAL A CB  1 
+ATOM   621  C CG1 . VAL A 1 78  ? 23.425 27.208 28.497 1.00 28.07 ? ? ? ? ? ? 1933 VAL A CG1 1 
+ATOM   622  C CG2 . VAL A 1 78  ? 23.477 26.268 26.154 1.00 25.40 ? ? ? ? ? ? 1933 VAL A CG2 1 
+ATOM   623  N N   . ARG A 1 79  ? 25.629 29.982 27.754 1.00 28.03 ? ? ? ? ? ? 1934 ARG A N   1 
+ATOM   624  C CA  . ARG A 1 79  ? 26.113 30.895 28.785 1.00 27.43 ? ? ? ? ? ? 1934 ARG A CA  1 
+ATOM   625  C C   . ARG A 1 79  ? 25.792 32.332 28.400 1.00 30.65 ? ? ? ? ? ? 1934 ARG A C   1 
+ATOM   626  O O   . ARG A 1 79  ? 25.539 33.181 29.265 1.00 30.65 ? ? ? ? ? ? 1934 ARG A O   1 
+ATOM   627  C CB  . ARG A 1 79  ? 27.614 30.708 29.006 1.00 27.29 ? ? ? ? ? ? 1934 ARG A CB  1 
+ATOM   628  C CG  . ARG A 1 79  ? 27.941 29.384 29.669 1.00 33.20 ? ? ? ? ? ? 1934 ARG A CG  1 
+ATOM   629  C CD  . ARG A 1 79  ? 29.412 29.028 29.597 1.00 34.94 ? ? ? ? ? ? 1934 ARG A CD  1 
+ATOM   630  N NE  . ARG A 1 79  ? 29.644 27.736 30.235 1.00 38.04 ? ? ? ? ? ? 1934 ARG A NE  1 
+ATOM   631  C CZ  . ARG A 1 79  ? 30.617 26.893 29.905 1.00 42.83 ? ? ? ? ? ? 1934 ARG A CZ  1 
+ATOM   632  N NH1 . ARG A 1 79  ? 31.468 27.197 28.933 1.00 38.09 ? ? ? ? ? ? 1934 ARG A NH1 1 
+ATOM   633  N NH2 . ARG A 1 79  ? 30.735 25.740 30.552 1.00 42.69 ? ? ? ? ? ? 1934 ARG A NH2 1 
+ATOM   634  N N   . LEU A 1 80  ? 25.786 32.588 27.096 1.00 26.99 ? ? ? ? ? ? 1935 LEU A N   1 
+ATOM   635  C CA  . LEU A 1 80  ? 25.410 33.889 26.561 1.00 29.07 ? ? ? ? ? ? 1935 LEU A CA  1 
+ATOM   636  C C   . LEU A 1 80  ? 23.992 34.253 26.989 1.00 32.51 ? ? ? ? ? ? 1935 LEU A C   1 
+ATOM   637  O O   . LEU A 1 80  ? 23.719 35.411 27.317 1.00 27.66 ? ? ? ? ? ? 1935 LEU A O   1 
+ATOM   638  C CB  . LEU A 1 80  ? 25.530 33.892 25.028 1.00 28.32 ? ? ? ? ? ? 1935 LEU A CB  1 
+ATOM   639  C CG  . LEU A 1 80  ? 25.028 35.120 24.273 1.00 27.58 ? ? ? ? ? ? 1935 LEU A CG  1 
+ATOM   640  C CD1 . LEU A 1 80  ? 25.833 36.375 24.639 1.00 30.42 ? ? ? ? ? ? 1935 LEU A CD1 1 
+ATOM   641  C CD2 . LEU A 1 80  ? 25.068 34.867 22.757 1.00 27.70 ? ? ? ? ? ? 1935 LEU A CD2 1 
+ATOM   642  N N   . VAL A 1 81  ? 23.095 33.266 27.008 1.00 26.26 ? ? ? ? ? ? 1936 VAL A N   1 
+ATOM   643  C CA  . VAL A 1 81  ? 21.736 33.512 27.486 1.00 27.50 ? ? ? ? ? ? 1936 VAL A CA  1 
+ATOM   644  C C   . VAL A 1 81  ? 21.759 34.102 28.905 1.00 32.28 ? ? ? ? ? ? 1936 VAL A C   1 
+ATOM   645  O O   . VAL A 1 81  ? 21.052 35.067 29.211 1.00 27.70 ? ? ? ? ? ? 1936 VAL A O   1 
+ATOM   646  C CB  . VAL A 1 81  ? 20.885 32.224 27.497 1.00 28.63 ? ? ? ? ? ? 1936 VAL A CB  1 
+ATOM   647  C CG1 . VAL A 1 81  ? 19.557 32.467 28.211 1.00 24.40 ? ? ? ? ? ? 1936 VAL A CG1 1 
+ATOM   648  C CG2 . VAL A 1 81  ? 20.660 31.681 26.065 1.00 24.09 ? ? ? ? ? ? 1936 VAL A CG2 1 
+ATOM   649  N N   . PHE A 1 82  ? 22.587 33.533 29.774 1.00 27.41 ? ? ? ? ? ? 1937 PHE A N   1 
+ATOM   650  C CA  . PHE A 1 82  ? 22.579 33.975 31.170 1.00 26.33 ? ? ? ? ? ? 1937 PHE A CA  1 
+ATOM   651  C C   . PHE A 1 82  ? 23.418 35.227 31.406 1.00 29.45 ? ? ? ? ? ? 1937 PHE A C   1 
+ATOM   652  O O   . PHE A 1 82  ? 23.106 36.028 32.290 1.00 29.67 ? ? ? ? ? ? 1937 PHE A O   1 
+ATOM   653  C CB  . PHE A 1 82  ? 23.025 32.819 32.060 1.00 25.80 ? ? ? ? ? ? 1937 PHE A CB  1 
+ATOM   654  C CG  . PHE A 1 82  ? 22.212 31.597 31.840 1.00 30.27 ? ? ? ? ? ? 1937 PHE A CG  1 
+ATOM   655  C CD1 . PHE A 1 82  ? 20.830 31.686 31.834 1.00 28.31 ? ? ? ? ? ? 1937 PHE A CD1 1 
+ATOM   656  C CD2 . PHE A 1 82  ? 22.806 30.386 31.555 1.00 30.22 ? ? ? ? ? ? 1937 PHE A CD2 1 
+ATOM   657  C CE1 . PHE A 1 82  ? 20.059 30.577 31.586 1.00 31.20 ? ? ? ? ? ? 1937 PHE A CE1 1 
+ATOM   658  C CE2 . PHE A 1 82  ? 22.031 29.260 31.311 1.00 35.06 ? ? ? ? ? ? 1937 PHE A CE2 1 
+ATOM   659  C CZ  . PHE A 1 82  ? 20.657 29.367 31.319 1.00 32.47 ? ? ? ? ? ? 1937 PHE A CZ  1 
+ATOM   660  N N   . ASP A 1 83  ? 24.467 35.402 30.611 1.00 29.08 ? ? ? ? ? ? 1938 ASP A N   1 
+ATOM   661  C CA  . ASP A 1 83  ? 25.234 36.642 30.618 1.00 32.04 ? ? ? ? ? ? 1938 ASP A CA  1 
+ATOM   662  C C   . ASP A 1 83  ? 24.380 37.831 30.187 1.00 34.86 ? ? ? ? ? ? 1938 ASP A C   1 
+ATOM   663  O O   . ASP A 1 83  ? 24.466 38.909 30.780 1.00 29.17 ? ? ? ? ? ? 1938 ASP A O   1 
+ATOM   664  C CB  . ASP A 1 83  ? 26.452 36.528 29.706 1.00 32.61 ? ? ? ? ? ? 1938 ASP A CB  1 
+ATOM   665  C CG  . ASP A 1 83  ? 27.500 35.589 30.256 1.00 38.89 ? ? ? ? ? ? 1938 ASP A CG  1 
+ATOM   666  O OD1 . ASP A 1 83  ? 27.415 35.232 31.456 1.00 32.48 ? ? ? ? ? ? 1938 ASP A OD1 1 
+ATOM   667  O OD2 . ASP A 1 83  ? 28.418 35.218 29.494 1.00 35.36 ? ? ? ? ? ? 1938 ASP A OD2 1 
+ATOM   668  N N   . ASN A 1 84  ? 23.574 37.640 29.145 1.00 30.48 ? ? ? ? ? ? 1939 ASN A N   1 
+ATOM   669  C CA  . ASN A 1 84  ? 22.634 38.674 28.723 1.00 33.26 ? ? ? ? ? ? 1939 ASN A CA  1 
+ATOM   670  C C   . ASN A 1 84  ? 21.654 38.984 29.840 1.00 32.30 ? ? ? ? ? ? 1939 ASN A C   1 
+ATOM   671  O O   . ASN A 1 84  ? 21.332 40.146 30.095 1.00 30.36 ? ? ? ? ? ? 1939 ASN A O   1 
+ATOM   672  C CB  . ASN A 1 84  ? 21.857 38.255 27.472 1.00 25.18 ? ? ? ? ? ? 1939 ASN A CB  1 
+ATOM   673  C CG  . ASN A 1 84  ? 22.709 38.251 26.215 1.00 29.97 ? ? ? ? ? ? 1939 ASN A CG  1 
+ATOM   674  O OD1 . ASN A 1 84  ? 23.794 38.836 26.176 1.00 28.27 ? ? ? ? ? ? 1939 ASN A OD1 1 
+ATOM   675  N ND2 . ASN A 1 84  ? 22.198 37.612 25.159 1.00 26.96 ? ? ? ? ? ? 1939 ASN A ND2 1 
+ATOM   676  N N   . CYS A 1 85  ? 21.179 37.932 30.501 1.00 31.32 ? ? ? ? ? ? 1940 CYS A N   1 
+ATOM   677  C CA  . CYS A 1 85  ? 20.194 38.085 31.560 1.00 29.13 ? ? ? ? ? ? 1940 CYS A CA  1 
+ATOM   678  C C   . CYS A 1 85  ? 20.763 38.940 32.694 1.00 31.24 ? ? ? ? ? ? 1940 CYS A C   1 
+ATOM   679  O O   . CYS A 1 85  ? 20.077 39.811 33.227 1.00 31.83 ? ? ? ? ? ? 1940 CYS A O   1 
+ATOM   680  C CB  . CYS A 1 85  ? 19.749 36.707 32.085 1.00 28.82 ? ? ? ? ? ? 1940 CYS A CB  1 
+ATOM   681  S SG  . CYS A 1 85  ? 18.470 36.758 33.375 1.00 29.95 ? ? ? ? ? ? 1940 CYS A SG  1 
+ATOM   682  N N   . GLU A 1 86  ? 22.023 38.697 33.051 1.00 28.43 ? ? ? ? ? ? 1941 GLU A N   1 
+ATOM   683  C CA  . GLU A 1 86  ? 22.669 39.493 34.090 1.00 31.75 ? ? ? ? ? ? 1941 GLU A CA  1 
+ATOM   684  C C   . GLU A 1 86  ? 22.862 40.940 33.655 1.00 34.58 ? ? ? ? ? ? 1941 GLU A C   1 
+ATOM   685  O O   . GLU A 1 86  ? 22.776 41.856 34.470 1.00 31.05 ? ? ? ? ? ? 1941 GLU A O   1 
+ATOM   686  C CB  . GLU A 1 86  ? 24.024 38.904 34.476 1.00 36.13 ? ? ? ? ? ? 1941 GLU A CB  1 
+ATOM   687  C CG  . GLU A 1 86  ? 23.948 37.594 35.232 1.00 35.39 ? ? ? ? ? ? 1941 GLU A CG  1 
+ATOM   688  C CD  . GLU A 1 86  ? 25.213 37.326 36.023 1.00 38.45 ? ? ? ? ? ? 1941 GLU A CD  1 
+ATOM   689  O OE1 . GLU A 1 86  ? 25.676 38.250 36.725 1.00 39.90 ? ? ? ? ? ? 1941 GLU A OE1 1 
+ATOM   690  O OE2 . GLU A 1 86  ? 25.743 36.198 35.947 1.00 43.60 ? ? ? ? ? ? 1941 GLU A OE2 1 
+ATOM   691  N N   . THR A 1 87  ? 23.148 41.144 32.376 1.00 31.32 ? ? ? ? ? ? 1942 THR A N   1 
+ATOM   692  C CA  . THR A 1 87  ? 23.340 42.498 31.854 1.00 28.96 ? ? ? ? ? ? 1942 THR A CA  1 
+ATOM   693  C C   . THR A 1 87  ? 22.060 43.335 31.958 1.00 32.76 ? ? ? ? ? ? 1942 THR A C   1 
+ATOM   694  O O   . THR A 1 87  ? 22.109 44.534 32.235 1.00 30.32 ? ? ? ? ? ? 1942 THR A O   1 
+ATOM   695  C CB  . THR A 1 87  ? 23.816 42.460 30.385 1.00 28.57 ? ? ? ? ? ? 1942 THR A CB  1 
+ATOM   696  O OG1 . THR A 1 87  ? 25.111 41.849 30.326 1.00 32.82 ? ? ? ? ? ? 1942 THR A OG1 1 
+ATOM   697  C CG2 . THR A 1 87  ? 23.904 43.872 29.800 1.00 30.17 ? ? ? ? ? ? 1942 THR A CG2 1 
+ATOM   698  N N   . PHE A 1 88  ? 20.914 42.692 31.755 1.00 29.35 ? ? ? ? ? ? 1943 PHE A N   1 
+ATOM   699  C CA  . PHE A 1 88  ? 19.650 43.410 31.635 1.00 34.04 ? ? ? ? ? ? 1943 PHE A CA  1 
+ATOM   700  C C   . PHE A 1 88  ? 18.744 43.304 32.858 1.00 34.49 ? ? ? ? ? ? 1943 PHE A C   1 
+ATOM   701  O O   . PHE A 1 88  ? 17.689 43.949 32.896 1.00 35.90 ? ? ? ? ? ? 1943 PHE A O   1 
+ATOM   702  C CB  . PHE A 1 88  ? 18.888 42.912 30.401 1.00 29.33 ? ? ? ? ? ? 1943 PHE A CB  1 
+ATOM   703  C CG  . PHE A 1 88  ? 17.982 43.944 29.782 1.00 32.47 ? ? ? ? ? ? 1943 PHE A CG  1 
+ATOM   704  C CD1 . PHE A 1 88  ? 18.507 44.976 29.017 1.00 31.42 ? ? ? ? ? ? 1943 PHE A CD1 1 
+ATOM   705  C CD2 . PHE A 1 88  ? 16.609 43.874 29.952 1.00 29.77 ? ? ? ? ? ? 1943 PHE A CD2 1 
+ATOM   706  C CE1 . PHE A 1 88  ? 17.679 45.928 28.434 1.00 36.08 ? ? ? ? ? ? 1943 PHE A CE1 1 
+ATOM   707  C CE2 . PHE A 1 88  ? 15.778 44.822 29.377 1.00 31.01 ? ? ? ? ? ? 1943 PHE A CE2 1 
+ATOM   708  C CZ  . PHE A 1 88  ? 16.314 45.852 28.617 1.00 37.00 ? ? ? ? ? ? 1943 PHE A CZ  1 
+ATOM   709  N N   . ASN A 1 89  ? 19.137 42.505 33.854 1.00 28.83 ? ? ? ? ? ? 1944 ASN A N   1 
+ATOM   710  C CA  . ASN A 1 89  ? 18.284 42.300 35.022 1.00 30.73 ? ? ? ? ? ? 1944 ASN A CA  1 
+ATOM   711  C C   . ASN A 1 89  ? 19.016 42.414 36.354 1.00 32.65 ? ? ? ? ? ? 1944 ASN A C   1 
+ATOM   712  O O   . ASN A 1 89  ? 20.125 41.898 36.507 1.00 31.45 ? ? ? ? ? ? 1944 ASN A O   1 
+ATOM   713  C CB  . ASN A 1 89  ? 17.611 40.927 34.943 1.00 34.61 ? ? ? ? ? ? 1944 ASN A CB  1 
+ATOM   714  C CG  . ASN A 1 89  ? 16.723 40.785 33.727 1.00 32.63 ? ? ? ? ? ? 1944 ASN A CG  1 
+ATOM   715  O OD1 . ASN A 1 89  ? 15.546 41.142 33.760 1.00 35.63 ? ? ? ? ? ? 1944 ASN A OD1 1 
+ATOM   716  N ND2 . ASN A 1 89  ? 17.280 40.252 32.646 1.00 27.99 ? ? ? ? ? ? 1944 ASN A ND2 1 
+ATOM   717  N N   . GLU A 1 90  ? 18.386 43.090 37.313 1.00 32.24 ? ? ? ? ? ? 1945 GLU A N   1 
+ATOM   718  C CA  . GLU A 1 90  ? 18.886 43.108 38.677 1.00 33.29 ? ? ? ? ? ? 1945 GLU A CA  1 
+ATOM   719  C C   . GLU A 1 90  ? 18.905 41.679 39.231 1.00 32.47 ? ? ? ? ? ? 1945 GLU A C   1 
+ATOM   720  O O   . GLU A 1 90  ? 17.983 40.909 38.976 1.00 31.39 ? ? ? ? ? ? 1945 GLU A O   1 
+ATOM   721  C CB  A GLU A 1 90  ? 18.011 43.988 39.579 0.38 35.34 ? ? ? ? ? ? 1945 GLU A CB  1 
+ATOM   722  C CB  B GLU A 1 90  ? 18.042 44.036 39.556 0.62 35.37 ? ? ? ? ? ? 1945 GLU A CB  1 
+ATOM   723  C CG  A GLU A 1 90  ? 17.770 45.411 39.096 0.38 42.01 ? ? ? ? ? ? 1945 GLU A CG  1 
+ATOM   724  C CG  B GLU A 1 90  ? 18.309 45.531 39.315 0.62 37.27 ? ? ? ? ? ? 1945 GLU A CG  1 
+ATOM   725  C CD  A GLU A 1 90  ? 16.688 46.118 39.901 0.38 54.23 ? ? ? ? ? ? 1945 GLU A CD  1 
+ATOM   726  C CD  B GLU A 1 90  ? 19.695 45.965 39.774 0.62 40.34 ? ? ? ? ? ? 1945 GLU A CD  1 
+ATOM   727  O OE1 A GLU A 1 90  ? 16.878 46.321 41.121 0.38 56.59 ? ? ? ? ? ? 1945 GLU A OE1 1 
+ATOM   728  O OE1 B GLU A 1 90  ? 20.288 45.277 40.633 0.62 46.18 ? ? ? ? ? ? 1945 GLU A OE1 1 
+ATOM   729  O OE2 A GLU A 1 90  ? 15.643 46.466 39.312 0.38 62.75 ? ? ? ? ? ? 1945 GLU A OE2 1 
+ATOM   730  O OE2 B GLU A 1 90  ? 20.196 46.993 39.282 0.62 44.10 ? ? ? ? ? ? 1945 GLU A OE2 1 
+ATOM   731  N N   . ASP A 1 91  ? 19.954 41.340 39.975 1.00 35.86 ? ? ? ? ? ? 1946 ASP A N   1 
+ATOM   732  C CA  . ASP A 1 91  ? 20.018 40.057 40.675 1.00 36.39 ? ? ? ? ? ? 1946 ASP A CA  1 
+ATOM   733  C C   . ASP A 1 91  ? 18.778 39.863 41.539 1.00 42.48 ? ? ? ? ? ? 1946 ASP A C   1 
+ATOM   734  O O   . ASP A 1 91  ? 18.210 38.773 41.594 1.00 40.19 ? ? ? ? ? ? 1946 ASP A O   1 
+ATOM   735  C CB  . ASP A 1 91  ? 21.269 39.965 41.550 1.00 36.05 ? ? ? ? ? ? 1946 ASP A CB  1 
+ATOM   736  C CG  . ASP A 1 91  ? 22.543 39.886 40.746 1.00 42.27 ? ? ? ? ? ? 1946 ASP A CG  1 
+ATOM   737  O OD1 . ASP A 1 91  ? 22.476 39.556 39.545 1.00 37.88 ? ? ? ? ? ? 1946 ASP A OD1 1 
+ATOM   738  O OD2 . ASP A 1 91  ? 23.617 40.146 41.324 1.00 46.40 ? ? ? ? ? ? 1946 ASP A OD2 1 
+ATOM   739  N N   . ASP A 1 92  ? 18.365 40.934 42.211 1.00 38.15 ? ? ? ? ? ? 1947 ASP A N   1 
+ATOM   740  C CA  . ASP A 1 92  ? 17.180 40.900 43.061 1.00 43.91 ? ? ? ? ? ? 1947 ASP A CA  1 
+ATOM   741  C C   . ASP A 1 92  ? 15.919 41.183 42.245 1.00 39.14 ? ? ? ? ? ? 1947 ASP A C   1 
+ATOM   742  O O   . ASP A 1 92  ? 15.275 42.227 42.401 1.00 40.30 ? ? ? ? ? ? 1947 ASP A O   1 
+ATOM   743  C CB  . ASP A 1 92  ? 17.310 41.904 44.215 1.00 43.31 ? ? ? ? ? ? 1947 ASP A CB  1 
+ATOM   744  C CG  . ASP A 1 92  ? 16.215 41.745 45.255 1.00 52.31 ? ? ? ? ? ? 1947 ASP A CG  1 
+ATOM   745  O OD1 . ASP A 1 92  ? 15.443 40.763 45.171 1.00 47.68 ? ? ? ? ? ? 1947 ASP A OD1 1 
+ATOM   746  O OD2 . ASP A 1 92  ? 16.137 42.597 46.168 1.00 56.72 ? ? ? ? ? ? 1947 ASP A OD2 1 
+ATOM   747  N N   . SER A 1 93  ? 15.588 40.239 41.371 1.00 38.75 ? ? ? ? ? ? 1948 SER A N   1 
+ATOM   748  C CA  . SER A 1 93  ? 14.357 40.264 40.593 1.00 39.48 ? ? ? ? ? ? 1948 SER A CA  1 
+ATOM   749  C C   . SER A 1 93  ? 14.030 38.826 40.217 1.00 33.30 ? ? ? ? ? ? 1948 SER A C   1 
+ATOM   750  O O   . SER A 1 93  ? 14.900 37.955 40.303 1.00 35.25 ? ? ? ? ? ? 1948 SER A O   1 
+ATOM   751  C CB  . SER A 1 93  ? 14.493 41.151 39.343 1.00 38.54 ? ? ? ? ? ? 1948 SER A CB  1 
+ATOM   752  O OG  . SER A 1 93  ? 15.382 40.592 38.385 1.00 32.01 ? ? ? ? ? ? 1948 SER A OG  1 
+ATOM   753  N N   . ASP A 1 94  ? 12.791 38.561 39.811 1.00 35.44 ? ? ? ? ? ? 1949 ASP A N   1 
+ATOM   754  C CA  . ASP A 1 94  ? 12.407 37.194 39.422 1.00 33.10 ? ? ? ? ? ? 1949 ASP A CA  1 
+ATOM   755  C C   . ASP A 1 94  ? 13.248 36.653 38.260 1.00 33.47 ? ? ? ? ? ? 1949 ASP A C   1 
+ATOM   756  O O   . ASP A 1 94  ? 13.710 35.506 38.288 1.00 32.07 ? ? ? ? ? ? 1949 ASP A O   1 
+ATOM   757  C CB  . ASP A 1 94  ? 10.920 37.138 39.050 1.00 37.99 ? ? ? ? ? ? 1949 ASP A CB  1 
+ATOM   758  C CG  . ASP A 1 94  ? 10.005 37.337 40.253 1.00 48.36 ? ? ? ? ? ? 1949 ASP A CG  1 
+ATOM   759  O OD1 . ASP A 1 94  ? 9.739  36.355 40.978 1.00 41.29 ? ? ? ? ? ? 1949 ASP A OD1 1 
+ATOM   760  O OD2 . ASP A 1 94  ? 9.538  38.475 40.467 1.00 56.01 ? ? ? ? ? ? 1949 ASP A OD2 1 
+ATOM   761  N N   . ILE A 1 95  ? 13.445 37.481 37.241 1.00 30.24 ? ? ? ? ? ? 1950 ILE A N   1 
+ATOM   762  C CA  . ILE A 1 95  ? 14.180 37.055 36.048 1.00 30.04 ? ? ? ? ? ? 1950 ILE A CA  1 
+ATOM   763  C C   . ILE A 1 95  ? 15.668 36.953 36.371 1.00 32.86 ? ? ? ? ? ? 1950 ILE A C   1 
+ATOM   764  O O   . ILE A 1 95  ? 16.347 36.033 35.916 1.00 30.59 ? ? ? ? ? ? 1950 ILE A O   1 
+ATOM   765  C CB  . ILE A 1 95  ? 13.927 38.029 34.871 1.00 33.92 ? ? ? ? ? ? 1950 ILE A CB  1 
+ATOM   766  C CG1 . ILE A 1 95  ? 12.476 37.904 34.411 1.00 33.14 ? ? ? ? ? ? 1950 ILE A CG1 1 
+ATOM   767  C CG2 . ILE A 1 95  ? 14.886 37.780 33.705 1.00 35.56 ? ? ? ? ? ? 1950 ILE A CG2 1 
+ATOM   768  C CD1 . ILE A 1 95  ? 12.095 38.915 33.365 1.00 36.92 ? ? ? ? ? ? 1950 ILE A CD1 1 
+ATOM   769  N N   . GLY A 1 96  ? 16.165 37.891 37.176 1.00 32.60 ? ? ? ? ? ? 1951 GLY A N   1 
+ATOM   770  C CA  . GLY A 1 96  ? 17.537 37.839 37.656 1.00 30.59 ? ? ? ? ? ? 1951 GLY A CA  1 
+ATOM   771  C C   . GLY A 1 96  ? 17.839 36.536 38.387 1.00 36.77 ? ? ? ? ? ? 1951 GLY A C   1 
+ATOM   772  O O   . GLY A 1 96  ? 18.833 35.861 38.109 1.00 33.48 ? ? ? ? ? ? 1951 GLY A O   1 
+ATOM   773  N N   . ARG A 1 97  ? 16.970 36.171 39.320 1.00 32.93 ? ? ? ? ? ? 1952 ARG A N   1 
+ATOM   774  C CA  . ARG A 1 97  ? 17.131 34.922 40.052 1.00 34.35 ? ? ? ? ? ? 1952 ARG A CA  1 
+ATOM   775  C C   . ARG A 1 97  ? 17.006 33.712 39.120 1.00 31.54 ? ? ? ? ? ? 1952 ARG A C   1 
+ATOM   776  O O   . ARG A 1 97  ? 17.763 32.749 39.248 1.00 33.69 ? ? ? ? ? ? 1952 ARG A O   1 
+ATOM   777  C CB  . ARG A 1 97  ? 16.112 34.837 41.185 1.00 33.09 ? ? ? ? ? ? 1952 ARG A CB  1 
+ATOM   778  C CG  . ARG A 1 97  ? 16.488 35.691 42.396 1.00 41.69 ? ? ? ? ? ? 1952 ARG A CG  1 
+ATOM   779  C CD  . ARG A 1 97  ? 15.514 35.495 43.543 1.00 42.50 ? ? ? ? ? ? 1952 ARG A CD  1 
+ATOM   780  N NE  . ARG A 1 97  ? 14.232 36.143 43.284 1.00 40.68 ? ? ? ? ? ? 1952 ARG A NE  1 
+ATOM   781  C CZ  . ARG A 1 97  ? 13.961 37.411 43.575 1.00 44.47 ? ? ? ? ? ? 1952 ARG A CZ  1 
+ATOM   782  N NH1 . ARG A 1 97  ? 14.885 38.184 44.134 1.00 45.51 ? ? ? ? ? ? 1952 ARG A NH1 1 
+ATOM   783  N NH2 . ARG A 1 97  ? 12.762 37.903 43.307 1.00 51.23 ? ? ? ? ? ? 1952 ARG A NH2 1 
+ATOM   784  N N   . ALA A 1 98  ? 16.050 33.766 38.198 1.00 29.50 ? ? ? ? ? ? 1953 ALA A N   1 
+ATOM   785  C CA  . ALA A 1 98  ? 15.882 32.690 37.213 1.00 32.25 ? ? ? ? ? ? 1953 ALA A CA  1 
+ATOM   786  C C   . ALA A 1 98  ? 17.183 32.411 36.472 1.00 29.92 ? ? ? ? ? ? 1953 ALA A C   1 
+ATOM   787  O O   . ALA A 1 98  ? 17.586 31.248 36.300 1.00 29.24 ? ? ? ? ? ? 1953 ALA A O   1 
+ATOM   788  C CB  . ALA A 1 98  ? 14.781 33.040 36.220 1.00 29.72 ? ? ? ? ? ? 1953 ALA A CB  1 
+ATOM   789  N N   . GLY A 1 99  ? 17.839 33.482 36.029 1.00 30.97 ? ? ? ? ? ? 1954 GLY A N   1 
+ATOM   790  C CA  . GLY A 1 99  ? 19.076 33.351 35.278 1.00 28.98 ? ? ? ? ? ? 1954 GLY A CA  1 
+ATOM   791  C C   . GLY A 1 99  ? 20.159 32.670 36.087 1.00 30.72 ? ? ? ? ? ? 1954 GLY A C   1 
+ATOM   792  O O   . GLY A 1 99  ? 20.821 31.744 35.612 1.00 29.33 ? ? ? ? ? ? 1954 GLY A O   1 
+ATOM   793  N N   . HIS A 1 100 ? 20.339 33.125 37.321 1.00 31.19 ? ? ? ? ? ? 1955 HIS A N   1 
+ATOM   794  C CA  . HIS A 1 100 ? 21.316 32.505 38.198 1.00 31.81 ? ? ? ? ? ? 1955 HIS A CA  1 
+ATOM   795  C C   . HIS A 1 100 ? 20.991 31.031 38.433 1.00 33.17 ? ? ? ? ? ? 1955 HIS A C   1 
+ATOM   796  O O   . HIS A 1 100 ? 21.888 30.188 38.375 1.00 35.31 ? ? ? ? ? ? 1955 HIS A O   1 
+ATOM   797  C CB  . HIS A 1 100 ? 21.399 33.264 39.529 1.00 35.90 ? ? ? ? ? ? 1955 HIS A CB  1 
+ATOM   798  C CG  . HIS A 1 100 ? 22.066 34.600 39.410 1.00 40.36 ? ? ? ? ? ? 1955 HIS A CG  1 
+ATOM   799  N ND1 . HIS A 1 100 ? 23.424 34.739 39.225 1.00 40.84 ? ? ? ? ? ? 1955 HIS A ND1 1 
+ATOM   800  C CD2 . HIS A 1 100 ? 21.559 35.856 39.439 1.00 38.62 ? ? ? ? ? ? 1955 HIS A CD2 1 
+ATOM   801  C CE1 . HIS A 1 100 ? 23.726 36.025 39.146 1.00 39.21 ? ? ? ? ? ? 1955 HIS A CE1 1 
+ATOM   802  N NE2 . HIS A 1 100 ? 22.613 36.722 39.273 1.00 36.18 ? ? ? ? ? ? 1955 HIS A NE2 1 
+ATOM   803  N N   . ASN A 1 101 ? 19.722 30.719 38.694 1.00 32.99 ? ? ? ? ? ? 1956 ASN A N   1 
+ATOM   804  C CA  . ASN A 1 101 ? 19.299 29.326 38.903 1.00 34.70 ? ? ? ? ? ? 1956 ASN A CA  1 
+ATOM   805  C C   . ASN A 1 101 ? 19.578 28.459 37.676 1.00 34.43 ? ? ? ? ? ? 1956 ASN A C   1 
+ATOM   806  O O   . ASN A 1 101 ? 20.085 27.343 37.789 1.00 36.59 ? ? ? ? ? ? 1956 ASN A O   1 
+ATOM   807  C CB  . ASN A 1 101 ? 17.807 29.250 39.229 1.00 34.70 ? ? ? ? ? ? 1956 ASN A CB  1 
+ATOM   808  C CG  . ASN A 1 101 ? 17.483 29.711 40.637 1.00 40.79 ? ? ? ? ? ? 1956 ASN A CG  1 
+ATOM   809  O OD1 . ASN A 1 101 ? 18.375 30.019 41.430 1.00 43.96 ? ? ? ? ? ? 1956 ASN A OD1 1 
+ATOM   810  N ND2 . ASN A 1 101 ? 16.191 29.769 40.951 1.00 38.39 ? ? ? ? ? ? 1956 ASN A ND2 1 
+ATOM   811  N N   . MET A 1 102 ? 19.234 28.985 36.500 1.00 28.43 ? ? ? ? ? ? 1957 MET A N   1 
+ATOM   812  C CA  . MET A 1 102 ? 19.356 28.207 35.265 1.00 28.51 ? ? ? ? ? ? 1957 MET A CA  1 
+ATOM   813  C C   . MET A 1 102 ? 20.816 28.021 34.891 1.00 32.93 ? ? ? ? ? ? 1957 MET A C   1 
+ATOM   814  O O   . MET A 1 102 ? 21.192 26.987 34.350 1.00 30.25 ? ? ? ? ? ? 1957 MET A O   1 
+ATOM   815  C CB  . MET A 1 102 ? 18.604 28.871 34.114 1.00 27.47 ? ? ? ? ? ? 1957 MET A CB  1 
+ATOM   816  C CG  . MET A 1 102 ? 17.097 28.897 34.268 1.00 39.52 ? ? ? ? ? ? 1957 MET A CG  1 
+ATOM   817  S SD  . MET A 1 102 ? 16.345 27.268 34.380 1.00 49.64 ? ? ? ? ? ? 1957 MET A SD  1 
+ATOM   818  C CE  . MET A 1 102 ? 16.875 26.538 32.833 1.00 45.28 ? ? ? ? ? ? 1957 MET A CE  1 
+ATOM   819  N N   . ARG A 1 103 ? 21.646 29.016 35.189 1.00 29.70 ? ? ? ? ? ? 1958 ARG A N   1 
+ATOM   820  C CA  . ARG A 1 103 ? 23.072 28.885 34.919 1.00 32.76 ? ? ? ? ? ? 1958 ARG A CA  1 
+ATOM   821  C C   . ARG A 1 103 ? 23.687 27.764 35.757 1.00 32.90 ? ? ? ? ? ? 1958 ARG A C   1 
+ATOM   822  O O   . ARG A 1 103 ? 24.428 26.919 35.246 1.00 33.36 ? ? ? ? ? ? 1958 ARG A O   1 
+ATOM   823  C CB  . ARG A 1 103 ? 23.808 30.197 35.193 1.00 31.20 ? ? ? ? ? ? 1958 ARG A CB  1 
+ATOM   824  C CG  . ARG A 1 103 ? 25.253 30.163 34.725 1.00 32.68 ? ? ? ? ? ? 1958 ARG A CG  1 
+ATOM   825  C CD  . ARG A 1 103 ? 26.096 31.232 35.384 1.00 31.57 ? ? ? ? ? ? 1958 ARG A CD  1 
+ATOM   826  N NE  . ARG A 1 103 ? 25.736 32.575 34.924 1.00 31.75 ? ? ? ? ? ? 1958 ARG A NE  1 
+ATOM   827  C CZ  . ARG A 1 103 ? 26.204 33.146 33.817 1.00 35.48 ? ? ? ? ? ? 1958 ARG A CZ  1 
+ATOM   828  N NH1 . ARG A 1 103 ? 27.050 32.489 33.024 1.00 32.53 ? ? ? ? ? ? 1958 ARG A NH1 1 
+ATOM   829  N NH2 . ARG A 1 103 ? 25.819 34.378 33.499 1.00 30.07 ? ? ? ? ? ? 1958 ARG A NH2 1 
+ATOM   830  N N   . LYS A 1 104 ? 23.374 27.766 37.048 1.00 32.49 ? ? ? ? ? ? 1959 LYS A N   1 
+ATOM   831  C CA  . LYS A 1 104 ? 23.852 26.728 37.954 1.00 32.19 ? ? ? ? ? ? 1959 LYS A CA  1 
+ATOM   832  C C   . LYS A 1 104 ? 23.352 25.369 37.481 1.00 35.33 ? ? ? ? ? ? 1959 LYS A C   1 
+ATOM   833  O O   . LYS A 1 104 ? 24.099 24.389 37.459 1.00 36.31 ? ? ? ? ? ? 1959 LYS A O   1 
+ATOM   834  C CB  . LYS A 1 104 ? 23.385 27.010 39.384 1.00 33.87 ? ? ? ? ? ? 1959 LYS A CB  1 
+ATOM   835  C CG  . LYS A 1 104 ? 23.866 25.994 40.405 1.00 43.97 ? ? ? ? ? ? 1959 LYS A CG  1 
+ATOM   836  C CD  . LYS A 1 104 ? 25.302 26.262 40.817 1.00 51.40 ? ? ? ? ? ? 1959 LYS A CD  1 
+ATOM   837  N N   . TYR A 1 105 ? 22.082 25.329 37.093 1.00 32.80 ? ? ? ? ? ? 1960 TYR A N   1 
+ATOM   838  C CA  . TYR A 1 105 ? 21.460 24.112 36.601 1.00 36.37 ? ? ? ? ? ? 1960 TYR A CA  1 
+ATOM   839  C C   . TYR A 1 105 ? 22.227 23.581 35.389 1.00 37.71 ? ? ? ? ? ? 1960 TYR A C   1 
+ATOM   840  O O   . TYR A 1 105 ? 22.574 22.398 35.340 1.00 33.30 ? ? ? ? ? ? 1960 TYR A O   1 
+ATOM   841  C CB  . TYR A 1 105 ? 19.992 24.369 36.251 1.00 30.23 ? ? ? ? ? ? 1960 TYR A CB  1 
+ATOM   842  C CG  . TYR A 1 105 ? 19.191 23.115 35.960 1.00 40.26 ? ? ? ? ? ? 1960 TYR A CG  1 
+ATOM   843  C CD1 . TYR A 1 105 ? 18.833 22.234 36.984 1.00 41.13 ? ? ? ? ? ? 1960 TYR A CD1 1 
+ATOM   844  C CD2 . TYR A 1 105 ? 18.783 22.816 34.664 1.00 33.74 ? ? ? ? ? ? 1960 TYR A CD2 1 
+ATOM   845  C CE1 . TYR A 1 105 ? 18.095 21.083 36.716 1.00 41.13 ? ? ? ? ? ? 1960 TYR A CE1 1 
+ATOM   846  C CE2 . TYR A 1 105 ? 18.042 21.678 34.393 1.00 33.48 ? ? ? ? ? ? 1960 TYR A CE2 1 
+ATOM   847  C CZ  . TYR A 1 105 ? 17.705 20.817 35.416 1.00 36.28 ? ? ? ? ? ? 1960 TYR A CZ  1 
+ATOM   848  O OH  . TYR A 1 105 ? 16.972 19.687 35.128 1.00 45.03 ? ? ? ? ? ? 1960 TYR A OH  1 
+ATOM   849  N N   . PHE A 1 106 ? 22.513 24.465 34.437 1.00 31.27 ? ? ? ? ? ? 1961 PHE A N   1 
+ATOM   850  C CA  . PHE A 1 106 ? 23.262 24.083 33.235 1.00 31.21 ? ? ? ? ? ? 1961 PHE A CA  1 
+ATOM   851  C C   . PHE A 1 106 ? 24.652 23.563 33.541 1.00 32.40 ? ? ? ? ? ? 1961 PHE A C   1 
+ATOM   852  O O   . PHE A 1 106 ? 25.042 22.504 33.063 1.00 32.91 ? ? ? ? ? ? 1961 PHE A O   1 
+ATOM   853  C CB  . PHE A 1 106 ? 23.419 25.254 32.274 1.00 28.14 ? ? ? ? ? ? 1961 PHE A CB  1 
+ATOM   854  C CG  . PHE A 1 106 ? 24.362 24.954 31.127 1.00 30.53 ? ? ? ? ? ? 1961 PHE A CG  1 
+ATOM   855  C CD1 . PHE A 1 106 ? 23.998 24.060 30.134 1.00 30.88 ? ? ? ? ? ? 1961 PHE A CD1 1 
+ATOM   856  C CD2 . PHE A 1 106 ? 25.617 25.546 31.060 1.00 32.26 ? ? ? ? ? ? 1961 PHE A CD2 1 
+ATOM   857  C CE1 . PHE A 1 106 ? 24.857 23.772 29.081 1.00 29.70 ? ? ? ? ? ? 1961 PHE A CE1 1 
+ATOM   858  C CE2 . PHE A 1 106 ? 26.484 25.258 30.005 1.00 32.55 ? ? ? ? ? ? 1961 PHE A CE2 1 
+ATOM   859  C CZ  . PHE A 1 106 ? 26.105 24.372 29.023 1.00 28.34 ? ? ? ? ? ? 1961 PHE A CZ  1 
+ATOM   860  N N   . GLU A 1 107 ? 25.406 24.328 34.324 1.00 33.72 ? ? ? ? ? ? 1962 GLU A N   1 
+ATOM   861  C CA  . GLU A 1 107 ? 26.809 24.010 34.550 1.00 37.64 ? ? ? ? ? ? 1962 GLU A CA  1 
+ATOM   862  C C   . GLU A 1 107 ? 26.988 22.655 35.226 1.00 39.50 ? ? ? ? ? ? 1962 GLU A C   1 
+ATOM   863  O O   . GLU A 1 107 ? 27.959 21.952 34.954 1.00 36.63 ? ? ? ? ? ? 1962 GLU A O   1 
+ATOM   864  C CB  . GLU A 1 107 ? 27.486 25.111 35.371 1.00 39.16 ? ? ? ? ? ? 1962 GLU A CB  1 
+ATOM   865  C CG  . GLU A 1 107 ? 27.549 26.475 34.649 1.00 39.91 ? ? ? ? ? ? 1962 GLU A CG  1 
+ATOM   866  C CD  . GLU A 1 107 ? 28.307 26.437 33.316 1.00 47.97 ? ? ? ? ? ? 1962 GLU A CD  1 
+ATOM   867  O OE1 . GLU A 1 107 ? 29.002 25.435 33.020 1.00 42.54 ? ? ? ? ? ? 1962 GLU A OE1 1 
+ATOM   868  O OE2 . GLU A 1 107 ? 28.208 27.428 32.558 1.00 37.48 ? ? ? ? ? ? 1962 GLU A OE2 1 
+ATOM   869  N N   . LYS A 1 108 ? 26.050 22.276 36.088 1.00 37.04 ? ? ? ? ? ? 1963 LYS A N   1 
+ATOM   870  C CA  . LYS A 1 108 ? 26.137 20.954 36.716 1.00 41.72 ? ? ? ? ? ? 1963 LYS A CA  1 
+ATOM   871  C C   . LYS A 1 108 ? 25.835 19.846 35.711 1.00 40.43 ? ? ? ? ? ? 1963 LYS A C   1 
+ATOM   872  O O   . LYS A 1 108 ? 26.542 18.836 35.675 1.00 42.16 ? ? ? ? ? ? 1963 LYS A O   1 
+ATOM   873  C CB  . LYS A 1 108 ? 25.191 20.833 37.909 1.00 40.30 ? ? ? ? ? ? 1963 LYS A CB  1 
+ATOM   874  C CG  . LYS A 1 108 ? 25.520 19.621 38.793 1.00 50.69 ? ? ? ? ? ? 1963 LYS A CG  1 
+ATOM   875  C CD  . LYS A 1 108 ? 24.282 19.018 39.423 1.00 58.23 ? ? ? ? ? ? 1963 LYS A CD  1 
+ATOM   876  C CE  . LYS A 1 108 ? 24.642 18.038 40.538 1.00 62.27 ? ? ? ? ? ? 1963 LYS A CE  1 
+ATOM   877  N NZ  . LYS A 1 108 ? 25.690 17.053 40.151 1.00 55.24 ? ? ? ? ? ? 1963 LYS A NZ  1 
+ATOM   878  N N   . LYS A 1 109 ? 24.778 20.027 34.918 1.00 36.41 ? ? ? ? ? ? 1964 LYS A N   1 
+ATOM   879  C CA  . LYS A 1 109 ? 24.452 19.070 33.856 1.00 38.89 ? ? ? ? ? ? 1964 LYS A CA  1 
+ATOM   880  C C   . LYS A 1 109 ? 25.639 18.936 32.918 1.00 36.92 ? ? ? ? ? ? 1964 LYS A C   1 
+ATOM   881  O O   . LYS A 1 109 ? 25.984 17.839 32.483 1.00 39.37 ? ? ? ? ? ? 1964 LYS A O   1 
+ATOM   882  C CB  . LYS A 1 109 ? 23.215 19.508 33.061 1.00 38.49 ? ? ? ? ? ? 1964 LYS A CB  1 
+ATOM   883  C CG  . LYS A 1 109 ? 21.915 19.561 33.850 1.00 47.19 ? ? ? ? ? ? 1964 LYS A CG  1 
+ATOM   884  C CD  . LYS A 1 109 ? 21.390 18.172 34.161 1.00 56.84 ? ? ? ? ? ? 1964 LYS A CD  1 
+ATOM   885  C CE  . LYS A 1 109 ? 20.048 18.232 34.877 1.00 57.29 ? ? ? ? ? ? 1964 LYS A CE  1 
+ATOM   886  N N   . TRP A 1 110 ? 26.267 20.068 32.617 1.00 35.24 ? ? ? ? ? ? 1965 TRP A N   1 
+ATOM   887  C CA  . TRP A 1 110 ? 27.410 20.094 31.715 1.00 36.43 ? ? ? ? ? ? 1965 TRP A CA  1 
+ATOM   888  C C   . TRP A 1 110 ? 28.555 19.268 32.286 1.00 41.14 ? ? ? ? ? ? 1965 TRP A C   1 
+ATOM   889  O O   . TRP A 1 110 ? 29.107 18.407 31.610 1.00 39.79 ? ? ? ? ? ? 1965 TRP A O   1 
+ATOM   890  C CB  . TRP A 1 110 ? 27.853 21.538 31.459 1.00 34.92 ? ? ? ? ? ? 1965 TRP A CB  1 
+ATOM   891  C CG  . TRP A 1 110 ? 28.814 21.688 30.316 1.00 34.06 ? ? ? ? ? ? 1965 TRP A CG  1 
+ATOM   892  C CD1 . TRP A 1 110 ? 30.143 21.986 30.396 1.00 39.20 ? ? ? ? ? ? 1965 TRP A CD1 1 
+ATOM   893  C CD2 . TRP A 1 110 ? 28.524 21.526 28.921 1.00 29.86 ? ? ? ? ? ? 1965 TRP A CD2 1 
+ATOM   894  N NE1 . TRP A 1 110 ? 30.694 22.033 29.140 1.00 39.13 ? ? ? ? ? ? 1965 TRP A NE1 1 
+ATOM   895  C CE2 . TRP A 1 110 ? 29.722 21.749 28.217 1.00 29.67 ? ? ? ? ? ? 1965 TRP A CE2 1 
+ATOM   896  C CE3 . TRP A 1 110 ? 27.366 21.222 28.200 1.00 24.15 ? ? ? ? ? ? 1965 TRP A CE3 1 
+ATOM   897  C CZ2 . TRP A 1 110 ? 29.797 21.679 26.824 1.00 27.82 ? ? ? ? ? ? 1965 TRP A CZ2 1 
+ATOM   898  C CZ3 . TRP A 1 110 ? 27.443 21.156 26.814 1.00 28.78 ? ? ? ? ? ? 1965 TRP A CZ3 1 
+ATOM   899  C CH2 . TRP A 1 110 ? 28.649 21.385 26.146 1.00 26.52 ? ? ? ? ? ? 1965 TRP A CH2 1 
+ATOM   900  N N   . THR A 1 111 ? 28.891 19.519 33.546 1.00 36.20 ? ? ? ? ? ? 1966 THR A N   1 
+ATOM   901  C CA  . THR A 1 111 ? 29.960 18.784 34.204 1.00 48.09 ? ? ? ? ? ? 1966 THR A CA  1 
+ATOM   902  C C   . THR A 1 111 ? 29.626 17.299 34.329 1.00 47.68 ? ? ? ? ? ? 1966 THR A C   1 
+ATOM   903  O O   . THR A 1 111 ? 30.461 16.443 34.032 1.00 52.24 ? ? ? ? ? ? 1966 THR A O   1 
+ATOM   904  C CB  . THR A 1 111 ? 30.254 19.363 35.599 1.00 51.62 ? ? ? ? ? ? 1966 THR A CB  1 
+ATOM   905  O OG1 . THR A 1 111 ? 30.772 20.692 35.456 1.00 59.18 ? ? ? ? ? ? 1966 THR A OG1 1 
+ATOM   906  C CG2 . THR A 1 111 ? 31.273 18.511 36.327 1.00 60.31 ? ? ? ? ? ? 1966 THR A CG2 1 
+ATOM   907  N N   . ASP A 1 112 ? 28.404 16.993 34.760 1.00 48.06 ? ? ? ? ? ? 1967 ASP A N   1 
+ATOM   908  C CA  . ASP A 1 112 ? 27.997 15.601 34.957 1.00 49.92 ? ? ? ? ? ? 1967 ASP A CA  1 
+ATOM   909  C C   . ASP A 1 112 ? 27.962 14.815 33.654 1.00 48.00 ? ? ? ? ? ? 1967 ASP A C   1 
+ATOM   910  O O   . ASP A 1 112 ? 28.092 13.594 33.655 1.00 50.67 ? ? ? ? ? ? 1967 ASP A O   1 
+ATOM   911  C CB  . ASP A 1 112 ? 26.623 15.528 35.618 1.00 50.79 ? ? ? ? ? ? 1967 ASP A CB  1 
+ATOM   912  C CG  . ASP A 1 112 ? 26.642 16.003 37.056 1.00 58.55 ? ? ? ? ? ? 1967 ASP A CG  1 
+ATOM   913  O OD1 . ASP A 1 112 ? 27.745 16.187 37.615 1.00 55.68 ? ? ? ? ? ? 1967 ASP A OD1 1 
+ATOM   914  O OD2 . ASP A 1 112 ? 25.548 16.185 37.626 1.00 54.57 ? ? ? ? ? ? 1967 ASP A OD2 1 
+ATOM   915  N N   . THR A 1 113 ? 27.772 15.514 32.541 1.00 44.16 ? ? ? ? ? ? 1968 THR A N   1 
+ATOM   916  C CA  . THR A 1 113 ? 27.627 14.831 31.264 1.00 42.40 ? ? ? ? ? ? 1968 THR A CA  1 
+ATOM   917  C C   . THR A 1 113 ? 28.976 14.606 30.593 1.00 43.79 ? ? ? ? ? ? 1968 THR A C   1 
+ATOM   918  O O   . THR A 1 113 ? 29.202 13.558 30.000 1.00 53.58 ? ? ? ? ? ? 1968 THR A O   1 
+ATOM   919  C CB  . THR A 1 113 ? 26.695 15.613 30.321 1.00 43.22 ? ? ? ? ? ? 1968 THR A CB  1 
+ATOM   920  O OG1 . THR A 1 113 ? 25.412 15.759 30.945 1.00 39.24 ? ? ? ? ? ? 1968 THR A OG1 1 
+ATOM   921  C CG2 . THR A 1 113 ? 26.532 14.884 28.984 1.00 39.18 ? ? ? ? ? ? 1968 THR A CG2 1 
+ATOM   922  N N   . PHE A 1 114 ? 29.887 15.566 30.708 1.00 54.37 ? ? ? ? ? ? 1969 PHE A N   1 
+ATOM   923  C CA  . PHE A 1 114 ? 31.148 15.467 29.980 1.00 58.67 ? ? ? ? ? ? 1969 PHE A CA  1 
+ATOM   924  C C   . PHE A 1 114 ? 32.385 15.400 30.880 1.00 71.55 ? ? ? ? ? ? 1969 PHE A C   1 
+ATOM   925  O O   . PHE A 1 114 ? 33.348 14.706 30.558 1.00 82.08 ? ? ? ? ? ? 1969 PHE A O   1 
+ATOM   926  C CB  . PHE A 1 114 ? 31.266 16.638 29.001 1.00 54.23 ? ? ? ? ? ? 1969 PHE A CB  1 
+ATOM   927  C CG  . PHE A 1 114 ? 30.148 16.694 27.995 1.00 45.53 ? ? ? ? ? ? 1969 PHE A CG  1 
+ATOM   928  C CD1 . PHE A 1 114 ? 30.067 15.757 26.973 1.00 49.90 ? ? ? ? ? ? 1969 PHE A CD1 1 
+ATOM   929  C CD2 . PHE A 1 114 ? 29.175 17.676 28.077 1.00 41.75 ? ? ? ? ? ? 1969 PHE A CD2 1 
+ATOM   930  C CE1 . PHE A 1 114 ? 29.033 15.804 26.049 1.00 45.03 ? ? ? ? ? ? 1969 PHE A CE1 1 
+ATOM   931  C CE2 . PHE A 1 114 ? 28.143 17.733 27.160 1.00 39.17 ? ? ? ? ? ? 1969 PHE A CE2 1 
+ATOM   932  C CZ  . PHE A 1 114 ? 28.068 16.800 26.145 1.00 40.53 ? ? ? ? ? ? 1969 PHE A CZ  1 
+ATOM   933  N N   . LYS A 1 115 ? 32.363 16.107 32.004 1.00 77.87 ? ? ? ? ? ? 1970 LYS A N   1 
+ATOM   934  C CA  . LYS A 1 115 ? 33.495 16.083 32.929 1.00 84.68 ? ? ? ? ? ? 1970 LYS A CA  1 
+ATOM   935  C C   . LYS A 1 115 ? 33.430 14.872 33.857 1.00 86.35 ? ? ? ? ? ? 1970 LYS A C   1 
+ATOM   936  O O   . LYS A 1 115 ? 33.662 13.738 33.432 1.00 87.69 ? ? ? ? ? ? 1970 LYS A O   1 
+ATOM   937  C CB  . LYS A 1 115 ? 33.549 17.374 33.750 1.00 80.81 ? ? ? ? ? ? 1970 LYS A CB  1 
+HETATM 938  F F   . ZYB B 2 .   ? 13.101 41.429 28.043 1.00 57.66 ? ? ? ? ? ? 2971 ZYB A F   1 
+HETATM 939  C C2  . ZYB B 2 .   ? 12.706 41.725 29.252 1.00 56.97 ? ? ? ? ? ? 2971 ZYB A C2  1 
+HETATM 940  C C1  . ZYB B 2 .   ? 13.585 41.632 30.293 1.00 55.75 ? ? ? ? ? ? 2971 ZYB A C1  1 
+HETATM 941  C C3  . ZYB B 2 .   ? 11.420 42.125 29.483 1.00 52.80 ? ? ? ? ? ? 2971 ZYB A C3  1 
+HETATM 942  C C4  . ZYB B 2 .   ? 11.019 42.445 30.749 1.00 44.44 ? ? ? ? ? ? 2971 ZYB A C4  1 
+HETATM 943  C C5  . ZYB B 2 .   ? 11.884 42.352 31.805 1.00 44.59 ? ? ? ? ? ? 2971 ZYB A C5  1 
+HETATM 944  C C   . ZYB B 2 .   ? 13.173 41.955 31.565 1.00 45.42 ? ? ? ? ? ? 2971 ZYB A C   1 
+HETATM 945  C C6  . ZYB B 2 .   ? 11.464 42.703 33.214 1.00 53.45 ? ? ? ? ? ? 2971 ZYB A C6  1 
+HETATM 946  N N   . ZYB B 2 .   ? 12.323 43.272 34.165 1.00 56.95 ? ? ? ? ? ? 2971 ZYB A N   1 
+HETATM 947  N N1  . ZYB B 2 .   ? 10.288 42.524 33.655 1.00 62.80 ? ? ? ? ? ? 2971 ZYB A N1  1 
+HETATM 948  O O   . ZYB B 2 .   ? 9.346  41.983 32.897 1.00 74.37 ? ? ? ? ? ? 2971 ZYB A O   1 
+HETATM 949  H H1  . ZYB B 2 .   ? 14.499 41.347 30.130 1.00 66.90 ? ? ? ? ? ? 2971 ZYB A H1  1 
+HETATM 950  H H3  . ZYB B 2 .   ? 10.792 42.194 28.744 1.00 63.37 ? ? ? ? ? ? 2971 ZYB A H3  1 
+HETATM 951  H H   . ZYB B 2 .   ? 13.802 41.889 32.302 1.00 54.51 ? ? ? ? ? ? 2971 ZYB A H   1 
+HETATM 952  H H4  . ZYB B 2 .   ? 10.105 42.732 30.881 1.00 53.33 ? ? ? ? ? ? 2971 ZYB A H4  1 
+HETATM 953  H HN1 . ZYB B 2 .   ? 12.007 43.463 34.999 1.00 68.34 ? ? ? ? ? ? 2971 ZYB A HN1 1 
+HETATM 954  H HN2 . ZYB B 2 .   ? 13.192 43.451 33.952 1.00 68.34 ? ? ? ? ? ? 2971 ZYB A HN2 1 
+HETATM 955  H HB  . ZYB B 2 .   ? 9.117  42.563 32.266 1.00 89.25 ? ? ? ? ? ? 2971 ZYB A HB  1 
+HETATM 956  C C   . MOH C 3 .   ? 14.843 38.427 29.938 1.00 20.02 ? ? ? ? ? ? 2972 MOH A C   1 
+HETATM 957  O O   . MOH C 3 .   ? 15.883 39.362 30.110 1.00 23.93 ? ? ? ? ? ? 2972 MOH A O   1 
+HETATM 958  C C   . MOH D 3 .   ? 19.997 17.491 15.480 1.00 47.26 ? ? ? ? ? ? 2973 MOH A C   1 
+HETATM 959  O O   . MOH D 3 .   ? 19.916 17.750 16.873 1.00 51.18 ? ? ? ? ? ? 2973 MOH A O   1 
+HETATM 960  C C   . MOH E 3 .   ? 20.262 13.641 17.581 1.00 65.59 ? ? ? ? ? ? 2974 MOH A C   1 
+HETATM 961  O O   . MOH E 3 .   ? 19.727 14.187 18.770 1.00 65.24 ? ? ? ? ? ? 2974 MOH A O   1 
+HETATM 962  O O   . HOH F 4 .   ? 10.022 21.482 25.696 1.00 72.06 ? ? ? ? ? ? 2001 HOH A O   1 
+HETATM 963  O O   . HOH F 4 .   ? 9.855  23.456 23.774 1.00 66.16 ? ? ? ? ? ? 2002 HOH A O   1 
+HETATM 964  O O   . HOH F 4 .   ? 49.309 8.719  21.892 1.00 45.11 ? ? ? ? ? ? 2003 HOH A O   1 
+HETATM 965  O O   . HOH F 4 .   ? 13.719 20.834 37.413 1.00 62.79 ? ? ? ? ? ? 2004 HOH A O   1 
+HETATM 966  O O   . HOH F 4 .   ? 4.983  33.736 30.894 1.00 67.99 ? ? ? ? ? ? 2005 HOH A O   1 
+HETATM 967  O O   . HOH F 4 .   ? 6.459  35.205 30.033 1.00 61.90 ? ? ? ? ? ? 2006 HOH A O   1 
+HETATM 968  O O   . HOH F 4 .   ? 7.918  32.035 26.603 1.00 61.36 ? ? ? ? ? ? 2007 HOH A O   1 
+HETATM 969  O O   . HOH F 4 .   ? 10.497 38.082 29.860 1.00 67.61 ? ? ? ? ? ? 2008 HOH A O   1 
+HETATM 970  O O   . HOH F 4 .   ? 9.999  27.064 20.875 1.00 70.16 ? ? ? ? ? ? 2009 HOH A O   1 
+HETATM 971  O O   . HOH F 4 .   ? 16.743 38.611 18.320 1.00 33.23 ? ? ? ? ? ? 2010 HOH A O   1 
+HETATM 972  O O   . HOH F 4 .   ? 14.593 38.990 16.988 1.00 75.27 ? ? ? ? ? ? 2011 HOH A O   1 
+HETATM 973  O O   . HOH F 4 .   ? 12.283 49.752 21.320 1.00 55.93 ? ? ? ? ? ? 2012 HOH A O   1 
+HETATM 974  O O   . HOH F 4 .   ? 20.363 42.495 17.546 1.00 39.08 ? ? ? ? ? ? 2013 HOH A O   1 
+HETATM 975  O O   . HOH F 4 .   ? 13.381 45.493 15.888 1.00 49.69 ? ? ? ? ? ? 2014 HOH A O   1 
+HETATM 976  O O   . HOH F 4 .   ? 27.826 39.234 23.817 1.00 37.96 ? ? ? ? ? ? 2015 HOH A O   1 
+HETATM 977  O O   . HOH F 4 .   ? 21.090 38.507 16.588 1.00 45.63 ? ? ? ? ? ? 2016 HOH A O   1 
+HETATM 978  O O   . HOH F 4 .   ? 29.397 34.268 22.742 1.00 55.62 ? ? ? ? ? ? 2017 HOH A O   1 
+HETATM 979  O O   . HOH F 4 .   ? 31.710 37.827 23.339 1.00 72.95 ? ? ? ? ? ? 2018 HOH A O   1 
+HETATM 980  O O   . HOH F 4 .   ? 17.743 36.110 18.353 1.00 30.04 ? ? ? ? ? ? 2019 HOH A O   1 
+HETATM 981  O O   . HOH F 4 .   ? 12.010 25.049 19.917 1.00 41.58 ? ? ? ? ? ? 2020 HOH A O   1 
+HETATM 982  O O   . HOH F 4 .   ? 15.066 30.157 15.335 1.00 56.83 ? ? ? ? ? ? 2021 HOH A O   1 
+HETATM 983  O O   . HOH F 4 .   ? 28.488 34.280 19.639 1.00 77.03 ? ? ? ? ? ? 2022 HOH A O   1 
+HETATM 984  O O   . HOH F 4 .   ? 13.795 19.144 14.680 1.00 66.35 ? ? ? ? ? ? 2023 HOH A O   1 
+HETATM 985  O O   . HOH F 4 .   ? 20.388 31.994 14.337 1.00 52.47 ? ? ? ? ? ? 2024 HOH A O   1 
+HETATM 986  O O   . HOH F 4 .   ? 17.099 30.537 14.683 1.00 46.13 ? ? ? ? ? ? 2025 HOH A O   1 
+HETATM 987  O O   . HOH F 4 .   ? 19.150 30.128 14.146 1.00 55.85 ? ? ? ? ? ? 2026 HOH A O   1 
+HETATM 988  O O   . HOH F 4 .   ? 30.873 32.142 27.922 1.00 43.66 ? ? ? ? ? ? 2027 HOH A O   1 
+HETATM 989  O O   . HOH F 4 .   ? 28.359 38.272 26.378 1.00 36.65 ? ? ? ? ? ? 2028 HOH A O   1 
+HETATM 990  O O   . HOH F 4 .   ? 26.162 44.602 34.444 1.00 76.95 ? ? ? ? ? ? 2029 HOH A O   1 
+HETATM 991  O O   . HOH F 4 .   ? 20.950 34.480 42.959 1.00 54.47 ? ? ? ? ? ? 2030 HOH A O   1 
+HETATM 992  O O   . HOH F 4 .   ? 23.798 36.496 43.163 1.00 55.30 ? ? ? ? ? ? 2031 HOH A O   1 
+HETATM 993  O O   . HOH F 4 .   ? 28.782 29.253 36.276 1.00 58.23 ? ? ? ? ? ? 2032 HOH A O   1 
+HETATM 994  O O   . HOH F 4 .   ? 32.622 23.373 33.061 1.00 57.54 ? ? ? ? ? ? 2033 HOH A O   1 
+HETATM 995  O O   . HOH F 4 .   ? 7.889  28.220 23.936 1.00 66.20 ? ? ? ? ? ? 2034 HOH A O   1 
+HETATM 996  O O   . HOH F 4 .   ? 18.062 36.986 14.008 1.00 64.39 ? ? ? ? ? ? 2035 HOH A O   1 
+HETATM 997  O O   . HOH F 4 .   ? 6.759  29.564 25.379 1.00 61.49 ? ? ? ? ? ? 2036 HOH A O   1 
+HETATM 998  O O   . HOH F 4 .   ? 18.877 40.002 17.035 1.00 41.58 ? ? ? ? ? ? 2037 HOH A O   1 
+HETATM 999  O O   . HOH F 4 .   ? 17.947 40.034 14.360 1.00 71.33 ? ? ? ? ? ? 2038 HOH A O   1 
+HETATM 1000 O O   . HOH F 4 .   ? 49.700 17.754 20.028 1.00 33.75 ? ? ? ? ? ? 2039 HOH A O   1 
+HETATM 1001 O O   . HOH F 4 .   ? 54.699 18.951 14.314 1.00 36.13 ? ? ? ? ? ? 2040 HOH A O   1 
+HETATM 1002 O O   . HOH F 4 .   ? 48.417 16.913 11.414 1.00 44.68 ? ? ? ? ? ? 2041 HOH A O   1 
+HETATM 1003 O O   . HOH F 4 .   ? 47.833 9.932  20.324 1.00 44.46 ? ? ? ? ? ? 2042 HOH A O   1 
+HETATM 1004 O O   . HOH F 4 .   ? 47.016 20.600 15.420 1.00 56.49 ? ? ? ? ? ? 2043 HOH A O   1 
+HETATM 1005 O O   . HOH F 4 .   ? 36.084 8.857  24.173 1.00 64.01 ? ? ? ? ? ? 2044 HOH A O   1 
+HETATM 1006 O O   . HOH F 4 .   ? 30.306 11.616 22.382 1.00 41.64 ? ? ? ? ? ? 2045 HOH A O   1 
+HETATM 1007 O O   . HOH F 4 .   ? 24.872 12.423 18.724 1.00 31.83 ? ? ? ? ? ? 2046 HOH A O   1 
+HETATM 1008 O O   . HOH F 4 .   ? 32.113 18.160 20.044 1.00 43.06 ? ? ? ? ? ? 2047 HOH A O   1 
+HETATM 1009 O O   . HOH F 4 .   ? 18.823 13.311 22.917 1.00 51.53 ? ? ? ? ? ? 2048 HOH A O   1 
+HETATM 1010 O O   . HOH F 4 .   ? 16.161 15.671 23.834 1.00 53.90 ? ? ? ? ? ? 2049 HOH A O   1 
+HETATM 1011 O O   . HOH F 4 .   ? 16.474 15.356 28.505 1.00 49.39 ? ? ? ? ? ? 2050 HOH A O   1 
+HETATM 1012 O O   . HOH F 4 .   ? 19.716 11.870 25.898 1.00 55.67 ? ? ? ? ? ? 2051 HOH A O   1 
+HETATM 1013 O O   . HOH F 4 .   ? 14.190 20.080 33.755 1.00 40.86 ? ? ? ? ? ? 2052 HOH A O   1 
+HETATM 1014 O O   . HOH F 4 .   ? 16.006 16.626 33.801 1.00 63.70 ? ? ? ? ? ? 2053 HOH A O   1 
+HETATM 1015 O O   . HOH F 4 .   ? 9.820  25.253 31.112 1.00 38.19 ? ? ? ? ? ? 2054 HOH A O   1 
+HETATM 1016 O O   . HOH F 4 .   ? 9.286  23.840 26.837 1.00 71.54 ? ? ? ? ? ? 2055 HOH A O   1 
+HETATM 1017 O O   . HOH F 4 .   ? 11.813 22.481 37.237 1.00 40.67 ? ? ? ? ? ? 2056 HOH A O   1 
+HETATM 1018 O O   . HOH F 4 .   ? 8.637  27.688 31.635 1.00 50.11 ? ? ? ? ? ? 2057 HOH A O   1 
+HETATM 1019 O O   . HOH F 4 .   ? 7.209  33.128 28.724 1.00 71.36 ? ? ? ? ? ? 2058 HOH A O   1 
+HETATM 1020 O O   . HOH F 4 .   ? 10.592 33.431 26.632 1.00 31.26 ? ? ? ? ? ? 2059 HOH A O   1 
+HETATM 1021 O O   . HOH F 4 .   ? 11.235 37.314 27.829 1.00 50.09 ? ? ? ? ? ? 2060 HOH A O   1 
+HETATM 1022 O O   . HOH F 4 .   ? 14.805 35.285 26.097 1.00 28.85 ? ? ? ? ? ? 2061 HOH A O   1 
+HETATM 1023 O O   . HOH F 4 .   ? 12.020 27.287 23.727 1.00 39.16 ? ? ? ? ? ? 2062 HOH A O   1 
+HETATM 1024 O O   . HOH F 4 .   ? 10.652 36.085 25.723 1.00 45.42 ? ? ? ? ? ? 2063 HOH A O   1 
+HETATM 1025 O O   . HOH F 4 .   ? 9.631  36.738 20.608 1.00 68.57 ? ? ? ? ? ? 2064 HOH A O   1 
+HETATM 1026 O O   . HOH F 4 .   ? 15.877 39.137 20.800 1.00 31.10 ? ? ? ? ? ? 2065 HOH A O   1 
+HETATM 1027 O O   . HOH F 4 .   ? 16.548 37.288 22.780 1.00 27.50 ? ? ? ? ? ? 2066 HOH A O   1 
+HETATM 1028 O O   . HOH F 4 .   ? 9.739  39.897 24.415 1.00 38.01 ? ? ? ? ? ? 2067 HOH A O   1 
+HETATM 1029 O O   . HOH F 4 .   ? 12.396 41.088 17.671 1.00 54.61 ? ? ? ? ? ? 2068 HOH A O   1 
+HETATM 1030 O O   . HOH F 4 .   ? 14.917 46.883 22.021 1.00 34.11 ? ? ? ? ? ? 2069 HOH A O   1 
+HETATM 1031 O O   . HOH F 4 .   ? 10.354 49.867 22.445 1.00 54.04 ? ? ? ? ? ? 2070 HOH A O   1 
+HETATM 1032 O O   . HOH F 4 .   ? 17.013 49.205 22.232 1.00 35.94 ? ? ? ? ? ? 2071 HOH A O   1 
+HETATM 1033 O O   . HOH F 4 .   ? 15.002 51.840 23.760 1.00 38.50 ? ? ? ? ? ? 2072 HOH A O   1 
+HETATM 1034 O O   . HOH F 4 .   ? 18.929 37.372 24.878 1.00 26.24 ? ? ? ? ? ? 2073 HOH A O   1 
+HETATM 1035 O O   . HOH F 4 .   ? 18.365 38.934 28.770 1.00 27.93 ? ? ? ? ? ? 2074 HOH A O   1 
+HETATM 1036 O O   . HOH F 4 .   ? 20.711 43.703 19.713 1.00 38.04 ? ? ? ? ? ? 2075 HOH A O   1 
+HETATM 1037 O O   . HOH F 4 .   ? 15.285 43.920 14.949 1.00 62.80 ? ? ? ? ? ? 2076 HOH A O   1 
+HETATM 1038 O O   . HOH F 4 .   ? 24.523 55.530 19.752 1.00 41.19 ? ? ? ? ? ? 2077 HOH A O   1 
+HETATM 1039 O O   . HOH F 4 .   ? 25.819 42.790 24.965 1.00 41.83 ? ? ? ? ? ? 2078 HOH A O   1 
+HETATM 1040 O O   . HOH F 4 .   ? 25.262 40.180 24.148 1.00 32.73 ? ? ? ? ? ? 2079 HOH A O   1 
+HETATM 1041 O O   . HOH F 4 .   ? 23.236 40.295 16.935 1.00 65.81 ? ? ? ? ? ? 2080 HOH A O   1 
+HETATM 1042 O O   . HOH F 4 .   ? 23.693 44.108 18.054 1.00 51.91 ? ? ? ? ? ? 2081 HOH A O   1 
+HETATM 1043 O O   . HOH F 4 .   ? 24.530 49.151 18.245 1.00 68.10 ? ? ? ? ? ? 2082 HOH A O   1 
+HETATM 1044 O O   . HOH F 4 .   ? 29.757 36.549 22.673 1.00 59.13 ? ? ? ? ? ? 2083 HOH A O   1 
+HETATM 1045 O O   . HOH F 4 .   ? 17.620 35.461 21.013 1.00 26.30 ? ? ? ? ? ? 2084 HOH A O   1 
+HETATM 1046 O O   . HOH F 4 .   ? 20.282 36.066 18.152 1.00 47.27 ? ? ? ? ? ? 2085 HOH A O   1 
+HETATM 1047 O O   . HOH F 4 .   ? 17.191 35.183 26.434 1.00 31.45 ? ? ? ? ? ? 2086 HOH A O   1 
+HETATM 1048 O O   . HOH F 4 .   ? 13.631 26.057 18.018 1.00 31.32 ? ? ? ? ? ? 2087 HOH A O   1 
+HETATM 1049 O O   . HOH F 4 .   ? 13.876 31.159 17.942 1.00 48.99 ? ? ? ? ? ? 2088 HOH A O   1 
+HETATM 1050 O O   . HOH F 4 .   ? 16.769 34.148 16.880 1.00 37.84 ? ? ? ? ? ? 2089 HOH A O   1 
+HETATM 1051 O O   . HOH F 4 .   ? 18.148 19.502 18.580 1.00 41.24 ? ? ? ? ? ? 2090 HOH A O   1 
+HETATM 1052 O O   . HOH F 4 .   ? 13.480 17.462 21.017 1.00 63.97 ? ? ? ? ? ? 2091 HOH A O   1 
+HETATM 1053 O O   . HOH F 4 .   ? 14.246 24.172 16.064 1.00 40.37 ? ? ? ? ? ? 2092 HOH A O   1 
+HETATM 1054 O O   . HOH F 4 .   ? 13.807 24.254 10.402 1.00 53.41 ? ? ? ? ? ? 2093 HOH A O   1 
+HETATM 1055 O O   . HOH F 4 .   ? 18.290 26.528 10.971 1.00 37.65 ? ? ? ? ? ? 2094 HOH A O   1 
+HETATM 1056 O O   . HOH F 4 .   ? 23.456 32.819 16.199 1.00 41.64 ? ? ? ? ? ? 2095 HOH A O   1 
+HETATM 1057 O O   . HOH F 4 .   ? 27.413 30.028 17.492 1.00 49.77 ? ? ? ? ? ? 2096 HOH A O   1 
+HETATM 1058 O O   . HOH F 4 .   ? 26.076 32.886 18.780 1.00 39.46 ? ? ? ? ? ? 2097 HOH A O   1 
+HETATM 1059 O O   . HOH F 4 .   ? 24.839 21.430 15.660 1.00 26.90 ? ? ? ? ? ? 2098 HOH A O   1 
+HETATM 1060 O O   . HOH F 4 .   ? 17.451 17.851 12.901 1.00 47.85 ? ? ? ? ? ? 2099 HOH A O   1 
+HETATM 1061 O O   . HOH F 4 .   ? 14.075 21.548 16.258 1.00 52.21 ? ? ? ? ? ? 2100 HOH A O   1 
+HETATM 1062 O O   . HOH F 4 .   ? 28.093 28.077 16.234 1.00 53.38 ? ? ? ? ? ? 2101 HOH A O   1 
+HETATM 1063 O O   . HOH F 4 .   ? 22.331 30.655 10.032 1.00 57.12 ? ? ? ? ? ? 2102 HOH A O   1 
+HETATM 1064 O O   . HOH F 4 .   ? 22.795 31.536 13.460 1.00 58.79 ? ? ? ? ? ? 2103 HOH A O   1 
+HETATM 1065 O O   . HOH F 4 .   ? 25.878 30.199 13.548 1.00 62.49 ? ? ? ? ? ? 2104 HOH A O   1 
+HETATM 1066 O O   . HOH F 4 .   ? 18.842 29.119 12.218 1.00 43.86 ? ? ? ? ? ? 2105 HOH A O   1 
+HETATM 1067 O O   . HOH F 4 .   ? 36.270 22.341 16.173 1.00 63.22 ? ? ? ? ? ? 2106 HOH A O   1 
+HETATM 1068 O O   . HOH F 4 .   ? 35.040 21.758 21.898 1.00 58.36 ? ? ? ? ? ? 2107 HOH A O   1 
+HETATM 1069 O O   . HOH F 4 .   ? 28.536 29.888 20.202 1.00 41.22 ? ? ? ? ? ? 2108 HOH A O   1 
+HETATM 1070 O O   . HOH F 4 .   ? 29.358 32.925 25.925 1.00 31.19 ? ? ? ? ? ? 2109 HOH A O   1 
+HETATM 1071 O O   . HOH F 4 .   ? 32.517 29.815 28.520 1.00 49.95 ? ? ? ? ? ? 2110 HOH A O   1 
+HETATM 1072 O O   . HOH F 4 .   ? 18.672 36.149 28.506 1.00 26.69 ? ? ? ? ? ? 2111 HOH A O   1 
+HETATM 1073 O O   . HOH F 4 .   ? 21.697 35.070 34.500 1.00 23.79 ? ? ? ? ? ? 2112 HOH A O   1 
+HETATM 1074 O O   . HOH F 4 .   ? 27.482 39.559 32.373 1.00 56.82 ? ? ? ? ? ? 2113 HOH A O   1 
+HETATM 1075 O O   . HOH F 4 .   ? 29.646 35.212 33.130 1.00 50.55 ? ? ? ? ? ? 2114 HOH A O   1 
+HETATM 1076 O O   . HOH F 4 .   ? 28.416 35.532 26.914 1.00 38.68 ? ? ? ? ? ? 2115 HOH A O   1 
+HETATM 1077 O O   . HOH F 4 .   ? 30.252 33.192 30.122 1.00 38.14 ? ? ? ? ? ? 2116 HOH A O   1 
+HETATM 1078 O O   . HOH F 4 .   ? 26.307 39.198 27.582 1.00 37.97 ? ? ? ? ? ? 2117 HOH A O   1 
+HETATM 1079 O O   . HOH F 4 .   ? 20.619 36.858 36.208 1.00 26.65 ? ? ? ? ? ? 2118 HOH A O   1 
+HETATM 1080 O O   . HOH F 4 .   ? 23.667 34.037 36.165 1.00 31.26 ? ? ? ? ? ? 2119 HOH A O   1 
+HETATM 1081 O O   . HOH F 4 .   ? 27.237 34.635 37.381 1.00 53.65 ? ? ? ? ? ? 2120 HOH A O   1 
+HETATM 1082 O O   . HOH F 4 .   ? 26.758 41.946 35.152 1.00 68.46 ? ? ? ? ? ? 2121 HOH A O   1 
+HETATM 1083 O O   . HOH F 4 .   ? 24.279 45.804 32.838 1.00 31.87 ? ? ? ? ? ? 2122 HOH A O   1 
+HETATM 1084 O O   . HOH F 4 .   ? 21.112 39.380 37.230 1.00 27.53 ? ? ? ? ? ? 2123 HOH A O   1 
+HETATM 1085 O O   . HOH F 4 .   ? 14.000 41.650 36.058 1.00 40.53 ? ? ? ? ? ? 2124 HOH A O   1 
+HETATM 1086 O O   . HOH F 4 .   ? 16.010 44.370 36.642 1.00 31.64 ? ? ? ? ? ? 2125 HOH A O   1 
+HETATM 1087 O O   . HOH F 4 .   ? 22.159 43.235 40.031 1.00 35.31 ? ? ? ? ? ? 2126 HOH A O   1 
+HETATM 1088 O O   . HOH F 4 .   ? 19.831 43.489 42.462 1.00 29.68 ? ? ? ? ? ? 2127 HOH A O   1 
+HETATM 1089 O O   . HOH F 4 .   ? 22.549 48.439 39.132 1.00 55.22 ? ? ? ? ? ? 2128 HOH A O   1 
+HETATM 1090 O O   . HOH F 4 .   ? 13.893 48.371 41.323 1.00 71.57 ? ? ? ? ? ? 2129 HOH A O   1 
+HETATM 1091 O O   . HOH F 4 .   ? 18.115 38.151 45.161 1.00 56.51 ? ? ? ? ? ? 2130 HOH A O   1 
+HETATM 1092 O O   . HOH F 4 .   ? 19.704 36.599 42.356 1.00 48.79 ? ? ? ? ? ? 2131 HOH A O   1 
+HETATM 1093 O O   . HOH F 4 .   ? 12.235 40.880 43.778 1.00 50.38 ? ? ? ? ? ? 2132 HOH A O   1 
+HETATM 1094 O O   . HOH F 4 .   ? 14.322 39.623 47.341 1.00 56.25 ? ? ? ? ? ? 2133 HOH A O   1 
+HETATM 1095 O O   . HOH F 4 .   ? 11.799 40.005 36.902 1.00 32.82 ? ? ? ? ? ? 2134 HOH A O   1 
+HETATM 1096 O O   . HOH F 4 .   ? 10.801 40.634 39.586 1.00 45.53 ? ? ? ? ? ? 2135 HOH A O   1 
+HETATM 1097 O O   . HOH F 4 .   ? 18.804 32.671 41.946 1.00 50.79 ? ? ? ? ? ? 2136 HOH A O   1 
+HETATM 1098 O O   . HOH F 4 .   ? 23.623 34.350 42.820 1.00 62.35 ? ? ? ? ? ? 2137 HOH A O   1 
+HETATM 1099 O O   . HOH F 4 .   ? 25.654 32.960 38.818 1.00 38.93 ? ? ? ? ? ? 2138 HOH A O   1 
+HETATM 1100 O O   . HOH F 4 .   ? 24.552 30.490 39.019 1.00 37.91 ? ? ? ? ? ? 2139 HOH A O   1 
+HETATM 1101 O O   . HOH F 4 .   ? 28.619 30.000 33.367 1.00 34.88 ? ? ? ? ? ? 2140 HOH A O   1 
+HETATM 1102 O O   . HOH F 4 .   ? 30.386 31.617 32.147 1.00 45.65 ? ? ? ? ? ? 2141 HOH A O   1 
+HETATM 1103 O O   . HOH F 4 .   ? 26.947 28.741 37.897 1.00 44.53 ? ? ? ? ? ? 2142 HOH A O   1 
+HETATM 1104 O O   . HOH F 4 .   ? 21.982 20.442 37.227 1.00 34.13 ? ? ? ? ? ? 2143 HOH A O   1 
+HETATM 1105 O O   . HOH F 4 .   ? 30.213 23.289 34.002 1.00 38.74 ? ? ? ? ? ? 2144 HOH A O   1 
+HETATM 1106 O O   . HOH F 4 .   ? 32.249 27.856 33.935 1.00 59.39 ? ? ? ? ? ? 2145 HOH A O   1 
+HETATM 1107 O O   . HOH F 4 .   ? 6.377  28.531 21.462 1.00 71.01 ? ? ? ? ? ? 2146 HOH A O   1 
+# 
+loop_
+_atom_site_anisotrop.id 
+_atom_site_anisotrop.type_symbol 
+_atom_site_anisotrop.pdbx_label_atom_id 
+_atom_site_anisotrop.pdbx_label_alt_id 
+_atom_site_anisotrop.pdbx_label_comp_id 
+_atom_site_anisotrop.pdbx_label_asym_id 
+_atom_site_anisotrop.pdbx_label_seq_id 
+_atom_site_anisotrop.U[1][1] 
+_atom_site_anisotrop.U[2][2] 
+_atom_site_anisotrop.U[3][3] 
+_atom_site_anisotrop.U[1][2] 
+_atom_site_anisotrop.U[1][3] 
+_atom_site_anisotrop.U[2][3] 
+_atom_site_anisotrop.U[1][1]_esd 
+_atom_site_anisotrop.U[2][2]_esd 
+_atom_site_anisotrop.U[3][3]_esd 
+_atom_site_anisotrop.U[1][2]_esd 
+_atom_site_anisotrop.U[1][3]_esd 
+_atom_site_anisotrop.U[2][3]_esd 
+_atom_site_anisotrop.pdbx_auth_seq_id 
+_atom_site_anisotrop.pdbx_auth_comp_id 
+_atom_site_anisotrop.pdbx_auth_asym_id 
+_atom_site_anisotrop.pdbx_auth_atom_id 
+1   N N   . SER A 1   0.4738 0.4524 0.2904 -0.0309 -0.0231 0.0036  ? ? ? ? ? ? 1856 SER A N   
+2   C CA  . SER A 1   0.5262 0.4447 0.3239 -0.0195 -0.0197 0.0010  ? ? ? ? ? ? 1856 SER A CA  
+3   C C   . SER A 1   0.5639 0.4532 0.3452 -0.0370 -0.0113 0.0088  ? ? ? ? ? ? 1856 SER A C   
+4   O O   . SER A 1   0.5214 0.4379 0.3045 -0.0533 -0.0125 0.0141  ? ? ? ? ? ? 1856 SER A O   
+5   C CB  . SER A 1   0.4971 0.3714 0.3023 -0.0165 -0.0119 0.0024  ? ? ? ? ? ? 1856 SER A CB  
+6   O OG  . SER A 1   0.5159 0.3779 0.3411 -0.0339 0.0002  0.0133  ? ? ? ? ? ? 1856 SER A OG  
+7   N N   . MET A 2   0.5837 0.4186 0.3455 -0.0378 -0.0030 0.0086  ? ? ? ? ? ? 1857 MET A N   
+8   C CA  . MET A 2   0.6137 0.4220 0.3555 -0.0563 0.0075  0.0102  ? ? ? ? ? ? 1857 MET A CA  
+9   C C   . MET A 2   0.5509 0.3572 0.3169 -0.0727 0.0190  0.0130  ? ? ? ? ? ? 1857 MET A C   
+10  O O   . MET A 2   0.5733 0.3648 0.3670 -0.0718 0.0282  0.0138  ? ? ? ? ? ? 1857 MET A O   
+11  C CB  . MET A 2   0.6333 0.3897 0.3494 -0.0611 0.0183  0.0080  ? ? ? ? ? ? 1857 MET A CB  
+12  C CG  . MET A 2   0.6662 0.4019 0.3504 -0.0816 0.0276  0.0051  ? ? ? ? ? ? 1857 MET A CG  
+13  S SD  . MET A 2   0.7242 0.4097 0.3748 -0.0992 0.0465  0.0007  ? ? ? ? ? ? 1857 MET A SD  
+14  C CE  . MET A 2   0.6967 0.3644 0.3288 -0.0833 0.0238  0.0119  ? ? ? ? ? ? 1857 MET A CE  
+15  N N   . SER A 3   0.5878 0.4076 0.3446 -0.0878 0.0151  0.0151  ? ? ? ? ? ? 1858 SER A N   
+16  C CA  . SER A 3   0.5857 0.3954 0.3621 -0.1048 0.0183  0.0192  ? ? ? ? ? ? 1858 SER A CA  
+17  C C   . SER A 3   0.5798 0.4172 0.3892 -0.1053 0.0073  0.0323  ? ? ? ? ? ? 1858 SER A C   
+18  O O   . SER A 3   0.5438 0.3604 0.3770 -0.1155 0.0058  0.0394  ? ? ? ? ? ? 1858 SER A O   
+19  C CB  . SER A 3   0.5979 0.3558 0.3839 -0.1078 0.0384  0.0078  ? ? ? ? ? ? 1858 SER A CB  
+20  O OG  . SER A 3   0.6262 0.3621 0.3742 -0.1152 0.0497  -0.0044 ? ? ? ? ? ? 1858 SER A OG  
+21  N N   . VAL A 4   0.4939 0.3776 0.3045 -0.0949 -0.0024 0.0344  ? ? ? ? ? ? 1859 VAL A N   
+22  C CA  . VAL A 4   0.4767 0.3977 0.3092 -0.1020 -0.0135 0.0465  ? ? ? ? ? ? 1859 VAL A CA  
+23  C C   . VAL A 4   0.5088 0.5015 0.3286 -0.1077 -0.0251 0.0451  ? ? ? ? ? ? 1859 VAL A C   
+24  O O   . VAL A 4   0.5134 0.5399 0.3319 -0.0881 -0.0267 0.0318  ? ? ? ? ? ? 1859 VAL A O   
+25  C CB  . VAL A 4   0.4800 0.3967 0.3327 -0.0859 -0.0107 0.0446  ? ? ? ? ? ? 1859 VAL A CB  
+26  C CG1 . VAL A 4   0.4519 0.4100 0.3216 -0.0993 -0.0239 0.0587  ? ? ? ? ? ? 1859 VAL A CG1 
+27  C CG2 . VAL A 4   0.5126 0.3724 0.3835 -0.0805 0.0028  0.0427  ? ? ? ? ? ? 1859 VAL A CG2 
+28  N N   . LYS A 5   0.4184 0.6083 0.5828 -0.0988 -0.1528 0.2685  ? ? ? ? ? ? 1860 LYS A N   
+29  C CA  . LYS A 5   0.4552 0.6496 0.6325 -0.0654 -0.1521 0.2879  ? ? ? ? ? ? 1860 LYS A CA  
+30  C C   . LYS A 5   0.4328 0.6577 0.5968 -0.0092 -0.1309 0.2755  ? ? ? ? ? ? 1860 LYS A C   
+31  O O   . LYS A 5   0.4454 0.6901 0.5816 0.0006  -0.1073 0.2704  ? ? ? ? ? ? 1860 LYS A O   
+32  C CB  . LYS A 5   0.4611 0.6595 0.6439 -0.0955 -0.1461 0.3268  ? ? ? ? ? ? 1860 LYS A CB  
+33  C CG  . LYS A 5   0.6581 0.8246 0.8468 -0.1371 -0.1692 0.3453  ? ? ? ? ? ? 1860 LYS A CG  
+34  C CD  . LYS A 5   0.7149 0.8580 0.9223 -0.1116 -0.1903 0.3526  ? ? ? ? ? ? 1860 LYS A CD  
+35  C CE  . LYS A 5   0.7720 0.8624 0.9706 -0.1413 -0.2066 0.3626  ? ? ? ? ? ? 1860 LYS A CE  
+36  N NZ  . LYS A 5   0.8178 0.8686 1.0113 -0.1511 -0.2051 0.3295  ? ? ? ? ? ? 1860 LYS A NZ  
+37  N N   . LYS A 6   0.4692 0.6928 0.6480 0.0313  -0.1362 0.2725  ? ? ? ? ? ? 1861 LYS A N   
+38  C CA  . LYS A 6   0.6114 0.8554 0.7743 0.0867  -0.1112 0.2684  ? ? ? ? ? ? 1861 LYS A CA  
+39  C C   . LYS A 6   0.5733 0.8254 0.7342 0.0749  -0.0786 0.2996  ? ? ? ? ? ? 1861 LYS A C   
+40  O O   . LYS A 6   0.5994 0.8503 0.7837 0.0317  -0.0861 0.3218  ? ? ? ? ? ? 1861 LYS A O   
+41  C CB  . LYS A 6   0.7434 0.9802 0.9261 0.1278  -0.1232 0.2597  ? ? ? ? ? ? 1861 LYS A CB  
+42  C CG  . LYS A 6   0.7862 1.0176 0.9719 0.1455  -0.1467 0.2195  ? ? ? ? ? ? 1861 LYS A CG  
+43  C CD  . LYS A 6   0.8266 1.0544 1.0221 0.1964  -0.1476 0.2103  ? ? ? ? ? ? 1861 LYS A CD  
+44  C CE  . LYS A 6   0.8375 1.0530 1.0469 0.2029  -0.1703 0.1696  ? ? ? ? ? ? 1861 LYS A CE  
+45  N NZ  . LYS A 6   0.8385 1.0090 1.0763 0.1584  -0.1875 0.1810  ? ? ? ? ? ? 1861 LYS A NZ  
+46  N N   . PRO A 7   0.5816 0.8418 0.7121 0.1142  -0.0387 0.2989  ? ? ? ? ? ? 1862 PRO A N   
+47  C CA  . PRO A 7   0.6381 0.9005 0.7711 0.1039  0.0042  0.3218  ? ? ? ? ? ? 1862 PRO A CA  
+48  C C   . PRO A 7   0.6730 0.9453 0.8566 0.0916  -0.0078 0.3341  ? ? ? ? ? ? 1862 PRO A C   
+49  O O   . PRO A 7   0.6273 0.8969 0.8289 0.1239  -0.0295 0.3269  ? ? ? ? ? ? 1862 PRO A O   
+50  C CB  . PRO A 7   0.6742 0.9288 0.7631 0.1672  0.0488  0.3153  ? ? ? ? ? ? 1862 PRO A CB  
+51  C CG  . PRO A 7   0.6893 0.9500 0.7394 0.1956  0.0316  0.2926  ? ? ? ? ? ? 1862 PRO A CG  
+52  C CD  . PRO A 7   0.6081 0.8758 0.6951 0.1702  -0.0265 0.2749  ? ? ? ? ? ? 1862 PRO A CD  
+53  N N   . LYS A 8   0.7059 0.9950 0.9129 0.0455  0.0055  0.3496  ? ? ? ? ? ? 1863 LYS A N   
+54  C CA  . LYS A 8   0.7398 1.0556 0.9985 0.0313  -0.0125 0.3585  ? ? ? ? ? ? 1863 LYS A CA  
+55  C C   . LYS A 8   0.7165 1.0435 0.9948 0.0696  0.0212  0.3536  ? ? ? ? ? ? 1863 LYS A C   
+56  O O   . LYS A 8   0.7360 1.0631 1.0042 0.0701  0.0769  0.3512  ? ? ? ? ? ? 1863 LYS A O   
+57  C CB  . LYS A 8   0.7246 1.0699 1.0032 -0.0290 -0.0092 0.3690  ? ? ? ? ? ? 1863 LYS A CB  
+58  N N   . ARG A 9   0.6778 1.0076 0.9823 0.1019  -0.0072 0.3517  ? ? ? ? ? ? 1864 ARG A N   
+59  C CA  . ARG A 9   0.6566 1.0008 0.9892 0.1352  0.0201  0.3470  ? ? ? ? ? ? 1864 ARG A CA  
+60  C C   . ARG A 9   0.6321 1.0311 1.0213 0.0983  0.0267  0.3499  ? ? ? ? ? ? 1864 ARG A C   
+61  O O   . ARG A 9   0.6122 1.0401 1.0269 0.0699  -0.0162 0.3588  ? ? ? ? ? ? 1864 ARG A O   
+62  C CB  . ARG A 9   0.6292 0.9594 0.9727 0.1807  -0.0134 0.3432  ? ? ? ? ? ? 1864 ARG A CB  
+63  C CG  . ARG A 9   0.5745 0.9213 0.9527 0.2143  0.0111  0.3389  ? ? ? ? ? ? 1864 ARG A CG  
+64  C CD  . ARG A 9   0.5640 0.8839 0.9405 0.2369  -0.0241 0.3215  ? ? ? ? ? ? 1864 ARG A CD  
+65  N NE  . ARG A 9   0.5445 0.8849 0.9583 0.2629  -0.0026 0.3175  ? ? ? ? ? ? 1864 ARG A NE  
+66  C CZ  . ARG A 9   0.5468 0.9388 1.0212 0.2529  -0.0155 0.3255  ? ? ? ? ? ? 1864 ARG A CZ  
+67  N NH1 . ARG A 9   0.5996 1.0224 1.0932 0.2187  -0.0514 0.3384  ? ? ? ? ? ? 1864 ARG A NH1 
+68  N NH2 . ARG A 9   0.5486 0.9622 1.0598 0.2776  0.0076  0.3169  ? ? ? ? ? ? 1864 ARG A NH2 
+69  N N   . ASP A 10  0.7256 0.8417 1.1362 0.2683  0.2421  0.2356  ? ? ? ? ? ? 1865 ASP A N   
+70  C CA  . ASP A 10  0.7403 0.7329 1.0610 0.2483  0.2581  0.1826  ? ? ? ? ? ? 1865 ASP A CA  
+71  C C   . ASP A 10  0.7015 0.6912 0.9233 0.1950  0.2095  0.1579  ? ? ? ? ? ? 1865 ASP A C   
+72  O O   . ASP A 10  0.7150 0.7259 0.9290 0.1788  0.1645  0.1822  ? ? ? ? ? ? 1865 ASP A O   
+73  C CB  . ASP A 10  0.8165 0.7280 1.1585 0.2739  0.2703  0.1987  ? ? ? ? ? ? 1865 ASP A CB  
+74  C CG  . ASP A 10  0.9099 0.7057 1.1560 0.2439  0.2842  0.1412  ? ? ? ? ? ? 1865 ASP A CG  
+75  O OD1 . ASP A 10  0.8455 0.6158 1.0222 0.2174  0.2979  0.0871  ? ? ? ? ? ? 1865 ASP A OD1 
+76  O OD2 . ASP A 10  0.9524 0.6845 1.1886 0.2439  0.2813  0.1501  ? ? ? ? ? ? 1865 ASP A OD2 
+77  N N   . ASP A 11  0.5749 0.5367 0.7198 0.1683  0.2192  0.1089  ? ? ? ? ? ? 1866 ASP A N   
+78  C CA  . ASP A 11  0.5516 0.5121 0.6054 0.1256  0.1724  0.0859  ? ? ? ? ? ? 1866 ASP A CA  
+79  C C   . ASP A 11  0.5709 0.4370 0.5379 0.1077  0.1738  0.0332  ? ? ? ? ? ? 1866 ASP A C   
+80  O O   . ASP A 11  0.6087 0.4659 0.4959 0.0785  0.1386  0.0055  ? ? ? ? ? ? 1866 ASP A O   
+81  C CB  . ASP A 11  0.5950 0.5917 0.6105 0.1051  0.1720  0.0736  ? ? ? ? ? ? 1866 ASP A CB  
+82  C CG  . ASP A 11  0.7604 0.7038 0.7461 0.1085  0.2261  0.0337  ? ? ? ? ? ? 1866 ASP A CG  
+83  O OD1 . ASP A 11  0.8501 0.7459 0.8712 0.1342  0.2704  0.0215  ? ? ? ? ? ? 1866 ASP A OD1 
+84  O OD2 . ASP A 11  0.8603 0.8046 0.7830 0.0829  0.2267  0.0138  ? ? ? ? ? ? 1866 ASP A OD2 
+85  N N   . SER A 12  0.6320 0.4296 0.6157 0.1257  0.2142  0.0188  ? ? ? ? ? ? 1867 SER A N   
+86  C CA  . SER A 12  0.6814 0.3936 0.5843 0.1053  0.2269  -0.0379 ? ? ? ? ? ? 1867 SER A CA  
+87  C C   . SER A 12  0.6849 0.3969 0.5396 0.0775  0.1768  -0.0499 ? ? ? ? ? ? 1867 SER A C   
+88  O O   . SER A 12  0.7401 0.4117 0.5161 0.0534  0.1698  -0.1005 ? ? ? ? ? ? 1867 SER A O   
+89  C CB  . SER A 12  0.7634 0.3993 0.6992 0.1274  0.2868  -0.0499 ? ? ? ? ? ? 1867 SER A CB  
+90  O OG  . SER A 12  0.8212 0.4518 0.8132 0.1438  0.2792  -0.0100 ? ? ? ? ? ? 1867 SER A OG  
+91  N N   . LYS A 13  0.6196 0.3847 0.5225 0.0791  0.1420  -0.0056 ? ? ? ? ? ? 1868 LYS A N   
+92  C CA  . LYS A 13  0.5594 0.3358 0.4255 0.0498  0.0964  -0.0178 ? ? ? ? ? ? 1868 LYS A CA  
+93  C C   . LYS A 13  0.5357 0.3838 0.3774 0.0305  0.0412  -0.0137 ? ? ? ? ? ? 1868 LYS A C   
+94  O O   . LYS A 13  0.5501 0.4187 0.3667 0.0066  0.0025  -0.0278 ? ? ? ? ? ? 1868 LYS A O   
+95  C CB  . LYS A 13  0.5625 0.3427 0.4848 0.0549  0.0937  0.0244  ? ? ? ? ? ? 1868 LYS A CB  
+96  C CG  . LYS A 13  0.6511 0.3411 0.5886 0.0718  0.1468  0.0197  ? ? ? ? ? ? 1868 LYS A CG  
+97  C CD  . LYS A 13  0.8535 0.5396 0.8356 0.0757  0.1386  0.0691  ? ? ? ? ? ? 1868 LYS A CD  
+98  N N   . ASP A 14  0.5792 0.3303 0.4684 0.0423  -0.0386 -0.0023 ? ? ? ? ? ? 1869 ASP A N   
+99  C CA  . ASP A 14  0.5678 0.3073 0.4127 0.0349  -0.0492 0.0045  ? ? ? ? ? ? 1869 ASP A CA  
+100 C C   . ASP A 14  0.6101 0.3378 0.4371 0.0335  -0.0449 -0.0058 ? ? ? ? ? ? 1869 ASP A C   
+101 O O   . ASP A 14  0.6273 0.3336 0.4261 0.0321  -0.0465 -0.0005 ? ? ? ? ? ? 1869 ASP A O   
+102 C CB  . ASP A 14  0.5388 0.2972 0.3760 0.0245  -0.0586 0.0021  ? ? ? ? ? ? 1869 ASP A CB  
+103 C CG  . ASP A 14  0.6681 0.4483 0.5179 0.0278  -0.0681 0.0065  ? ? ? ? ? ? 1869 ASP A CG  
+104 O OD1 . ASP A 14  0.6410 0.4160 0.4944 0.0440  -0.0684 0.0185  ? ? ? ? ? ? 1869 ASP A OD1 
+105 O OD2 . ASP A 14  0.6181 0.4211 0.4730 0.0164  -0.0729 -0.0030 ? ? ? ? ? ? 1869 ASP A OD2 
+106 N N   . LEU A 15  0.5514 0.2997 0.3946 0.0377  -0.0407 -0.0232 ? ? ? ? ? ? 1870 LEU A N   
+107 C CA  . LEU A 15  0.5578 0.3070 0.3816 0.0456  -0.0398 -0.0364 ? ? ? ? ? ? 1870 LEU A CA  
+108 C C   . LEU A 15  0.5951 0.3328 0.4304 0.0472  -0.0318 -0.0464 ? ? ? ? ? ? 1870 LEU A C   
+109 O O   . LEU A 15  0.6180 0.3389 0.4232 0.0491  -0.0348 -0.0454 ? ? ? ? ? ? 1870 LEU A O   
+110 C CB  . LEU A 15  0.5520 0.3412 0.3925 0.0574  -0.0381 -0.0580 ? ? ? ? ? ? 1870 LEU A CB  
+111 C CG  . LEU A 15  0.5274 0.3326 0.3440 0.0770  -0.0402 -0.0750 ? ? ? ? ? ? 1870 LEU A CG  
+112 C CD1 . LEU A 15  0.5653 0.3347 0.3204 0.0821  -0.0437 -0.0515 ? ? ? ? ? ? 1870 LEU A CD1 
+113 C CD2 . LEU A 15  0.5195 0.3802 0.3546 0.0945  -0.0401 -0.1006 ? ? ? ? ? ? 1870 LEU A CD2 
+114 N N   . ALA A 16  0.5666 0.3090 0.4473 0.0454  -0.0173 -0.0565 ? ? ? ? ? ? 1871 ALA A N   
+115 C CA  . ALA A 16  0.5937 0.3192 0.4919 0.0431  0.0005  -0.0671 ? ? ? ? ? ? 1871 ALA A CA  
+116 C C   . ALA A 16  0.6230 0.3085 0.4819 0.0398  -0.0006 -0.0384 ? ? ? ? ? ? 1871 ALA A C   
+117 O O   . ALA A 16  0.6187 0.2914 0.4668 0.0380  0.0061  -0.0458 ? ? ? ? ? ? 1871 ALA A O   
+118 C CB  . ALA A 16  0.5909 0.3165 0.5484 0.0402  0.0262  -0.0798 ? ? ? ? ? ? 1871 ALA A CB  
+119 N N   . LEU A 17  0.6095 0.2840 0.4489 0.0408  -0.0096 -0.0104 ? ? ? ? ? ? 1872 LEU A N   
+120 C CA  . LEU A 17  0.6141 0.2645 0.4157 0.0425  -0.0130 0.0129  ? ? ? ? ? ? 1872 LEU A CA  
+121 C C   . LEU A 17  0.6387 0.2879 0.4016 0.0364  -0.0290 0.0099  ? ? ? ? ? ? 1872 LEU A C   
+122 O O   . LEU A 17  0.6820 0.3146 0.4212 0.0357  -0.0266 0.0142  ? ? ? ? ? ? 1872 LEU A O   
+123 C CB  . LEU A 17  0.6376 0.2941 0.4317 0.0510  -0.0222 0.0350  ? ? ? ? ? ? 1872 LEU A CB  
+124 C CG  . LEU A 17  0.6777 0.3222 0.5014 0.0641  -0.0023 0.0464  ? ? ? ? ? ? 1872 LEU A CG  
+125 C CD1 . LEU A 17  0.6695 0.3318 0.4852 0.0791  -0.0171 0.0641  ? ? ? ? ? ? 1872 LEU A CD1 
+126 C CD2 . LEU A 17  0.7596 0.3640 0.5745 0.0715  0.0256  0.0601  ? ? ? ? ? ? 1872 LEU A CD2 
+127 N N   . CYS A 18  0.6335 0.2966 0.3896 0.0327  -0.0413 0.0031  ? ? ? ? ? ? 1873 CYS A N   
+128 C CA  . CYS A 18  0.6385 0.2901 0.3607 0.0287  -0.0491 0.0007  ? ? ? ? ? ? 1873 CYS A CA  
+129 C C   . CYS A 18  0.6661 0.3114 0.3836 0.0353  -0.0438 -0.0149 ? ? ? ? ? ? 1873 CYS A C   
+130 O O   . CYS A 18  0.6390 0.2677 0.3309 0.0337  -0.0463 -0.0152 ? ? ? ? ? ? 1873 CYS A O   
+131 C CB  . CYS A 18  0.6163 0.2733 0.3310 0.0261  -0.0529 0.0002  ? ? ? ? ? ? 1873 CYS A CB  
+132 S SG  . CYS A 18  0.6459 0.3141 0.3649 0.0123  -0.0590 0.0080  ? ? ? ? ? ? 1873 CYS A SG  
+133 N N   . SER A 19  0.4692 0.2749 0.4520 0.0232  -0.0131 -0.0129 ? ? ? ? ? ? 1874 SER A N   
+134 C CA  . SER A 19  0.4433 0.2640 0.4204 0.0160  0.0026  -0.0235 ? ? ? ? ? ? 1874 SER A CA  
+135 C C   . SER A 19  0.4728 0.2763 0.4291 0.0073  0.0096  -0.0021 ? ? ? ? ? ? 1874 SER A C   
+136 O O   . SER A 19  0.4994 0.3140 0.4279 0.0031  0.0179  -0.0038 ? ? ? ? ? ? 1874 SER A O   
+137 C CB  . SER A 19  0.4195 0.2523 0.4438 0.0114  0.0132  -0.0454 ? ? ? ? ? ? 1874 SER A CB  
+138 O OG  . SER A 19  0.5132 0.3642 0.5358 0.0042  0.0279  -0.0576 ? ? ? ? ? ? 1874 SER A OG  
+139 N N   . MET A 20  0.4965 0.2714 0.4660 0.0050  0.0070  0.0177  ? ? ? ? ? ? 1875 MET A N   
+140 C CA  . MET A 20  0.5371 0.2878 0.4822 -0.0030 0.0140  0.0415  ? ? ? ? ? ? 1875 MET A CA  
+141 C C   . MET A 20  0.5594 0.3103 0.4507 -0.0003 0.0056  0.0568  ? ? ? ? ? ? 1875 MET A C   
+142 O O   . MET A 20  0.5613 0.3137 0.4244 -0.0089 0.0169  0.0608  ? ? ? ? ? ? 1875 MET A O   
+143 C CB  . MET A 20  0.5730 0.2878 0.5358 -0.0011 0.0095  0.0633  ? ? ? ? ? ? 1875 MET A CB  
+144 C CG  . MET A 20  0.7207 0.4031 0.6487 -0.0073 0.0151  0.0928  ? ? ? ? ? ? 1875 MET A CG  
+145 S SD  . MET A 20  1.0298 0.6680 0.9644 0.0036  0.0012  0.1240  ? ? ? ? ? ? 1875 MET A SD  
+146 C CE  . MET A 20  0.9212 0.5748 0.8259 0.0201  -0.0290 0.1319  ? ? ? ? ? ? 1875 MET A CE  
+147 N N   . ILE A 21  0.5427 0.2937 0.4223 0.0106  -0.0132 0.0630  ? ? ? ? ? ? 1876 ILE A N   
+148 C CA  . ILE A 21  0.5705 0.3237 0.4014 0.0129  -0.0217 0.0749  ? ? ? ? ? ? 1876 ILE A CA  
+149 C C   . ILE A 21  0.6057 0.3842 0.4153 0.0099  -0.0116 0.0570  ? ? ? ? ? ? 1876 ILE A C   
+150 O O   . ILE A 21  0.5472 0.3256 0.3194 0.0044  -0.0063 0.0655  ? ? ? ? ? ? 1876 ILE A O   
+151 C CB  . ILE A 21  0.5472 0.3026 0.3767 0.0245  -0.0426 0.0774  ? ? ? ? ? ? 1876 ILE A CB  
+152 C CG1 . ILE A 21  0.5864 0.3165 0.4286 0.0304  -0.0556 0.0995  ? ? ? ? ? ? 1876 ILE A CG1 
+153 C CG2 . ILE A 21  0.5611 0.3267 0.3433 0.0253  -0.0485 0.0811  ? ? ? ? ? ? 1876 ILE A CG2 
+154 C CD1 . ILE A 21  0.6169 0.3542 0.4709 0.0427  -0.0766 0.0967  ? ? ? ? ? ? 1876 ILE A CD1 
+155 N N   . LEU A 22  0.5634 0.3626 0.3959 0.0142  -0.0085 0.0322  ? ? ? ? ? ? 1877 LEU A N   
+156 C CA  . LEU A 22  0.5152 0.3367 0.3271 0.0153  -0.0002 0.0153  ? ? ? ? ? ? 1877 LEU A CA  
+157 C C   . LEU A 22  0.4851 0.3129 0.2929 0.0055  0.0161  0.0133  ? ? ? ? ? ? 1877 LEU A C   
+158 O O   . LEU A 22  0.5084 0.3455 0.2844 0.0040  0.0218  0.0122  ? ? ? ? ? ? 1877 LEU A O   
+159 C CB  . LEU A 22  0.4378 0.2772 0.2735 0.0233  0.0001  -0.0096 ? ? ? ? ? ? 1877 LEU A CB  
+160 C CG  . LEU A 22  0.4987 0.3588 0.3113 0.0293  0.0069  -0.0269 ? ? ? ? ? ? 1877 LEU A CG  
+161 C CD1 . LEU A 22  0.5316 0.3867 0.2995 0.0326  0.0031  -0.0185 ? ? ? ? ? ? 1877 LEU A CD1 
+162 C CD2 . LEU A 22  0.4763 0.3487 0.3097 0.0379  0.0063  -0.0487 ? ? ? ? ? ? 1877 LEU A CD2 
+163 N N   . THR A 23  0.4987 0.2395 0.3943 -0.0643 0.0641  -0.0004 ? ? ? ? ? ? 1878 THR A N   
+164 C CA  . THR A 23  0.5130 0.2464 0.4093 -0.0903 0.0735  -0.0121 ? ? ? ? ? ? 1878 THR A CA  
+165 C C   . THR A 23  0.5878 0.3106 0.4792 -0.0858 0.0744  0.0106  ? ? ? ? ? ? 1878 THR A C   
+166 O O   . THR A 23  0.5609 0.3074 0.4583 -0.1021 0.0705  0.0066  ? ? ? ? ? ? 1878 THR A O   
+167 C CB  . THR A 23  0.6509 0.3353 0.5429 -0.1052 0.0979  -0.0297 ? ? ? ? ? ? 1878 THR A CB  
+168 O OG1 . THR A 23  0.6050 0.3057 0.5009 -0.1095 0.0946  -0.0550 ? ? ? ? ? ? 1878 THR A OG1 
+169 C CG2 . THR A 23  0.6457 0.3212 0.5451 -0.1335 0.1108  -0.0417 ? ? ? ? ? ? 1878 THR A CG2 
+170 N N   . GLU A 24  0.5832 0.2725 0.4624 -0.0610 0.0787  0.0336  ? ? ? ? ? ? 1879 GLU A N   
+171 C CA  . GLU A 24  0.6323 0.3103 0.5013 -0.0498 0.0787  0.0562  ? ? ? ? ? ? 1879 GLU A CA  
+172 C C   . GLU A 24  0.5307 0.2659 0.4114 -0.0414 0.0512  0.0642  ? ? ? ? ? ? 1879 GLU A C   
+173 O O   . GLU A 24  0.5199 0.2654 0.3975 -0.0452 0.0485  0.0721  ? ? ? ? ? ? 1879 GLU A O   
+174 C CB  . GLU A 24  0.6036 0.2341 0.4541 -0.0195 0.0867  0.0765  ? ? ? ? ? ? 1879 GLU A CB  
+175 C CG  . GLU A 24  0.7399 0.3054 0.5748 -0.0257 0.1156  0.0721  ? ? ? ? ? ? 1879 GLU A CG  
+176 C CD  . GLU A 24  0.9405 0.4824 0.7625 0.0080  0.1157  0.0874  ? ? ? ? ? ? 1879 GLU A CD  
+177 O OE1 . GLU A 24  0.9598 0.5124 0.7875 0.0285  0.1035  0.0880  ? ? ? ? ? ? 1879 GLU A OE1 
+178 O OE2 . GLU A 24  1.0959 0.6160 0.9048 0.0138  0.1270  0.0965  ? ? ? ? ? ? 1879 GLU A OE2 
+179 N N   A MET A 25  0.4896 0.2596 0.3842 -0.0295 0.0326  0.0624  ? ? ? ? ? ? 1880 MET A N   
+180 N N   B MET A 25  0.4922 0.2635 0.3871 -0.0300 0.0322  0.0622  ? ? ? ? ? ? 1880 MET A N   
+181 C CA  A MET A 25  0.5014 0.3253 0.4112 -0.0233 0.0067  0.0674  ? ? ? ? ? ? 1880 MET A CA  
+182 C CA  B MET A 25  0.5072 0.3309 0.4163 -0.0235 0.0066  0.0682  ? ? ? ? ? ? 1880 MET A CA  
+183 C C   A MET A 25  0.5271 0.3859 0.4424 -0.0500 0.0013  0.0514  ? ? ? ? ? ? 1880 MET A C   
+184 C C   B MET A 25  0.5234 0.3847 0.4395 -0.0499 0.0002  0.0512  ? ? ? ? ? ? 1880 MET A C   
+185 O O   A MET A 25  0.4920 0.3769 0.4102 -0.0510 -0.0112 0.0572  ? ? ? ? ? ? 1880 MET A O   
+186 O O   B MET A 25  0.4908 0.3827 0.4114 -0.0507 -0.0144 0.0563  ? ? ? ? ? ? 1880 MET A O   
+187 C CB  A MET A 25  0.4174 0.2671 0.3436 -0.0091 -0.0063 0.0669  ? ? ? ? ? ? 1880 MET A CB  
+188 C CB  B MET A 25  0.4446 0.2934 0.3704 -0.0051 -0.0083 0.0712  ? ? ? ? ? ? 1880 MET A CB  
+189 C CG  A MET A 25  0.5384 0.3600 0.4647 0.0177  -0.0023 0.0787  ? ? ? ? ? ? 1880 MET A CG  
+190 C CG  B MET A 25  0.5571 0.3777 0.4816 0.0238  -0.0061 0.0856  ? ? ? ? ? ? 1880 MET A CG  
+191 S SD  A MET A 25  0.4384 0.2633 0.3676 0.0476  -0.0187 0.1000  ? ? ? ? ? ? 1880 MET A SD  
+192 S SD  B MET A 25  0.7091 0.5653 0.6630 0.0426  -0.0219 0.0873  ? ? ? ? ? ? 1880 MET A SD  
+193 C CE  A MET A 25  0.5438 0.4337 0.5069 0.0512  -0.0466 0.0994  ? ? ? ? ? ? 1880 MET A CE  
+194 C CE  B MET A 25  0.5847 0.4907 0.5578 0.0472  -0.0494 0.0952  ? ? ? ? ? ? 1880 MET A CE  
+195 N N   . GLU A 26  0.4688 0.3289 0.3853 -0.0694 0.0098  0.0293  ? ? ? ? ? ? 1881 GLU A N   
+196 C CA  . GLU A 26  0.4328 0.3275 0.3552 -0.0933 0.0039  0.0084  ? ? ? ? ? ? 1881 GLU A CA  
+197 C C   . GLU A 26  0.5013 0.3887 0.4226 -0.1109 0.0135  0.0064  ? ? ? ? ? ? 1881 GLU A C   
+198 O O   . GLU A 26  0.4657 0.3921 0.3945 -0.1232 0.0015  -0.0031 ? ? ? ? ? ? 1881 GLU A O   
+199 C CB  . GLU A 26  0.4718 0.3617 0.3937 -0.1077 0.0134  -0.0180 ? ? ? ? ? ? 1881 GLU A CB  
+200 C CG  . GLU A 26  0.4743 0.3864 0.3965 -0.0935 0.0023  -0.0201 ? ? ? ? ? ? 1881 GLU A CG  
+201 C CD  . GLU A 26  0.5494 0.4448 0.4654 -0.1002 0.0150  -0.0430 ? ? ? ? ? ? 1881 GLU A CD  
+202 O OE1 . GLU A 26  0.5788 0.4376 0.4930 -0.1134 0.0333  -0.0546 ? ? ? ? ? ? 1881 GLU A OE1 
+203 O OE2 . GLU A 26  0.6336 0.5510 0.5463 -0.0910 0.0076  -0.0490 ? ? ? ? ? ? 1881 GLU A OE2 
+204 N N   . THR A 27  0.2402 0.3235 0.4042 -0.0194 -0.0022 -0.0112 ? ? ? ? ? ? 1882 THR A N   
+205 C CA  . THR A 27  0.3182 0.3588 0.4732 -0.0398 0.0500  -0.0119 ? ? ? ? ? ? 1882 THR A CA  
+206 C C   . THR A 27  0.3855 0.3624 0.4554 -0.0377 0.0727  0.0009  ? ? ? ? ? ? 1882 THR A C   
+207 O O   . THR A 27  0.4394 0.3924 0.4964 -0.0600 0.1185  -0.0031 ? ? ? ? ? ? 1882 THR A O   
+208 C CB  . THR A 27  0.3803 0.3746 0.5246 -0.0550 0.0624  -0.0094 ? ? ? ? ? ? 1882 THR A CB  
+209 O OG1 . THR A 27  0.4878 0.4203 0.5607 -0.0382 0.0311  0.0041  ? ? ? ? ? ? 1882 THR A OG1 
+210 C CG2 . THR A 27  0.3676 0.4327 0.6056 -0.0613 0.0499  -0.0273 ? ? ? ? ? ? 1882 THR A CG2 
+211 N N   . HIS A 28  0.3870 0.3427 0.3988 -0.0141 0.0416  0.0139  ? ? ? ? ? ? 1883 HIS A N   
+212 C CA  . HIS A 28  0.4622 0.3668 0.3965 -0.0103 0.0588  0.0246  ? ? ? ? ? ? 1883 HIS A CA  
+213 C C   . HIS A 28  0.4888 0.4423 0.4743 -0.0171 0.0865  0.0043  ? ? ? ? ? ? 1883 HIS A C   
+214 O O   . HIS A 28  0.3572 0.3818 0.4250 -0.0094 0.0654  -0.0107 ? ? ? ? ? ? 1883 HIS A O   
+215 C CB  . HIS A 28  0.4623 0.3528 0.3430 0.0190  0.0143  0.0388  ? ? ? ? ? ? 1883 HIS A CB  
+216 C CG  . HIS A 28  0.5530 0.3756 0.3384 0.0239  0.0274  0.0542  ? ? ? ? ? ? 1883 HIS A CG  
+217 N ND1 . HIS A 28  0.5869 0.4207 0.3710 0.0187  0.0566  0.0450  ? ? ? ? ? ? 1883 HIS A ND1 
+218 C CD2 . HIS A 28  0.5765 0.3224 0.2674 0.0340  0.0117  0.0754  ? ? ? ? ? ? 1883 HIS A CD2 
+219 C CE1 . HIS A 28  0.6232 0.3919 0.3118 0.0226  0.0623  0.0614  ? ? ? ? ? ? 1883 HIS A CE1 
+220 N NE2 . HIS A 28  0.7239 0.4349 0.3526 0.0314  0.0344  0.0824  ? ? ? ? ? ? 1883 HIS A NE2 
+221 N N   . GLU A 29  0.4781 0.3963 0.4174 -0.0336 0.1303  0.0009  ? ? ? ? ? ? 1884 GLU A N   
+222 C CA  . GLU A 29  0.4619 0.4358 0.4632 -0.0404 0.1589  -0.0302 ? ? ? ? ? ? 1884 GLU A CA  
+223 C C   . GLU A 29  0.4199 0.4289 0.4447 -0.0098 0.1221  -0.0376 ? ? ? ? ? ? 1884 GLU A C   
+224 O O   . GLU A 29  0.4045 0.4713 0.5094 -0.0067 0.1245  -0.0677 ? ? ? ? ? ? 1884 GLU A O   
+225 C CB  . GLU A 29  0.6711 0.6107 0.6143 -0.0708 0.2167  -0.0383 ? ? ? ? ? ? 1884 GLU A CB  
+226 C CG  . GLU A 29  0.7593 0.6500 0.6061 -0.0636 0.2190  -0.0261 ? ? ? ? ? ? 1884 GLU A CG  
+227 C CD  . GLU A 29  0.9640 0.8494 0.7713 -0.1009 0.2798  -0.0453 ? ? ? ? ? ? 1884 GLU A CD  
+228 O OE1 . GLU A 29  0.8792 0.8338 0.7551 -0.1012 0.3025  -0.0873 ? ? ? ? ? ? 1884 GLU A OE1 
+229 O OE2 . GLU A 29  1.0775 0.8914 0.7858 -0.1326 0.3019  -0.0207 ? ? ? ? ? ? 1884 GLU A OE2 
+230 N N   . ASP A 30  0.4104 0.3844 0.3698 0.0125  0.0836  -0.0120 ? ? ? ? ? ? 1885 ASP A N   
+231 C CA  . ASP A 30  0.4370 0.4388 0.4115 0.0387  0.0429  -0.0143 ? ? ? ? ? ? 1885 ASP A CA  
+232 C C   . ASP A 30  0.4027 0.4518 0.4300 0.0494  -0.0144 -0.0062 ? ? ? ? ? ? 1885 ASP A C   
+233 O O   . ASP A 30  0.3230 0.3838 0.3405 0.0670  -0.0590 0.0028  ? ? ? ? ? ? 1885 ASP A O   
+234 C CB  . ASP A 30  0.4306 0.3711 0.2986 0.0543  0.0346  0.0074  ? ? ? ? ? ? 1885 ASP A CB  
+235 C CG  . ASP A 30  0.5016 0.4015 0.3106 0.0388  0.0876  -0.0010 ? ? ? ? ? ? 1885 ASP A CG  
+236 O OD1 . ASP A 30  0.5150 0.4494 0.3749 0.0192  0.1290  -0.0315 ? ? ? ? ? ? 1885 ASP A OD1 
+237 O OD2 . ASP A 30  0.5570 0.3944 0.2672 0.0440  0.0866  0.0212  ? ? ? ? ? ? 1885 ASP A OD2 
+238 N N   . ALA A 31  0.5429 0.3202 0.2619 0.0479  0.0596  0.0166  ? ? ? ? ? ? 1886 ALA A N   
+239 C CA  . ALA A 31  0.5369 0.2954 0.2548 0.0415  0.0479  0.0104  ? ? ? ? ? ? 1886 ALA A CA  
+240 C C   . ALA A 31  0.5010 0.2677 0.2430 0.0312  0.0353  0.0001  ? ? ? ? ? ? 1886 ALA A C   
+241 O O   . ALA A 31  0.5622 0.3256 0.3069 0.0279  0.0240  -0.0042 ? ? ? ? ? ? 1886 ALA A O   
+242 C CB  . ALA A 31  0.5662 0.2889 0.2730 0.0342  0.0536  0.0170  ? ? ? ? ? ? 1886 ALA A CB  
+243 N N   . TRP A 32  0.5200 0.3015 0.2822 0.0284  0.0393  0.0001  ? ? ? ? ? ? 1887 TRP A N   
+244 C CA  . TRP A 32  0.5482 0.3397 0.3399 0.0195  0.0311  -0.0021 ? ? ? ? ? ? 1887 TRP A CA  
+245 C C   . TRP A 32  0.5598 0.3574 0.3622 0.0233  0.0199  -0.0117 ? ? ? ? ? ? 1887 TRP A C   
+246 O O   . TRP A 32  0.5578 0.3604 0.3818 0.0146  0.0105  -0.0084 ? ? ? ? ? ? 1887 TRP A O   
+247 C CB  . TRP A 32  0.5603 0.3720 0.3738 0.0225  0.0417  0.0033  ? ? ? ? ? ? 1887 TRP A CB  
+248 C CG  . TRP A 32  0.5422 0.3659 0.3460 0.0399  0.0524  -0.0059 ? ? ? ? ? ? 1887 TRP A CG  
+249 C CD1 . TRP A 32  0.4903 0.3211 0.2727 0.0488  0.0644  -0.0026 ? ? ? ? ? ? 1887 TRP A CD1 
+250 C CD2 . TRP A 32  0.5567 0.3858 0.3695 0.0493  0.0526  -0.0205 ? ? ? ? ? ? 1887 TRP A CD2 
+251 N NE1 . TRP A 32  0.5152 0.3586 0.2874 0.0620  0.0707  -0.0167 ? ? ? ? ? ? 1887 TRP A NE1 
+252 C CE2 . TRP A 32  0.5742 0.4112 0.3632 0.0621  0.0640  -0.0300 ? ? ? ? ? ? 1887 TRP A CE2 
+253 C CE3 . TRP A 32  0.5374 0.3638 0.3755 0.0480  0.0448  -0.0259 ? ? ? ? ? ? 1887 TRP A CE3 
+254 C CZ2 . TRP A 32  0.5794 0.4147 0.3637 0.0717  0.0679  -0.0500 ? ? ? ? ? ? 1887 TRP A CZ2 
+255 C CZ3 . TRP A 32  0.5462 0.3684 0.3861 0.0592  0.0501  -0.0425 ? ? ? ? ? ? 1887 TRP A CZ3 
+256 C CH2 . TRP A 32  0.5663 0.3894 0.3766 0.0701  0.0614  -0.0571 ? ? ? ? ? ? 1887 TRP A CH2 
+257 N N   . PRO A 33  0.4964 0.2964 0.2854 0.0340  0.0197  -0.0215 ? ? ? ? ? ? 1888 PRO A N   
+258 C CA  . PRO A 33  0.4793 0.2814 0.2840 0.0334  0.0076  -0.0282 ? ? ? ? ? ? 1888 PRO A CA  
+259 C C   . PRO A 33  0.4698 0.2681 0.2705 0.0281  -0.0046 -0.0213 ? ? ? ? ? ? 1888 PRO A C   
+260 O O   . PRO A 33  0.4749 0.2791 0.2950 0.0260  -0.0154 -0.0212 ? ? ? ? ? ? 1888 PRO A O   
+261 C CB  . PRO A 33  0.4932 0.2978 0.2801 0.0408  0.0082  -0.0412 ? ? ? ? ? ? 1888 PRO A CB  
+262 C CG  . PRO A 33  0.5042 0.3148 0.2718 0.0477  0.0233  -0.0419 ? ? ? ? ? ? 1888 PRO A CG  
+263 C CD  . PRO A 33  0.4659 0.2716 0.2299 0.0441  0.0282  -0.0257 ? ? ? ? ? ? 1888 PRO A CD  
+264 N N   . PHE A 34  0.5008 0.2881 0.2774 0.0275  -0.0008 -0.0145 ? ? ? ? ? ? 1889 PHE A N   
+265 C CA  . PHE A 34  0.4953 0.2777 0.2581 0.0288  -0.0071 -0.0086 ? ? ? ? ? ? 1889 PHE A CA  
+266 C C   . PHE A 34  0.4966 0.2639 0.2509 0.0196  -0.0070 -0.0054 ? ? ? ? ? ? 1889 PHE A C   
+267 O O   . PHE A 34  0.5209 0.2808 0.2579 0.0227  -0.0087 -0.0018 ? ? ? ? ? ? 1889 PHE A O   
+268 C CB  . PHE A 34  0.5467 0.3266 0.2821 0.0406  0.0004  -0.0031 ? ? ? ? ? ? 1889 PHE A CB  
+269 C CG  . PHE A 34  0.5233 0.3207 0.2584 0.0453  -0.0002 -0.0077 ? ? ? ? ? ? 1889 PHE A CG  
+270 C CD1 . PHE A 34  0.5053 0.3167 0.2541 0.0424  -0.0134 -0.0131 ? ? ? ? ? ? 1889 PHE A CD1 
+271 C CD2 . PHE A 34  0.4986 0.2987 0.2189 0.0506  0.0120  -0.0067 ? ? ? ? ? ? 1889 PHE A CD2 
+272 C CE1 . PHE A 34  0.4978 0.3212 0.2398 0.0423  -0.0155 -0.0222 ? ? ? ? ? ? 1889 PHE A CE1 
+273 C CE2 . PHE A 34  0.5225 0.3422 0.2357 0.0531  0.0107  -0.0133 ? ? ? ? ? ? 1889 PHE A CE2 
+274 C CZ  . PHE A 34  0.5377 0.3668 0.2589 0.0477  -0.0037 -0.0234 ? ? ? ? ? ? 1889 PHE A CZ  
+275 N N   . LEU A 35  0.5106 0.2744 0.2746 0.0076  -0.0047 -0.0061 ? ? ? ? ? ? 1890 LEU A N   
+276 C CA  . LEU A 35  0.5668 0.3116 0.3150 -0.0067 -0.0053 -0.0059 ? ? ? ? ? ? 1890 LEU A CA  
+277 C C   . LEU A 35  0.6253 0.3845 0.3814 -0.0165 -0.0192 -0.0045 ? ? ? ? ? ? 1890 LEU A C   
+278 O O   . LEU A 35  0.5520 0.2934 0.2803 -0.0226 -0.0203 -0.0080 ? ? ? ? ? ? 1890 LEU A O   
+279 C CB  . LEU A 35  0.5433 0.2871 0.3036 -0.0213 -0.0015 -0.0030 ? ? ? ? ? ? 1890 LEU A CB  
+280 C CG  . LEU A 35  0.5914 0.3192 0.3395 -0.0139 0.0140  -0.0005 ? ? ? ? ? ? 1890 LEU A CG  
+281 C CD1 . LEU A 35  0.5980 0.3350 0.3669 -0.0283 0.0165  0.0073  ? ? ? ? ? ? 1890 LEU A CD1 
+282 C CD2 . LEU A 35  0.7012 0.3891 0.4128 -0.0109 0.0232  -0.0021 ? ? ? ? ? ? 1890 LEU A CD2 
+283 N N   . LEU A 36  0.5053 0.2959 0.2984 -0.0166 -0.0283 0.0009  ? ? ? ? ? ? 1891 LEU A N   
+284 C CA  . LEU A 36  0.5160 0.3313 0.3262 -0.0259 -0.0416 0.0085  ? ? ? ? ? ? 1891 LEU A CA  
+285 C C   . LEU A 36  0.5357 0.3707 0.3704 -0.0133 -0.0477 0.0144  ? ? ? ? ? ? 1891 LEU A C   
+286 O O   . LEU A 36  0.4790 0.3102 0.3240 -0.0021 -0.0433 0.0104  ? ? ? ? ? ? 1891 LEU A O   
+287 C CB  . LEU A 36  0.5523 0.3927 0.3955 -0.0419 -0.0467 0.0180  ? ? ? ? ? ? 1891 LEU A CB  
+288 C CG  . LEU A 36  0.5662 0.3936 0.3917 -0.0618 -0.0452 0.0161  ? ? ? ? ? ? 1891 LEU A CG  
+289 C CD1 . LEU A 36  0.5943 0.4596 0.4625 -0.0756 -0.0505 0.0328  ? ? ? ? ? ? 1891 LEU A CD1 
+290 C CD2 . LEU A 36  0.6564 0.4658 0.4411 -0.0766 -0.0517 0.0082  ? ? ? ? ? ? 1891 LEU A CD2 
+291 N N   . PRO A 37  0.4743 0.3312 0.3174 -0.0168 -0.0584 0.0242  ? ? ? ? ? ? 1892 PRO A N   
+292 C CA  . PRO A 37  0.4277 0.3040 0.3004 -0.0069 -0.0650 0.0338  ? ? ? ? ? ? 1892 PRO A CA  
+293 C C   . PRO A 37  0.3838 0.2721 0.3049 -0.0062 -0.0651 0.0384  ? ? ? ? ? ? 1892 PRO A C   
+294 O O   . PRO A 37  0.4330 0.3337 0.3745 -0.0141 -0.0637 0.0441  ? ? ? ? ? ? 1892 PRO A O   
+295 C CB  . PRO A 37  0.4672 0.3713 0.3415 -0.0121 -0.0753 0.0476  ? ? ? ? ? ? 1892 PRO A CB  
+296 C CG  . PRO A 37  0.4622 0.3670 0.3164 -0.0290 -0.0766 0.0441  ? ? ? ? ? ? 1892 PRO A CG  
+297 C CD  . PRO A 37  0.4485 0.3141 0.2719 -0.0309 -0.0652 0.0271  ? ? ? ? ? ? 1892 PRO A CD  
+298 N N   . VAL A 38  0.4942 0.2174 0.4040 -0.0429 -0.0705 -0.0274 ? ? ? ? ? ? 1893 VAL A N   
+299 C CA  . VAL A 38  0.5101 0.2401 0.4522 -0.0415 -0.0589 -0.0233 ? ? ? ? ? ? 1893 VAL A CA  
+300 C C   . VAL A 38  0.6208 0.3203 0.5418 -0.0191 -0.0972 -0.0229 ? ? ? ? ? ? 1893 VAL A C   
+301 O O   . VAL A 38  0.6349 0.3025 0.4751 -0.0082 -0.1142 -0.0213 ? ? ? ? ? ? 1893 VAL A O   
+302 C CB  . VAL A 38  0.5722 0.3104 0.4694 -0.0539 -0.0107 -0.0162 ? ? ? ? ? ? 1893 VAL A CB  
+303 C CG1 . VAL A 38  0.5924 0.3232 0.5140 -0.0520 0.0058  -0.0148 ? ? ? ? ? ? 1893 VAL A CG1 
+304 C CG2 . VAL A 38  0.5375 0.3218 0.4626 -0.0733 0.0259  -0.0133 ? ? ? ? ? ? 1893 VAL A CG2 
+305 N N   . ASN A 39  0.5962 0.3081 0.5906 -0.0103 -0.1108 -0.0228 ? ? ? ? ? ? 1894 ASN A N   
+306 C CA  . ASN A 39  0.7082 0.4000 0.6889 0.0171  -0.1454 -0.0153 ? ? ? ? ? ? 1894 ASN A CA  
+307 C C   . ASN A 39  0.6909 0.3501 0.6187 0.0239  -0.1094 0.0009  ? ? ? ? ? ? 1894 ASN A C   
+308 O O   . ASN A 39  0.6708 0.3376 0.6462 0.0168  -0.0721 0.0048  ? ? ? ? ? ? 1894 ASN A O   
+309 C CB  . ASN A 39  0.6637 0.3873 0.7499 0.0268  -0.1699 -0.0190 ? ? ? ? ? ? 1894 ASN A CB  
+310 C CG  . ASN A 39  0.7107 0.4265 0.7861 0.0614  -0.2133 -0.0075 ? ? ? ? ? ? 1894 ASN A CG  
+311 O OD1 . ASN A 39  0.7650 0.4428 0.7660 0.0796  -0.2058 0.0114  ? ? ? ? ? ? 1894 ASN A OD1 
+312 N ND2 . ASN A 39  0.6513 0.4064 0.8020 0.0715  -0.2574 -0.0182 ? ? ? ? ? ? 1894 ASN A ND2 
+313 N N   . LEU A 40  0.7217 0.3417 0.5522 0.0360  -0.1167 0.0078  ? ? ? ? ? ? 1895 LEU A N   
+314 C CA  . LEU A 40  0.7282 0.3101 0.4985 0.0379  -0.0740 0.0191  ? ? ? ? ? ? 1895 LEU A CA  
+315 C C   . LEU A 40  0.7414 0.3010 0.5376 0.0647  -0.0710 0.0382  ? ? ? ? ? ? 1895 LEU A C   
+316 O O   . LEU A 40  0.7475 0.2734 0.5160 0.0642  -0.0234 0.0464  ? ? ? ? ? ? 1895 LEU A O   
+317 C CB  . LEU A 40  0.8050 0.3479 0.4644 0.0432  -0.0811 0.0203  ? ? ? ? ? ? 1895 LEU A CB  
+318 C CG  . LEU A 40  0.8330 0.3932 0.4627 0.0206  -0.0785 0.0049  ? ? ? ? ? ? 1895 LEU A CG  
+319 C CD1 . LEU A 40  0.9397 0.4571 0.4622 0.0274  -0.0839 0.0056  ? ? ? ? ? ? 1895 LEU A CD1 
+320 C CD2 . LEU A 40  0.7600 0.3540 0.4168 -0.0086 -0.0259 -0.0022 ? ? ? ? ? ? 1895 LEU A CD2 
+321 N N   . LYS A 41  0.8106 0.3912 0.6642 0.0883  -0.1186 0.0446  ? ? ? ? ? ? 1896 LYS A N   
+322 C CA  . LYS A 41  0.9136 0.4811 0.8033 0.1201  -0.1185 0.0679  ? ? ? ? ? ? 1896 LYS A CA  
+323 C C   . LYS A 41  0.8753 0.4727 0.8774 0.1078  -0.0881 0.0635  ? ? ? ? ? ? 1896 LYS A C   
+324 O O   . LYS A 41  0.8602 0.4429 0.9022 0.1295  -0.0693 0.0825  ? ? ? ? ? ? 1896 LYS A O   
+325 C CB  . LYS A 41  0.9521 0.5374 0.8438 0.1567  -0.1889 0.0790  ? ? ? ? ? ? 1896 LYS A CB  
+326 C CG  . LYS A 41  1.0659 0.6232 0.8438 0.1684  -0.2207 0.0816  ? ? ? ? ? ? 1896 LYS A CG  
+327 C CD  . LYS A 41  1.2516 0.8070 1.0034 0.2164  -0.2675 0.1087  ? ? ? ? ? ? 1896 LYS A CD  
+328 C CE  . LYS A 41  1.3088 0.9363 1.1407 0.2276  -0.3328 0.0968  ? ? ? ? ? ? 1896 LYS A CE  
+329 N NZ  . LYS A 41  1.3332 0.9864 1.1324 0.2074  -0.3768 0.0645  ? ? ? ? ? ? 1896 LYS A NZ  
+330 N N   . LEU A 42  0.7870 0.4509 0.7273 0.0312  -0.1080 -0.0253 ? ? ? ? ? ? 1897 LEU A N   
+331 C CA  . LEU A 42  0.8228 0.4968 0.8288 0.0409  -0.0926 -0.0355 ? ? ? ? ? ? 1897 LEU A CA  
+332 C C   . LEU A 42  0.8150 0.4832 0.8113 0.0431  -0.0578 -0.0448 ? ? ? ? ? ? 1897 LEU A C   
+333 O O   . LEU A 42  0.8639 0.5385 0.9069 0.0475  -0.0412 -0.0552 ? ? ? ? ? ? 1897 LEU A O   
+334 C CB  . LEU A 42  0.7542 0.4467 0.7937 0.0369  -0.0892 -0.0497 ? ? ? ? ? ? 1897 LEU A CB  
+335 C CG  . LEU A 42  0.8972 0.6045 0.9562 0.0315  -0.1249 -0.0450 ? ? ? ? ? ? 1897 LEU A CG  
+336 C CD1 . LEU A 42  0.9322 0.6597 1.0393 0.0270  -0.1166 -0.0629 ? ? ? ? ? ? 1897 LEU A CD1 
+337 C CD2 . LEU A 42  0.9307 0.6422 1.0324 0.0407  -0.1561 -0.0264 ? ? ? ? ? ? 1897 LEU A CD2 
+338 N N   . VAL A 43  0.7164 0.3760 0.6545 0.0378  -0.0464 -0.0427 ? ? ? ? ? ? 1898 VAL A N   
+339 C CA  . VAL A 43  0.6759 0.3364 0.5996 0.0366  -0.0184 -0.0490 ? ? ? ? ? ? 1898 VAL A CA  
+340 C C   . VAL A 43  0.6844 0.3320 0.5787 0.0359  -0.0189 -0.0422 ? ? ? ? ? ? 1898 VAL A C   
+341 O O   . VAL A 43  0.6706 0.3116 0.5195 0.0317  -0.0242 -0.0346 ? ? ? ? ? ? 1898 VAL A O   
+342 C CB  . VAL A 43  0.6877 0.3532 0.5800 0.0319  -0.0038 -0.0500 ? ? ? ? ? ? 1898 VAL A CB  
+343 C CG1 . VAL A 43  0.6832 0.3562 0.5596 0.0283  0.0191  -0.0516 ? ? ? ? ? ? 1898 VAL A CG1 
+344 C CG2 . VAL A 43  0.6423 0.3156 0.5644 0.0302  -0.0012 -0.0562 ? ? ? ? ? ? 1898 VAL A CG2 
+345 N N   . PRO A 44  0.6511 0.2951 0.5762 0.0382  -0.0101 -0.0481 ? ? ? ? ? ? 1899 PRO A N   
+346 C CA  . PRO A 44  0.6676 0.2970 0.5720 0.0353  -0.0076 -0.0441 ? ? ? ? ? ? 1899 PRO A CA  
+347 C C   . PRO A 44  0.7014 0.3382 0.5539 0.0266  0.0075  -0.0463 ? ? ? ? ? ? 1899 PRO A C   
+348 O O   . PRO A 44  0.6574 0.3121 0.5029 0.0230  0.0232  -0.0539 ? ? ? ? ? ? 1899 PRO A O   
+349 C CB  . PRO A 44  0.7434 0.3713 0.7005 0.0371  0.0094  -0.0600 ? ? ? ? ? ? 1899 PRO A CB  
+350 C CG  . PRO A 44  0.7513 0.3891 0.7666 0.0450  0.0042  -0.0651 ? ? ? ? ? ? 1899 PRO A CG  
+351 C CD  . PRO A 44  0.6642 0.3172 0.6518 0.0420  0.0012  -0.0625 ? ? ? ? ? ? 1899 PRO A CD  
+352 N N   . GLY A 45  0.6092 0.2342 0.4281 0.0223  0.0015  -0.0373 ? ? ? ? ? ? 1900 GLY A N   
+353 C CA  . GLY A 45  0.6028 0.2388 0.3828 0.0144  0.0140  -0.0395 ? ? ? ? ? ? 1900 GLY A CA  
+354 C C   . GLY A 45  0.6235 0.2690 0.3750 0.0147  0.0107  -0.0339 ? ? ? ? ? ? 1900 GLY A C   
+355 O O   . GLY A 45  0.6555 0.3054 0.3797 0.0093  0.0149  -0.0321 ? ? ? ? ? ? 1900 GLY A O   
+356 N N   . TYR A 46  0.6042 0.2531 0.3687 0.0201  0.0058  -0.0337 ? ? ? ? ? ? 1901 TYR A N   
+357 C CA  . TYR A 46  0.5828 0.2402 0.3329 0.0208  0.0096  -0.0327 ? ? ? ? ? ? 1901 TYR A CA  
+358 C C   . TYR A 46  0.6679 0.3178 0.3875 0.0156  0.0049  -0.0316 ? ? ? ? ? ? 1901 TYR A C   
+359 O O   . TYR A 46  0.5951 0.2549 0.3044 0.0146  0.0153  -0.0333 ? ? ? ? ? ? 1901 TYR A O   
+360 C CB  . TYR A 46  0.6239 0.2817 0.3972 0.0249  0.0068  -0.0352 ? ? ? ? ? ? 1901 TYR A CB  
+361 C CG  . TYR A 46  0.6372 0.3033 0.4118 0.0271  0.0180  -0.0335 ? ? ? ? ? ? 1901 TYR A CG  
+362 C CD1 . TYR A 46  0.5813 0.2418 0.3469 0.0266  0.0184  -0.0373 ? ? ? ? ? ? 1901 TYR A CD1 
+363 C CD2 . TYR A 46  0.5632 0.2425 0.3495 0.0280  0.0293  -0.0275 ? ? ? ? ? ? 1901 TYR A CD2 
+364 C CE1 . TYR A 46  0.5788 0.2437 0.3597 0.0312  0.0298  -0.0347 ? ? ? ? ? ? 1901 TYR A CE1 
+365 C CE2 . TYR A 46  0.6115 0.2962 0.4050 0.0312  0.0364  -0.0186 ? ? ? ? ? ? 1901 TYR A CE2 
+366 C CZ  . TYR A 46  0.6346 0.3105 0.4313 0.0350  0.0366  -0.0218 ? ? ? ? ? ? 1901 TYR A CZ  
+367 O OH  . TYR A 46  0.5736 0.2519 0.3909 0.0407  0.0444  -0.0117 ? ? ? ? ? ? 1901 TYR A OH  
+368 N N   . LYS A 47  0.6918 0.3268 0.3987 0.0107  -0.0107 -0.0280 ? ? ? ? ? ? 1902 LYS A N   
+369 C CA  . LYS A 47  0.7033 0.3323 0.3724 -0.0004 -0.0130 -0.0287 ? ? ? ? ? ? 1902 LYS A CA  
+370 C C   . LYS A 47  0.6587 0.2887 0.3056 -0.0071 -0.0017 -0.0271 ? ? ? ? ? ? 1902 LYS A C   
+371 O O   . LYS A 47  0.7321 0.3688 0.3603 -0.0139 0.0101  -0.0346 ? ? ? ? ? ? 1902 LYS A O   
+372 C CB  . LYS A 47  0.7250 0.3406 0.3780 -0.0085 -0.0366 -0.0195 ? ? ? ? ? ? 1902 LYS A CB  
+373 C CG  . LYS A 47  0.7732 0.3857 0.3771 -0.0266 -0.0375 -0.0231 ? ? ? ? ? ? 1902 LYS A CG  
+374 C CD  . LYS A 47  0.8132 0.4170 0.3935 -0.0389 -0.0662 -0.0090 ? ? ? ? ? ? 1902 LYS A CD  
+375 C CE  . LYS A 47  0.9365 0.5396 0.4558 -0.0639 -0.0637 -0.0146 ? ? ? ? ? ? 1902 LYS A CE  
+376 N NZ  . LYS A 47  1.0326 0.6289 0.5181 -0.0802 -0.0963 0.0076  ? ? ? ? ? ? 1902 LYS A NZ  
+377 N N   . LYS A 48  0.6491 0.2731 0.3038 -0.0066 -0.0025 -0.0205 ? ? ? ? ? ? 1903 LYS A N   
+378 C CA  . LYS A 48  0.6562 0.2814 0.2935 -0.0157 0.0087  -0.0206 ? ? ? ? ? ? 1903 LYS A CA  
+379 C C   . LYS A 48  0.6806 0.3332 0.3304 -0.0124 0.0250  -0.0299 ? ? ? ? ? ? 1903 LYS A C   
+380 O O   . LYS A 48  0.6895 0.3536 0.3276 -0.0198 0.0355  -0.0338 ? ? ? ? ? ? 1903 LYS A O   
+381 C CB  . LYS A 48  0.6675 0.2751 0.3163 -0.0176 0.0047  -0.0136 ? ? ? ? ? ? 1903 LYS A CB  
+382 C CG  . LYS A 48  0.6908 0.2965 0.3235 -0.0304 0.0169  -0.0149 ? ? ? ? ? ? 1903 LYS A CG  
+383 C CD  . LYS A 48  0.7722 0.3665 0.3637 -0.0450 0.0154  -0.0066 ? ? ? ? ? ? 1903 LYS A CD  
+384 C CE  . LYS A 48  0.7570 0.3431 0.3358 -0.0604 0.0273  -0.0053 ? ? ? ? ? ? 1903 LYS A CE  
+385 N NZ  . LYS A 48  0.7623 0.3145 0.3525 -0.0627 0.0181  0.0098  ? ? ? ? ? ? 1903 LYS A NZ  
+386 N N   . VAL A 49  0.6071 0.2725 0.2823 -0.0027 0.0263  -0.0316 ? ? ? ? ? ? 1904 VAL A N   
+387 C CA  . VAL A 49  0.6139 0.3080 0.2997 -0.0013 0.0358  -0.0334 ? ? ? ? ? ? 1904 VAL A CA  
+388 C C   . VAL A 49  0.6367 0.3441 0.3324 0.0058  0.0394  -0.0319 ? ? ? ? ? ? 1904 VAL A C   
+389 O O   . VAL A 49  0.6181 0.3471 0.3202 0.0048  0.0458  -0.0319 ? ? ? ? ? ? 1904 VAL A O   
+390 C CB  . VAL A 49  0.5833 0.2866 0.2856 0.0009  0.0371  -0.0337 ? ? ? ? ? ? 1904 VAL A CB  
+391 C CG1 . VAL A 49  0.5827 0.3186 0.2901 0.0005  0.0414  -0.0284 ? ? ? ? ? ? 1904 VAL A CG1 
+392 C CG2 . VAL A 49  0.5884 0.2817 0.2912 -0.0077 0.0405  -0.0419 ? ? ? ? ? ? 1904 VAL A CG2 
+393 N N   . ILE A 50  0.4941 0.2495 0.4330 -0.0620 0.0377  -0.0105 ? ? ? ? ? ? 1905 ILE A N   
+394 C CA  . ILE A 50  0.5233 0.2878 0.4288 -0.0397 0.0202  -0.0219 ? ? ? ? ? ? 1905 ILE A CA  
+395 C C   . ILE A 50  0.6079 0.3288 0.4510 -0.0237 0.0572  -0.0068 ? ? ? ? ? ? 1905 ILE A C   
+396 O O   . ILE A 50  0.6180 0.2819 0.3724 -0.0104 0.0506  0.0152  ? ? ? ? ? ? 1905 ILE A O   
+397 C CB  . ILE A 50  0.5374 0.2784 0.3829 -0.0299 -0.0330 -0.0197 ? ? ? ? ? ? 1905 ILE A CB  
+398 C CG1 . ILE A 50  0.5576 0.3358 0.4604 -0.0433 -0.0664 -0.0325 ? ? ? ? ? ? 1905 ILE A CG1 
+399 C CG2 . ILE A 50  0.4791 0.2158 0.2834 -0.0058 -0.0413 -0.0304 ? ? ? ? ? ? 1905 ILE A CG2 
+400 C CD1 . ILE A 50  0.4390 0.2914 0.4247 -0.0372 -0.0651 -0.0614 ? ? ? ? ? ? 1905 ILE A CD1 
+401 N N   . LYS A 51  0.5238 0.2778 0.4156 -0.0226 0.0954  -0.0232 ? ? ? ? ? ? 1906 LYS A N   
+402 C CA  . LYS A 51  0.6171 0.3291 0.4608 -0.0105 0.1416  -0.0086 ? ? ? ? ? ? 1906 LYS A CA  
+403 C C   . LYS A 51  0.7278 0.4092 0.4817 0.0168  0.1177  -0.0013 ? ? ? ? ? ? 1906 LYS A C   
+404 O O   . LYS A 51  0.6980 0.3273 0.3786 0.0325  0.1413  0.0192  ? ? ? ? ? ? 1906 LYS A O   
+405 C CB  . LYS A 51  0.6524 0.4157 0.5855 -0.0205 0.1915  -0.0364 ? ? ? ? ? ? 1906 LYS A CB  
+406 C CG  . LYS A 51  0.7122 0.5083 0.7466 -0.0522 0.2272  -0.0529 ? ? ? ? ? ? 1906 LYS A CG  
+407 C CD  . LYS A 51  0.8099 0.5256 0.7937 -0.0600 0.2585  -0.0147 ? ? ? ? ? ? 1906 LYS A CD  
+408 C CE  . LYS A 51  0.8195 0.5591 0.9067 -0.0943 0.3051  -0.0324 ? ? ? ? ? ? 1906 LYS A CE  
+409 N NZ  . LYS A 51  0.9728 0.6195 1.0008 -0.0948 0.3537  0.0080  ? ? ? ? ? ? 1906 LYS A NZ  
+410 N N   . LYS A 52  0.5879 0.2982 0.3450 0.0253  0.0754  -0.0191 ? ? ? ? ? ? 1907 LYS A N   
+411 C CA  . LYS A 52  0.6989 0.3774 0.3772 0.0480  0.0573  -0.0172 ? ? ? ? ? ? 1907 LYS A CA  
+412 C C   . LYS A 52  0.6391 0.3058 0.2900 0.0484  0.0091  -0.0231 ? ? ? ? ? ? 1907 LYS A C   
+413 O O   . LYS A 52  0.6176 0.3087 0.2900 0.0571  -0.0078 -0.0395 ? ? ? ? ? ? 1907 LYS A O   
+414 C CB  . LYS A 52  0.7118 0.4252 0.4130 0.0647  0.0722  -0.0359 ? ? ? ? ? ? 1907 LYS A CB  
+415 C CG  . LYS A 52  0.8474 0.5770 0.5846 0.0623  0.1248  -0.0384 ? ? ? ? ? ? 1907 LYS A CG  
+416 C CD  . LYS A 52  0.9725 0.7418 0.7268 0.0833  0.1319  -0.0612 ? ? ? ? ? ? 1907 LYS A CD  
+417 C CE  . LYS A 52  1.0273 0.8250 0.8360 0.0769  0.1867  -0.0737 ? ? ? ? ? ? 1907 LYS A CE  
+418 N NZ  . LYS A 52  1.0514 0.8989 0.8805 0.1009  0.1886  -0.1013 ? ? ? ? ? ? 1907 LYS A NZ  
+419 N N   . PRO A 53  0.6932 0.3217 0.2950 0.0424  -0.0097 -0.0120 ? ? ? ? ? ? 1908 PRO A N   
+420 C CA  . PRO A 53  0.7254 0.3382 0.3023 0.0385  -0.0490 -0.0236 ? ? ? ? ? ? 1908 PRO A CA  
+421 C C   . PRO A 53  0.6770 0.2942 0.2517 0.0520  -0.0476 -0.0281 ? ? ? ? ? ? 1908 PRO A C   
+422 O O   . PRO A 53  0.6607 0.2598 0.1947 0.0657  -0.0305 -0.0268 ? ? ? ? ? ? 1908 PRO A O   
+423 C CB  . PRO A 53  0.6863 0.2893 0.2512 0.0342  -0.0567 -0.0117 ? ? ? ? ? ? 1908 PRO A CB  
+424 C CG  . PRO A 53  0.7441 0.3295 0.2874 0.0351  -0.0296 0.0079  ? ? ? ? ? ? 1908 PRO A CG  
+425 C CD  . PRO A 53  0.7881 0.3860 0.3528 0.0432  0.0085  0.0092  ? ? ? ? ? ? 1908 PRO A CD  
+426 N N   . MET A 54  0.6788 0.1783 0.3262 -0.0349 0.0269  0.0263  ? ? ? ? ? ? 1909 MET A N   
+427 C CA  . MET A 54  0.6402 0.2193 0.3265 -0.0283 0.0067  0.0252  ? ? ? ? ? ? 1909 MET A CA  
+428 C C   . MET A 54  0.6941 0.2935 0.3841 -0.0051 -0.0057 0.0194  ? ? ? ? ? ? 1909 MET A C   
+429 O O   . MET A 54  0.6652 0.2273 0.3323 -0.0035 -0.0021 0.0097  ? ? ? ? ? ? 1909 MET A O   
+430 C CB  . MET A 54  0.5640 0.1894 0.2901 -0.0623 -0.0022 0.0126  ? ? ? ? ? ? 1909 MET A CB  
+431 C CG  . MET A 54  0.5663 0.2609 0.3274 -0.0513 -0.0153 0.0136  ? ? ? ? ? ? 1909 MET A CG  
+432 S SD  . MET A 54  0.5831 0.2862 0.3319 -0.0286 -0.0069 0.0294  ? ? ? ? ? ? 1909 MET A SD  
+433 C CE  . MET A 54  0.6009 0.2745 0.3392 -0.0503 0.0200  0.0413  ? ? ? ? ? ? 1909 MET A CE  
+434 N N   . ASP A 55  0.5662 0.2199 0.2815 0.0114  -0.0168 0.0244  ? ? ? ? ? ? 1910 ASP A N   
+435 C CA  . ASP A 55  0.5309 0.2124 0.2611 0.0291  -0.0233 0.0222  ? ? ? ? ? ? 1910 ASP A CA  
+436 C C   . ASP A 55  0.5085 0.2463 0.2753 0.0239  -0.0353 0.0193  ? ? ? ? ? ? 1910 ASP A C   
+437 O O   . ASP A 55  0.5231 0.2743 0.2951 0.0155  -0.0381 0.0194  ? ? ? ? ? ? 1910 ASP A O   
+438 C CB  . ASP A 55  0.5837 0.2584 0.3028 0.0628  -0.0171 0.0355  ? ? ? ? ? ? 1910 ASP A CB  
+439 C CG  . ASP A 55  0.6507 0.3621 0.3787 0.0756  -0.0271 0.0464  ? ? ? ? ? ? 1910 ASP A CG  
+440 O OD1 . ASP A 55  0.6092 0.2904 0.3076 0.0765  -0.0212 0.0558  ? ? ? ? ? ? 1910 ASP A OD1 
+441 O OD2 . ASP A 55  0.5599 0.3291 0.3216 0.0817  -0.0404 0.0444  ? ? ? ? ? ? 1910 ASP A OD2 
+442 N N   . PHE A 56  0.4664 0.2287 0.2538 0.0294  -0.0371 0.0170  ? ? ? ? ? ? 1911 PHE A N   
+443 C CA  . PHE A 56  0.4768 0.2738 0.2943 0.0209  -0.0427 0.0130  ? ? ? ? ? ? 1911 PHE A CA  
+444 C C   . PHE A 56  0.4579 0.2806 0.2870 0.0218  -0.0513 0.0112  ? ? ? ? ? ? 1911 PHE A C   
+445 O O   . PHE A 56  0.4288 0.2582 0.2639 0.0108  -0.0542 0.0034  ? ? ? ? ? ? 1911 PHE A O   
+446 C CB  . PHE A 56  0.4637 0.2736 0.2991 0.0253  -0.0355 0.0149  ? ? ? ? ? ? 1911 PHE A CB  
+447 C CG  . PHE A 56  0.5287 0.3153 0.3407 0.0264  -0.0295 0.0151  ? ? ? ? ? ? 1911 PHE A CG  
+448 C CD1 . PHE A 56  0.4840 0.2535 0.2741 0.0168  -0.0373 0.0093  ? ? ? ? ? ? 1911 PHE A CD1 
+449 C CD2 . PHE A 56  0.4854 0.2729 0.2974 0.0359  -0.0163 0.0209  ? ? ? ? ? ? 1911 PHE A CD2 
+450 C CE1 . PHE A 56  0.5018 0.2587 0.2656 0.0169  -0.0395 0.0057  ? ? ? ? ? ? 1911 PHE A CE1 
+451 C CE2 . PHE A 56  0.5176 0.2826 0.2935 0.0407  -0.0129 0.0207  ? ? ? ? ? ? 1911 PHE A CE2 
+452 C CZ  . PHE A 56  0.5508 0.3021 0.3003 0.0313  -0.0284 0.0113  ? ? ? ? ? ? 1911 PHE A CZ  
+453 N N   . SER A 57  0.4467 0.2843 0.2749 0.0380  -0.0561 0.0175  ? ? ? ? ? ? 1912 SER A N   
+454 C CA  . SER A 57  0.5260 0.3987 0.3608 0.0393  -0.0719 0.0131  ? ? ? ? ? ? 1912 SER A CA  
+455 C C   . SER A 57  0.5609 0.4103 0.3569 0.0381  -0.0730 0.0130  ? ? ? ? ? ? 1912 SER A C   
+456 O O   . SER A 57  0.4827 0.3472 0.2718 0.0311  -0.0831 0.0014  ? ? ? ? ? ? 1912 SER A O   
+457 C CB  . SER A 57  0.5103 0.4187 0.3554 0.0643  -0.0804 0.0240  ? ? ? ? ? ? 1912 SER A CB  
+458 O OG  . SER A 57  0.5952 0.4688 0.3972 0.0892  -0.0748 0.0406  ? ? ? ? ? ? 1912 SER A OG  
+459 N N   . THR A 58  0.5369 0.3454 0.3051 0.0425  -0.0594 0.0243  ? ? ? ? ? ? 1913 THR A N   
+460 C CA  . THR A 58  0.5605 0.3464 0.2963 0.0393  -0.0513 0.0285  ? ? ? ? ? ? 1913 THR A CA  
+461 C C   . THR A 58  0.5263 0.3176 0.2791 0.0193  -0.0453 0.0164  ? ? ? ? ? ? 1913 THR A C   
+462 O O   . THR A 58  0.5915 0.3852 0.3275 0.0189  -0.0419 0.0122  ? ? ? ? ? ? 1913 THR A O   
+463 C CB  . THR A 58  0.5669 0.3029 0.2749 0.0423  -0.0330 0.0443  ? ? ? ? ? ? 1913 THR A CB  
+464 O OG1 . THR A 58  0.5684 0.2917 0.2538 0.0712  -0.0345 0.0593  ? ? ? ? ? ? 1913 THR A OG1 
+465 C CG2 . THR A 58  0.5953 0.3099 0.2755 0.0353  -0.0167 0.0525  ? ? ? ? ? ? 1913 THR A CG2 
+466 N N   . ILE A 59  0.4623 0.2553 0.2430 0.0084  -0.0430 0.0122  ? ? ? ? ? ? 1914 ILE A N   
+467 C CA  . ILE A 59  0.4660 0.2702 0.2661 -0.0010 -0.0380 0.0054  ? ? ? ? ? ? 1914 ILE A CA  
+468 C C   . ILE A 59  0.5118 0.3249 0.3142 0.0011  -0.0420 -0.0067 ? ? ? ? ? ? 1914 ILE A C   
+469 O O   . ILE A 59  0.5119 0.3217 0.3080 0.0018  -0.0328 -0.0122 ? ? ? ? ? ? 1914 ILE A O   
+470 C CB  . ILE A 59  0.4598 0.2687 0.2813 -0.0060 -0.0399 0.0055  ? ? ? ? ? ? 1914 ILE A CB  
+471 C CG1 . ILE A 59  0.4667 0.2629 0.2816 -0.0165 -0.0378 0.0090  ? ? ? ? ? ? 1914 ILE A CG1 
+472 C CG2 . ILE A 59  0.3829 0.2078 0.2243 -0.0046 -0.0359 0.0035  ? ? ? ? ? ? 1914 ILE A CG2 
+473 C CD1 . ILE A 59  0.4373 0.2369 0.2574 -0.0205 -0.0456 0.0052  ? ? ? ? ? ? 1914 ILE A CD1 
+474 N N   . ARG A 60  0.4991 0.3222 0.3113 0.0007  -0.0533 -0.0122 ? ? ? ? ? ? 1915 ARG A N   
+475 C CA  . ARG A 60  0.5024 0.3297 0.3203 -0.0075 -0.0583 -0.0290 ? ? ? ? ? ? 1915 ARG A CA  
+476 C C   . ARG A 60  0.5748 0.4014 0.3559 -0.0050 -0.0656 -0.0400 ? ? ? ? ? ? 1915 ARG A C   
+477 O O   . ARG A 60  0.5393 0.3486 0.3053 -0.0110 -0.0611 -0.0573 ? ? ? ? ? ? 1915 ARG A O   
+478 C CB  . ARG A 60  0.4626 0.3145 0.3111 -0.0143 -0.0680 -0.0316 ? ? ? ? ? ? 1915 ARG A CB  
+479 C CG  . ARG A 60  0.4714 0.3342 0.3307 -0.0331 -0.0779 -0.0537 ? ? ? ? ? ? 1915 ARG A CG  
+480 C CD  . ARG A 60  0.5246 0.3473 0.3874 -0.0457 -0.0601 -0.0633 ? ? ? ? ? ? 1915 ARG A CD  
+481 N NE  . ARG A 60  0.5476 0.3633 0.4408 -0.0478 -0.0445 -0.0494 ? ? ? ? ? ? 1915 ARG A NE  
+482 C CZ  . ARG A 60  0.6266 0.4007 0.5192 -0.0500 -0.0241 -0.0476 ? ? ? ? ? ? 1915 ARG A CZ  
+483 N NH1 . ARG A 60  0.5839 0.3193 0.4518 -0.0495 -0.0158 -0.0607 ? ? ? ? ? ? 1915 ARG A NH1 
+484 N NH2 . ARG A 60  0.5880 0.3542 0.4977 -0.0475 -0.0086 -0.0306 ? ? ? ? ? ? 1915 ARG A NH2 
+485 N N   . GLU A 61  0.5132 0.3504 0.2703 0.0075  -0.0742 -0.0293 ? ? ? ? ? ? 1916 GLU A N   
+486 C CA  . GLU A 61  0.5432 0.3798 0.2513 0.0156  -0.0820 -0.0362 ? ? ? ? ? ? 1916 GLU A CA  
+487 C C   . GLU A 61  0.5402 0.3460 0.2179 0.0191  -0.0573 -0.0345 ? ? ? ? ? ? 1916 GLU A C   
+488 O O   . GLU A 61  0.5927 0.3860 0.2315 0.0207  -0.0556 -0.0512 ? ? ? ? ? ? 1916 GLU A O   
+489 C CB  . GLU A 61  0.5218 0.3720 0.2045 0.0369  -0.0933 -0.0171 ? ? ? ? ? ? 1916 GLU A CB  
+490 C CG  . GLU A 61  0.6569 0.5061 0.2740 0.0520  -0.1024 -0.0193 ? ? ? ? ? ? 1916 GLU A CG  
+491 C CD  . GLU A 61  0.7974 0.6794 0.4062 0.0410  -0.1329 -0.0506 ? ? ? ? ? ? 1916 GLU A CD  
+492 O OE1 . GLU A 61  0.7831 0.7062 0.4440 0.0271  -0.1533 -0.0618 ? ? ? ? ? ? 1916 GLU A OE1 
+493 O OE2 . GLU A 61  0.8505 0.7186 0.4033 0.0434  -0.1338 -0.0651 ? ? ? ? ? ? 1916 GLU A OE2 
+494 N N   . LYS A 62  0.5433 0.3400 0.2401 0.0192  -0.0375 -0.0163 ? ? ? ? ? ? 1917 LYS A N   
+495 C CA  . LYS A 62  0.5498 0.3354 0.2389 0.0211  -0.0107 -0.0115 ? ? ? ? ? ? 1917 LYS A CA  
+496 C C   . LYS A 62  0.5556 0.3371 0.2598 0.0205  -0.0018 -0.0280 ? ? ? ? ? ? 1917 LYS A C   
+497 O O   . LYS A 62  0.5774 0.3446 0.2515 0.0301  0.0165  -0.0353 ? ? ? ? ? ? 1917 LYS A O   
+498 C CB  . LYS A 62  0.4864 0.2769 0.2081 0.0129  0.0030  0.0075  ? ? ? ? ? ? 1917 LYS A CB  
+499 C CG  . LYS A 62  0.5621 0.3325 0.2550 0.0149  0.0082  0.0261  ? ? ? ? ? ? 1917 LYS A CG  
+500 C CD  . LYS A 62  0.6198 0.3843 0.3440 -0.0033 0.0199  0.0374  ? ? ? ? ? ? 1917 LYS A CD  
+501 C CE  . LYS A 62  0.5837 0.3673 0.3347 -0.0164 0.0452  0.0426  ? ? ? ? ? ? 1917 LYS A CE  
+502 N NZ  . LYS A 62  0.6141 0.3918 0.3921 -0.0432 0.0554  0.0509  ? ? ? ? ? ? 1917 LYS A NZ  
+503 N N   . LEU A 63  0.5349 0.3214 0.2784 0.0134  -0.0100 -0.0318 ? ? ? ? ? ? 1918 LEU A N   
+504 C CA  . LEU A 63  0.5952 0.3654 0.3499 0.0174  0.0017  -0.0423 ? ? ? ? ? ? 1918 LEU A CA  
+505 C C   . LEU A 63  0.5855 0.3229 0.2981 0.0147  0.0003  -0.0692 ? ? ? ? ? ? 1918 LEU A C   
+506 O O   . LEU A 63  0.6824 0.3902 0.3730 0.0263  0.0218  -0.0793 ? ? ? ? ? ? 1918 LEU A O   
+507 C CB  . LEU A 63  0.5970 0.3703 0.3895 0.0116  -0.0059 -0.0375 ? ? ? ? ? ? 1918 LEU A CB  
+508 C CG  . LEU A 63  0.5575 0.3084 0.3620 0.0234  0.0114  -0.0370 ? ? ? ? ? ? 1918 LEU A CG  
+509 C CD1 . LEU A 63  0.5559 0.3328 0.3783 0.0433  0.0270  -0.0205 ? ? ? ? ? ? 1918 LEU A CD1 
+510 C CD2 . LEU A 63  0.5330 0.2787 0.3608 0.0185  0.0062  -0.0292 ? ? ? ? ? ? 1918 LEU A CD2 
+511 N N   . SER A 64  0.6048 0.2953 0.2965 -0.0049 -0.0686 -0.0288 ? ? ? ? ? ? 1919 SER A N   
+512 C CA  . SER A 64  0.6727 0.3168 0.3479 -0.0024 -0.0860 -0.0300 ? ? ? ? ? ? 1919 SER A CA  
+513 C C   . SER A 64  0.6920 0.2863 0.3155 0.0038  -0.0916 -0.0344 ? ? ? ? ? ? 1919 SER A C   
+514 O O   . SER A 64  0.7697 0.3206 0.3674 0.0072  -0.1051 -0.0379 ? ? ? ? ? ? 1919 SER A O   
+515 C CB  . SER A 64  0.7247 0.3685 0.4334 -0.0112 -0.1066 -0.0350 ? ? ? ? ? ? 1919 SER A CB  
+516 O OG  . SER A 64  0.7923 0.4832 0.5450 -0.0180 -0.0986 -0.0304 ? ? ? ? ? ? 1919 SER A OG  
+517 N N   . SER A 65  0.6918 0.2921 0.2983 0.0041  -0.0819 -0.0341 ? ? ? ? ? ? 1920 SER A N   
+518 C CA  . SER A 65  0.7556 0.3128 0.3086 0.0068  -0.0858 -0.0354 ? ? ? ? ? ? 1920 SER A CA  
+519 C C   . SER A 65  0.7375 0.3060 0.2659 0.0143  -0.0581 -0.0301 ? ? ? ? ? ? 1920 SER A C   
+520 O O   . SER A 65  0.7771 0.3266 0.2667 0.0135  -0.0540 -0.0277 ? ? ? ? ? ? 1920 SER A O   
+521 C CB  . SER A 65  0.7356 0.2817 0.2904 -0.0028 -0.1050 -0.0357 ? ? ? ? ? ? 1920 SER A CB  
+522 O OG  . SER A 65  0.7107 0.2974 0.3008 -0.0073 -0.0956 -0.0335 ? ? ? ? ? ? 1920 SER A OG  
+523 N N   . GLY A 66  0.7095 0.3116 0.2639 0.0204  -0.0396 -0.0259 ? ? ? ? ? ? 1921 GLY A N   
+524 C CA  . GLY A 66  0.7151 0.3324 0.2590 0.0291  -0.0134 -0.0203 ? ? ? ? ? ? 1921 GLY A CA  
+525 C C   . GLY A 66  0.7065 0.3495 0.2552 0.0227  -0.0028 -0.0128 ? ? ? ? ? ? 1921 GLY A C   
+526 O O   . GLY A 66  0.7360 0.3778 0.2617 0.0273  0.0159  -0.0080 ? ? ? ? ? ? 1921 GLY A O   
+527 N N   . GLN A 67  0.6714 0.3391 0.2531 0.0118  -0.0138 -0.0124 ? ? ? ? ? ? 1922 GLN A N   
+528 C CA  . GLN A 67  0.6889 0.3767 0.2801 0.0043  -0.0083 -0.0059 ? ? ? ? ? ? 1922 GLN A CA  
+529 C C   . GLN A 67  0.6599 0.3978 0.2894 0.0036  0.0056  -0.0003 ? ? ? ? ? ? 1922 GLN A C   
+530 O O   . GLN A 67  0.6337 0.3912 0.2781 -0.0034 0.0085  0.0049  ? ? ? ? ? ? 1922 GLN A O   
+531 C CB  . GLN A 67  0.6730 0.3512 0.2779 -0.0067 -0.0316 -0.0115 ? ? ? ? ? ? 1922 GLN A CB  
+532 C CG  . GLN A 67  0.7456 0.3732 0.3120 -0.0084 -0.0498 -0.0126 ? ? ? ? ? ? 1922 GLN A CG  
+533 C CD  . GLN A 67  0.8112 0.4286 0.3987 -0.0186 -0.0750 -0.0150 ? ? ? ? ? ? 1922 GLN A CD  
+534 O OE1 . GLN A 67  0.9121 0.5429 0.5178 -0.0256 -0.0755 -0.0099 ? ? ? ? ? ? 1922 GLN A OE1 
+535 N NE2 . GLN A 67  0.8624 0.4550 0.4537 -0.0196 -0.0981 -0.0226 ? ? ? ? ? ? 1922 GLN A NE2 
+536 N N   . TYR A 68  0.6017 0.3588 0.2477 0.0094  0.0111  0.0006  ? ? ? ? ? ? 1923 TYR A N   
+537 C CA  . TYR A 68  0.5763 0.3777 0.2522 0.0094  0.0228  0.0097  ? ? ? ? ? ? 1923 TYR A CA  
+538 C C   . TYR A 68  0.6847 0.4835 0.3540 0.0227  0.0415  0.0188  ? ? ? ? ? ? 1923 TYR A C   
+539 O O   . TYR A 68  0.6485 0.4277 0.3092 0.0326  0.0420  0.0169  ? ? ? ? ? ? 1923 TYR A O   
+540 C CB  . TYR A 68  0.5486 0.3791 0.2506 0.0044  0.0148  0.0084  ? ? ? ? ? ? 1923 TYR A CB  
+541 C CG  . TYR A 68  0.5586 0.4012 0.2739 -0.0073 0.0018  -0.0043 ? ? ? ? ? ? 1923 TYR A CG  
+542 C CD1 . TYR A 68  0.5235 0.3843 0.2524 -0.0149 0.0002  -0.0082 ? ? ? ? ? ? 1923 TYR A CD1 
+543 C CD2 . TYR A 68  0.5285 0.3640 0.2479 -0.0101 -0.0090 -0.0135 ? ? ? ? ? ? 1923 TYR A CD2 
+544 C CE1 . TYR A 68  0.5120 0.3811 0.2571 -0.0232 -0.0117 -0.0244 ? ? ? ? ? ? 1923 TYR A CE1 
+545 C CE2 . TYR A 68  0.5335 0.3823 0.2713 -0.0183 -0.0181 -0.0284 ? ? ? ? ? ? 1923 TYR A CE2 
+546 C CZ  . TYR A 68  0.5088 0.3732 0.2589 -0.0238 -0.0192 -0.0355 ? ? ? ? ? ? 1923 TYR A CZ  
+547 O OH  . TYR A 68  0.5013 0.3762 0.2737 -0.0296 -0.0284 -0.0544 ? ? ? ? ? ? 1923 TYR A OH  
+548 N N   . PRO A 69  0.5966 0.4150 0.2749 0.0234  0.0567  0.0281  ? ? ? ? ? ? 1924 PRO A N   
+549 C CA  . PRO A 69  0.6162 0.4369 0.2961 0.0381  0.0781  0.0349  ? ? ? ? ? ? 1924 PRO A CA  
+550 C C   . PRO A 69  0.6932 0.5453 0.4134 0.0438  0.0789  0.0442  ? ? ? ? ? ? 1924 PRO A C   
+551 O O   . PRO A 69  0.6541 0.5031 0.3828 0.0591  0.0928  0.0472  ? ? ? ? ? ? 1924 PRO A O   
+552 C CB  . PRO A 69  0.6727 0.5111 0.3575 0.0336  0.0934  0.0445  ? ? ? ? ? ? 1924 PRO A CB  
+553 C CG  . PRO A 69  0.7023 0.5588 0.4051 0.0160  0.0761  0.0457  ? ? ? ? ? ? 1924 PRO A CG  
+554 C CD  . PRO A 69  0.7009 0.5339 0.3881 0.0111  0.0546  0.0317  ? ? ? ? ? ? 1924 PRO A CD  
+555 N N   . ASN A 70  0.4315 0.4773 0.4474 -0.0358 0.0433  -0.0702 ? ? ? ? ? ? 1925 ASN A N   
+556 C CA  . ASN A 70  0.4714 0.4996 0.4763 0.0139  0.0064  -0.0819 ? ? ? ? ? ? 1925 ASN A CA  
+557 C C   . ASN A 70  0.5267 0.4946 0.4568 0.0472  -0.0018 -0.0448 ? ? ? ? ? ? 1925 ASN A C   
+558 O O   . ASN A 70  0.4838 0.4307 0.3776 0.0312  0.0198  -0.0159 ? ? ? ? ? ? 1925 ASN A O   
+559 C CB  . ASN A 70  0.4381 0.5189 0.4946 0.0198  -0.0205 -0.1458 ? ? ? ? ? ? 1925 ASN A CB  
+560 C CG  . ASN A 70  0.5050 0.6016 0.5610 -0.0002 -0.0158 -0.1643 ? ? ? ? ? ? 1925 ASN A CG  
+561 O OD1 . ASN A 70  0.5318 0.5851 0.5317 0.0105  -0.0139 -0.1350 ? ? ? ? ? ? 1925 ASN A OD1 
+562 N ND2 . ASN A 70  0.4676 0.6274 0.5879 -0.0300 -0.0136 -0.2145 ? ? ? ? ? ? 1925 ASN A ND2 
+563 N N   . LEU A 71  0.4852 0.4256 0.3905 0.0947  -0.0338 -0.0468 ? ? ? ? ? ? 1926 LEU A N   
+564 C CA  . LEU A 71  0.5380 0.4234 0.3683 0.1321  -0.0447 -0.0156 ? ? ? ? ? ? 1926 LEU A CA  
+565 C C   . LEU A 71  0.5436 0.4346 0.3544 0.1281  -0.0453 -0.0276 ? ? ? ? ? ? 1926 LEU A C   
+566 O O   . LEU A 71  0.5993 0.4542 0.3537 0.1323  -0.0308 0.0098  ? ? ? ? ? ? 1926 LEU A O   
+567 C CB  . LEU A 71  0.6675 0.5310 0.4802 0.1844  -0.0862 -0.0315 ? ? ? ? ? ? 1926 LEU A CB  
+568 C CG  . LEU A 71  0.7550 0.5819 0.5549 0.2042  -0.0922 -0.0045 ? ? ? ? ? ? 1926 LEU A CG  
+569 C CD1 . LEU A 71  0.8475 0.6409 0.6123 0.2603  -0.1361 -0.0174 ? ? ? ? ? ? 1926 LEU A CD1 
+570 C CD2 . LEU A 71  0.8658 0.6447 0.6129 0.1951  -0.0593 0.0605  ? ? ? ? ? ? 1926 LEU A CD2 
+571 N N   . GLU A 72  0.5715 0.5093 0.4320 0.1217  -0.0641 -0.0830 ? ? ? ? ? ? 1927 GLU A N   
+572 C CA  . GLU A 72  0.5779 0.5240 0.4307 0.1197  -0.0720 -0.1047 ? ? ? ? ? ? 1927 GLU A CA  
+573 C C   . GLU A 72  0.5730 0.5093 0.4077 0.0802  -0.0371 -0.0756 ? ? ? ? ? ? 1927 GLU A C   
+574 O O   . GLU A 72  0.5537 0.4621 0.3419 0.0926  -0.0399 -0.0625 ? ? ? ? ? ? 1927 GLU A O   
+575 C CB  . GLU A 72  0.6153 0.6239 0.5431 0.1064  -0.0911 -0.1718 ? ? ? ? ? ? 1927 GLU A CB  
+576 C CG  . GLU A 72  0.8258 0.8469 0.7580 0.0993  -0.1005 -0.2004 ? ? ? ? ? ? 1927 GLU A CG  
+577 N N   . THR A 73  0.5470 0.5041 0.4151 0.0354  -0.0062 -0.0664 ? ? ? ? ? ? 1928 THR A N   
+578 C CA  . THR A 73  0.4955 0.4412 0.3461 -0.0018 0.0240  -0.0418 ? ? ? ? ? ? 1928 THR A CA  
+579 C C   . THR A 73  0.5349 0.4277 0.3179 0.0150  0.0389  0.0147  ? ? ? ? ? ? 1928 THR A C   
+580 O O   . THR A 73  0.5398 0.4114 0.2889 0.0049  0.0508  0.0327  ? ? ? ? ? ? 1928 THR A O   
+581 C CB  . THR A 73  0.4250 0.4065 0.3250 -0.0531 0.0524  -0.0485 ? ? ? ? ? ? 1928 THR A CB  
+582 O OG1 . THR A 73  0.5080 0.4871 0.4154 -0.0486 0.0618  -0.0272 ? ? ? ? ? ? 1928 THR A OG1 
+583 C CG2 . THR A 73  0.3993 0.4391 0.3670 -0.0741 0.0425  -0.1057 ? ? ? ? ? ? 1928 THR A CG2 
+584 N N   . PHE A 74  0.5646 0.3316 0.2618 -0.0301 0.0485  -0.0061 ? ? ? ? ? ? 1929 PHE A N   
+585 C CA  . PHE A 74  0.5491 0.3251 0.2601 -0.0229 0.0348  -0.0180 ? ? ? ? ? ? 1929 PHE A CA  
+586 C C   . PHE A 74  0.6157 0.4065 0.3437 -0.0182 0.0268  -0.0127 ? ? ? ? ? ? 1929 PHE A C   
+587 O O   . PHE A 74  0.5543 0.3386 0.2761 -0.0130 0.0104  -0.0174 ? ? ? ? ? ? 1929 PHE A O   
+588 C CB  . PHE A 74  0.5645 0.3486 0.3036 -0.0227 0.0548  -0.0283 ? ? ? ? ? ? 1929 PHE A CB  
+589 C CG  . PHE A 74  0.4998 0.2935 0.2719 -0.0189 0.0558  -0.0403 ? ? ? ? ? ? 1929 PHE A CG  
+590 C CD1 . PHE A 74  0.5029 0.3076 0.2841 -0.0216 0.0370  -0.0672 ? ? ? ? ? ? 1929 PHE A CD1 
+591 C CD2 . PHE A 74  0.4529 0.2497 0.2464 -0.0064 0.0787  -0.0252 ? ? ? ? ? ? 1929 PHE A CD2 
+592 C CE1 . PHE A 74  0.4579 0.2769 0.2836 -0.0213 0.0436  -0.0812 ? ? ? ? ? ? 1929 PHE A CE1 
+593 C CE2 . PHE A 74  0.4903 0.2868 0.3147 -0.0010 0.0906  -0.0325 ? ? ? ? ? ? 1929 PHE A CE2 
+594 C CZ  . PHE A 74  0.5045 0.3123 0.3525 -0.0132 0.0747  -0.0618 ? ? ? ? ? ? 1929 PHE A CZ  
+595 N N   . ALA A 75  0.5479 0.3644 0.2934 -0.0140 0.0373  -0.0050 ? ? ? ? ? ? 1930 ALA A N   
+596 C CA  . ALA A 75  0.5326 0.3743 0.2874 -0.0025 0.0267  -0.0066 ? ? ? ? ? ? 1930 ALA A CA  
+597 C C   . ALA A 75  0.5248 0.3534 0.2712 -0.0180 0.0099  -0.0174 ? ? ? ? ? ? 1930 ALA A C   
+598 O O   . ALA A 75  0.5468 0.3755 0.2903 -0.0108 -0.0030 -0.0243 ? ? ? ? ? ? 1930 ALA A O   
+599 C CB  . ALA A 75  0.5136 0.4026 0.2828 0.0147  0.0364  -0.0018 ? ? ? ? ? ? 1930 ALA A CB  
+600 N N   . LEU A 76  0.5911 0.3997 0.3323 -0.0377 0.0184  -0.0181 ? ? ? ? ? ? 1931 LEU A N   
+601 C CA  . LEU A 76  0.6182 0.3946 0.3528 -0.0541 0.0200  -0.0270 ? ? ? ? ? ? 1931 LEU A CA  
+602 C C   . LEU A 76  0.6446 0.3746 0.3419 -0.0414 0.0111  -0.0210 ? ? ? ? ? ? 1931 LEU A C   
+603 O O   . LEU A 76  0.6124 0.3233 0.3062 -0.0438 0.0082  -0.0297 ? ? ? ? ? ? 1931 LEU A O   
+604 C CB  . LEU A 76  0.6987 0.4455 0.4305 -0.0728 0.0463  -0.0220 ? ? ? ? ? ? 1931 LEU A CB  
+605 C CG  . LEU A 76  0.8144 0.6146 0.5990 -0.0911 0.0578  -0.0364 ? ? ? ? ? ? 1931 LEU A CG  
+606 C CD1 . LEU A 76  0.8747 0.6378 0.6587 -0.1087 0.0935  -0.0274 ? ? ? ? ? ? 1931 LEU A CD1 
+607 C CD2 . LEU A 76  0.8739 0.7145 0.7025 -0.1062 0.0478  -0.0702 ? ? ? ? ? ? 1931 LEU A CD2 
+608 N N   . ASP A 77  0.5992 0.3174 0.2707 -0.0258 0.0065  -0.0110 ? ? ? ? ? ? 1932 ASP A N   
+609 C CA  . ASP A 77  0.6270 0.3221 0.2671 -0.0051 -0.0063 -0.0086 ? ? ? ? ? ? 1932 ASP A CA  
+610 C C   . ASP A 77  0.5628 0.2847 0.2273 0.0035  -0.0213 -0.0160 ? ? ? ? ? ? 1932 ASP A C   
+611 O O   . ASP A 77  0.5691 0.2700 0.2162 0.0157  -0.0277 -0.0151 ? ? ? ? ? ? 1932 ASP A O   
+612 C CB  . ASP A 77  0.6125 0.3143 0.2290 0.0122  -0.0140 -0.0097 ? ? ? ? ? ? 1932 ASP A CB  
+613 C CG  . ASP A 77  0.6747 0.3288 0.2298 0.0290  -0.0012 0.0045  ? ? ? ? ? ? 1932 ASP A CG  
+614 O OD1 . ASP A 77  0.7730 0.3761 0.3102 0.0225  0.0230  0.0180  ? ? ? ? ? ? 1932 ASP A OD1 
+615 O OD2 . ASP A 77  0.6836 0.3495 0.2072 0.0517  -0.0112 -0.0005 ? ? ? ? ? ? 1932 ASP A OD2 
+616 N N   . VAL A 78  0.4379 0.3036 0.2476 0.0313  -0.0191 0.0152  ? ? ? ? ? ? 1933 VAL A N   
+617 C CA  . VAL A 78  0.4338 0.2859 0.2373 0.0247  -0.0186 0.0129  ? ? ? ? ? ? 1933 VAL A CA  
+618 C C   . VAL A 78  0.4840 0.3284 0.2793 0.0198  -0.0215 0.0172  ? ? ? ? ? ? 1933 VAL A C   
+619 O O   . VAL A 78  0.5009 0.3348 0.2884 0.0149  -0.0170 0.0160  ? ? ? ? ? ? 1933 VAL A O   
+620 C CB  . VAL A 78  0.4509 0.2860 0.2452 0.0258  -0.0167 0.0125  ? ? ? ? ? ? 1933 VAL A CB  
+621 C CG1 . VAL A 78  0.4988 0.2992 0.2683 0.0210  -0.0062 0.0136  ? ? ? ? ? ? 1933 VAL A CG1 
+622 C CG2 . VAL A 78  0.4373 0.2800 0.2479 0.0279  -0.0118 0.0030  ? ? ? ? ? ? 1933 VAL A CG2 
+623 N N   . ARG A 79  0.4693 0.3215 0.2741 0.0217  -0.0294 0.0172  ? ? ? ? ? ? 1934 ARG A N   
+624 C CA  . ARG A 79  0.4629 0.3113 0.2681 0.0196  -0.0377 0.0133  ? ? ? ? ? ? 1934 ARG A CA  
+625 C C   . ARG A 79  0.4983 0.3517 0.3146 0.0114  -0.0269 0.0147  ? ? ? ? ? ? 1934 ARG A C   
+626 O O   . ARG A 79  0.5035 0.3481 0.3130 0.0075  -0.0297 0.0123  ? ? ? ? ? ? 1934 ARG A O   
+627 C CB  . ARG A 79  0.4473 0.3108 0.2786 0.0259  -0.0529 0.0017  ? ? ? ? ? ? 1934 ARG A CB  
+628 C CG  . ARG A 79  0.5368 0.3831 0.3417 0.0417  -0.0697 -0.0004 ? ? ? ? ? ? 1934 ARG A CG  
+629 C CD  . ARG A 79  0.5386 0.4082 0.3808 0.0528  -0.0886 -0.0175 ? ? ? ? ? ? 1934 ARG A CD  
+630 N NE  . ARG A 79  0.6002 0.4425 0.4026 0.0746  -0.1070 -0.0180 ? ? ? ? ? ? 1934 ARG A NE  
+631 C CZ  . ARG A 79  0.6484 0.5052 0.4737 0.0878  -0.1203 -0.0287 ? ? ? ? ? ? 1934 ARG A CZ  
+632 N NH1 . ARG A 79  0.5504 0.4519 0.4452 0.0782  -0.1132 -0.0412 ? ? ? ? ? ? 1934 ARG A NH1 
+633 N NH2 . ARG A 79  0.6762 0.4951 0.4505 0.1119  -0.1365 -0.0270 ? ? ? ? ? ? 1934 ARG A NH2 
+634 N N   . LEU A 80  0.4479 0.3065 0.2710 0.0121  -0.0136 0.0189  ? ? ? ? ? ? 1935 LEU A N   
+635 C CA  . LEU A 80  0.4804 0.3277 0.2965 0.0107  0.0002  0.0230  ? ? ? ? ? ? 1935 LEU A CA  
+636 C C   . LEU A 80  0.5333 0.3719 0.3301 0.0129  -0.0049 0.0233  ? ? ? ? ? ? 1935 LEU A C   
+637 O O   . LEU A 80  0.4765 0.3051 0.2692 0.0096  -0.0004 0.0240  ? ? ? ? ? ? 1935 LEU A O   
+638 C CB  . LEU A 80  0.4799 0.3155 0.2807 0.0208  0.0158  0.0290  ? ? ? ? ? ? 1935 LEU A CB  
+639 C CG  . LEU A 80  0.4921 0.2961 0.2597 0.0299  0.0312  0.0360  ? ? ? ? ? ? 1935 LEU A CG  
+640 C CD1 . LEU A 80  0.5264 0.3171 0.3122 0.0159  0.0528  0.0363  ? ? ? ? ? ? 1935 LEU A CD1 
+641 C CD2 . LEU A 80  0.5157 0.2933 0.2436 0.0496  0.0433  0.0418  ? ? ? ? ? ? 1935 LEU A CD2 
+642 N N   . VAL A 81  0.4541 0.2968 0.2469 0.0170  -0.0113 0.0191  ? ? ? ? ? ? 1936 VAL A N   
+643 C CA  . VAL A 81  0.4711 0.3103 0.2635 0.0165  -0.0117 0.0117  ? ? ? ? ? ? 1936 VAL A CA  
+644 C C   . VAL A 81  0.5379 0.3649 0.3239 0.0062  -0.0090 0.0131  ? ? ? ? ? ? 1936 VAL A C   
+645 O O   . VAL A 81  0.4820 0.3036 0.2667 0.0050  -0.0061 0.0103  ? ? ? ? ? ? 1936 VAL A O   
+646 C CB  . VAL A 81  0.4790 0.3237 0.2852 0.0166  -0.0106 0.0003  ? ? ? ? ? ? 1936 VAL A CB  
+647 C CG1 . VAL A 81  0.4216 0.2627 0.2428 0.0110  -0.0022 -0.0131 ? ? ? ? ? ? 1936 VAL A CG1 
+648 C CG2 . VAL A 81  0.4144 0.2728 0.2280 0.0310  -0.0190 -0.0082 ? ? ? ? ? ? 1936 VAL A CG2 
+649 N N   . PHE A 82  0.4821 0.3009 0.2584 0.0033  -0.0131 0.0155  ? ? ? ? ? ? 1937 PHE A N   
+650 C CA  . PHE A 82  0.4827 0.2802 0.2376 0.0007  -0.0145 0.0142  ? ? ? ? ? ? 1937 PHE A CA  
+651 C C   . PHE A 82  0.5163 0.3206 0.2818 -0.0016 -0.0229 0.0113  ? ? ? ? ? ? 1937 PHE A C   
+652 O O   . PHE A 82  0.5282 0.3185 0.2808 -0.0039 -0.0231 0.0080  ? ? ? ? ? ? 1937 PHE A O   
+653 C CB  . PHE A 82  0.4952 0.2670 0.2182 0.0080  -0.0189 0.0151  ? ? ? ? ? ? 1937 PHE A CB  
+654 C CG  . PHE A 82  0.5580 0.3163 0.2756 0.0067  -0.0019 0.0162  ? ? ? ? ? ? 1937 PHE A CG  
+655 C CD1 . PHE A 82  0.5301 0.2841 0.2612 -0.0021 0.0192  0.0098  ? ? ? ? ? ? 1937 PHE A CD1 
+656 C CD2 . PHE A 82  0.5609 0.3150 0.2723 0.0136  -0.0058 0.0186  ? ? ? ? ? ? 1937 PHE A CD2 
+657 C CE1 . PHE A 82  0.5648 0.3109 0.3099 -0.0064 0.0386  0.0026  ? ? ? ? ? ? 1937 PHE A CE1 
+658 C CE2 . PHE A 82  0.6261 0.3662 0.3400 0.0100  0.0140  0.0164  ? ? ? ? ? ? 1937 PHE A CE2 
+659 C CZ  . PHE A 82  0.5869 0.3244 0.3222 -0.0014 0.0373  0.0067  ? ? ? ? ? ? 1937 PHE A CZ  
+660 N N   . ASP A 83  0.4960 0.3194 0.2894 -0.0024 -0.0253 0.0098  ? ? ? ? ? ? 1938 ASP A N   
+661 C CA  . ASP A 83  0.5226 0.3523 0.3427 -0.0091 -0.0228 0.0024  ? ? ? ? ? ? 1938 ASP A CA  
+662 C C   . ASP A 83  0.5649 0.3822 0.3775 -0.0129 -0.0067 0.0090  ? ? ? ? ? ? 1938 ASP A C   
+663 O O   . ASP A 83  0.4929 0.3032 0.3121 -0.0188 -0.0051 0.0030  ? ? ? ? ? ? 1938 ASP A O   
+664 C CB  . ASP A 83  0.5111 0.3582 0.3697 -0.0119 -0.0154 -0.0028 ? ? ? ? ? ? 1938 ASP A CB  
+665 C CG  . ASP A 83  0.5785 0.4424 0.4568 -0.0053 -0.0371 -0.0172 ? ? ? ? ? ? 1938 ASP A CG  
+666 O OD1 . ASP A 83  0.5093 0.3629 0.3618 0.0047  -0.0602 -0.0236 ? ? ? ? ? ? 1938 ASP A OD1 
+667 O OD2 . ASP A 83  0.5160 0.3973 0.4301 -0.0065 -0.0304 -0.0234 ? ? ? ? ? ? 1938 ASP A OD2 
+668 N N   . ASN A 84  0.5161 0.3285 0.3133 -0.0057 0.0018  0.0183  ? ? ? ? ? ? 1939 ASN A N   
+669 C CA  . ASN A 84  0.5625 0.3581 0.3431 0.0000  0.0100  0.0220  ? ? ? ? ? ? 1939 ASN A CA  
+670 C C   . ASN A 84  0.5528 0.3461 0.3285 -0.0030 0.0039  0.0162  ? ? ? ? ? ? 1939 ASN A C   
+671 O O   . ASN A 84  0.5340 0.3143 0.3054 -0.0040 0.0089  0.0154  ? ? ? ? ? ? 1939 ASN A O   
+672 C CB  . ASN A 84  0.4680 0.2594 0.2293 0.0178  0.0087  0.0249  ? ? ? ? ? ? 1939 ASN A CB  
+673 C CG  . ASN A 84  0.5388 0.3144 0.2857 0.0256  0.0224  0.0333  ? ? ? ? ? ? 1939 ASN A CG  
+674 O OD1 . ASN A 84  0.5172 0.2816 0.2753 0.0149  0.0415  0.0365  ? ? ? ? ? ? 1939 ASN A OD1 
+675 N ND2 . ASN A 84  0.5097 0.2812 0.2335 0.0452  0.0154  0.0330  ? ? ? ? ? ? 1939 ASN A ND2 
+676 N N   . CYS A 85  0.5390 0.3383 0.3127 -0.0044 -0.0016 0.0121  ? ? ? ? ? ? 1940 CYS A N   
+677 C CA  . CYS A 85  0.5175 0.3059 0.2835 -0.0079 0.0027  0.0058  ? ? ? ? ? ? 1940 CYS A CA  
+678 C C   . CYS A 85  0.5534 0.3270 0.3065 -0.0135 -0.0001 0.0044  ? ? ? ? ? ? 1940 CYS A C   
+679 O O   . CYS A 85  0.5661 0.3289 0.3143 -0.0154 0.0055  0.0006  ? ? ? ? ? ? 1940 CYS A O   
+680 C CB  . CYS A 85  0.5181 0.2995 0.2774 -0.0097 0.0093  0.0025  ? ? ? ? ? ? 1940 CYS A CB  
+681 S SG  . CYS A 85  0.5454 0.2995 0.2930 -0.0160 0.0312  -0.0066 ? ? ? ? ? ? 1940 CYS A SG  
+682 N N   . GLU A 86  0.5174 0.2928 0.2700 -0.0138 -0.0118 0.0027  ? ? ? ? ? ? 1941 GLU A N   
+683 C CA  . GLU A 86  0.5642 0.3302 0.3120 -0.0150 -0.0224 -0.0074 ? ? ? ? ? ? 1941 GLU A CA  
+684 C C   . GLU A 86  0.5890 0.3603 0.3647 -0.0230 -0.0145 -0.0106 ? ? ? ? ? ? 1941 GLU A C   
+685 O O   . GLU A 86  0.5495 0.3093 0.3208 -0.0255 -0.0168 -0.0190 ? ? ? ? ? ? 1941 GLU A O   
+686 C CB  . GLU A 86  0.6149 0.3886 0.3693 -0.0082 -0.0440 -0.0184 ? ? ? ? ? ? 1941 GLU A CB  
+687 C CG  . GLU A 86  0.6297 0.3788 0.3361 0.0060  -0.0536 -0.0160 ? ? ? ? ? ? 1941 GLU A CG  
+688 C CD  . GLU A 86  0.6721 0.4182 0.3706 0.0230  -0.0860 -0.0345 ? ? ? ? ? ? 1941 GLU A CD  
+689 O OE1 . GLU A 86  0.6873 0.4342 0.3944 0.0264  -0.1028 -0.0532 ? ? ? ? ? ? 1941 GLU A OE1 
+690 O OE2 . GLU A 86  0.7424 0.4857 0.4286 0.0357  -0.0977 -0.0343 ? ? ? ? ? ? 1941 GLU A OE2 
+691 N N   . THR A 87  0.5378 0.3175 0.3348 -0.0252 -0.0020 -0.0038 ? ? ? ? ? ? 1942 THR A N   
+692 C CA  . THR A 87  0.5072 0.2743 0.3188 -0.0310 0.0155  -0.0037 ? ? ? ? ? ? 1942 THR A CA  
+693 C C   . THR A 87  0.5701 0.3178 0.3566 -0.0258 0.0214  0.0017  ? ? ? ? ? ? 1942 THR A C   
+694 O O   . THR A 87  0.5430 0.2747 0.3343 -0.0308 0.0302  -0.0025 ? ? ? ? ? ? 1942 THR A O   
+695 C CB  . THR A 87  0.5028 0.2629 0.3198 -0.0289 0.0356  0.0061  ? ? ? ? ? ? 1942 THR A CB  
+696 O OG1 . THR A 87  0.5373 0.3181 0.3918 -0.0363 0.0342  -0.0041 ? ? ? ? ? ? 1942 THR A OG1 
+697 C CG2 . THR A 87  0.5361 0.2612 0.3491 -0.0314 0.0639  0.0102  ? ? ? ? ? ? 1942 THR A CG2 
+698 N N   . PHE A 88  0.5319 0.2831 0.3002 -0.0156 0.0168  0.0065  ? ? ? ? ? ? 1943 PHE A N   
+699 C CA  . PHE A 88  0.5991 0.3386 0.3556 -0.0061 0.0199  0.0056  ? ? ? ? ? ? 1943 PHE A CA  
+700 C C   . PHE A 88  0.6044 0.3460 0.3602 -0.0102 0.0179  -0.0040 ? ? ? ? ? ? 1943 PHE A C   
+701 O O   . PHE A 88  0.6236 0.3597 0.3806 -0.0035 0.0210  -0.0100 ? ? ? ? ? ? 1943 PHE A O   
+702 C CB  . PHE A 88  0.5408 0.2840 0.2897 0.0127  0.0155  0.0074  ? ? ? ? ? ? 1943 PHE A CB  
+703 C CG  . PHE A 88  0.5934 0.3157 0.3247 0.0330  0.0145  0.0053  ? ? ? ? ? ? 1943 PHE A CG  
+704 C CD1 . PHE A 88  0.6036 0.2865 0.3035 0.0426  0.0272  0.0172  ? ? ? ? ? ? 1943 PHE A CD1 
+705 C CD2 . PHE A 88  0.5494 0.2859 0.2958 0.0447  0.0035  -0.0113 ? ? ? ? ? ? 1943 PHE A CD2 
+706 C CE1 . PHE A 88  0.6842 0.3348 0.3517 0.0689  0.0245  0.0164  ? ? ? ? ? ? 1943 PHE A CE1 
+707 C CE2 . PHE A 88  0.5767 0.2944 0.3069 0.0702  -0.0045 -0.0179 ? ? ? ? ? ? 1943 PHE A CE2 
+708 C CZ  . PHE A 88  0.6842 0.3551 0.3667 0.0851  0.0036  -0.0021 ? ? ? ? ? ? 1943 PHE A CZ  
+709 N N   . ASN A 89  0.5350 0.2771 0.2832 -0.0179 0.0148  -0.0067 ? ? ? ? ? ? 1944 ASN A N   
+710 C CA  . ASN A 89  0.5694 0.2966 0.3016 -0.0202 0.0230  -0.0138 ? ? ? ? ? ? 1944 ASN A CA  
+711 C C   . ASN A 89  0.6123 0.3161 0.3121 -0.0220 0.0167  -0.0173 ? ? ? ? ? ? 1944 ASN A C   
+712 O O   . ASN A 89  0.5993 0.3047 0.2910 -0.0194 0.0015  -0.0175 ? ? ? ? ? ? 1944 ASN A O   
+713 C CB  . ASN A 89  0.6164 0.3469 0.3517 -0.0198 0.0329  -0.0158 ? ? ? ? ? ? 1944 ASN A CB  
+714 C CG  . ASN A 89  0.5703 0.3266 0.3427 -0.0130 0.0326  -0.0227 ? ? ? ? ? ? 1944 ASN A CG  
+715 O OD1 . ASN A 89  0.5987 0.3603 0.3947 -0.0103 0.0404  -0.0371 ? ? ? ? ? ? 1944 ASN A OD1 
+716 N ND2 . ASN A 89  0.5041 0.2763 0.2830 -0.0071 0.0213  -0.0166 ? ? ? ? ? ? 1944 ASN A ND2 
+717 N N   . GLU A 90  0.6617 0.2709 0.2922 -0.0009 -0.0431 -0.0189 ? ? ? ? ? ? 1945 GLU A N   
+718 C CA  . GLU A 90  0.6969 0.2833 0.2846 -0.0021 -0.0453 -0.0373 ? ? ? ? ? ? 1945 GLU A CA  
+719 C C   . GLU A 90  0.6842 0.2900 0.2597 0.0095  -0.0515 -0.0338 ? ? ? ? ? ? 1945 GLU A C   
+720 O O   . GLU A 90  0.6618 0.2758 0.2550 0.0213  -0.0391 -0.0205 ? ? ? ? ? ? 1945 GLU A O   
+721 C CB  A GLU A 90  0.7491 0.2830 0.3105 0.0061  -0.0212 -0.0437 ? ? ? ? ? ? 1945 GLU A CB  
+722 C CB  B GLU A 90  0.7496 0.2831 0.3113 0.0053  -0.0215 -0.0440 ? ? ? ? ? ? 1945 GLU A CB  
+723 C CG  A GLU A 90  0.8407 0.3404 0.4150 0.0013  -0.0078 -0.0433 ? ? ? ? ? ? 1945 GLU A CG  
+724 C CG  B GLU A 90  0.7861 0.2833 0.3468 -0.0078 -0.0140 -0.0528 ? ? ? ? ? ? 1945 GLU A CG  
+725 C CD  A GLU A 90  1.0169 0.4661 0.5775 0.0165  0.0229  -0.0479 ? ? ? ? ? ? 1945 GLU A CD  
+726 C CD  B GLU A 90  0.8351 0.3297 0.3681 -0.0336 -0.0307 -0.0781 ? ? ? ? ? ? 1945 GLU A CD  
+727 O OE1 A GLU A 90  1.0741 0.4898 0.5862 0.0113  0.0317  -0.0701 ? ? ? ? ? ? 1945 GLU A OE1 
+728 O OE1 B GLU A 90  0.9127 0.4252 0.4165 -0.0358 -0.0473 -0.0906 ? ? ? ? ? ? 1945 GLU A OE1 
+729 O OE2 A GLU A 90  1.1134 0.5589 0.7121 0.0342  0.0383  -0.0298 ? ? ? ? ? ? 1945 GLU A OE2 
+730 O OE2 B GLU A 90  0.8864 0.3619 0.4274 -0.0522 -0.0275 -0.0848 ? ? ? ? ? ? 1945 GLU A OE2 
+731 N N   . ASP A 91  0.7341 0.3474 0.2809 0.0059  -0.0707 -0.0454 ? ? ? ? ? ? 1946 ASP A N   
+732 C CA  . ASP A 91  0.7468 0.3653 0.2707 0.0211  -0.0762 -0.0384 ? ? ? ? ? ? 1946 ASP A CA  
+733 C C   . ASP A 91  0.8490 0.4263 0.3389 0.0340  -0.0490 -0.0321 ? ? ? ? ? ? 1946 ASP A C   
+734 O O   . ASP A 91  0.8195 0.3961 0.3115 0.0457  -0.0373 -0.0186 ? ? ? ? ? ? 1946 ASP A O   
+735 C CB  . ASP A 91  0.7500 0.3796 0.2401 0.0189  -0.1045 -0.0505 ? ? ? ? ? ? 1946 ASP A CB  
+736 C CG  . ASP A 91  0.7965 0.4780 0.3315 0.0084  -0.1292 -0.0571 ? ? ? ? ? ? 1946 ASP A CG  
+737 O OD1 . ASP A 91  0.7169 0.4222 0.3003 0.0060  -0.1226 -0.0493 ? ? ? ? ? ? 1946 ASP A OD1 
+738 O OD2 . ASP A 91  0.8463 0.5483 0.3685 0.0011  -0.1548 -0.0722 ? ? ? ? ? ? 1946 ASP A OD2 
+739 N N   . ASP A 92  0.8167 0.3564 0.2763 0.0298  -0.0345 -0.0444 ? ? ? ? ? ? 1947 ASP A N   
+740 C CA  . ASP A 92  0.9132 0.4127 0.3425 0.0403  -0.0021 -0.0427 ? ? ? ? ? ? 1947 ASP A CA  
+741 C C   . ASP A 92  0.8321 0.3366 0.3186 0.0465  0.0237  -0.0331 ? ? ? ? ? ? 1947 ASP A C   
+742 O O   . ASP A 92  0.8541 0.3316 0.3453 0.0484  0.0445  -0.0403 ? ? ? ? ? ? 1947 ASP A O   
+743 C CB  . ASP A 92  0.9411 0.3954 0.3089 0.0328  0.0058  -0.0644 ? ? ? ? ? ? 1947 ASP A CB  
+744 C CG  . ASP A 92  1.0843 0.4946 0.4086 0.0425  0.0428  -0.0653 ? ? ? ? ? ? 1947 ASP A CG  
+745 O OD1 . ASP A 92  1.0182 0.4348 0.3585 0.0540  0.0603  -0.0481 ? ? ? ? ? ? 1947 ASP A OD1 
+746 O OD2 . ASP A 92  1.1634 0.5412 0.4503 0.0350  0.0566  -0.0822 ? ? ? ? ? ? 1947 ASP A OD2 
+747 N N   . SER A 93  0.7999 0.3407 0.3316 0.0502  0.0215  -0.0178 ? ? ? ? ? ? 1948 SER A N   
+748 C CA  . SER A 93  0.7836 0.3439 0.3725 0.0559  0.0399  -0.0079 ? ? ? ? ? ? 1948 SER A CA  
+749 C C   . SER A 93  0.6889 0.2767 0.2998 0.0558  0.0427  0.0019  ? ? ? ? ? ? 1948 SER A C   
+750 O O   . SER A 93  0.7197 0.3107 0.3088 0.0533  0.0277  0.0033  ? ? ? ? ? ? 1948 SER A O   
+751 C CB  . SER A 93  0.7489 0.3332 0.3822 0.0514  0.0248  -0.0029 ? ? ? ? ? ? 1948 SER A CB  
+752 O OG  . SER A 93  0.6493 0.2695 0.2976 0.0404  -0.0007 0.0011  ? ? ? ? ? ? 1948 SER A OG  
+753 N N   . ASP A 94  0.6936 0.3018 0.3511 0.0586  0.0627  0.0073  ? ? ? ? ? ? 1949 ASP A N   
+754 C CA  . ASP A 94  0.6483 0.2801 0.3294 0.0526  0.0697  0.0119  ? ? ? ? ? ? 1949 ASP A CA  
+755 C C   . ASP A 94  0.6349 0.3011 0.3356 0.0423  0.0423  0.0138  ? ? ? ? ? ? 1949 ASP A C   
+756 O O   . ASP A 94  0.6226 0.2847 0.3112 0.0388  0.0422  0.0141  ? ? ? ? ? ? 1949 ASP A O   
+757 C CB  . ASP A 94  0.6801 0.3424 0.4208 0.0527  0.0921  0.0131  ? ? ? ? ? ? 1949 ASP A CB  
+758 C CG  . ASP A 94  0.8270 0.4565 0.5538 0.0611  0.1303  0.0087  ? ? ? ? ? ? 1949 ASP A CG  
+759 O OD1 . ASP A 94  0.7538 0.3596 0.4553 0.0565  0.1554  0.0079  ? ? ? ? ? ? 1949 ASP A OD1 
+760 O OD2 . ASP A 94  0.9217 0.5447 0.6619 0.0722  0.1393  0.0060  ? ? ? ? ? ? 1949 ASP A OD2 
+761 N N   . ILE A 95  0.5754 0.2699 0.3035 0.0382  0.0226  0.0157  ? ? ? ? ? ? 1950 ILE A N   
+762 C CA  . ILE A 95  0.5564 0.2841 0.3011 0.0256  0.0014  0.0155  ? ? ? ? ? ? 1950 ILE A CA  
+763 C C   . ILE A 95  0.6088 0.3209 0.3189 0.0247  -0.0143 0.0103  ? ? ? ? ? ? 1950 ILE A C   
+764 O O   . ILE A 95  0.5735 0.3000 0.2888 0.0191  -0.0207 0.0072  ? ? ? ? ? ? 1950 ILE A O   
+765 C CB  . ILE A 95  0.5855 0.3434 0.3599 0.0211  -0.0133 0.0226  ? ? ? ? ? ? 1950 ILE A CB  
+766 C CG1 . ILE A 95  0.5492 0.3409 0.3691 0.0230  -0.0048 0.0281  ? ? ? ? ? ? 1950 ILE A CG1 
+767 C CG2 . ILE A 95  0.5971 0.3807 0.3732 0.0053  -0.0325 0.0207  ? ? ? ? ? ? 1950 ILE A CG2 
+768 C CD1 . ILE A 95  0.5795 0.3987 0.4246 0.0255  -0.0219 0.0414  ? ? ? ? ? ? 1950 ILE A CD1 
+769 N N   . GLY A 96  0.6252 0.3097 0.3037 0.0299  -0.0193 0.0071  ? ? ? ? ? ? 1951 GLY A N   
+770 C CA  . GLY A 96  0.6116 0.2894 0.2611 0.0290  -0.0371 -0.0001 ? ? ? ? ? ? 1951 GLY A CA  
+771 C C   . GLY A 96  0.7012 0.3677 0.3282 0.0394  -0.0348 0.0026  ? ? ? ? ? ? 1951 GLY A C   
+772 O O   . GLY A 96  0.6510 0.3354 0.2856 0.0403  -0.0491 0.0011  ? ? ? ? ? ? 1951 GLY A O   
+773 N N   . ARG A 97  0.6723 0.3063 0.2726 0.0486  -0.0137 0.0077  ? ? ? ? ? ? 1952 ARG A N   
+774 C CA  . ARG A 97  0.7080 0.3186 0.2785 0.0598  -0.0067 0.0157  ? ? ? ? ? ? 1952 ARG A CA  
+775 C C   . ARG A 97  0.6532 0.2819 0.2632 0.0559  0.0016  0.0190  ? ? ? ? ? ? 1952 ARG A C   
+776 O O   . ARG A 97  0.6859 0.3071 0.2872 0.0654  -0.0040 0.0240  ? ? ? ? ? ? 1952 ARG A O   
+777 C CB  . ARG A 97  0.7201 0.2869 0.2501 0.0660  0.0221  0.0206  ? ? ? ? ? ? 1952 ARG A CB  
+778 C CG  . ARG A 97  0.8602 0.3962 0.3279 0.0712  0.0148  0.0155  ? ? ? ? ? ? 1952 ARG A CG  
+779 C CD  . ARG A 97  0.9027 0.3907 0.3213 0.0760  0.0489  0.0196  ? ? ? ? ? ? 1952 ARG A CD  
+780 N NE  . ARG A 97  0.8657 0.3574 0.3226 0.0700  0.0787  0.0127  ? ? ? ? ? ? 1952 ARG A NE  
+781 C CZ  . ARG A 97  0.9191 0.4007 0.3699 0.0686  0.0845  0.0005  ? ? ? ? ? ? 1952 ARG A CZ  
+782 N NH1 . ARG A 97  0.9534 0.4189 0.3569 0.0669  0.0633  -0.0099 ? ? ? ? ? ? 1952 ARG A NH1 
+783 N NH2 . ARG A 97  0.9872 0.4760 0.4833 0.0689  0.1122  -0.0028 ? ? ? ? ? ? 1952 ARG A NH2 
+784 N N   . ALA A 98  0.6050 0.2574 0.2584 0.0426  0.0147  0.0153  ? ? ? ? ? ? 1953 ALA A N   
+785 C CA  . ALA A 98  0.6213 0.2933 0.3109 0.0320  0.0231  0.0120  ? ? ? ? ? ? 1953 ALA A CA  
+786 C C   . ALA A 98  0.5805 0.2741 0.2824 0.0309  0.0029  0.0067  ? ? ? ? ? ? 1953 ALA A C   
+787 O O   . ALA A 98  0.5731 0.2573 0.2806 0.0340  0.0110  0.0057  ? ? ? ? ? ? 1953 ALA A O   
+788 C CB  . ALA A 98  0.5618 0.2712 0.2961 0.0154  0.0291  0.0066  ? ? ? ? ? ? 1953 ALA A CB  
+789 N N   . GLY A 99  0.5830 0.3023 0.2914 0.0262  -0.0190 0.0024  ? ? ? ? ? ? 1954 GLY A N   
+790 C CA  . GLY A 99  0.5429 0.2889 0.2692 0.0219  -0.0342 -0.0053 ? ? ? ? ? ? 1954 GLY A CA  
+791 C C   . GLY A 99  0.5743 0.3068 0.2859 0.0415  -0.0428 -0.0026 ? ? ? ? ? ? 1954 GLY A C   
+792 O O   . GLY A 99  0.5464 0.2882 0.2800 0.0454  -0.0400 -0.0067 ? ? ? ? ? ? 1954 GLY A O   
+793 N N   . HIS A 100 0.6004 0.3108 0.2738 0.0550  -0.0536 0.0042  ? ? ? ? ? ? 1955 HIS A N   
+794 C CA  . HIS A 100 0.6181 0.3190 0.2715 0.0772  -0.0682 0.0110  ? ? ? ? ? ? 1955 HIS A CA  
+795 C C   . HIS A 100 0.6493 0.3154 0.2956 0.0930  -0.0475 0.0236  ? ? ? ? ? ? 1955 HIS A C   
+796 O O   . HIS A 100 0.6697 0.3404 0.3316 0.1100  -0.0540 0.0273  ? ? ? ? ? ? 1955 HIS A O   
+797 C CB  . HIS A 100 0.6945 0.3748 0.2946 0.0853  -0.0832 0.0149  ? ? ? ? ? ? 1955 HIS A CB  
+798 C CG  . HIS A 100 0.7385 0.4490 0.3460 0.0705  -0.1052 -0.0004 ? ? ? ? ? ? 1955 HIS A CG  
+799 N ND1 . HIS A 100 0.7218 0.4744 0.3556 0.0704  -0.1313 -0.0099 ? ? ? ? ? ? 1955 HIS A ND1 
+800 C CD2 . HIS A 100 0.7230 0.4251 0.3191 0.0544  -0.1013 -0.0088 ? ? ? ? ? ? 1955 HIS A CD2 
+801 C CE1 . HIS A 100 0.6958 0.4631 0.3311 0.0505  -0.1417 -0.0249 ? ? ? ? ? ? 1955 HIS A CE1 
+802 N NE2 . HIS A 100 0.6775 0.4098 0.2875 0.0418  -0.1234 -0.0235 ? ? ? ? ? ? 1955 HIS A NE2 
+803 N N   . ASN A 101 0.6652 0.2957 0.2925 0.0876  -0.0200 0.0298  ? ? ? ? ? ? 1956 ASN A N   
+804 C CA  . ASN A 101 0.7039 0.2917 0.3228 0.0966  0.0072  0.0406  ? ? ? ? ? ? 1956 ASN A CA  
+805 C C   . ASN A 101 0.6778 0.2829 0.3474 0.0883  0.0186  0.0290  ? ? ? ? ? ? 1956 ASN A C   
+806 O O   . ASN A 101 0.7138 0.2916 0.3849 0.1057  0.0279  0.0365  ? ? ? ? ? ? 1956 ASN A O   
+807 C CB  . ASN A 101 0.7194 0.2767 0.3225 0.0834  0.0394  0.0430  ? ? ? ? ? ? 1956 ASN A CB  
+808 C CG  . ASN A 101 0.8299 0.3496 0.3703 0.0948  0.0414  0.0560  ? ? ? ? ? ? 1956 ASN A CG  
+809 O OD1 . ASN A 101 0.8855 0.3989 0.3860 0.1126  0.0157  0.0641  ? ? ? ? ? ? 1956 ASN A OD1 
+810 N ND2 . ASN A 101 0.8093 0.3078 0.3418 0.0827  0.0727  0.0555  ? ? ? ? ? ? 1956 ASN A ND2 
+811 N N   . MET A 102 0.5470 0.2688 0.2644 0.0023  0.0138  0.0050  ? ? ? ? ? ? 1957 MET A N   
+812 C CA  . MET A 102 0.5273 0.2765 0.2795 0.0003  0.0000  0.0099  ? ? ? ? ? ? 1957 MET A CA  
+813 C C   . MET A 102 0.5890 0.3390 0.3233 0.0050  -0.0262 0.0155  ? ? ? ? ? ? 1957 MET A C   
+814 O O   . MET A 102 0.5523 0.3040 0.2933 0.0031  -0.0288 0.0191  ? ? ? ? ? ? 1957 MET A O   
+815 C CB  . MET A 102 0.4798 0.2734 0.2908 0.0000  -0.0063 0.0075  ? ? ? ? ? ? 1957 MET A CB  
+816 C CG  . MET A 102 0.6127 0.4222 0.4668 -0.0037 0.0165  0.0017  ? ? ? ? ? ? 1957 MET A CG  
+817 S SD  . MET A 102 0.7378 0.5435 0.6050 -0.0199 0.0399  -0.0088 ? ? ? ? ? ? 1957 MET A SD  
+818 C CE  . MET A 102 0.6630 0.5093 0.5480 -0.0285 0.0121  -0.0150 ? ? ? ? ? ? 1957 MET A CE  
+819 N N   . ARG A 103 0.5532 0.3017 0.2736 0.0092  -0.0411 0.0124  ? ? ? ? ? ? 1958 ARG A N   
+820 C CA  . ARG A 103 0.5915 0.3459 0.3073 0.0129  -0.0644 0.0150  ? ? ? ? ? ? 1958 ARG A CA  
+821 C C   . ARG A 103 0.6116 0.3478 0.2906 0.0199  -0.0693 0.0265  ? ? ? ? ? ? 1958 ARG A C   
+822 O O   . ARG A 103 0.6111 0.3510 0.3056 0.0247  -0.0768 0.0352  ? ? ? ? ? ? 1958 ARG A O   
+823 C CB  . ARG A 103 0.5698 0.3285 0.2873 0.0118  -0.0755 0.0030  ? ? ? ? ? ? 1958 ARG A CB  
+824 C CG  . ARG A 103 0.5778 0.3516 0.3121 0.0134  -0.0970 0.0022  ? ? ? ? ? ? 1958 ARG A CG  
+825 C CD  . ARG A 103 0.5623 0.3408 0.2962 0.0079  -0.1080 -0.0171 ? ? ? ? ? ? 1958 ARG A CD  
+826 N NE  . ARG A 103 0.5556 0.3292 0.3215 0.0018  -0.0900 -0.0273 ? ? ? ? ? ? 1958 ARG A NE  
+827 C CZ  . ARG A 103 0.5862 0.3670 0.3949 0.0016  -0.0853 -0.0233 ? ? ? ? ? ? 1958 ARG A CZ  
+828 N NH1 . ARG A 103 0.5390 0.3340 0.3631 0.0039  -0.0963 -0.0151 ? ? ? ? ? ? 1958 ARG A NH1 
+829 N NH2 . ARG A 103 0.5120 0.2812 0.3494 0.0003  -0.0635 -0.0254 ? ? ? ? ? ? 1958 ARG A NH2 
+830 N N   . LYS A 104 0.6302 0.3448 0.2594 0.0220  -0.0618 0.0287  ? ? ? ? ? ? 1959 LYS A N   
+831 C CA  . LYS A 104 0.6481 0.3436 0.2313 0.0341  -0.0652 0.0496  ? ? ? ? ? ? 1959 LYS A CA  
+832 C C   . LYS A 104 0.6873 0.3628 0.2922 0.0364  -0.0403 0.0657  ? ? ? ? ? ? 1959 LYS A C   
+833 O O   . LYS A 104 0.7014 0.3684 0.3097 0.0491  -0.0444 0.0856  ? ? ? ? ? ? 1959 LYS A O   
+834 C CB  . LYS A 104 0.7007 0.3735 0.2126 0.0337  -0.0543 0.0494  ? ? ? ? ? ? 1959 LYS A CB  
+835 C CG  . LYS A 104 0.8488 0.5102 0.3116 0.0497  -0.0575 0.0780  ? ? ? ? ? ? 1959 LYS A CG  
+836 C CD  . LYS A 104 0.9248 0.6347 0.3935 0.0573  -0.0990 0.0775  ? ? ? ? ? ? 1959 LYS A CD  
+837 N N   . TYR A 105 0.6488 0.3193 0.2783 0.0236  -0.0122 0.0545  ? ? ? ? ? ? 1960 TYR A N   
+838 C CA  . TYR A 105 0.6885 0.3442 0.3491 0.0176  0.0165  0.0576  ? ? ? ? ? ? 1960 TYR A CA  
+839 C C   . TYR A 105 0.6848 0.3589 0.3893 0.0160  0.0049  0.0531  ? ? ? ? ? ? 1960 TYR A C   
+840 O O   . TYR A 105 0.6336 0.2832 0.3486 0.0206  0.0217  0.0647  ? ? ? ? ? ? 1960 TYR A O   
+841 C CB  . TYR A 105 0.5946 0.2630 0.2911 0.0007  0.0400  0.0378  ? ? ? ? ? ? 1960 TYR A CB  
+842 C CG  . TYR A 105 0.7147 0.3684 0.4467 -0.0118 0.0761  0.0324  ? ? ? ? ? ? 1960 TYR A CG  
+843 C CD1 . TYR A 105 0.7521 0.3543 0.4563 -0.0085 0.1148  0.0494  ? ? ? ? ? ? 1960 TYR A CD1 
+844 C CD2 . TYR A 105 0.5998 0.2911 0.3913 -0.0290 0.0745  0.0084  ? ? ? ? ? ? 1960 TYR A CD2 
+845 C CE1 . TYR A 105 0.7438 0.3271 0.4918 -0.0235 0.1565  0.0405  ? ? ? ? ? ? 1960 TYR A CE1 
+846 C CE2 . TYR A 105 0.5860 0.2680 0.4182 -0.0469 0.1098  -0.0069 ? ? ? ? ? ? 1960 TYR A CE2 
+847 C CZ  . TYR A 105 0.6454 0.2710 0.4622 -0.0449 0.1533  0.0080  ? ? ? ? ? ? 1960 TYR A CZ  
+848 O OH  . TYR A 105 0.7435 0.3555 0.6120 -0.0661 0.1962  -0.0113 ? ? ? ? ? ? 1960 TYR A OH  
+849 N N   . PHE A 106 0.5825 0.2940 0.3116 0.0102  -0.0181 0.0378  ? ? ? ? ? ? 1961 PHE A N   
+850 C CA  . PHE A 106 0.5650 0.2935 0.3274 0.0062  -0.0252 0.0303  ? ? ? ? ? ? 1961 PHE A CA  
+851 C C   . PHE A 106 0.5854 0.2997 0.3458 0.0224  -0.0348 0.0469  ? ? ? ? ? ? 1961 PHE A C   
+852 O O   . PHE A 106 0.5875 0.2884 0.3746 0.0225  -0.0181 0.0481  ? ? ? ? ? ? 1961 PHE A O   
+853 C CB  . PHE A 106 0.5090 0.2744 0.2855 0.0010  -0.0455 0.0188  ? ? ? ? ? ? 1961 PHE A CB  
+854 C CG  . PHE A 106 0.5280 0.3059 0.3262 -0.0026 -0.0492 0.0122  ? ? ? ? ? ? 1961 PHE A CG  
+855 C CD1 . PHE A 106 0.5238 0.3091 0.3405 -0.0181 -0.0322 -0.0043 ? ? ? ? ? ? 1961 PHE A CD1 
+856 C CD2 . PHE A 106 0.5468 0.3292 0.3498 0.0061  -0.0654 0.0173  ? ? ? ? ? ? 1961 PHE A CD2 
+857 C CE1 . PHE A 106 0.5019 0.2942 0.3322 -0.0241 -0.0284 -0.0146 ? ? ? ? ? ? 1961 PHE A CE1 
+858 C CE2 . PHE A 106 0.5402 0.3303 0.3663 0.0018  -0.0606 0.0100  ? ? ? ? ? ? 1961 PHE A CE2 
+859 C CZ  . PHE A 106 0.4832 0.2755 0.3182 -0.0128 -0.0408 -0.0052 ? ? ? ? ? ? 1961 PHE A CZ  
+860 N N   . GLU A 107 0.6308 0.3621 0.2885 0.0459  0.0259  0.0233  ? ? ? ? ? ? 1962 GLU A N   
+861 C CA  . GLU A 107 0.6750 0.4314 0.3239 0.0624  -0.0334 0.0085  ? ? ? ? ? ? 1962 GLU A CA  
+862 C C   . GLU A 107 0.7379 0.4337 0.3291 0.0886  -0.0551 0.0185  ? ? ? ? ? ? 1962 GLU A C   
+863 O O   . GLU A 107 0.6771 0.4122 0.3023 0.1097  -0.0960 0.0118  ? ? ? ? ? ? 1962 GLU A O   
+864 C CB  . GLU A 107 0.7188 0.4540 0.3153 0.0495  -0.0596 -0.0018 ? ? ? ? ? ? 1962 GLU A CB  
+865 C CG  . GLU A 107 0.6809 0.4838 0.3519 0.0234  -0.0513 -0.0105 ? ? ? ? ? ? 1962 GLU A CG  
+866 C CD  . GLU A 107 0.6981 0.6326 0.4920 0.0238  -0.0736 -0.0132 ? ? ? ? ? ? 1962 GLU A CD  
+867 O OE1 . GLU A 107 0.6091 0.5814 0.4258 0.0483  -0.1007 -0.0151 ? ? ? ? ? ? 1962 GLU A OE1 
+868 O OE2 . GLU A 107 0.5176 0.5195 0.3870 0.0009  -0.0619 -0.0120 ? ? ? ? ? ? 1962 GLU A OE2 
+869 N N   . LYS A 108 0.7637 0.3681 0.2755 0.0890  -0.0262 0.0387  ? ? ? ? ? ? 1963 LYS A N   
+870 C CA  . LYS A 108 0.8576 0.4050 0.3225 0.1110  -0.0475 0.0562  ? ? ? ? ? ? 1963 LYS A CA  
+871 C C   . LYS A 108 0.8072 0.3802 0.3489 0.1231  -0.0448 0.0589  ? ? ? ? ? ? 1963 LYS A C   
+872 O O   . LYS A 108 0.8247 0.3966 0.3806 0.1477  -0.0827 0.0566  ? ? ? ? ? ? 1963 LYS A O   
+873 C CB  . LYS A 108 0.8793 0.3647 0.2872 0.1003  -0.0129 0.0707  ? ? ? ? ? ? 1963 LYS A CB  
+874 C CG  . LYS A 108 1.0339 0.4843 0.4077 0.1140  -0.0424 0.0856  ? ? ? ? ? ? 1963 LYS A CG  
+875 C CD  . LYS A 108 1.1386 0.5653 0.5087 0.1061  -0.0046 0.1074  ? ? ? ? ? ? 1963 LYS A CD  
+876 C CE  . LYS A 108 1.2177 0.6085 0.5398 0.1146  -0.0333 0.1280  ? ? ? ? ? ? 1963 LYS A CE  
+877 N NZ  . LYS A 108 1.1147 0.5149 0.4693 0.1335  -0.0849 0.1300  ? ? ? ? ? ? 1963 LYS A NZ  
+878 N N   . LYS A 109 0.7345 0.3249 0.3241 0.1054  -0.0020 0.0649  ? ? ? ? ? ? 1964 LYS A N   
+879 C CA  . LYS A 109 0.7366 0.3481 0.3932 0.1098  -0.0029 0.0626  ? ? ? ? ? ? 1964 LYS A CA  
+880 C C   . LYS A 109 0.6631 0.3560 0.3838 0.1276  -0.0372 0.0276  ? ? ? ? ? ? 1964 LYS A C   
+881 O O   . LYS A 109 0.6881 0.3753 0.4324 0.1508  -0.0595 0.0165  ? ? ? ? ? ? 1964 LYS A O   
+882 C CB  . LYS A 109 0.7077 0.3419 0.4127 0.0798  0.0426  0.0765  ? ? ? ? ? ? 1964 LYS A CB  
+883 C CG  . LYS A 109 0.8109 0.4535 0.5288 0.0552  0.0724  0.0930  ? ? ? ? ? ? 1964 LYS A CG  
+884 C CD  . LYS A 109 0.9384 0.5568 0.6646 0.0563  0.0582  0.1092  ? ? ? ? ? ? 1964 LYS A CD  
+885 C CE  . LYS A 109 0.9305 0.5681 0.6782 0.0378  0.0791  0.1298  ? ? ? ? ? ? 1964 LYS A CE  
+886 N N   . TRP A 110 0.6067 0.3747 0.3576 0.1180  -0.0401 0.0118  ? ? ? ? ? ? 1965 TRP A N   
+887 C CA  . TRP A 110 0.5672 0.4306 0.3863 0.1342  -0.0668 -0.0144 ? ? ? ? ? ? 1965 TRP A CA  
+888 C C   . TRP A 110 0.6376 0.4849 0.4406 0.1710  -0.1118 -0.0185 ? ? ? ? ? ? 1965 TRP A C   
+889 O O   . TRP A 110 0.5958 0.4730 0.4432 0.2002  -0.1264 -0.0350 ? ? ? ? ? ? 1965 TRP A O   
+890 C CB  . TRP A 110 0.5090 0.4529 0.3647 0.1124  -0.0655 -0.0193 ? ? ? ? ? ? 1965 TRP A CB  
+891 C CG  . TRP A 110 0.4299 0.4932 0.3713 0.1227  -0.0812 -0.0377 ? ? ? ? ? ? 1965 TRP A CG  
+892 C CD1 . TRP A 110 0.4626 0.5917 0.4352 0.1381  -0.1179 -0.0416 ? ? ? ? ? ? 1965 TRP A CD1 
+893 C CD2 . TRP A 110 0.3311 0.4671 0.3365 0.1183  -0.0603 -0.0504 ? ? ? ? ? ? 1965 TRP A CD2 
+894 N NE1 . TRP A 110 0.3967 0.6381 0.4519 0.1457  -0.1142 -0.0540 ? ? ? ? ? ? 1965 TRP A NE1 
+895 C CE2 . TRP A 110 0.2699 0.5174 0.3399 0.1351  -0.0800 -0.0630 ? ? ? ? ? ? 1965 TRP A CE2 
+896 C CE3 . TRP A 110 0.2616 0.3817 0.2745 0.0992  -0.0287 -0.0488 ? ? ? ? ? ? 1965 TRP A CE3 
+897 C CZ2 . TRP A 110 0.2137 0.5192 0.3242 0.1221  -0.0570 -0.0726 ? ? ? ? ? ? 1965 TRP A CZ2 
+898 C CZ3 . TRP A 110 0.2713 0.4802 0.3421 0.0956  -0.0201 -0.0650 ? ? ? ? ? ? 1965 TRP A CZ3 
+899 C CH2 . TRP A 110 0.1983 0.4980 0.3112 0.1087  -0.0338 -0.0781 ? ? ? ? ? ? 1965 TRP A CH2 
+900 N N   . THR A 111 0.6141 0.4106 0.3506 0.1700  -0.1335 -0.0024 ? ? ? ? ? ? 1966 THR A N   
+901 C CA  . THR A 111 0.7745 0.5557 0.4969 0.2002  -0.1809 0.0040  ? ? ? ? ? ? 1966 THR A CA  
+902 C C   . THR A 111 0.7963 0.5077 0.5076 0.2262  -0.1854 0.0125  ? ? ? ? ? ? 1966 THR A C   
+903 O O   . THR A 111 0.8314 0.5646 0.5891 0.2604  -0.2120 0.0047  ? ? ? ? ? ? 1966 THR A O   
+904 C CB  . THR A 111 0.8654 0.5951 0.5009 0.1857  -0.2059 0.0229  ? ? ? ? ? ? 1966 THR A CB  
+905 O OG1 . THR A 111 0.9338 0.7260 0.5887 0.1634  -0.2144 0.0128  ? ? ? ? ? ? 1966 THR A OG1 
+906 C CG2 . THR A 111 0.9783 0.6988 0.6144 0.2047  -0.2481 0.0362  ? ? ? ? ? ? 1966 THR A CG2 
+907 N N   . ASP A 112 0.8599 0.5261 0.4400 0.2514  0.0300  -0.0040 ? ? ? ? ? ? 1967 ASP A N   
+908 C CA  . ASP A 112 0.9086 0.5111 0.4771 0.2866  0.0345  0.0318  ? ? ? ? ? ? 1967 ASP A CA  
+909 C C   . ASP A 112 0.8628 0.4610 0.5001 0.2906  0.0369  0.0277  ? ? ? ? ? ? 1967 ASP A C   
+910 O O   . ASP A 112 0.9063 0.4738 0.5450 0.3262  0.0298  0.0473  ? ? ? ? ? ? 1967 ASP A O   
+911 C CB  . ASP A 112 0.9629 0.4778 0.4889 0.2765  0.0715  0.0643  ? ? ? ? ? ? 1967 ASP A CB  
+912 C CG  . ASP A 112 1.0945 0.5950 0.5351 0.2767  0.0733  0.0728  ? ? ? ? ? ? 1967 ASP A CG  
+913 O OD1 . ASP A 112 1.0520 0.6041 0.4594 0.2898  0.0390  0.0611  ? ? ? ? ? ? 1967 ASP A OD1 
+914 O OD2 . ASP A 112 1.0768 0.5131 0.4834 0.2611  0.1101  0.0912  ? ? ? ? ? ? 1967 ASP A OD2 
+915 N N   . THR A 113 0.7881 0.4116 0.4783 0.2510  0.0470  0.0026  ? ? ? ? ? ? 1968 THR A N   
+916 C CA  . THR A 113 0.7523 0.3614 0.4972 0.2435  0.0533  -0.0016 ? ? ? ? ? ? 1968 THR A CA  
+917 C C   . THR A 113 0.7321 0.4150 0.5166 0.2569  0.0290  -0.0364 ? ? ? ? ? ? 1968 THR A C   
+918 O O   . THR A 113 0.8527 0.5188 0.6642 0.2772  0.0298  -0.0353 ? ? ? ? ? ? 1968 THR A O   
+919 C CB  . THR A 113 0.7564 0.3480 0.5379 0.1882  0.0740  -0.0069 ? ? ? ? ? ? 1968 THR A CB  
+920 O OG1 . THR A 113 0.7213 0.2767 0.4928 0.1671  0.0942  0.0252  ? ? ? ? ? ? 1968 THR A OG1 
+921 C CG2 . THR A 113 0.6879 0.2779 0.5231 0.1644  0.0753  -0.0096 ? ? ? ? ? ? 1968 THR A CG2 
+922 N N   . PHE A 114 0.8377 0.6014 0.6268 0.2459  0.0096  -0.0682 ? ? ? ? ? ? 1969 PHE A N   
+923 C CA  . PHE A 114 0.8504 0.6915 0.6875 0.2521  -0.0093 -0.1052 ? ? ? ? ? ? 1969 PHE A CA  
+924 C C   . PHE A 114 0.9949 0.9019 0.8218 0.2921  -0.0423 -0.1117 ? ? ? ? ? ? 1969 PHE A C   
+925 O O   . PHE A 114 1.0997 1.0486 0.9703 0.3222  -0.0567 -0.1259 ? ? ? ? ? ? 1969 PHE A O   
+926 C CB  . PHE A 114 0.7676 0.6575 0.6352 0.1956  -0.0062 -0.1422 ? ? ? ? ? ? 1969 PHE A CB  
+927 C CG  . PHE A 114 0.6713 0.5018 0.5569 0.1514  0.0187  -0.1346 ? ? ? ? ? ? 1969 PHE A CG  
+928 C CD1 . PHE A 114 0.7263 0.5269 0.6430 0.1485  0.0302  -0.1373 ? ? ? ? ? ? 1969 PHE A CD1 
+929 C CD2 . PHE A 114 0.6371 0.4390 0.5103 0.1115  0.0299  -0.1237 ? ? ? ? ? ? 1969 PHE A CD2 
+930 C CE1 . PHE A 114 0.6797 0.4232 0.6082 0.1024  0.0483  -0.1265 ? ? ? ? ? ? 1969 PHE A CE1 
+931 C CE2 . PHE A 114 0.6139 0.3633 0.5112 0.0694  0.0469  -0.1117 ? ? ? ? ? ? 1969 PHE A CE2 
+932 C CZ  . PHE A 114 0.6327 0.3528 0.5544 0.0627  0.0540  -0.1117 ? ? ? ? ? ? 1969 PHE A CZ  
+933 N N   . LYS A 115 1.0908 1.0054 0.8625 0.2910  -0.0540 -0.1009 ? ? ? ? ? ? 1970 LYS A N   
+934 C CA  . LYS A 115 1.1633 1.1367 0.9175 0.3230  -0.0907 -0.1015 ? ? ? ? ? ? 1970 LYS A CA  
+935 C C   . LYS A 115 1.2127 1.1336 0.9346 0.3736  -0.1031 -0.0597 ? ? ? ? ? ? 1970 LYS A C   
+936 O O   . LYS A 115 1.2202 1.1268 0.9847 0.4077  -0.1050 -0.0523 ? ? ? ? ? ? 1970 LYS A O   
+937 C CB  . LYS A 115 1.1242 1.1240 0.8221 0.2942  -0.0995 -0.1088 ? ? ? ? ? ? 1970 LYS A CB  
+# 
+loop_
+_pdbx_poly_seq_scheme.asym_id 
+_pdbx_poly_seq_scheme.entity_id 
+_pdbx_poly_seq_scheme.seq_id 
+_pdbx_poly_seq_scheme.mon_id 
+_pdbx_poly_seq_scheme.ndb_seq_num 
+_pdbx_poly_seq_scheme.pdb_seq_num 
+_pdbx_poly_seq_scheme.auth_seq_num 
+_pdbx_poly_seq_scheme.pdb_mon_id 
+_pdbx_poly_seq_scheme.auth_mon_id 
+_pdbx_poly_seq_scheme.pdb_strand_id 
+_pdbx_poly_seq_scheme.pdb_ins_code 
+_pdbx_poly_seq_scheme.hetero 
+A 1 1   SER 1   1856 1856 SER SER A . n 
+A 1 2   MET 2   1857 1857 MET MET A . n 
+A 1 3   SER 3   1858 1858 SER SER A . n 
+A 1 4   VAL 4   1859 1859 VAL VAL A . n 
+A 1 5   LYS 5   1860 1860 LYS LYS A . n 
+A 1 6   LYS 6   1861 1861 LYS LYS A . n 
+A 1 7   PRO 7   1862 1862 PRO PRO A . n 
+A 1 8   LYS 8   1863 1863 LYS LYS A . n 
+A 1 9   ARG 9   1864 1864 ARG ARG A . n 
+A 1 10  ASP 10  1865 1865 ASP ASP A . n 
+A 1 11  ASP 11  1866 1866 ASP ASP A . n 
+A 1 12  SER 12  1867 1867 SER SER A . n 
+A 1 13  LYS 13  1868 1868 LYS LYS A . n 
+A 1 14  ASP 14  1869 1869 ASP ASP A . n 
+A 1 15  LEU 15  1870 1870 LEU LEU A . n 
+A 1 16  ALA 16  1871 1871 ALA ALA A . n 
+A 1 17  LEU 17  1872 1872 LEU LEU A . n 
+A 1 18  CYS 18  1873 1873 CYS CYS A . n 
+A 1 19  SER 19  1874 1874 SER SER A . n 
+A 1 20  MET 20  1875 1875 MET MET A . n 
+A 1 21  ILE 21  1876 1876 ILE ILE A . n 
+A 1 22  LEU 22  1877 1877 LEU LEU A . n 
+A 1 23  THR 23  1878 1878 THR THR A . n 
+A 1 24  GLU 24  1879 1879 GLU GLU A . n 
+A 1 25  MET 25  1880 1880 MET MET A . n 
+A 1 26  GLU 26  1881 1881 GLU GLU A . n 
+A 1 27  THR 27  1882 1882 THR THR A . n 
+A 1 28  HIS 28  1883 1883 HIS HIS A . n 
+A 1 29  GLU 29  1884 1884 GLU GLU A . n 
+A 1 30  ASP 30  1885 1885 ASP ASP A . n 
+A 1 31  ALA 31  1886 1886 ALA ALA A . n 
+A 1 32  TRP 32  1887 1887 TRP TRP A . n 
+A 1 33  PRO 33  1888 1888 PRO PRO A . n 
+A 1 34  PHE 34  1889 1889 PHE PHE A . n 
+A 1 35  LEU 35  1890 1890 LEU LEU A . n 
+A 1 36  LEU 36  1891 1891 LEU LEU A . n 
+A 1 37  PRO 37  1892 1892 PRO PRO A . n 
+A 1 38  VAL 38  1893 1893 VAL VAL A . n 
+A 1 39  ASN 39  1894 1894 ASN ASN A . n 
+A 1 40  LEU 40  1895 1895 LEU LEU A . n 
+A 1 41  LYS 41  1896 1896 LYS LYS A . n 
+A 1 42  LEU 42  1897 1897 LEU LEU A . n 
+A 1 43  VAL 43  1898 1898 VAL VAL A . n 
+A 1 44  PRO 44  1899 1899 PRO PRO A . n 
+A 1 45  GLY 45  1900 1900 GLY GLY A . n 
+A 1 46  TYR 46  1901 1901 TYR TYR A . n 
+A 1 47  LYS 47  1902 1902 LYS LYS A . n 
+A 1 48  LYS 48  1903 1903 LYS LYS A . n 
+A 1 49  VAL 49  1904 1904 VAL VAL A . n 
+A 1 50  ILE 50  1905 1905 ILE ILE A . n 
+A 1 51  LYS 51  1906 1906 LYS LYS A . n 
+A 1 52  LYS 52  1907 1907 LYS LYS A . n 
+A 1 53  PRO 53  1908 1908 PRO PRO A . n 
+A 1 54  MET 54  1909 1909 MET MET A . n 
+A 1 55  ASP 55  1910 1910 ASP ASP A . n 
+A 1 56  PHE 56  1911 1911 PHE PHE A . n 
+A 1 57  SER 57  1912 1912 SER SER A . n 
+A 1 58  THR 58  1913 1913 THR THR A . n 
+A 1 59  ILE 59  1914 1914 ILE ILE A . n 
+A 1 60  ARG 60  1915 1915 ARG ARG A . n 
+A 1 61  GLU 61  1916 1916 GLU GLU A . n 
+A 1 62  LYS 62  1917 1917 LYS LYS A . n 
+A 1 63  LEU 63  1918 1918 LEU LEU A . n 
+A 1 64  SER 64  1919 1919 SER SER A . n 
+A 1 65  SER 65  1920 1920 SER SER A . n 
+A 1 66  GLY 66  1921 1921 GLY GLY A . n 
+A 1 67  GLN 67  1922 1922 GLN GLN A . n 
+A 1 68  TYR 68  1923 1923 TYR TYR A . n 
+A 1 69  PRO 69  1924 1924 PRO PRO A . n 
+A 1 70  ASN 70  1925 1925 ASN ASN A . n 
+A 1 71  LEU 71  1926 1926 LEU LEU A . n 
+A 1 72  GLU 72  1927 1927 GLU GLU A . n 
+A 1 73  THR 73  1928 1928 THR THR A . n 
+A 1 74  PHE 74  1929 1929 PHE PHE A . n 
+A 1 75  ALA 75  1930 1930 ALA ALA A . n 
+A 1 76  LEU 76  1931 1931 LEU LEU A . n 
+A 1 77  ASP 77  1932 1932 ASP ASP A . n 
+A 1 78  VAL 78  1933 1933 VAL VAL A . n 
+A 1 79  ARG 79  1934 1934 ARG ARG A . n 
+A 1 80  LEU 80  1935 1935 LEU LEU A . n 
+A 1 81  VAL 81  1936 1936 VAL VAL A . n 
+A 1 82  PHE 82  1937 1937 PHE PHE A . n 
+A 1 83  ASP 83  1938 1938 ASP ASP A . n 
+A 1 84  ASN 84  1939 1939 ASN ASN A . n 
+A 1 85  CYS 85  1940 1940 CYS CYS A . n 
+A 1 86  GLU 86  1941 1941 GLU GLU A . n 
+A 1 87  THR 87  1942 1942 THR THR A . n 
+A 1 88  PHE 88  1943 1943 PHE PHE A . n 
+A 1 89  ASN 89  1944 1944 ASN ASN A . n 
+A 1 90  GLU 90  1945 1945 GLU GLU A . n 
+A 1 91  ASP 91  1946 1946 ASP ASP A . n 
+A 1 92  ASP 92  1947 1947 ASP ASP A . n 
+A 1 93  SER 93  1948 1948 SER SER A . n 
+A 1 94  ASP 94  1949 1949 ASP ASP A . n 
+A 1 95  ILE 95  1950 1950 ILE ILE A . n 
+A 1 96  GLY 96  1951 1951 GLY GLY A . n 
+A 1 97  ARG 97  1952 1952 ARG ARG A . n 
+A 1 98  ALA 98  1953 1953 ALA ALA A . n 
+A 1 99  GLY 99  1954 1954 GLY GLY A . n 
+A 1 100 HIS 100 1955 1955 HIS HIS A . n 
+A 1 101 ASN 101 1956 1956 ASN ASN A . n 
+A 1 102 MET 102 1957 1957 MET MET A . n 
+A 1 103 ARG 103 1958 1958 ARG ARG A . n 
+A 1 104 LYS 104 1959 1959 LYS LYS A . n 
+A 1 105 TYR 105 1960 1960 TYR TYR A . n 
+A 1 106 PHE 106 1961 1961 PHE PHE A . n 
+A 1 107 GLU 107 1962 1962 GLU GLU A . n 
+A 1 108 LYS 108 1963 1963 LYS LYS A . n 
+A 1 109 LYS 109 1964 1964 LYS LYS A . n 
+A 1 110 TRP 110 1965 1965 TRP TRP A . n 
+A 1 111 THR 111 1966 1966 THR THR A . n 
+A 1 112 ASP 112 1967 1967 ASP ASP A . n 
+A 1 113 THR 113 1968 1968 THR THR A . n 
+A 1 114 PHE 114 1969 1969 PHE PHE A . n 
+A 1 115 LYS 115 1970 1970 LYS LYS A . n 
+A 1 116 VAL 116 1971 ?    ?   ?   A . n 
+A 1 117 SER 117 1972 ?    ?   ?   A . n 
+# 
+loop_
+_pdbx_refine_tls.pdbx_refine_id 
+_pdbx_refine_tls.id 
+_pdbx_refine_tls.details 
+_pdbx_refine_tls.method 
+_pdbx_refine_tls.origin_x 
+_pdbx_refine_tls.origin_y 
+_pdbx_refine_tls.origin_z 
+_pdbx_refine_tls.T[1][1] 
+_pdbx_refine_tls.T[2][2] 
+_pdbx_refine_tls.T[3][3] 
+_pdbx_refine_tls.T[1][2] 
+_pdbx_refine_tls.T[1][3] 
+_pdbx_refine_tls.T[2][3] 
+_pdbx_refine_tls.L[1][1] 
+_pdbx_refine_tls.L[2][2] 
+_pdbx_refine_tls.L[3][3] 
+_pdbx_refine_tls.L[1][2] 
+_pdbx_refine_tls.L[1][3] 
+_pdbx_refine_tls.L[2][3] 
+_pdbx_refine_tls.S[1][1] 
+_pdbx_refine_tls.S[1][2] 
+_pdbx_refine_tls.S[1][3] 
+_pdbx_refine_tls.S[2][1] 
+_pdbx_refine_tls.S[2][2] 
+_pdbx_refine_tls.S[2][3] 
+_pdbx_refine_tls.S[3][1] 
+_pdbx_refine_tls.S[3][2] 
+_pdbx_refine_tls.S[3][3] 
+'X-RAY DIFFRACTION' 1  ? refined 51.7028 17.1821 14.0205 0.5031 0.3420 0.2895 -0.0671 0.0101  0.0176  5.7992 3.5258 6.0477 3.2401  
+2.5199  1.0981  -0.1168 -0.2207 -0.2330 -0.5495 0.0610  -0.3682 0.0226  -0.7649 0.0478  
+'X-RAY DIFFRACTION' 2  ? refined 42.4520 13.1926 21.0656 0.4230 0.6859 0.6532 0.0898  -0.0825 0.3308  4.0626 3.8144 6.1364 -2.3137 
+-4.9969 3.1409  -1.3114 -0.2286 0.6970  0.3171  0.9615  0.6816  -0.3104 -0.3295 0.3944  
+'X-RAY DIFFRACTION' 3  ? refined 30.9297 10.9717 20.1215 0.6035 0.4343 0.6338 0.1338  0.1929  0.0564  4.8720 3.6220 8.1344 3.1681  
+-1.7368 2.2974  -0.5739 -0.1423 -2.0455 -1.0255 -0.4365 -1.5901 1.2374  1.0387  1.0343  
+'X-RAY DIFFRACTION' 4  ? refined 24.9736 15.8473 22.3096 0.5504 0.2498 0.3584 0.0361  -0.0383 -0.0065 7.0249 3.3900 5.0728 -2.8125 
+-3.8763 4.1012  -0.1369 0.1165  -0.6617 0.3502  -0.1947 0.0007  -0.1270 0.1826  0.2831  
+'X-RAY DIFFRACTION' 5  ? refined 19.8248 18.4657 26.3083 0.5076 0.2863 0.3932 0.0095  -0.0044 0.0375  2.1489 2.1690 2.2850 -0.0077 
+-1.3098 1.8074  -0.0188 -0.3145 -1.0586 0.7185  -0.1463 -0.1241 0.3930  -0.1897 0.1294  
+'X-RAY DIFFRACTION' 6  ? refined 16.5283 22.0022 29.2251 0.4324 0.2186 0.3336 -0.0452 0.0328  0.0454  2.4656 2.5873 2.0098 -2.1360 
+-0.4599 1.4935  -0.4931 0.1661  -0.8137 0.1552  -0.0212 -0.0001 1.0938  -0.2369 0.5633  
+'X-RAY DIFFRACTION' 7  ? refined 12.0584 25.3550 35.2106 0.4467 0.3712 0.3756 -0.0106 0.0959  0.0082  4.7862 2.5992 3.6907 3.4538  
+4.1960  2.9932  -0.1064 -0.4934 -0.2901 1.7150  -0.4447 1.3036  0.9397  -0.7725 0.5716  
+'X-RAY DIFFRACTION' 8  ? refined 12.2558 32.3038 28.3473 0.4360 0.2224 0.2301 0.0152  -0.0008 -0.0103 5.3004 2.4000 4.3745 0.1590  
+-1.0980 -3.1474 -0.2325 -0.1494 0.1781  0.1259  0.1722  0.4258  0.3504  -0.1263 0.1180  
+'X-RAY DIFFRACTION' 9  ? refined 11.5957 42.8738 20.2128 0.6552 0.2868 0.5332 0.0442  -0.1285 0.0101  6.0673 3.4729 3.8865 0.1395  
+-4.5955 1.0862  0.7227  0.6985  0.2798  -1.2197 -0.3470 1.8211  -0.5498 -0.5622 -0.3211 
+'X-RAY DIFFRACTION' 10 ? refined 16.3571 46.5450 23.5539 0.6036 0.2413 0.3569 0.0195  -0.0108 -0.0286 6.9735 5.2432 2.7354 3.1230  
+-1.1141 0.6592  -0.1130 0.1813  0.2376  -0.4285 0.0510  0.6625  -0.2049 0.0641  0.0605  
+'X-RAY DIFFRACTION' 11 ? refined 23.6802 41.1211 21.8391 0.5657 0.2720 0.3311 0.0137  0.0586  -0.0140 4.1251 4.0476 5.3170 -4.0621 
+-4.6203 4.6329  0.5135  0.3499  0.8601  -1.4383 0.0666  -1.1686 0.0655  0.8293  -0.6056 
+'X-RAY DIFFRACTION' 12 ? refined 18.4353 27.5606 20.0883 0.3986 0.2077 0.1894 0.0090  -0.0497 0.0046  6.0865 7.5463 9.7191 -1.8657 
+-3.0431 -0.7044 0.1115  0.5094  -0.0441 -0.4900 -0.0858 0.0693  -0.3356 -0.2682 -0.0162 
+'X-RAY DIFFRACTION' 13 ? refined 24.4900 23.9184 14.6960 0.6220 0.3324 0.2481 0.0078  -0.0132 -0.0121 5.1692 4.8504 2.0828 0.9603  
+1.6702  -0.5802 -0.0147 -0.0525 -0.0270 -0.8332 -0.1793 0.0751  0.1942  0.3749  0.1700  
+'X-RAY DIFFRACTION' 14 ? refined 31.2758 23.4917 21.2425 0.4733 0.4321 0.3634 0.0615  -0.0186 -0.0631 2.8833 3.2327 3.2546 -1.1102 
+1.3483  2.1959  -0.4924 -0.2820 -0.2985 1.0556  1.4267  -1.0819 0.1691  0.9400  -0.9175 
+'X-RAY DIFFRACTION' 15 ? refined 26.8945 27.5460 23.7543 0.4822 0.2508 0.1870 -0.0216 0.0094  -0.0124 8.0179 7.1898 8.3202 -5.8089 
+-6.6000 3.1255  -0.1503 0.0185  0.1006  -0.5472 -0.0187 -0.1842 -0.5116 0.1461  0.1819  
+'X-RAY DIFFRACTION' 16 ? refined 22.7495 36.5039 30.4054 0.4434 0.2548 0.2240 -0.0050 -0.0107 0.0143  2.6955 9.8561 3.7702 -3.5102 
+-2.0328 4.8267  0.1136  -0.0208 0.1876  0.2430  -0.0417 -0.2487 -0.0826 0.1457  -0.0535 
+'X-RAY DIFFRACTION' 17 ? refined 17.2344 37.4881 39.5019 0.6457 0.2743 0.2348 0.0444  -0.0230 -0.0001 5.3185 6.4588 5.7668 1.0649  
+-2.5329 1.0621  -0.1798 -0.3139 0.0723  1.0978  0.2017  0.2587  -0.1173 0.2469  -0.1121 
+'X-RAY DIFFRACTION' 18 ? refined 22.2045 26.2103 34.8182 0.5133 0.2435 0.2278 0.0105  -0.0345 0.0298  9.3593 8.2893 4.5231 0.5053  
+-4.8951 1.0187  -0.2980 -0.3294 -0.3719 0.9189  0.0026  0.2408  0.3713  0.0019  0.3063  
+'X-RAY DIFFRACTION' 19 ? refined 27.2243 20.7729 33.5863 0.5648 0.3303 0.2710 0.1217  -0.0692 0.0099  7.3775 6.7995 4.6886 0.9350  
+1.6224  -4.7865 0.1544  -0.1645 -0.6502 1.8910  0.2371  -0.4276 0.7722  1.0419  -0.1655 
+'X-RAY DIFFRACTION' 20 ? refined 29.3472 15.6284 31.7260 0.7479 0.4722 0.4878 0.2564  0.0149  -0.0419 2.6405 5.7804 2.6468 3.8115  
+0.0362  -0.6806 -0.3472 -0.9397 -0.9159 1.2543  0.7286  -0.3107 0.8458  1.6357  -0.4624 
+# 
+loop_
+_pdbx_refine_tls_group.pdbx_refine_id 
+_pdbx_refine_tls_group.id 
+_pdbx_refine_tls_group.refine_tls_id 
+_pdbx_refine_tls_group.beg_auth_asym_id 
+_pdbx_refine_tls_group.beg_auth_seq_id 
+_pdbx_refine_tls_group.beg_label_asym_id 
+_pdbx_refine_tls_group.beg_label_seq_id 
+_pdbx_refine_tls_group.end_auth_asym_id 
+_pdbx_refine_tls_group.end_auth_seq_id 
+_pdbx_refine_tls_group.end_label_asym_id 
+_pdbx_refine_tls_group.end_label_seq_id 
+_pdbx_refine_tls_group.selection 
+_pdbx_refine_tls_group.selection_details 
+'X-RAY DIFFRACTION' 1  1  ? ? ? ? ? ? ? ? ? '(CHAIN A AND RESID 1856:1859)' 
+'X-RAY DIFFRACTION' 2  2  ? ? ? ? ? ? ? ? ? '(CHAIN A AND RESID 1860:1864)' 
+'X-RAY DIFFRACTION' 3  3  ? ? ? ? ? ? ? ? ? '(CHAIN A AND RESID 1865:1868)' 
+'X-RAY DIFFRACTION' 4  4  ? ? ? ? ? ? ? ? ? '(CHAIN A AND RESID 1869:1873)' 
+'X-RAY DIFFRACTION' 5  5  ? ? ? ? ? ? ? ? ? '(CHAIN A AND RESID 1874:1877)' 
+'X-RAY DIFFRACTION' 6  6  ? ? ? ? ? ? ? ? ? '(CHAIN A AND RESID 1878:1881)' 
+'X-RAY DIFFRACTION' 7  7  ? ? ? ? ? ? ? ? ? '(CHAIN A AND RESID 1882:1885)' 
+'X-RAY DIFFRACTION' 8  8  ? ? ? ? ? ? ? ? ? '(CHAIN A AND RESID 1886:1892)' 
+'X-RAY DIFFRACTION' 9  9  ? ? ? ? ? ? ? ? ? '(CHAIN A AND RESID 1893:1896)' 
+'X-RAY DIFFRACTION' 10 10 ? ? ? ? ? ? ? ? ? '(CHAIN A AND RESID 1897:1904)' 
+'X-RAY DIFFRACTION' 11 11 ? ? ? ? ? ? ? ? ? '(CHAIN A AND RESID 1905:1908)' 
+'X-RAY DIFFRACTION' 12 12 ? ? ? ? ? ? ? ? ? '(CHAIN A AND RESID 1909:1918)' 
+'X-RAY DIFFRACTION' 13 13 ? ? ? ? ? ? ? ? ? '(CHAIN A AND RESID 1919:1924)' 
+'X-RAY DIFFRACTION' 14 14 ? ? ? ? ? ? ? ? ? '(CHAIN A AND RESID 1925:1928)' 
+'X-RAY DIFFRACTION' 15 15 ? ? ? ? ? ? ? ? ? '(CHAIN A AND RESID 1929:1932)' 
+'X-RAY DIFFRACTION' 16 16 ? ? ? ? ? ? ? ? ? '(CHAIN A AND RESID 1933:1944)' 
+'X-RAY DIFFRACTION' 17 17 ? ? ? ? ? ? ? ? ? '(CHAIN A AND RESID 1945:1956)' 
+'X-RAY DIFFRACTION' 18 18 ? ? ? ? ? ? ? ? ? '(CHAIN A AND RESID 1957:1961)' 
+'X-RAY DIFFRACTION' 19 19 ? ? ? ? ? ? ? ? ? '(CHAIN A AND RESID 1962:1966)' 
+'X-RAY DIFFRACTION' 20 20 ? ? ? ? ? ? ? ? ? '(CHAIN A AND RESID 1967:1970)' 
+# 
+_software.name             PHENIX 
+_software.classification   refinement 
+_software.version          '(PHENIX.REFINE)' 
+_software.citation_id      ? 
+_software.pdbx_ordinal     1 
+# 
+loop_
+_pdbx_unobs_or_zero_occ_residues.id 
+_pdbx_unobs_or_zero_occ_residues.polymer_flag 
+_pdbx_unobs_or_zero_occ_residues.occupancy_flag 
+_pdbx_unobs_or_zero_occ_residues.PDB_model_num 
+_pdbx_unobs_or_zero_occ_residues.auth_asym_id 
+_pdbx_unobs_or_zero_occ_residues.auth_comp_id 
+_pdbx_unobs_or_zero_occ_residues.auth_seq_id 
+_pdbx_unobs_or_zero_occ_residues.PDB_ins_code 
+1 Y 1 1 A VAL 1971 ? 
+2 Y 1 1 A SER 1972 ? 
+# 
+loop_
+_pdbx_unobs_or_zero_occ_atoms.id 
+_pdbx_unobs_or_zero_occ_atoms.polymer_flag 
+_pdbx_unobs_or_zero_occ_atoms.occupancy_flag 
+_pdbx_unobs_or_zero_occ_atoms.PDB_model_num 
+_pdbx_unobs_or_zero_occ_atoms.auth_asym_id 
+_pdbx_unobs_or_zero_occ_atoms.auth_comp_id 
+_pdbx_unobs_or_zero_occ_atoms.auth_seq_id 
+_pdbx_unobs_or_zero_occ_atoms.PDB_ins_code 
+_pdbx_unobs_or_zero_occ_atoms.auth_atom_id 
+_pdbx_unobs_or_zero_occ_atoms.label_alt_id 
+1  Y 1 1 A LYS 1863 ? CG  ? 
+2  Y 1 1 A LYS 1863 ? CD  ? 
+3  Y 1 1 A LYS 1863 ? CE  ? 
+4  Y 1 1 A LYS 1863 ? NZ  ? 
+5  Y 1 1 A LYS 1868 ? CE  ? 
+6  Y 1 1 A LYS 1868 ? NZ  ? 
+7  Y 1 1 A GLU 1927 ? CD  ? 
+8  Y 1 1 A GLU 1927 ? OE1 ? 
+9  Y 1 1 A GLU 1927 ? OE2 ? 
+10 Y 1 1 A LYS 1959 ? CE  ? 
+11 Y 1 1 A LYS 1959 ? NZ  ? 
+12 Y 1 1 A LYS 1964 ? NZ  ? 
+13 Y 1 1 A LYS 1970 ? CG  ? 
+14 Y 1 1 A LYS 1970 ? CD  ? 
+15 Y 1 1 A LYS 1970 ? CE  ? 
+16 Y 1 1 A LYS 1970 ? NZ  ? 
+# 
+_pdbx_struct_assembly.id                   1 
+_pdbx_struct_assembly.details              author_and_software_defined_assembly 
+_pdbx_struct_assembly.method_details       PISA 
+_pdbx_struct_assembly.oligomeric_details   dimeric 
+_pdbx_struct_assembly.oligomeric_count     2 
+# 
+_pdbx_struct_assembly_gen.assembly_id       1 
+_pdbx_struct_assembly_gen.oper_expression   1,2 
+_pdbx_struct_assembly_gen.asym_id_list      A,B,C,D,E,F 
+# 
+loop_
+_pdbx_struct_assembly_prop.biol_id 
+_pdbx_struct_assembly_prop.type 
+_pdbx_struct_assembly_prop.value 
+_pdbx_struct_assembly_prop.details 
+1 'ABSA (A^2)' 2050  ? 
+1 'SSA (A^2)'  14260 ? 
+1 MORE         -16.8 ? 
+# 
+loop_
+_pdbx_struct_oper_list.id 
+_pdbx_struct_oper_list.type 
+_pdbx_struct_oper_list.name 
+_pdbx_struct_oper_list.symmetry_operation 
+_pdbx_struct_oper_list.matrix[1][1] 
+_pdbx_struct_oper_list.matrix[1][2] 
+_pdbx_struct_oper_list.matrix[1][3] 
+_pdbx_struct_oper_list.vector[1] 
+_pdbx_struct_oper_list.matrix[2][1] 
+_pdbx_struct_oper_list.matrix[2][2] 
+_pdbx_struct_oper_list.matrix[2][3] 
+_pdbx_struct_oper_list.vector[2] 
+_pdbx_struct_oper_list.matrix[3][1] 
+_pdbx_struct_oper_list.matrix[3][2] 
+_pdbx_struct_oper_list.matrix[3][3] 
+_pdbx_struct_oper_list.vector[3] 
+1 'identity operation'         1_555 x,y,z         1.0000000000  0.0000000000 0.0000000000 0.0000000000  0.0000000000 1.0000000000 
+0.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000  0.0000000000  
+2 'crystal symmetry operation' 3_655 -x+1,y,-z+1/2 -1.0000000000 0.0000000000 0.0000000000 80.3700000000 0.0000000000 1.0000000000 
+0.0000000000 0.0000000000 0.0000000000 0.0000000000 -1.0000000000 28.8350000000 
+# 
+_pdbx_version.entry_id        4CUP 
+_pdbx_version.revision_date   2014-04-02 
+_pdbx_version.major_version   4 
+_pdbx_version.minor_version   0000 
+_pdbx_version.revision_type   'Initial release' 
+_pdbx_version.details         'Entry released' 
+# 
+loop_
+_pdbx_nonpoly_scheme.asym_id 
+_pdbx_nonpoly_scheme.entity_id 
+_pdbx_nonpoly_scheme.mon_id 
+_pdbx_nonpoly_scheme.ndb_seq_num 
+_pdbx_nonpoly_scheme.pdb_seq_num 
+_pdbx_nonpoly_scheme.auth_seq_num 
+_pdbx_nonpoly_scheme.pdb_mon_id 
+_pdbx_nonpoly_scheme.auth_mon_id 
+_pdbx_nonpoly_scheme.pdb_strand_id 
+_pdbx_nonpoly_scheme.pdb_ins_code 
+B 2 ZYB 1   2971 2971 ZYB ZYB A . 
+C 3 MOH 1   2972 2972 MOH MOH A . 
+D 3 MOH 1   2973 2973 MOH MOH A . 
+E 3 MOH 1   2974 2974 MOH MOH A . 
+F 4 HOH 1   2001 2001 HOH HOH A . 
+F 4 HOH 2   2002 2002 HOH HOH A . 
+F 4 HOH 3   2003 2003 HOH HOH A . 
+F 4 HOH 4   2004 2004 HOH HOH A . 
+F 4 HOH 5   2005 2005 HOH HOH A . 
+F 4 HOH 6   2006 2006 HOH HOH A . 
+F 4 HOH 7   2007 2007 HOH HOH A . 
+F 4 HOH 8   2008 2008 HOH HOH A . 
+F 4 HOH 9   2009 2009 HOH HOH A . 
+F 4 HOH 10  2010 2010 HOH HOH A . 
+F 4 HOH 11  2011 2011 HOH HOH A . 
+F 4 HOH 12  2012 2012 HOH HOH A . 
+F 4 HOH 13  2013 2013 HOH HOH A . 
+F 4 HOH 14  2014 2014 HOH HOH A . 
+F 4 HOH 15  2015 2015 HOH HOH A . 
+F 4 HOH 16  2016 2016 HOH HOH A . 
+F 4 HOH 17  2017 2017 HOH HOH A . 
+F 4 HOH 18  2018 2018 HOH HOH A . 
+F 4 HOH 19  2019 2019 HOH HOH A . 
+F 4 HOH 20  2020 2020 HOH HOH A . 
+F 4 HOH 21  2021 2021 HOH HOH A . 
+F 4 HOH 22  2022 2022 HOH HOH A . 
+F 4 HOH 23  2023 2023 HOH HOH A . 
+F 4 HOH 24  2024 2024 HOH HOH A . 
+F 4 HOH 25  2025 2025 HOH HOH A . 
+F 4 HOH 26  2026 2026 HOH HOH A . 
+F 4 HOH 27  2027 2027 HOH HOH A . 
+F 4 HOH 28  2028 2028 HOH HOH A . 
+F 4 HOH 29  2029 2029 HOH HOH A . 
+F 4 HOH 30  2030 2030 HOH HOH A . 
+F 4 HOH 31  2031 2031 HOH HOH A . 
+F 4 HOH 32  2032 2032 HOH HOH A . 
+F 4 HOH 33  2033 2033 HOH HOH A . 
+F 4 HOH 34  2034 2034 HOH HOH A . 
+F 4 HOH 35  2035 2035 HOH HOH A . 
+F 4 HOH 36  2036 2036 HOH HOH A . 
+F 4 HOH 37  2037 2037 HOH HOH A . 
+F 4 HOH 38  2038 2038 HOH HOH A . 
+F 4 HOH 39  2039 2039 HOH HOH A . 
+F 4 HOH 40  2040 2040 HOH HOH A . 
+F 4 HOH 41  2041 2041 HOH HOH A . 
+F 4 HOH 42  2042 2042 HOH HOH A . 
+F 4 HOH 43  2043 2043 HOH HOH A . 
+F 4 HOH 44  2044 2044 HOH HOH A . 
+F 4 HOH 45  2045 2045 HOH HOH A . 
+F 4 HOH 46  2046 2046 HOH HOH A . 
+F 4 HOH 47  2047 2047 HOH HOH A . 
+F 4 HOH 48  2048 2048 HOH HOH A . 
+F 4 HOH 49  2049 2049 HOH HOH A . 
+F 4 HOH 50  2050 2050 HOH HOH A . 
+F 4 HOH 51  2051 2051 HOH HOH A . 
+F 4 HOH 52  2052 2052 HOH HOH A . 
+F 4 HOH 53  2053 2053 HOH HOH A . 
+F 4 HOH 54  2054 2054 HOH HOH A . 
+F 4 HOH 55  2055 2055 HOH HOH A . 
+F 4 HOH 56  2056 2056 HOH HOH A . 
+F 4 HOH 57  2057 2057 HOH HOH A . 
+F 4 HOH 58  2058 2058 HOH HOH A . 
+F 4 HOH 59  2059 2059 HOH HOH A . 
+F 4 HOH 60  2060 2060 HOH HOH A . 
+F 4 HOH 61  2061 2061 HOH HOH A . 
+F 4 HOH 62  2062 2062 HOH HOH A . 
+F 4 HOH 63  2063 2063 HOH HOH A . 
+F 4 HOH 64  2064 2064 HOH HOH A . 
+F 4 HOH 65  2065 2065 HOH HOH A . 
+F 4 HOH 66  2066 2066 HOH HOH A . 
+F 4 HOH 67  2067 2067 HOH HOH A . 
+F 4 HOH 68  2068 2068 HOH HOH A . 
+F 4 HOH 69  2069 2069 HOH HOH A . 
+F 4 HOH 70  2070 2070 HOH HOH A . 
+F 4 HOH 71  2071 2071 HOH HOH A . 
+F 4 HOH 72  2072 2072 HOH HOH A . 
+F 4 HOH 73  2073 2073 HOH HOH A . 
+F 4 HOH 74  2074 2074 HOH HOH A . 
+F 4 HOH 75  2075 2075 HOH HOH A . 
+F 4 HOH 76  2076 2076 HOH HOH A . 
+F 4 HOH 77  2077 2077 HOH HOH A . 
+F 4 HOH 78  2078 2078 HOH HOH A . 
+F 4 HOH 79  2079 2079 HOH HOH A . 
+F 4 HOH 80  2080 2080 HOH HOH A . 
+F 4 HOH 81  2081 2081 HOH HOH A . 
+F 4 HOH 82  2082 2082 HOH HOH A . 
+F 4 HOH 83  2083 2083 HOH HOH A . 
+F 4 HOH 84  2084 2084 HOH HOH A . 
+F 4 HOH 85  2085 2085 HOH HOH A . 
+F 4 HOH 86  2086 2086 HOH HOH A . 
+F 4 HOH 87  2087 2087 HOH HOH A . 
+F 4 HOH 88  2088 2088 HOH HOH A . 
+F 4 HOH 89  2089 2089 HOH HOH A . 
+F 4 HOH 90  2090 2090 HOH HOH A . 
+F 4 HOH 91  2091 2091 HOH HOH A . 
+F 4 HOH 92  2092 2092 HOH HOH A . 
+F 4 HOH 93  2093 2093 HOH HOH A . 
+F 4 HOH 94  2094 2094 HOH HOH A . 
+F 4 HOH 95  2095 2095 HOH HOH A . 
+F 4 HOH 96  2096 2096 HOH HOH A . 
+F 4 HOH 97  2097 2097 HOH HOH A . 
+F 4 HOH 98  2098 2098 HOH HOH A . 
+F 4 HOH 99  2099 2099 HOH HOH A . 
+F 4 HOH 100 2100 2100 HOH HOH A . 
+F 4 HOH 101 2101 2101 HOH HOH A . 
+F 4 HOH 102 2102 2102 HOH HOH A . 
+F 4 HOH 103 2103 2103 HOH HOH A . 
+F 4 HOH 104 2104 2104 HOH HOH A . 
+F 4 HOH 105 2105 2105 HOH HOH A . 
+F 4 HOH 106 2106 2106 HOH HOH A . 
+F 4 HOH 107 2107 2107 HOH HOH A . 
+F 4 HOH 108 2108 2108 HOH HOH A . 
+F 4 HOH 109 2109 2109 HOH HOH A . 
+F 4 HOH 110 2110 2110 HOH HOH A . 
+F 4 HOH 111 2111 2111 HOH HOH A . 
+F 4 HOH 112 2112 2112 HOH HOH A . 
+F 4 HOH 113 2113 2113 HOH HOH A . 
+F 4 HOH 114 2114 2114 HOH HOH A . 
+F 4 HOH 115 2115 2115 HOH HOH A . 
+F 4 HOH 116 2116 2116 HOH HOH A . 
+F 4 HOH 117 2117 2117 HOH HOH A . 
+F 4 HOH 118 2118 2118 HOH HOH A . 
+F 4 HOH 119 2119 2119 HOH HOH A . 
+F 4 HOH 120 2120 2120 HOH HOH A . 
+F 4 HOH 121 2121 2121 HOH HOH A . 
+F 4 HOH 122 2122 2122 HOH HOH A . 
+F 4 HOH 123 2123 2123 HOH HOH A . 
+F 4 HOH 124 2124 2124 HOH HOH A . 
+F 4 HOH 125 2125 2125 HOH HOH A . 
+F 4 HOH 126 2126 2126 HOH HOH A . 
+F 4 HOH 127 2127 2127 HOH HOH A . 
+F 4 HOH 128 2128 2128 HOH HOH A . 
+F 4 HOH 129 2129 2129 HOH HOH A . 
+F 4 HOH 130 2130 2130 HOH HOH A . 
+F 4 HOH 131 2131 2131 HOH HOH A . 
+F 4 HOH 132 2132 2132 HOH HOH A . 
+F 4 HOH 133 2133 2133 HOH HOH A . 
+F 4 HOH 134 2134 2134 HOH HOH A . 
+F 4 HOH 135 2135 2135 HOH HOH A . 
+F 4 HOH 136 2136 2136 HOH HOH A . 
+F 4 HOH 137 2137 2137 HOH HOH A . 
+F 4 HOH 138 2138 2138 HOH HOH A . 
+F 4 HOH 139 2139 2139 HOH HOH A . 
+F 4 HOH 140 2140 2140 HOH HOH A . 
+F 4 HOH 141 2141 2141 HOH HOH A . 
+F 4 HOH 142 2142 2142 HOH HOH A . 
+F 4 HOH 143 2143 2143 HOH HOH A . 
+F 4 HOH 144 2144 2144 HOH HOH A . 
+F 4 HOH 145 2145 2145 HOH HOH A . 
+F 4 HOH 146 2146 2146 HOH HOH A . 
+# 
+loop_
+_pdbx_validate_close_contact.id 
+_pdbx_validate_close_contact.PDB_model_num 
+_pdbx_validate_close_contact.auth_atom_id_1 
+_pdbx_validate_close_contact.auth_asym_id_1 
+_pdbx_validate_close_contact.auth_comp_id_1 
+_pdbx_validate_close_contact.auth_seq_id_1 
+_pdbx_validate_close_contact.PDB_ins_code_1 
+_pdbx_validate_close_contact.label_alt_id_1 
+_pdbx_validate_close_contact.auth_atom_id_2 
+_pdbx_validate_close_contact.auth_asym_id_2 
+_pdbx_validate_close_contact.auth_comp_id_2 
+_pdbx_validate_close_contact.auth_seq_id_2 
+_pdbx_validate_close_contact.PDB_ins_code_2 
+_pdbx_validate_close_contact.label_alt_id_2 
+_pdbx_validate_close_contact.dist 
+1 1 O A HOH 2025 ? ? O A HOH 2026 ? ? 2.16 
+2 1 O A HOH 2021 ? ? O A HOH 2025 ? ? 2.17 
+3 1 O A HOH 2031 ? ? O A HOH 2137 ? ? 2.18 
+# 
+loop_
+_pdbx_entity_nonpoly.entity_id 
+_pdbx_entity_nonpoly.name 
+_pdbx_entity_nonpoly.comp_id 
+2 4-FLUOROBENZAMIDOXIME ZYB 
+3 METHANOL              MOH 
+4 water                 HOH 
+# 
diff --git a/Tests/PDB/4CUP.mmtf b/Tests/PDB/4CUP.mmtf
new file mode 100644
index 0000000..dae784e
Binary files /dev/null and b/Tests/PDB/4CUP.mmtf differ
diff --git a/Tests/PDB/4zhl.cif b/Tests/PDB/4ZHL.cif
similarity index 100%
rename from Tests/PDB/4zhl.cif
rename to Tests/PDB/4ZHL.cif
diff --git a/Tests/PDB/4ZHL.mmtf b/Tests/PDB/4ZHL.mmtf
new file mode 100644
index 0000000..1453e9b
Binary files /dev/null and b/Tests/PDB/4ZHL.mmtf differ
diff --git a/Tests/PDB/Miller_RASA.txt b/Tests/PDB/Miller_RASA.txt
new file mode 100644
index 0000000..c3eb2e9
--- /dev/null
+++ b/Tests/PDB/Miller_RASA.txt
@@ -0,0 +1,130 @@
+0.6666666666666666
+0.6125
+0.29357798165137616
+0.46788990825688076
+0.34513274336283184
+0.41530054644808745
+0.17218543046357615
+0.55625
+0.5294117647058824
+0.3442622950819672
+0.8924050632911392
+0.5118483412322274
+0.35294117647058826
+0.504424778761062
+0.8791208791208791
+0.42857142857142855
+0.21176470588235294
+0.42777777777777776
+0.5343137254901961
+0.79375
+0.3176470588235294
+0.6235294117647059
+0.475
+0.875
+0.5879120879120879
+0.9734513274336283
+0.5555555555555556
+0.28125
+0.04128440366972477
+0.16055045871559634
+0.05309734513274336
+0.2185792349726776
+0.0
+0.3125
+0.0
+0.2540983606557377
+0.34810126582278483
+0.009478672985781991
+0.011764705882352941
+0.24778761061946902
+0.510989010989011
+0.0
+0.29411764705882354
+0.03888888888888889
+0.5196078431372549
+0.05
+0.2235294117647059
+0.058823529411764705
+0.1625
+0.075
+0.34065934065934067
+0.5752212389380531
+0.5
+0.275
+0.05045871559633028
+0.23853211009174313
+0.04424778761061947
+0.20218579234972678
+0.006622516556291391
+0.21875
+0.0
+0.38524590163934425
+0.46835443037974683
+0.014218009478672985
+0.08235294117647059
+0.26548672566371684
+0.521978021978022
+0.0
+0.32941176470588235
+0.05
+0.46078431372549017
+0.03125
+0.2235294117647059
+0.0
+0.2125
+0.08125
+0.3791208791208791
+0.5752212389380531
+0.2833333333333333
+0.3375
+0.045871559633027525
+0.19724770642201836
+0.04424778761061947
+0.23497267759562843
+0.013245033112582781
+0.24375
+0.0
+0.3770491803278688
+0.3987341772151899
+0.004739336492890996
+0.09411764705882353
+0.23893805309734514
+0.489010989010989
+0.0
+0.3058823529411765
+0.03888888888888889
+0.4166666666666667
+0.04375
+0.2
+0.0
+0.26875
+0.14375
+0.4230769230769231
+0.6283185840707964
+0.9
+0.84375
+0.42660550458715596
+0.5275229357798165
+0.26548672566371684
+0.6065573770491803
+0.41721854304635764
+0.79375
+0.23529411764705882
+0.8114754098360656
+0.8291139240506329
+0.14691943127962084
+0.12941176470588237
+0.5575221238938053
+0.9230769230769231
+0.33516483516483514
+0.6352941176470588
+0.16666666666666666
+0.7450980392156863
+0.0875
+0.6588235294117647
+0.011764705882352941
+0.5625
+0.21875
+0.7582417582417582
+0.7876106194690266
diff --git a/Tests/PDB/Sander_RASA.txt b/Tests/PDB/Sander_RASA.txt
new file mode 100644
index 0000000..1adf0e7
--- /dev/null
+++ b/Tests/PDB/Sander_RASA.txt
@@ -0,0 +1,130 @@
+0.7317073170731707
+0.6901408450704225
+0.3248730964467005
+0.5177664974619289
+0.36792452830188677
+0.3917525773195876
+0.15950920245398773
+0.6267605633802817
+0.5357142857142857
+0.3230769230769231
+0.8980891719745223
+0.526829268292683
+0.35714285714285715
+0.5377358490566038
+0.9467455621301775
+0.46153846153846156
+0.21428571428571427
+0.4695121951219512
+0.5797872340425532
+0.8943661971830986
+0.32142857142857145
+0.6309523809523809
+0.5352112676056338
+0.9859154929577465
+0.6331360946745562
+1.0
+0.6097560975609756
+0.31690140845070425
+0.04568527918781726
+0.17766497461928935
+0.05660377358490566
+0.20618556701030927
+0.0
+0.352112676056338
+0.0
+0.23846153846153847
+0.3503184713375796
+0.00975609756097561
+0.011904761904761904
+0.2641509433962264
+0.5502958579881657
+0.0
+0.2976190476190476
+0.042682926829268296
+0.5638297872340425
+0.056338028169014086
+0.2261904761904762
+0.05952380952380952
+0.18309859154929578
+0.08450704225352113
+0.3668639053254438
+0.6132075471698113
+0.5487804878048781
+0.30985915492957744
+0.05583756345177665
+0.2639593908629442
+0.04716981132075472
+0.19072164948453607
+0.006134969325153374
+0.24647887323943662
+0.0
+0.36153846153846153
+0.4713375796178344
+0.014634146341463415
+0.08333333333333333
+0.2830188679245283
+0.5621301775147929
+0.0
+0.3333333333333333
+0.054878048780487805
+0.5
+0.035211267605633804
+0.2261904761904762
+0.0
+0.23943661971830985
+0.09154929577464789
+0.40828402366863903
+0.6132075471698113
+0.31097560975609756
+0.38028169014084506
+0.050761421319796954
+0.2182741116751269
+0.04716981132075472
+0.22164948453608246
+0.012269938650306749
+0.2746478873239437
+0.0
+0.35384615384615387
+0.4012738853503185
+0.004878048780487805
+0.09523809523809523
+0.25471698113207547
+0.5266272189349113
+0.0
+0.30952380952380953
+0.042682926829268296
+0.4521276595744681
+0.04929577464788732
+0.20238095238095238
+0.0
+0.3028169014084507
+0.1619718309859155
+0.4556213017751479
+0.6698113207547169
+0.9878048780487805
+0.9507042253521126
+0.4720812182741117
+0.583756345177665
+0.2830188679245283
+0.5721649484536082
+0.38650306748466257
+0.8943661971830986
+0.23809523809523808
+0.7615384615384615
+0.8343949044585988
+0.15121951219512195
+0.13095238095238096
+0.5943396226415094
+0.9940828402366864
+0.3609467455621302
+0.6428571428571429
+0.18292682926829268
+0.8085106382978723
+0.09859154929577464
+0.6666666666666666
+0.011904761904761904
+0.6338028169014085
+0.24647887323943662
+0.8165680473372781
+0.839622641509434
diff --git a/Tests/PDB/Wilke_RASA.txt b/Tests/PDB/Wilke_RASA.txt
new file mode 100644
index 0000000..5699507
--- /dev/null
+++ b/Tests/PDB/Wilke_RASA.txt
@@ -0,0 +1,130 @@
+0.5970149253731343
+0.5632183908045977
+0.26666666666666666
+0.425
+0.3023255813953488
+0.34080717488789236
+0.13471502590673576
+0.5114942528735632
+0.4326923076923077
+0.2709677419354839
+0.7230769230769231
+0.4576271186440678
+0.28846153846153844
+0.4418604651162791
+0.8121827411167513
+0.39593908629441626
+0.17307692307692307
+0.38308457711442784
+0.48660714285714285
+0.7298850574712644
+0.25961538461538464
+0.5096153846153846
+0.4367816091954023
+0.8045977011494253
+0.5431472081218274
+0.8527131782945736
+0.4975124378109453
+0.25862068965517243
+0.0375
+0.14583333333333334
+0.046511627906976744
+0.17937219730941703
+0.0
+0.28735632183908044
+0.0
+0.2
+0.28205128205128205
+0.00847457627118644
+0.009615384615384616
+0.21705426356589147
+0.4720812182741117
+0.0
+0.2403846153846154
+0.03482587064676617
+0.4732142857142857
+0.04597701149425287
+0.18269230769230768
+0.04807692307692308
+0.14942528735632185
+0.06896551724137931
+0.3147208121827411
+0.5038759689922481
+0.44776119402985076
+0.25287356321839083
+0.04583333333333333
+0.21666666666666667
+0.03875968992248062
+0.16591928251121077
+0.0051813471502590676
+0.20114942528735633
+0.0
+0.3032258064516129
+0.37948717948717947
+0.012711864406779662
+0.0673076923076923
+0.23255813953488372
+0.48223350253807107
+0.0
+0.2692307692307692
+0.04477611940298507
+0.41964285714285715
+0.028735632183908046
+0.18269230769230768
+0.0
+0.19540229885057472
+0.07471264367816093
+0.350253807106599
+0.5038759689922481
+0.2537313432835821
+0.3103448275862069
+0.041666666666666664
+0.17916666666666667
+0.03875968992248062
+0.19282511210762332
+0.010362694300518135
+0.22413793103448276
+0.0
+0.2967741935483871
+0.3230769230769231
+0.00423728813559322
+0.07692307692307693
+0.20930232558139536
+0.4517766497461929
+0.0
+0.25
+0.03482587064676617
+0.3794642857142857
+0.040229885057471264
+0.16346153846153846
+0.0
+0.2471264367816092
+0.13218390804597702
+0.39086294416243655
+0.5503875968992248
+0.8059701492537313
+0.7758620689655172
+0.3875
+0.4791666666666667
+0.23255813953488372
+0.4977578475336323
+0.32642487046632124
+0.7298850574712644
+0.19230769230769232
+0.6387096774193548
+0.6717948717948717
+0.13135593220338984
+0.10576923076923077
+0.4883720930232558
+0.8527918781725888
+0.3096446700507614
+0.5192307692307693
+0.14925373134328357
+0.6785714285714286
+0.08045977011494253
+0.5384615384615384
+0.009615384615384616
+0.5172413793103449
+0.20114942528735633
+0.700507614213198
+0.689922480620155
diff --git a/Tests/PDB/dssp_xtra_Sander.txt b/Tests/PDB/dssp_xtra_Sander.txt
new file mode 100644
index 0000000..2c3b348
--- /dev/null
+++ b/Tests/PDB/dssp_xtra_Sander.txt
@@ -0,0 +1,130 @@
+1	120	0.7317073170731707	0.0	0	0.0	0	-0.3	2	-0.3	28	360.0	65.7	-
+2	98	0.6901408450704225	-1.4	26	-0.0	2	-2.9	28	-0.5	2	-105.3	155.5	E
+3	64	0.3248730964467005	-0.3	-2	-0.2	26	-0.8	2	-0.2	28	-127.7	112.4	E
+4	102	0.5177664974619289	-3.7	26	-0.5	-2	-3.0	28	-0.5	2	-108.4	77.2	E
+5	39	0.36792452830188677	-0.8	-2	-0.2	26	-0.3	2	-0.2	28	-104.3	128.7	E
+6	76	0.3917525773195876	-2.3	26	-0.5	-2	-1.9	28	-0.4	2	-158.0	152.3	E
+7	26	0.15950920245398773	-0.3	-2	-0.2	26	-0.5	2	-0.2	28	-132.0	102.5	E
+8	89	0.6267605633802817	-1.7	26	-0.4	-2	-2.4	28	-0.5	2	-80.1	124.2	E
+9	45	0.5357142857142857	-0.5	-2	-0.1	26	-0.9	2	-0.2	28	-122.8	106.3	E
+10	42	0.3230769230769231	-2.3	26	-0.5	-2	-2.0	28	-0.1	55	-98.5	99.4	E
+11	141	0.8980891719745223	-0.9	-2	-0.2	27	-1.3	28	-0.5	27	63.2	163.9	S
+12	108	0.526829268292683	-0.3	26	-0.2	27	-1.0	27	-0.8	28	60.3	113.4	-
+13	30	0.35714285714285715	-0.3	26	-0.1	25	-0.2	30	-0.1	27	-128.1	-50.3	-
+14	57	0.5377358490566038	-0.1	26	-0.1	1	-0.9	2	-0.1	28	42.6	-146.8	S
+15	160	0.9467455621301775	-0.7	26	-0.0	2	-2.4	28	-0.4	2	-76.5	106.0	E
+16	78	0.46153846153846156	-0.9	-2	-0.2	26	-0.5	2	-0.2	28	-129.7	142.6	E
+17	18	0.21428571428571427	-2.3	26	-0.4	-2	-2.9	28	-1.0	2	-127.3	107.7	E
+18	77	0.4695121951219512	-0.5	-2	-0.2	26	-0.6	2	-0.2	28	-102.2	92.2	E
+19	109	0.5797872340425532	-3.3	26	-1.0	-2	-2.6	28	-0.4	2	-105.5	118.3	E
+20	127	0.8943661971830986	-0.6	-2	-0.2	26	-0.5	2	-0.2	28	-125.6	140.9	E
+21	27	0.32142857142857145	-2.5	26	-0.4	-2	-4.2	28	-0.6	2	-128.7	114.9	E
+22	53	0.6309523809523809	-0.5	-2	-0.2	26	-0.5	2	-0.2	28	-107.4	114.7	E
+23	76	0.5352112676056338	-4.3	26	-0.6	-2	-3.4	28	-0.9	2	-126.3	91.8	E
+24	140	0.9859154929577465	-0.5	-2	-0.2	26	-0.6	2	-0.2	28	-100.8	102.9	E
+25	107	0.6331360946745562	-3.2	26	-0.9	-2	-2.3	28	-0.0	-2	-116.5	113.8	E
+26	110	1.0	-0.6	-2	-0.2	26	-0.1	26	-0.0	-2	-135.9	360.0	-
+28	100	0.6097560975609756	0.0	0	0.0	0	-1.4	-26	-0.3	2	360.0	81.9	-
+29	45	0.31690140845070425	-1.1	26	-0.3	-28	-1.4	28	-0.5	2	-140.1	151.6	E
+30	9	0.04568527918781726	-2.9	-28	-0.3	-2	-3.7	-26	-0.5	2	-129.3	102.1	E
+31	35	0.17766497461928935	-2.6	26	-0.5	-2	-0.9	28	-0.2	2	-103.5	125.0	E
+32	6	0.05660377358490566	-3.0	-28	-0.5	-2	-2.3	-26	-0.4	2	-141.3	82.7	E
+33	40	0.20618556701030927	-1.9	26	-0.2	-28	-2.0	28	-0.5	2	-106.0	142.1	E
+34	0	0.0	-1.9	-28	-0.4	-2	-1.9	2	-1.7	-26	-128.4	100.8	E
+35	50	0.352112676056338	-1.7	26	-0.5	-2	-2.3	28	-0.9	2	-80.9	82.1	E
+36	0	0.0	-2.4	-28	-1.9	-2	-2.3	-26	-0.7	2	-91.9	107.1	E
+37	31	0.23846153846153847	-3.2	26	-0.9	-2	-2.7	28	-0.4	29	-100.2	111.1	E
+38	55	0.3503184713375796	-2.0	-28	-0.7	-2	-0.3	-1	-0.3	-26	62.9	69.3	S
+39	2	0.00975609756097561	-1.3	-28	-1.0	-27	-0.3	-26	-0.2	-27	-73.2	-95.9	-
+40	1	0.011904761904761904	-0.8	-28	-0.2	1	-0.3	27	-0.1	-26	79.5	176.2	-
+41	28	0.2641509433962264	-0.2	26	-0.1	28	-0.7	-26	-0.7	2	64.9	-144.1	S
+42	93	0.5502958579881657	-1.7	26	-0.1	-28	-2.0	28	-0.4	2	-99.9	116.9	E
+43	0	0.0	-2.4	-28	-0.7	-2	-2.3	-26	-0.3	2	-137.5	110.3	E
+44	25	0.2976190476190476	-3.2	26	-0.4	-2	-1.8	28	-0.4	2	-99.7	145.1	E
+45	7	0.042682926829268296	-2.9	-28	-0.3	-2	-3.3	-26	-0.4	2	-137.3	126.3	E
+46	106	0.5638297872340425	-3.2	26	-0.4	-2	-3.9	28	-0.5	2	-140.4	106.4	E
+47	8	0.056338028169014086	-2.6	-28	-0.4	-2	-2.5	-26	-0.6	2	-117.8	125.2	E
+48	19	0.2261904761904762	-4.1	26	-0.5	-2	-2.5	28	-0.8	2	-110.2	112.0	E
+49	5	0.05952380952380952	-4.2	-28	-0.6	-2	-4.3	-26	-0.4	2	-107.5	93.1	E
+50	26	0.18309859154929578	-4.1	26	-0.8	-2	-1.8	28	-0.3	2	-110.0	138.6	E
+51	12	0.08450704225352113	-3.4	-28	-0.4	-2	-3.2	-26	-0.6	2	-143.2	88.4	E
+52	62	0.3668639053254438	-3.6	26	-0.3	-2	-3.0	28	-0.2	-26	-97.4	120.5	E
+53	65	0.6132075471698113	-2.3	-28	-0.6	-2	-0.1	-2	-0.0	26	-141.5	360.0	-
+55	90	0.5487804878048781	0.0	0	0.0	0	-1.1	-26	-0.3	2	360.0	-116.9	-
+56	44	0.30985915492957744	-2.2	26	-0.3	-28	-2.4	28	-0.2	2	-84.6	140.2	E
+57	11	0.05583756345177665	-1.4	-28	-0.3	-2	-2.6	-26	-0.3	2	-147.5	89.8	E
+58	52	0.2639593908629442	-4.1	26	-0.2	-2	-2.0	28	-0.3	2	-89.5	138.0	E
+59	5	0.04716981132075472	-0.9	-28	-0.3	-2	-1.9	-26	-0.4	2	-148.2	100.8	E
+60	37	0.19072164948453607	-1.9	26	-0.3	-2	-2.4	28	-0.5	2	-117.1	132.7	E
+61	1	0.006134969325153374	-2.0	-28	-0.4	-2	-1.7	-26	-0.9	2	-123.4	106.1	E
+62	35	0.24647887323943662	-3.5	26	-0.5	-2	-2.6	28	-0.6	2	-95.3	102.5	E
+63	0	0.0	-2.3	-28	-0.9	-2	-3.2	-26	-1.1	2	-114.0	112.8	E
+64	47	0.36153846153846153	-2.6	26	-0.6	-2	-0.7	28	-0.1	-26	-95.7	93.7	E
+65	74	0.4713375796178344	-2.7	-28	-1.1	-2	-0.3	-1	-0.2	-27	80.0	68.0	S
+66	3	0.014634146341463415	-0.4	-29	-0.4	-3	-0.2	-27	-0.1	29	-64.8	-101.0	-
+67	7	0.08333333333333333	-0.3	-27	-0.2	1	-0.4	27	-0.2	-26	80.9	-171.8	-
+68	30	0.2830188679245283	-0.1	-29	-0.1	26	-1.7	-26	-0.7	2	58.1	-142.6	S
+69	95	0.5621301775147929	-2.4	26	-0.1	-28	-2.7	28	-0.4	2	-106.2	114.1	E
+70	0	0.0	-2.0	-28	-0.7	-2	-3.2	-26	-0.5	2	-128.4	123.2	E
+71	28	0.3333333333333333	-2.5	26	-0.4	-2	-4.0	28	-0.6	2	-112.3	124.5	E
+72	9	0.054878048780487805	-1.8	-28	-0.5	-2	-3.2	-26	-0.6	2	-116.5	113.6	E
+73	94	0.5	-3.1	26	-0.6	-2	-4.0	28	-0.8	2	-120.0	100.4	E
+74	5	0.035211267605633804	-3.9	-28	-0.6	-2	-4.1	-26	-0.8	2	-100.0	107.0	E
+75	19	0.2261904761904762	-3.6	26	-0.8	-2	-1.8	28	-0.5	2	-101.0	102.1	E
+76	0	0.0	-2.5	-28	-0.8	-2	-4.1	-26	-0.4	2	-124.4	93.7	E
+77	34	0.23943661971830985	-2.3	26	-0.5	-2	-2.1	28	-0.6	2	-127.5	127.4	E
+78	13	0.09154929577464789	-1.8	-28	-0.4	-2	-3.6	-26	-0.7	2	-118.5	104.9	E
+79	69	0.40828402366863903	-3.2	26	-0.6	-2	-3.3	28	-0.2	-26	-105.7	109.9	E
+80	65	0.6132075471698113	-3.0	-28	-0.7	-2	-0.1	26	-0.0	-2	-132.4	360.0	-
+82	51	0.31097560975609756	0.0	0	0.0	0	-2.2	-26	-0.6	2	360.0	116.6	-
+83	54	0.38028169014084506	-2.4	26	-0.2	-28	-2.7	28	-0.3	2	-121.7	94.3	E
+84	10	0.050761421319796954	-2.4	-28	-0.6	-2	-4.1	-26	-0.4	2	-83.3	135.1	E
+85	43	0.2182741116751269	-3.5	26	-0.3	-2	-2.2	28	-0.7	2	-139.9	102.8	E
+86	5	0.04716981132075472	-2.0	-28	-0.4	-2	-1.9	-26	-0.6	2	-116.2	95.0	E
+87	43	0.22164948453608246	-4.0	26	-0.7	-2	-2.8	28	-0.6	2	-108.1	119.5	E
+88	2	0.012269938650306749	-2.4	-28	-0.6	-2	-3.5	-26	-0.8	2	-116.5	116.7	E
+89	39	0.2746478873239437	-4.0	26	-0.6	-2	-3.1	28	-0.6	2	-110.5	90.0	E
+90	0	0.0	-2.6	-28	-0.8	-2	-2.6	-26	-1.1	2	-108.9	116.3	E
+91	46	0.35384615384615387	-2.5	26	-0.6	-2	-2.0	28	-0.1	-26	-92.2	95.7	E
+92	63	0.4012738853503185	-1.1	-2	-0.7	-28	-0.5	28	-0.3	-1	78.4	76.6	S
+93	1	0.004878048780487805	-0.4	-3	-0.2	26	-0.5	28	-0.2	-27	-67.3	-92.6	-
+94	8	0.09523809523809523	-0.4	-27	-0.2	1	-0.2	27	-0.1	-27	77.0	-161.3	-
+95	27	0.25471698113207547	-0.1	1	-0.1	-29	-2.4	-26	-0.7	2	44.6	-144.6	S
+96	89	0.5266272189349113	-2.4	26	-0.2	-28	-3.2	28	-0.5	2	-105.1	111.3	E
+97	0	0.0	-2.7	-28	-0.7	-2	-2.5	-26	-0.7	2	-128.5	113.5	E
+98	26	0.30952380952380953	-2.3	26	-0.5	-2	-3.6	28	-0.7	2	-104.2	108.7	E
+99	7	0.042682926829268296	-4.0	-28	-0.7	-2	-3.1	-26	-0.5	2	-98.7	112.8	E
+100	85	0.4521276595744681	-3.3	26	-0.7	-2	-2.0	28	-0.6	2	-118.2	123.8	E
+101	7	0.04929577464788732	-4.0	-28	-0.5	-2	-3.6	-26	-0.7	2	-117.0	107.2	E
+102	17	0.20238095238095238	-2.5	26	-0.6	-2	-0.9	28	-0.2	2	-92.7	112.4	E
+103	0	0.0	-1.8	-28	-0.7	-2	-2.3	-26	-0.4	2	-136.1	74.2	E
+104	43	0.3028169014084507	-1.9	26	-0.2	-28	-2.5	28	-0.4	2	-112.1	143.6	E
+105	23	0.1619718309859155	-2.1	-28	-0.4	-2	-3.2	-26	-0.4	2	-138.7	134.5	E
+106	77	0.4556213017751479	-3.3	26	-0.4	-2	-3.2	28	-0.2	-26	-135.4	108.9	E
+107	71	0.6698113207547169	-3.3	-28	-0.4	-2	-0.1	26	-0.0	-29	-131.9	360.0	-
+109	162	0.9878048780487805	0.0	0	0.0	0	-2.4	-26	-0.5	2	360.0	66.4	-
+110	135	0.9507042253521126	-0.2	-28	-0.1	-26	-0.4	2	-0.2	-26	-97.6	127.8	E
+111	93	0.4720812182741117	-2.7	-28	-0.5	-2	-3.5	-26	-0.5	2	-127.7	84.1	E
+112	115	0.583756345177665	-0.4	-2	-0.2	-28	-0.4	2	-0.2	-26	-93.9	126.7	E
+113	30	0.2830188679245283	-2.2	-28	-0.5	-2	-4.0	-26	-0.5	2	-135.0	116.7	E
+114	111	0.5721649484536082	-0.4	-2	-0.2	-28	-0.5	2	-0.2	-26	-124.5	85.4	E
+115	63	0.38650306748466257	-2.8	-28	-0.5	-2	-4.0	-26	-0.6	2	-84.4	122.5	E
+116	127	0.8943661971830986	-0.5	-2	-0.2	-28	-0.4	2	-0.2	-26	-120.2	109.5	E
+117	20	0.23809523809523808	-3.1	-28	-0.6	-2	-2.5	-26	-0.7	2	-134.4	135.9	E
+118	99	0.7615384615384615	-0.4	-2	-0.3	1	-0.1	-26	-0.1	-28	-107.7	110.4	E
+119	131	0.8343949044585988	-2.0	-28	-0.7	-2	-0.3	-1	-0.2	-26	72.2	78.1	S
+120	31	0.15121951219512195	-0.5	-28	-0.3	-3	-0.2	-27	-0.1	-26	-72.2	-81.2	-
+121	11	0.13095238095238096	-0.5	-28	-0.2	-27	-0.1	-27	-0.0	-26	61.3	-154.3	-
+122	63	0.5943396226415094	-0.1	1	-0.1	-29	-2.4	-26	-0.7	2	47.2	-148.9	S
+123	168	0.9940828402366864	-0.2	-28	-0.1	-3	-0.3	2	-0.2	-26	-107.7	111.8	E
+124	61	0.3609467455621302	-3.2	-28	-0.7	-2	-2.3	-26	-0.3	2	-133.4	149.4	E
+125	54	0.6428571428571429	-0.3	-2	-0.2	-28	-0.5	2	-0.2	-26	-146.7	123.5	E
+126	30	0.18292682926829268	-3.6	-28	-0.3	-2	-3.3	-26	-0.4	2	-105.5	133.2	E
+127	152	0.8085106382978723	-0.5	-2	-0.2	-28	-0.7	2	-0.2	-26	-136.3	121.8	E
+128	14	0.09859154929577464	-2.0	-28	-0.4	-2	-2.5	-26	-1.6	2	-110.3	101.0	E
+129	56	0.6666666666666666	-0.7	-2	-0.1	-28	-0.5	2	-0.1	-26	-76.6	89.0	E
+130	1	0.011904761904761904	-1.6	-2	-0.9	-28	-1.9	-26	-0.5	2	-114.3	68.7	E
+131	90	0.6338028169014085	-0.5	-2	-0.2	-28	-0.5	2	-0.2	-26	-113.4	129.4	E
+132	35	0.24647887323943662	-2.5	-28	-0.5	-2	-3.3	-26	-0.7	2	-122.9	114.7	E
+133	138	0.8165680473372781	-0.5	-2	-0.2	-28	-0.2	-26	-0.1	-28	-113.5	97.1	E
+134	89	0.839622641509434	-3.2	-28	-0.7	-2	-0.0	-2	-0.0	-1	-115.7	360.0	-
diff --git a/Tests/common_BioSQL.py b/Tests/common_BioSQL.py
index 5cc00eb..9f79aff 100644
--- a/Tests/common_BioSQL.py
+++ b/Tests/common_BioSQL.py
@@ -174,7 +174,10 @@ def _do_db_create():
 
 
 def create_database():
-    """Delete any existing BioSQL test DB, then (re)create an empty BioSQL DB."""
+    """Delete any existing BioSQL test DB, then (re)create an empty BioSQL DB.
+
+    Returns TESTDB name which will change for for SQLite.
+    """
     if DBDRIVER in ["sqlite3"]:
         global TESTDB
         if os.path.exists(TESTDB):
@@ -208,6 +211,8 @@ def create_database():
         server.close()
         raise
 
+    return TESTDB
+
 
 def destroy_database():
     """Delete any temporary BioSQL sqlite3 database files."""
@@ -222,7 +227,7 @@ def load_database(gb_filename_or_handle):
     This is useful for running tests against a newly created database.
     """
 
-    create_database()
+    TESTDB = create_database()
     # now open a connection to load the database
     db_name = "biosql-test"
     server = BioSeqDatabase.open_database(driver=DBDRIVER,
@@ -245,7 +250,7 @@ def load_multi_database(gb_filename_or_handle, gb_filename_or_handle2):
     This is useful for running tests against a newly created database.
     """
 
-    create_database()
+    TESTDB = create_database()
     # now open a connection to load the database
     db_name = "biosql-test"
     db_name2 = "biosql-test2"
@@ -529,6 +534,14 @@ class SeqInterfaceTest(unittest.TestCase):
         self.assertEqual(str(test_seq[-10:][5:]), "TTATA")
         self.assertEqual(str(test_seq[-10:][5:]), "TTATA")
 
+    def test_record_slicing(self):
+        """Check that slices of DBSeqRecord are retrieved properly.
+        """
+        new_rec = self.item[400:]
+        self.assertTrue(isinstance(new_rec, SeqRecord))
+        self.assertEqual(len(new_rec), 480)
+        self.assertEqual(len(new_rec.features), 5)
+
     def test_seq_features(self):
         """Check SeqFeatures of a sequence.
         """
@@ -537,9 +550,6 @@ class SeqInterfaceTest(unittest.TestCase):
         self.assertEqual(cds_feature.type, "CDS")
         self.assertEqual(str(cds_feature.location),
                          "join{[103:160](+), [319:390](+), [503:579](+)}")
-        for sub_feature in cds_feature._sub_features:
-            self.assertEqual(sub_feature.type, "CDS")
-            # self.assertEqual(sub_feature.location_operator, "join")
 
         try:
             self.assertEqual(cds_feature.qualifiers["gene"], ["kin2"])
@@ -561,7 +571,7 @@ class LoaderTest(unittest.TestCase):
 
     def setUp(self):
         # create TESTDB
-        create_database()
+        TESTDB = create_database()
 
         # load the database
         db_name = "biosql-test"
@@ -610,58 +620,6 @@ class LoaderTest(unittest.TestCase):
                                     'M81224.1', 'X55053.1', 'X62281.1'])
 
 
-class TaxonomyTest(unittest.TestCase):
-    """Test proper insertion and retrieval of taxonomy data
-    """
-    def setUp(self):
-        from Bio import Entrez
-        Entrez.email = "biopython-dev at biopython.org"
-        # create TESTDB
-        create_database()
-
-        # load the database
-        db_name = "biosql-test"
-        self.server = BioSeqDatabase.open_database(driver=DBDRIVER,
-                                                   user=DBUSER, passwd=DBPASSWD,
-                                                   host=DBHOST, db=TESTDB)
-
-        # remove the database if it already exists
-        try:
-            self.server[db_name]
-            self.server.remove_database(db_name)
-        except KeyError:
-            pass
-
-        self.db = self.server.new_database(db_name)
-
-        # get the GenBank file we are going to put into it
-        self.iterator = SeqIO.parse("GenBank/cor6_6.gb", "gb")
-
-    def tearDown(self):
-        self.server.close()
-        destroy_database()
-        del self.db
-        del self.server
-
-    def test_taxon_left_right_values(self):
-        self.db.load(self.iterator, True)
-        sql = """SELECT DISTINCT include.ncbi_taxon_id FROM taxon
-                  INNER JOIN taxon AS include ON
-                      (include.left_value BETWEEN taxon.left_value
-                                  AND taxon.right_value)
-                  WHERE taxon.taxon_id IN
-                      (SELECT taxon_id FROM taxon_name
-                                  WHERE name = 'Brassicales')
-                      AND include.right_value - include.left_value = 1"""
-
-        rows = self.db.adaptor.execute_and_fetchall(sql)
-        self.assertEqual(4, len(rows))
-        values = set()
-        for row in rows:
-            values.add(row[0])
-        self.assertEqual(set([3704, 3711, 3708, 3702]), set(values))
-
-
 class DeleteTest(unittest.TestCase):
     """Test proper deletion of entries from a database."""
 
@@ -729,7 +687,7 @@ class DupLoadTest(unittest.TestCase):
 
     def setUp(self):
         # drop any old database and create a new one:
-        create_database()
+        TESTDB = create_database()
         # connect to new database:
         self.server = BioSeqDatabase.open_database(driver=DBDRIVER,
                                                    user=DBUSER, passwd=DBPASSWD,
@@ -880,7 +838,7 @@ class TransferTest(unittest.TestCase):
     # simply a new unique namespace is used for each test.
 
     def setUp(self):
-        create_database()
+        TESTDB = create_database()
 
     def test_NC_005816(self):
         """GenBank file to BioSQL, then again to a new namespace, NC_005816."""
@@ -1043,13 +1001,10 @@ class InDepthLoadTest(unittest.TestCase):
         test_feature = features[4]
         self.assertEqual(test_feature.type, "CDS")
         self.assertEqual(str(test_feature.location), "join{[0:48](+), [142:206](+)}")
-        self.assertEqual(len(test_feature._sub_features), 2)
-        self.assertEqual(str(test_feature._sub_features[0].location), "[0:48](+)")
-        self.assertEqual(test_feature._sub_features[0].type, "CDS")
-        # self.assertEqual(test_feature._sub_features[0].location_operator, "join")
-        self.assertEqual(str(test_feature._sub_features[1].location), "[142:206](+)")
-        self.assertEqual(test_feature._sub_features[1].type, "CDS")
-        # self.assertEqual(test_feature._sub_features[1].location_operator, "join")
+        self.assertEqual(len(test_feature.location.parts), 2)
+        self.assertEqual(str(test_feature.location.parts[0]), "[0:48](+)")
+        self.assertEqual(str(test_feature.location.parts[1]), "[142:206](+)")
+        self.assertEqual(test_feature.location.operator, "join")
         self.assertEqual(len(test_feature.qualifiers), 6)
         self.assertEqual(test_feature.qualifiers["gene"], ["csp14"])
         self.assertEqual(test_feature.qualifiers["codon_start"], ["2"])
@@ -1065,8 +1020,8 @@ class InDepthLoadTest(unittest.TestCase):
         test_record = self.db.lookup(accession="AJ237582")
         test_feature = test_record.features[4]  # DNA, no complement
         self.assertEqual(test_feature.strand, 1)
-        for sub_feature in test_feature._sub_features:
-            self.assertEqual(sub_feature.strand, 1)
+        for loc in test_feature.location.parts:
+            self.assertEqual(loc.strand, 1)
 
         test_record = self.db.lookup(accession="X55053")
         test_feature = test_record.features[0]
diff --git a/Tests/common_BioSQL_online.py b/Tests/common_BioSQL_online.py
new file mode 100644
index 0000000..47db6c9
--- /dev/null
+++ b/Tests/common_BioSQL_online.py
@@ -0,0 +1,111 @@
+# This code is part of the Biopython distribution and governed by its
+# license.  Please see the LICENSE file that should have been included
+# as part of this package.
+"""Tests for dealing with storage of biopython objects in a relational db.
+"""
+from __future__ import print_function
+
+import os
+import platform
+import unittest
+import tempfile
+import time
+
+from Bio._py3k import StringIO
+from Bio._py3k import zip
+from Bio._py3k import basestring
+
+# Hide annoying warnings from things like bonds in GenBank features,
+# or PostgreSQL schema rules. TODO - test these warnings are raised!
+import warnings
+from Bio import BiopythonWarning
+
+# local stuff
+from Bio import MissingExternalDependencyError
+from Bio.Seq import Seq, MutableSeq
+from Bio.SeqFeature import SeqFeature
+from Bio import Alphabet
+from Bio import SeqIO
+from Bio.SeqRecord import SeqRecord
+
+from BioSQL import BioSeqDatabase
+from BioSQL import BioSeq
+from Bio import Entrez
+
+from common_BioSQL import create_database, destroy_database, check_config
+
+from seq_tests_common import compare_record, compare_records
+
+import requires_internet
+
+if __name__ == "__main__":
+    raise RuntimeError("Call this via test_BioSQL_*online.py not directly")
+
+# Sharing these with test_BioSQL_XXX_online.py files which import this file:
+# DBDRIVER, DBTYPE, DBHOST, DBUSER, DBPASSWD, TESTDB, DBSCHEMA, SQL_FILE, SYSTEM
+SYSTEM = platform.system()
+
+
+def share_config(dbdriver, dbtype, dbhost, dbuser, dbpasswd, testdb):
+    """Make sure we can access the DB settings from this file."""
+    global DBDRIVER, DBTYPE, DBHOST, DBUSER, DBPASSWD, TESTDB, DBSCHEMA
+    global SYSTEM, SQL_FILE
+    DBDRIVER = dbdriver
+    DBTYPE = dbtype
+    DBHOST = dbhost
+    DBUSER = dbuser
+    DBPASSWD = dbpasswd
+    TESTDB = testdb
+
+
+class TaxonomyTest(unittest.TestCase):
+    """Test proper insertion and retrieval of taxonomy data."""
+    def setUp(self):
+        global DBDRIVER, DBTYPE, DBHOST, DBUSER, DBPASSWD, TESTDB, DBSCHEMA
+        global SYSTEM, SQL_FILE
+
+        Entrez.email = "biopython-dev at biopython.org"
+        # create TESTDB
+        TESTDB = create_database()
+
+        # load the database
+        db_name = "biosql-test"
+        self.server = BioSeqDatabase.open_database(driver=DBDRIVER,
+                                                   user=DBUSER, passwd=DBPASSWD,
+                                                   host=DBHOST, db=TESTDB)
+
+        # remove the database if it already exists
+        try:
+            self.server[db_name]
+            self.server.remove_database(db_name)
+        except KeyError:
+            pass
+
+        self.db = self.server.new_database(db_name)
+
+        # get the GenBank file we are going to put into it
+        self.iterator = SeqIO.parse("GenBank/cor6_6.gb", "gb")
+
+    def tearDown(self):
+        self.server.close()
+        destroy_database()
+        del self.db
+        del self.server
+
+    def test_taxon_left_right_values(self):
+        self.db.load(self.iterator, True)
+        sql = """SELECT DISTINCT include.ncbi_taxon_id FROM taxon
+                  INNER JOIN taxon AS include ON
+                      (include.left_value BETWEEN taxon.left_value
+                                  AND taxon.right_value)
+                  WHERE taxon.taxon_id IN
+                      (SELECT taxon_id FROM taxon_name
+                                  WHERE name = 'Brassicales')
+                      AND include.right_value - include.left_value = 1"""
+
+        rows = self.db.adaptor.execute_and_fetchall(sql)
+        self.assertEqual(4, len(rows))
+        values = set()
+        for row in rows:
+            values.add(row[0])
+        self.assertEqual(set([3704, 3711, 3708, 3702]), set(values))
diff --git a/Tests/output/test_GenBank b/Tests/output/test_GenBank
index dc0bf78..a84eced 100644
--- a/Tests/output/test_GenBank
+++ b/Tests/output/test_GenBank
@@ -27,7 +27,7 @@ Key: source
 Value: human
 Key: taxonomy
 Value: ['Eukaryota', 'Metazoa', 'Chordata', 'Craniata', 'Vertebrata', 'Euteleostomi', 'Mammalia', 'Eutheria', 'Primates', 'Catarrhini', 'Hominidae', 'Homo']
-Feaures
+Features
 type: source
 location: [0:1622](+)
 qualifiers:
@@ -98,7 +98,7 @@ Key: source
 Value: thale cress
 Key: taxonomy
 Value: ['Eukaryota', 'Viridiplantae', 'Streptophyta', 'Embryophyta', 'Tracheophyta', 'euphyllophytes', 'Spermatophyta', 'Magnoliophyta', 'eudicotyledons', 'Rosidae', 'Capparales', 'Brassicaceae', 'Arabidopsis']
-Feaures
+Features
 type: source
 location: [0:513](+)
 qualifiers:
@@ -163,7 +163,7 @@ Key: source
 Value: thale cress
 Key: taxonomy
 Value: ['Eukaryota', 'Viridiplantae', 'Streptophyta', 'Embryophyta', 'Tracheophyta', 'euphyllophytes', 'Spermatophyta', 'Magnoliophyta', 'eudicotyledons', 'Rosidae', 'Capparales', 'Brassicaceae', 'Arabidopsis']
-Feaures
+Features
 type: source
 location: [0:880](+)
 qualifiers:
@@ -190,19 +190,6 @@ type: mRNA
 location: join{[43:160](+), [319:390](+), [503:>579](+)}
 qualifiers:
     Key: gene, Value: ['kin2']
-Sub-Features
-type: mRNA
-location: [43:160](+)
-qualifiers:
-
-type: mRNA
-location: [319:390](+)
-qualifiers:
-
-type: mRNA
-location: [503:>579](+)
-qualifiers:
-
 
 type: gene
 location: [43:579](+)
@@ -217,19 +204,6 @@ qualifiers:
     Key: gene, Value: ['kin2']
     Key: protein_id, Value: ['CAA44171.1']
     Key: translation, Value: ['MSETNKNAFQAGQAAGKAERRRAMFCWTRPRMLLLQLELPRNRAGKSISDAAVGGVNFVKDKTGLNK']
-Sub-Features
-type: CDS
-location: [103:160](+)
-qualifiers:
-
-type: CDS
-location: [319:390](+)
-qualifiers:
-
-type: CDS
-location: [503:579](+)
-qualifiers:
-
 
 type: intron
 location: [160:319](+)
@@ -305,7 +279,7 @@ Key: source
 Value: Brassica napus (cultivar Jet neuf) cold induced leaf cDNA to mRNA
 Key: taxonomy
 Value: ['Eukaryota', 'Viridiplantae', 'Embryophyta', 'Tracheophyta', 'Spermatophyta', 'Magnoliophyta', 'eudicotyledons', 'core eudicots', 'Rosidae', 'eurosids II', 'Brassicales', 'Brassicaceae', 'Brassica']
-Feaures
+Features
 type: source
 location: [0:441](+)
 qualifiers:
@@ -389,7 +363,7 @@ Key: source
 Value: horseradish
 Key: taxonomy
 Value: ['Eukaryota', 'Viridiplantae', 'Streptophyta', 'Embryophyta', 'Tracheophyta', 'euphyllophytes', 'Spermatophyta', 'Magnoliophyta', 'eudicotyledons', 'Rosidae', 'Capparales', 'Brassicaceae', 'Armoracia']
-Feaures
+Features
 type: source
 location: [0:206](+)
 qualifiers:
@@ -401,15 +375,6 @@ type: mRNA
 location: join{[<0:48](+), [142:>206](+)}
 qualifiers:
     Key: gene, Value: ['csp14']
-Sub-Features
-type: mRNA
-location: [<0:48](+)
-qualifiers:
-
-type: mRNA
-location: [142:>206](+)
-qualifiers:
-
 
 type: exon
 location: [0:48](+)
@@ -431,15 +396,6 @@ qualifiers:
     Key: product, Value: ['cold shock protein']
     Key: protein_id, Value: ['CAB39890.1']
     Key: translation, Value: ['DKAKDAAAAAGASAQQAGKNISDAAAGGVNFVKEKTG']
-Sub-Features
-type: CDS
-location: [<0:48](+)
-qualifiers:
-
-type: CDS
-location: [142:>206](+)
-qualifiers:
-
 
 type: intron
 location: [48:142](+)
@@ -487,7 +443,7 @@ Key: source
 Value: Brassica rapa flower cDNA to mRNA
 Key: taxonomy
 Value: ['Eukaryota', 'Viridiplantae', 'Embryophyta', 'Tracheophyta', 'Spermatophyta', 'Magnoliophyta', 'eudicotyledons', 'core eudicots', 'Rosidae', 'eurosids II', 'Brassicales', 'Brassicaceae', 'Brassica']
-Feaures
+Features
 type: source
 location: [0:282](+)
 qualifiers:
@@ -551,7 +507,7 @@ Key: source
 Value: rape
 Key: taxonomy
 Value: ['Eukaryota', 'Viridiplantae', 'Embryophyta', 'Tracheophyta', 'Spermatophyta', 'Magnoliophyta', 'eudicotyledons', 'core eudicots', 'Rosidae', 'eurosids II', 'Brassicales', 'Brassicaceae', 'Brassica']
-Feaures
+Features
 type: source
 location: [0:497](+)
 qualifiers:
@@ -564,19 +520,6 @@ location: join{[<0:54](+), [240:309](+), [422:>497](+)}
 qualifiers:
     Key: gene, Value: ['BN28a']
     Key: product, Value: ['BN28a']
-Sub-Features
-type: mRNA
-location: [<0:54](+)
-qualifiers:
-
-type: mRNA
-location: [240:309](+)
-qualifiers:
-
-type: mRNA
-location: [422:>497](+)
-qualifiers:
-
 
 type: gene
 location: [<0:>497](+)
@@ -593,19 +536,6 @@ qualifiers:
     Key: product, Value: ['BN28a']
     Key: protein_id, Value: ['AAG13407.1']
     Key: translation, Value: ['MADNKQSFQAGQAAGRAEEKGNVLMDKVKDAATAAGASAQTAGQKITEAAGGAVNLVKEKTGMNK']
-Sub-Features
-type: CDS
-location: [0:54](+)
-qualifiers:
-
-type: CDS
-location: [240:309](+)
-qualifiers:
-
-type: CDS
-location: [422:497](+)
-qualifiers:
-
 
 DB cross refs []
 ***Record from iro.gb with the FeatureParser
@@ -663,7 +593,7 @@ Key: source
 Value: human
 Key: taxonomy
 Value: ['Eukaryota', 'Metazoa', 'Chordata', 'Craniata', 'Vertebrata', 'Mammalia', 'Eutheria', 'Primates', 'Catarrhini', 'Hominidae', 'Homo']
-Feaures
+Features
 type: source
 location: [0:1326](+)
 qualifiers:
@@ -739,7 +669,7 @@ Key: source
 Value: human
 Key: taxonomy
 Value: ['Eukaryota', 'Metazoa', 'Chordata', 'Craniata', 'Vertebrata', 'Euteleostomi', 'Mammalia', 'Eutheria', 'Primates', 'Catarrhini', 'Hominidae', 'Homo']
-Feaures
+Features
 type: source
 location: [0:741](+)
 qualifiers:
@@ -841,7 +771,7 @@ Key: source
 Value: thale cress
 Key: taxonomy
 Value: ['Eukaryota', 'Viridiplantae', 'Embryophyta', 'Tracheophyta', 'Spermatophyta', 'Magnoliophyta', 'eudicotyledons', 'core eudicots', 'Rosidae', 'eurosids II', 'Brassicales', 'Brassicaceae', 'Arabidopsis']
-Feaures
+Features
 type: source
 location: [0:86436](+)
 qualifiers:
@@ -860,31 +790,6 @@ qualifiers:
     Key: product, Value: ['T25K16.1']
     Key: protein_id, Value: ['AAF26460.1']
     Key: translation, Value: ['MEDQVGFGFRPNDEELVGHYLRNKIEGNTSRDVEVAISEVNICSYDPWNLRFQSKYKSRDAMWYFFSRRENNKGNRQSRTTVSGKWKLTGESVEVKDQWGFCSEGFRGKIGHKRVLVFLDGRYPDKTKSDWVIHEFHYDLLPEHQKLCNVTLFRFSSYFRLSLLSPMFYTDELMCLPPEILQRTYVICRLEYKGDDADILSAYAIDPTPAFVPNMTSSAGSVVNQSRQRNSGSYNTYSEYDSANHGQQFNENSNIMQQQPLQGSFNPLLEYDFANHGGQWLSDYIDLQQQVPYLAPYENESEMIWKHVIEENFEFLVDERTSMQQHYSDHRPKKPVSGVLPDDSSDTETGSMIFEDTSSSTDSVGSSDEPGHTRIDDIPSLNIIEPLHNYKAQEQPKQQSKEKVISSQKSECEWKMAEDSIKIPPSTNTVKQSWIVLENAQWNYLKNMIIGVLLFISVISWIILVG']
-Sub-Features
-type: CDS
-location: [3461:3615](+)
-qualifiers:
-
-type: CDS
-location: [3697:3978](+)
-qualifiers:
-
-type: CDS
-location: [4076:4307](+)
-qualifiers:
-
-type: CDS
-location: [4407:4797](+)
-qualifiers:
-
-type: CDS
-location: [4875:5028](+)
-qualifiers:
-
-type: CDS
-location: [5140:5332](+)
-qualifiers:
-
 
 type: CDS
 location: join{[8272:8368](-), [8086:8166](-), [7915:7998](-), [7463:7603](-), [7265:7351](-), [6616:6953](-)}
@@ -896,31 +801,6 @@ qualifiers:
     Key: product, Value: ['T25K16.2']
     Key: protein_id, Value: ['AAF26477.1']
     Key: translation, Value: ['MAASEHRCVGCGFRVKSLFIQYSPGNIRLMKCGNCKEVADEYIECERMVCFNHFLSLFGPKVYRHVLYNAINPATVNIQVKNYFNSTSRCVVGEIHRQTYLKSPELIIDRSLLLRKSDEESSFSDSPVLLSIKVLIGVLSANAAFIISFAIATKGLLNEVSRESLLLQVWEFPMSVIFFVDILLLTSNSMALKGQTFKMFSMQIVFCCCYFGISQCKFVFKPVMTESTMTRCIAVCLIAHLIRFLVGQIFEPTIFLIQIGSLLQYMSYFFRIV']
-Sub-Features
-type: CDS
-location: [6616:6953](-)
-qualifiers:
-
-type: CDS
-location: [7265:7351](-)
-qualifiers:
-
-type: CDS
-location: [7463:7603](-)
-qualifiers:
-
-type: CDS
-location: [7915:7998](-)
-qualifiers:
-
-type: CDS
-location: [8086:8166](-)
-qualifiers:
-
-type: CDS
-location: [8272:8368](-)
-qualifiers:
-
 
 type: CDS
 location: [11565:12642](-)
@@ -943,79 +823,6 @@ qualifiers:
     Key: product, Value: ['T25K16.4']
     Key: protein_id, Value: ['AAF26461.1']
     Key: translation, Value: ['MVMEDEPREATIKPSYWLDACEDISCDLIDDLVSEFDPSSVAVNESTDENGVINDFFGGIDHILDSIKNGGGLPNNGVSDTNSQINEVTVTPQVIAKETVKENGLQKNGGKRDEFSKEEGDKDRKRARVCSYQSERSNLSGRGHVNNSREGDRFMNRKRTRNWDEAGNNKKKRECNNYRRDGRDREVRGYWERDKVGSNELVYRSGTWEADHERDVKKVSGGNRECDVKAEENKSKPEERKEKVVEEQARRYQLDVLEQAKAKNTIAFLETGAGKTLIAILLIKSVHKDLMSQNRKMLSVFLVPKVPLVYQVPPNKKHQAEVIRNQTCFQVGHYCGEMGQDFWDSRRWQREFESKQFLKLTSFFLFSSTQVLVMTAQILLNILRHSIIRMETIDLLILDECHHAVKKHPYSLVMSEFYHTTPKDKRPAIFGMTASPVNLKGVSSQVDCAIKIRNLETKLDS [...]
-Sub-Features
-type: CDS
-location: [23220:24174](+)
-qualifiers:
-
-type: CDS
-location: [24243:24357](+)
-qualifiers:
-
-type: CDS
-location: [24411:24664](+)
-qualifiers:
-
-type: CDS
-location: [24742:25137](+)
-qualifiers:
-
-type: CDS
-location: [25225:25445](+)
-qualifiers:
-
-type: CDS
-location: [25526:25711](+)
-qualifiers:
-
-type: CDS
-location: [25782:25905](+)
-qualifiers:
-
-type: CDS
-location: [25993:26478](+)
-qualifiers:
-
-type: CDS
-location: [26563:26730](+)
-qualifiers:
-
-type: CDS
-location: [26813:26983](+)
-qualifiers:
-
-type: CDS
-location: [27073:27235](+)
-qualifiers:
-
-type: CDS
-location: [27319:27415](+)
-qualifiers:
-
-type: CDS
-location: [27504:28133](+)
-qualifiers:
-
-type: CDS
-location: [28313:28507](+)
-qualifiers:
-
-type: CDS
-location: [28591:28782](+)
-qualifiers:
-
-type: CDS
-location: [28861:30013](+)
-qualifiers:
-
-type: CDS
-location: [30111:30518](+)
-qualifiers:
-
-type: CDS
-location: [30603:30781](+)
-qualifiers:
-
 
 type: CDS
 location: join{[32248:32372](-), [32132:32161](-), [31983:32049](-), [31789:31897](-), [31634:31700](-), [31340:31515](-), [31222:31304](-), [31083:31126](-)}
@@ -1027,39 +834,6 @@ qualifiers:
     Key: product, Value: ['T25K16.5']
     Key: protein_id, Value: ['AAF26475.1']
     Key: translation, Value: ['MSEETKDNQRLQRPAPRLNERILSSLSRRSVAAHPWHDLEIGPGAPQIFNVVVEITKGSKVKYELDKKTGLIKVDRILYSSVVYPHNYGFVPRTLCEDNDPIDVLVIMQEPVLPGCFLRARAIGLMPMIDQGEKDDKIIAVCVDDPEYKHYTDIKELPPHRLSEIRRFFEDCILFLQCSSLFISIDLSTNKKNENKEVAVNDFLPSESAVEAIQYSMDLYAEYILHTLRR']
-Sub-Features
-type: CDS
-location: [31083:31126](-)
-qualifiers:
-
-type: CDS
-location: [31222:31304](-)
-qualifiers:
-
-type: CDS
-location: [31340:31515](-)
-qualifiers:
-
-type: CDS
-location: [31634:31700](-)
-qualifiers:
-
-type: CDS
-location: [31789:31897](-)
-qualifiers:
-
-type: CDS
-location: [31983:32049](-)
-qualifiers:
-
-type: CDS
-location: [32132:32161](-)
-qualifiers:
-
-type: CDS
-location: [32248:32372](-)
-qualifiers:
-
 
 type: CDS
 location: join{[36724:36763](-), [36511:36623](-), [36325:36387](-), [35431:35701](-), [35268:35349](-), [34102:35173](-), [33693:34029](-)}
@@ -1071,35 +845,6 @@ qualifiers:
     Key: product, Value: ['T25K16.6']
     Key: protein_id, Value: ['AAF26474.1']
     Key: translation, Value: ['MDTNTSGEELLAKARKPYTITKQRERWTEDEHERFLEALRLYGRAWQRIEEHIGTKTAVQIRSHAQKFFTKFGKAHSFWFTFQLEKEAEVKGIPVCQALDIEIPPPRPKRKPNTPYPRKPGNNGTSSSQVSSAKDAKLVSSASSSQLNQAFLDLEKMPFSEKTSTGKENQDENCSGVSTVNKYPLPTKVSGDIETSKTSTVDNAVQDVPKKNKDKDGNDGTTVHSMQNYPWHFHADIVNGNIAKCPQNHPSGMVSQDFMFHPMREETHGHANLQATTASATTTASHQAFPACHSQDDYRSFLQISSTFSNLIMSTLLQNPAAHAAATFAASVWPYASVGNSGDSSTPMSSSPPSITAIAAATVAAATAWWASHGLLPVCAPAPITCVPFSTVAVPTPAMTEMDTVENTQPFEKQNTALQDQNLASKSPASSSDDSDETGVTKLNADSKTNDDKIEEVVVTA [...]
-Sub-Features
-type: CDS
-location: [33693:34029](-)
-qualifiers:
-
-type: CDS
-location: [34102:35173](-)
-qualifiers:
-
-type: CDS
-location: [35268:35349](-)
-qualifiers:
-
-type: CDS
-location: [35431:35701](-)
-qualifiers:
-
-type: CDS
-location: [36325:36387](-)
-qualifiers:
-
-type: CDS
-location: [36511:36623](-)
-qualifiers:
-
-type: CDS
-location: [36724:36763](-)
-qualifiers:
-
 
 type: CDS
 location: join{[40376:40579](-), [39914:40031](-), [39110:39516](-), [38837:38989](-), [38599:38756](-)}
@@ -1111,27 +856,6 @@ qualifiers:
     Key: product, Value: ['T25K16.7']
     Key: protein_id, Value: ['AAF26473.1']
     Key: translation, Value: ['MAGDMQGVRVVEKYSPVIVMVMSNVAMGSVNALVKKALDVGVNHMVIGAYRMAISALILVPFAYVLERASLMQFFFLLGLSYTSATVSCALVSMLPAITFALALIFRTENVKILKTKAGMLKVIGTLICISGALFLTFYKGPQISNSHSHSHGGASHNNNDQDKANNWLLGCLYLTIGTVLLSLWMLFQGTLSIKYPCKYSSTCLMSIFAAFQCALLSLYKSRDVNDWIIDDRFVITVIIYAGVVGQAMTTVATTWGIKKLGAVFASAFFPLTLISATLFDFLILHTPLYLGSVIGSLVTITGLYMFLWGKNKETESSTALSSGMDNEAQYTTPNKDNDSKSPV']
-Sub-Features
-type: CDS
-location: [38599:38756](-)
-qualifiers:
-
-type: CDS
-location: [38837:38989](-)
-qualifiers:
-
-type: CDS
-location: [39110:39516](-)
-qualifiers:
-
-type: CDS
-location: [39914:40031](-)
-qualifiers:
-
-type: CDS
-location: [40376:40579](-)
-qualifiers:
-
 
 type: CDS
 location: join{[48637:48868](-), [47776:48554](-), [47447:47684](-), [46074:46313](-), [45718:45847](-), [45342:45656](-), [45149:45261](-)}
@@ -1143,35 +867,6 @@ qualifiers:
     Key: product, Value: ['T25K16.8']
     Key: protein_id, Value: ['AAF26472.1']
     Key: translation, Value: ['MATAFAPTKLTATVPLHGSHENRLLLPIRLAPPSSFLGSTRSLSLRRLNHSNATRRSPVVSVQEVVKEKQSTNNTSLLITKEEGLELYEDMILGRSFEDMCAQMYYRGKMFGFVHLYNGQEAVSTGFIKLLTKSDSVVSTYRDHVHALSKGVSARAVMSELFGKVTGCCRGQGGSMHMFSKEHNMLGGFAFIGEGIPVATGAAFSSKYRREVLKQDCDDVTVAFFGDGTCNNGQFFECLNMAALYKLPIIFVVENNLWAIGMSHLRATSDPEIWKKGPAFGMPGVHVDGMDVLKVREVAKEAVTRARRGEGPTLVECETYRFRGHSLADPDELRDAAEKAKYAARDPIAALKKYLIENKLAKEAELKSIEKKIDELVEEAVEFADASPQPGRSQLLENVFADPKGFGIGPDGRYRSQPLQIKVSSSELSVLDEEKEEEVVKGEAEPNKDSVVSKAEPVKKP [...]
-Sub-Features
-type: CDS
-location: [45149:45261](-)
-qualifiers:
-
-type: CDS
-location: [45342:45656](-)
-qualifiers:
-
-type: CDS
-location: [45718:45847](-)
-qualifiers:
-
-type: CDS
-location: [46074:46313](-)
-qualifiers:
-
-type: CDS
-location: [47447:47684](-)
-qualifiers:
-
-type: CDS
-location: [47776:48554](-)
-qualifiers:
-
-type: CDS
-location: [48637:48868](-)
-qualifiers:
-
 
 type: CDS
 location: join{[50584:50656](-), [50120:50333](-), [49985:50039](-)}
@@ -1183,19 +878,6 @@ qualifiers:
     Key: product, Value: ['T25K16.9']
     Key: protein_id, Value: ['AAF26471.1']
     Key: translation, Value: ['MSTVGELACSYAVMILEDEGIAITADKIATLVKAAGVSIESYWPMLFAKMAEKRNVTDLIMNVGAGGGGGAPVAAAAPAAGGGAAAAPAAEEKKKDEPAEESDGDLGFGLFD']
-Sub-Features
-type: CDS
-location: [49985:50039](-)
-qualifiers:
-
-type: CDS
-location: [50120:50333](-)
-qualifiers:
-
-type: CDS
-location: [50584:50656](-)
-qualifiers:
-
 
 type: CDS
 location: join{[51940:52048](+), [52135:52432](+), [52639:52885](+), [53185:53326](+), [53404:54196](+)}
@@ -1207,27 +889,6 @@ qualifiers:
     Key: product, Value: ['T25K16.10']
     Key: protein_id, Value: ['AAF26462.1']
     Key: translation, Value: ['MGKKNGSSSWLTAVKRAFRSPTKKDHSNDVEEDEEKKREKRRWFRKPATQESPVKSSGISPPAPQEDSLNVNSKPSPETAPSYATTTPPSNAGKPPSAVVPIATSASKTLAPRRIYYARENYAAVVIQTSFRGYLARRALRALKGLVKLQALVRGHNVRKQAKMTLRCMQALVRVQSRVLDQRKRLSHDGSRKSAFSDSHAVFESRYLQDLSDRQSMSREGSSAAEDWDDRPHTIDAVKVMLQRRRDTALRHDKTNLSQAFSQKMWRTVGNQSTEGHHEVELEEERPKWLDRWMATRPWDKRASSRASVDQRVSVKTVEIDTSQPYSRTGAGSPSRGQRPSSPSRTSHHYQSRNNFSATPSPAKSRPILIRSASPRCQRDPREDRDRAAYSYTSNTPSLRSNYSFTARSGCSISTTMVNNASLLPNYMASTESAKARIRSHSAPRQRPSTPERDRAGLVKK [...]
-Sub-Features
-type: CDS
-location: [51940:52048](+)
-qualifiers:
-
-type: CDS
-location: [52135:52432](+)
-qualifiers:
-
-type: CDS
-location: [52639:52885](+)
-qualifiers:
-
-type: CDS
-location: [53185:53326](+)
-qualifiers:
-
-type: CDS
-location: [53404:54196](+)
-qualifiers:
-
 
 type: CDS
 location: [57093:58680](-)
@@ -1250,19 +911,6 @@ qualifiers:
     Key: product, Value: ['T25K16.12']
     Key: protein_id, Value: ['AAF26469.1']
     Key: translation, Value: ['MEKRSDSESVEILGDWDSPPPEERIVMVSVPTSPESDYARSNQPKEIESRVSDKETASASGEVAARRVLPPWMDPSYEWGGGKWKVDGRKNKNKKEKEKEKEEIIPFKEIIEALLGNSGDKVQQDNKVFEVAPSLHVVELRKTGDDTLEFHKVYFRFNLYQPVQLPLILFVVIRFSMLKIIHYHQFTMAHIKEFVCMWDTHLYKEITNLNIWDTLSSTLVLAIWTVNASHE']
-Sub-Features
-type: CDS
-location: [59507:59665](-)
-qualifiers:
-
-type: CDS
-location: [61669:61826](-)
-qualifiers:
-
-type: CDS
-location: [63132:63513](-)
-qualifiers:
-
 
 type: CDS
 location: join{[67025:67214](-), [66536:66599](-), [66379:66451](-), [66151:66259](-), [65963:66044](-), [65808:65862](-), [65434:65566](-), [65264:65354](-), [65032:65158](-), [64811:64919](-), [64602:64719](-), [64452:64509](-), [64271:64358](-), [64099:64177](-)}
@@ -1274,63 +922,6 @@ qualifiers:
     Key: product, Value: ['T25K16.13']
     Key: protein_id, Value: ['AAF26468.1']
     Key: translation, Value: ['MSGSRRKATPASRTRVGNYEMGRTLGEGSFAKVKYAKNTVTGDQAAIKILDREKVFRHKMVEQLKREISTMKLIKHPNVVEIIEVMASKTKIYIVLELVNGGELFDKIAQQGRLKEDEARRYFQQLINAVDYCHSRGVYHRDLKPENLILDANGVLKVSDFGLSAFSRQVREDGLLHTACGTPNYVAPEVLSDKGYDGAAADVWSCGVILFVLMAGYLPFDEPNLMTLYKRVRICKAEFSCPPWFSQGAKRVIKRILEPNPITRISIAELLEDEWFKKGYKPPSFDQDDEDITIDDVDAAFSNSKECLVTEKKEKPVSMNAFELISSSSEFSLENLFEKQAQLVKKETRFTSQRSASEIMSKMEETAKPLGFNVRKDNYKIKMKGDKSGRKGQLSVATEVFEVAPSLHVVELRKTGGDTLEFHKVCDSFYKNFSSGLKDVVWNTDAAAEEQKQ']
-Sub-Features
-type: CDS
-location: [64099:64177](-)
-qualifiers:
-
-type: CDS
-location: [64271:64358](-)
-qualifiers:
-
-type: CDS
-location: [64452:64509](-)
-qualifiers:
-
-type: CDS
-location: [64602:64719](-)
-qualifiers:
-
-type: CDS
-location: [64811:64919](-)
-qualifiers:
-
-type: CDS
-location: [65032:65158](-)
-qualifiers:
-
-type: CDS
-location: [65264:65354](-)
-qualifiers:
-
-type: CDS
-location: [65434:65566](-)
-qualifiers:
-
-type: CDS
-location: [65808:65862](-)
-qualifiers:
-
-type: CDS
-location: [65963:66044](-)
-qualifiers:
-
-type: CDS
-location: [66151:66259](-)
-qualifiers:
-
-type: CDS
-location: [66379:66451](-)
-qualifiers:
-
-type: CDS
-location: [66536:66599](-)
-qualifiers:
-
-type: CDS
-location: [67025:67214](-)
-qualifiers:
-
 
 type: CDS
 location: join{[71643:71700](-), [70742:71357](-), [70533:70670](-), [69830:69987](-)}
@@ -1342,23 +933,6 @@ qualifiers:
     Key: product, Value: ['T25K16.14']
     Key: protein_id, Value: ['AAF26467.1']
     Key: translation, Value: ['MVSDLPLDEDDIALLKSPYCDDGGDEDVNSAPNIFTYDNVPLKKRHYLGTSDTFRSFEPLNEHACIVCDIADDGVVPCSGNECPLAVHRKCVELDCEDPATFYCPYCWFKEQATRSTALRTRGVAAAKTLVQYGCSELRSGDIVMTRENSQLENGSDNSLPMQLHENLHQLQELVKHLKARNSQLDESTDQFIDMEKSCGEAYAVVNDQPKRVLWTVNEEKMLREGVEKFSDTINKNMPWKKILEMGKGIFHTTRNSSDLKDKWRNMVRIIILIWLRSRLTSSSSSQRSEIKMERERNAGVMKKMSPTGTIQRLEFVGWYL']
-Sub-Features
-type: CDS
-location: [69830:69987](-)
-qualifiers:
-
-type: CDS
-location: [70533:70670](-)
-qualifiers:
-
-type: CDS
-location: [70742:71357](-)
-qualifiers:
-
-type: CDS
-location: [71643:71700](-)
-qualifiers:
-
 
 type: CDS
 location: join{[72284:72371](+), [72788:72865](+), [72988:73097](+), [73189:73442](+), [73523:73585](+)}
@@ -1370,27 +944,6 @@ qualifiers:
     Key: product, Value: ['T25K16.15']
     Key: protein_id, Value: ['AAF26463.1']
     Key: translation, Value: ['MQQQQSPQMFPMVPSIPPANNITTEQIQKYLDENKKLIMAIMENQNLGKLAECAQYQALLQKNLMYLAAIADAQPPPPTPGPSPSTAVAAQMATPHSGMQPPSYFMQHPQASPAGIFAPRGPLQFGSPLQFQDPQQQQQIHQQAMQGHMGIRPMGMTNNGMQHAMQQPETGLGGNVGLRGGKQDGADGQGKDDGK']
-Sub-Features
-type: CDS
-location: [72284:72371](+)
-qualifiers:
-
-type: CDS
-location: [72788:72865](+)
-qualifiers:
-
-type: CDS
-location: [72988:73097](+)
-qualifiers:
-
-type: CDS
-location: [73189:73442](+)
-qualifiers:
-
-type: CDS
-location: [73523:73585](+)
-qualifiers:
-
 
 type: CDS
 location: join{[74035:74145](-), [73806:73990](-)}
@@ -1402,15 +955,6 @@ qualifiers:
     Key: product, Value: ['T25K16.16']
     Key: protein_id, Value: ['AAF26466.1']
     Key: translation, Value: ['MASGGKAKYIIGALIGSFGISYIFDKVISDNKIFGGKDDLNGYLLVKISGTTPGTVSNKEWWAATDEKFQAWPRTAGPPVVMNPISRQNFIVKTRPE']
-Sub-Features
-type: CDS
-location: [73806:73990](-)
-qualifiers:
-
-type: CDS
-location: [74035:74145](-)
-qualifiers:
-
 
 type: CDS
 location: join{[75334:76249](+), [76515:76653](+), [76732:76982](+), [77014:77148](+)}
@@ -1422,23 +966,6 @@ qualifiers:
     Key: product, Value: ['T25K16.17']
     Key: protein_id, Value: ['AAF26464.1']
     Key: translation, Value: ['MKEDRRLPHKRDAFQFLKTKAAYVIVIVLTYAFGYFSAYHYHQPLQQQLPPSTTAVETTKPQVCSIDNFRVTTPCGNLVPPELIRQTVIDRIFNGTSPYIDFPPPHAKKFLRPKRIKGWGSYGAVFENLIRRVKPKTIVEVGSFLGASAIHMANLTRRLGLEETQILCVDDFRGWPGFRDRFKDMALVNGDVLLMYQFMQNVVISDFSGSILPVPFSTGSALEKLCEWGVTADLVEIDAGHDFNSAWADINRAVRILRPGGVIFGHDYFTAADNRGVRRAVNLFAEINRLKVKTDGQHWVIDSVKVINKGTRFAISKTVAKIKEDANQWFFAQVLENQDLVNEQAVHISVKVLRGFLRDEHGKVLIHARRSFASVHSKLDATFLCWQWAMESMKSLRVDKIIFASEDNDLIGAVTRLPSWPSYKFQIHFLLGELIRSSNLGAHLIAKSVTMEDRRQSYVAT [...]
-Sub-Features
-type: CDS
-location: [75334:76249](+)
-qualifiers:
-
-type: CDS
-location: [76515:76653](+)
-qualifiers:
-
-type: CDS
-location: [76732:76982](+)
-qualifiers:
-
-type: CDS
-location: [77014:77148](+)
-qualifiers:
-
 
 type: CDS
 location: join{[83585:84581](-), [82750:83373](-), [82722:82738](-)}
@@ -1450,19 +977,6 @@ qualifiers:
     Key: product, Value: ['T25K16.18']
     Key: protein_id, Value: ['AAF26465.1']
     Key: translation, Value: ['MFSLNMRTEIESLWVFALASKFNIYMQQHFASLLVAIAITWFTITIVFWSTPGGPAWGKYFFTRRFISLDYNRKYKNLIPGPRGFPLVGSMSLRSSHVAHQRIASVAEMSNAKRLMAFSLGDTKVVVTCHPAVAKEILNSSVFADRPVDETAYGLMFNRAMGFAPNGTYWRTLRRLGSNHLFNPKQIKQSEDQRRVIATQMVNAFARNPKSACAVRDLLKTASLCNMMGLVFGREYELESNNNLESECLKGLVEEGYDLLGTLNWTDHLPWLAGLDFQQIRFRCSQLVPKVNLLLSRIIHEQRAATGNFLDMLLSLQGSEKLSESDMVAVLWEMIFRGTDTVAVLVEWVLARIVMHPKVQLTVHDELDRVVGRSRTVDESDLPSLTYLTAMIKEVLRLHPPGPLLSWARLSITDTSVDGYHVPAGTTAMVNMWAIARDPHVWEDPLEFKPERFVAKEGEAE [...]
-Sub-Features
-type: CDS
-location: [82722:82738](-)
-qualifiers:
-
-type: CDS
-location: [82750:83373](-)
-qualifiers:
-
-type: CDS
-location: [83585:84581](-)
-qualifiers:
-
 
 DB cross refs []
 ***Record from protein_refseq.gb with the FeatureParser
@@ -1505,7 +1019,7 @@ Key: source
 Value: house mouse
 Key: taxonomy
 Value: ['Eukaryota', 'Metazoa', 'Chordata', 'Craniata', 'Vertebrata', 'Euteleostomi', 'Mammalia', 'Eutheria', 'Rodentia', 'Sciurognathi', 'Muridae', 'Murinae', 'Mus']
-Feaures
+Features
 type: source
 location: [0:182]
 qualifiers:
@@ -1615,7 +1129,7 @@ Key: source
 Value: fruit fly
 Key: taxonomy
 Value: ['Eukaryota', 'Metazoa', 'Arthropoda', 'Tracheata', 'Hexapoda', 'Insecta', 'Pterygota', 'Neoptera', 'Endopterygota', 'Diptera', 'Brachycera', 'Muscomorpha', 'Ephydroidea', 'Drosophilidae', 'Drosophila']
-Feaures
+Features
 type: source
 location: [0:154329](+)
 qualifiers:
@@ -1638,39 +1152,6 @@ qualifiers:
     Key: note, Value: ["/prediction=(method:''genefinder'', version:''084'', score:''105.71''); /prediction=(method:''genscan'', version:''1.0''); /match=(desc:''BASEMENT MEMBRANE-SPECIFIC HEPARAN SULFATE PROTEOGLYCAN CORE PROTEIN PRECURSOR (HSPG) (PERLECAN) (PLC)'', species:''Homo sapiens (Human)'', ranges:(query:24292..24549, target:SWISS-PROT::P98160:3713..3628, score:''201.00''), (query:24016..24291, target:SWISS-PROT::P98160:3815..3724, score:''139.00''), (query:23857..24006, target [...]
     Key: protein_id, Value: ['CAB72284.1']
     Key: translation, Value: ['MACNCNQSMIYQSNERRDYNCPGAPQYPYNRFKGGVSLKDTPCMVLYICADFKSSKLSSAKPIISGPATTRAPAISYVCQPNDFKCVSHPHTCVRANMVCDGIYDCTDHSDEFNCIAGKGSGKSESNSGSGSFKRWKKSPEQGRRSLAKAVKNRKLRKRSFAKSRDYSLKLDDQSSNLRAGESTDVECYSSDDTYTDVVWERSDGAPLSNNVRQVGNRLVISNVSPSDAGNYVCKCKTDEGDLYTTSYKLEVEDQPHELKSSKIVYAKVGANADLQCGADESRQPTYRWSRQYGQLQAGRSLMNEKLSLDSVQANDAGTYICTAQYADGETADFPNILVVTGAIPQFRQEPRSYMSFPTLPNSSFKFNFELTFRPENGDGLLLFNGQTRGSGDYIALSLKDRYAEFRFDFGGKPMLVRAEEPLALNEWHTVRVSRFKRDGYIQVDEQHPVAFPTLQQIPQL [...]
-Sub-Features
-type: CDS
-location: [22147:22299](-)
-qualifiers:
-
-type: CDS
-location: [22374:22791](-)
-qualifiers:
-
-type: CDS
-location: [22859:23560](-)
-qualifiers:
-
-type: CDS
-location: [23629:24555](-)
-qualifiers:
-
-type: CDS
-location: [24615:24888](-)
-qualifiers:
-
-type: CDS
-location: [25023:25178](-)
-qualifiers:
-
-type: CDS
-location: [26676:27009](-)
-qualifiers:
-
-type: CDS
-location: [27622:27773](-)
-qualifiers:
-
 
 type: gene
 location: [29925:33978](-)
@@ -1686,43 +1167,6 @@ qualifiers:
     Key: note, Value: ["/prediction=(method:''genefinder'', version:''084'', score:''98.50''); /prediction=(method:''genscan'', version:''1.0''); /match=(desc:''BASEMENT MEMBRANE-SPECIFIC HEPARAN SULFATE PROTEOGLYCAN CORE PROTEIN PRECURSOR (HSPG) (PERLECAN) (PLC)'', species:''Homo sapiens (Human)'', ranges:(query:33540..33716, target:SWISS-PROT::P98160:2716..2658, score:''113.00''), (query:32859..32963, target:SWISS-PROT::P98160:3341..3307, score:''63.00''), (query:33150..33215, target:S [...]
     Key: protein_id, Value: ['CAB72285.1']
     Key: translation, Value: ['MFLATLDTNDPTDIGTEDPVLTQIIVSIQKPEITIVPVGGSMTLSCSGRMRWSNSPVIVNWYKENSRLPENVEVQGGNLYLYDLQVSDSGVYICQAVNNETASVFKDTVSITITKKDQLSPAEIVNLPSHVTFEEYVNNEIICEVLGNPAPRVTWARVDGHADAQSTRTYDNRLIFDSPRKSDEGRYRCQAENDQNRDEKYVIVYVQSNPPQPPPQQDRLYITPEEINGLAGESFQLNCQFTSVASLRYDWSHNGRSLSSSPARNVEIRGNTLEVRDASESDSGVYTCVAYDVRTRRNFTESARVNIDRREEQPFGVLMRMMILTDSLINHSNKPIIESLEQNILIIQGEDYSITCEASGSPYPSIKWAKVHDFMPENVHISGNVLTIYGARFENRGVYSCVAENDHGSDLSSTSIDIEPRERPSVKIVSAPLQTFSVGAPASLYCTVEGIPDPTVEWVRV [...]
-Sub-Features
-type: CDS
-location: [29925:30108](-)
-qualifiers:
-
-type: CDS
-location: [30269:30519](-)
-qualifiers:
-
-type: CDS
-location: [30616:31076](-)
-qualifiers:
-
-type: CDS
-location: [31196:31591](-)
-qualifiers:
-
-type: CDS
-location: [31658:31836](-)
-qualifiers:
-
-type: CDS
-location: [32323:32634](-)
-qualifiers:
-
-type: CDS
-location: [32685:33289](-)
-qualifiers:
-
-type: CDS
-location: [33532:33713](-)
-qualifiers:
-
-type: CDS
-location: [33816:33978](-)
-qualifiers:
-
 
 type: gene
 location: [36118:56153](-)
@@ -1738,115 +1182,6 @@ qualifiers:
     Key: note, Value: ["/prediction=(method:''genscan'', version:''1.0''); /prediction=(method:''genefinder'', version:''084''); /match=(desc:''LOW-DENSITY LIPOPROTEIN RECEPTOR-RELATED PROTEIN PRECURSOR (LRP)'', species:''Caenorhabditis elegans'', ranges:(query:50831..50941, target:SWISS-PROT::Q04833:1221..1185, score:''95.00''), (query:50840..51025, target:SWISS-PROT::Q04833:2865..2804, score:''102.00''), (query:50828..50935, target:SWISS-PROT::Q04833:3788..3753, score:''119.00''), (que [...]
     Key: protein_id, Value: ['CAB72286.1']
     Key: translation, Value: ['MLLLQLLLQLLLLGKLLLGKTPPTVFGFRLLFAAFRFPLSLHFPHRMHDHFFVRGDTHSCGWKNSTTFTIRISAIYRYLNQCQANEFRCNNGDCIDARKRCNNVSDCSEGEDENEECPAACSGMEYQCRDGTRCISVSQQCDGHSDCSDGDDEEHCDGIVPKLRYTCPKGKFTCRDLSCISIVHRCDGRADCPNDRSDEEGCPCLYDKWQCDDGTCIAKELLCNGNIDCPEDISDERYCEGGYDSEECRFDEFHCGTGECIPMRQVCDNIYDCNDYSDEVNCVEGEEEDRVGIPIGHQPWRPASKHDDWLHEMDTSEYQVYQPSNVYEKANSQNPCASNQFRCTTSNVCIPLHLRCDGFYHCNDMSDEKSCEQYQRHTTTRRPLTLATPTSRITTQGPGLLERRNTTTATEASRWPWATKTTTIATTTSNPITTVGVANSPPQTCLENIEFACHNRDCISI [...]
-Sub-Features
-type: CDS
-location: [36118:37213](-)
-qualifiers:
-
-type: CDS
-location: [37280:39517](-)
-qualifiers:
-
-type: CDS
-location: [39655:40042](-)
-qualifiers:
-
-type: CDS
-location: [40344:40434](-)
-qualifiers:
-
-type: CDS
-location: [40518:40612](-)
-qualifiers:
-
-type: CDS
-location: [40680:40814](-)
-qualifiers:
-
-type: CDS
-location: [41545:41620](-)
-qualifiers:
-
-type: CDS
-location: [41854:42085](-)
-qualifiers:
-
-type: CDS
-location: [42187:42415](-)
-qualifiers:
-
-type: CDS
-location: [42750:42876](-)
-qualifiers:
-
-type: CDS
-location: [43603:43837](-)
-qualifiers:
-
-type: CDS
-location: [44240:44438](-)
-qualifiers:
-
-type: CDS
-location: [44811:44928](-)
-qualifiers:
-
-type: CDS
-location: [45147:45233](-)
-qualifiers:
-
-type: CDS
-location: [45660:45793](-)
-qualifiers:
-
-type: CDS
-location: [45975:46125](-)
-qualifiers:
-
-type: CDS
-location: [46517:46688](-)
-qualifiers:
-
-type: CDS
-location: [47221:47315](-)
-qualifiers:
-
-type: CDS
-location: [47682:47831](-)
-qualifiers:
-
-type: CDS
-location: [48410:48878](-)
-qualifiers:
-
-type: CDS
-location: [49436:49562](-)
-qualifiers:
-
-type: CDS
-location: [49762:49876](-)
-qualifiers:
-
-type: CDS
-location: [49970:50102](-)
-qualifiers:
-
-type: CDS
-location: [50318:50441](-)
-qualifiers:
-
-type: CDS
-location: [50826:50937](-)
-qualifiers:
-
-type: CDS
-location: [52848:52966](-)
-qualifiers:
-
-type: CDS
-location: [56030:56153](-)
-qualifiers:
-
 
 type: gene
 location: [70719:75241](-)
@@ -1862,31 +1197,6 @@ qualifiers:
     Key: note, Value: ["/prediction=(method:''genefinder'', version:''084'', score:''41.82''); /prediction=(method:''genscan'', version:''1.0'')"]
     Key: protein_id, Value: ['CAB72287.1']
     Key: translation, Value: ['MANSKVVAHDESLQGINDSEWQLMGDDIDDGLLDDVDETLKPMETKSEEEDLPTGNWFSQSVHRVRRSINRLFGSDDNQERGRRQQRERSQRNRDAINRQKELRRRQKEDHNRWKQMRMERQLEKQRLVKRTNHVVFNRATDPRKRASDLYDENEASGYHEEDTTLYRTYFVVNEPYDNEYRDRESVQFQNLQKLLDDDLRNFFHSNYEGNDDEEQEIRSTLERVEPTNDNFKIRVQLRIELPTSVNDFGSKLQQQLNVYNRIENLSAATDGVFSFTESSDIEEEAIDVTLPQEEVEGSGSDDSSCRGDATFTCPRSGKTICDEMRCDREIQCPDGEDEEYCNYPNVCTEDQFKCDDKCLELKKRCDGSIDCLDQTDEAGCINAPEPEPEPEPEPEPEPESEPEAEPEPEPEPEPESEPEQEPEPQVPEANGKFY']
-Sub-Features
-type: CDS
-location: [70719:70988](-)
-qualifiers:
-
-type: CDS
-location: [71423:71621](-)
-qualifiers:
-
-type: CDS
-location: [72604:72768](-)
-qualifiers:
-
-type: CDS
-location: [72838:73016](-)
-qualifiers:
-
-type: CDS
-location: [73085:73559](-)
-qualifiers:
-
-type: CDS
-location: [75216:75241](-)
-qualifiers:
-
 
 type: gene
 location: [121866:127124](+)
@@ -1902,43 +1212,6 @@ qualifiers:
     Key: note, Value: ["/prediction=(method:''genscan'', version:''1.0'', score:''174.91''); /prediction=(method:''genefinder'', version:''084''); /match=(desc:''PROBABLE G PROTEIN-COUPLED RECEPTOR C13B9.4 IN CHROMOSOME III'', species:''Caenorhabditis elegans'', ranges:(query:123671..123775, target:SWISS-PROT::Q09460:107..141, score:''80.00''), (query:123743..123829, target:SWISS-PROT::Q09460:235..263, score:''72.00''), (query:124072..124332, target:SWISS-PROT::Q09460:265..351, score:''1 [...]
     Key: protein_id, Value: ['CAB72288.1']
     Key: translation, Value: ['MGAGNRKSETKTKTEAEIEIEMERDQFSIAANACMSMGPMLISKDKAPCSGGRVRHADSLHIYYAVDGKMTLLSNILDCGGCISAQRFTRLLRQSGSSGPSPSAPTAGTFESKSMLEPTSSHSLATGRVPLLHDFDASTTESPGTYVLDGVARVAQLALEPTVMDALPDSDTEQVLGNLNSSAPWNLTLASAAATNFENCSALFVNYTLPQTEFAIRKCELDGRWGSRPNATEVNPPGWTDYGPCYKPEIIRLMQQMGSKDFDAYIDIARRTRTLEIVGLCLSLFALIVSLLIFCTFRSLRNNRTKIHKNLFVAMVLQVIIRLTLYLDQFRRGNKEAATNTSLSVIENTPYLCEASYVLLEYARTAMFMWMFIEGLYLHNMVTVAVFQGSFPLKFFSRLGWCVPILMTTVWARCTVMYMDTSLGECLWNYNLTPYYWILEGPRLAVILLNFCFLVNIIRVL [...]
-Sub-Features
-type: CDS
-location: [121866:122046](+)
-qualifiers:
-
-type: CDS
-location: [122173:122630](+)
-qualifiers:
-
-type: CDS
-location: [123671:123823](+)
-qualifiers:
-
-type: CDS
-location: [124062:124320](+)
-qualifiers:
-
-type: CDS
-location: [124391:124688](+)
-qualifiers:
-
-type: CDS
-location: [124754:125018](+)
-qualifiers:
-
-type: CDS
-location: [125093:125254](+)
-qualifiers:
-
-type: CDS
-location: [125316:125576](+)
-qualifiers:
-
-type: CDS
-location: [126792:127124](+)
-qualifiers:
-
 
 type: gene
 location: [128488:129414](-)
@@ -1954,23 +1227,6 @@ qualifiers:
     Key: note, Value: ["/prediction=(method:''genefinder'', version:''084'', score:''61.35''); /prediction=(method:''genscan'', version:''1.0''); /match=(desc:''VACUOLAR PROTON-ATPASE SUBUNIT D'', species:''Oryctolagus cuniculus (Rabbit)'', ranges:(query:129190..129324, target:SPTREMBL::O97755:55..11, score:''130.00''), (query:128778..129176, target:SPTREMBL::O97755:174..42, score:''472.00''), (query:128546..128716, target:SPTREMBL::O97755:231..175, score:''169.00'')), method:''blastx'', [...]
     Key: protein_id, Value: ['CAB72289.1']
     Key: translation, Value: ['MAAKDRLPIFPSRGAQTLMKSRLAGATKGHGLLKKKADALQMRFRLILGKIIETKTLMGQVMKEAAFSLAEVKFTTGDINQIVLQNVTKAQIKIRTKKDNVAGVTLPIFEPYTDGVDTYELAGLARGGQQLAKLKKNYQSAVRLLVQLASLQTSFVTLDDVIKVTNRRVNAIEHVIIPRINRTIEYIISELDELEREEFYRLKKIQDKKREARKASDKLRAEQRLLGQMAEAQEVQNILDEDGDEDLLF']
-Sub-Features
-type: CDS
-location: [128488:128715](-)
-qualifiers:
-
-type: CDS
-location: [128776:129140](-)
-qualifiers:
-
-type: CDS
-location: [129195:129313](-)
-qualifiers:
-
-type: CDS
-location: [129373:129414](-)
-qualifiers:
-
 
 type: gene
 location: [132239:132926](+)
@@ -2001,23 +1257,6 @@ qualifiers:
     Key: note, Value: ["/prediction=(method:''genscan'', version:''1.0'', score:''119.22''); /prediction=(method:''genefinder'', version:''084''); /match=(desc:''LD41675.5prime LD Drosophila melanogaster embryo pOT2 Drosophila melanogaster cDNA clone LD41675 5prime, mRNA sequence'', species:''Drosophila melanogaster (fruit fly)'', ranges:(query:134192..134531, target:EMBL::AI515958:340..1, score:''1691.00''), (query:133879..134139, target:EMBL::AI515958:591..331, score:''1305.00'')), met [...]
     Key: protein_id, Value: ['CAB72291.1']
     Key: translation, Value: ['MNGLPPSKHYNLTHYQQRYNWDCGLSCIIMILSAQQREQLLGNFDAVCGEEGFGSSTWTIDLCYLLMRYQVRHEYFTQTLGIDPNYAQHTYYSKIIDKDERRVTRKFKDARAHGLRVEQRTVDMEVILRHLARHGPVILLTNASLLTCEVCKRNVLEKFGYAGHYVVLCGYDMAAQKLFYHNPEVHDGHICRCLIESMDTARRAYGTDEDIIFIYEKKETRE']
-Sub-Features
-type: CDS
-location: [133491:133595](-)
-qualifiers:
-
-type: CDS
-location: [133662:133748](-)
-qualifiers:
-
-type: CDS
-location: [133866:134135](-)
-qualifiers:
-
-type: CDS
-location: [134197:134407](-)
-qualifiers:
-
 
 type: gene
 location: [135478:136829](+)
@@ -2033,19 +1272,6 @@ qualifiers:
     Key: note, Value: ["/prediction=(method:''genefinder'', version:''084'', score:''66.07''); /prediction=(method:''genscan'', version:''1.0'', score:''145.64''); /match=(desc:''HYPOTHETICAL 40.4 KD TRP-ASP REPEATS CONTAINING PROTEIN C14B1.4 IN CHROMOSOME III'', species:''Caenorhabditis elegans'', ranges:(query:135548..135748, target:SWISS-PROT::Q17963:39..105, score:''120.00''), (query:135957..136586, target:SWISS-PROT::Q17963:105..314, score:''899.00''), (query:136641..136823, target: [...]
     Key: protein_id, Value: ['CAB72292.1']
     Key: translation, Value: ['MVPIGAVHGGHPGVVHPPQQPLPTAPSGPNSLQPNSVGQPGATTSSNSSASNKSSLSVKPNYTLKFTLAGHTKAVSAVKFSPNGEWLASSSADKLIKIWGAYDGKFEKTISGHKLGISDVAWSSDSRLLVSGSDDKTLKVWELSTGKSLKTLKGHSNYVFCCNFNPQSNLIVSGSFDESVRIWDVRTGKCLKTLPAHSDPVSAVHFNRDGSLIVSSSYDGLCRIWDTASGQCLKTLIDDDNPPVSFVKFSPNGKYILAATLDNTLKLWDYSKGKCLKTYTGHKNEKYCIFANFSVTGGKWIVSGSEDNMVYIWNLQSKEVVQKLQGHTDTVLCTACHPTENIIASAALENDKTIKLWKSDT']
-Sub-Features
-type: CDS
-location: [135478:135749](+)
-qualifiers:
-
-type: CDS
-location: [135960:136586](+)
-qualifiers:
-
-type: CDS
-location: [136640:136829](+)
-qualifiers:
-
 
 type: gene
 location: [145402:147087](+)
@@ -2060,15 +1286,6 @@ qualifiers:
     Key: gene, Value: ['EG:BACR25B3.8']
     Key: protein_id, Value: ['CAB72293.1']
     Key: translation, Value: ['MNSTTKHLLHCTLLITVIVTFEVFSGGIKIDENSFTLVDPWTEYGQLATVLLYLLRFLTLLTLPQVLFNFCGLVFYNAFPEKVVLKGSPLLAPFICIRVVTRGDFPDLVKTNVLRNMNTCLDTGLENFLIEVVTDKAVNLSQHRRIREIVVPKEYKTRTGALFKSRALQYCLEDNVNVLNDSDWIVHLDEETLLTENSVRGIINFVLDGKHPFGQGLITYANENVVNWLTTLADSFRVSDDMGKLRLQFKLFHKPLFSWKGSYVVTQVSAERSVSFDNGIDGSVAEDCFFAMRAFSQGYTFNFIEGEMYEKSPFTLLDFLQQRKRWLQGILLVVHSKMIPFKHKLLLGISVYSWVTMPLSTSNIIFAALYPIPCPNLVDFVCAFIAAINIYMYVFGVIKSFSLYRFGLFRFLACVLGAVCTIPVNVVIENVAVIWGLVGKKHKFYVVQKDVRVLETV']
-Sub-Features
-type: CDS
-location: [145402:146203](+)
-qualifiers:
-
-type: CDS
-location: [146514:147087](+)
-qualifiers:
-
 
 type: gene
 location: [148859:152785](-)
@@ -2084,67 +1301,20 @@ qualifiers:
     Key: note, Value: ["/prediction=(method:''genscan'', version:''1.0''); /prediction=(method:''genefinder'', version:''084''); /match=(desc:''HYPOTHETICAL 135.8 KD PROTEIN'', species:''Drosophila melanogaster (Fruit fly)'', ranges:(query:152096..152785, target:SPTREMBL::Q9XZ29:230..1, score:''1147.00''), (query:151882..152043, target:SPTREMBL::Q9XZ29:277..224, score:''250.00''), (query:149546..151816, target:SPTREMBL::Q9XZ29:1032..276, score:''3735.00''), (query:148953..149465, target: [...]
     Key: protein_id, Value: ['CAB72294.1']
     Key: translation, Value: ['MSSEDPSCVAVALRVRPLVQSELDRGCRIAVERSADGAPQVTVNRNESYTYNYVFDIDDSQKDLFETCVQAKVKKLLNGYNVTILAYGQTGSGKTYTMGTAFNGVLDDHVGVIPRAVHDIFTAIAEMQSEFRFAVTCSFVELYQEQFYDLFSSKTRDKATVDIREVKNRIIMPGLTELVVTSAQQVTDHLIRGSAGRAVAATAMNETSSRSHAIFTLTLVATKLDGKQSVTTSRFNLVDLAGSERCSKTLASGDRFKEGVNINKGLLALGNVINALGSGQAAGYIPYRQSKLTRLLQDSLGGNSITLMIACVSPADYNVAETLSTLRYADRALQIKNKPVVNLDPHAAEVNMLKDVIQKLRVELLSGGKMSSSLISAVGAAGLGAIPCEESLAGSMANAAEIQRLKEQVRTLQDRNRKLQQELHQSLLDLTEKEMRAHIAEQAHDKLRSHVSELKNKLDQR [...]
-Sub-Features
-type: CDS
-location: [148859:148905](-)
-qualifiers:
-
-type: CDS
-location: [148965:149462](-)
-qualifiers:
-
-type: CDS
-location: [149545:151809](-)
-qualifiers:
-
-type: CDS
-location: [151880:152032](-)
-qualifiers:
-
-type: CDS
-location: [152105:152785](-)
-qualifiers:
-
 
 type: gene
 location: join{[153489:154269](+), AL121804.2[40:610](+), AL121804.2[671:1487](+)}
 qualifiers:
     Key: gene, Value: ['EG:BACR7C10.3']
-Sub-Features
-type: gene
-location: [153489:154269](+)
-qualifiers:
-
-type: gene
-location: AL121804.2[40:610](+)
-qualifiers:
-
-type: gene
-location: AL121804.2[671:1487](+)
-qualifiers:
-
 
 type: CDS
 location: join{[153489:154269](+), AL121804.2[40:610](+), AL121804.2[671:1487](+)}
 qualifiers:
     Key: codon_start, Value: ['1']
-    Key: db_xref, Value: ['GI:6946680']
-    Key: gene, Value: ['EG:BACR7C10.3']
-    Key: protein_id, Value: ['CAB72295.1']
-    Key: translation, Value: ['MEEEAPRFNVLEEAFNGNGNGCANVEATQSAILKVLTRVNRFQMRVRKHIEDNYTEFLPNNTSPDIFLEESGSLNREIHDMLENLGSEGLDALDEANVKMAGNGRQLREILLGLGVSEHVLRIDELFQCVEEAKATKDYLVLLDLVGRLRAFIYGDDSVDGDAQVATPEVRRIFKALECYETIKVKYHVQAYMLQQSLQERFDRLVQLQCKSFPTSRCVTLQVSRDQTQLQDIVQALFQEPYNPARLAEFLLDNCIEPVIMRPVMADYSEEADGGTYVRLSLSYATKEPSSAHVRPNYKQVLENLRLLLHTLAGINCSVSRDQHVFGIIGDHVKDKMLKLLVDECLIPAVPESTEEYQTSTLCEDVAQLEQLLVDSFIINPEQDRALGQFVEKYETYYRNRMYRRVLETAREIIQRDLQDMVLVAPNNHSAEVANDPFLFPRCMISKSAQDFVKLMDRILR [...]
-Sub-Features
-type: CDS
-location: [153489:154269](+)
-qualifiers:
-
-type: CDS
-location: AL121804.2[40:610](+)
-qualifiers:
-
-type: CDS
-location: AL121804.2[671:1487](+)
-qualifiers:
-
+    Key: db_xref, Value: ['GI:6946680']
+    Key: gene, Value: ['EG:BACR7C10.3']
+    Key: protein_id, Value: ['CAB72295.1']
+    Key: translation, Value: ['MEEEAPRFNVLEEAFNGNGNGCANVEATQSAILKVLTRVNRFQMRVRKHIEDNYTEFLPNNTSPDIFLEESGSLNREIHDMLENLGSEGLDALDEANVKMAGNGRQLREILLGLGVSEHVLRIDELFQCVEEAKATKDYLVLLDLVGRLRAFIYGDDSVDGDAQVATPEVRRIFKALECYETIKVKYHVQAYMLQQSLQERFDRLVQLQCKSFPTSRCVTLQVSRDQTQLQDIVQALFQEPYNPARLAEFLLDNCIEPVIMRPVMADYSEEADGGTYVRLSLSYATKEPSSAHVRPNYKQVLENLRLLLHTLAGINCSVSRDQHVFGIIGDHVKDKMLKLLVDECLIPAVPESTEEYQTSTLCEDVAQLEQLLVDSFIINPEQDRALGQFVEKYETYYRNRMYRRVLETAREIIQRDLQDMVLVAPNNHSAEVANDPFLFPRCMISKSAQDFVKLMDRILR [...]
 
 DB cross refs []
 ***Record from one_of.gb with the FeatureParser
@@ -2190,7 +1360,7 @@ Key: source
 Value: human
 Key: taxonomy
 Value: ['Eukaryota', 'Metazoa', 'Chordata', 'Craniata', 'Vertebrata', 'Euteleostomi', 'Mammalia', 'Eutheria', 'Primates', 'Catarrhini', 'Hominidae', 'Homo']
-Feaures
+Features
 type: source
 location: [0:2509](+)
 qualifiers:
@@ -2210,31 +1380,6 @@ type: gene
 location: join{[1887:2509](+), U18267.1[0:270](+), U18268.1[0:309](+), U18270.1[0:6905](+), U18269.1[0:128](+), U18271.1[0:3234](+)}
 qualifiers:
     Key: gene, Value: ['TMPO']
-Sub-Features
-type: gene
-location: [1887:2509](+)
-qualifiers:
-
-type: gene
-location: U18267.1[0:270](+)
-qualifiers:
-
-type: gene
-location: U18268.1[0:309](+)
-qualifiers:
-
-type: gene
-location: U18270.1[0:6905](+)
-qualifiers:
-
-type: gene
-location: U18269.1[0:128](+)
-qualifiers:
-
-type: gene
-location: U18271.1[0:3234](+)
-qualifiers:
-
 
 type: exon
 location: [one-of(1887,1900):2479](+)
@@ -2251,27 +1396,6 @@ qualifiers:
     Key: product, Value: ['thymopoietin beta']
     Key: protein_id, Value: ['AAB60434.1']
     Key: translation, Value: ['MPEFLEDPSVLTKDKLKSELVANNVTLPAGEQRKDVYVQLYLQHLTARNRPPLPAGTNSKGPPDFSSDEEREPTPVLGSGAAAAGRSRAAVGRKATKKTDKPRQEDKDDLDVTELTNEDLLDQLVKYGVNPGPIVGTTRKLYEKKLLKLREQGTESRSSTPLPTISSSAENTRQNGSNDSDRYSDNEEDSKIELKLEKREPLKGRAKTPVTLKQRRVEHNQSYSQAGITETEWTSGS']
-Sub-Features
-type: CDS
-location: [2200:2479](+)
-qualifiers:
-
-type: CDS
-location: U18267.1[119:246](+)
-qualifiers:
-
-type: CDS
-location: U18268.1[129:288](+)
-qualifiers:
-
-type: CDS
-location: U18270.1[4690:4788](+)
-qualifiers:
-
-type: CDS
-location: U18269.1[81:>128](+)
-qualifiers:
-
 
 type: CDS
 location: join{[2200:2479](+), U18267.1[119:246](+), U18268.1[129:288](+), U18270.1[38:1558](+)}
@@ -2282,23 +1406,6 @@ qualifiers:
     Key: product, Value: ['thymopoietin alpha']
     Key: protein_id, Value: ['AAB60433.1']
     Key: translation, Value: ['MPEFLEDPSVLTKDKLKSELVANNVTLPAGEQRKDVYVQLYLQHLTARNRPPLPAGTNSKGPPDFSSDEEREPTPVLGSGAAAAGRSRAAVGRKATKKTDKPRQEDKDDLDVTELTNEDLLDQLVKYGVNPGPIVGTTRKLYEKKLLKLREQGTESRSSTPLPTISSSAENTRQNGSNDSDRYSDNEEGKKKEHKKVKSTRDIVPFSELGTTPSGGGFFQGISFPEISTRPPLGSTELQAAKKVHTSKGDLPREPLVATNLPGRGQLQKLASERNLFISCKSSHDRCLEKSSSSSSQPEHSAMLVSTAASPSLIKETTTGYYKDIVENICGREKSGIQPLCPERSHISDQSPLSSKRKALEESESSQLISPPLAQAIRDYVNSLLVQGGVGSLPGTSNSMPPLDVENIQKRIDQSKFQETEFLSPPRKVPRLSEKSVEERDSGSFVAFQNIPGSELMSSFA [...]
-Sub-Features
-type: CDS
-location: [2200:2479](+)
-qualifiers:
-
-type: CDS
-location: U18267.1[119:246](+)
-qualifiers:
-
-type: CDS
-location: U18268.1[129:288](+)
-qualifiers:
-
-type: CDS
-location: U18270.1[38:1558](+)
-qualifiers:
-
 
 DB cross refs []
 ***Record from NT_019265.gb with the FeatureParser
@@ -2342,7 +1449,7 @@ Key: source
 Value: human
 Key: taxonomy
 Value: ['Eukaryota', 'Metazoa', 'Chordata', 'Craniata', 'Vertebrata', 'Euteleostomi', 'Mammalia', 'Eutheria', 'Primates', 'Catarrhini', 'Hominidae', 'Homo']
-Feaures
+Features
 type: source
 location: [0:1250660](+)
 qualifiers:
@@ -2377,67 +1484,6 @@ qualifiers:
     Key: gene, Value: ['FLJ10737']
     Key: product, Value: ['hypothetical protein FLJ10737']
     Key: transcript_id, Value: ['XM_057697.1']
-Sub-Features
-type: mRNA
-location: [342429:342515](+)
-qualifiers:
-
-type: mRNA
-location: [363170:363300](+)
-qualifiers:
-
-type: mRNA
-location: [365740:365814](+)
-qualifiers:
-
-type: mRNA
-location: [376397:376499](+)
-qualifiers:
-
-type: mRNA
-location: [390168:390297](+)
-qualifiers:
-
-type: mRNA
-location: [391256:391379](+)
-qualifiers:
-
-type: mRNA
-location: [392605:392679](+)
-qualifiers:
-
-type: mRNA
-location: [398229:398419](+)
-qualifiers:
-
-type: mRNA
-location: [399081:399167](+)
-qualifiers:
-
-type: mRNA
-location: [399533:399650](+)
-qualifiers:
-
-type: mRNA
-location: [405843:405913](+)
-qualifiers:
-
-type: mRNA
-location: [406703:406761](+)
-qualifiers:
-
-type: mRNA
-location: [406867:407010](+)
-qualifiers:
-
-type: mRNA
-location: [407961:408091](+)
-qualifiers:
-
-type: mRNA
-location: [408507:409092](+)
-qualifiers:
-
 
 DB cross refs []
 ***Record from origin_line.gb with the FeatureParser
@@ -2480,7 +1526,9 @@ Key: source
 Value: Mesorhizobium loti
 Key: taxonomy
 Value: ['Bacteria', 'Proteobacteria', 'alpha subdivision', 'Rhizobiaceae group', 'Phyllobacteriaceae', 'Mesorhizobium']
-Feaures
+Key: topology
+Value: circular
+Features
 type: source
 location: [0:180](+)
 qualifiers:
@@ -2561,7 +1609,9 @@ Key: source
 Value: human
 Key: taxonomy
 Value: ['Eukaryota', 'Metazoa', 'Chordata', 'Craniata', 'Vertebrata', 'Euteleostomi', 'Mammalia', 'Eutheria', 'Primates', 'Catarrhini', 'Hominidae', 'Homo']
-Feaures
+Key: topology
+Value: linear
+Features
 type: source
 location: [0:360]
 qualifiers:
@@ -2632,7 +1682,9 @@ Key: source
 Value: Tunisian scorpion
 Key: taxonomy
 Value: ['Eukaryota', 'Metazoa', 'Arthropoda', 'Chelicerata', 'Arachnida', 'Scorpiones', 'Buthoidea', 'Buthidae', 'Buthus']
-Feaures
+Key: topology
+Value: linear
+Features
 type: source
 location: [0:64]
 qualifiers:
@@ -2649,60 +1701,24 @@ location: bond{[11:12], [62:63]}
 qualifiers:
     Key: bond_type, Value: ['disulfide']
     Key: note, Value: ['BY SIMILARITY.']
-Sub-Features
-type: Bond
-location: [11:12]
-qualifiers:
-
-type: Bond
-location: [62:63]
-qualifiers:
-
 
 type: Bond
 location: bond{[15:16], [35:36]}
 qualifiers:
     Key: bond_type, Value: ['disulfide']
     Key: note, Value: ['BY SIMILARITY.']
-Sub-Features
-type: Bond
-location: [15:16]
-qualifiers:
-
-type: Bond
-location: [35:36]
-qualifiers:
-
 
 type: Bond
 location: bond{[21:22], [45:46]}
 qualifiers:
     Key: bond_type, Value: ['disulfide']
     Key: note, Value: ['BY SIMILARITY.']
-Sub-Features
-type: Bond
-location: [21:22]
-qualifiers:
-
-type: Bond
-location: [45:46]
-qualifiers:
-
 
 type: Bond
 location: bond{[25:26], [47:48]}
 qualifiers:
     Key: bond_type, Value: ['disulfide']
     Key: note, Value: ['BY SIMILARITY.']
-Sub-Features
-type: Bond
-location: [25:26]
-qualifiers:
-
-type: Bond
-location: [47:48]
-qualifiers:
-
 
 type: Site
 location: [63:64]
@@ -2751,7 +1767,9 @@ Key: source
 Value: Feline panleukopenia virus
 Key: taxonomy
 Value: ['Viruses', 'ssDNA viruses', 'Parvoviridae', 'Parvovirinae', 'Parvovirus']
-Feaures
+Key: topology
+Value: linear
+Features
 type: source
 location: [0:2007](+)
 qualifiers:
@@ -2812,7 +1830,9 @@ Key: source
 Value: Feline panleukopenia virus
 Key: taxonomy
 Value: ['Viruses', 'ssDNA viruses', 'Parvoviridae', 'Parvovirinae', 'Parvovirus']
-Feaures
+Key: topology
+Value: linear
+Features
 type: source
 location: [0:2007](+)
 qualifiers:
@@ -2873,7 +1893,9 @@ Key: source
 Value: Feline panleukopenia virus
 Key: taxonomy
 Value: ['Viruses', 'ssDNA viruses', 'Parvoviridae', 'Parvovirinae', 'Parvovirus']
-Feaures
+Key: topology
+Value: linear
+Features
 type: source
 location: [0:1755](+)
 qualifiers:
@@ -2955,7 +1977,9 @@ Key: source
 Value: Yersinia pestis biovar Microtus str. 91001
 Key: taxonomy
 Value: ['Bacteria', 'Proteobacteria', 'Gammaproteobacteria', 'Enterobacteriales', 'Enterobacteriaceae', 'Yersinia']
-Feaures
+Key: topology
+Value: circular
+Features
 type: source
 location: [0:9609](+)
 qualifiers:
@@ -3054,15 +2078,6 @@ qualifiers:
     Key: db_xref, Value: ['CDD:99707']
     Key: locus_tag, Value: ['YP_pPCP02']
     Key: note, Value: ['ATP binding site [chemical binding]; other site']
-Sub-Features
-type: misc_feature
-location: [1435:1459](+)
-qualifiers:
-
-type: misc_feature
-location: [1618:1621](+)
-qualifiers:
-
 
 type: misc_feature
 location: [1606:1624](+)
@@ -3324,7 +2339,9 @@ Key: source
 Value: Streptomyces avermitilis
 Key: taxonomy
 Value: ['Bacteria', 'Actinobacteria', 'Actinobacteridae', 'Actinomycetales', 'Streptomycineae', 'Streptomycetaceae', 'Streptomyces']
-Feaures
+Key: topology
+Value: linear
+Features
 type: source
 location: [0:6497](+)
 qualifiers:
@@ -3357,7 +2374,9 @@ Key: source
 Value: Streptomyces avermitilis
 Key: taxonomy
 Value: ['Bacteria', 'Actinobacteria', 'Actinobacteridae', 'Actinomycetales', 'Streptomycineae', 'Streptomycetaceae', 'Streptomyces']
-Feaures
+Key: topology
+Value: linear
+Features
 type: source
 location: [0:6497](+)
 qualifiers:
@@ -3390,7 +2409,7 @@ Key: source
 Value: Streptomyces avermitilis
 Key: taxonomy
 Value: ['Bacteria', 'Actinobacteria', 'Actinobacteridae', 'Actinomycetales', 'Streptomycineae', 'Streptomycetaceae', 'Streptomyces']
-Feaures
+Features
 type: source
 location: [0:6497](+)
 qualifiers:
@@ -3423,7 +2442,9 @@ Key: source
 Value: Streptomyces avermitilis
 Key: taxonomy
 Value: ['Bacteria', 'Actinobacteria', 'Actinobacteridae', 'Actinomycetales', 'Streptomycineae', 'Streptomycetaceae', 'Streptomyces']
-Feaures
+Key: topology
+Value: linear
+Features
 type: source
 location: [0:6497](+)
 qualifiers:
@@ -3457,7 +2478,9 @@ Key: source
 Value: Streptomyces avermitilis
 Key: taxonomy
 Value: ['Bacteria', 'Actinobacteria', 'Actinobacteridae', 'Actinomycetales', 'Streptomycineae', 'Streptomycetaceae', 'Streptomyces']
-Feaures
+Key: topology
+Value: linear
+Features
 type: source
 location: [0:6497](+)
 qualifiers:
@@ -3517,7 +2540,9 @@ Key: source
 Value: Escherichia coli
 Key: taxonomy
 Value: ['Bacteria', 'Proteobacteria', 'Gammaproteobacteria', 'Enterobacteriales', 'Enterobacteriaceae', 'Escherichia']
-Feaures
+Key: topology
+Value: linear
+Features
 type: source
 location: [0:375]
 qualifiers:
@@ -3543,43 +2568,6 @@ qualifiers:
     Key: db_xref, Value: ['CDD:153108']
     Key: note, Value: ['dimer interface [polypeptide binding]']
     Key: site_type, Value: ['other']
-Sub-Features
-type: Site
-location: [36:37]
-qualifiers:
-
-type: Site
-location: [43:44]
-qualifiers:
-
-type: Site
-location: [108:110]
-qualifiers:
-
-type: Site
-location: [112:113]
-qualifiers:
-
-type: Site
-location: [115:117]
-qualifiers:
-
-type: Site
-location: [119:120]
-qualifiers:
-
-type: Site
-location: [122:123]
-qualifiers:
-
-type: Site
-location: [136:138]
-qualifiers:
-
-type: Site
-location: [140:141]
-qualifiers:
-
 
 type: Site
 location: order{[47:48], [83:84], [114:115], [117:118], [121:122], [235:237], [240:241]}
@@ -3587,35 +2575,6 @@ qualifiers:
     Key: db_xref, Value: ['CDD:153108']
     Key: note, Value: ['putative radical transfer pathway']
     Key: site_type, Value: ['other']
-Sub-Features
-type: Site
-location: [47:48]
-qualifiers:
-
-type: Site
-location: [83:84]
-qualifiers:
-
-type: Site
-location: [114:115]
-qualifiers:
-
-type: Site
-location: [117:118]
-qualifiers:
-
-type: Site
-location: [121:122]
-qualifiers:
-
-type: Site
-location: [235:237]
-qualifiers:
-
-type: Site
-location: [240:241]
-qualifiers:
-
 
 type: SecStr
 location: [56:65]
@@ -3635,53 +2594,11 @@ qualifiers:
     Key: db_xref, Value: ['CDD:153108']
     Key: note, Value: ['diiron center [ion binding]']
     Key: site_type, Value: ['other']
-Sub-Features
-type: Site
-location: [83:84]
-qualifiers:
-
-type: Site
-location: [114:115]
-qualifiers:
-
-type: Site
-location: [117:118]
-qualifiers:
-
-type: Site
-location: [203:204]
-qualifiers:
-
-type: Site
-location: [237:238]
-qualifiers:
-
-type: Site
-location: [240:241]
-qualifiers:
-
 
 type: Het
 location: join{[83:84], [114:115], [117:118], [237:238]}
 qualifiers:
     Key: heterogen, Value: ['( MN,1000 )']
-Sub-Features
-type: Het
-location: [83:84]
-qualifiers:
-
-type: Het
-location: [114:115]
-qualifiers:
-
-type: Het
-location: [117:118]
-qualifiers:
-
-type: Het
-location: [237:238]
-qualifiers:
-
 
 type: SecStr
 location: [101:129]
@@ -3693,23 +2610,6 @@ type: Het
 location: join{[114:115], [203:204], [237:238], [240:241]}
 qualifiers:
     Key: heterogen, Value: ['( MN,1001 )']
-Sub-Features
-type: Het
-location: [114:115]
-qualifiers:
-
-type: Het
-location: [203:204]
-qualifiers:
-
-type: Het
-location: [237:238]
-qualifiers:
-
-type: Het
-location: [240:241]
-qualifiers:
-
 
 type: Site
 location: [121:122]
@@ -3758,15 +2658,6 @@ type: Het
 location: join{[193:194], [271:272]}
 qualifiers:
     Key: heterogen, Value: ['( HG,1003 )']
-Sub-Features
-type: Het
-location: [193:194]
-qualifiers:
-
-type: Het
-location: [271:272]
-qualifiers:
-
 
 type: Het
 location: [195:196]
@@ -3777,33 +2668,11 @@ type: Het
 location: join{[195:196], [195:196]}
 qualifiers:
     Key: heterogen, Value: ['( HG,1002 )']
-Sub-Features
-type: Het
-location: [195:196]
-qualifiers:
-
-type: Het
-location: [195:196]
-qualifiers:
-
 
 type: Het
 location: join{[209:210], [213:214], [213:214]}
 qualifiers:
     Key: heterogen, Value: ['( HG,1004 )']
-Sub-Features
-type: Het
-location: [209:210]
-qualifiers:
-
-type: Het
-location: [213:214]
-qualifiers:
-
-type: Het
-location: [213:214]
-qualifiers:
-
 
 type: SecStr
 location: [224:253]
@@ -3821,15 +2690,6 @@ type: Bond
 location: bond{[267:268], [271:272]}
 qualifiers:
     Key: bond_type, Value: ['disulfide']
-Sub-Features
-type: Bond
-location: [267:268]
-qualifiers:
-
-type: Bond
-location: [271:272]
-qualifiers:
-
 
 type: SecStr
 location: [269:285]
@@ -3841,23 +2701,6 @@ type: Het
 location: join{[283:284], [304:305], [308:309], [304:305]}
 qualifiers:
     Key: heterogen, Value: ['( HG,1006 )']
-Sub-Features
-type: Het
-location: [283:284]
-qualifiers:
-
-type: Het
-location: [304:305]
-qualifiers:
-
-type: Het
-location: [308:309]
-qualifiers:
-
-type: Het
-location: [304:305]
-qualifiers:
-
 
 type: SecStr
 location: [300:319]
diff --git a/Tests/output/test_SeqIO b/Tests/output/test_SeqIO
index 55b6136..7ecd492 100644
--- a/Tests/output/test_SeqIO
+++ b/Tests/output/test_SeqIO
@@ -486,7 +486,7 @@ Testing reading fasta format file Fasta/loveliesbleeding.pro
  Checking can write/read as 'fastq-solexa' format
  Failed: No suitable quality scores found in letter_annotations of SeqRecord (id=gi|2781234|pdb|1JLY|B).
  Checking can write/read as 'genbank' format
- Failed: Locus identifier 'gi|2781234|pdb|1JLY|B' is too long
+ Failed: Need a Nucleotide or Protein alphabet
  Checking can write/read as 'imgt' format
  Failed: Need a DNA, RNA or Protein alphabet
  Checking can write/read as 'phd' format
@@ -582,7 +582,7 @@ Testing reading fasta format file Fasta/f001
  Checking can write/read as 'fastq-solexa' format
  Failed: No suitable quality scores found in letter_annotations of SeqRecord (id=gi|3318709|pdb|1A91|).
  Checking can write/read as 'genbank' format
- Failed: Locus identifier 'gi|3318709|pdb|1A91|' is too long
+ Failed: Need a Nucleotide or Protein alphabet
  Checking can write/read as 'imgt' format
  Failed: Need a DNA, RNA or Protein alphabet
  Checking can write/read as 'phd' format
@@ -3186,7 +3186,7 @@ Testing reading emboss format file Emboss/needle.txt
  Checking can write/read as 'fastq-solexa' format
  Failed: No suitable quality scores found in letter_annotations of SeqRecord (id=gi|94970041|receiver).
  Checking can write/read as 'genbank' format
- Failed: Locus identifier 'gi|94970041|receiver' is too long
+ Failed: Need a Nucleotide or Protein alphabet
  Checking can write/read as 'imgt' format
  Failed: Need a DNA, RNA or Protein alphabet
  Checking can write/read as 'phd' format
@@ -3265,7 +3265,7 @@ Testing reading phd format file Phd/phd1
  Checking can write/read as 'fastq-illumina' format
  Checking can write/read as 'fastq-solexa' format
  Checking can write/read as 'genbank' format
- Failed: Locus identifier '425_7_(71-A03-19).b.ab1' is too long
+ Failed: Locus identifier '425_103_(81-A03-19).g.ab1' is too long
  Checking can write/read as 'imgt' format
  Checking can write/read as 'phd' format
  Checking can write/read as 'qual' format
@@ -3315,7 +3315,6 @@ Testing reading phd format file Phd/phd_solexa
  Checking can write/read as 'fastq-illumina' format
  Checking can write/read as 'fastq-solexa' format
  Checking can write/read as 'genbank' format
- Failed: Locus identifier 'HWI-EAS94_4_1_1_602_99' is too long
  Checking can write/read as 'imgt' format
  Checking can write/read as 'phd' format
  Checking can write/read as 'qual' format
@@ -3339,7 +3338,6 @@ Testing reading phd format file Phd/phd_454
  Checking can write/read as 'fastq-illumina' format
  Checking can write/read as 'fastq-solexa' format
  Checking can write/read as 'genbank' format
- Failed: Locus identifier 'EBE03TV04IHLTF.77-243' is too long
  Checking can write/read as 'imgt' format
  Checking can write/read as 'phd' format
  Checking can write/read as 'qual' format
@@ -3785,7 +3783,7 @@ Testing reading fasta format file Quality/example.fasta as an alignment
  Checking can write/read as 'fastq-solexa' format
  Failed: No suitable quality scores found in letter_annotations of SeqRecord (id=EAS54_6_R1_2_1_443_348).
  Checking can write/read as 'genbank' format
- Failed: Locus identifier 'EAS54_6_R1_2_1_443_348' is too long
+ Failed: Need a Nucleotide or Protein alphabet
  Checking can write/read as 'imgt' format
  Failed: Need a DNA, RNA or Protein alphabet
  Checking can write/read as 'phd' format
@@ -3820,7 +3818,7 @@ Testing reading qual format file Quality/example.qual
  Checking can write/read as 'fastq-illumina' format
  Checking can write/read as 'fastq-solexa' format
  Checking can write/read as 'genbank' format
- Failed: Locus identifier 'EAS54_6_R1_2_1_443_348' is too long
+ Failed: Need a Nucleotide or Protein alphabet
  Checking can write/read as 'imgt' format
  Failed: Need a DNA, RNA or Protein alphabet
  Checking can write/read as 'phd' format
@@ -3861,7 +3859,7 @@ Testing reading fastq format file Quality/example.fastq as an alignment
  Checking can write/read as 'fastq-illumina' format
  Checking can write/read as 'fastq-solexa' format
  Checking can write/read as 'genbank' format
- Failed: Locus identifier 'EAS54_6_R1_2_1_443_348' is too long
+ Failed: Need a Nucleotide or Protein alphabet
  Checking can write/read as 'imgt' format
  Failed: Need a DNA, RNA or Protein alphabet
  Checking can write/read as 'phd' format
@@ -3902,7 +3900,7 @@ Testing reading fastq format file Quality/example_dos.fastq as an alignment
  Checking can write/read as 'fastq-illumina' format
  Checking can write/read as 'fastq-solexa' format
  Checking can write/read as 'genbank' format
- Failed: Locus identifier 'EAS54_6_R1_2_1_443_348' is too long
+ Failed: Need a Nucleotide or Protein alphabet
  Checking can write/read as 'imgt' format
  Failed: Need a DNA, RNA or Protein alphabet
  Checking can write/read as 'phd' format
@@ -4054,7 +4052,7 @@ Testing reading fastq-solexa format file Quality/solexa_faked.fastq
  Checking can write/read as 'fastq-illumina' format
  Checking can write/read as 'fastq-solexa' format
  Checking can write/read as 'genbank' format
- Failed: Locus identifier 'slxa_0001_1_0001_01' is too long
+ Failed: Need a Nucleotide or Protein alphabet
  Checking can write/read as 'imgt' format
  Failed: Need a DNA, RNA or Protein alphabet
  Checking can write/read as 'phd' format
@@ -4137,7 +4135,6 @@ Testing reading seqxml format file SeqXML/dna_example.xml
  Checking can write/read as 'fastq-solexa' format
  Failed: No suitable quality scores found in letter_annotations of SeqRecord (id=minimal).
  Checking can write/read as 'genbank' format
- Failed: Locus identifier 'ENSMUSG00000076441' is too long
  Checking can write/read as 'imgt' format
  Checking can write/read as 'phd' format
  Failed: No suitable quality scores found in letter_annotations of SeqRecord (id=minimal).
@@ -4179,7 +4176,7 @@ Testing reading seqxml format file SeqXML/rna_example.xml
  Checking can write/read as 'fastq-solexa' format
  Failed: No suitable quality scores found in letter_annotations of SeqRecord (id=empty description).
  Checking can write/read as 'genbank' format
- Failed: Locus identifier 'empty description' is too long
+ Failed: Invalid whitespace in 'empty description' for LOCUS line
  Checking can write/read as 'imgt' format
  Failed: Cannot have spaces in EMBL accession, 'empty description'
  Checking can write/read as 'phd' format
@@ -4221,7 +4218,6 @@ Testing reading seqxml format file SeqXML/protein_example.xml
  Checking can write/read as 'fastq-solexa' format
  Failed: No suitable quality scores found in letter_annotations of SeqRecord (id=UniprotProtein).
  Checking can write/read as 'genbank' format
- Failed: Locus identifier 'ENSMUSP00000099904' is too long
  Checking can write/read as 'imgt' format
  Checking can write/read as 'phd' format
  Failed: No suitable quality scores found in letter_annotations of SeqRecord (id=UniprotProtein).
diff --git a/Tests/seq_tests_common.py b/Tests/seq_tests_common.py
index 79276b7..7d168e3 100644
--- a/Tests/seq_tests_common.py
+++ b/Tests/seq_tests_common.py
@@ -19,9 +19,9 @@ def checksum_summary(record):
         short = str(record.seq)
     else:
         short = str(record.seq)[:19] \
-              + "..." + str(record.seq)[-3:]
+            + "..." + str(record.seq)[-3:]
     return "%s [%s] len %i" \
-           % (short, seguid(record.seq), len(record.seq))
+        % (short, seguid(record.seq), len(record.seq))
 
 
 def compare_reference(old_r, new_r):
@@ -108,7 +108,7 @@ def compare_feature(old_f, new_f):
                              new_f.location.end)
 
     assert isinstance(old_f.location, CompoundLocation) == \
-           isinstance(new_f.location, CompoundLocation)
+        isinstance(new_f.location, CompoundLocation)
     if isinstance(old_f.location, CompoundLocation):
         assert len(old_f.location.parts) == len(new_f.location.parts)
         for old_l, new_l in zip(old_f.location.parts, new_f.location.parts):
@@ -125,56 +125,6 @@ def compare_feature(old_f, new_f):
         assert old_sub.nofuzzy_end == new_sub.nofuzzy_end
         assert old_sub.strand == new_sub.strand
 
-    # Using private variable to avoid deprecation warnings
-    assert len(old_f._sub_features) == len(new_f._sub_features), \
-        "number of sub_features: %s -> %s" % \
-        (len(old_f._sub_features), len(new_f._sub_features))
-
-    for old_sub, new_sub in zip(old_f._sub_features, new_f._sub_features):
-        # These are SeqFeature objects
-        assert old_sub.type == new_sub.type, \
-            "%s -> %s" % (old_sub.type, new_sub.type)
-
-        assert old_sub.strand == new_sub.strand, \
-            "%s -> %s" % (old_sub.strand, new_sub.strand)
-
-        assert old_sub.ref == new_sub.ref, \
-            "%s -> %s" % (old_sub.ref, new_sub.ref)
-
-        assert old_sub.ref_db == new_sub.ref_db, \
-            "%s -> %s" % (old_sub.ref_db, new_sub.ref_db)
-
-        # TODO - Work out how the location_qualifier_value table should
-        # be used, given BioPerl seems to ignore it (Bug 2766)
-        # assert old_sub.location_operator == new_sub.location_operator, \
-        #    "%s -> %s" % (old_sub.location_operator, new_sub.location_operator)
-
-        # Compare sub-feature Locations:
-        #
-        # BioSQL currently does not store fuzzy locations, but instead stores
-        # them as FeatureLocation.nofuzzy_start FeatureLocation.nofuzzy_end.
-        # The vast majority of cases will be comparisons of ExactPosition
-        # class locations, so we'll try that first and catch the exceptions.
-
-        try:
-            assert str(old_sub.location) == str(new_sub.location), \
-               "%s -> %s" % (str(old_sub.location), str(new_sub.location))
-        except AssertionError as e:
-            if isinstance(old_sub.location.start, ExactPosition) and \
-               isinstance(old_sub.location.end, ExactPosition):
-                # Its not a problem with fuzzy locations, re-raise
-                raise e
-            else:
-                # At least one of the locations is fuzzy
-                assert old_sub.location.nofuzzy_start == \
-                       new_sub.location.nofuzzy_start, \
-                       "%s -> %s" % (old_sub.location.nofuzzy_start,
-                                     new_sub.location.nofuzzy_start)
-                assert old_sub.location.nofuzzy_end == \
-                       new_sub.location.nofuzzy_end, \
-                       "%s -> %s" % (old_sub.location.nofuzzy_end,
-                                     new_sub.location.nofuzzy_end)
-
     assert len(old_f.qualifiers) == len(new_f.qualifiers)
     assert set(old_f.qualifiers) == set(new_f.qualifiers)
     for key in old_f.qualifiers:
@@ -291,7 +241,7 @@ def compare_record(old, new):
     # TODO - address these, see Bug 2681?
     new_keys = set(new.annotations).difference(old.annotations)
     new_keys = new_keys.difference(['cross_references', 'date',
-                                    'data_file_division', 'ncbi_taxid', 
+                                    'data_file_division', 'ncbi_taxid',
                                     'gi'])
     assert not new_keys, "Unexpected new annotation keys: %s" \
            % ", ".join(new_keys)
@@ -299,7 +249,7 @@ def compare_record(old, new):
     missing_keys = missing_keys.difference(['ncbi_taxid',  # Can't store chimeras
                                             'structured_comment'])
     assert not missing_keys, "Unexpectedly missing annotation keys: %s" \
-           % ", ".join(missing_keys)
+        % ", ".join(missing_keys)
 
     # In the short term, just compare any shared keys:
     for key in set(old.annotations).intersection(new.annotations):
@@ -331,7 +281,7 @@ def compare_record(old, new):
             # guarantee that they will be identical after a load/retrieve.
             assert isinstance(new.annotations[key], basestring) \
                 or isinstance(new.annotations[key], list)
-        elif type(old.annotations[key]) == type(new.annotations[key]):
+        elif isinstance(old.annotations[key], type(new.annotations[key])):
             assert old.annotations[key] == new.annotations[key], \
                 "Annotation '%s' changed by load/retrieve\nWas:%s\nNow:%s" \
                 % (key, old.annotations[key], new.annotations[key])
diff --git a/Tests/test_AlignIO_ClustalIO.py b/Tests/test_AlignIO_ClustalIO.py
index 687a43f..fc9f04a 100644
--- a/Tests/test_AlignIO_ClustalIO.py
+++ b/Tests/test_AlignIO_ClustalIO.py
@@ -35,7 +35,7 @@ gi|671626|emb|CAA85685.1|           -EKDQCICYVAYPLDLFEEGSVTNMFTSIVGNVFGFKALRALRL
 gi|4959044|gb|AAD34209.1|AF069      VPTTRAQRRA 210
 gi|671626|emb|CAA85685.1|           VAYVKTFQGP 151
                                     *. .:: : .
-"""
+"""  # noqa for pep8 W291 trailing whitespace
 
 # This example is a truncated version of the dataset used here:
 # http://virgil.ruc.dk/kurser/Sekvens/Treedraw.htm
@@ -77,7 +77,7 @@ HISJ_E_COLI                    LKAKKIDAIMSSLSITEKRQQEIAFTDKLYAADSRLV
 HISJ_E_COLI                    LKAKKIDAIMSSLSITEKRQQEIAFTDKLYAADSRLV
                                *.: . *        .  *     *:          :
 
-"""
+"""  # noqa for pep8 W291 trailing whitespace
 
 
 aln_example3 = \
@@ -143,7 +143,7 @@ Test1seq             GCTGGGGATGGAGAGGGAACAGAGTT-
 AT3G20900.1-SEQ      GCTGGGGATGGAGAGGGAACAGAGTAG
 AT3G20900.1-CDS      GCTGGGGATGGAGAGGGAACAGAGTAG
                      *************************  
-"""
+"""  # noqa for pep8 W291 trailing whitespace
 
 aln_example4 = \
 """Kalign (2.0) alignment in ClustalW format
@@ -153,6 +153,7 @@ AT3G20900.1-SEQ      GCTGGGGATGGAGAGGGAACAGAGTAG
 
 """
 
+
 class TestClustalIO(unittest.TestCase):
 
     def test_one(self):
diff --git a/Tests/test_AlignIO_EmbossIO.py b/Tests/test_AlignIO_EmbossIO.py
index 30e20d0..5cb63b1 100644
--- a/Tests/test_AlignIO_EmbossIO.py
+++ b/Tests/test_AlignIO_EmbossIO.py
@@ -104,7 +104,7 @@ IXI_235           82 SRPNRFAPTLMSSCITSTTGPPAWAGDRSHE    112
 #---------------------------------------       
 
 
-"""
+"""  # noqa for pep8 W291 trailing whitespace
 
 pair_example2 = \
 """########################################
@@ -276,7 +276,7 @@ gi|94970041|r     97 AEFLQKPFTSDSLLRKVRAVLQKRQ    121
 #---------------------------------------
 #---------------------------------------
 
-"""
+"""  # noqa for pep8 W291 trailing whitespace
 
 pair_example3 = """########################################
 # Program: needle
@@ -365,7 +365,7 @@ asis             311 -----------------    311
 
 
 #---------------------------------------
-#---------------------------------------"""
+#---------------------------------------"""  # noqa for pep8 W291 trailing whitespace
 
 
 class TestEmbossIO(unittest.TestCase):
diff --git a/Tests/test_BioSQL_MySQLdb.py b/Tests/test_BioSQL_MySQLdb.py
index 2996e0d..f6abf4f 100644
--- a/Tests/test_BioSQL_MySQLdb.py
+++ b/Tests/test_BioSQL_MySQLdb.py
@@ -19,7 +19,7 @@ check_config(DBDRIVER, DBTYPE, DBHOST, DBUSER, DBPASSWD, TESTDB)
 
 # Some of the unit tests don't create their own database,
 # so just in case there is no database already:
-create_database()
+TESTDB = create_database()
 
 if __name__ == "__main__":
     # Run the test cases
diff --git a/Tests/test_BioSQL_MySQLdb.py b/Tests/test_BioSQL_MySQLdb_online.py
similarity index 71%
copy from Tests/test_BioSQL_MySQLdb.py
copy to Tests/test_BioSQL_MySQLdb_online.py
index 2996e0d..fde9886 100644
--- a/Tests/test_BioSQL_MySQLdb.py
+++ b/Tests/test_BioSQL_MySQLdb_online.py
@@ -4,10 +4,12 @@
 # as part of this package.
 
 """Run BioSQL tests using SQLite"""
-from Bio import MissingExternalDependencyError
-from BioSQL import BioSeqDatabase
 
-from common_BioSQL import *
+from common_BioSQL import load_biosql_ini
+from common_BioSQL_online import *
+
+import requires_internet
+requires_internet.check()
 
 DBDRIVER = 'MySQLdb'
 DBTYPE = 'mysql'
@@ -16,10 +18,7 @@ DBHOST, DBUSER, DBPASSWD, TESTDB = load_biosql_ini(DBTYPE)
 
 # This will abort if driver not installed etc:
 check_config(DBDRIVER, DBTYPE, DBHOST, DBUSER, DBPASSWD, TESTDB)
-
-# Some of the unit tests don't create their own database,
-# so just in case there is no database already:
-create_database()
+share_config(DBDRIVER, DBTYPE, DBHOST, DBUSER, DBPASSWD, TESTDB)
 
 if __name__ == "__main__":
     # Run the test cases
diff --git a/Tests/test_BioSQL_mysql_connector.py b/Tests/test_BioSQL_mysql_connector.py
index fa1185d..0b3bda8 100644
--- a/Tests/test_BioSQL_mysql_connector.py
+++ b/Tests/test_BioSQL_mysql_connector.py
@@ -15,7 +15,7 @@ DBTYPE = 'mysql'
 DBHOST, DBUSER, DBPASSWD, TESTDB = load_biosql_ini(DBTYPE)
 
 # This will abort if driver not installed etc:
-check_config(DBDRIVER, DBTYPE, DBHOST, DBUSER, DBPASSWD, TESTDB)
+TESTDB = check_config(DBDRIVER, DBTYPE, DBHOST, DBUSER, DBPASSWD, TESTDB)
 
 # Some of the unit tests don't create their own database,
 # so just in case there is no database already:
diff --git a/Tests/test_BioSQL_mysql_connector.py b/Tests/test_BioSQL_mysql_connector_online.py
similarity index 71%
copy from Tests/test_BioSQL_mysql_connector.py
copy to Tests/test_BioSQL_mysql_connector_online.py
index fa1185d..5b71624 100644
--- a/Tests/test_BioSQL_mysql_connector.py
+++ b/Tests/test_BioSQL_mysql_connector_online.py
@@ -4,10 +4,12 @@
 # as part of this package.
 
 """Run BioSQL tests using SQLite"""
-from Bio import MissingExternalDependencyError
-from BioSQL import BioSeqDatabase
 
-from common_BioSQL import *
+from common_BioSQL import load_biosql_ini
+from common_BioSQL_online import *
+
+import requires_internet
+requires_internet.check()
 
 DBDRIVER = 'mysql.connector'
 DBTYPE = 'mysql'
@@ -16,10 +18,7 @@ DBHOST, DBUSER, DBPASSWD, TESTDB = load_biosql_ini(DBTYPE)
 
 # This will abort if driver not installed etc:
 check_config(DBDRIVER, DBTYPE, DBHOST, DBUSER, DBPASSWD, TESTDB)
-
-# Some of the unit tests don't create their own database,
-# so just in case there is no database already:
-create_database()
+share_config(DBDRIVER, DBTYPE, DBHOST, DBUSER, DBPASSWD, TESTDB)
 
 if __name__ == "__main__":
     # Run the test cases
diff --git a/Tests/test_BioSQL_psycopg2.py b/Tests/test_BioSQL_psycopg2.py
index bc14248..76472a3 100644
--- a/Tests/test_BioSQL_psycopg2.py
+++ b/Tests/test_BioSQL_psycopg2.py
@@ -18,7 +18,7 @@ check_config(DBDRIVER, DBTYPE, DBHOST, DBUSER, DBPASSWD, TESTDB)
 
 # Some of the unit tests don't create their own database,
 # so just in case there is no database already:
-create_database()
+TESTDB = create_database()
 
 if __name__ == "__main__":
     # Run the test cases
diff --git a/Tests/test_BioSQL_psycopg2.py b/Tests/test_BioSQL_psycopg2_online.py
similarity index 71%
copy from Tests/test_BioSQL_psycopg2.py
copy to Tests/test_BioSQL_psycopg2_online.py
index bc14248..0fe3859 100644
--- a/Tests/test_BioSQL_psycopg2.py
+++ b/Tests/test_BioSQL_psycopg2_online.py
@@ -4,10 +4,12 @@
 # as part of this package.
 
 """Run BioSQL tests using PostgreSQL"""
-from Bio import MissingExternalDependencyError
-from BioSQL import BioSeqDatabase
 
-from common_BioSQL import *
+from common_BioSQL import load_biosql_ini
+from common_BioSQL_online import *
+
+import requires_internet
+requires_internet.check()
 
 DBDRIVER = 'psycopg2'
 DBTYPE = 'pg'
@@ -15,10 +17,7 @@ DBHOST, DBUSER, DBPASSWD, TESTDB = load_biosql_ini(DBTYPE)
 
 # This will abort if driver not installed etc:
 check_config(DBDRIVER, DBTYPE, DBHOST, DBUSER, DBPASSWD, TESTDB)
-
-# Some of the unit tests don't create their own database,
-# so just in case there is no database already:
-create_database()
+share_config(DBDRIVER, DBTYPE, DBHOST, DBUSER, DBPASSWD, TESTDB)
 
 if __name__ == "__main__":
     # Run the test cases
diff --git a/Tests/test_BioSQL_sqlite3.py b/Tests/test_BioSQL_sqlite3.py
index 0b03c91..678e066 100644
--- a/Tests/test_BioSQL_sqlite3.py
+++ b/Tests/test_BioSQL_sqlite3.py
@@ -26,7 +26,7 @@ check_config(DBDRIVER, DBTYPE, DBHOST, DBUSER, DBPASSWD, TESTDB)
 
 # Some of the unit tests don't create their own database,
 # so just in case there is no database already:
-create_database()
+TESTDB = create_database()
 
 
 if False:
diff --git a/Tests/test_BioSQL_MySQLdb.py b/Tests/test_BioSQL_sqlite3_online.py
similarity index 58%
copy from Tests/test_BioSQL_MySQLdb.py
copy to Tests/test_BioSQL_sqlite3_online.py
index 2996e0d..d173f27 100644
--- a/Tests/test_BioSQL_MySQLdb.py
+++ b/Tests/test_BioSQL_sqlite3_online.py
@@ -4,22 +4,25 @@
 # as part of this package.
 
 """Run BioSQL tests using SQLite"""
-from Bio import MissingExternalDependencyError
-from BioSQL import BioSeqDatabase
 
-from common_BioSQL import *
+from common_BioSQL import temp_db_filename
+from common_BioSQL_online import *
 
-DBDRIVER = 'MySQLdb'
-DBTYPE = 'mysql'
+import requires_internet
+requires_internet.check()
 
-DBHOST, DBUSER, DBPASSWD, TESTDB = load_biosql_ini(DBTYPE)
+# Constants for the database driver
+DBDRIVER = 'sqlite3'
+DBTYPE = 'sqlite'
+
+DBHOST = None
+DBUSER = 'root'
+DBPASSWD = None
+TESTDB = temp_db_filename()
 
 # This will abort if driver not installed etc:
 check_config(DBDRIVER, DBTYPE, DBHOST, DBUSER, DBPASSWD, TESTDB)
-
-# Some of the unit tests don't create their own database,
-# so just in case there is no database already:
-create_database()
+share_config(DBDRIVER, DBTYPE, DBHOST, DBUSER, DBPASSWD, TESTDB)
 
 if __name__ == "__main__":
     # Run the test cases
diff --git a/Tests/test_CAPS.py b/Tests/test_CAPS.py
index 9d5cfc6..cb89908 100644
--- a/Tests/test_CAPS.py
+++ b/Tests/test_CAPS.py
@@ -24,9 +24,7 @@ class TestCAPS(unittest.TestCase):
 
     def test_trivial(self):
         enzymes = [EcoRI]
-        alignment = ["gaattc",
-                     "gaactc",
-                    ]
+        alignment = ["gaattc", "gaactc"]
         align = createAlignment(alignment, Alphabet.generic_dna)
         map = CAPS.CAPSMap(align, enzymes)
 
@@ -38,28 +36,23 @@ class TestCAPS(unittest.TestCase):
 
     def test(self):
         alignment = [
-"""\
-AAAagaattcTAGATATACCAAACCAGAGAAAACAAATACATAATCGGAGAAATACAGAT
-AGAGAGCGAGAGAGATCGACGGCGAAGCTCTTTACCCGGAAACCATTGAAATCGGACGGT
-TTAGTGAAAATGGAGGATCAAGTagAtTTTGGGTTCCGTCCGAACGACGAGGAGCTCGTT
-GGTCACTATCTCCGTAACAAAATCGAAGGAAACACTAGCCGCGACGTTGAAGTAGCCATC
-AGCGAGGTCAACATCTGTAGCTACGATCCTTGGAACTTGCGCTGTAAGTTCCGAATTTTC
-""",
-"""\
-AAAagaTttcTAGATATACCAAACCAGAGAAAACAAATACATAATCGGAGAAATACAGAT
-AGAGAGCGAGAGAGATCGACGGCGAAGCTCTTTACCCGGAAACCATTGAAATCGGACGGT
-TTAGTGAAAATGGAGGATCAAGTagctTTTGGGTTCCGTCCGAACGACGAGGAGCTCGTT
-GGTCACTATCTCCGTAACAAAATCGAAGGAAACACTAGCCGCGACGTTGAAGTAGCCATC
-AGCGAGGTCAACATCTGTAGCTACGATCCTTGGAACTTGCGCTGTAAGTTCCGAATTTTC
-""",
-"""\
-AAAagaTttcTAGATATACCAAACCAGAGAAAACAAATACATAATCGGAGAAATACAGAT
-AGAGAGCGAGAGAGATCGACGGCGAAGCTCTTTACCCGGAAACCATTGAAATCGGACGGT
-TTAGTGAAAATGGAGGATCAAGTagctTTTGGGTTCCGTCCGAACGACGAGGAGCTCGTT
-GGTCACTATCTCCGTAACAAAATCGAAGGAAACACTAGCCGCGACGTTGAAGTAGCCATC
-AGCGAGGTCAACATCTGTAGCTACGATCCTTGGAACTTGCGCTGTAAGTTCCGAATTTTC
-""",
-                    ]
+            "AAAagaattcTAGATATACCAAACCAGAGAAAACAAATACATAATCGGAGAAATACAGAT"
+            "AGAGAGCGAGAGAGATCGACGGCGAAGCTCTTTACCCGGAAACCATTGAAATCGGACGGT"
+            "TTAGTGAAAATGGAGGATCAAGTagAtTTTGGGTTCCGTCCGAACGACGAGGAGCTCGTT"
+            "GGTCACTATCTCCGTAACAAAATCGAAGGAAACACTAGCCGCGACGTTGAAGTAGCCATC"
+            "AGCGAGGTCAACATCTGTAGCTACGATCCTTGGAACTTGCGCTGTAAGTTCCGAATTTTC",
+            "AAAagaTttcTAGATATACCAAACCAGAGAAAACAAATACATAATCGGAGAAATACAGAT"
+            "AGAGAGCGAGAGAGATCGACGGCGAAGCTCTTTACCCGGAAACCATTGAAATCGGACGGT"
+            "TTAGTGAAAATGGAGGATCAAGTagctTTTGGGTTCCGTCCGAACGACGAGGAGCTCGTT"
+            "GGTCACTATCTCCGTAACAAAATCGAAGGAAACACTAGCCGCGACGTTGAAGTAGCCATC"
+            "AGCGAGGTCAACATCTGTAGCTACGATCCTTGGAACTTGCGCTGTAAGTTCCGAATTTTC",
+            "AAAagaTttcTAGATATACCAAACCAGAGAAAACAAATACATAATCGGAGAAATACAGAT"
+            "AGAGAGCGAGAGAGATCGACGGCGAAGCTCTTTACCCGGAAACCATTGAAATCGGACGGT"
+            "TTAGTGAAAATGGAGGATCAAGTagctTTTGGGTTCCGTCCGAACGACGAGGAGCTCGTT"
+            "GGTCACTATCTCCGTAACAAAATCGAAGGAAACACTAGCCGCGACGTTGAAGTAGCCATC"
+            "AGCGAGGTCAACATCTGTAGCTACGATCCTTGGAACTTGCGCTGTAAGTTCCGAATTTTC",
+            ]
+        self.assertEqual(len(alignment), 3)
         enzymes = [EcoRI, AluI]
         align = createAlignment(alignment, Alphabet.generic_dna)
         map = CAPS.CAPSMap(align, enzymes)
@@ -75,9 +68,7 @@ AGCGAGGTCAACATCTGTAGCTACGATCCTTGGAACTTGCGCTGTAAGTTCCGAATTTTC
         self.assertEqual(map.dcuts[1].blocked_in, [0])
 
     def testNoCAPS(self):
-        alignment = ["aaaaaaaaaaaaaaaaaaaa",
-                     "aaaaaaaaaaaaaaaaaaaa",
-                    ]
+        alignment = ["aaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaa"]
         enzymes = []
         align = createAlignment(alignment, Alphabet.generic_nucleotide)
         map = CAPS.CAPSMap(align, enzymes)
@@ -87,7 +78,7 @@ AGCGAGGTCAACATCTGTAGCTACGATCCTTGGAACTTGCGCTGTAAGTTCCGAATTTTC
         alignment = ["aaaaaaaaaaaaaa",
                      "aaaaaaaaaaaaaa",  # we'll change this below
                      "aaaaaaaaaaaaaa",
-                    ]
+                     ]
         align = createAlignment(alignment, Alphabet.generic_nucleotide)
         align[1].seq = align[1].seq[:8]  # evil
         self.assertRaises(CAPS.AlignmentHasDifferentLengthsError,
diff --git a/Tests/test_CelFile.py b/Tests/test_CelFile.py
index d8dd48c..8b45507 100644
--- a/Tests/test_CelFile.py
+++ b/Tests/test_CelFile.py
@@ -30,41 +30,41 @@ class testCelFile(unittest.TestCase):
         Algorithm = 'Percentile'
         AlgorithmParameters = 'Percentile:75;CellMargin:2;OutlierHigh:1.500;OutlierLow:1.004;AlgVersion:6.0;FixedCellSize:TRUE;FullFeatureWidth:7;FullFeatureHeight:7;IgnoreOutliersInShiftRows:FALSE;FeatureExtraction:TRUE;PoolWidthExtenstion:2;PoolHeightExtension:2;UseSubgrids:FALSE;RandomizePixels:FALSE;ErrorBasis:StdvMean;StdMult:1.000000'
         NumberCells = 25
-        intensities = numpy.array([[   234.0,    170.0,  22177.0,    164.0,  22104.0],
-                                        [   188.0,    188.0,  21871.0,    168.0,  21883.0],
-                                        [   188.0,    193.0,  21455.0,    198.0,  21300.0],
-                                        [   188.0,    182.0,  21438.0,    188.0,  20945.0],
-                                        [   193.0,  20370.0,    174.0,  20605.0,    168.0]])
-        stdevs = numpy.array([[   24.0, 34.5, 2669.0, 19.7, 3661.2],
-                                  [   29.8, 29.8, 2795.9, 67.9, 2792.4],
-                                  [   29.8, 88.7, 2976.5, 62.0, 2914.5],
-                                  [   29.8, 76.2, 2759.5, 49.2, 2762.0],
-                                  [   38.8, 2611.8, 26.6, 2810.7, 24.1]])
+        intensities = numpy.array([[234.0, 170.0, 22177.0, 164.0, 22104.0],
+                                   [188.0, 188.0, 21871.0, 168.0, 21883.0],
+                                   [188.0, 193.0, 21455.0, 198.0, 21300.0],
+                                   [188.0, 182.0, 21438.0, 188.0, 20945.0],
+                                   [193.0, 20370.0, 174.0, 20605.0, 168.0]])
+        stdevs = numpy.array([[24.0, 34.5, 2669.0, 19.7, 3661.2],
+                              [29.8, 29.8, 2795.9, 67.9, 2792.4],
+                              [29.8, 88.7, 2976.5, 62.0, 2914.5],
+                              [29.8, 76.2, 2759.5, 49.2, 2762.0],
+                              [38.8, 2611.8, 26.6, 2810.7, 24.1]])
         npix = numpy.array([[25, 25, 25, 25, 25],
-                                  [25, 25, 25, 25, 25],
-                                  [25, 25, 25, 25, 25],
-                                  [25, 25, 25, 25, 25],
-                                  [25, 25, 25, 25, 25]])
+                            [25, 25, 25, 25, 25],
+                            [25, 25, 25, 25, 25],
+                            [25, 25, 25, 25, 25],
+                            [25, 25, 25, 25, 25]])
         nrows = 5
         ncols = 5
         nmask = 3
-        mask = numpy.array([[ 0.,  0.,  0.,  0.,  0.],
-                                  [ 0.,  0.,  0.,  1.,  1.],
-                                  [ 0.,  0.,  0.,  0.,  1.],
-                                  [ 0.,  0.,  0.,  0.,  0.],
-                                  [ 0.,  0.,  0.,  0.,  0.]])
+        mask = numpy.array([[0., 0., 0., 0., 0.],
+                            [0., 0., 0., 1., 1.],
+                            [0., 0., 0., 0., 1.],
+                            [0., 0., 0., 0., 0.],
+                            [0., 0., 0., 0., 0.]])
         noutliers = 3
-        outliers = [[ 0.,  0.,  0.,  0.,  0.],
-                          [ 0.,  1.,  1.,  0.,  0.],
-                          [ 0.,  0.,  0.,  0.,  0.],
-                          [ 0.,  1.,  0.,  0.,  0.],
-                          [ 0.,  0.,  0.,  0.,  0.]]
+        outliers = [[0., 0., 0., 0., 0.],
+                    [0., 1., 1., 0., 0.],
+                    [0., 0., 0., 0., 0.],
+                    [0., 1., 0., 0., 0.],
+                    [0., 0., 0., 0., 0.]]
         nmodified = 3
-        modified = [[ 0., 0., 0., 0.,     0.],
-                         [ 0., 0., 0., 189.,   220.],
-                         [ 0., 0., 0., 21775., 0.],
-                         [ 0., 0., 0., 0.,     0.],
-                         [ 0., 0., 0., 0.,     0.]]
+        modified = [[0., 0., 0., 0., 0.],
+                    [0., 0., 0., 189., 220.],
+                    [0., 0., 0., 21775., 0.],
+                    [0., 0., 0., 0., 0.],
+                    [0., 0., 0., 0., 0.]]
 
         with open('./Affy/affy_v3_example.CEL') as handle:
             cel = CelFile.read(handle)
diff --git a/Tests/test_Cluster.py b/Tests/test_Cluster.py
index 235ac7c..57d94e3 100644
--- a/Tests/test_Cluster.py
+++ b/Tests/test_Cluster.py
@@ -766,7 +766,7 @@ class TestCluster(unittest.TestCase):
                             [5.1, 5.5],
                             [5.0, 5.5],
                             [5.1, 5.2],
-                           ])
+                            ])
 
         mean, coordinates, pc, eigenvalues = pca(data)
         self.assertAlmostEqual(mean[0], 3.5461538461538464)
diff --git a/Tests/test_CodonTable.py b/Tests/test_CodonTable.py
index f1cdf1a..95e0fb5 100644
--- a/Tests/test_CodonTable.py
+++ b/Tests/test_CodonTable.py
@@ -123,9 +123,17 @@ assert "UAR" in ambiguous_rna_by_id[2].stop_codons
 assert "AGR" in ambiguous_generic_by_id[2].stop_codons
 assert "UAR" in ambiguous_generic_by_id[2].stop_codons
 assert "TAR" in ambiguous_generic_by_id[2].stop_codons
+assert "UGA" not in ambiguous_rna_by_id[24].stop_codons
+assert "UGA" not in ambiguous_rna_by_id[25].stop_codons
 assert ambiguous_generic_by_id[1].stop_codons == ambiguous_generic_by_name["Standard"].stop_codons
 assert ambiguous_generic_by_id[4].stop_codons == ambiguous_generic_by_name["SGC3"].stop_codons
 assert ambiguous_generic_by_id[15].stop_codons == ambiguous_generic_by_name['Blepharisma Macronuclear'].stop_codons
 assert ambiguous_generic_by_id[24].stop_codons == ambiguous_generic_by_name["Pterobranchia Mitochondrial"].stop_codons
 
+assert ambiguous_generic_by_id[24].forward_table["AGA"] == "S"  # Ser not Arg
+assert ambiguous_generic_by_id[24].forward_table["AGG"] == "K"  # Lys not Arg
+assert ambiguous_generic_by_id[24].forward_table["UGA"] == "W"  # Trp not stop
+assert ambiguous_generic_by_id[25].forward_table["UGA"] == "G"  # Gly not stop
+assert ambiguous_generic_by_id[26].forward_table["CUG"] == "A"  # Ala not Leu
+
 print("Done")
diff --git a/Tests/test_Compass.py b/Tests/test_Compass.py
index cc17861..364980a 100644
--- a/Tests/test_Compass.py
+++ b/Tests/test_Compass.py
@@ -15,9 +15,10 @@ class CompassTest(unittest.TestCase):
     def setUp(self):
         file_dir = os.path.join("Compass")
         self.test_files = [
-          os.path.join(file_dir, "comtest1"),
-          os.path.join(file_dir, "comtest2"),
-          os.path.join(file_dir, "comtest3")]
+            os.path.join(file_dir, "comtest1"),
+            os.path.join(file_dir, "comtest2"),
+            os.path.join(file_dir, "comtest3"),
+            ]
 
     def testCompassScanAndConsume(self):
         handle = open(self.test_files[0])
diff --git a/Tests/test_EMBL_unittest.py b/Tests/test_EMBL_unittest.py
index adc15fd..15730b9 100644
--- a/Tests/test_EMBL_unittest.py
+++ b/Tests/test_EMBL_unittest.py
@@ -25,6 +25,17 @@ class EMBLTests(unittest.TestCase):
         else:
             self.assertTrue(False, "Error message without explanation raised by content after CO line")
 
+    def test_embl_0_line(self):
+        """Test SQ line with 0 length sequence"""
+        # Biopython 1.67 and older would parse this file with a warning:
+        # 'Expected sequence length 1740, found 1744 (TIR43YW1_CE).' and
+        # the coordinates 1740 added to the sequence as four extra letters.
+        with warnings.catch_warnings(record=True) as w:
+            warnings.simplefilter("always")
+            rec = SeqIO.read(path.join('EMBL', 'embl_with_0_line.embl'), 'embl')
+            self.assertEqual(len(w), 0, "Unexpected parser warnings: " + "\n".join(str(warn.message) for warn in w))
+            self.assertEqual(len(rec), 1740)
+
 
 if __name__ == "__main__":
     runner = unittest.TextTestRunner(verbosity=2)
diff --git a/Tests/test_EmbossPrimer.py b/Tests/test_EmbossPrimer.py
index a61b3cb..efea5fa 100644
--- a/Tests/test_EmbossPrimer.py
+++ b/Tests/test_EmbossPrimer.py
@@ -18,14 +18,14 @@ from Bio.Emboss import PrimerSearch, Primer3
 
 class Primer3ParseTest(unittest.TestCase):
     def setUp(self):
-        self.test_files = \
-          [os.path.join("Emboss", "bac_find.primer3"),
-           os.path.join("Emboss", "cds_forward.primer3"),
-           os.path.join("Emboss", "cds_reverse.primer3"),
-           os.path.join("Emboss", "short.primer3"),
-           os.path.join("Emboss", "internal_oligo.primer3"),
-           os.path.join("Emboss", "no_oligo.primer3"),
-           ]
+        self.test_files = [
+            os.path.join("Emboss", "bac_find.primer3"),
+            os.path.join("Emboss", "cds_forward.primer3"),
+            os.path.join("Emboss", "cds_reverse.primer3"),
+            os.path.join("Emboss", "short.primer3"),
+            os.path.join("Emboss", "internal_oligo.primer3"),
+            os.path.join("Emboss", "no_oligo.primer3"),
+            ]
 
     def test_simple_parse(self):
         """Make sure that we can use all single target primer3 files.
@@ -79,7 +79,8 @@ class Primer3ParseTest(unittest.TestCase):
                          "# PRIMER3 RESULTS FOR 26964-28647#\n")
         self.assertEqual(primer_info.primers[1].reverse_seq, "")
         self.assertEqual(primer_info.primers[1].internal_seq, "")
-        self.assertEqual(primer_info.primers[3].forward_seq, "TGTGATTGCTTGAGCTGGAC")
+        self.assertEqual(primer_info.primers[3].forward_seq,
+                         "TGTGATTGCTTGAGCTGGAC")
         self.assertEqual(primer_info.primers[3].internal_seq, "")
         self.assertEqual(primer_info.primers[3].forward_start, 253)
 
@@ -190,8 +191,7 @@ class Primer3ParseTest(unittest.TestCase):
 
 class PrimersearchParseTest(unittest.TestCase):
     def setUp(self):
-        self.test_files = \
-          [os.path.join("Emboss", "bac_find.psearch")]
+        self.test_files = [os.path.join("Emboss", "bac_find.psearch")]
 
     def test_simple_parse(self):
         """Make sure that we can parse all primersearch files.
@@ -215,13 +215,13 @@ class PrimersearchParseTest(unittest.TestCase):
 
         self.assertEqual(amp_info.amplifiers["Test"][0].length, 218)
         self.assertEqual(amp_info.amplifiers["Test"][0].hit_info,
-          "AC074298 AC074298 \n"
-          "\tTelomere associated sequence for Arabidopsis thaliana "
-          "TEL1N from chromosome I, complete sequence.\n"
-          "\tCCGGTTTCTCTGGTTGAAAA hits forward strand at 114 with "
-          "0 mismatches\n"
-          "\tTCACATTCCCAAATGTAGATCG hits reverse strand at [114] with "
-          "0 mismatches")
+                         "AC074298 AC074298 \n"
+                         "\tTelomere associated sequence for Arabidopsis thaliana "
+                         "TEL1N from chromosome I, complete sequence.\n"
+                         "\tCCGGTTTCTCTGGTTGAAAA hits forward strand at 114 "
+                         "with 0 mismatches\n"
+                         "\tTCACATTCCCAAATGTAGATCG hits reverse strand at "
+                         "[114] with 0 mismatches")
 
 
 class PrimerSearchInputTest(unittest.TestCase):
diff --git a/Tests/test_Entrez.py b/Tests/test_Entrez.py
index 6025420..f84d68b 100644
--- a/Tests/test_Entrez.py
+++ b/Tests/test_Entrez.py
@@ -1,4180 +1,148 @@
-# Copyright 2008-2010 by Michiel de Hoon.  All rights reserved.
-# Revisions copyright 2009-2016 by Peter Cock. All rights reserved.
+# Copyright 2015 by Carlos Pena.  All rights reserved.
 # This code is part of the Biopython distribution and governed by its
 # license.  Please see the LICENSE file that should have been included
 # as part of this package.
-'''Testing code for Bio.Entrez parsers.
-'''
+
+"""Offline tests for the URL construction of NCBI's Entrez services."""
 
 import unittest
-import sys
-import os
-if os.name == 'java':
-    try:
-        from xml.parsers.expat import XML_PARAM_ENTITY_PARSING_ALWAYS
-        del XML_PARAM_ENTITY_PARSING_ALWAYS
-    except ImportError:
-        from Bio import MissingPythonDependencyError
-        raise MissingPythonDependencyError("The Bio.Entrez XML parser fails on "
-                                  "Jython, see http://bugs.jython.org/issue1447")
+import warnings
 
-from io import BytesIO
-from Bio._py3k import StringIO
 from Bio import Entrez
 
 
-class GeneralTests(unittest.TestCase):
-    '''General tests for Bio.Entrez'''
-    def test_closed_handle(self):
-        '''Test parsing closed handle fails gracefully
-        '''
-        handle = open('Entrez/einfo1.xml', "rb")
-        handle.close()
-        self.assertRaises(IOError, Entrez.read, handle)
-
-    def test_bytes_handle(self):
-        """Test parsing a handle opened in binary mode."""
-        with open("Entrez/einfo1.xml", "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertTrue("DbList" in record)
-
-    def test_text_handle(self):
-        """Test parsing a handle opened in text mode."""
-        with open("Entrez/einfo1.xml", "rt") as handle:
-            record = Entrez.read(handle)
-        self.assertTrue("DbList" in record)
-
-    def test_BytesIO(self):
-        """Test parsing a BytesIO handle (bytes not unicode)."""
-        with open("Entrez/einfo1.xml", "rb") as in_handle:
-            data = in_handle.read()
-        handle = BytesIO(data)
-        record = Entrez.read(handle)
-        self.assertTrue("DbList" in record)
-        handle.close()
-
-    def test_StringIO(self):
-        """Test parsing a StringIO handle (unicode not bytes)."""
-        with open("Entrez/einfo1.xml", "rt") as in_handle:
-            data = in_handle.read()
-        handle = StringIO(data)
-        record = Entrez.read(handle)
-        self.assertTrue("DbList" in record)
-        handle.close()
-
-
-class EInfoTest(unittest.TestCase):
-    '''Tests for parsing XML output returned by EInfo
-    '''
-    def test_list(self):
-        '''Test parsing database list returned by EInfo
-        '''
-        # To create the XML file, use
-        # >>> Bio.Entrez.einfo()
-        with open('Entrez/einfo1.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(record["DbList"], ['pubmed',
-                                            'protein',
-                                            'nucleotide',
-                                            'nuccore',
-                                            'nucgss',
-                                            'nucest',
-                                            'structure',
-                                            'genome',
-                                            'books',
-                                            'cancerchromosomes',
-                                            'cdd',
-                                            'gap',
-                                            'domains',
-                                            'gene',
-                                            'genomeprj',
-                                            'gensat',
-                                            'geo',
-                                            'gds',
-                                            'homologene',
-                                            'journals',
-                                            'mesh',
-                                            'ncbisearch',
-                                            'nlmcatalog',
-                                            'omia',
-                                            'omim',
-                                            'pmc',
-                                            'popset',
-                                            'probe',
-                                            'proteinclusters',
-                                            'pcassay',
-                                            'pccompound',
-                                            'pcsubstance',
-                                            'snp',
-                                            'taxonomy',
-                                            'toolkit',
-                                            'unigene',
-                                            'unists'
-                                           ])
-
-    def test_pubmed1(self):
-        '''Test parsing database info returned by EInfo
-        '''
-        # To create the XML file, use
-        # >>> Bio.Entrez.einfo(db="pubmed")
-        with open('Entrez/einfo2.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(record["DbInfo"]['DbName'], 'pubmed')
-        self.assertEqual(record["DbInfo"]['MenuName'], 'PubMed')
-        self.assertEqual(record["DbInfo"]['Description'], 'PubMed bibliographic record')
-        self.assertEqual(record["DbInfo"]['Count'], "17905967")
-        self.assertEqual(record["DbInfo"]['LastUpdate'], '2008/04/15 06:42')
-
-        self.assertEqual(len(record["DbInfo"]['FieldList']), 40)
-
-        self.assertEqual(record["DbInfo"]['FieldList'][0]['Name'], 'ALL')
-        self.assertEqual(record["DbInfo"]['FieldList'][0]['FullName'], 'All Fields')
-        self.assertEqual(record["DbInfo"]['FieldList'][0]['Description'], 'All terms from all searchable fields')
-        self.assertEqual(record["DbInfo"]['FieldList'][0]['TermCount'], "70792830")
-        self.assertEqual(record["DbInfo"]['FieldList'][0]['IsDate'], 'N')
-        self.assertEqual(record["DbInfo"]['FieldList'][0]['IsNumerical'], 'N')
-        self.assertEqual(record["DbInfo"]['FieldList'][0]['SingleToken'], 'N')
-        self.assertEqual(record["DbInfo"]['FieldList'][0]['Hierarchy'], 'N')
-        self.assertEqual(record["DbInfo"]['FieldList'][0]['IsHidden'], 'N')
-
-        self.assertEqual(len(record["DbInfo"]['LinkList']), 46)
-
-        self.assertEqual(record["DbInfo"]['LinkList'][0]['Name'], 'pubmed_books_refs')
-        self.assertEqual(record["DbInfo"]['LinkList'][0]['Menu'], 'Cited in Books')
-        self.assertEqual(record["DbInfo"]['LinkList'][0]['Description'], 'PubMed links associated with Books')
-        self.assertEqual(record["DbInfo"]['LinkList'][0]['DbTo'], 'books')
-
-    def test_pubmed2(self):
-        '''Test validating the XML against the DTD
-        '''
-        # To create the XML file, use
-        # >>> Bio.Entrez.einfo(db="pubmed")
-        # Starting some time in 2010, the results returned by Bio.Entrez
-        # included some tags that are not part of the corresponding DTD.
-        from Bio.Entrez import Parser
-        with open('Entrez/einfo3.xml', "rb") as handle:
-            self.assertRaises(Parser.ValidationError, Entrez.read, handle)
-
-    def test_pubmed3(self):
-        '''Test non-validating parser on XML with an inconsistent DTD
-        '''
-        # To create the XML file, use
-        # >>> Bio.Entrez.einfo(db="pubmed")
-        # Starting some time in 2010, the results returned by Bio.Entrez
-        # included some tags that are not part of the corresponding DTD.
-        with open('Entrez/einfo3.xml', "rb") as handle:
-            record = Entrez.read(handle, validate=False)
-        self.assertEqual(record["DbInfo"]['DbName'], 'pubmed')
-        self.assertEqual(record["DbInfo"]['MenuName'], 'PubMed')
-        self.assertEqual(record["DbInfo"]['Description'], 'PubMed bibliographic record')
-        self.assertEqual(record["DbInfo"]['Count'], "20161961")
-        self.assertEqual(record["DbInfo"]['LastUpdate'], "2010/09/10 04:52")
-
-        self.assertEqual(len(record["DbInfo"]['FieldList']), 45)
-        self.assertEqual(record["DbInfo"]["FieldList"][0]["Name"], "ALL")
-        self.assertEqual(record["DbInfo"]["FieldList"][0]["FullName"], "All Fields")
-        self.assertEqual(record["DbInfo"]["FieldList"][0]["Description"], "All terms from all searchable fields")
-        self.assertEqual(record["DbInfo"]["FieldList"][0]["TermCount"], "89981460")
-        self.assertEqual(record["DbInfo"]["FieldList"][0]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][0]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][0]["SingleToken"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][0]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][0]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][1]["Name"], "UID")
-        self.assertEqual(record["DbInfo"]["FieldList"][1]["FullName"], "UID")
-        self.assertEqual(record["DbInfo"]["FieldList"][1]["Description"], "Unique number assigned to publication")
-        self.assertEqual(record["DbInfo"]["FieldList"][1]["TermCount"], "0")
-        self.assertEqual(record["DbInfo"]["FieldList"][1]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][1]["IsNumerical"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][1]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][1]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][1]["IsHidden"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][2]["Name"], "FILT")
-        self.assertEqual(record["DbInfo"]["FieldList"][2]["FullName"], "Filter")
-        self.assertEqual(record["DbInfo"]["FieldList"][2]["Description"], "Limits the records")
-        self.assertEqual(record["DbInfo"]["FieldList"][2]["TermCount"], "4070")
-        self.assertEqual(record["DbInfo"]["FieldList"][2]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][2]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][2]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][2]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][2]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][3]["Name"], "TITL")
-        self.assertEqual(record["DbInfo"]["FieldList"][3]["FullName"], "Title")
-        self.assertEqual(record["DbInfo"]["FieldList"][3]["Description"], "Words in title of publication")
-        self.assertEqual(record["DbInfo"]["FieldList"][3]["TermCount"], "12475481")
-        self.assertEqual(record["DbInfo"]["FieldList"][3]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][3]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][3]["SingleToken"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][3]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][3]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][4]["Name"], "WORD")
-        self.assertEqual(record["DbInfo"]["FieldList"][4]["FullName"], "Text Word")
-        self.assertEqual(record["DbInfo"]["FieldList"][4]["Description"], "Free text associated with publication")
-        self.assertEqual(record["DbInfo"]["FieldList"][4]["TermCount"], "39413498")
-        self.assertEqual(record["DbInfo"]["FieldList"][4]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][4]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][4]["SingleToken"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][4]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][4]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][5]["Name"], "MESH")
-        self.assertEqual(record["DbInfo"]["FieldList"][5]["FullName"], "MeSH Terms")
-        self.assertEqual(record["DbInfo"]["FieldList"][5]["Description"], "Medical Subject Headings assigned to publication")
-        self.assertEqual(record["DbInfo"]["FieldList"][5]["TermCount"], "554666")
-        self.assertEqual(record["DbInfo"]["FieldList"][5]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][5]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][5]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][5]["Hierarchy"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][5]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][6]["Name"], "MAJR")
-        self.assertEqual(record["DbInfo"]["FieldList"][6]["FullName"], "MeSH Major Topic")
-        self.assertEqual(record["DbInfo"]["FieldList"][6]["Description"], "MeSH terms of major importance to publication")
-        self.assertEqual(record["DbInfo"]["FieldList"][6]["TermCount"], "493091")
-        self.assertEqual(record["DbInfo"]["FieldList"][6]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][6]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][6]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][6]["Hierarchy"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][6]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][7]["Name"], "AUTH")
-        self.assertEqual(record["DbInfo"]["FieldList"][7]["FullName"], "Author")
-        self.assertEqual(record["DbInfo"]["FieldList"][7]["Description"], "Author(s) of publication")
-        self.assertEqual(record["DbInfo"]["FieldList"][7]["TermCount"], "11268262")
-        self.assertEqual(record["DbInfo"]["FieldList"][7]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][7]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][7]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][7]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][7]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][8]["Name"], "JOUR")
-        self.assertEqual(record["DbInfo"]["FieldList"][8]["FullName"], "Journal")
-        self.assertEqual(record["DbInfo"]["FieldList"][8]["Description"], "Journal abbreviation of publication")
-        self.assertEqual(record["DbInfo"]["FieldList"][8]["TermCount"], "118354")
-        self.assertEqual(record["DbInfo"]["FieldList"][8]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][8]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][8]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][8]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][8]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][9]["Name"], "AFFL")
-        self.assertEqual(record["DbInfo"]["FieldList"][9]["FullName"], "Affiliation")
-        self.assertEqual(record["DbInfo"]["FieldList"][9]["Description"], "Author's institutional affiliation and address")
-        self.assertEqual(record["DbInfo"]["FieldList"][9]["TermCount"], "17538809")
-        self.assertEqual(record["DbInfo"]["FieldList"][9]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][9]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][9]["SingleToken"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][9]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][9]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][10]["Name"], "ECNO")
-        self.assertEqual(record["DbInfo"]["FieldList"][10]["FullName"], "EC/RN Number")
-        self.assertEqual(record["DbInfo"]["FieldList"][10]["Description"], "EC number for enzyme or CAS registry number")
-        self.assertEqual(record["DbInfo"]["FieldList"][10]["TermCount"], "82892")
-        self.assertEqual(record["DbInfo"]["FieldList"][10]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][10]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][10]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][10]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][10]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][11]["Name"], "SUBS")
-        self.assertEqual(record["DbInfo"]["FieldList"][11]["FullName"], "Substance Name")
-        self.assertEqual(record["DbInfo"]["FieldList"][11]["Description"], "CAS chemical name or MEDLINE Substance Name")
-        self.assertEqual(record["DbInfo"]["FieldList"][11]["TermCount"], "204197")
-        self.assertEqual(record["DbInfo"]["FieldList"][11]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][11]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][11]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][11]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][11]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][12]["Name"], "PDAT")
-        self.assertEqual(record["DbInfo"]["FieldList"][12]["FullName"], "Publication Date")
-        self.assertEqual(record["DbInfo"]["FieldList"][12]["Description"], "Date of publication")
-        self.assertEqual(record["DbInfo"]["FieldList"][12]["TermCount"], "35200")
-        self.assertEqual(record["DbInfo"]["FieldList"][12]["IsDate"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][12]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][12]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][12]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][12]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][13]["Name"], "EDAT")
-        self.assertEqual(record["DbInfo"]["FieldList"][13]["FullName"], "Entrez Date")
-        self.assertEqual(record["DbInfo"]["FieldList"][13]["Description"], "Date publication first accessible through Entrez")
-        self.assertEqual(record["DbInfo"]["FieldList"][13]["TermCount"], "33978")
-        self.assertEqual(record["DbInfo"]["FieldList"][13]["IsDate"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][13]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][13]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][13]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][13]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][14]["Name"], "VOL")
-        self.assertEqual(record["DbInfo"]["FieldList"][14]["FullName"], "Volume")
-        self.assertEqual(record["DbInfo"]["FieldList"][14]["Description"], "Volume number of publication")
-        self.assertEqual(record["DbInfo"]["FieldList"][14]["TermCount"], "12026")
-        self.assertEqual(record["DbInfo"]["FieldList"][14]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][14]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][14]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][14]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][14]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][15]["Name"], "PAGE")
-        self.assertEqual(record["DbInfo"]["FieldList"][15]["FullName"], "Pagination")
-        self.assertEqual(record["DbInfo"]["FieldList"][15]["Description"], "Page number(s) of publication")
-        self.assertEqual(record["DbInfo"]["FieldList"][15]["TermCount"], "1274867")
-        self.assertEqual(record["DbInfo"]["FieldList"][15]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][15]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][15]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][15]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][15]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][16]["Name"], "PTYP")
-        self.assertEqual(record["DbInfo"]["FieldList"][16]["FullName"], "Publication Type")
-        self.assertEqual(record["DbInfo"]["FieldList"][16]["Description"], "Type of publication (e.g., review)")
-        self.assertEqual(record["DbInfo"]["FieldList"][16]["TermCount"], "71")
-        self.assertEqual(record["DbInfo"]["FieldList"][16]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][16]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][16]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][16]["Hierarchy"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][16]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][17]["Name"], "LANG")
-        self.assertEqual(record["DbInfo"]["FieldList"][17]["FullName"], "Language")
-        self.assertEqual(record["DbInfo"]["FieldList"][17]["Description"], "Language of publication")
-        self.assertEqual(record["DbInfo"]["FieldList"][17]["TermCount"], "57")
-        self.assertEqual(record["DbInfo"]["FieldList"][17]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][17]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][17]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][17]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][17]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][18]["Name"], "ISS")
-        self.assertEqual(record["DbInfo"]["FieldList"][18]["FullName"], "Issue")
-        self.assertEqual(record["DbInfo"]["FieldList"][18]["Description"], "Issue number of publication")
-        self.assertEqual(record["DbInfo"]["FieldList"][18]["TermCount"], "16835")
-        self.assertEqual(record["DbInfo"]["FieldList"][18]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][18]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][18]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][18]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][18]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][19]["Name"], "SUBH")
-        self.assertEqual(record["DbInfo"]["FieldList"][19]["FullName"], "MeSH Subheading")
-        self.assertEqual(record["DbInfo"]["FieldList"][19]["Description"], "Additional specificity for MeSH term")
-        self.assertEqual(record["DbInfo"]["FieldList"][19]["TermCount"], "83")
-        self.assertEqual(record["DbInfo"]["FieldList"][19]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][19]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][19]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][19]["Hierarchy"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][19]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][20]["Name"], "SI")
-        self.assertEqual(record["DbInfo"]["FieldList"][20]["FullName"], "Secondary Source ID")
-        self.assertEqual(record["DbInfo"]["FieldList"][20]["Description"], "Cross-reference from publication to other databases")
-        self.assertEqual(record["DbInfo"]["FieldList"][20]["TermCount"], "3821402")
-        self.assertEqual(record["DbInfo"]["FieldList"][20]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][20]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][20]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][20]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][20]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][21]["Name"], "MHDA")
-        self.assertEqual(record["DbInfo"]["FieldList"][21]["FullName"], "MeSH Date")
-        self.assertEqual(record["DbInfo"]["FieldList"][21]["Description"], "Date publication was indexed with MeSH terms")
-        self.assertEqual(record["DbInfo"]["FieldList"][21]["TermCount"], "33923")
-        self.assertEqual(record["DbInfo"]["FieldList"][21]["IsDate"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][21]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][21]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][21]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][21]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][22]["Name"], "TIAB")
-        self.assertEqual(record["DbInfo"]["FieldList"][22]["FullName"], "Title/Abstract")
-        self.assertEqual(record["DbInfo"]["FieldList"][22]["Description"], "Free text associated with Abstract/Title")
-        self.assertEqual(record["DbInfo"]["FieldList"][22]["TermCount"], "35092258")
-        self.assertEqual(record["DbInfo"]["FieldList"][22]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][22]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][22]["SingleToken"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][22]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][22]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][23]["Name"], "OTRM")
-        self.assertEqual(record["DbInfo"]["FieldList"][23]["FullName"], "Other Term")
-        self.assertEqual(record["DbInfo"]["FieldList"][23]["Description"], "Other terms associated with publication")
-        self.assertEqual(record["DbInfo"]["FieldList"][23]["TermCount"], "333870")
-        self.assertEqual(record["DbInfo"]["FieldList"][23]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][23]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][23]["SingleToken"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][23]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][23]["IsHidden"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][24]["Name"], "INVR")
-        self.assertEqual(record["DbInfo"]["FieldList"][24]["FullName"], "Investigator")
-        self.assertEqual(record["DbInfo"]["FieldList"][24]["Description"], "Investigator")
-        self.assertEqual(record["DbInfo"]["FieldList"][24]["TermCount"], "516245")
-        self.assertEqual(record["DbInfo"]["FieldList"][24]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][24]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][24]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][24]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][24]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][25]["Name"], "COLN")
-        self.assertEqual(record["DbInfo"]["FieldList"][25]["FullName"], "Corporate Author")
-        self.assertEqual(record["DbInfo"]["FieldList"][25]["Description"], "Corporate Author of publication")
-        self.assertEqual(record["DbInfo"]["FieldList"][25]["TermCount"], "132665")
-        self.assertEqual(record["DbInfo"]["FieldList"][25]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][25]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][25]["SingleToken"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][25]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][25]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][26]["Name"], "CNTY")
-        self.assertEqual(record["DbInfo"]["FieldList"][26]["FullName"], "Place of Publication")
-        self.assertEqual(record["DbInfo"]["FieldList"][26]["Description"], "Country of publication")
-        self.assertEqual(record["DbInfo"]["FieldList"][26]["TermCount"], "279")
-        self.assertEqual(record["DbInfo"]["FieldList"][26]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][26]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][26]["SingleToken"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][26]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][26]["IsHidden"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][27]["Name"], "PAPX")
-        self.assertEqual(record["DbInfo"]["FieldList"][27]["FullName"], "Pharmacological Action")
-        self.assertEqual(record["DbInfo"]["FieldList"][27]["Description"], "MeSH pharmacological action pre-explosions")
-        self.assertEqual(record["DbInfo"]["FieldList"][27]["TermCount"], "420")
-        self.assertEqual(record["DbInfo"]["FieldList"][27]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][27]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][27]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][27]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][27]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][28]["Name"], "GRNT")
-        self.assertEqual(record["DbInfo"]["FieldList"][28]["FullName"], "Grant Number")
-        self.assertEqual(record["DbInfo"]["FieldList"][28]["Description"], "NIH Grant Numbers")
-        self.assertEqual(record["DbInfo"]["FieldList"][28]["TermCount"], "2588283")
-        self.assertEqual(record["DbInfo"]["FieldList"][28]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][28]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][28]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][28]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][28]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][29]["Name"], "MDAT")
-        self.assertEqual(record["DbInfo"]["FieldList"][29]["FullName"], "Modification Date")
-        self.assertEqual(record["DbInfo"]["FieldList"][29]["Description"], "Date of last modification")
-        self.assertEqual(record["DbInfo"]["FieldList"][29]["TermCount"], "2777")
-        self.assertEqual(record["DbInfo"]["FieldList"][29]["IsDate"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][29]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][29]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][29]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][29]["IsHidden"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][30]["Name"], "CDAT")
-        self.assertEqual(record["DbInfo"]["FieldList"][30]["FullName"], "Completion Date")
-        self.assertEqual(record["DbInfo"]["FieldList"][30]["Description"], "Date of completion")
-        self.assertEqual(record["DbInfo"]["FieldList"][30]["TermCount"], "9268")
-        self.assertEqual(record["DbInfo"]["FieldList"][30]["IsDate"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][30]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][30]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][30]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][30]["IsHidden"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][31]["Name"], "PID")
-        self.assertEqual(record["DbInfo"]["FieldList"][31]["FullName"], "Publisher ID")
-        self.assertEqual(record["DbInfo"]["FieldList"][31]["Description"], "Publisher ID")
-        self.assertEqual(record["DbInfo"]["FieldList"][31]["TermCount"], "8894288")
-        self.assertEqual(record["DbInfo"]["FieldList"][31]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][31]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][31]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][31]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][31]["IsHidden"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][32]["Name"], "FAUT")
-        self.assertEqual(record["DbInfo"]["FieldList"][32]["FullName"], "First Author")
-        self.assertEqual(record["DbInfo"]["FieldList"][32]["Description"], "First Author of publication")
-        self.assertEqual(record["DbInfo"]["FieldList"][32]["TermCount"], "6068222")
-        self.assertEqual(record["DbInfo"]["FieldList"][32]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][32]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][32]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][32]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][32]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][33]["Name"], "FULL")
-        self.assertEqual(record["DbInfo"]["FieldList"][33]["FullName"], "Full Author Name")
-        self.assertEqual(record["DbInfo"]["FieldList"][33]["Description"], "Full Author Name(s) of publication")
-        self.assertEqual(record["DbInfo"]["FieldList"][33]["TermCount"], "6419103")
-        self.assertEqual(record["DbInfo"]["FieldList"][33]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][33]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][33]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][33]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][33]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][34]["Name"], "FINV")
-        self.assertEqual(record["DbInfo"]["FieldList"][34]["FullName"], "Full Investigator Name")
-        self.assertEqual(record["DbInfo"]["FieldList"][34]["Description"], "Full name of investigator")
-        self.assertEqual(record["DbInfo"]["FieldList"][34]["TermCount"], "243898")
-        self.assertEqual(record["DbInfo"]["FieldList"][34]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][34]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][34]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][34]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][34]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][35]["Name"], "TT")
-        self.assertEqual(record["DbInfo"]["FieldList"][35]["FullName"], "Transliterated Title")
-        self.assertEqual(record["DbInfo"]["FieldList"][35]["Description"], "Words in transliterated title of publication")
-        self.assertEqual(record["DbInfo"]["FieldList"][35]["TermCount"], "2177885")
-        self.assertEqual(record["DbInfo"]["FieldList"][35]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][35]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][35]["SingleToken"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][35]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][35]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][36]["Name"], "LAUT")
-        self.assertEqual(record["DbInfo"]["FieldList"][36]["FullName"], "Last Author")
-        self.assertEqual(record["DbInfo"]["FieldList"][36]["Description"], "Last Author of publication")
-        self.assertEqual(record["DbInfo"]["FieldList"][36]["TermCount"], "5655625")
-        self.assertEqual(record["DbInfo"]["FieldList"][36]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][36]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][36]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][36]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][36]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][37]["Name"], "PPDT")
-        self.assertEqual(record["DbInfo"]["FieldList"][37]["FullName"], "Print Publication Date")
-        self.assertEqual(record["DbInfo"]["FieldList"][37]["Description"], "Date of print publication")
-        self.assertEqual(record["DbInfo"]["FieldList"][37]["TermCount"], "35164")
-        self.assertEqual(record["DbInfo"]["FieldList"][37]["IsDate"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][37]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][37]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][37]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][37]["IsHidden"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][38]["Name"], "EPDT")
-        self.assertEqual(record["DbInfo"]["FieldList"][38]["FullName"], "Electronic Publication Date")
-        self.assertEqual(record["DbInfo"]["FieldList"][38]["Description"], "Date of Electronic publication")
-        self.assertEqual(record["DbInfo"]["FieldList"][38]["TermCount"], "4282")
-        self.assertEqual(record["DbInfo"]["FieldList"][38]["IsDate"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][38]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][38]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][38]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][38]["IsHidden"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][39]["Name"], "LID")
-        self.assertEqual(record["DbInfo"]["FieldList"][39]["FullName"], "Location ID")
-        self.assertEqual(record["DbInfo"]["FieldList"][39]["Description"], "ELocation ID")
-        self.assertEqual(record["DbInfo"]["FieldList"][39]["TermCount"], "56212")
-        self.assertEqual(record["DbInfo"]["FieldList"][39]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][39]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][39]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][39]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][39]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][40]["Name"], "CRDT")
-        self.assertEqual(record["DbInfo"]["FieldList"][40]["FullName"], "Create Date")
-        self.assertEqual(record["DbInfo"]["FieldList"][40]["Description"], "Date publication first accessible through Entrez")
-        self.assertEqual(record["DbInfo"]["FieldList"][40]["TermCount"], "27563")
-        self.assertEqual(record["DbInfo"]["FieldList"][40]["IsDate"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][40]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][40]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][40]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][40]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][41]["Name"], "BOOK")
-        self.assertEqual(record["DbInfo"]["FieldList"][41]["FullName"], "Book")
-        self.assertEqual(record["DbInfo"]["FieldList"][41]["Description"], "ID of the book that contains the document")
-        self.assertEqual(record["DbInfo"]["FieldList"][41]["TermCount"], "342")
-        self.assertEqual(record["DbInfo"]["FieldList"][41]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][41]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][41]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][41]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][41]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][42]["Name"], "ED")
-        self.assertEqual(record["DbInfo"]["FieldList"][42]["FullName"], "Editor")
-        self.assertEqual(record["DbInfo"]["FieldList"][42]["Description"], "Section's Editor")
-        self.assertEqual(record["DbInfo"]["FieldList"][42]["TermCount"], "335")
-        self.assertEqual(record["DbInfo"]["FieldList"][42]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][42]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][42]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][42]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][42]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][43]["Name"], "ISBN")
-        self.assertEqual(record["DbInfo"]["FieldList"][43]["FullName"], "ISBN")
-        self.assertEqual(record["DbInfo"]["FieldList"][43]["Description"], "ISBN")
-        self.assertEqual(record["DbInfo"]["FieldList"][43]["TermCount"], "189")
-        self.assertEqual(record["DbInfo"]["FieldList"][43]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][43]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][43]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][43]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][43]["IsHidden"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][44]["Name"], "PUBN")
-        self.assertEqual(record["DbInfo"]["FieldList"][44]["FullName"], "Publisher")
-        self.assertEqual(record["DbInfo"]["FieldList"][44]["Description"], "Publisher's name")
-        self.assertEqual(record["DbInfo"]["FieldList"][44]["TermCount"], "161")
-        self.assertEqual(record["DbInfo"]["FieldList"][44]["IsDate"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][44]["IsNumerical"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][44]["SingleToken"], "Y")
-        self.assertEqual(record["DbInfo"]["FieldList"][44]["Hierarchy"], "N")
-        self.assertEqual(record["DbInfo"]["FieldList"][44]["IsHidden"], "N")
-        self.assertEqual(len(record["DbInfo"]["LinkList"]), 57)
-        self.assertEqual(record["DbInfo"]["LinkList"][0]["Name"], "pubmed_biosample")
-        self.assertEqual(record["DbInfo"]["LinkList"][0]["Menu"], "BioSample Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][0]["Description"], "BioSample links")
-        self.assertEqual(record["DbInfo"]["LinkList"][0]["DbTo"], "biosample")
-        self.assertEqual(record["DbInfo"]["LinkList"][1]["Name"], "pubmed_biosystems")
-        self.assertEqual(record["DbInfo"]["LinkList"][1]["Menu"], "BioSystem Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][1]["Description"], "Pathways and biological systems (BioSystems) that cite the current articles. Citations are from the BioSystems source databases (KEGG and BioCyc).")
-        self.assertEqual(record["DbInfo"]["LinkList"][1]["DbTo"], "biosystems")
-        self.assertEqual(record["DbInfo"]["LinkList"][2]["Name"], "pubmed_books_refs")
-        self.assertEqual(record["DbInfo"]["LinkList"][2]["Menu"], "Cited in Books")
-        self.assertEqual(record["DbInfo"]["LinkList"][2]["Description"], "NCBI Bookshelf books that cite the current articles.")
-        self.assertEqual(record["DbInfo"]["LinkList"][2]["DbTo"], "books")
-        self.assertEqual(record["DbInfo"]["LinkList"][3]["Name"], "pubmed_cancerchromosomes")
-        self.assertEqual(record["DbInfo"]["LinkList"][3]["Menu"], "CancerChrom Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][3]["Description"], "Cancer chromosome records that cite the current articles.")
-        self.assertEqual(record["DbInfo"]["LinkList"][3]["DbTo"], "cancerchromosomes")
-        self.assertEqual(record["DbInfo"]["LinkList"][4]["Name"], "pubmed_cdd")
-        self.assertEqual(record["DbInfo"]["LinkList"][4]["Menu"], "Domain Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][4]["Description"], "Conserved Domain Database (CDD) records that cite the current articles. Citations are from the CDD source database records (PFAM, SMART).")
-        self.assertEqual(record["DbInfo"]["LinkList"][4]["DbTo"], "cdd")
-        self.assertEqual(record["DbInfo"]["LinkList"][5]["Name"], "pubmed_domains")
-        self.assertEqual(record["DbInfo"]["LinkList"][5]["Menu"], "3D Domain Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][5]["Description"], "Structural domains in the NCBI Structure database that are parts of the 3D structures reported in the current articles.")
-        self.assertEqual(record["DbInfo"]["LinkList"][5]["DbTo"], "domains")
-        self.assertEqual(record["DbInfo"]["LinkList"][6]["Name"], "pubmed_epigenomics")
-        self.assertEqual(record["DbInfo"]["LinkList"][6]["Menu"], "Epigenomics Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][6]["Description"], "Related Epigenomics records")
-        self.assertEqual(record["DbInfo"]["LinkList"][6]["DbTo"], "epigenomics")
-        self.assertEqual(record["DbInfo"]["LinkList"][7]["Name"], "pubmed_gap")
-        self.assertEqual(record["DbInfo"]["LinkList"][7]["Menu"], "dbGaP Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][7]["Description"], "Genotypes and Phenotypes (dbGaP) studies that cite the current articles.")
-        self.assertEqual(record["DbInfo"]["LinkList"][7]["DbTo"], "gap")
-        self.assertEqual(record["DbInfo"]["LinkList"][8]["Name"], "pubmed_gds")
-        self.assertEqual(record["DbInfo"]["LinkList"][8]["Menu"], "GEO DataSet Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][8]["Description"], "Gene expression and molecular abundance data reported in the current articles that are also included in the curated Gene Expression Omnibus (GEO) DataSets.")
-        self.assertEqual(record["DbInfo"]["LinkList"][8]["DbTo"], "gds")
-        self.assertEqual(record["DbInfo"]["LinkList"][9]["Name"], "pubmed_gene")
-        self.assertEqual(record["DbInfo"]["LinkList"][9]["Menu"], "Gene Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][9]["Description"], "Gene records that cite the current articles. Citations in Gene are added manually by NCBI or imported from outside public resources.")
-        self.assertEqual(record["DbInfo"]["LinkList"][9]["DbTo"], "gene")
-        self.assertEqual(record["DbInfo"]["LinkList"][10]["Name"], "pubmed_gene_bookrecords")
-        self.assertEqual(record["DbInfo"]["LinkList"][10]["Menu"], "Gene (from Bookshelf)")
-        self.assertEqual(record["DbInfo"]["LinkList"][10]["Description"], "Gene records in this citation")
-        self.assertEqual(record["DbInfo"]["LinkList"][10]["DbTo"], "gene")
-        self.assertEqual(record["DbInfo"]["LinkList"][11]["Name"], "pubmed_gene_citedinomim")
-        self.assertEqual(record["DbInfo"]["LinkList"][11]["Menu"], "Gene (OMIM) Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][11]["Description"], "Gene records associated with Online Mendelian Inheritance in Man (OMIM) records that cite the current articles in their reference lists.")
-        self.assertEqual(record["DbInfo"]["LinkList"][11]["DbTo"], "gene")
-        self.assertEqual(record["DbInfo"]["LinkList"][12]["Name"], "pubmed_gene_rif")
-        self.assertEqual(record["DbInfo"]["LinkList"][12]["Menu"], "Gene (GeneRIF) Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][12]["Description"], "Gene records that have the current articles as Reference into Function citations (GeneRIFs). NLM staff reviewing the literature while indexing MEDLINE add GeneRIFs manually.")
-        self.assertEqual(record["DbInfo"]["LinkList"][12]["DbTo"], "gene")
-        self.assertEqual(record["DbInfo"]["LinkList"][13]["Name"], "pubmed_genome")
-        self.assertEqual(record["DbInfo"]["LinkList"][13]["Menu"], "Genome Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][13]["Description"], "Genome records that include the current articles as references. These are typically the articles that report the sequencing and analysis of the genome.")
-        self.assertEqual(record["DbInfo"]["LinkList"][13]["DbTo"], "genome")
-        self.assertEqual(record["DbInfo"]["LinkList"][14]["Name"], "pubmed_genomeprj")
-        self.assertEqual(record["DbInfo"]["LinkList"][14]["Menu"], "Project Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][14]["Description"], "Genome Project records that cite the current articles. References on Genome Projects include manually added citations and those included on sequences in the project.")
-        self.assertEqual(record["DbInfo"]["LinkList"][14]["DbTo"], "genomeprj")
-        self.assertEqual(record["DbInfo"]["LinkList"][15]["Name"], "pubmed_gensat")
-        self.assertEqual(record["DbInfo"]["LinkList"][15]["Menu"], "GENSAT Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][15]["Description"], "Gene Expression Nervous System Atlas (GENSAT) records that cite the current articles. References on GENSAT records are provided by GENSAT investigators, and also include references on the corresponding NCBI Gene record.")
-        self.assertEqual(record["DbInfo"]["LinkList"][15]["DbTo"], "gensat")
-        self.assertEqual(record["DbInfo"]["LinkList"][16]["Name"], "pubmed_geo")
-        self.assertEqual(record["DbInfo"]["LinkList"][16]["Menu"], "GEO Profile Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][16]["Description"], "Gene Expression Omnibus (GEO) Profiles of molecular abundance data. The current articles are references on the Gene record associated with the GEO profile.")
-        self.assertEqual(record["DbInfo"]["LinkList"][16]["DbTo"], "geo")
-        self.assertEqual(record["DbInfo"]["LinkList"][17]["Name"], "pubmed_homologene")
-        self.assertEqual(record["DbInfo"]["LinkList"][17]["Menu"], "HomoloGene Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][17]["Description"], "HomoloGene clusters of homologous genes and sequences that cite the current articles. These are references on the Gene and sequence records in the HomoloGene entry.")
-        self.assertEqual(record["DbInfo"]["LinkList"][17]["DbTo"], "homologene")
-        self.assertEqual(record["DbInfo"]["LinkList"][18]["Name"], "pubmed_nuccore")
-        self.assertEqual(record["DbInfo"]["LinkList"][18]["Menu"], "Nucleotide Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][18]["Description"], "Primary database (GenBank) nucleotide records reported in the current articles as well as Reference Sequences (RefSeqs) that include the articles as references.")
-        self.assertEqual(record["DbInfo"]["LinkList"][18]["DbTo"], "nuccore")
-        self.assertEqual(record["DbInfo"]["LinkList"][19]["Name"], "pubmed_nuccore_refseq")
-        self.assertEqual(record["DbInfo"]["LinkList"][19]["Menu"], "Nucleotide (RefSeq) Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][19]["Description"], "NCBI nucleotide Reference Sequences (RefSeqs) that are cited in the current articles, included in the corresponding Gene Reference into Function, or that include the PubMed articles as references.")
-        self.assertEqual(record["DbInfo"]["LinkList"][19]["DbTo"], "nuccore")
-        self.assertEqual(record["DbInfo"]["LinkList"][20]["Name"], "pubmed_nuccore_weighted")
-        self.assertEqual(record["DbInfo"]["LinkList"][20]["Menu"], "Nucleotide (Weighted) Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][20]["Description"], "Nucleotide records associated with the current articles through the Gene database. These are the related sequences on the Gene record that are added manually by NCBI.")
-        self.assertEqual(record["DbInfo"]["LinkList"][20]["DbTo"], "nuccore")
-        self.assertEqual(record["DbInfo"]["LinkList"][21]["Name"], "pubmed_nucest")
-        self.assertEqual(record["DbInfo"]["LinkList"][21]["Menu"], "EST Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][21]["Description"], "Expressed Sequence Tag (EST) nucleotide sequence records reported in the current articles.")
-        self.assertEqual(record["DbInfo"]["LinkList"][21]["DbTo"], "nucest")
-        self.assertEqual(record["DbInfo"]["LinkList"][22]["Name"], "pubmed_nucgss")
-        self.assertEqual(record["DbInfo"]["LinkList"][22]["Menu"], "GSS Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][22]["Description"], "Genome Survey Sequence (GSS) nucleotide records reported in the current articles.")
-        self.assertEqual(record["DbInfo"]["LinkList"][22]["DbTo"], "nucgss")
-        self.assertEqual(record["DbInfo"]["LinkList"][23]["Name"], "pubmed_omia")
-        self.assertEqual(record["DbInfo"]["LinkList"][23]["Menu"], "OMIA Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][23]["Description"], "Online Mendelian Inheritance in Animals (OMIA) records that cite the current articles.")
-        self.assertEqual(record["DbInfo"]["LinkList"][23]["DbTo"], "omia")
-        self.assertEqual(record["DbInfo"]["LinkList"][24]["Name"], "pubmed_omim_bookrecords")
-        self.assertEqual(record["DbInfo"]["LinkList"][24]["Menu"], "OMIM (from Bookshelf)")
-        self.assertEqual(record["DbInfo"]["LinkList"][24]["Description"], "OMIM records in this citation")
-        self.assertEqual(record["DbInfo"]["LinkList"][24]["DbTo"], "omim")
-        self.assertEqual(record["DbInfo"]["LinkList"][25]["Name"], "pubmed_omim_calculated")
-        self.assertEqual(record["DbInfo"]["LinkList"][25]["Menu"], "OMIM (calculated) Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][25]["Description"], "Online Mendelian Inheritance in Man (OMIM) records that include the current articles as references in the light bulb links within or in the citations at the end of the OMIM record. The references available through the light bulb link are collected using the PubMed related articles algorithm to identify records with similar terminology to the OMIM record.")
-        self.assertEqual(record["DbInfo"]["LinkList"][25]["DbTo"], "omim")
-        self.assertEqual(record["DbInfo"]["LinkList"][26]["Name"], "pubmed_omim_cited")
-        self.assertEqual(record["DbInfo"]["LinkList"][26]["Menu"], "OMIM (cited) Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][26]["Description"], "Online Mendelian Inheritance in Man (OMIM) records that include the current articles as reference cited at the end of the OMIM record.")
-        self.assertEqual(record["DbInfo"]["LinkList"][26]["DbTo"], "omim")
-        self.assertEqual(record["DbInfo"]["LinkList"][27]["Name"], "pubmed_pcassay")
-        self.assertEqual(record["DbInfo"]["LinkList"][27]["Menu"], "BioAssay Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][27]["Description"], "PubChem BioAssay experiments on the biological activities of small molecules that cite the current articles. The depositors of BioAssay data provide these references.")
-        self.assertEqual(record["DbInfo"]["LinkList"][27]["DbTo"], "pcassay")
-        self.assertEqual(record["DbInfo"]["LinkList"][28]["Name"], "pubmed_pccompound")
-        self.assertEqual(record["DbInfo"]["LinkList"][28]["Menu"], "Compound Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][28]["Description"], "PubChem chemical compound records that cite the current articles. These references are taken from those provided on submitted PubChem chemical substance records. Multiple substance records may contribute to the PubChem compound record.")
-        self.assertEqual(record["DbInfo"]["LinkList"][28]["DbTo"], "pccompound")
-        self.assertEqual(record["DbInfo"]["LinkList"][29]["Name"], "pubmed_pccompound_mesh")
-        self.assertEqual(record["DbInfo"]["LinkList"][29]["Menu"], "Compound (MeSH Keyword)")
-        self.assertEqual(record["DbInfo"]["LinkList"][29]["Description"], "PubChem chemical compound records that are classified under the same Medical Subject Headings (MeSH) controlled vocabulary as the current articles.")
-        self.assertEqual(record["DbInfo"]["LinkList"][29]["DbTo"], "pccompound")
-        self.assertEqual(record["DbInfo"]["LinkList"][30]["Name"], "pubmed_pccompound_publisher")
-        self.assertEqual(record["DbInfo"]["LinkList"][30]["Menu"], "Compound (Publisher) Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][30]["Description"], "Link to publisher deposited structures in the PubChem Compound database.")
-        self.assertEqual(record["DbInfo"]["LinkList"][30]["DbTo"], "pccompound")
-        self.assertEqual(record["DbInfo"]["LinkList"][31]["Name"], "pubmed_pcsubstance")
-        self.assertEqual(record["DbInfo"]["LinkList"][31]["Menu"], "Substance Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][31]["Description"], "PubChem chemical substance records that cite the current articles. These references are taken from those provided on submitted PubChem chemical substance records.")
-        self.assertEqual(record["DbInfo"]["LinkList"][31]["DbTo"], "pcsubstance")
-        self.assertEqual(record["DbInfo"]["LinkList"][32]["Name"], "pubmed_pcsubstance_bookrecords")
-        self.assertEqual(record["DbInfo"]["LinkList"][32]["Menu"], "PubChem Substance (from Bookshelf)")
-        self.assertEqual(record["DbInfo"]["LinkList"][32]["Description"], "Structures in the PubChem Substance database in this citation")
-        self.assertEqual(record["DbInfo"]["LinkList"][32]["DbTo"], "pcsubstance")
-        self.assertEqual(record["DbInfo"]["LinkList"][33]["Name"], "pubmed_pcsubstance_mesh")
-        self.assertEqual(record["DbInfo"]["LinkList"][33]["Menu"], "Substance (MeSH Keyword)")
-        self.assertEqual(record["DbInfo"]["LinkList"][33]["Description"], "PubChem chemical substance (submitted) records that are classified under the same Medical Subject Headings (MeSH) controlled vocabulary as the current articles.")
-        self.assertEqual(record["DbInfo"]["LinkList"][33]["DbTo"], "pcsubstance")
-        self.assertEqual(record["DbInfo"]["LinkList"][34]["Name"], "pubmed_pcsubstance_publisher")
-        self.assertEqual(record["DbInfo"]["LinkList"][34]["Menu"], "Substance (Publisher) Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][34]["Description"], "Publisher deposited structures in the PubChem Compound database that are reported in the current articles.")
-        self.assertEqual(record["DbInfo"]["LinkList"][34]["DbTo"], "pcsubstance")
-        self.assertEqual(record["DbInfo"]["LinkList"][35]["Name"], "pubmed_pepdome")
-        self.assertEqual(record["DbInfo"]["LinkList"][35]["Menu"], "Peptidome Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][35]["Description"], "Protein mass spectrometry and other proteomics data from the Peptidome database reported in the current articles.")
-        self.assertEqual(record["DbInfo"]["LinkList"][35]["DbTo"], "pepdome")
-        self.assertEqual(record["DbInfo"]["LinkList"][36]["Name"], "pubmed_pmc")
-        self.assertEqual(record["DbInfo"]["LinkList"][36]["Menu"], "PMC Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][36]["Description"], "Free full-text versions of the current articles in the PubMed Central database.")
-        self.assertEqual(record["DbInfo"]["LinkList"][36]["DbTo"], "pmc")
-        self.assertEqual(record["DbInfo"]["LinkList"][37]["Name"], "pubmed_pmc_bookrecords")
-        self.assertEqual(record["DbInfo"]["LinkList"][37]["Menu"], "References in PMC for this Bookshelf citation")
-        self.assertEqual(record["DbInfo"]["LinkList"][37]["Description"], "Full text of articles in PubMed Central cited in this record")
-        self.assertEqual(record["DbInfo"]["LinkList"][37]["DbTo"], "pmc")
-        self.assertEqual(record["DbInfo"]["LinkList"][38]["Name"], "pubmed_pmc_embargo")
-        self.assertEqual(record["DbInfo"]["LinkList"][38]["Menu"], "")
-        self.assertEqual(record["DbInfo"]["LinkList"][38]["Description"], "Embargoed PMC article associated with PubMed")
-        self.assertEqual(record["DbInfo"]["LinkList"][38]["DbTo"], "pmc")
-        self.assertEqual(record["DbInfo"]["LinkList"][39]["Name"], "pubmed_pmc_local")
-        self.assertEqual(record["DbInfo"]["LinkList"][39]["Menu"], "")
-        self.assertEqual(record["DbInfo"]["LinkList"][39]["Description"], "Free full text articles in PMC")
-        self.assertEqual(record["DbInfo"]["LinkList"][39]["DbTo"], "pmc")
-        self.assertEqual(record["DbInfo"]["LinkList"][40]["Name"], "pubmed_pmc_refs")
-        self.assertEqual(record["DbInfo"]["LinkList"][40]["Menu"], "Cited in PMC")
-        self.assertEqual(record["DbInfo"]["LinkList"][40]["Description"], "Full-text articles in the PubMed Central Database that cite the current articles.")
-        self.assertEqual(record["DbInfo"]["LinkList"][40]["DbTo"], "pmc")
-        self.assertEqual(record["DbInfo"]["LinkList"][41]["Name"], "pubmed_popset")
-        self.assertEqual(record["DbInfo"]["LinkList"][41]["Menu"], "PopSet Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][41]["Description"], "Sets of sequences from population and evolutionary genetic studies in the PopSet database reported in the current articles.")
-        self.assertEqual(record["DbInfo"]["LinkList"][41]["DbTo"], "popset")
-        self.assertEqual(record["DbInfo"]["LinkList"][42]["Name"], "pubmed_probe")
-        self.assertEqual(record["DbInfo"]["LinkList"][42]["Menu"], "Probe Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][42]["Description"], "Molecular reagents in the Probe database that cite the current articles. References in Probe are provided by submitters of the data.")
-        self.assertEqual(record["DbInfo"]["LinkList"][42]["DbTo"], "probe")
-        self.assertEqual(record["DbInfo"]["LinkList"][43]["Name"], "pubmed_protein")
-        self.assertEqual(record["DbInfo"]["LinkList"][43]["Menu"], "Protein Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][43]["Description"], "Protein translation features of primary database (GenBank) nucleotide records reported in the current articles as well as Reference Sequences (RefSeqs) that include the articles as references.")
-        self.assertEqual(record["DbInfo"]["LinkList"][43]["DbTo"], "protein")
-        self.assertEqual(record["DbInfo"]["LinkList"][44]["Name"], "pubmed_protein_refseq")
-        self.assertEqual(record["DbInfo"]["LinkList"][44]["Menu"], "Protein (RefSeq) Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][44]["Description"], "NCBI protein Reference Sequences (RefSeqs) that are cited in the current articles, included in the corresponding Gene Reference into Function, or that include the PubMed articles as references.")
-        self.assertEqual(record["DbInfo"]["LinkList"][44]["DbTo"], "protein")
-        self.assertEqual(record["DbInfo"]["LinkList"][45]["Name"], "pubmed_protein_weighted")
-        self.assertEqual(record["DbInfo"]["LinkList"][45]["Menu"], "Protein (Weighted) Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][45]["Description"], "Protein records associated with the current articles through related Gene database records. These are the related sequences on the Gene record that are added manually by NCBI.")
-        self.assertEqual(record["DbInfo"]["LinkList"][45]["DbTo"], "protein")
-        self.assertEqual(record["DbInfo"]["LinkList"][46]["Name"], "pubmed_proteinclusters")
-        self.assertEqual(record["DbInfo"]["LinkList"][46]["Menu"], "Protein Cluster Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][46]["Description"], "Clusters of related proteins from the Protein Clusters database that cite the current articles. Sources of references in Protein Clusters include the associated Gene and Conserved Domain records as well as NCBI added citations.")
-        self.assertEqual(record["DbInfo"]["LinkList"][46]["DbTo"], "proteinclusters")
-        self.assertEqual(record["DbInfo"]["LinkList"][47]["Name"], "pubmed_pubmed")
-        self.assertEqual(record["DbInfo"]["LinkList"][47]["Menu"], "Related Citations")
-        self.assertEqual(record["DbInfo"]["LinkList"][47]["Description"], u"Calculated set of PubMed citations closely related to the selected article(s) retrieved using a word weight algorithm. Related articles are displayed in ranked order from most to least relevant, with the \u201clinked from\u201d citation displayed first.")
-        self.assertEqual(record["DbInfo"]["LinkList"][47]["DbTo"], "pubmed")
-        self.assertEqual(record["DbInfo"]["LinkList"][48]["Name"], "pubmed_pubmed_bookrecords")
-        self.assertEqual(record["DbInfo"]["LinkList"][48]["Menu"], "References for this Bookshelf citation")
-        self.assertEqual(record["DbInfo"]["LinkList"][48]["Description"], "PubMed abstracts for articles cited in this record")
-        self.assertEqual(record["DbInfo"]["LinkList"][48]["DbTo"], "pubmed")
-        self.assertEqual(record["DbInfo"]["LinkList"][49]["Name"], "pubmed_pubmed_refs")
-        self.assertEqual(record["DbInfo"]["LinkList"][49]["Menu"], "References for PMC Articles")
-        self.assertEqual(record["DbInfo"]["LinkList"][49]["Description"], "Citation referenced in PubMed article. Only valid for PubMed citations that are also in PMC.")
-        self.assertEqual(record["DbInfo"]["LinkList"][49]["DbTo"], "pubmed")
-        self.assertEqual(record["DbInfo"]["LinkList"][50]["Name"], "pubmed_snp")
-        self.assertEqual(record["DbInfo"]["LinkList"][50]["Menu"], "SNP Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][50]["Description"], "Nucleotide polymorphism records from dbSNP that have current articles as submitter-provided references.")
-        self.assertEqual(record["DbInfo"]["LinkList"][50]["DbTo"], "snp")
-        self.assertEqual(record["DbInfo"]["LinkList"][51]["Name"], "pubmed_snp_cited")
-        self.assertEqual(record["DbInfo"]["LinkList"][51]["Menu"], "SNP (Cited)")
-        self.assertEqual(record["DbInfo"]["LinkList"][51]["Description"], "Nucleotide polymorphism records from dbSNP that have NCBI dbSNP identifiers reported in the PubMed abstract of the current articles.")
-        self.assertEqual(record["DbInfo"]["LinkList"][51]["DbTo"], "snp")
-        self.assertEqual(record["DbInfo"]["LinkList"][52]["Name"], "pubmed_sra")
-        self.assertEqual(record["DbInfo"]["LinkList"][52]["Menu"], "SRA Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][52]["Description"], "Massively-parallel sequencing project data in the Short Read Archive (SRA) that are reported in the current articles.")
-        self.assertEqual(record["DbInfo"]["LinkList"][52]["DbTo"], "sra")
-        self.assertEqual(record["DbInfo"]["LinkList"][53]["Name"], "pubmed_structure")
-        self.assertEqual(record["DbInfo"]["LinkList"][53]["Menu"], "Structure Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][53]["Description"], "Three-dimensional structure records in the NCBI Structure database for data reported in the current articles.")
-        self.assertEqual(record["DbInfo"]["LinkList"][53]["DbTo"], "structure")
-        self.assertEqual(record["DbInfo"]["LinkList"][54]["Name"], "pubmed_taxonomy_entrez")
-        self.assertEqual(record["DbInfo"]["LinkList"][54]["Menu"], "Taxonomy via GenBank")
-        self.assertEqual(record["DbInfo"]["LinkList"][54]["Description"], "Taxonomy records associated with the current articles through taxonomic information on related molecular database records (Nucleotide, Protein, Gene, SNP, Structure).")
-        self.assertEqual(record["DbInfo"]["LinkList"][54]["DbTo"], "taxonomy")
-        self.assertEqual(record["DbInfo"]["LinkList"][55]["Name"], "pubmed_unigene")
-        self.assertEqual(record["DbInfo"]["LinkList"][55]["Menu"], "UniGene Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][55]["Description"], "UniGene clusters of expressed sequences that are associated with the current articles through references on the clustered sequence records and related Gene records.")
-        self.assertEqual(record["DbInfo"]["LinkList"][55]["DbTo"], "unigene")
-        self.assertEqual(record["DbInfo"]["LinkList"][56]["Name"], "pubmed_unists")
-        self.assertEqual(record["DbInfo"]["LinkList"][56]["Menu"], "UniSTS Links")
-        self.assertEqual(record["DbInfo"]["LinkList"][56]["Description"], "Genetic, physical, and sequence mapping reagents in the UniSTS database associated with the current articles through references on sequence tagged site (STS) submissions as well as automated searching of PubMed abstracts and full-text PubMed Central articles for marker names.")
-        self.assertEqual(record["DbInfo"]["LinkList"][56]["DbTo"], "unists")
-
-    def test_corrupted(self):
-        '''Test if corrupted XML is handled correctly
-        '''
-        # To create the XML file, use
-        # >>> Bio.Entrez.einfo()
-        # and manually delete the last couple of lines
-        from Bio.Entrez import Parser
-        with open('Entrez/einfo4.xml', "rb") as handle:
-            self.assertRaises(Parser.CorruptedXMLError, Entrez.read, handle)
-
-
-class ESearchTest(unittest.TestCase):
-    '''Tests for parsing XML output returned by ESearch
-    '''
-    def test_pubmed1(self):
-        '''Test parsing XML returned by ESearch from PubMed (first test)
-        '''
-        # To create the XML file, use
-        # >>> Bio.Entrez.esearch(db="pubmed", term="biopython")
-        with open('Entrez/esearch1.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(record['Count'], '5')
-        self.assertEqual(record['RetMax'], '5')
-        self.assertEqual(record['RetStart'], '0')
-        self.assertEqual(len(record['IdList']), 5)
-        self.assertEqual(record['IdList'][0], '16403221')
-        self.assertEqual(record['IdList'][1], '16377612')
-        self.assertEqual(record['IdList'][2], '14871861')
-        self.assertEqual(record['IdList'][3], '14630660')
-        self.assertEqual(record['IdList'][4], '12230038')
-        self.assertEqual(len(record['TranslationSet']), 0)
-        self.assertEqual(len(record['TranslationStack']), 2)
-        self.assertEqual(record['TranslationStack'][0]['Term'], 'biopython[All Fields]')
-        self.assertEqual(record['TranslationStack'][0]['Field'], 'All Fields')
-        self.assertEqual(record['TranslationStack'][0]['Count'], '5')
-        self.assertEqual(record['TranslationStack'][0]['Explode'], 'Y')
-        self.assertEqual(record['TranslationStack'][1], 'GROUP')
-        self.assertEqual(record['QueryTranslation'], 'biopython[All Fields]')
-
-    def test_pubmed2(self):
-        '''Test parsing XML returned by ESearch from PubMed (second test)
-        '''
-        # Search in PubMed for the term cancer for the entrez date from
-        # the last 60 days and retrieve the first 100 IDs and translations
-        # using the history parameter.
-        # To create the XML file, use
-        # >>> Bio.Entrez.esearch(db="pubmed", term="cancer", reldate=60,
-        #                        datetype="edat", retmax=100, usehistory="y")
-        with open('Entrez/esearch2.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(record['Count'], "10238")
-        self.assertEqual(record['RetMax'], "100")
-        self.assertEqual(record['RetStart'], "0")
-        self.assertEqual(record['QueryKey'], '12')
-        self.assertEqual(record['WebEnv'], '0rYFb69LfbTFXfG7-0HPo2BU-ZFWF1s_51WtYR5e0fAzThQCR0WIW12inPQRRIj1xUzSfGgG9ovT9- at 263F6CC86FF8F760_0173SID')
-        self.assertEqual(len(record['IdList']), 100)
-        self.assertEqual(record['IdList'][0], '18411453')
-        self.assertEqual(record['IdList'][1], '18411431')
-        self.assertEqual(record['IdList'][2], '18411430')
-        self.assertEqual(record['IdList'][3], '18411429')
-        self.assertEqual(record['IdList'][4], '18411428')
-        self.assertEqual(record['IdList'][5], '18411402')
-        self.assertEqual(record['IdList'][6], '18411381')
-        self.assertEqual(record['IdList'][7], '18411373')
-        self.assertEqual(record['IdList'][8], '18411372')
-        self.assertEqual(record['IdList'][9], '18411371')
-        self.assertEqual(record['IdList'][10], '18411370')
-        self.assertEqual(record['IdList'][11], '18411367')
-        self.assertEqual(record['IdList'][12], '18411306')
-        self.assertEqual(record['IdList'][13], '18411292')
-        self.assertEqual(record['IdList'][14], '18411277')
-        self.assertEqual(record['IdList'][15], '18411260')
-        self.assertEqual(record['IdList'][16], '18411234')
-        self.assertEqual(record['IdList'][17], '18411200')
-        self.assertEqual(record['IdList'][18], '18411199')
-        self.assertEqual(record['IdList'][19], '18411198')
-        self.assertEqual(record['IdList'][20], '18411197')
-        self.assertEqual(record['IdList'][21], '18411195')
-        self.assertEqual(record['IdList'][22], '18411194')
-        self.assertEqual(record['IdList'][23], '18411193')
-        self.assertEqual(record['IdList'][24], '18411192')
-        self.assertEqual(record['IdList'][25], '18411191')
-        self.assertEqual(record['IdList'][26], '18411052')
-        self.assertEqual(record['IdList'][27], '18411048')
-        self.assertEqual(record['IdList'][28], '18411046')
-        self.assertEqual(record['IdList'][29], '18411019')
-        self.assertEqual(record['IdList'][30], '18411018')
-        self.assertEqual(record['IdList'][31], '18411017')
-        self.assertEqual(record['IdList'][32], '18411015')
-        self.assertEqual(record['IdList'][33], '18411014')
-        self.assertEqual(record['IdList'][34], '18411011')
-        self.assertEqual(record['IdList'][35], '18411010')
-        self.assertEqual(record['IdList'][36], '18411005')
-        self.assertEqual(record['IdList'][37], '18411003')
-        self.assertEqual(record['IdList'][38], '18411001')
-        self.assertEqual(record['IdList'][39], '18411000')
-        self.assertEqual(record['IdList'][40], '18410999')
-        self.assertEqual(record['IdList'][41], '18410998')
-        self.assertEqual(record['IdList'][42], '18410997')
-        self.assertEqual(record['IdList'][43], '18410995')
-        self.assertEqual(record['IdList'][44], '18410977')
-        self.assertEqual(record['IdList'][45], '18410975')
-        self.assertEqual(record['IdList'][46], '18410966')
-        self.assertEqual(record['IdList'][47], '18410954')
-        self.assertEqual(record['IdList'][48], '18410953')
-        self.assertEqual(record['IdList'][49], '18410934')
-        self.assertEqual(record['IdList'][50], '18410925')
-        self.assertEqual(record['IdList'][51], '18410903')
-        self.assertEqual(record['IdList'][52], '18410826')
-        self.assertEqual(record['IdList'][53], '18410739')
-        self.assertEqual(record['IdList'][54], '18410720')
-        self.assertEqual(record['IdList'][55], '18410716')
-        self.assertEqual(record['IdList'][56], '18410709')
-        self.assertEqual(record['IdList'][57], '18410705')
-        self.assertEqual(record['IdList'][58], '18410692')
-        self.assertEqual(record['IdList'][59], '18410690')
-        self.assertEqual(record['IdList'][60], '18410634')
-        self.assertEqual(record['IdList'][61], '18410618')
-        self.assertEqual(record['IdList'][62], '18410610')
-        self.assertEqual(record['IdList'][63], '18410593')
-        self.assertEqual(record['IdList'][64], '18410587')
-        self.assertEqual(record['IdList'][65], '18410567')
-        self.assertEqual(record['IdList'][66], '18410539')
-        self.assertEqual(record['IdList'][67], '18410530')
-        self.assertEqual(record['IdList'][68], '18410528')
-        self.assertEqual(record['IdList'][69], '18410461')
-        self.assertEqual(record['IdList'][70], '18410455')
-        self.assertEqual(record['IdList'][71], '18410444')
-        self.assertEqual(record['IdList'][72], '18410443')
-        self.assertEqual(record['IdList'][73], '18410442')
-        self.assertEqual(record['IdList'][74], '18410441')
-        self.assertEqual(record['IdList'][75], '18410440')
-        self.assertEqual(record['IdList'][76], '18410439')
-        self.assertEqual(record['IdList'][77], '18410437')
-        self.assertEqual(record['IdList'][78], '18410436')
-        self.assertEqual(record['IdList'][79], '18410435')
-        self.assertEqual(record['IdList'][80], '18410431')
-        self.assertEqual(record['IdList'][81], '18410430')
-        self.assertEqual(record['IdList'][82], '18410428')
-        self.assertEqual(record['IdList'][83], '18410427')
-        self.assertEqual(record['IdList'][84], '18410405')
-        self.assertEqual(record['IdList'][85], '18410404')
-        self.assertEqual(record['IdList'][86], '18410355')
-        self.assertEqual(record['IdList'][87], '18410327')
-        self.assertEqual(record['IdList'][88], '18410312')
-        self.assertEqual(record['IdList'][89], '18410311')
-        self.assertEqual(record['IdList'][90], '18410307')
-        self.assertEqual(record['IdList'][91], '18410259')
-        self.assertEqual(record['IdList'][92], '18410249')
-        self.assertEqual(record['IdList'][93], '18410245')
-        self.assertEqual(record['IdList'][94], '18410243')
-        self.assertEqual(record['IdList'][95], '18410242')
-        self.assertEqual(record['IdList'][96], '18410060')
-        self.assertEqual(record['IdList'][97], '18410013')
-        self.assertEqual(record['IdList'][98], '18409992')
-        self.assertEqual(record['IdList'][99], '18409991')
-        self.assertEqual(len(record['TranslationSet']), 1)
-        self.assertEqual(record['TranslationSet'][0]['From'], 'cancer')
-        self.assertEqual(record['TranslationSet'][0]['To'], '(("neoplasms"[TIAB] NOT Medline[SB]) OR "neoplasms"[MeSH Terms] OR cancer[Text Word])')
-        self.assertEqual(len(record['TranslationStack']), 13)
-        self.assertEqual(record['TranslationStack'][0]['Term'], '"neoplasms"[TIAB]')
-        self.assertEqual(record['TranslationStack'][0]['Field'], 'TIAB')
-        self.assertEqual(record['TranslationStack'][0]['Count'], "52104")
-        self.assertEqual(record['TranslationStack'][0]['Explode'], 'Y')
-        self.assertEqual(record['TranslationStack'][1]['Term'], 'Medline[SB]')
-        self.assertEqual(record['TranslationStack'][1]['Field'], 'SB')
-        self.assertEqual(record['TranslationStack'][1]['Count'], "16509514")
-        self.assertEqual(record['TranslationStack'][1]['Explode'], 'Y')
-        self.assertEqual(record['TranslationStack'][2], 'NOT')
-        self.assertEqual(record['TranslationStack'][3], 'GROUP')
-        self.assertEqual(record['TranslationStack'][4]['Term'], '"neoplasms"[MeSH Terms]')
-        self.assertEqual(record['TranslationStack'][4]['Field'], 'MeSH Terms')
-        self.assertEqual(record['TranslationStack'][4]['Count'], "1918010")
-        self.assertEqual(record['TranslationStack'][4]['Explode'], 'Y')
-        self.assertEqual(record['TranslationStack'][5], 'OR')
-        self.assertEqual(record['TranslationStack'][6]['Term'], 'cancer[Text Word]')
-        self.assertEqual(record['TranslationStack'][6]['Field'], 'Text Word')
-        self.assertEqual(record['TranslationStack'][6]['Count'], "638849")
-        self.assertEqual(record['TranslationStack'][6]['Explode'], 'Y')
-        self.assertEqual(record['TranslationStack'][7], 'OR')
-        self.assertEqual(record['TranslationStack'][8], 'GROUP')
-        self.assertEqual(record['TranslationStack'][9]['Term'], '2008/02/16[EDAT]')
-        self.assertEqual(record['TranslationStack'][9]['Field'], 'EDAT')
-        self.assertEqual(record['TranslationStack'][9]['Count'], "-1")
-        self.assertEqual(record['TranslationStack'][9]['Explode'], 'Y')
-        self.assertEqual(record['TranslationStack'][10]['Term'], '2008/04/16[EDAT]')
-        self.assertEqual(record['TranslationStack'][10]['Field'], 'EDAT')
-        self.assertEqual(record['TranslationStack'][10]['Count'], "-1")
-        self.assertEqual(record['TranslationStack'][10]['Explode'], 'Y')
-        self.assertEqual(record['TranslationStack'][11], 'RANGE')
-        self.assertEqual(record['TranslationStack'][12], 'AND')
-        self.assertEqual(record['QueryTranslation'], '(("neoplasms"[TIAB] NOT Medline[SB]) OR "neoplasms"[MeSH Terms] OR cancer[Text Word]) AND 2008/02/16[EDAT] : 2008/04/16[EDAT]')
-
-    def test_pubmed3(self):
-        '''Test parsing XML returned by ESearch from PubMed (third test)
-        '''
-        # Search in PubMed for the journal PNAS Volume 97, and retrieve
-        # 6 IDs starting at ID 7.
-        # To create the XML file, use
-        # >>> Bio.Entrez.esearch(db="pubmed", term="PNAS[ta] AND 97[vi]",
-        #                        retstart=6, retmax=6)
-        with open('Entrez/esearch3.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(record['Count'], '2652')
-        self.assertEqual(record['RetMax'], '6')
-        self.assertEqual(record['RetStart'], '6')
-        self.assertEqual(len(record['IdList']), 6)
-        self.assertEqual(record['IdList'][0], '11121077')
-        self.assertEqual(record['IdList'][1], '11121076')
-        self.assertEqual(record['IdList'][2], '11121075')
-        self.assertEqual(record['IdList'][3], '11121074')
-        self.assertEqual(record['IdList'][4], '11121073')
-        self.assertEqual(record['IdList'][5], '11121072')
-        self.assertEqual(len(record['TranslationSet']), 1)
-        self.assertEqual(record['TranslationSet'][0]['From'], 'PNAS[ta]')
-        self.assertEqual(record['TranslationSet'][0]['To'], '"Proc Natl Acad Sci U S A"[Journal:__jrid6653]')
-        self.assertEqual(len(record['TranslationStack']), 3)
-        self.assertEqual(record['TranslationStack'][0]['Term'], '"Proc Natl Acad Sci U S A"[Journal]')
-        self.assertEqual(record['TranslationStack'][0]['Field'], 'Journal')
-        self.assertEqual(record['TranslationStack'][0]['Count'], '91806')
-        self.assertEqual(record['TranslationStack'][0]['Explode'], 'Y')
-        self.assertEqual(record['TranslationStack'][1]['Term'], '97[vi]')
-        self.assertEqual(record['TranslationStack'][1]['Field'], 'vi')
-        self.assertEqual(record['TranslationStack'][1]['Count'], '58681')
-        self.assertEqual(record['TranslationStack'][1]['Explode'], 'Y')
-        self.assertEqual(record['TranslationStack'][2], 'AND')
-        self.assertEqual(record['QueryTranslation'], '"Proc Natl Acad Sci U S A"[Journal] AND 97[vi]')
-
-    def test_journals(self):
-        '''Test parsing XML returned by ESearch from the Journals database
-        '''
-        # Search in Journals for the term obstetrics.
-        # To create the XML file, use
-        # >>> Bio.Entrez.esearch(db="journals", term="obstetrics")
-        with open('Entrez/esearch4.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(record['Count'], '177')
-        self.assertEqual(record['RetMax'], '20')
-        self.assertEqual(record['RetStart'], '0')
-        self.assertEqual(len(record['IdList']), 20)
-        self.assertEqual(record['IdList'][0], '75')
-        self.assertEqual(record['IdList'][1], '138')
-        self.assertEqual(record['IdList'][2], '136')
-        self.assertEqual(record['IdList'][3], '137')
-        self.assertEqual(record['IdList'][4], '139')
-        self.assertEqual(record['IdList'][5], '140')
-        self.assertEqual(record['IdList'][6], '355')
-        self.assertEqual(record['IdList'][7], '354')
-        self.assertEqual(record['IdList'][8], '27731')
-        self.assertEqual(record['IdList'][9], '439')
-        self.assertEqual(record['IdList'][10], '564')
-        self.assertEqual(record['IdList'][11], '617')
-        self.assertEqual(record['IdList'][12], '749')
-        self.assertEqual(record['IdList'][13], '735')
-        self.assertEqual(record['IdList'][14], '815')
-        self.assertEqual(record['IdList'][15], '905')
-        self.assertEqual(record['IdList'][16], '903')
-        self.assertEqual(record['IdList'][17], '932')
-        self.assertEqual(record['IdList'][18], '933')
-        self.assertEqual(record['IdList'][19], '875')
-        self.assertEqual(len(record['TranslationSet']), 0)
-        self.assertEqual(len(record['TranslationStack']), 2)
-        self.assertEqual(record['TranslationStack'][0]['Term'], 'obstetrics[All Fields]')
-        self.assertEqual(record['TranslationStack'][0]['Field'], 'All Fields')
-        self.assertEqual(record['TranslationStack'][0]['Count'], '177')
-        self.assertEqual(record['TranslationStack'][0]['Explode'], 'Y')
-        self.assertEqual(record['TranslationStack'][0].tag, "TermSet")
-        self.assertEqual(record['TranslationStack'][1], 'GROUP')
-        self.assertEqual(record['TranslationStack'][1].tag, "OP")
-        self.assertEqual(record['QueryTranslation'], 'obstetrics[All Fields]')
-
-    def test_pmc(self):
-        '''Test parsing XML returned by ESearch from PubMed Central
-        '''
-        # Search in PubMed Central for stem cells in free fulltext articles.
-        # To create the XML file, use
-        # >>> Bio.Entrez.esearch(db="pmc",
-        #                        term="stem cells AND free fulltext[filter]")
-        with open('Entrez/esearch5.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(record['Count'], '23492')
-        self.assertEqual(record['RetMax'], '20')
-        self.assertEqual(record['RetStart'], '0')
-        self.assertEqual(len(record['IdList']), 20)
-        self.assertEqual(record['IdList'][0], '1894783')
-        self.assertEqual(record['IdList'][1], '2064507')
-        self.assertEqual(record['IdList'][2], '520747')
-        self.assertEqual(record['IdList'][3], '2043120')
-        self.assertEqual(record['IdList'][4], '2118723')
-        self.assertEqual(record['IdList'][5], '1815228')
-        self.assertEqual(record['IdList'][6], '1253596')
-        self.assertEqual(record['IdList'][7], '2077853')
-        self.assertEqual(record['IdList'][8], '1308908')
-        self.assertEqual(record['IdList'][9], '2233634')
-        self.assertEqual(record['IdList'][10], '556262')
-        self.assertEqual(record['IdList'][11], '1925137')
-        self.assertEqual(record['IdList'][12], '1860068')
-        self.assertEqual(record['IdList'][13], '1626529')
-        self.assertEqual(record['IdList'][14], '2217616')
-        self.assertEqual(record['IdList'][15], '1584276')
-        self.assertEqual(record['IdList'][16], '2000702')
-        self.assertEqual(record['IdList'][17], '186324')
-        self.assertEqual(record['IdList'][18], '1959362')
-        self.assertEqual(record['IdList'][19], '1413911')
-        self.assertEqual(len(record['TranslationSet']), 1)
-        self.assertEqual(record['TranslationSet'][0]['From'], 'stem cells')
-        self.assertEqual(record['TranslationSet'][0]['To'], '("stem cells"[MeSH Terms] OR stem cells[Acknowledgments] OR stem cells[Figure/Table Caption] OR stem cells[Section Title] OR stem cells[Body - All Words] OR stem cells[Title] OR stem cells[Abstract])')
-        self.assertEqual(len(record['TranslationStack']), 16)
-        self.assertEqual(record['TranslationStack'][0]['Term'], '"stem cells"[MeSH Terms]')
-        self.assertEqual(record['TranslationStack'][0]['Field'], 'MeSH Terms')
-        self.assertEqual(record['TranslationStack'][0]['Count'], '12224')
-        self.assertEqual(record['TranslationStack'][0]['Explode'], 'Y')
-        self.assertEqual(record['TranslationStack'][1]['Term'], 'stem cells[Acknowledgments]')
-        self.assertEqual(record['TranslationStack'][1]['Field'], 'Acknowledgments')
-        self.assertEqual(record['TranslationStack'][1]['Count'], '79')
-        self.assertEqual(record['TranslationStack'][1]['Explode'], 'Y')
-        self.assertEqual(record['TranslationStack'][2], 'OR')
-        self.assertEqual(record['TranslationStack'][3]['Term'], 'stem cells[Figure/Table Caption]')
-        self.assertEqual(record['TranslationStack'][3]['Field'], 'Figure/Table Caption')
-        self.assertEqual(record['TranslationStack'][3]['Count'], '806')
-        self.assertEqual(record['TranslationStack'][3]['Explode'], 'Y')
-        self.assertEqual(record['TranslationStack'][4], 'OR')
-        self.assertEqual(record['TranslationStack'][5]['Term'], 'stem cells[Section Title]')
-        self.assertEqual(record['TranslationStack'][5]['Field'], 'Section Title')
-        self.assertEqual(record['TranslationStack'][5]['Count'], '522')
-        self.assertEqual(record['TranslationStack'][5]['Explode'], 'Y')
-        self.assertEqual(record['TranslationStack'][6], 'OR')
-        self.assertEqual(record['TranslationStack'][7]['Term'], 'stem cells[Body - All Words]')
-        self.assertEqual(record['TranslationStack'][7]['Field'], 'Body - All Words')
-        self.assertEqual(record['TranslationStack'][7]['Count'], '13936')
-        self.assertEqual(record['TranslationStack'][7]['Explode'], 'Y')
-        self.assertEqual(record['TranslationStack'][8], 'OR')
-        self.assertEqual(record['TranslationStack'][9]['Term'], 'stem cells[Title]')
-        self.assertEqual(record['TranslationStack'][9]['Field'], 'Title')
-        self.assertEqual(record['TranslationStack'][9]['Count'], '1005')
-        self.assertEqual(record['TranslationStack'][9]['Explode'], 'Y')
-        self.assertEqual(record['TranslationStack'][10], 'OR')
-        self.assertEqual(record['TranslationStack'][11]['Term'], 'stem cells[Abstract]')
-        self.assertEqual(record['TranslationStack'][11]['Field'], 'Abstract')
-        self.assertEqual(record['TranslationStack'][11]['Count'], '2503')
-        self.assertEqual(record['TranslationStack'][11]['Explode'], 'Y')
-        self.assertEqual(record['TranslationStack'][12], 'OR')
-        self.assertEqual(record['TranslationStack'][13], 'GROUP')
-        self.assertEqual(record['TranslationStack'][14]['Term'], 'free fulltext[filter]')
-        self.assertEqual(record['TranslationStack'][14]['Field'], 'filter')
-        self.assertEqual(record['TranslationStack'][14]['Count'], '1412839')
-        self.assertEqual(record['TranslationStack'][14]['Explode'], 'Y')
-        self.assertEqual(record['TranslationStack'][15], 'AND')
-        self.assertEqual(record['QueryTranslation'], '("stem cells"[MeSH Terms] OR stem cells[Acknowledgments] OR stem cells[Figure/Table Caption] OR stem cells[Section Title] OR stem cells[Body - All Words] OR stem cells[Title] OR stem cells[Abstract]) AND free fulltext[filter]')
-
-    def test_nucleotide(self):
-        '''Test parsing XML returned by ESearch from the Nucleotide database
-        '''
-        # Search in Nucleotide for a property of the sequence,
-        # To create the XML file, use
-        # >>> Bio.Entrez.esearch(db="nucleotide", term="biomol trna[prop]")
-        with open('Entrez/esearch6.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(record['Count'], "699")
-        self.assertEqual(record['RetMax'], "20")
-        self.assertEqual(record['RetStart'], "0")
-        self.assertEqual(len(record['IdList']), 20)
-        self.assertEqual(record['IdList'][0], '220161')
-        self.assertEqual(record['IdList'][1], '220160')
-        self.assertEqual(record['IdList'][2], '220159')
-        self.assertEqual(record['IdList'][3], '220263')
-        self.assertEqual(record['IdList'][4], '220162')
-        self.assertEqual(record['IdList'][5], '159885659')
-        self.assertEqual(record['IdList'][6], '156572228')
-        self.assertEqual(record['IdList'][7], '2648075')
-        self.assertEqual(record['IdList'][8], '287595')
-        self.assertEqual(record['IdList'][9], '402544')
-        self.assertEqual(record['IdList'][10], '402506')
-        self.assertEqual(record['IdList'][11], '402505')
-        self.assertEqual(record['IdList'][12], '287594')
-        self.assertEqual(record['IdList'][13], '287593')
-        self.assertEqual(record['IdList'][14], '287592')
-        self.assertEqual(record['IdList'][15], '287591')
-        self.assertEqual(record['IdList'][16], '287590')
-        self.assertEqual(record['IdList'][17], '287589')
-        self.assertEqual(record['IdList'][18], '287588')
-        self.assertEqual(record['IdList'][19], '287587')
-        self.assertEqual(len(record['TranslationSet']), 0)
-        self.assertEqual(record['QueryTranslation'], '')
-
-    def test_protein(self):
-        '''Test parsing XML returned by ESearch from the Protein database
-        '''
-        # Search in Protein for a molecular weight
-        # To create the XML file, use
-        # >>> Bio.Entrez.esearch(db="protein", term="200020[molecular weight]")
-        with open('Entrez/esearch7.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(record['Count'], '3')
-        self.assertEqual(record['RetMax'], '3')
-        self.assertEqual(record['RetStart'], '0')
-        self.assertEqual(len(record['IdList']), 3)
-        self.assertEqual(record['IdList'][0], '16766766')
-        self.assertEqual(record['IdList'][1], '16422035')
-        self.assertEqual(record['IdList'][2], '4104812')
-        self.assertEqual(len(record['TranslationSet']), 0)
-        self.assertEqual(len(record['TranslationStack']), 2)
-        self.assertEqual(record['TranslationStack'][0]['Term'], '000200020[molecular weight]')
-        self.assertEqual(record['TranslationStack'][0]['Field'], 'molecular weight')
-        self.assertEqual(record['TranslationStack'][0]['Count'], '3')
-        self.assertEqual(record['TranslationStack'][0]['Explode'], 'Y')
-        self.assertEqual(record['TranslationStack'][1], 'GROUP')
-        self.assertEqual(record['QueryTranslation'], '000200020[molecular weight]')
-
-    def test_notfound(self):
-        '''Test parsing XML returned by ESearch when no items were found
-        '''
-        # To create the XML file, use
-        # >>> Bio.Entrez.esearch(db="protein", term="abcXYZ")
-        with open('Entrez/esearch8.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(record['Count'], "0")
-        self.assertEqual(record['RetMax'], "0")
-        self.assertEqual(record['RetStart'], "0")
-        self.assertEqual(len(record['IdList']), 0)
-        self.assertEqual(len(record['TranslationSet']), 0)
-        self.assertEqual(record['QueryTranslation'], '')
-        self.assertEqual(len(record['ErrorList']), 2)
-        self.assertTrue("PhraseNotFound" in record['ErrorList'])
-        self.assertTrue("FieldNotFound" in record['ErrorList'])
-        self.assertEqual(len(record['ErrorList']["PhraseNotFound"]), 1)
-        self.assertEqual(len(record['ErrorList']["FieldNotFound"]), 0)
-        self.assertEqual(record['ErrorList']["PhraseNotFound"][0], "abcXYZ")
-        self.assertEqual(len(record['WarningList']), 3)
-        self.assertTrue("PhraseIgnored" in record['WarningList'])
-        self.assertTrue("QuotedPhraseNotFound" in record['WarningList'])
-        self.assertTrue("OutputMessage" in record['WarningList'])
-        self.assertEqual(len(record['WarningList']["PhraseIgnored"]), 0)
-        self.assertEqual(len(record['WarningList']["QuotedPhraseNotFound"]), 0)
-        self.assertEqual(len(record['WarningList']["OutputMessage"]), 1)
-        self.assertEqual(record['WarningList']["OutputMessage"][0], "No items found.")
-
-
-class EPostTest(unittest.TestCase):
-    '''Tests for parsing XML output returned by EPost
-    '''
-    # Don't know how to get an InvalidIdList in the XML returned by EPost;
-    # unable to test if we are parsing it correctly.
-    def test_epost(self):
-        '''Test parsing XML returned by EPost
-        '''
-        # To create the XML file, use
-        # >>> Bio.Entrez.epost(db="pubmed", id="11237011")
-        with open('Entrez/epost1.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(record["QueryKey"], '1')
-        self.assertEqual(record["WebEnv"], '0zYsuLk3zG_lRMkblPBEqnT8nIENUGw4HAy8xXChTnoVm7GEnWY71jv3nz at 1FC077F3806DE010_0042SID')
-
-    def test_wrong(self):
-        '''Test parsing XML returned by EPost with incorrect arguments
-        '''
-        # To create the XML file, use
-        # >>> Bio.Entrez.epost(db="nothing")
-        with open('Entrez/epost2.xml', "rb") as handle:
-            self.assertRaises(RuntimeError, Entrez.read, handle)
-
-    def test_invalid(self):
-        '''Test parsing XML returned by EPost with an invalid id (overflow tag)
-        '''
-        # To create the XML file, use
-        # >>> Bio.Entrez.epost(db="pubmed", id=99999999999999999999999999999999)
-        with open('Entrez/epost3.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(record["InvalidIdList"], ["-1"])
-        self.assertEqual(record["QueryKey"], "1")
-        self.assertEqual(record["WebEnv"], "08AIUeBsfIk6BfdzKnd3GM2RtCudczC9jm5aeb4US0o7azCTQCeCsr-xg0 at 1EDE54E680D03C40_0011SID")
-
-
-class ESummaryTest(unittest.TestCase):
-    '''Tests for parsing XML output returned by ESummary
-    '''
-    # Items have a type, which can be
-    # (Integer|Date|String|Structure|List|Flags|Qualifier|Enumerator|Unknown)
-    # I don't have an XML file where the type "Flags", "Qualifier",
-    # "Enumerator", or "Unknown" is used, so they are not tested here.
-    def test_pubmed(self):
-        '''Test parsing XML returned by ESummary from PubMed
-        '''
-        # In PubMed display records for PMIDs 11850928 and 11482001 in
-        # xml retrieval mode
-        # To create the XML file, use
-        # >>> Bio.Entrez.esummary(db="pubmed", id=["11850928","11482001"],
-        #                         retmode="xml")
-        with open('Entrez/esummary1.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(record[0]["Id"], "11850928")
-        self.assertEqual(record[0]["PubDate"], "1965 Aug")
-        self.assertEqual(record[0]["EPubDate"], "")
-        self.assertEqual(record[0]["Source"], "Arch Dermatol")
-        self.assertEqual(len(record[0]["AuthorList"]), 2)
-        self.assertEqual(record[0]["AuthorList"][0], "LoPresti PJ")
-        self.assertEqual(record[0]["AuthorList"][1], "Hambrick GW Jr")
-        self.assertEqual(record[0]["LastAuthor"], "Hambrick GW Jr")
-        self.assertEqual(record[0]["Title"], "Zirconium granuloma following treatment of rhus dermatitis.")
-        self.assertEqual(record[0]["Volume"], "92")
-        self.assertEqual(record[0]["Issue"], "2")
-        self.assertEqual(record[0]["Pages"], "188-91")
-        self.assertEqual(record[0]["LangList"], ["English"])
-        self.assertEqual(record[0]["NlmUniqueID"], "0372433")
-        self.assertEqual(record[0]["ISSN"], "0003-987X")
-        self.assertEqual(record[0]["ESSN"], "1538-3652")
-        self.assertEqual(len(record[0]["PubTypeList"]), 1)
-        self.assertEqual(record[0]["PubTypeList"][0], "Journal Article")
-        self.assertEqual(record[0]["RecordStatus"], "PubMed - indexed for MEDLINE")
-        self.assertEqual(record[0]["PubStatus"], "ppublish")
-        self.assertEqual(len(record[0]["ArticleIds"]), 2)
-        self.assertEqual(record[0]["ArticleIds"]["pubmed"], ["11850928"])
-        self.assertEqual(record[0]["ArticleIds"]["medline"], [])
-        self.assertEqual(len(record[0]["History"]), 2)
-        self.assertEqual(record[0]["History"]["pubmed"], ["1965/08/01 00:00"])
-        self.assertEqual(record[0]["History"]["medline"], ["2002/03/09 10:01"])
-        self.assertEqual(len(record[0]["References"]), 0)
-        self.assertEqual(record[0]["HasAbstract"], 1)
-        self.assertEqual(record[0]["PmcRefCount"], 0)
-        self.assertEqual(record[0]["FullJournalName"], "Archives of dermatology")
-        self.assertEqual(record[0]["ELocationID"], "")
-        self.assertEqual(record[0]["SO"], "1965 Aug;92(2):188-91")
-
-        self.assertEqual(record[1]["Id"], "11482001")
-        self.assertEqual(record[1]["PubDate"], "2001 Jun")
-        self.assertEqual(record[1]["EPubDate"], "")
-        self.assertEqual(record[1]["Source"], "Adverse Drug React Toxicol Rev")
-        self.assertEqual(len(record[1]["AuthorList"]), 3)
-        self.assertEqual(record[1]["AuthorList"][0], "Mantle D")
-        self.assertEqual(record[1]["AuthorList"][1], "Gok MA")
-        self.assertEqual(record[1]["AuthorList"][2], "Lennard TW")
-        self.assertEqual(record[1]["LastAuthor"], "Lennard TW")
-        self.assertEqual(record[1]["Title"], "Adverse and beneficial effects of plant extracts on skin and skin disorders.")
-        self.assertEqual(record[1]["Volume"], "20")
-        self.assertEqual(record[1]["Issue"], "2")
-        self.assertEqual(record[1]["Pages"], "89-103")
-        self.assertEqual(len(record[1]["LangList"]), 1)
-        self.assertEqual(record[1]["LangList"][0], "English")
-        self.assertEqual(record[1]["NlmUniqueID"], "9109474")
-        self.assertEqual(record[1]["ISSN"], "0964-198X")
-        self.assertEqual(record[1]["ESSN"], "")
-        self.assertEqual(len(record[1]["PubTypeList"]), 2)
-        self.assertEqual(record[1]["PubTypeList"][0], "Journal Article")
-        self.assertEqual(record[1]["PubTypeList"][1], "Review")
-        self.assertEqual(record[1]["RecordStatus"], "PubMed - indexed for MEDLINE")
-        self.assertEqual(record[1]["PubStatus"], "ppublish")
-        self.assertEqual(len(record[1]["ArticleIds"]), 2)
-        self.assertEqual(record[1]["ArticleIds"]["pubmed"], ["11482001"])
-        self.assertEqual(record[1]["ArticleIds"]["medline"], [])
-        self.assertEqual(len(record[1]["History"]), 2)
-        self.assertEqual(record[1]["History"]["pubmed"], ["2001/08/03 10:00"])
-        self.assertEqual(record[1]["History"]["medline"], ["2002/01/23 10:01"])
-        self.assertEqual(len(record[1]["References"]), 0)
-        self.assertEqual(record[1]["HasAbstract"], 1)
-        self.assertEqual(record[1]["PmcRefCount"], 0)
-        self.assertEqual(record[1]["FullJournalName"], "Adverse drug reactions and toxicological reviews")
-        self.assertEqual(record[1]["ELocationID"], "")
-        self.assertEqual(record[1]["SO"], "2001 Jun;20(2):89-103")
-
-    def test_journals(self):
-        '''Test parsing XML returned by ESummary from the Journals database
-        '''
-        # In Journals display records for journal IDs 27731,439,735,905
-        # To create the XML file, use
-        # >>> Bio.Entrez.esummary(db="journals", id="27731,439,735,905")
-        with open('Entrez/esummary2.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(record[0]["Id"], "27731")
-        self.assertEqual(record[0]["Title"], "The American journal of obstetrics and diseases of women and children")
-        self.assertEqual(record[0]["MedAbbr"], "Am J Obstet Dis Women Child")
-        self.assertEqual(record[0]["IsoAbbr"], "")
-        self.assertEqual(record[0]["NlmId"], "14820330R")
-        self.assertEqual(record[0]["pISSN"], "0894-5543")
-        self.assertEqual(record[0]["eISSN"], "")
-        self.assertEqual(record[0]["PublicationStartYear"], "1868")
-        self.assertEqual(record[0]["PublicationEndYear"], "1919")
-        self.assertEqual(record[0]["Publisher"], "W.A. Townsend & Adams, $c [1868-1919]")
-        self.assertEqual(record[0]["Language"], "eng")
-        self.assertEqual(record[0]["Country"], "United States")
-        self.assertEqual(len(record[0]["BroadHeading"]), 0)
-        self.assertEqual(record[0]["ContinuationNotes"], "")
-
-        self.assertEqual(record[1]["Id"], "439")
-        self.assertEqual(record[1]["Title"], "American journal of obstetrics and gynecology")
-        self.assertEqual(record[1]["MedAbbr"], "Am J Obstet Gynecol")
-        self.assertEqual(record[1]["IsoAbbr"], "Am. J. Obstet. Gynecol.")
-        self.assertEqual(record[1]["NlmId"], "0370476")
-        self.assertEqual(record[1]["pISSN"], "0002-9378")
-        self.assertEqual(record[1]["eISSN"], "1097-6868")
-        self.assertEqual(record[1]["PublicationStartYear"], "1920")
-        self.assertEqual(record[1]["PublicationEndYear"], "")
-        self.assertEqual(record[1]["Publisher"], "Elsevier,")
-        self.assertEqual(record[1]["Language"], "eng")
-        self.assertEqual(record[1]["Country"], "United States")
-        self.assertEqual(len(record[1]["BroadHeading"]), 2)
-        self.assertEqual(record[1]["BroadHeading"][0], "Gynecology")
-        self.assertEqual(record[1]["BroadHeading"][1], "Obstetrics")
-        self.assertEqual(record[1]["ContinuationNotes"], "Continues: American journal of obstetrics and diseases of women and children. ")
-
-        self.assertEqual(record[2]["Id"], "735")
-        self.assertEqual(record[2]["Title"], "Archives of gynecology and obstetrics")
-        self.assertEqual(record[2]["MedAbbr"], "Arch Gynecol Obstet")
-        self.assertEqual(record[2]["IsoAbbr"], "Arch. Gynecol. Obstet.")
-        self.assertEqual(record[2]["NlmId"], "8710213")
-        self.assertEqual(record[2]["pISSN"], "0932-0067")
-        self.assertEqual(record[2]["eISSN"], "1432-0711")
-        self.assertEqual(record[2]["PublicationStartYear"], "1987")
-        self.assertEqual(record[2]["PublicationEndYear"], "")
-        self.assertEqual(record[2]["Publisher"], "Springer Verlag")
-        self.assertEqual(record[2]["Language"], "eng")
-        self.assertEqual(record[2]["Country"], "Germany")
-        self.assertEqual(len(record[2]["BroadHeading"]), 2)
-        self.assertEqual(record[2]["BroadHeading"][0], "Gynecology")
-        self.assertEqual(record[2]["BroadHeading"][1], "Obstetrics")
-        self.assertEqual(record[2]["ContinuationNotes"], "Continues: Archives of gynecology. ")
-
-        self.assertEqual(record[3]["Id"], "905")
-        self.assertEqual(record[3]["Title"], "Asia-Oceania journal of obstetrics and gynaecology / AOFOG")
-        self.assertEqual(record[3]["MedAbbr"], "Asia Oceania J Obstet Gynaecol")
-        self.assertEqual(record[3]["IsoAbbr"], "")
-        self.assertEqual(record[3]["NlmId"], "8102781")
-        self.assertEqual(record[3]["pISSN"], "0389-2328")
-        self.assertEqual(record[3]["eISSN"], "")
-        self.assertEqual(record[3]["PublicationStartYear"], "1980")
-        self.assertEqual(record[3]["PublicationEndYear"], "1994")
-        self.assertEqual(record[3]["Publisher"], "University Of Tokyo Press")
-        self.assertEqual(record[3]["Language"], "eng")
-        self.assertEqual(record[3]["Country"], "Japan")
-        self.assertEqual(len(record[3]["BroadHeading"]), 2)
-        self.assertEqual(record[3]["BroadHeading"][0], "Gynecology")
-        self.assertEqual(record[3]["BroadHeading"][1], "Obstetrics")
-        self.assertEqual(record[3]["ContinuationNotes"], "Continues: Journal of the Asian Federation of Obstetrics and Gynaecology. Continued by: Journal of obstetrics and gynaecology (Tokyo, Japan). ")
-
-    def test_protein(self):
-        '''Test parsing XML returned by ESummary from the Protein database
-        '''
-        # In Protein display records for GIs 28800982 and 28628843 in xml retrieval mode
-        # To create the XML file, use
-        # >>> Bio.Entrez.esummary(db="protein", id="28800982,28628843", retmode="xml")
-        with open('Entrez/esummary3.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(record[0]["Id"], "28800982")
-        self.assertEqual(record[0]["Caption"], "AAO47091")
-        self.assertEqual(record[0]["Title"], "hemochromatosis [Homo sapiens]")
-        self.assertEqual(record[0]["Extra"], "gi|28800982|gb|AAO47091.1|[28800982]")
-        self.assertEqual(record[0]["Gi"], 28800982)
-        self.assertEqual(record[0]["CreateDate"], "2003/03/03")
-        self.assertEqual(record[0]["UpdateDate"], "2003/03/03")
-        self.assertEqual(record[0]["Flags"], 0)
-        self.assertEqual(record[0]["TaxId"], 9606)
-        self.assertEqual(record[0]["Length"], 268)
-        self.assertEqual(record[0]["Status"], "live")
-        self.assertEqual(record[0]["ReplacedBy"], "")
-        self.assertEqual(record[0]["Comment"], "  ")
-
-        self.assertEqual(record[1]["Id"], "28628843")
-        self.assertEqual(record[1]["Caption"], "AAO49381")
-        self.assertEqual(record[1]["Title"], "erythroid associated factor [Homo sapiens]")
-        self.assertEqual(record[1]["Extra"], "gi|28628843|gb|AAO49381.1|AF485325_1[28628843]")
-        self.assertEqual(record[1]["Gi"], 28628843)
-        self.assertEqual(record[1]["CreateDate"], "2003/03/02")
-        self.assertEqual(record[1]["UpdateDate"], "2003/03/02")
-        self.assertEqual(record[1]["Flags"], 0)
-        self.assertEqual(record[1]["TaxId"], 9606)
-        self.assertEqual(record[1]["Length"], 102)
-        self.assertEqual(record[1]["Status"], "live")
-        self.assertEqual(record[1]["ReplacedBy"], "")
-        self.assertEqual(record[1]["Comment"], "  ")
-
-    def test_nucleotide(self):
-        '''Test parsing XML returned by ESummary from the Nucleotide database
-        '''
-        # In Nucleotide display records for GIs 28864546 and 28800981
-        # in xml retrieval mode
-        # To create the XML file, use
-        # >>> Bio.Entrez.esummary(db="nucleotide", id="28864546,28800981",
-        #                         retmode="xml")
-        with open('Entrez/esummary4.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(record[0]["Id"], "28864546")
-        self.assertEqual(record[0]["Caption"], "AY207443")
-        self.assertEqual(record[0]["Title"], "Homo sapiens alpha hemoglobin (HBZP) pseudogene 3' UTR/AluJo repeat breakpoint junction")
-        self.assertEqual(record[0]["Extra"], "gi|28864546|gb|AY207443.1|[28864546]")
-        self.assertEqual(record[0]["Gi"], 28864546)
-        self.assertEqual(record[0]["CreateDate"], "2003/03/05")
-        self.assertEqual(record[0]["UpdateDate"], "2003/03/05")
-        self.assertEqual(record[0]["Flags"], 0)
-        self.assertEqual(record[0]["TaxId"], 9606)
-        self.assertEqual(record[0]["Length"], 491)
-        self.assertEqual(record[0]["Status"], "live")
-        self.assertEqual(record[0]["ReplacedBy"], "")
-        self.assertEqual(record[0]["Comment"], "  ")
-
-        self.assertEqual(record[1]["Id"], "28800981")
-        self.assertEqual(record[1]["Caption"], "AY205604")
-        self.assertEqual(record[1]["Title"], "Homo sapiens hemochromatosis (HFE) mRNA, partial cds")
-        self.assertEqual(record[1]["Extra"], "gi|28800981|gb|AY205604.1|[28800981]")
-        self.assertEqual(record[1]["Gi"], 28800981)
-        self.assertEqual(record[1]["CreateDate"], "2003/03/03")
-        self.assertEqual(record[1]["UpdateDate"], "2003/03/03")
-        self.assertEqual(record[1]["Flags"], 0)
-        self.assertEqual(record[1]["TaxId"], 9606)
-        self.assertEqual(record[1]["Length"], 860)
-        self.assertEqual(record[1]["Status"], "live")
-        self.assertEqual(record[1]["ReplacedBy"], "")
-        self.assertEqual(record[1]["Comment"], "  ")
-
-    def test_structure(self):
-        '''Test parsing XML returned by ESummary from the Structure database
-        '''
-        # In Nucleotide display records for GIs 28864546 and 28800981
-        # in xml retrieval mode
-        # To create the XML file, use
-        # >>> Bio.Entrez.esummary(db="structure", id=["19923","12120"],
-        #                         retmode="xml")
-        with open('Entrez/esummary5.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(record[0]["Id"], "19923")
-        self.assertEqual(record[0]["PdbAcc"], "1L5J")
-        self.assertEqual(record[0]["PdbDescr"], "Crystal Structure Of E. Coli Aconitase B")
-        self.assertEqual(record[0]["EC"], "4.2.1.3")
-        self.assertEqual(record[0]["Resolution"], "2.4")
-        self.assertEqual(record[0]["ExpMethod"], "X-Ray Diffraction")
-        self.assertEqual(record[0]["PdbClass"], "Lyase")
-        self.assertEqual(record[0]["PdbReleaseDate"], "2007/8/27")
-        self.assertEqual(record[0]["PdbDepositDate"], "2002/3/7")
-        self.assertEqual(record[0]["DepositDate"], "2007/10/25")
-        self.assertEqual(record[0]["ModifyDate"], "2007/10/25")
-        self.assertEqual(record[0]["LigCode"], "F3S|TRA")
-        self.assertEqual(record[0]["LigCount"], "2")
-        self.assertEqual(record[0]["ModProteinResCount"], "0")
-        self.assertEqual(record[0]["ModDNAResCount"], "0")
-        self.assertEqual(record[0]["ModRNAResCount"], "0")
-        self.assertEqual(record[0]["ProteinChainCount"], "2")
-        self.assertEqual(record[0]["DNAChainCount"], "0")
-        self.assertEqual(record[0]["RNAChainCount"], "0")
-
-        self.assertEqual(record[1]["Id"], "12120")
-        self.assertEqual(record[1]["PdbAcc"], "1B0K")
-        self.assertEqual(record[1]["PdbDescr"], "S642a:fluorocitrate Complex Of Aconitase")
-        self.assertEqual(record[1]["EC"], "4.2.1.3")
-        self.assertEqual(record[1]["Resolution"], "2.5")
-        self.assertEqual(record[1]["ExpMethod"], "X-Ray Diffraction")
-        self.assertEqual(record[1]["PdbClass"], "Lyase")
-        self.assertEqual(record[1]["PdbReleaseDate"], "2007/8/27")
-        self.assertEqual(record[1]["PdbDepositDate"], "1998/11/11")
-        self.assertEqual(record[1]["DepositDate"], "2007/10/07")
-        self.assertEqual(record[1]["ModifyDate"], "2007/10/07")
-        self.assertEqual(record[1]["LigCode"], "FLC|O|SF4")
-        self.assertEqual(record[1]["LigCount"], "3")
-        self.assertEqual(record[1]["ModProteinResCount"], "0")
-        self.assertEqual(record[1]["ModDNAResCount"], "0")
-        self.assertEqual(record[1]["ModRNAResCount"], "0")
-        self.assertEqual(record[1]["ProteinChainCount"], "1")
-        self.assertEqual(record[1]["DNAChainCount"], "0")
-        self.assertEqual(record[1]["RNAChainCount"], "0")
-
-    def test_taxonomy(self):
-        '''Test parsing XML returned by ESummary from the Taxonomy database
-        '''
-        # In Taxonomy display records for TAXIDs 9913 and 30521 in
-        # xml retrieval mode
-        # To create the XML file, use
-        # >>> Bio.Entrez.esummary(db="taxonomy", id=["9913","30521"],
-        #                         retmode="xml")
-        with open('Entrez/esummary6.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(record[0]["Id"], "9913")
-        self.assertEqual(record[0]["Rank"], "species")
-        self.assertEqual(record[0]["Division"], "even-toed ungulates")
-        self.assertEqual(record[0]["ScientificName"], "Bos taurus")
-        self.assertEqual(record[0]["CommonName"], "cattle")
-        self.assertEqual(record[0]["TaxId"], 9913)
-        self.assertEqual(record[0]["NucNumber"], 2264214)
-        self.assertEqual(record[0]["ProtNumber"], 55850)
-        self.assertEqual(record[0]["StructNumber"], 1517)
-        self.assertEqual(record[0]["GenNumber"], 31)
-        self.assertEqual(record[0]["GeneNumber"], 29651)
-        self.assertEqual(record[0]["Genus"], "")
-        self.assertEqual(record[0]["Species"], "")
-        self.assertEqual(record[0]["Subsp"], "")
-
-        self.assertEqual(record[1]["Id"], "30521")
-        self.assertEqual(record[1]["Rank"], "species")
-        self.assertEqual(record[1]["Division"], "even-toed ungulates")
-        self.assertEqual(record[1]["ScientificName"], "Bos grunniens")
-        self.assertEqual(record[1]["CommonName"], "domestic yak")
-        self.assertEqual(record[1]["TaxId"], 30521)
-        self.assertEqual(record[1]["NucNumber"], 560)
-        self.assertEqual(record[1]["ProtNumber"], 254)
-        self.assertEqual(record[1]["StructNumber"], 0)
-        self.assertEqual(record[1]["GenNumber"], 1)
-        self.assertEqual(record[1]["GeneNumber"], 13)
-        self.assertEqual(record[1]["Genus"], "")
-        self.assertEqual(record[1]["Species"], "")
-        self.assertEqual(record[1]["Subsp"], "")
-
-    def test_unists(self):
-        '''Test parsing XML returned by ESummary from the UniSTS database
-        '''
-        # In UniSTS display records for IDs 254085 and 254086 in xml
-        # retrieval mode
-        # To create the XML file, use
-        # >>> Bio.Entrez.esummary(db="unists", id=["254085","254086"],
-        #                         retmode="xml")
-        with open('Entrez/esummary7.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(record[0]["Id"], "254085")
-        self.assertEqual(record[0]["Marker_Name"], "SE234324")
-        self.assertEqual(len(record[0]["Map_Gene_Summary_List"]), 1)
-        self.assertEqual(record[0]["Map_Gene_Summary_List"][0]["Org"], "Sus scrofa")
-        self.assertEqual(record[0]["Map_Gene_Summary_List"][0]["Chr"], " chromosome 7")
-        self.assertEqual(record[0]["Map_Gene_Summary_List"][0]["Locus"], "")
-        self.assertEqual(record[0]["EPCR_Summary"], "Found by e-PCR in sequences from Sus scrofa.")
-        self.assertEqual(record[0]["LocusId"], "")
-
-        self.assertEqual(record[1]["Id"], "254086")
-        self.assertEqual(record[1]["Marker_Name"], "SE259162")
-        self.assertEqual(len(record[1]["Map_Gene_Summary_List"]), 1)
-        self.assertEqual(record[1]["Map_Gene_Summary_List"][0]["Org"], "Sus scrofa")
-        self.assertEqual(record[1]["Map_Gene_Summary_List"][0]["Chr"], " chromosome 12")
-        self.assertEqual(record[1]["Map_Gene_Summary_List"][0]["Locus"], "")
-        self.assertEqual(record[1]["EPCR_Summary"], "Found by e-PCR in sequences from Sus scrofa.")
-        self.assertEqual(record[1]["LocusId"], "")
-
-    def test_wrong(self):
-        '''Test parsing XML returned by ESummary with incorrect arguments
-        '''
-        # To create the XML file, use
-        # >>> Bio.Entrez.esummary()
-        with open('Entrez/esummary8.xml', "rb") as handle:
-            self.assertRaises(RuntimeError, Entrez.read, handle)
-
-
-class ELinkTest(unittest.TestCase):
-    '''Tests for parsing XML output returned by ELink
-    '''
-    def test_pubmed1(self):
-        '''Test parsing pubmed links returned by ELink (first test)
-        '''
-        # Retrieve IDs from PubMed for PMID 9298984 to the PubMed database
-        # To create the XML file, use
-        # >>> Bio.Entrez.elink(dbfrom="pubmed", id="9298984", cmd="neighbor")
-        with open('Entrez/elink1.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(len(record), 1)
-        self.assertEqual(len(record[0]), 5)
-        self.assertEqual(record[0]["DbFrom"], "pubmed")
-        self.assertEqual(record[0]["IdList"], ["9298984"])
-        self.assertEqual(len(record[0]["LinkSetDb"]), 8)
-        self.assertEqual(record[0]["LinkSetDb"][0]["DbTo"], "pubmed")
-        self.assertEqual(record[0]["LinkSetDb"][0]["LinkName"], "pubmed_pubmed")
-        self.assertEqual(len(record[0]["LinkSetDb"][0]["Link"]), 97)
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][0]["Id"], "9298984")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][1]["Id"], "8794856")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][2]["Id"], "9700164")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][3]["Id"], "7914521")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][4]["Id"], "9914369")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][5]["Id"], "1339459")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][6]["Id"], "11590237")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][7]["Id"], "12686595")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][8]["Id"], "20980244")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][9]["Id"], "11146659")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][10]["Id"], "8978614")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][11]["Id"], "9074495")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][12]["Id"], "10893249")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][13]["Id"], "2211822")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][14]["Id"], "15371539")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][15]["Id"], "10402457")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][16]["Id"], "10806105")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][17]["Id"], "10545493")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][18]["Id"], "15915585")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][19]["Id"], "10523511")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][20]["Id"], "12515822")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][21]["Id"], "9869638")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][22]["Id"], "11483958")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][23]["Id"], "11685532")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][24]["Id"], "9490715")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][25]["Id"], "1691829")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][26]["Id"], "9425896")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][27]["Id"], "12080088")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][28]["Id"], "12034769")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][29]["Id"], "9852156")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][30]["Id"], "8923204")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][31]["Id"], "7690762")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][32]["Id"], "17895365")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][33]["Id"], "9378750")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][34]["Id"], "11146661")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][35]["Id"], "18202360")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][36]["Id"], "10985388")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][37]["Id"], "11266459")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][38]["Id"], "2022189")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][39]["Id"], "8056842")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][40]["Id"], "11914278")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][41]["Id"], "15616189")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][42]["Id"], "18936247")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][43]["Id"], "17222555")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][44]["Id"], "7585942")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][45]["Id"], "9735366")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][46]["Id"], "11179694")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][47]["Id"], "21118145")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][48]["Id"], "16732327")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][49]["Id"], "14522947")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][50]["Id"], "11352945")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][51]["Id"], "16839185")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][52]["Id"], "11267866")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][53]["Id"], "10898791")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][54]["Id"], "12388768")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][55]["Id"], "16741559")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][56]["Id"], "11252055")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][57]["Id"], "7904902")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][58]["Id"], "17182852")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][59]["Id"], "9606208")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][60]["Id"], "15268859")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][61]["Id"], "18460473")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][62]["Id"], "11266451")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][63]["Id"], "10398680")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][64]["Id"], "16516834")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][65]["Id"], "12235289")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][66]["Id"], "16585270")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][67]["Id"], "1541637")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][68]["Id"], "18923084")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][69]["Id"], "16510521")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][70]["Id"], "8175879")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][71]["Id"], "11715021")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][72]["Id"], "8548823")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][73]["Id"], "15485811")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][74]["Id"], "11092768")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][75]["Id"], "7790358")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][76]["Id"], "11102811")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][77]["Id"], "15824131")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][78]["Id"], "16802858")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][79]["Id"], "17333235")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][80]["Id"], "9258677")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][81]["Id"], "17525528")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][82]["Id"], "9396743")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][83]["Id"], "12514103")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][84]["Id"], "16219694")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][85]["Id"], "10428958")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][86]["Id"], "14699129")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][87]["Id"], "2211824")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][88]["Id"], "11369198")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][89]["Id"], "15075237")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][90]["Id"], "14972679")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][91]["Id"], "7730407")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][92]["Id"], "9009204")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][93]["Id"], "11402064")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][94]["Id"], "22685323")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][95]["Id"], "24038651")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][96]["Id"], "23746972")
-        self.assertEqual(record[0]["LinkSetDb"][1]["Link"][0]["Id"], "9298984")
-        self.assertEqual(record[0]["LinkSetDb"][2]["Link"][0]["Id"], "20439434")
-        self.assertEqual(record[0]["LinkSetDb"][2]["Link"][1]["Id"], "19273145")
-        self.assertEqual(record[0]["LinkSetDb"][2]["Link"][2]["Id"], "19177000")
-        self.assertEqual(record[0]["LinkSetDb"][2]["Link"][3]["Id"], "18936247")
-        self.assertEqual(record[0]["LinkSetDb"][2]["Link"][4]["Id"], "18268100")
-        self.assertEqual(record[0]["LinkSetDb"][2]["Link"][5]["Id"], "17699596")
-        self.assertEqual(record[0]["LinkSetDb"][2]["Link"][6]["Id"], "16563186")
-        self.assertEqual(record[0]["LinkSetDb"][2]["Link"][7]["Id"], "16505164")
-        self.assertEqual(record[0]["LinkSetDb"][2]["Link"][8]["Id"], "16107559")
-        self.assertEqual(record[0]["LinkSetDb"][2]["Link"][9]["Id"], "15824131")
-        self.assertEqual(record[0]["LinkSetDb"][2]["Link"][10]["Id"], "15029241")
-        self.assertEqual(record[0]["LinkSetDb"][2]["Link"][11]["Id"], "12686595")
-        self.assertEqual(record[0]["LinkSetDb"][2]["Link"][12]["Id"], "11756470")
-        self.assertEqual(record[0]["LinkSetDb"][2]["Link"][13]["Id"], "11553716")
-        self.assertEqual(record[0]["LinkSetDb"][2]["Link"][14]["Id"], "11500386")
-        self.assertEqual(record[0]["LinkSetDb"][2]["Link"][15]["Id"], "11402076")
-        self.assertEqual(record[0]["LinkSetDb"][2]["Link"][16]["Id"], "11331754")
-        self.assertEqual(record[0]["LinkSetDb"][2]["Link"][17]["Id"], "10545493")
-        self.assertEqual(record[0]["LinkSetDb"][2]["Link"][18]["Id"], "10402457")
-        self.assertEqual(record[0]["LinkSetDb"][2]["Link"][19]["Id"], "10402425")
-        self.assertEqual(record[0]["LinkSetDb"][2]["Link"][20]["Id"], "9914368")
-        self.assertEqual(record[0]["LinkSetDb"][2]["Link"][21]["Id"], "9763420")
-        self.assertEqual(record[0]["LinkSetDb"][2]["Link"][22]["Id"], "9700166")
-        self.assertEqual(record[0]["LinkSetDb"][2]["Link"][23]["Id"], "9700164")
-        self.assertEqual(record[0]["LinkSetDb"][3]["Link"][0]["Id"], "9298984")
-        self.assertEqual(record[0]["LinkSetDb"][3]["Link"][1]["Id"], "8794856")
-        self.assertEqual(record[0]["LinkSetDb"][3]["Link"][2]["Id"], "9700164")
-        self.assertEqual(record[0]["LinkSetDb"][3]["Link"][3]["Id"], "7914521")
-        self.assertEqual(record[0]["LinkSetDb"][3]["Link"][4]["Id"], "9914369")
-        self.assertEqual(record[0]["LinkSetDb"][3]["Link"][5]["Id"], "1339459")
-        self.assertEqual(record[0]["LinkSetDb"][4]["Link"][0]["Id"], "9298984")
-        self.assertEqual(record[0]["LinkSetDb"][4]["Link"][1]["Id"], "8794856")
-        self.assertEqual(record[0]["LinkSetDb"][4]["Link"][2]["Id"], "9700164")
-        self.assertEqual(record[0]["LinkSetDb"][4]["Link"][3]["Id"], "7914521")
-        self.assertEqual(record[0]["LinkSetDb"][4]["Link"][4]["Id"], "9914369")
-        self.assertEqual(record[0]["LinkSetDb"][4]["Link"][5]["Id"], "1339459")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][0]["Id"], "14732139")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][1]["Id"], "8909532")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][2]["Id"], "8898221")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][3]["Id"], "8824189")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][4]["Id"], "8824188")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][5]["Id"], "8794856")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][6]["Id"], "8763498")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][7]["Id"], "8706132")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][8]["Id"], "8706131")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][9]["Id"], "8647893")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][10]["Id"], "8617505")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][11]["Id"], "8560259")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][12]["Id"], "8521491")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][13]["Id"], "8505381")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][14]["Id"], "8485583")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][15]["Id"], "8416984")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][16]["Id"], "8267981")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][17]["Id"], "8143084")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][18]["Id"], "8023161")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][19]["Id"], "8005447")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][20]["Id"], "7914521")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][21]["Id"], "7906398")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][22]["Id"], "7860624")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][23]["Id"], "7854443")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][24]["Id"], "7854422")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][25]["Id"], "7846151")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][26]["Id"], "7821090")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][27]["Id"], "7758115")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][28]["Id"], "7739381")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][29]["Id"], "7704412")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][30]["Id"], "7698647")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][31]["Id"], "7664339")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][32]["Id"], "7642709")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][33]["Id"], "7642708")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][34]["Id"], "7579695")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][35]["Id"], "7542657")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][36]["Id"], "7502067")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][37]["Id"], "7172865")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][38]["Id"], "6966403")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][39]["Id"], "6793236")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][40]["Id"], "6684600")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][41]["Id"], "3928429")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][42]["Id"], "3670292")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][43]["Id"], "2686123")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][44]["Id"], "2683077")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][45]["Id"], "2512302")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][46]["Id"], "2498337")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][47]["Id"], "2195725")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][48]["Id"], "2185478")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][49]["Id"], "2139718")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][50]["Id"], "2139717")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][51]["Id"], "2022189")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][52]["Id"], "1999466")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][53]["Id"], "1684022")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][54]["Id"], "1406971")
-        self.assertEqual(record[0]["LinkSetDb"][5]["Link"][55]["Id"], "1339459")
-        self.assertEqual(record[0]["LinkSetDb"][6]["Link"][0]["Id"], "9298984")
-        self.assertEqual(record[0]["LinkSetDb"][7]["Link"][0]["Id"], "9298984")
-
-    def test_nucleotide(self):
-        '''Test parsing Nucleotide to Protein links returned by ELink
-        '''
-        # Retrieve IDs from Nucleotide for GI  48819, 7140345 to Protein
-        # To create the XML file, use
-        # >>> Bio.Entrez.elink(dbfrom="nucleotide", db="protein",
-        #                      id="48819,7140345")
-        with open('Entrez/elink2.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(len(record), 1)
-        self.assertEqual(len(record[0]), 5)
-        self.assertEqual(record[0]["DbFrom"], "nuccore")
-        self.assertEqual(record[0]["IdList"], ["48819", "7140345"])
-        self.assertEqual(len(record[0]["LinkSetDb"]), 2)
-        self.assertEqual(len(record[0]["LinkSetDb"][0]), 3)
-        self.assertEqual(record[0]["LinkSetDb"][0]['DbTo'], 'protein')
-        self.assertEqual(record[0]["LinkSetDb"][0]['LinkName'], 'nuccore_protein')
-        self.assertEqual(len(record[0]["LinkSetDb"][0]['Link']), 1)
-        self.assertEqual(record[0]["LinkSetDb"][0]['Link'][0]['Id'], '48820')
-        self.assertEqual(record[0]["LinkSetDb"][1]['DbTo'], 'protein')
-        self.assertEqual(record[0]["LinkSetDb"][1]['LinkName'], 'nuccore_protein_cds')
-        self.assertEqual(len(record[0]["LinkSetDb"][1]['Link']), 16)
-        self.assertEqual(record[0]["LinkSetDb"][1]['Link'][0]['Id'], "16950486")
-        self.assertEqual(record[0]["LinkSetDb"][1]['Link'][1]['Id'], "16950485")
-        self.assertEqual(record[0]["LinkSetDb"][1]['Link'][2]['Id'], "15145457")
-        self.assertEqual(record[0]["LinkSetDb"][1]['Link'][3]['Id'], "15145456")
-        self.assertEqual(record[0]["LinkSetDb"][1]['Link'][4]['Id'], "15145455")
-        self.assertEqual(record[0]["LinkSetDb"][1]['Link'][5]['Id'], "7331953")
-        self.assertEqual(record[0]["LinkSetDb"][1]['Link'][6]['Id'], "7331951")
-        self.assertEqual(record[0]["LinkSetDb"][1]['Link'][7]['Id'], "7331950")
-        self.assertEqual(record[0]["LinkSetDb"][1]['Link'][8]['Id'], "7331949")
-        self.assertEqual(record[0]["LinkSetDb"][1]['Link'][9]['Id'], "7331948")
-        self.assertEqual(record[0]["LinkSetDb"][1]['Link'][10]['Id'], "7331947")
-        self.assertEqual(record[0]["LinkSetDb"][1]['Link'][11]['Id'], "7331946")
-        self.assertEqual(record[0]["LinkSetDb"][1]['Link'][12]['Id'], "7331945")
-        self.assertEqual(record[0]["LinkSetDb"][1]['Link'][13]['Id'], "7331944")
-        self.assertEqual(record[0]["LinkSetDb"][1]['Link'][14]['Id'], "7331943")
-        self.assertEqual(record[0]["LinkSetDb"][1]['Link'][15]['Id'], "48820")
-
-    def test_pubmed2(self):
-        '''Test parsing pubmed links returned by ELink (second test)
-        '''
-        # Retrieve PubMed related articles for PMIDs 11812492 11774222
-        # with a publication date from 1995 to the present
-        # To create the XML file, use
-        # >>> Bio.Entrez.elink(dbfrom="pubmed", id="11812492,11774222",
-        #                      db="pubmed", mindate="1995", datetype="pdat")
-        with open('Entrez/elink3.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(len(record), 1)
-        self.assertEqual(record[0]["DbFrom"], "pubmed")
-        self.assertEqual(len(record[0]['IdList']), 2)
-        self.assertEqual(record[0]['IdList'][0], "11812492")
-        self.assertEqual(record[0]['IdList'][1], "11774222")
-        self.assertEqual(record[0]["LinkSetDb"][0]["DbTo"], "pubmed")
-        self.assertEqual(record[0]["LinkSetDb"][0]["LinkName"], "pubmed_pubmed")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][0]["Id"], "24356117")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][1]["Id"], "24304891")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][2]["Id"], "24234437")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][3]["Id"], "24200819")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][4]["Id"], "24190075")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][5]["Id"], "24185697")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][6]["Id"], "24146634")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][7]["Id"], "24144118")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][8]["Id"], "24077701")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][9]["Id"], "24071059")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][10]["Id"], "24053607")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][11]["Id"], "24044755")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][12]["Id"], "24012123")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][13]["Id"], "23960254")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][14]["Id"], "23759724")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][15]["Id"], "23733469")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][16]["Id"], "23717556")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][17]["Id"], "23593519")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][18]["Id"], "23593012")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][19]["Id"], "23525074")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][20]["Id"], "23482460")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][21]["Id"], "23475938")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][22]["Id"], "23472225")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][23]["Id"], "23324387")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][24]["Id"], "23281896")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][25]["Id"], "23262214")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][26]["Id"], "23251587")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][27]["Id"], "23213446")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][28]["Id"], "23210448")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][29]["Id"], "23193291")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][30]["Id"], "23193260")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][31]["Id"], "23077805")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][32]["Id"], "23055615")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][33]["Id"], "23049857")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][34]["Id"], "23041355")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][35]["Id"], "23028321")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][36]["Id"], "22957693")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][37]["Id"], "22919073")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][38]["Id"], "22815933")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][39]["Id"], "22737589")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][40]["Id"], "22645363")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][41]["Id"], "22583769")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][42]["Id"], "22583543")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][43]["Id"], "22530989")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][44]["Id"], "22497736")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][45]["Id"], "22398250")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][46]["Id"], "22392278")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][47]["Id"], "22369494")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][48]["Id"], "22321609")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][49]["Id"], "22281013")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][50]["Id"], "22214329")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][51]["Id"], "22140592")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][52]["Id"], "22140107")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][53]["Id"], "22098559")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][54]["Id"], "22084196")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][55]["Id"], "22072969")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][56]["Id"], "22039151")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][57]["Id"], "22032328")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][58]["Id"], "21992066")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][59]["Id"], "21966105")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][60]["Id"], "21944995")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][61]["Id"], "21827871")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][62]["Id"], "21789233")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][63]["Id"], "21782817")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][64]["Id"], "21731626")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][65]["Id"], "23508470")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][66]["Id"], "21629728")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][67]["Id"], "21606368")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][68]["Id"], "21573076")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][69]["Id"], "21523552")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][70]["Id"], "21520341")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][71]["Id"], "21367872")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][72]["Id"], "21350051")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][73]["Id"], "21324604")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][74]["Id"], "21283610")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][75]["Id"], "21154707")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][76]["Id"], "21131495")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][77]["Id"], "21097891")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][78]["Id"], "21047535")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][79]["Id"], "21037260")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][80]["Id"], "20975904")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][81]["Id"], "20946650")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][82]["Id"], "20823861")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][83]["Id"], "20730111")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][84]["Id"], "20689574")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][85]["Id"], "20672376")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][86]["Id"], "20671203")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][87]["Id"], "20670087")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][88]["Id"], "20639550")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][89]["Id"], "20624716")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][90]["Id"], "20603211")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][91]["Id"], "20597434")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][92]["Id"], "20585501")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][93]["Id"], "20543958")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][94]["Id"], "20398331")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][95]["Id"], "20375450")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][96]["Id"], "20362581")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][97]["Id"], "20083406")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][98]["Id"], "19958475")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][99]["Id"], "20047494")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][100]["Id"], "20036185")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][101]["Id"], "20034492")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][102]["Id"], "20005876")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][103]["Id"], "19954456")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][104]["Id"], "19943957")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][105]["Id"], "19806204")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][106]["Id"], "19768586")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][107]["Id"], "19728865")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][108]["Id"], "19722191")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][109]["Id"], "19620973")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][110]["Id"], "19597542")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][111]["Id"], "19507503")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][112]["Id"], "19504759")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][113]["Id"], "19389774")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][114]["Id"], "19352421")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][115]["Id"], "19342283")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][116]["Id"], "19306393")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][117]["Id"], "19238236")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][118]["Id"], "19154594")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][119]["Id"], "19114486")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][120]["Id"], "19105187")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][121]["Id"], "19073702")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][122]["Id"], "19098027")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][123]["Id"], "19063745")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][124]["Id"], "19043737")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][125]["Id"], "19025664")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][126]["Id"], "19002498")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][127]["Id"], "18981050")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][128]["Id"], "18953038")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][129]["Id"], "18952001")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][130]["Id"], "18847484")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][131]["Id"], "18801163")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][132]["Id"], "18796476")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][133]["Id"], "18713719")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][134]["Id"], "18637161")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][135]["Id"], "18629076")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][136]["Id"], "18628874")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][137]["Id"], "18562339")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][138]["Id"], "18562031")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][139]["Id"], "18550617")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][140]["Id"], "18544553")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][141]["Id"], "18539347")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][142]["Id"], "18538871")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][143]["Id"], "18492133")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][144]["Id"], "18439691")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][145]["Id"], "18386064")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][146]["Id"], "18377816")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][147]["Id"], "18307806")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][148]["Id"], "18180957")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][149]["Id"], "18073380")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][150]["Id"], "18070518")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][151]["Id"], "18064491")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][152]["Id"], "18029361")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][153]["Id"], "18027007")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][154]["Id"], "18025705")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][155]["Id"], "18025704")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][156]["Id"], "18000556")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][157]["Id"], "17988782")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][158]["Id"], "17921498")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][159]["Id"], "17885136")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][160]["Id"], "17877839")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][161]["Id"], "17761848")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][162]["Id"], "17584494")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][163]["Id"], "17562224")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][164]["Id"], "17518759")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][165]["Id"], "17470297")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][166]["Id"], "17401150")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][167]["Id"], "17400791")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][168]["Id"], "17306254")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][169]["Id"], "17254505")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][170]["Id"], "17221864")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][171]["Id"], "17202370")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][172]["Id"], "17142236")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][173]["Id"], "17135206")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][174]["Id"], "17135198")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][175]["Id"], "17135185")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][176]["Id"], "17062145")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][177]["Id"], "17059604")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][178]["Id"], "17040125")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][179]["Id"], "17038195")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][180]["Id"], "16907992")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][181]["Id"], "16874317")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][182]["Id"], "16845079")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][183]["Id"], "16818783")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][184]["Id"], "16701248")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][185]["Id"], "16697384")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][186]["Id"], "16672453")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][187]["Id"], "16616613")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][188]["Id"], "16551372")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][189]["Id"], "16423288")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][190]["Id"], "16406333")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][191]["Id"], "22485434")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][192]["Id"], "16381974")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][193]["Id"], "16381973")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][194]["Id"], "16381840")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][195]["Id"], "16351753")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][196]["Id"], "16278157")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][197]["Id"], "16269725")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][198]["Id"], "16103603")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][199]["Id"], "16085497")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][200]["Id"], "16005284")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][201]["Id"], "16002116")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][202]["Id"], "15997407")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][203]["Id"], "15984913")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][204]["Id"], "15980532")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][205]["Id"], "15977173")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][206]["Id"], "15944077")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][207]["Id"], "15839745")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][208]["Id"], "15828434")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][209]["Id"], "15827081")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][210]["Id"], "15780005")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][211]["Id"], "15774024")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][212]["Id"], "15774022")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][213]["Id"], "15710433")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][214]["Id"], "15687015")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][215]["Id"], "15643605")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][216]["Id"], "15630619")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][217]["Id"], "22469090")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][218]["Id"], "19325849")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][219]["Id"], "15608286")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][220]["Id"], "15608284")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][221]["Id"], "15608257")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][222]["Id"], "15608233")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][223]["Id"], "15608226")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][224]["Id"], "15608212")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][225]["Id"], "15546336")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][226]["Id"], "15478601")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][227]["Id"], "15474306")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][228]["Id"], "15383308")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][229]["Id"], "15383292")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][230]["Id"], "15336912")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][231]["Id"], "15322925")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][232]["Id"], "15287587")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][233]["Id"], "15270538")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][234]["Id"], "15238684")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][235]["Id"], "15215374")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][236]["Id"], "15111095")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][237]["Id"], "15037105")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][238]["Id"], "15024419")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][239]["Id"], "14998511")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][240]["Id"], "14702162")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][241]["Id"], "14695526")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][242]["Id"], "14695451")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][243]["Id"], "14681478")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][244]["Id"], "14681474")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][245]["Id"], "14681471")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][246]["Id"], "14681353")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][247]["Id"], "14681351")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][248]["Id"], "14662922")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][249]["Id"], "12886019")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][250]["Id"], "12860672")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][251]["Id"], "12856318")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][252]["Id"], "12819149")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][253]["Id"], "12816546")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][254]["Id"], "12743802")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][255]["Id"], "12701381")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][256]["Id"], "12632152")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][257]["Id"], "12625936")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][258]["Id"], "12537121")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][259]["Id"], "12467974")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][260]["Id"], "12436197")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][261]["Id"], "12435493")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][262]["Id"], "12402526")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][263]["Id"], "12387845")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][264]["Id"], "12386340")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][265]["Id"], "12372145")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][266]["Id"], "12234534")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][267]["Id"], "12208043")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][268]["Id"], "12203989")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][269]["Id"], "12203988")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][270]["Id"], "12083398")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][271]["Id"], "11988510")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][272]["Id"], "11925998")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][273]["Id"], "11908756")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][274]["Id"], "11825250")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][275]["Id"], "11812492")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][276]["Id"], "11802378")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][277]["Id"], "11791238")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][278]["Id"], "11783003")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][279]["Id"], "11774222")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][280]["Id"], "11774221")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][281]["Id"], "11758285")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][282]["Id"], "11752345")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][283]["Id"], "11741630")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][284]["Id"], "11731507")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][285]["Id"], "11668631")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][286]["Id"], "11668619")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][287]["Id"], "11516587")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][288]["Id"], "11480780")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][289]["Id"], "11472559")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][290]["Id"], "11472553")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][291]["Id"], "11462837")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][292]["Id"], "11456466")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][293]["Id"], "11446511")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][294]["Id"], "11443570")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][295]["Id"], "11414208")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][296]["Id"], "11403387")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][297]["Id"], "11384164")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][298]["Id"], "11357826")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][299]["Id"], "11355885")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][300]["Id"], "11328780")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][301]["Id"], "11279516")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][302]["Id"], "11269648")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][303]["Id"], "11240843")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][304]["Id"], "11214099")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][305]["Id"], "11197770")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][306]["Id"], "11092731")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][307]["Id"], "11038309")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][308]["Id"], "11015564")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][309]["Id"], "10963611")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][310]["Id"], "10902212")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][311]["Id"], "10899154")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][312]["Id"], "10856373")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][313]["Id"], "10851186")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][314]["Id"], "10782070")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][315]["Id"], "10770808")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][316]["Id"], "10731564")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][317]["Id"], "10637631")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][318]["Id"], "11125122")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][319]["Id"], "11125071")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][320]["Id"], "11125059")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][321]["Id"], "10612825")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][322]["Id"], "10612824")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][323]["Id"], "10612821")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][324]["Id"], "10612820")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][325]["Id"], "10592273")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][326]["Id"], "10592272")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][327]["Id"], "10592263")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][328]["Id"], "10592200")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][329]["Id"], "10592169")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][330]["Id"], "10587943")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][331]["Id"], "10587942")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][332]["Id"], "10511685")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][333]["Id"], "10511682")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][334]["Id"], "10511680")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][335]["Id"], "10484179")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][336]["Id"], "10466136")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][337]["Id"], "10466135")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][338]["Id"], "10447503")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][339]["Id"], "10407783")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][340]["Id"], "10407677")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][341]["Id"], "10407668")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][342]["Id"], "10366827")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][343]["Id"], "10359795")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][344]["Id"], "10221636")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][345]["Id"], "10092480")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][346]["Id"], "10075567")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][347]["Id"], "10066467")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][348]["Id"], "9921679")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][349]["Id"], "9847220")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][350]["Id"], "9830540")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][351]["Id"], "9775388")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][352]["Id"], "9685316")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][353]["Id"], "9625791")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][354]["Id"], "9571806")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][355]["Id"], "9455480")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][356]["Id"], "9421619")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][357]["Id"], "9274032")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][358]["Id"], "9169870")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][359]["Id"], "9047337")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][360]["Id"], "8719164")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][361]["Id"], "7729881")
-
-    def test_medline(self):
-        '''Test parsing medline indexed articles returned by ELink
-        '''
-        # Retrieve MEDLINE indexed only related articles for PMID 12242737
-        # To create the XML file, use
-        # >>> Bio.Entrez.elink(dbfrom="pubmed", id="12242737", db="pubmed",
-        #                      term="medline[sb]")
-        with open('Entrez/elink4.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(len(record), 1)
-        self.assertEqual(record[0]["DbFrom"], "pubmed")
-        self.assertEqual(record[0]["IdList"], ["12242737"])
-        self.assertEqual(record[0]["LinkSetDb"][0]["DbTo"], "pubmed")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][0]["Id"], "23255877")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][1]["Id"], "22688104")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][2]["Id"], "22661362")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][3]["Id"], "22648258")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][4]["Id"], "22521021")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][5]["Id"], "22424988")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][6]["Id"], "22369817")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][7]["Id"], "22368911")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][8]["Id"], "22194507")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][9]["Id"], "22156652")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][10]["Id"], "22109321")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][11]["Id"], "21991829")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][12]["Id"], "21984464")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][13]["Id"], "21944608")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][14]["Id"], "21908142")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][15]["Id"], "21715237")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][16]["Id"], "21694530")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][17]["Id"], "21531047")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][18]["Id"], "21153952")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][19]["Id"], "21102533")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][20]["Id"], "20860230")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][21]["Id"], "20718377")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][22]["Id"], "20674629")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][23]["Id"], "20542260")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][24]["Id"], "20533237")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][25]["Id"], "20457774")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][26]["Id"], "20016426")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][27]["Id"], "19843737")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][28]["Id"], "19777916")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][29]["Id"], "19616724")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][30]["Id"], "19524781")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][31]["Id"], "19318006")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][32]["Id"], "19306944")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][33]["Id"], "19253206")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][34]["Id"], "19132488")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][35]["Id"], "18853843")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][36]["Id"], "18774058")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][37]["Id"], "18706783")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][38]["Id"], "18625354")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][39]["Id"], "18582671")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][40]["Id"], "18554854")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][41]["Id"], "18299362")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][42]["Id"], "18279648")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][43]["Id"], "18247070")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][44]["Id"], "18021675")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][45]["Id"], "17875143")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][46]["Id"], "17875142")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][47]["Id"], "17879696")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][48]["Id"], "17674062")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][49]["Id"], "17658095")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][50]["Id"], "17602359")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][51]["Id"], "17601500")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][52]["Id"], "17543650")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][53]["Id"], "17466477")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][54]["Id"], "17464254")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][55]["Id"], "17453494")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][56]["Id"], "17429670")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][57]["Id"], "17376366")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][58]["Id"], "17354190")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][59]["Id"], "17325998")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][60]["Id"], "17320773")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][61]["Id"], "17268692")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][62]["Id"], "17259035")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][63]["Id"], "17243036")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][64]["Id"], "17193860")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][65]["Id"], "17174054")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][66]["Id"], "17157468")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][67]["Id"], "17040637")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][68]["Id"], "16999328")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][69]["Id"], "16988291")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][70]["Id"], "16580806")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][71]["Id"], "16566645")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][72]["Id"], "16552382")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][73]["Id"], "16362812")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][74]["Id"], "16357381")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][75]["Id"], "16338316")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][76]["Id"], "16133609")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][77]["Id"], "16096604")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][78]["Id"], "15788584")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][79]["Id"], "15642291")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][80]["Id"], "15635471")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][81]["Id"], "15529836")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][82]["Id"], "15505294")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][83]["Id"], "15300544")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][84]["Id"], "15279747")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][85]["Id"], "15278705")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][86]["Id"], "15236131")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][87]["Id"], "15143223")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][88]["Id"], "15141648")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][89]["Id"], "15136027")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][90]["Id"], "15094630")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][91]["Id"], "15022983")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][92]["Id"], "15008163")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][93]["Id"], "14872380")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][94]["Id"], "14702442")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][95]["Id"], "14661668")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][96]["Id"], "14661666")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][97]["Id"], "14661663")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][98]["Id"], "14661661")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][99]["Id"], "14661306")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][100]["Id"], "14650118")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][101]["Id"], "14528718")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][102]["Id"], "12949462")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][103]["Id"], "12878072")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][104]["Id"], "12876813")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][105]["Id"], "12822521")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][106]["Id"], "12744499")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][107]["Id"], "12744498")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][108]["Id"], "12733684")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][109]["Id"], "12719915")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][110]["Id"], "12592155")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][111]["Id"], "12563154")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][112]["Id"], "12361530")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][113]["Id"], "12352163")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][114]["Id"], "12242737")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][115]["Id"], "12226761")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][116]["Id"], "12164574")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][117]["Id"], "11973504")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][118]["Id"], "11973040")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][119]["Id"], "11907356")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][120]["Id"], "11868066")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][121]["Id"], "11789473")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][122]["Id"], "11781922")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][123]["Id"], "11775722")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][124]["Id"], "11762248")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][125]["Id"], "11740602")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][126]["Id"], "11702119")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][127]["Id"], "11669077")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][128]["Id"], "11578071")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][129]["Id"], "11443295")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][130]["Id"], "11409026")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][131]["Id"], "11368937")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][132]["Id"], "11329662")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][133]["Id"], "11329658")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][134]["Id"], "11329656")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][135]["Id"], "11329655")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][136]["Id"], "11329162")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][137]["Id"], "11274884")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][138]["Id"], "11218011")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][139]["Id"], "11125632")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][140]["Id"], "11027076")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][141]["Id"], "11016058")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][142]["Id"], "10803203")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][143]["Id"], "10761553")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][144]["Id"], "10749221")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][145]["Id"], "10688065")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][146]["Id"], "10688063")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][147]["Id"], "10665303")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][148]["Id"], "10575758")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][149]["Id"], "10499712")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][150]["Id"], "10499697")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][151]["Id"], "10499696")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][152]["Id"], "10475937")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][153]["Id"], "10222521")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][154]["Id"], "10222515")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][155]["Id"], "10222514")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][156]["Id"], "10051883")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][157]["Id"], "10024396")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][158]["Id"], "9847909")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][159]["Id"], "9793138")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][160]["Id"], "9757294")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][161]["Id"], "9725288")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][162]["Id"], "9658901")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][163]["Id"], "9575723")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][164]["Id"], "9510579")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][165]["Id"], "9456947")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][166]["Id"], "9391495")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][167]["Id"], "9317094")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][168]["Id"], "9314960")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][169]["Id"], "9314959")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][170]["Id"], "9269670")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][171]["Id"], "9193407")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][172]["Id"], "9125660")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][173]["Id"], "9016217")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][174]["Id"], "8976943")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][175]["Id"], "8819381")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][176]["Id"], "8855688")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][177]["Id"], "8903064")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][178]["Id"], "8903059")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][179]["Id"], "8903058")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][180]["Id"], "8599783")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][181]["Id"], "8794574")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][182]["Id"], "7892443")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][183]["Id"], "8153333")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][184]["Id"], "8290724")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][185]["Id"], "8338105")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][186]["Id"], "1481295")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][187]["Id"], "1539132")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][188]["Id"], "2047316")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][189]["Id"], "1943587")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][190]["Id"], "2222794")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][191]["Id"], "2584497")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][192]["Id"], "3288780")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][193]["Id"], "3213296")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][194]["Id"], "4058411")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][195]["Id"], "3905087")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][196]["Id"], "6482054")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][197]["Id"], "6473764")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][198]["Id"], "6217136")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][199]["Id"], "7068417")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][200]["Id"], "7326186")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][201]["Id"], "6940010")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][202]["Id"], "7330196")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][203]["Id"], "7423836")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][204]["Id"], "7415301")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][205]["Id"], "7408592")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][206]["Id"], "531835")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][207]["Id"], "663071")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][208]["Id"], "616459")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][209]["Id"], "4818442")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][210]["Id"], "4848922")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][211]["Id"], "4808999")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][212]["Id"], "5046513")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][213]["Id"], "5512349")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][214]["Id"], "6072516")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][215]["Id"], "5594242")
-        self.assertEqual(record[0]["LinkSetDb"][0]["Link"][216]["Id"], "5998281")
-        self.assertEqual(record[0]["LinkSetDb"][0]["LinkName"], "pubmed_pubmed")
-
-    def test_pubmed3(self):
-        '''Test parsing pubmed link returned by ELink (third test)
-        '''
-        # Create a hyperlink to the first link available for PMID 10611131
-        # in PubMed
-        # To create the XML file, use
-        # >>> Bio.Entrez.elink(dbfrom="pubmed", id="10611131", cmd="prlinks")
-
-        with open('Entrez/elink5.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(len(record), 1)
-        self.assertEqual(len(record[0]), 5)
-        self.assertEqual(record[0]["DbFrom"], "pubmed")
-        self.assertEqual(len(record[0]["LinkSetDb"]), 0)
-        self.assertEqual(len(record[0]["LinkSetDbHistory"]), 0)
-        self.assertEqual(len(record[0]["ERROR"]), 0)
-        self.assertEqual(len(record[0]["IdUrlList"]), 2)
-        self.assertEqual(len(record[0]["IdUrlList"]['FirstChars']), 0)
-        self.assertEqual(len(record[0]["IdUrlList"]['IdUrlSet']), 1)
-
-        self.assertEqual(record[0]["IdUrlList"]['IdUrlSet'][0]["Id"], "10611131")
-        self.assertEqual(len(record[0]["IdUrlList"]['IdUrlSet'][0]["ObjUrl"]), 1)
-        self.assertEqual(record[0]["IdUrlList"]['IdUrlSet'][0]["ObjUrl"][0]["Url"], "http://brain.oxfordjournals.org/cgi/pmidlookup?view=long&pmid=10611131")
-        self.assertEqual(record[0]["IdUrlList"]['IdUrlSet'][0]["ObjUrl"][0]["IconUrl"], "//www.ncbi.nlm.nih.gov/corehtml/query/egifs/http:--highwire.stanford.edu-icons-externalservices-pubmed-custom-oxfordjournals_final_free.gif")
-        self.assertEqual(record[0]["IdUrlList"]['IdUrlSet'][0]["ObjUrl"][0]["SubjectType"], ["publishers/providers"])
-        self.assertEqual(len(record[0]["IdUrlList"]['IdUrlSet'][0]["ObjUrl"][0]["Attribute"]), 3)
-        self.assertEqual(record[0]["IdUrlList"]['IdUrlSet'][0]["ObjUrl"][0]["Attribute"][0], "free resource")
-        self.assertEqual(record[0]["IdUrlList"]['IdUrlSet'][0]["ObjUrl"][0]["Attribute"][1], "full-text online")
-        self.assertEqual(record[0]["IdUrlList"]['IdUrlSet'][0]["ObjUrl"][0]["Attribute"][2], "publisher of information in url")
-        self.assertEqual(record[0]["IdUrlList"]['IdUrlSet'][0]["ObjUrl"][0]["Provider"]["Name"], "HighWire")
-        self.assertEqual(record[0]["IdUrlList"]['IdUrlSet'][0]["ObjUrl"][0]["Provider"]["NameAbbr"], "HighWire")
-        self.assertEqual(record[0]["IdUrlList"]['IdUrlSet'][0]["ObjUrl"][0]["Provider"]["Id"], "3051")
-        self.assertEqual(record[0]["IdUrlList"]['IdUrlSet'][0]["ObjUrl"][0]["Provider"]["Url"], "http://highwire.stanford.edu")
-
-    def test_pubmed4(self):
-        '''Test parsing pubmed links returned by ELink (fourth test)
-        '''
-        # List all available links in PubMed, except for libraries, for
-        # PMIDs 12085856 and 12085853
-        # To create the XML file, use
-        # >>> Bio.Entrez.elink(dbfrom="pubmed", id="12085856,12085853", cmd="llinks")
-        with open('Entrez/elink6.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(record[0]["DbFrom"], "pubmed")
-        self.assertEqual(len(record[0]["IdUrlList"]), 2)
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][0]["Id"], "12085856")
-        self.assertEqual(len(record[0]["IdUrlList"]["IdUrlSet"][0]["ObjUrl"]), 2)
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][0]["ObjUrl"][0]["Category"], ["Medical"])
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][0]["ObjUrl"][0]["Url"], "http://www.nlm.nih.gov/medlineplus/coronaryarterybypasssurgery.html")
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][0]["ObjUrl"][0]["Attribute"], ["free resource"])
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][0]["ObjUrl"][0]["SubjectType"], ["consumer health"])
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][0]["ObjUrl"][0]["IconUrl"], "//www.ncbi.nlm.nih.gov/corehtml/query/egifs/http:--www.nlm.nih.gov-medlineplus-images-linkout_sm.gif")
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][0]["ObjUrl"][0]["Provider"]["Name"], "MedlinePlus Health Information")
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][0]["ObjUrl"][0]["Provider"]["NameAbbr"], "MEDPLUS")
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][0]["ObjUrl"][0]["Provider"]["Id"], "3162")
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][0]["ObjUrl"][0]["Provider"]["Url"], "http://medlineplus.gov/")
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][0]["ObjUrl"][0]["Provider"]["IconUrl"], "http://www.nlm.nih.gov/medlineplus/images/linkout_sm.gif")
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][0]["ObjUrl"][0]["LinkName"], "Coronary Artery Bypass Surgery")
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][0]["ObjUrl"][1]["Category"], ["Education"])
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][0]["ObjUrl"][1]["Attribute"], ["free resource"])
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][0]["ObjUrl"][1]["SubjectType"], ["online tutorials/courses"])
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][0]["ObjUrl"][1]["Url"], "http://symptomresearch.nih.gov/chapter_1/index.htm")
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][0]["ObjUrl"][1]["Provider"]["Name"], "New England Research Institutes Inc.")
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][0]["ObjUrl"][1]["Provider"]["NameAbbr"], "NERI")
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][0]["ObjUrl"][1]["Provider"]["Id"], "3291")
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][0]["ObjUrl"][1]["Provider"]["Url"], "http://www.symptomresearch.com")
-        self.assertEqual(len(record[0]["IdUrlList"]["IdUrlSet"][1]), 2)
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][1]["Id"], "12085853")
-        self.assertEqual(len(record[0]["IdUrlList"]["IdUrlSet"][1]["ObjUrl"]), 3)
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][1]["ObjUrl"][0]["Category"], ["Medical"])
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][1]["ObjUrl"][0]["Url"], "http://www.nlm.nih.gov/medlineplus/arrhythmia.html")
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][1]["ObjUrl"][0]["IconUrl"], "//www.ncbi.nlm.nih.gov/corehtml/query/egifs/http:--www.nlm.nih.gov-medlineplus-images-linkout_sm.gif")
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][1]['ObjUrl'][0]['Attribute'], ['free resource'])
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][1]["ObjUrl"][0]["SubjectType"], ["consumer health"])
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][1]["ObjUrl"][0]["LinkName"], "Arrhythmia")
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][1]["ObjUrl"][0]["Provider"]["Name"], "MedlinePlus Health Information")
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][1]["ObjUrl"][0]["Provider"]["NameAbbr"], "MEDPLUS")
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][1]["ObjUrl"][0]["Provider"]["Id"], "3162")
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][1]["ObjUrl"][0]["Provider"]["Url"], "http://medlineplus.gov/")
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][1]["ObjUrl"][1]["Category"], ["Medical"])
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][1]["ObjUrl"][1]["Attribute"], ["free resource"])
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][1]["ObjUrl"][1]["Url"], "http://www.nlm.nih.gov/medlineplus/exerciseandphysicalfitness.html")
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][1]["ObjUrl"][1]["IconUrl"], "//www.ncbi.nlm.nih.gov/corehtml/query/egifs/http:--www.nlm.nih.gov-medlineplus-images-linkout_sm.gif")
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][1]["ObjUrl"][1]["LinkName"], "Exercise and Physical Fitness")
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][1]["ObjUrl"][1]["SubjectType"], ["consumer health"])
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][1]["ObjUrl"][1]["Provider"]["Name"], "MedlinePlus Health Information")
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][1]["ObjUrl"][1]["Provider"]["NameAbbr"], "MEDPLUS")
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][1]["ObjUrl"][1]["Provider"]["Id"], "3162")
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][1]["ObjUrl"][1]["Provider"]["Url"], "http://medlineplus.gov/")
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][1]["ObjUrl"][2]["Category"], ["Medical"])
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][1]["ObjUrl"][2]["Attribute"], ["free resource"])
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][1]["ObjUrl"][2]["Url"], "http://www.nlm.nih.gov/medlineplus/pacemakersandimplantabledefibrillators.html")
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][1]["ObjUrl"][2]["IconUrl"], "//www.ncbi.nlm.nih.gov/corehtml/query/egifs/http:--www.nlm.nih.gov-medlineplus-images-linkout_sm.gif")
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][1]["ObjUrl"][2]["LinkName"], "Pacemakers and Implantable Defibrillators")
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][1]["ObjUrl"][2]["SubjectType"], ["consumer health"])
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][1]["ObjUrl"][2]["Provider"]["Name"], "MedlinePlus Health Information")
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][1]["ObjUrl"][2]["Provider"]["NameAbbr"], "MEDPLUS")
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][1]["ObjUrl"][2]["Provider"]["Id"], "3162")
-        self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][1]["ObjUrl"][2]["Provider"]["Url"], "http://medlineplus.gov/")
-
-    def test_pubmed5(self):
-        '''Test parsing pubmed links returned by ELink (fifth test)
-        '''
-        # List Entrez database links for PubMed PMIDs 12169658 and 11748140
-        # To create the XML file, use
-        # >>> Bio.Entrez.elink(dbfrom="pubmed", id="12169658,11748140",
-        #                      cmd="acheck")
-        with open('Entrez/elink7.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(len(record), 1)
-        self.assertEqual(record[0]["DbFrom"], "pubmed")
-        self.assertEqual(len(record[0]["IdCheckList"]), 2)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["Id"], "12169658")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"]), 19)
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][0]), 5)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][0]["DbTo"], "biosystems")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][0]["LinkName"], "pubmed_biosystems")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][0]["MenuTag"], "BioSystem Links")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][0]["HtmlTag"], "BioSystems")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][0]["Priority"], "128")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][1]), 5)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][1]["DbTo"], "books")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][1]["LinkName"], "pubmed_books_refs")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][1]["MenuTag"], "Cited in Books")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][1]["HtmlTag"], "Cited in Books")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][1]["Priority"], "185")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][2]), 5)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][2]["DbTo"], "cdd")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][2]["LinkName"], "pubmed_cdd")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][2]["MenuTag"], "Domain Links")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][2]["HtmlTag"], "Domains")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][2]["Priority"], "130")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][3]), 5)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][3]["DbTo"], "gene")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][3]["LinkName"], "pubmed_gene")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][3]["MenuTag"], "Gene Links")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][3]["HtmlTag"], "Gene")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][3]["Priority"], "128")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][4]), 5)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][4]["DbTo"], "geoprofiles")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][4]["LinkName"], "pubmed_geoprofiles")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][4]["MenuTag"], "GEO Profile Links")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][4]["HtmlTag"], "GEO Profiles")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][4]["Priority"], "170")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][5]), 5)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][5]["DbTo"], "homologene")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][5]["LinkName"], "pubmed_homologene")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][5]["MenuTag"], "HomoloGene Links")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][5]["HtmlTag"], "HomoloGene")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][5]["Priority"], "128")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][6]), 5)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][6]["DbTo"], "medgen")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][6]["LinkName"], "pubmed_medgen")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][6]["MenuTag"], "MedGen")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][6]["HtmlTag"], "MedGen")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][6]["Priority"], "128")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][7]), 5)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][7]["DbTo"], "nuccore")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][7]["LinkName"], "pubmed_nuccore")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][7]["MenuTag"], "Nucleotide Links")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][7]["HtmlTag"], "Nucleotide")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][7]["Priority"], "128")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][8]), 5)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][8]["DbTo"], "nuccore")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][8]["LinkName"], "pubmed_nuccore_refseq")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][8]["MenuTag"], "Nucleotide (RefSeq) Links")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][8]["HtmlTag"], "Nucleotide (RefSeq)")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][8]["Priority"], "128")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][9]), 5)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][9]["DbTo"], "nuccore")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][9]["LinkName"], "pubmed_nuccore_weighted")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][9]["MenuTag"], "Nucleotide (Weighted) Links")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][9]["HtmlTag"], "Nucleotide (Weighted)")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][9]["Priority"], "128")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][10]), 5)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][10]["DbTo"], "pcsubstance")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][10]["LinkName"], "pubmed_pcsubstance_mesh")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][10]["MenuTag"], "Substance (MeSH Keyword)")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][10]["HtmlTag"], "Substance (MeSH Keyword)")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][10]["Priority"], "128")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][11]), 5)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][11]["DbTo"], "pmc")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][11]["LinkName"], "pubmed_pmc_refs")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][11]["MenuTag"], "Cited in PMC")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][11]["HtmlTag"], "Cited in PMC")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][11]["Priority"], "180")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][12]), 5)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][12]["DbTo"], "protein")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][12]["LinkName"], "pubmed_protein")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][12]["MenuTag"], "Protein Links")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][12]["HtmlTag"], "Protein")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][12]["Priority"], "140")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][13]), 5)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][13]["DbTo"], "protein")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][13]["LinkName"], "pubmed_protein_refseq")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][13]["MenuTag"], "Protein (RefSeq) Links")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][13]["HtmlTag"], "Protein (RefSeq)")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][13]["Priority"], "128")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][14]), 5)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][14]["DbTo"], "protein")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][14]["LinkName"], "pubmed_protein_weighted")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][14]["MenuTag"], "Protein (Weighted) Links")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][14]["HtmlTag"], "Protein (Weighted)")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][14]["Priority"], "128")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][15]), 5)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][15]["DbTo"], "pubmed")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][15]["LinkName"], "pubmed_pubmed")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][15]["MenuTag"], "Related Citations")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][15]["HtmlTag"], "Related Citations")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][15]["Priority"], "1")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][16]), 5)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][16]["DbTo"], "taxonomy")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][16]["LinkName"], "pubmed_taxonomy_entrez")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][16]["MenuTag"], "Taxonomy via GenBank")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][16]["HtmlTag"], "Taxonomy via GenBank")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][16]["Priority"], "128")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][17]), 5)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][17]["DbTo"], "unigene")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][17]["LinkName"], "pubmed_unigene")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][17]["MenuTag"], "UniGene Links")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][17]["HtmlTag"], "UniGene")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][17]["Priority"], "128")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][18]), 5)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][18]["DbTo"], "LinkOut")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][18]["LinkName"], "ExternalLink")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][18]["MenuTag"], "LinkOut")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][18]["HtmlTag"], "LinkOut")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][0]["LinkInfo"][18]["Priority"], "255")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["Id"], "11748140")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"]), 15)
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][0]), 5)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][0]["DbTo"], "biosystems")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][0]["LinkName"], "pubmed_biosystems")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][0]["MenuTag"], "BioSystem Links")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][0]["HtmlTag"], "BioSystems")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][0]["Priority"], "128")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][1]), 5)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][1]["DbTo"], "books")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][1]["LinkName"], "pubmed_books_refs")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][1]["MenuTag"], "Cited in Books")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][1]["HtmlTag"], "Cited in Books")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][1]["Priority"], "185")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][2]), 5)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][2]["DbTo"], "gene")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][2]["LinkName"], "pubmed_gene")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][2]["MenuTag"], "Gene Links")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][2]["HtmlTag"], "Gene")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][2]["Priority"], "128")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][3]), 5)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][3]["DbTo"], "geoprofiles")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][3]["LinkName"], "pubmed_geoprofiles")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][3]["MenuTag"], "GEO Profile Links")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][3]["HtmlTag"], "GEO Profiles")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][3]["Priority"], "170")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][4]), 5)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][4]["DbTo"], "nuccore")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][4]["LinkName"], "pubmed_nuccore")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][4]["MenuTag"], "Nucleotide Links")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][4]["HtmlTag"], "Nucleotide")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][4]["Priority"], "128")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][5]), 5)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][5]["DbTo"], "nuccore")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][5]["LinkName"], "pubmed_nuccore_refseq")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][5]["MenuTag"], "Nucleotide (RefSeq) Links")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][5]["HtmlTag"], "Nucleotide (RefSeq)")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][5]["Priority"], "128")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][6]), 5)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][6]["DbTo"], "nuccore")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][6]["LinkName"], "pubmed_nuccore_weighted")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][6]["MenuTag"], "Nucleotide (Weighted) Links")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][6]["HtmlTag"], "Nucleotide (Weighted)")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][6]["Priority"], "128")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][7]), 5)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][7]["DbTo"], "pmc")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][7]["LinkName"], "pubmed_pmc_refs")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][7]["MenuTag"], "Cited in PMC")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][7]["HtmlTag"], "Cited in PMC")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][7]["Priority"], "180")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][8]), 5)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][8]["DbTo"], "protein")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][8]["LinkName"], "pubmed_protein")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][8]["MenuTag"], "Protein Links")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][8]["HtmlTag"], "Protein")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][8]["Priority"], "140")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][9]), 5)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][9]["DbTo"], "protein")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][9]["LinkName"], "pubmed_protein_refseq")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][9]["MenuTag"], "Protein (RefSeq) Links")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][9]["HtmlTag"], "Protein (RefSeq)")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][9]["Priority"], "128")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][10]), 5)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][10]["DbTo"], "protein")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][10]["LinkName"], "pubmed_protein_weighted")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][10]["MenuTag"], "Protein (Weighted) Links")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][10]["HtmlTag"], "Protein (Weighted)")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][10]["Priority"], "128")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][11]), 5)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][11]["DbTo"], "pubmed")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][11]["LinkName"], "pubmed_pubmed")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][11]["MenuTag"], "Related Citations")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][11]["HtmlTag"], "Related Citations")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][11]["Priority"], "1")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][12]), 5)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][12]["DbTo"], "taxonomy")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][12]["LinkName"], "pubmed_taxonomy_entrez")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][12]["MenuTag"], "Taxonomy via GenBank")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][12]["HtmlTag"], "Taxonomy via GenBank")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][12]["Priority"], "128")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][13]), 5)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][13]["DbTo"], "unigene")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][13]["LinkName"], "pubmed_unigene")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][13]["MenuTag"], "UniGene Links")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][13]["HtmlTag"], "UniGene")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][13]["Priority"], "128")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][14]), 5)
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][14]["DbTo"], "LinkOut")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][14]["LinkName"], "ExternalLink")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][14]["MenuTag"], "LinkOut")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][14]["HtmlTag"], "LinkOut")
-        self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][14]["Priority"], "255")
-
-    def test_pubmed6(self):
-        '''Test parsing pubmed links returned by ELink (sixth test)
-        '''
-        # Check for the existence of a Related Articles link for PMID
-        # 12068369.
-        # To create the XML file, use
-        # >>> Bio.Entrez.elink(dbfrom="pubmed", id="12068369", cmd="ncheck")
-
-        with open('Entrez/elink8.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(len(record), 1)
-        self.assertEqual(record[0]["DbFrom"], "pubmed")
-        self.assertEqual(len(record[0]["IdCheckList"]), 2)
-        self.assertEqual(len(record[0]["IdCheckList"]["Id"]), 1)
-        self.assertEqual(record[0]["IdCheckList"]["Id"][0], "12068369")
-        self.assertEqual(len(record[0]["IdCheckList"]["Id"][0].attributes), 1)
-        self.assertEqual(record[0]["IdCheckList"]["Id"][0].attributes["HasNeighbor"], "Y")
-        self.assertEqual(len(record[0]["IdCheckList"]["IdLinkSet"]), 0)
-
-
-class EGQueryTest(unittest.TestCase):
-    '''Tests for parsing XML output returned by EGQuery
-    '''
-    def test_egquery1(self):
-        '''Test parsing XML output returned by EGQuery (first test)
-        '''
-        # Display counts in XML for stem cells in each Entrez database
-        # To create the XML file, use
-        # >>> Bio.Entrez.egquery(term="stem cells")
-        with open('Entrez/egquery1.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(record["Term"], "stem cells")
-        self.assertEqual(record["eGQueryResult"][0]["DbName"], "pubmed")
-        self.assertEqual(record["eGQueryResult"][0]["MenuName"], "PubMed")
-        self.assertEqual(record["eGQueryResult"][0]["Count"], "392")
-        self.assertEqual(record["eGQueryResult"][0]["Status"], "Ok")
-        self.assertEqual(record["eGQueryResult"][1]["DbName"], "pmc")
-        self.assertEqual(record["eGQueryResult"][1]["MenuName"], "PMC")
-        self.assertEqual(record["eGQueryResult"][1]["Count"], "173")
-        self.assertEqual(record["eGQueryResult"][1]["Status"], "Ok")
-        self.assertEqual(record["eGQueryResult"][2]["DbName"], "journals")
-        self.assertEqual(record["eGQueryResult"][2]["MenuName"], "Journals")
-        self.assertEqual(record["eGQueryResult"][2]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][2]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][3]["DbName"], "mesh")
-        self.assertEqual(record["eGQueryResult"][3]["MenuName"], "MeSH")
-        self.assertEqual(record["eGQueryResult"][3]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][3]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][4]["DbName"], "books")
-        self.assertEqual(record["eGQueryResult"][4]["MenuName"], "Books")
-        self.assertEqual(record["eGQueryResult"][4]["Count"], "10")
-        self.assertEqual(record["eGQueryResult"][4]["Status"], "Ok")
-        self.assertEqual(record["eGQueryResult"][5]["DbName"], "omim")
-        self.assertEqual(record["eGQueryResult"][5]["MenuName"], "OMIM")
-        self.assertEqual(record["eGQueryResult"][5]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][5]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][6]["DbName"], "omia")
-        self.assertEqual(record["eGQueryResult"][6]["MenuName"], "OMIA")
-        self.assertEqual(record["eGQueryResult"][6]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][6]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][7]["DbName"], "ncbisearch")
-        self.assertEqual(record["eGQueryResult"][7]["MenuName"], "NCBI Web Site")
-        self.assertEqual(record["eGQueryResult"][7]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][7]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][8]["DbName"], "nuccore")
-        self.assertEqual(record["eGQueryResult"][8]["MenuName"], "CoreNucleotide")
-        self.assertEqual(record["eGQueryResult"][8]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][8]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][9]["DbName"], "nucgss")
-        self.assertEqual(record["eGQueryResult"][9]["MenuName"], "GSS")
-        self.assertEqual(record["eGQueryResult"][9]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][9]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][10]["DbName"], "nucest")
-        self.assertEqual(record["eGQueryResult"][10]["MenuName"], "EST")
-        self.assertEqual(record["eGQueryResult"][10]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][10]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][11]["DbName"], "protein")
-        self.assertEqual(record["eGQueryResult"][11]["MenuName"], "Protein")
-        self.assertEqual(record["eGQueryResult"][11]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][11]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][12]["DbName"], "genome")
-        self.assertEqual(record["eGQueryResult"][12]["MenuName"], "Genome")
-        self.assertEqual(record["eGQueryResult"][12]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][12]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][13]["DbName"], "structure")
-        self.assertEqual(record["eGQueryResult"][13]["MenuName"], "Structure")
-        self.assertEqual(record["eGQueryResult"][13]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][13]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][14]["DbName"], "taxonomy")
-        self.assertEqual(record["eGQueryResult"][14]["MenuName"], "Taxonomy")
-        self.assertEqual(record["eGQueryResult"][14]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][14]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][15]["DbName"], "snp")
-        self.assertEqual(record["eGQueryResult"][15]["MenuName"], "SNP")
-        self.assertEqual(record["eGQueryResult"][15]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][15]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][16]["DbName"], "gene")
-        self.assertEqual(record["eGQueryResult"][16]["MenuName"], "Gene")
-        self.assertEqual(record["eGQueryResult"][16]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][16]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][17]["DbName"], "unigene")
-        self.assertEqual(record["eGQueryResult"][17]["MenuName"], "UniGene")
-        self.assertEqual(record["eGQueryResult"][17]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][17]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][18]["DbName"], "cdd")
-        self.assertEqual(record["eGQueryResult"][18]["MenuName"], "Conserved Domains")
-        self.assertEqual(record["eGQueryResult"][18]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][18]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][19]["DbName"], "domains")
-        self.assertEqual(record["eGQueryResult"][19]["MenuName"], "3D Domains")
-        self.assertEqual(record["eGQueryResult"][19]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][19]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][20]["DbName"], "unists")
-        self.assertEqual(record["eGQueryResult"][20]["MenuName"], "UniSTS")
-        self.assertEqual(record["eGQueryResult"][20]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][20]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][21]["DbName"], "popset")
-        self.assertEqual(record["eGQueryResult"][21]["MenuName"], "PopSet")
-        self.assertEqual(record["eGQueryResult"][21]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][21]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][22]["DbName"], "geo")
-        self.assertEqual(record["eGQueryResult"][22]["MenuName"], "GEO Profiles")
-        self.assertEqual(record["eGQueryResult"][22]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][22]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][23]["DbName"], "gds")
-        self.assertEqual(record["eGQueryResult"][23]["MenuName"], "GEO DataSets")
-        self.assertEqual(record["eGQueryResult"][23]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][23]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][24]["DbName"], "homologene")
-        self.assertEqual(record["eGQueryResult"][24]["MenuName"], "HomoloGene")
-        self.assertEqual(record["eGQueryResult"][24]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][24]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][25]["DbName"], "cancerchromosomes")
-        self.assertEqual(record["eGQueryResult"][25]["MenuName"], "CancerChromosomes")
-        self.assertEqual(record["eGQueryResult"][25]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][25]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][26]["DbName"], "pccompound")
-        self.assertEqual(record["eGQueryResult"][26]["MenuName"], "PubChem Compound")
-        self.assertEqual(record["eGQueryResult"][26]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][26]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][27]["DbName"], "pcsubstance")
-        self.assertEqual(record["eGQueryResult"][27]["MenuName"], "PubChem Substance")
-        self.assertEqual(record["eGQueryResult"][27]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][27]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][28]["DbName"], "pcassay")
-        self.assertEqual(record["eGQueryResult"][28]["MenuName"], "PubChem BioAssay")
-        self.assertEqual(record["eGQueryResult"][28]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][28]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][29]["DbName"], "nlmcatalog")
-        self.assertEqual(record["eGQueryResult"][29]["MenuName"], "NLM Catalog")
-        self.assertEqual(record["eGQueryResult"][29]["Count"], "2")
-        self.assertEqual(record["eGQueryResult"][29]["Status"], "Ok")
-        self.assertEqual(record["eGQueryResult"][30]["DbName"], "gensat")
-        self.assertEqual(record["eGQueryResult"][30]["MenuName"], "GENSAT")
-        self.assertEqual(record["eGQueryResult"][30]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][30]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][31]["DbName"], "probe")
-        self.assertEqual(record["eGQueryResult"][31]["MenuName"], "Probe")
-        self.assertEqual(record["eGQueryResult"][31]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][31]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][32]["DbName"], "genomeprj")
-        self.assertEqual(record["eGQueryResult"][32]["MenuName"], "Genome Project")
-        self.assertEqual(record["eGQueryResult"][32]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][32]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][33]["DbName"], "gap")
-        self.assertEqual(record["eGQueryResult"][33]["MenuName"], "dbGaP")
-        self.assertEqual(record["eGQueryResult"][33]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][33]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][34]["DbName"], "proteinclusters")
-        self.assertEqual(record["eGQueryResult"][34]["MenuName"], "Protein Clusters")
-        self.assertEqual(record["eGQueryResult"][34]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][34]["Status"], "Term or Database is not found")
-
-    def test_egquery2(self):
-        '''Test parsing XML output returned by EGQuery (second test)
-        '''
-        # Display counts in XML for brca1 or brca2 for each Entrez database
-        # To create the XML file, use
-        # >>> Bio.Entrez.egquery(term="brca1 OR brca2")
-        with open('Entrez/egquery2.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(record["Term"], "brca1 OR brca2")
-        self.assertEqual(record["eGQueryResult"][0]["DbName"], "pubmed")
-        self.assertEqual(record["eGQueryResult"][0]["MenuName"], "PubMed")
-        self.assertEqual(record["eGQueryResult"][0]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][0]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][1]["DbName"], "pmc")
-        self.assertEqual(record["eGQueryResult"][1]["MenuName"], "PMC")
-        self.assertEqual(record["eGQueryResult"][1]["Count"], "2739")
-        self.assertEqual(record["eGQueryResult"][1]["Status"], "Ok")
-        self.assertEqual(record["eGQueryResult"][2]["DbName"], "journals")
-        self.assertEqual(record["eGQueryResult"][2]["MenuName"], "Journals")
-        self.assertEqual(record["eGQueryResult"][2]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][2]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][3]["DbName"], "mesh")
-        self.assertEqual(record["eGQueryResult"][3]["MenuName"], "MeSH")
-        self.assertEqual(record["eGQueryResult"][3]["Count"], "29")
-        self.assertEqual(record["eGQueryResult"][3]["Status"], "Ok")
-        self.assertEqual(record["eGQueryResult"][4]["DbName"], "books")
-        self.assertEqual(record["eGQueryResult"][4]["MenuName"], "Books")
-        self.assertEqual(record["eGQueryResult"][4]["Count"], "392")
-        self.assertEqual(record["eGQueryResult"][4]["Status"], "Ok")
-        self.assertEqual(record["eGQueryResult"][5]["DbName"], "omim")
-        self.assertEqual(record["eGQueryResult"][5]["MenuName"], "OMIM")
-        self.assertEqual(record["eGQueryResult"][5]["Count"], "149")
-        self.assertEqual(record["eGQueryResult"][5]["Status"], "Ok")
-        self.assertEqual(record["eGQueryResult"][6]["DbName"], "omia")
-        self.assertEqual(record["eGQueryResult"][6]["MenuName"], "OMIA")
-        self.assertEqual(record["eGQueryResult"][6]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][6]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][7]["DbName"], "ncbisearch")
-        self.assertEqual(record["eGQueryResult"][7]["MenuName"], "NCBI Web Site")
-        self.assertEqual(record["eGQueryResult"][7]["Count"], "13")
-        self.assertEqual(record["eGQueryResult"][7]["Status"], "Ok")
-        self.assertEqual(record["eGQueryResult"][8]["DbName"], "nuccore")
-        self.assertEqual(record["eGQueryResult"][8]["MenuName"], "CoreNucleotide")
-        self.assertEqual(record["eGQueryResult"][8]["Count"], "4917")
-        self.assertEqual(record["eGQueryResult"][8]["Status"], "Ok")
-        self.assertEqual(record["eGQueryResult"][9]["DbName"], "nucgss")
-        self.assertEqual(record["eGQueryResult"][9]["MenuName"], "GSS")
-        self.assertEqual(record["eGQueryResult"][9]["Count"], "184")
-        self.assertEqual(record["eGQueryResult"][9]["Status"], "Ok")
-        self.assertEqual(record["eGQueryResult"][10]["DbName"], "nucest")
-        self.assertEqual(record["eGQueryResult"][10]["MenuName"], "EST")
-        self.assertEqual(record["eGQueryResult"][10]["Count"], "600")
-        self.assertEqual(record["eGQueryResult"][10]["Status"], "Ok")
-        self.assertEqual(record["eGQueryResult"][11]["DbName"], "protein")
-        self.assertEqual(record["eGQueryResult"][11]["MenuName"], "Protein")
-        self.assertEqual(record["eGQueryResult"][11]["Count"], "6779")
-        self.assertEqual(record["eGQueryResult"][11]["Status"], "Ok")
-        self.assertEqual(record["eGQueryResult"][12]["DbName"], "genome")
-        self.assertEqual(record["eGQueryResult"][12]["MenuName"], "Genome")
-        self.assertEqual(record["eGQueryResult"][12]["Count"], "44")
-        self.assertEqual(record["eGQueryResult"][12]["Status"], "Ok")
-        self.assertEqual(record["eGQueryResult"][13]["DbName"], "structure")
-        self.assertEqual(record["eGQueryResult"][13]["MenuName"], "Structure")
-        self.assertEqual(record["eGQueryResult"][13]["Count"], "29")
-        self.assertEqual(record["eGQueryResult"][13]["Status"], "Ok")
-        self.assertEqual(record["eGQueryResult"][14]["DbName"], "taxonomy")
-        self.assertEqual(record["eGQueryResult"][14]["MenuName"], "Taxonomy")
-        self.assertEqual(record["eGQueryResult"][14]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][14]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][15]["DbName"], "snp")
-        self.assertEqual(record["eGQueryResult"][15]["MenuName"], "SNP")
-        self.assertEqual(record["eGQueryResult"][15]["Count"], "2013")
-        self.assertEqual(record["eGQueryResult"][15]["Status"], "Ok")
-        self.assertEqual(record["eGQueryResult"][16]["DbName"], "gene")
-        self.assertEqual(record["eGQueryResult"][16]["MenuName"], "Gene")
-        self.assertEqual(record["eGQueryResult"][16]["Count"], "1775")
-        self.assertEqual(record["eGQueryResult"][16]["Status"], "Ok")
-        self.assertEqual(record["eGQueryResult"][17]["DbName"], "unigene")
-        self.assertEqual(record["eGQueryResult"][17]["MenuName"], "UniGene")
-        self.assertEqual(record["eGQueryResult"][17]["Count"], "207")
-        self.assertEqual(record["eGQueryResult"][17]["Status"], "Ok")
-        self.assertEqual(record["eGQueryResult"][18]["DbName"], "cdd")
-        self.assertEqual(record["eGQueryResult"][18]["MenuName"], "Conserved Domains")
-        self.assertEqual(record["eGQueryResult"][18]["Count"], "17")
-        self.assertEqual(record["eGQueryResult"][18]["Status"], "Ok")
-        self.assertEqual(record["eGQueryResult"][19]["DbName"], "domains")
-        self.assertEqual(record["eGQueryResult"][19]["MenuName"], "3D Domains")
-        self.assertEqual(record["eGQueryResult"][19]["Count"], "131")
-        self.assertEqual(record["eGQueryResult"][19]["Status"], "Ok")
-        self.assertEqual(record["eGQueryResult"][20]["DbName"], "unists")
-        self.assertEqual(record["eGQueryResult"][20]["MenuName"], "UniSTS")
-        self.assertEqual(record["eGQueryResult"][20]["Count"], "198")
-        self.assertEqual(record["eGQueryResult"][20]["Status"], "Ok")
-        self.assertEqual(record["eGQueryResult"][21]["DbName"], "popset")
-        self.assertEqual(record["eGQueryResult"][21]["MenuName"], "PopSet")
-        self.assertEqual(record["eGQueryResult"][21]["Count"], "43")
-        self.assertEqual(record["eGQueryResult"][21]["Status"], "Ok")
-        self.assertEqual(record["eGQueryResult"][22]["DbName"], "geo")
-        self.assertEqual(record["eGQueryResult"][22]["MenuName"], "GEO Profiles")
-        self.assertEqual(record["eGQueryResult"][22]["Count"], "128692")
-        self.assertEqual(record["eGQueryResult"][22]["Status"], "Ok")
-        self.assertEqual(record["eGQueryResult"][23]["DbName"], "gds")
-        self.assertEqual(record["eGQueryResult"][23]["MenuName"], "GEO DataSets")
-        self.assertEqual(record["eGQueryResult"][23]["Count"], "21")
-        self.assertEqual(record["eGQueryResult"][23]["Status"], "Ok")
-        self.assertEqual(record["eGQueryResult"][24]["DbName"], "homologene")
-        self.assertEqual(record["eGQueryResult"][24]["MenuName"], "HomoloGene")
-        self.assertEqual(record["eGQueryResult"][24]["Count"], "50")
-        self.assertEqual(record["eGQueryResult"][24]["Status"], "Ok")
-        self.assertEqual(record["eGQueryResult"][25]["DbName"], "cancerchromosomes")
-        self.assertEqual(record["eGQueryResult"][25]["MenuName"], "CancerChromosomes")
-        self.assertEqual(record["eGQueryResult"][25]["Count"], "18")
-        self.assertEqual(record["eGQueryResult"][25]["Status"], "Ok")
-        self.assertEqual(record["eGQueryResult"][26]["DbName"], "pccompound")
-        self.assertEqual(record["eGQueryResult"][26]["MenuName"], "PubChem Compound")
-        self.assertEqual(record["eGQueryResult"][26]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][26]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][27]["DbName"], "pcsubstance")
-        self.assertEqual(record["eGQueryResult"][27]["MenuName"], "PubChem Substance")
-        self.assertEqual(record["eGQueryResult"][27]["Count"], "26")
-        self.assertEqual(record["eGQueryResult"][27]["Status"], "Ok")
-        self.assertEqual(record["eGQueryResult"][28]["DbName"], "pcassay")
-        self.assertEqual(record["eGQueryResult"][28]["MenuName"], "PubChem BioAssay")
-        self.assertEqual(record["eGQueryResult"][28]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][28]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][29]["DbName"], "nlmcatalog")
-        self.assertEqual(record["eGQueryResult"][29]["MenuName"], "NLM Catalog")
-        self.assertEqual(record["eGQueryResult"][29]["Count"], "31")
-        self.assertEqual(record["eGQueryResult"][29]["Status"], "Ok")
-        self.assertEqual(record["eGQueryResult"][30]["DbName"], "gensat")
-        self.assertEqual(record["eGQueryResult"][30]["MenuName"], "GENSAT")
-        self.assertEqual(record["eGQueryResult"][30]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][30]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][31]["DbName"], "probe")
-        self.assertEqual(record["eGQueryResult"][31]["MenuName"], "Probe")
-        self.assertEqual(record["eGQueryResult"][31]["Count"], "1410")
-        self.assertEqual(record["eGQueryResult"][31]["Status"], "Ok")
-        self.assertEqual(record["eGQueryResult"][32]["DbName"], "genomeprj")
-        self.assertEqual(record["eGQueryResult"][32]["MenuName"], "Genome Project")
-        self.assertEqual(record["eGQueryResult"][32]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][32]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][33]["DbName"], "gap")
-        self.assertEqual(record["eGQueryResult"][33]["MenuName"], "dbGaP")
-        self.assertEqual(record["eGQueryResult"][33]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][33]["Status"], "Term or Database is not found")
-        self.assertEqual(record["eGQueryResult"][34]["DbName"], "proteinclusters")
-        self.assertEqual(record["eGQueryResult"][34]["MenuName"], "Protein Clusters")
-        self.assertEqual(record["eGQueryResult"][34]["Count"], "0")
-        self.assertEqual(record["eGQueryResult"][34]["Status"], "Term or Database is not found")
-
-
-class ESpellTest(unittest.TestCase):
-    '''Tests for parsing XML output returned by ESpell
-    '''
-    def test_espell(self):
-        '''Test parsing XML output returned by ESpell
-        '''
-        # Request suggestions for the PubMed search biopythooon
-        # To create the XML file, use
-        # >>> Bio.Entrez.espell(db="pubmed", term="biopythooon")
-        with open('Entrez/espell.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(record["Database"], "pubmed")
-        self.assertEqual(record["Query"], "biopythooon")
-        self.assertEqual(record["CorrectedQuery"], "biopython")
-        self.assertEqual(len(record["SpelledQuery"]), 1)
-        self.assertEqual(record["SpelledQuery"][0], "biopython")
-        self.assertEqual(record["SpelledQuery"][0].tag, "Replaced")
-
-
-class EFetchTest(unittest.TestCase):
-    '''Tests for parsing XML output returned by EFetch
-    '''
-    def test_pubmed1(self):
-        '''Test parsing XML returned by EFetch, PubMed database (first test)
-        '''
-        # In PubMed display PMIDs 12091962 and 9997 in xml retrieval mode
-        # and abstract retrieval type.
-        # To create the XML file, use
-        # >>> Bio.Entrez.efetch(db='pubmed', id='12091962,9997',
-        #                       retmode='xml', rettype='abstract')
-        with open('Entrez/pubmed1.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(record[0]["MedlineCitation"].attributes["Owner"], "KIE")
-        self.assertEqual(record[0]["MedlineCitation"].attributes["Status"], "MEDLINE")
-        self.assertEqual(record[0]["MedlineCitation"]["PMID"], "12091962")
-        self.assertEqual(record[0]["MedlineCitation"]["DateCreated"]["Year"], "1991")
-        self.assertEqual(record[0]["MedlineCitation"]["DateCreated"]["Month"], "01")
-        self.assertEqual(record[0]["MedlineCitation"]["DateCreated"]["Day"], "22")
-        self.assertEqual(record[0]["MedlineCitation"]["DateCompleted"]["Year"], "1991")
-        self.assertEqual(record[0]["MedlineCitation"]["DateCompleted"]["Month"], "01")
-        self.assertEqual(record[0]["MedlineCitation"]["DateCompleted"]["Day"], "22")
-        self.assertEqual(record[0]["MedlineCitation"]["DateRevised"]["Year"], "2007")
-        self.assertEqual(record[0]["MedlineCitation"]["DateRevised"]["Month"], "11")
-        self.assertEqual(record[0]["MedlineCitation"]["DateRevised"]["Day"], "15")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"].attributes["PubModel"], "Print")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["Journal"]["ISSN"], "1043-1578")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["Journal"]["ISSN"].attributes["IssnType"], "Print")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["Journal"]["JournalIssue"].attributes["CitedMedium"], "Print")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["Journal"]["JournalIssue"]["Volume"], "17")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["Journal"]["JournalIssue"]["Issue"], "1")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["Journal"]["JournalIssue"]["PubDate"]["Year"], "1990")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["Journal"]["JournalIssue"]["PubDate"]["Season"], "Spring")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["Journal"]["Title"], "Social justice (San Francisco, Calif.)")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["ArticleTitle"], "The treatment of AIDS behind the walls of correctional facilities.")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["Pagination"]["MedlinePgn"], "113-25")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"].attributes["CompleteYN"], 'Y')
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][0].attributes["ValidYN"], "Y")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][0]["LastName"], "Olivero")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][0]["ForeName"], "J Michael")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][0]["Initials"], "JM")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["Language"], ["eng"])
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["PublicationTypeList"], ["Journal Article", "Review"])
-        self.assertEqual(record[0]["MedlineCitation"]["MedlineJournalInfo"]["Country"], "United States")
-        self.assertEqual(record[0]["MedlineCitation"]["MedlineJournalInfo"]["MedlineTA"], "Soc Justice")
-        self.assertEqual(record[0]["MedlineCitation"]["MedlineJournalInfo"]["NlmUniqueID"], "9891830")
-        self.assertEqual(record[0]["MedlineCitation"]["CitationSubset"], ["E"])
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][0]["DescriptorName"], "AIDS Serodiagnosis")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][0]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][1]["DescriptorName"], "Acquired Immunodeficiency Syndrome")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][1]["DescriptorName"].attributes["MajorTopicYN"], "Y")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][2]["DescriptorName"], "Civil Rights")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][2]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][3]["DescriptorName"], "HIV Seropositivity")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][3]["DescriptorName"].attributes["MajorTopicYN"], "Y")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][4]["DescriptorName"], "Humans")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][4]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][5]["DescriptorName"], "Jurisprudence")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][5]["DescriptorName"].attributes["MajorTopicYN"], "Y")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][6]["DescriptorName"], "Law Enforcement")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][6]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][7]["DescriptorName"], "Mass Screening")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][7]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][8]["DescriptorName"], "Minority Groups")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][8]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][9]["DescriptorName"], "Organizational Policy")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][9]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][10]["DescriptorName"], "Patient Care")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][10]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][11]["DescriptorName"], "Prejudice")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][11]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][12]["DescriptorName"], "Prisoners")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][12]["DescriptorName"].attributes["MajorTopicYN"], "Y")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][13]["DescriptorName"], "Public Policy")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][13]["DescriptorName"].attributes["MajorTopicYN"], "Y")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][14]["DescriptorName"], "Quarantine")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][14]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][15]["DescriptorName"], "Social Control, Formal")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][15]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][16]["DescriptorName"], "Statistics as Topic")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][16]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][17]["DescriptorName"], "Stereotyping")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][17]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][18]["DescriptorName"], "United States")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][18]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[0]["MedlineCitation"]["NumberOfReferences"], "63")
-        self.assertEqual(record[0]["MedlineCitation"]["OtherID"][0], "31840")
-        self.assertEqual(record[0]["MedlineCitation"]["OtherID"][0].attributes["Source"], "KIE")
-        self.assertEqual(record[0]["MedlineCitation"]["KeywordList"][0].attributes["Owner"], "KIE")
-        self.assertEqual(record[0]["MedlineCitation"]["KeywordList"][0][0], "Health Care and Public Health")
-        self.assertEqual(record[0]["MedlineCitation"]["KeywordList"][0][0].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[0]["MedlineCitation"]["KeywordList"][0][1], "Legal Approach")
-        self.assertEqual(record[0]["MedlineCitation"]["KeywordList"][0][1].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[0]["MedlineCitation"]["GeneralNote"][0], "14 fn.")
-        self.assertEqual(record[0]["MedlineCitation"]["GeneralNote"][0].attributes["Owner"], "KIE")
-        self.assertEqual(record[0]["MedlineCitation"]["GeneralNote"][1], "KIE BoB Subject Heading: AIDS")
-        self.assertEqual(record[0]["MedlineCitation"]["GeneralNote"][1].attributes["Owner"], "KIE")
-        self.assertEqual(record[0]["MedlineCitation"]["GeneralNote"][2], "63 refs.")
-        self.assertEqual(record[0]["MedlineCitation"]["GeneralNote"][2].attributes["Owner"], "KIE")
-        self.assertEqual(record[0]["PubmedData"]["History"][0][0].attributes["PubStatus"], "pubmed")
-        self.assertEqual(record[0]["PubmedData"]["History"][0][0]["Year"], "1990")
-        self.assertEqual(record[0]["PubmedData"]["History"][0][0]["Month"], "4")
-        self.assertEqual(record[0]["PubmedData"]["History"][0][0]["Day"], "1")
-        self.assertEqual(record[0]["PubmedData"]["History"][0][0]["Hour"], "0")
-        self.assertEqual(record[0]["PubmedData"]["History"][0][0]["Minute"], "0")
-        self.assertEqual(record[0]["PubmedData"]["History"][0][1].attributes["PubStatus"], "medline")
-        self.assertEqual(record[0]["PubmedData"]["History"][0][1]["Year"], "2002")
-        self.assertEqual(record[0]["PubmedData"]["History"][0][1]["Month"], "7")
-        self.assertEqual(record[0]["PubmedData"]["History"][0][1]["Day"], "16")
-        self.assertEqual(record[0]["PubmedData"]["History"][0][1]["Hour"], "10")
-        self.assertEqual(record[0]["PubmedData"]["History"][0][1]["Minute"], "1")
-        self.assertEqual(record[0]["PubmedData"]["PublicationStatus"], "ppublish")
-        self.assertEqual(len(record[0]["PubmedData"]["ArticleIdList"]), 1)
-        self.assertEqual(record[0]["PubmedData"]["ArticleIdList"][0], "12091962")
-        self.assertEqual(record[0]["PubmedData"]["ArticleIdList"][0].attributes["IdType"], "pubmed")
-        self.assertEqual(record[1]["MedlineCitation"].attributes["Owner"], "NLM")
-        self.assertEqual(record[1]["MedlineCitation"].attributes["Status"], "MEDLINE")
-        self.assertEqual(record[1]["MedlineCitation"]["PMID"], "9997")
-        self.assertEqual(record[1]["MedlineCitation"]["DateCreated"]["Year"], "1976")
-        self.assertEqual(record[1]["MedlineCitation"]["DateCreated"]["Month"], "12")
-        self.assertEqual(record[1]["MedlineCitation"]["DateCreated"]["Day"], "30")
-        self.assertEqual(record[1]["MedlineCitation"]["DateCompleted"]["Year"], "1976")
-        self.assertEqual(record[1]["MedlineCitation"]["DateCompleted"]["Month"], "12")
-        self.assertEqual(record[1]["MedlineCitation"]["DateCompleted"]["Day"], "30")
-        self.assertEqual(record[1]["MedlineCitation"]["DateRevised"]["Year"], "2003")
-        self.assertEqual(record[1]["MedlineCitation"]["DateRevised"]["Month"], "11")
-        self.assertEqual(record[1]["MedlineCitation"]["DateRevised"]["Day"], "14")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"].attributes["PubModel"], "Print")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["Journal"]["ISSN"], "0006-3002")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["Journal"]["ISSN"].attributes["IssnType"], "Print")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["Journal"]["JournalIssue"].attributes["CitedMedium"], "Print")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["Journal"]["JournalIssue"]["Volume"], "446")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["Journal"]["JournalIssue"]["Issue"], "1")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["Journal"]["JournalIssue"]["PubDate"]["Year"], "1976")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["Journal"]["JournalIssue"]["PubDate"]["Month"], "Sep")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["Journal"]["JournalIssue"]["PubDate"]["Day"], "28")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["Journal"]["Title"], "Biochimica et biophysica acta")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["Journal"]["ISOAbbreviation"], "Biochim. Biophys. Acta")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["ArticleTitle"], "Magnetic studies of Chromatium flavocytochrome C552. A mechanism for heme-flavin interaction.")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["Pagination"]["MedlinePgn"], "179-91")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["Abstract"]["AbstractText"], "Electron paramagnetic resonance and magnetic susceptibility studies of Chromatium flavocytochrome C552 and its diheme flavin-free subunit at temperatures below 45 degrees K are reported. The results show that in the intact protein and the subunit the two low-spin (S = 1/2) heme irons are distinguishable, giving rise to separate EPR signals. In the intact protein only, one of the heme irons exis [...]
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["AuthorList"].attributes["CompleteYN"], "Y")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["AuthorList"][0].attributes["ValidYN"], "Y")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["AuthorList"][0]["LastName"], "Strekas")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["AuthorList"][0]["ForeName"], "T C")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["AuthorList"][0]["Initials"], "TC")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["Language"], ["eng"])
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["PublicationTypeList"], ["Journal Article"])
-        self.assertEqual(record[1]["MedlineCitation"]["MedlineJournalInfo"]["Country"], "NETHERLANDS")
-        self.assertEqual(record[1]["MedlineCitation"]["MedlineJournalInfo"]["MedlineTA"], "Biochim Biophys Acta")
-        self.assertEqual(record[1]["MedlineCitation"]["MedlineJournalInfo"]["NlmUniqueID"], "0217513")
-        self.assertEqual(record[1]["MedlineCitation"]["ChemicalList"][0]["RegistryNumber"], "0")
-        self.assertEqual(record[1]["MedlineCitation"]["ChemicalList"][0]["NameOfSubstance"], "Cytochrome c Group")
-        self.assertEqual(record[1]["MedlineCitation"]["ChemicalList"][1]["RegistryNumber"], "0")
-        self.assertEqual(record[1]["MedlineCitation"]["ChemicalList"][1]["NameOfSubstance"], "Flavins")
-        self.assertEqual(record[1]["MedlineCitation"]["ChemicalList"][2]["RegistryNumber"], "14875-96-8")
-        self.assertEqual(record[1]["MedlineCitation"]["ChemicalList"][2]["NameOfSubstance"], "Heme")
-        self.assertEqual(record[1]["MedlineCitation"]["ChemicalList"][3]["RegistryNumber"], "7439-89-6")
-        self.assertEqual(record[1]["MedlineCitation"]["ChemicalList"][3]["NameOfSubstance"], "Iron")
-        self.assertEqual(record[1]["MedlineCitation"]["CitationSubset"], ["IM"])
-        self.assertEqual(record[1]["MedlineCitation"]["MeshHeadingList"][0]["DescriptorName"], "Binding Sites")
-        self.assertEqual(record[1]["MedlineCitation"]["MeshHeadingList"][0]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[1]["MedlineCitation"]["MeshHeadingList"][1]["DescriptorName"], "Chromatium")
-        self.assertEqual(record[1]["MedlineCitation"]["MeshHeadingList"][1]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[1]["MedlineCitation"]["MeshHeadingList"][1]["QualifierName"][0], "enzymology")
-        self.assertEqual(record[1]["MedlineCitation"]["MeshHeadingList"][1]["QualifierName"][0].attributes["MajorTopicYN"], "Y")
-        self.assertEqual(record[1]["MedlineCitation"]["MeshHeadingList"][2]["DescriptorName"], "Cytochrome c Group")
-        self.assertEqual(record[1]["MedlineCitation"]["MeshHeadingList"][2]["DescriptorName"].attributes["MajorTopicYN"], "Y")
-        self.assertEqual(record[1]["MedlineCitation"]["MeshHeadingList"][3]["DescriptorName"], "Electron Spin Resonance Spectroscopy")
-        self.assertEqual(record[1]["MedlineCitation"]["MeshHeadingList"][3]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[1]["MedlineCitation"]["MeshHeadingList"][4]["DescriptorName"], "Flavins")
-        self.assertEqual(record[1]["MedlineCitation"]["MeshHeadingList"][4]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[1]["MedlineCitation"]["MeshHeadingList"][5]["DescriptorName"], "Heme")
-        self.assertEqual(record[1]["MedlineCitation"]["MeshHeadingList"][5]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[1]["MedlineCitation"]["MeshHeadingList"][6]["DescriptorName"], "Hydrogen-Ion Concentration")
-        self.assertEqual(record[1]["MedlineCitation"]["MeshHeadingList"][6]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[1]["MedlineCitation"]["MeshHeadingList"][7]["DescriptorName"], "Iron")
-        self.assertEqual(record[1]["MedlineCitation"]["MeshHeadingList"][7]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[1]["MedlineCitation"]["MeshHeadingList"][7]["QualifierName"][0], "analysis")
-        self.assertEqual(record[1]["MedlineCitation"]["MeshHeadingList"][7]["QualifierName"][0].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[1]["MedlineCitation"]["MeshHeadingList"][8]["DescriptorName"], "Magnetics")
-        self.assertEqual(record[1]["MedlineCitation"]["MeshHeadingList"][8]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[1]["MedlineCitation"]["MeshHeadingList"][9]["DescriptorName"], "Oxidation-Reduction")
-        self.assertEqual(record[1]["MedlineCitation"]["MeshHeadingList"][9]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[1]["MedlineCitation"]["MeshHeadingList"][10]["DescriptorName"], "Protein Binding")
-        self.assertEqual(record[1]["MedlineCitation"]["MeshHeadingList"][10]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[1]["MedlineCitation"]["MeshHeadingList"][11]["DescriptorName"], "Protein Conformation")
-        self.assertEqual(record[1]["MedlineCitation"]["MeshHeadingList"][11]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[1]["MedlineCitation"]["MeshHeadingList"][12]["DescriptorName"], "Temperature")
-        self.assertEqual(record[1]["MedlineCitation"]["MeshHeadingList"][12]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[1]["PubmedData"]["History"][0][0].attributes["PubStatus"], "pubmed")
-        self.assertEqual(record[1]["PubmedData"]["History"][0][0]["Year"], "1976")
-        self.assertEqual(record[1]["PubmedData"]["History"][0][0]["Month"], "9")
-        self.assertEqual(record[1]["PubmedData"]["History"][0][0]["Day"], "28")
-        self.assertEqual(record[1]["PubmedData"]["History"][0][1].attributes["PubStatus"], "medline")
-        self.assertEqual(record[1]["PubmedData"]["History"][0][1]["Year"], "1976")
-        self.assertEqual(record[1]["PubmedData"]["History"][0][1]["Month"], "9")
-        self.assertEqual(record[1]["PubmedData"]["History"][0][1]["Day"], "28")
-        self.assertEqual(record[1]["PubmedData"]["History"][0][1]["Hour"], "0")
-        self.assertEqual(record[1]["PubmedData"]["History"][0][1]["Minute"], "1")
-        self.assertEqual(record[1]["PubmedData"]["PublicationStatus"], "ppublish")
-        self.assertEqual(len(record[1]["PubmedData"]["ArticleIdList"]), 1)
-        self.assertEqual(record[1]["PubmedData"]["ArticleIdList"][0], "9997")
-        self.assertEqual(record[1]["PubmedData"]["ArticleIdList"][0].attributes["IdType"], "pubmed")
-
-    def test_pubmed2(self):
-        '''Test parsing XML returned by EFetch, PubMed database (second test)
-        '''
-        # In PubMed display PMIDs in xml retrieval mode.
-        # To create the XML file, use
-        # >>> Bio.Entrez.efetch(db='pubmed', id="11748933,11700088",
-        #                       retmode="xml")
-        with open('Entrez/pubmed2.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(record[0]["MedlineCitation"].attributes["Owner"], "NLM")
-        self.assertEqual(record[0]["MedlineCitation"].attributes["Status"], "MEDLINE")
-        self.assertEqual(record[0]["MedlineCitation"]["PMID"], "11748933")
-        self.assertEqual(record[0]["MedlineCitation"]["DateCreated"]["Year"], "2001")
-        self.assertEqual(record[0]["MedlineCitation"]["DateCreated"]["Month"], "12")
-        self.assertEqual(record[0]["MedlineCitation"]["DateCreated"]["Day"], "25")
-        self.assertEqual(record[0]["MedlineCitation"]["DateCompleted"]["Year"], "2002")
-        self.assertEqual(record[0]["MedlineCitation"]["DateCompleted"]["Month"], "03")
-        self.assertEqual(record[0]["MedlineCitation"]["DateCompleted"]["Day"], "04")
-        self.assertEqual(record[0]["MedlineCitation"]["DateRevised"]["Year"], "2006")
-        self.assertEqual(record[0]["MedlineCitation"]["DateRevised"]["Month"], "11")
-        self.assertEqual(record[0]["MedlineCitation"]["DateRevised"]["Day"], "15")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"].attributes["PubModel"], "Print")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["Journal"]["ISSN"], "0011-2240")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["Journal"]["ISSN"].attributes["IssnType"], "Print")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["Journal"]["JournalIssue"].attributes["CitedMedium"], "Print")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["Journal"]["JournalIssue"]["Volume"], "42")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["Journal"]["JournalIssue"]["Issue"], "4")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["Journal"]["JournalIssue"]["PubDate"]["Year"], "2001")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["Journal"]["JournalIssue"]["PubDate"]["Month"], "Jun")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["Journal"]["Title"], "Cryobiology")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["Journal"]["ISOAbbreviation"], "Cryobiology")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["ArticleTitle"], "Is cryopreservation a homogeneous process? Ultrastructure and motility of untreated, prefreezing, and postthawed spermatozoa of Diplodus puntazzo (Cetti).")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["Pagination"]["MedlinePgn"], "244-55")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["Abstract"]["AbstractText"], "This study subdivides the cryopreservation procedure for Diplodus puntazzo spermatozoa into three key phases, fresh, prefreezing (samples equilibrated in cryosolutions), and postthawed stages, and examines the ultrastructural anomalies and motility profiles of spermatozoa in each stage, with different cryodiluents. Two simple cryosolutions were evaluated: 0.17 M sodium chloride containing a fin [...]
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["Abstract"]["CopyrightInformation"], "Copyright 2001 Elsevier Science.")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["Affiliation"], u'Dipartimento di Scienze Ambientali, Universit\xe0 degli Studi della Tuscia, 01100 Viterbo, Italy.')
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"].attributes["CompleteYN"], "Y")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][0].attributes["ValidYN"], "Y")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][0]["LastName"], "Taddei")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][0]["ForeName"], "A R")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][0]["Initials"], "AR")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][1].attributes["ValidYN"], "Y")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][1]["LastName"], "Barbato")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][1]["ForeName"], "F")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][1]["Initials"], "F")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][2].attributes["ValidYN"], "Y")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][2]["LastName"], "Abelli")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][2]["ForeName"], "L")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][2]["Initials"], "L")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][3].attributes["ValidYN"], "Y")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][3]["LastName"], "Canese")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][3]["ForeName"], "S")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][3]["Initials"], "S")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][4].attributes["ValidYN"], "Y")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][4]["LastName"], "Moretti")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][4]["ForeName"], "F")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][4]["Initials"], "F")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][5].attributes["ValidYN"], "Y")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][5]["LastName"], "Rana")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][5]["ForeName"], "K J")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][5]["Initials"], "KJ")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][6].attributes["ValidYN"], "Y")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][6]["LastName"], "Fausto")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][6]["ForeName"], "A M")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][6]["Initials"], "AM")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][7].attributes["ValidYN"], "Y")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][7]["LastName"], "Mazzini")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][7]["ForeName"], "M")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["AuthorList"][7]["Initials"], "M")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["Language"], ["eng"])
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["PublicationTypeList"][0], "Journal Article")
-        self.assertEqual(record[0]["MedlineCitation"]["Article"]["PublicationTypeList"][1], "Research Support, Non-U.S. Gov't")
-        self.assertEqual(record[0]["MedlineCitation"]["MedlineJournalInfo"]["Country"], "United States")
-        self.assertEqual(record[0]["MedlineCitation"]["MedlineJournalInfo"]["MedlineTA"], "Cryobiology")
-        self.assertEqual(record[0]["MedlineCitation"]["MedlineJournalInfo"]["NlmUniqueID"], "0006252")
-        self.assertEqual(record[0]["MedlineCitation"]["CitationSubset"], ["IM"])
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][0]["DescriptorName"], "Animals")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][0]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][1]["DescriptorName"], "Cell Membrane")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][1]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][1]["QualifierName"][0], "ultrastructure")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][1]["QualifierName"][0].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][2]["DescriptorName"], "Cryopreservation")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][2]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][2]["QualifierName"][0], "methods")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][2]["QualifierName"][0].attributes["MajorTopicYN"], "Y")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][3]["DescriptorName"], "Male")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][3]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][4]["DescriptorName"], "Microscopy, Electron")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][4]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][5]["DescriptorName"], "Microscopy, Electron, Scanning")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][5]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][6]["DescriptorName"], "Nuclear Envelope")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][6]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][6]["QualifierName"][0], "ultrastructure")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][6]["QualifierName"][0].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][7]["DescriptorName"], "Sea Bream")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][7]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][7]["QualifierName"][0], "anatomy & histology")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][7]["QualifierName"][0].attributes["MajorTopicYN"], "Y")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][7]["QualifierName"][1], "physiology")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][7]["QualifierName"][1].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][8]["DescriptorName"], "Semen Preservation")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][8]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][8]["QualifierName"][0], "adverse effects")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][8]["QualifierName"][0].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][8]["QualifierName"][1], "methods")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][8]["QualifierName"][1].attributes["MajorTopicYN"], "Y")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][9]["DescriptorName"], "Sperm Motility")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][9]["DescriptorName"].attributes["MajorTopicYN"], "Y")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][10]["DescriptorName"], "Spermatozoa")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][10]["DescriptorName"].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][10]["QualifierName"][0], "physiology")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][10]["QualifierName"][0].attributes["MajorTopicYN"], "N")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][10]["QualifierName"][1], "ultrastructure")
-        self.assertEqual(record[0]["MedlineCitation"]["MeshHeadingList"][10]["QualifierName"][1].attributes["MajorTopicYN"], "Y")
-        self.assertEqual(record[0]["PubmedData"]["History"][0][0].attributes["PubStatus"], "pubmed")
-        self.assertEqual(record[0]["PubmedData"]["History"][0][0]["Year"], "2001")
-        self.assertEqual(record[0]["PubmedData"]["History"][0][0]["Month"], "12")
-        self.assertEqual(record[0]["PubmedData"]["History"][0][0]["Day"], "26")
-        self.assertEqual(record[0]["PubmedData"]["History"][0][0]["Hour"], "10")
-        self.assertEqual(record[0]["PubmedData"]["History"][0][0]["Minute"], "0")
-        self.assertEqual(record[0]["PubmedData"]["History"][0][1].attributes["PubStatus"], "medline")
-        self.assertEqual(record[0]["PubmedData"]["History"][0][1]["Year"], "2002")
-        self.assertEqual(record[0]["PubmedData"]["History"][0][1]["Month"], "3")
-        self.assertEqual(record[0]["PubmedData"]["History"][0][1]["Day"], "5")
-        self.assertEqual(record[0]["PubmedData"]["History"][0][1]["Hour"], "10")
-        self.assertEqual(record[0]["PubmedData"]["History"][0][1]["Minute"], "1")
-        self.assertEqual(record[0]["PubmedData"]["PublicationStatus"], "ppublish")
-        self.assertEqual(record[0]["PubmedData"]["ArticleIdList"][0], "11748933")
-        self.assertEqual(record[0]["PubmedData"]["ArticleIdList"][0].attributes["IdType"], "pubmed")
-        self.assertEqual(record[0]["PubmedData"]["ArticleIdList"][1], "10.1006/cryo.2001.2328")
-        self.assertEqual(record[0]["PubmedData"]["ArticleIdList"][1].attributes["IdType"], "doi")
-        self.assertEqual(record[0]["PubmedData"]["ArticleIdList"][2], "S0011-2240(01)92328-4")
-        self.assertEqual(record[0]["PubmedData"]["ArticleIdList"][2].attributes["IdType"], "pii")
-
-        self.assertEqual(record[1]["MedlineCitation"].attributes["Owner"], "NLM")
-        self.assertEqual(record[1]["MedlineCitation"].attributes["Status"], "PubMed-not-MEDLINE")
-        self.assertEqual(record[1]["MedlineCitation"]["PMID"], "11700088")
-        self.assertEqual(record[1]["MedlineCitation"]["DateCreated"]["Year"], "2001")
-        self.assertEqual(record[1]["MedlineCitation"]["DateCreated"]["Month"], "11")
-        self.assertEqual(record[1]["MedlineCitation"]["DateCreated"]["Day"], "08")
-        self.assertEqual(record[1]["MedlineCitation"]["DateCompleted"]["Year"], "2001")
-        self.assertEqual(record[1]["MedlineCitation"]["DateCompleted"]["Month"], "12")
-        self.assertEqual(record[1]["MedlineCitation"]["DateCompleted"]["Day"], "20")
-        self.assertEqual(record[1]["MedlineCitation"]["DateRevised"]["Year"], "2003")
-        self.assertEqual(record[1]["MedlineCitation"]["DateRevised"]["Month"], "10")
-        self.assertEqual(record[1]["MedlineCitation"]["DateRevised"]["Day"], "31")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"].attributes["PubModel"], "Print")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["Journal"]["ISSN"], "1090-7807")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["Journal"]["ISSN"].attributes["IssnType"], "Print")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["Journal"]["JournalIssue"].attributes["CitedMedium"], "Print")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["Journal"]["JournalIssue"]["Volume"], "153")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["Journal"]["JournalIssue"]["Issue"], "1")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["Journal"]["JournalIssue"]["PubDate"]["Year"], "2001")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["Journal"]["JournalIssue"]["PubDate"]["Month"], "Nov")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["Journal"]["Title"], "Journal of magnetic resonance (San Diego, Calif. : 1997)")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["Journal"]["ISOAbbreviation"], "J. Magn. Reson.")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["ArticleTitle"], "Proton MRI of (13)C distribution by J and chemical shift editing.")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["Pagination"]["MedlinePgn"], "117-23")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["Abstract"]["AbstractText"], "The sensitivity of (13)C NMR imaging can be considerably favored by detecting the (1)H nuclei bound to (13)C nuclei via scalar J-interaction (X-filter). However, the J-editing approaches have difficulty in discriminating between compounds with similar J-constant as, for example, different glucose metabolites. In such cases, it is almost impossible to get J-edited images of a single-compound dis [...]
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["Abstract"]["CopyrightInformation"], "Copyright 2001 Academic Press.")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["Affiliation"], "INFM and Department of Physics, University of L'Aquila, I-67100 L'Aquila, Italy.")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["AuthorList"].attributes["CompleteYN"], "Y")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["AuthorList"][0].attributes["ValidYN"], "Y")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["AuthorList"][0]["LastName"], "Casieri")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["AuthorList"][0]["ForeName"], "C")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["AuthorList"][0]["Initials"], "C")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["AuthorList"][1].attributes["ValidYN"], "Y")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["AuthorList"][1]["LastName"], "Testa")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["AuthorList"][1]["ForeName"], "C")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["AuthorList"][1]["Initials"], "C")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["AuthorList"][2].attributes["ValidYN"], "Y")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["AuthorList"][2]["LastName"], "Carpinelli")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["AuthorList"][2]["ForeName"], "G")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["AuthorList"][2]["Initials"], "G")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["AuthorList"][3].attributes["ValidYN"], "Y")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["AuthorList"][3]["LastName"], "Canese")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["AuthorList"][3]["ForeName"], "R")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["AuthorList"][3]["Initials"], "R")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["AuthorList"][4].attributes["ValidYN"], "Y")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["AuthorList"][4]["LastName"], "Podo")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["AuthorList"][4]["ForeName"], "F")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["AuthorList"][4]["Initials"], "F")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["AuthorList"][5].attributes["ValidYN"], "Y")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["AuthorList"][5]["LastName"], "De Luca")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["AuthorList"][5]["ForeName"], "F")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["AuthorList"][5]["Initials"], "F")
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["Language"], ["eng"])
-        self.assertEqual(record[1]["MedlineCitation"]["Article"]["PublicationTypeList"][0], "Journal Article")
-        self.assertEqual(record[1]["MedlineCitation"]["MedlineJournalInfo"]["Country"], "United States")
-        self.assertEqual(record[1]["MedlineCitation"]["MedlineJournalInfo"]["MedlineTA"], "J Magn Reson")
-        self.assertEqual(record[1]["MedlineCitation"]["MedlineJournalInfo"]["NlmUniqueID"], "9707935")
-        self.assertEqual(record[1]["PubmedData"]["History"][0][0].attributes["PubStatus"], "pubmed")
-        self.assertEqual(record[1]["PubmedData"]["History"][0][0]["Year"], "2001")
-        self.assertEqual(record[1]["PubmedData"]["History"][0][0]["Month"], "11")
-        self.assertEqual(record[1]["PubmedData"]["History"][0][0]["Day"], "9")
-        self.assertEqual(record[1]["PubmedData"]["History"][0][0]["Hour"], "10")
-        self.assertEqual(record[1]["PubmedData"]["History"][0][0]["Minute"], "0")
-        self.assertEqual(record[1]["PubmedData"]["History"][0][1].attributes["PubStatus"], "medline")
-        self.assertEqual(record[1]["PubmedData"]["History"][0][1]["Year"], "2001")
-        self.assertEqual(record[1]["PubmedData"]["History"][0][1]["Month"], "11")
-        self.assertEqual(record[1]["PubmedData"]["History"][0][1]["Day"], "9")
-        self.assertEqual(record[1]["PubmedData"]["History"][0][1]["Hour"], "10")
-        self.assertEqual(record[1]["PubmedData"]["History"][0][1]["Minute"], "1")
-        self.assertEqual(record[1]["PubmedData"]["PublicationStatus"], "ppublish")
-        self.assertEqual(record[1]["PubmedData"]["ArticleIdList"][0], "11700088")
-        self.assertEqual(record[1]["PubmedData"]["ArticleIdList"][0].attributes["IdType"], "pubmed")
-        self.assertEqual(record[1]["PubmedData"]["ArticleIdList"][1], "10.1006/jmre.2001.2429")
-        self.assertEqual(record[1]["PubmedData"]["ArticleIdList"][1].attributes["IdType"], "doi")
-        self.assertEqual(record[1]["PubmedData"]["ArticleIdList"][2], "S1090-7807(01)92429-2")
-        self.assertEqual(record[1]["PubmedData"]["ArticleIdList"][2].attributes["IdType"], "pii")
-
-    def test_omim(self):
-        '''Test parsing XML returned by EFetch, OMIM database
-        '''
-        # In OMIM show the full record for MIM number 601100 as XML
-        # To create the XML file, use
-        # >>> Bio.Entrez.efetch(db="omim", id="601100", retmode='xml',
-        #                       rettype='full')
-        with open('Entrez/ncbi_mim.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(len(record), 1)
-        self.assertEqual(record[0]["Mim-entry_mimNumber"], "601100")
-        self.assertEqual(record[0]["Mim-entry_mimType"], "1")
-        self.assertEqual(record[0]["Mim-entry_mimType"].attributes["value"], "star")
-        self.assertEqual(record[0]["Mim-entry_title"], "STRESS 70 PROTEIN CHAPERONE, MICROSOME-ASSOCIATED, 60-KD; STCH")
-        self.assertEqual(record[0]["Mim-entry_copyright"], "Copyright (c) 1966-2008 Johns Hopkins University")
-        self.assertEqual(record[0]["Mim-entry_symbol"], "STCH")
-        self.assertEqual(record[0]["Mim-entry_locus"], "21q11.1")
-        self.assertEqual(len(record[0]["Mim-entry_text"]), 2)
-        self.assertEqual(record[0]["Mim-entry_text"][0]["Mim-text_label"], "TEXT")
-        self.assertEqual(record[0]["Mim-entry_text"][0]["Mim-text_text"], "The stress-70 chaperone family consists of proteins that bind to denatured or incorrectly folded polypeptides and play a major role in the processing of cytosolic and secretory proteins. {2:Otterson et al. (1994)} cloned a human cDNA encoding a predicted 471-amino acid protein (60 kD) which they designated STCH. {1:Brodsky et al. (1995)} stated that the protein sequence is very similar to that of HSP70 ({140550})  [...]
-        self.assertEqual(len(record[0]["Mim-entry_text"][0]["Mim-text_neighbors"]), 1)
-        self.assertEqual(record[0]["Mim-entry_text"][0]["Mim-text_neighbors"]["Mim-link"]["Mim-link_num"], "30")
-        self.assertEqual(record[0]["Mim-entry_text"][0]["Mim-text_neighbors"]["Mim-link"]["Mim-link_uids"], "8131751,9358068,10675567,9488737,8757872,11048651,2559088,10982831,2105497,16572726,9083109,17181539,14508011,15028727,10651811,9108392,11599566,2661019,11836248,7594475,12406544,8536694,12389629,10430932,9177027,9837933,8522346,2928112,12834280,8702658")
-        self.assertEqual(record[0]["Mim-entry_text"][0]["Mim-text_neighbors"]["Mim-link"]["Mim-link_numRelevant"], "0")
-        self.assertEqual(record[0]["Mim-entry_text"][1]["Mim-text_label"], "TEXT")
-        self.assertEqual(record[0]["Mim-entry_text"][1]["Mim-text_text"], "{1:Brodsky et al. (1995)} mapped the STCH gene to chromosome 21q11.1 with a high-resolution somatic cell hybrid panel for chromosome 21 and by fluorescence in situ hybridization with a YAC containing the gene. By interspecific backcross analysis, {3:Reeves et al. (1998)} mapped the mouse Stch gene to chromosome 16.")
-        self.assertEqual(len(record[0]["Mim-entry_text"][1]["Mim-text_neighbors"]), 1)
-        self.assertEqual(record[0]["Mim-entry_text"][1]["Mim-text_neighbors"]["Mim-link"]["Mim-link_num"], "30")
-        self.assertEqual(record[0]["Mim-entry_text"][1]["Mim-text_neighbors"]["Mim-link"]["Mim-link_uids"], "1354597,8244375,8597637,8838809,9143508,1427875,7806216,9852683,7835904,11060461,10083745,7789175,7806232,7513297,8020937,12014109,1769649,2045096,9747039,8034329,8088815,1783375,8275716,8020959,7956352,8020952,10198174,7655454,8750197,11272792")
-        self.assertEqual(record[0]["Mim-entry_text"][1]["Mim-text_neighbors"]["Mim-link"]["Mim-link_numRelevant"], "0")
-        self.assertEqual(record[0]["Mim-entry_hasSummary"], "")
-        self.assertEqual(record[0]["Mim-entry_hasSummary"].attributes["value"], "false")
-        self.assertEqual(record[0]["Mim-entry_hasSynopsis"], "")
-        self.assertEqual(record[0]["Mim-entry_hasSynopsis"].attributes["value"], "false")
-        self.assertEqual(len(record[0]["Mim-entry_editHistory"]), 6)
-        self.assertEqual(record[0]["Mim-entry_editHistory"][0]["Mim-edit-item_author"], "terry")
-        self.assertEqual(record[0]["Mim-entry_editHistory"][0]["Mim-edit-item_modDate"]["Mim-date"]["Mim-date_year"], "1999")
-        self.assertEqual(record[0]["Mim-entry_editHistory"][0]["Mim-edit-item_modDate"]["Mim-date"]["Mim-date_month"], "3")
-        self.assertEqual(record[0]["Mim-entry_editHistory"][0]["Mim-edit-item_modDate"]["Mim-date"]["Mim-date_day"], "9")
-        self.assertEqual(record[0]["Mim-entry_editHistory"][1]["Mim-edit-item_author"], "carol")
-        self.assertEqual(record[0]["Mim-entry_editHistory"][1]["Mim-edit-item_modDate"]["Mim-date"]["Mim-date_year"], "1999")
-        self.assertEqual(record[0]["Mim-entry_editHistory"][1]["Mim-edit-item_modDate"]["Mim-date"]["Mim-date_month"], "3")
-        self.assertEqual(record[0]["Mim-entry_editHistory"][1]["Mim-edit-item_modDate"]["Mim-date"]["Mim-date_day"], "7")
-        self.assertEqual(record[0]["Mim-entry_editHistory"][2]["Mim-edit-item_author"], "carol")
-        self.assertEqual(record[0]["Mim-entry_editHistory"][2]["Mim-edit-item_modDate"]["Mim-date"]["Mim-date_year"], "1998")
-        self.assertEqual(record[0]["Mim-entry_editHistory"][2]["Mim-edit-item_modDate"]["Mim-date"]["Mim-date_month"], "7")
-        self.assertEqual(record[0]["Mim-entry_editHistory"][2]["Mim-edit-item_modDate"]["Mim-date"]["Mim-date_day"], "8")
-        self.assertEqual(record[0]["Mim-entry_editHistory"][3]["Mim-edit-item_author"], "terry")
-        self.assertEqual(record[0]["Mim-entry_editHistory"][3]["Mim-edit-item_modDate"]["Mim-date"]["Mim-date_year"], "1996")
-        self.assertEqual(record[0]["Mim-entry_editHistory"][3]["Mim-edit-item_modDate"]["Mim-date"]["Mim-date_month"], "5")
-        self.assertEqual(record[0]["Mim-entry_editHistory"][3]["Mim-edit-item_modDate"]["Mim-date"]["Mim-date_day"], "24")
-        self.assertEqual(record[0]["Mim-entry_editHistory"][4]["Mim-edit-item_author"], "mark")
-        self.assertEqual(record[0]["Mim-entry_editHistory"][4]["Mim-edit-item_modDate"]["Mim-date"]["Mim-date_year"], "1996")
-        self.assertEqual(record[0]["Mim-entry_editHistory"][4]["Mim-edit-item_modDate"]["Mim-date"]["Mim-date_month"], "3")
-        self.assertEqual(record[0]["Mim-entry_editHistory"][4]["Mim-edit-item_modDate"]["Mim-date"]["Mim-date_day"], "1")
-        self.assertEqual(record[0]["Mim-entry_editHistory"][5]["Mim-edit-item_author"], "mark")
-        self.assertEqual(record[0]["Mim-entry_editHistory"][5]["Mim-edit-item_modDate"]["Mim-date"]["Mim-date_year"], "1996")
-        self.assertEqual(record[0]["Mim-entry_editHistory"][5]["Mim-edit-item_modDate"]["Mim-date"]["Mim-date_month"], "3")
-        self.assertEqual(record[0]["Mim-entry_editHistory"][5]["Mim-edit-item_modDate"]["Mim-date"]["Mim-date_day"], "1")
-        self.assertEqual(record[0]["Mim-entry_creationDate"]["Mim-edit-item"]["Mim-edit-item_author"], "Alan F. Scott")
-        self.assertEqual(record[0]["Mim-entry_creationDate"]["Mim-edit-item"]["Mim-edit-item_modDate"]["Mim-date"]["Mim-date_year"], "1996")
-        self.assertEqual(record[0]["Mim-entry_creationDate"]["Mim-edit-item"]["Mim-edit-item_modDate"]["Mim-date"]["Mim-date_month"], "3")
-        self.assertEqual(record[0]["Mim-entry_creationDate"]["Mim-edit-item"]["Mim-edit-item_modDate"]["Mim-date"]["Mim-date_day"], "1")
-        self.assertEqual(len(record[0]["Mim-entry_references"]), 3)
-        self.assertEqual(record[0]["Mim-entry_references"][0]["Mim-reference_number"], "1")
-        self.assertEqual(record[0]["Mim-entry_references"][0]["Mim-reference_origNumber"], "1")
-        self.assertEqual(record[0]["Mim-entry_references"][0]["Mim-reference_type"], "")
-        self.assertEqual(record[0]["Mim-entry_references"][0]["Mim-reference_type"].attributes["value"], "citation")
-        self.assertEqual(len(record[0]["Mim-entry_references"][0]["Mim-reference_authors"]), 6)
-        self.assertEqual(record[0]["Mim-entry_references"][0]["Mim-reference_authors"][0]["Mim-author_name"], "Brodsky, G.")
-        self.assertEqual(record[0]["Mim-entry_references"][0]["Mim-reference_authors"][0]["Mim-author_index"], "1")
-        self.assertEqual(record[0]["Mim-entry_references"][0]["Mim-reference_authors"][1]["Mim-author_name"], "Otterson, G. A.")
-        self.assertEqual(record[0]["Mim-entry_references"][0]["Mim-reference_authors"][1]["Mim-author_index"], "1")
-        self.assertEqual(record[0]["Mim-entry_references"][0]["Mim-reference_authors"][2]["Mim-author_name"], "Parry, B. B.")
-        self.assertEqual(record[0]["Mim-entry_references"][0]["Mim-reference_authors"][2]["Mim-author_index"], "1")
-        self.assertEqual(record[0]["Mim-entry_references"][0]["Mim-reference_authors"][3]["Mim-author_name"], "Hart, I.")
-        self.assertEqual(record[0]["Mim-entry_references"][0]["Mim-reference_authors"][3]["Mim-author_index"], "1")
-        self.assertEqual(record[0]["Mim-entry_references"][0]["Mim-reference_authors"][4]["Mim-author_name"], "Patterson, D.")
-        self.assertEqual(record[0]["Mim-entry_references"][0]["Mim-reference_authors"][4]["Mim-author_index"], "1")
-        self.assertEqual(record[0]["Mim-entry_references"][0]["Mim-reference_authors"][5]["Mim-author_name"], "Kaye, F. J.")
-        self.assertEqual(record[0]["Mim-entry_references"][0]["Mim-reference_authors"][5]["Mim-author_index"], "1")
-        self.assertEqual(record[0]["Mim-entry_references"][0]["Mim-reference_primaryAuthor"], "Brodsky")
-        self.assertEqual(record[0]["Mim-entry_references"][0]["Mim-reference_otherAuthors"], "et al.")
-        self.assertEqual(record[0]["Mim-entry_references"][0]["Mim-reference_citationTitle"], "Localization of STCH to human chromosome 21q11.1.")
-        self.assertEqual(record[0]["Mim-entry_references"][0]["Mim-reference_citationType"], "0")
-        self.assertEqual(record[0]["Mim-entry_references"][0]["Mim-reference_volume"], "30")
-        self.assertEqual(record[0]["Mim-entry_references"][0]["Mim-reference_journal"], "Genomics")
-        self.assertEqual(record[0]["Mim-entry_references"][0]["Mim-reference_pubDate"]["Mim-date"]["Mim-date_year"], "1995")
-        self.assertEqual(record[0]["Mim-entry_references"][0]["Mim-reference_pubDate"]["Mim-date"]["Mim-date_month"], "0")
-        self.assertEqual(record[0]["Mim-entry_references"][0]["Mim-reference_pubDate"]["Mim-date"]["Mim-date_day"], "0")
-        self.assertEqual(record[0]["Mim-entry_references"][0]["Mim-reference_pages"][0]["Mim-page_from"], "627")
-        self.assertEqual(record[0]["Mim-entry_references"][0]["Mim-reference_pages"][0]["Mim-page_to"], "628")
-        self.assertEqual(record[0]["Mim-entry_references"][0]["Mim-reference_pubmedUID"], "8825657")
-        self.assertEqual(record[0]["Mim-entry_references"][0]["Mim-reference_ambiguous"], "")
-        self.assertEqual(record[0]["Mim-entry_references"][0]["Mim-reference_ambiguous"].attributes["value"], "false")
-        self.assertEqual(record[0]["Mim-entry_references"][0]["Mim-reference_noLink"], "")
-        self.assertEqual(record[0]["Mim-entry_references"][0]["Mim-reference_noLink"].attributes["value"], "false")
-        self.assertEqual(record[0]["Mim-entry_references"][1]["Mim-reference_number"], "2")
-        self.assertEqual(record[0]["Mim-entry_references"][1]["Mim-reference_origNumber"], "2")
-        self.assertEqual(record[0]["Mim-entry_references"][1]["Mim-reference_type"], "")
-        self.assertEqual(record[0]["Mim-entry_references"][1]["Mim-reference_type"].attributes["value"], "citation")
-        self.assertEqual(len(record[0]["Mim-entry_references"][1]["Mim-reference_authors"]), 6)
-        self.assertEqual(record[0]["Mim-entry_references"][1]["Mim-reference_authors"][0]["Mim-author_name"], "Otterson, G. A.")
-        self.assertEqual(record[0]["Mim-entry_references"][1]["Mim-reference_authors"][0]["Mim-author_index"], "1")
-        self.assertEqual(record[0]["Mim-entry_references"][1]["Mim-reference_authors"][1]["Mim-author_name"], "Flynn, G. C.")
-        self.assertEqual(record[0]["Mim-entry_references"][1]["Mim-reference_authors"][1]["Mim-author_index"], "1")
-        self.assertEqual(record[0]["Mim-entry_references"][1]["Mim-reference_authors"][2]["Mim-author_name"], "Kratzke, R. A.")
-        self.assertEqual(record[0]["Mim-entry_references"][1]["Mim-reference_authors"][2]["Mim-author_index"], "1")
-        self.assertEqual(record[0]["Mim-entry_references"][1]["Mim-reference_authors"][3]["Mim-author_name"], "Coxon, A.")
-        self.assertEqual(record[0]["Mim-entry_references"][1]["Mim-reference_authors"][3]["Mim-author_index"], "1")
-        self.assertEqual(record[0]["Mim-entry_references"][1]["Mim-reference_authors"][4]["Mim-author_name"], "Johnston, P. G.")
-        self.assertEqual(record[0]["Mim-entry_references"][1]["Mim-reference_authors"][4]["Mim-author_index"], "1")
-        self.assertEqual(record[0]["Mim-entry_references"][1]["Mim-reference_authors"][5]["Mim-author_name"], "Kaye, F. J.")
-        self.assertEqual(record[0]["Mim-entry_references"][1]["Mim-reference_authors"][5]["Mim-author_index"], "1")
-        self.assertEqual(record[0]["Mim-entry_references"][1]["Mim-reference_primaryAuthor"], "Otterson")
-        self.assertEqual(record[0]["Mim-entry_references"][1]["Mim-reference_otherAuthors"], "et al.")
-        self.assertEqual(record[0]["Mim-entry_references"][1]["Mim-reference_citationTitle"], "Stch encodes the 'ATPase core' of a microsomal stress70 protein.")
-        self.assertEqual(record[0]["Mim-entry_references"][1]["Mim-reference_citationType"], "0")
-        self.assertEqual(record[0]["Mim-entry_references"][1]["Mim-reference_volume"], "13")
-        self.assertEqual(record[0]["Mim-entry_references"][1]["Mim-reference_journal"], "EMBO J.")
-        self.assertEqual(record[0]["Mim-entry_references"][1]["Mim-reference_pubDate"]["Mim-date"]["Mim-date_year"], "1994")
-        self.assertEqual(record[0]["Mim-entry_references"][1]["Mim-reference_pubDate"]["Mim-date"]["Mim-date_month"], "0")
-        self.assertEqual(record[0]["Mim-entry_references"][1]["Mim-reference_pubDate"]["Mim-date"]["Mim-date_day"], "0")
-        self.assertEqual(record[0]["Mim-entry_references"][1]["Mim-reference_pages"][0]["Mim-page_from"], "1216")
-        self.assertEqual(record[0]["Mim-entry_references"][1]["Mim-reference_pages"][0]["Mim-page_to"], "1225")
-        self.assertEqual(record[0]["Mim-entry_references"][1]["Mim-reference_pubmedUID"], "8131751")
-        self.assertEqual(record[0]["Mim-entry_references"][1]["Mim-reference_ambiguous"], "")
-        self.assertEqual(record[0]["Mim-entry_references"][1]["Mim-reference_ambiguous"].attributes["value"], "false")
-        self.assertEqual(record[0]["Mim-entry_references"][1]["Mim-reference_noLink"], "")
-        self.assertEqual(record[0]["Mim-entry_references"][1]["Mim-reference_noLink"].attributes["value"], "false")
-        self.assertEqual(record[0]["Mim-entry_references"][2]["Mim-reference_number"], "3")
-        self.assertEqual(record[0]["Mim-entry_references"][2]["Mim-reference_origNumber"], "3")
-        self.assertEqual(record[0]["Mim-entry_references"][2]["Mim-reference_type"], "")
-        self.assertEqual(record[0]["Mim-entry_references"][2]["Mim-reference_type"].attributes["value"], "citation")
-        self.assertEqual(len(record[0]["Mim-entry_references"][2]["Mim-reference_authors"]), 4)
-        self.assertEqual(record[0]["Mim-entry_references"][2]["Mim-reference_authors"][0]["Mim-author_name"], "Reeves, R. H.")
-        self.assertEqual(record[0]["Mim-entry_references"][2]["Mim-reference_authors"][0]["Mim-author_index"], "1")
-        self.assertEqual(record[0]["Mim-entry_references"][2]["Mim-reference_authors"][1]["Mim-author_name"], "Rue, E.")
-        self.assertEqual(record[0]["Mim-entry_references"][2]["Mim-reference_authors"][1]["Mim-author_index"], "1")
-        self.assertEqual(record[0]["Mim-entry_references"][2]["Mim-reference_authors"][2]["Mim-author_name"], "Yu, J.")
-        self.assertEqual(record[0]["Mim-entry_references"][2]["Mim-reference_authors"][2]["Mim-author_index"], "1")
-        self.assertEqual(record[0]["Mim-entry_references"][2]["Mim-reference_authors"][3]["Mim-author_name"], "Kao, F.-T.")
-        self.assertEqual(record[0]["Mim-entry_references"][2]["Mim-reference_authors"][3]["Mim-author_index"], "1")
-        self.assertEqual(record[0]["Mim-entry_references"][2]["Mim-reference_primaryAuthor"], "Reeves")
-        self.assertEqual(record[0]["Mim-entry_references"][2]["Mim-reference_otherAuthors"], "et al.")
-        self.assertEqual(record[0]["Mim-entry_references"][2]["Mim-reference_citationTitle"], "Stch maps to mouse chromosome 16, extending the conserved synteny with human chromosome 21.")
-        self.assertEqual(record[0]["Mim-entry_references"][2]["Mim-reference_citationType"], "0")
-        self.assertEqual(record[0]["Mim-entry_references"][2]["Mim-reference_volume"], "49")
-        self.assertEqual(record[0]["Mim-entry_references"][2]["Mim-reference_journal"], "Genomics")
-        self.assertEqual(record[0]["Mim-entry_references"][2]["Mim-reference_pubDate"]["Mim-date"]["Mim-date_year"], "1998")
-        self.assertEqual(record[0]["Mim-entry_references"][2]["Mim-reference_pubDate"]["Mim-date"]["Mim-date_month"], "0")
-        self.assertEqual(record[0]["Mim-entry_references"][2]["Mim-reference_pubDate"]["Mim-date"]["Mim-date_day"], "0")
-        self.assertEqual(record[0]["Mim-entry_references"][2]["Mim-reference_pages"][0]["Mim-page_from"], "156")
-        self.assertEqual(record[0]["Mim-entry_references"][2]["Mim-reference_pages"][0]["Mim-page_to"], "157")
-        self.assertEqual(record[0]["Mim-entry_references"][2]["Mim-reference_pubmedUID"], "9570963")
-        self.assertEqual(record[0]["Mim-entry_references"][2]["Mim-reference_ambiguous"], "")
-        self.assertEqual(record[0]["Mim-entry_references"][2]["Mim-reference_ambiguous"].attributes["value"], "false")
-        self.assertEqual(record[0]["Mim-entry_references"][2]["Mim-reference_noLink"], "")
-        self.assertEqual(record[0]["Mim-entry_references"][2]["Mim-reference_noLink"].attributes["value"], "false")
-        self.assertEqual(record[0]["Mim-entry_attribution"][0]["Mim-edit-item_author"], "Carol A. Bocchini - updated")
-        self.assertEqual(record[0]["Mim-entry_attribution"][0]["Mim-edit-item_modDate"]["Mim-date"]["Mim-date_year"], "1999")
-        self.assertEqual(record[0]["Mim-entry_attribution"][0]["Mim-edit-item_modDate"]["Mim-date"]["Mim-date_month"], "3")
-        self.assertEqual(record[0]["Mim-entry_attribution"][0]["Mim-edit-item_modDate"]["Mim-date"]["Mim-date_day"], "7")
-        self.assertEqual(record[0]["Mim-entry_numGeneMaps"], "1")
-        self.assertEqual(len(record[0]["Mim-entry_medlineLinks"]), 1)
-        self.assertEqual(record[0]["Mim-entry_medlineLinks"]["Mim-link"]["Mim-link_num"], "3")
-        self.assertEqual(record[0]["Mim-entry_medlineLinks"]["Mim-link"]["Mim-link_uids"], "8825657,8131751,9570963")
-        self.assertEqual(record[0]["Mim-entry_medlineLinks"]["Mim-link"]["Mim-link_numRelevant"], "0")
-        self.assertEqual(len(record[0]["Mim-entry_proteinLinks"]), 1)
-        self.assertEqual(record[0]["Mim-entry_proteinLinks"]["Mim-link"]["Mim-link_num"], "7")
-        self.assertEqual(record[0]["Mim-entry_proteinLinks"]["Mim-link"]["Mim-link_uids"], "148747550,67461586,48928056,30089677,2352621,1351125,460148")
-        self.assertEqual(record[0]["Mim-entry_proteinLinks"]["Mim-link"]["Mim-link_numRelevant"], "0")
-        self.assertEqual(len(record[0]["Mim-entry_nucleotideLinks"]), 1)
-        self.assertEqual(record[0]["Mim-entry_nucleotideLinks"]["Mim-link"]["Mim-link_num"], "5")
-        self.assertEqual(record[0]["Mim-entry_nucleotideLinks"]["Mim-link"]["Mim-link_uids"], "148747549,55741785,48928055,2352620,460147")
-        self.assertEqual(record[0]["Mim-entry_nucleotideLinks"]["Mim-link"]["Mim-link_numRelevant"], "0")
-
-    def test_taxonomy(self):
-        '''Test parsing XML returned by EFetch, Taxonomy database
-        '''
-        # Access the Taxonomy database using efetch.
-        # To create the XML file, use
-        # >>> Bio.Entrez.efetch(db="taxonomy", id="9685", retmode="xml")
-        with open('Entrez/taxonomy.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(len(record), 1)
-        self.assertEqual(record[0]["TaxId"], "9685")
-        self.assertEqual(record[0]["ScientificName"], "Felis catus")
-        self.assertEqual(record[0]["OtherNames"]["GenbankCommonName"], "domestic cat")
-        self.assertEqual(record[0]["OtherNames"]["Synonym"][0], "Felis silvestris catus")
-        self.assertEqual(record[0]["OtherNames"]["Synonym"][1], "Felis domesticus")
-        self.assertEqual(record[0]["OtherNames"]["CommonName"][0], "cat")
-        self.assertEqual(record[0]["OtherNames"]["CommonName"][1], "cats")
-        self.assertEqual(record[0]["OtherNames"]["Includes"][0], "Korat cats")
-        self.assertEqual(record[0]["ParentTaxId"], "9682")
-        self.assertEqual(record[0]["Rank"], "species")
-        self.assertEqual(record[0]["Division"], "Mammals")
-        self.assertEqual(record[0]["GeneticCode"]["GCId"], "1")
-        self.assertEqual(record[0]["GeneticCode"]["GCName"], "Standard")
-        self.assertEqual(record[0]["MitoGeneticCode"]["MGCId"], "2")
-        self.assertEqual(record[0]["MitoGeneticCode"]["MGCName"], "Vertebrate Mitochondrial")
-        self.assertEqual(record[0]["Lineage"], "cellular organisms; Eukaryota; Fungi/Metazoa group; Metazoa; Eumetazoa; Bilateria; Coelomata; Deuterostomia; Chordata; Craniata; Vertebrata; Gnathostomata; Teleostomi; Euteleostomi; Sarcopterygii; Tetrapoda; Amniota; Mammalia; Theria; Eutheria; Laurasiatheria; Carnivora; Feliformia; Felidae; Felinae; Felis")
-
-        self.assertEqual(record[0]["LineageEx"][0]["TaxId"], "131567")
-        self.assertEqual(record[0]["LineageEx"][0]["ScientificName"], "cellular organisms")
-        self.assertEqual(record[0]["LineageEx"][0]["Rank"], "no rank")
-        self.assertEqual(record[0]["LineageEx"][1]["TaxId"], "2759")
-        self.assertEqual(record[0]["LineageEx"][1]["ScientificName"], "Eukaryota")
-        self.assertEqual(record[0]["LineageEx"][1]["Rank"], "superkingdom")
-        self.assertEqual(record[0]["LineageEx"][2]["TaxId"], "33154")
-        self.assertEqual(record[0]["LineageEx"][2]["ScientificName"], "Fungi/Metazoa group")
-        self.assertEqual(record[0]["LineageEx"][2]["Rank"], "no rank")
-        self.assertEqual(record[0]["LineageEx"][3]["TaxId"], "33208")
-        self.assertEqual(record[0]["LineageEx"][3]["ScientificName"], "Metazoa")
-        self.assertEqual(record[0]["LineageEx"][3]["Rank"], "kingdom")
-        self.assertEqual(record[0]["LineageEx"][4]["TaxId"], "6072")
-        self.assertEqual(record[0]["LineageEx"][4]["ScientificName"], "Eumetazoa")
-        self.assertEqual(record[0]["LineageEx"][4]["Rank"], "no rank")
-        self.assertEqual(record[0]["LineageEx"][5]["TaxId"], "33213")
-        self.assertEqual(record[0]["LineageEx"][5]["ScientificName"], "Bilateria")
-        self.assertEqual(record[0]["LineageEx"][5]["Rank"], "no rank")
-        self.assertEqual(record[0]["LineageEx"][6]["TaxId"], "33316")
-        self.assertEqual(record[0]["LineageEx"][6]["ScientificName"], "Coelomata")
-        self.assertEqual(record[0]["LineageEx"][6]["Rank"], "no rank")
-        self.assertEqual(record[0]["LineageEx"][7]["TaxId"], "33511")
-        self.assertEqual(record[0]["LineageEx"][7]["ScientificName"], "Deuterostomia")
-        self.assertEqual(record[0]["LineageEx"][7]["Rank"], "no rank")
-        self.assertEqual(record[0]["LineageEx"][8]["TaxId"], "7711")
-        self.assertEqual(record[0]["LineageEx"][8]["ScientificName"], "Chordata")
-        self.assertEqual(record[0]["LineageEx"][8]["Rank"], "phylum")
-        self.assertEqual(record[0]["LineageEx"][9]["TaxId"], "89593")
-        self.assertEqual(record[0]["LineageEx"][9]["ScientificName"], "Craniata")
-        self.assertEqual(record[0]["LineageEx"][9]["Rank"], "subphylum")
-        self.assertEqual(record[0]["LineageEx"][10]["TaxId"], "7742")
-        self.assertEqual(record[0]["LineageEx"][10]["ScientificName"], "Vertebrata")
-        self.assertEqual(record[0]["LineageEx"][10]["Rank"], "no rank")
-        self.assertEqual(record[0]["LineageEx"][11]["TaxId"], "7776")
-        self.assertEqual(record[0]["LineageEx"][11]["ScientificName"], "Gnathostomata")
-        self.assertEqual(record[0]["LineageEx"][11]["Rank"], "superclass")
-        self.assertEqual(record[0]["LineageEx"][12]["TaxId"], "117570")
-        self.assertEqual(record[0]["LineageEx"][12]["ScientificName"], "Teleostomi")
-        self.assertEqual(record[0]["LineageEx"][12]["Rank"], "no rank")
-        self.assertEqual(record[0]["LineageEx"][13]["TaxId"], "117571")
-        self.assertEqual(record[0]["LineageEx"][13]["ScientificName"], "Euteleostomi")
-        self.assertEqual(record[0]["LineageEx"][13]["Rank"], "no rank")
-        self.assertEqual(record[0]["LineageEx"][14]["TaxId"], "8287")
-        self.assertEqual(record[0]["LineageEx"][14]["ScientificName"], "Sarcopterygii")
-        self.assertEqual(record[0]["LineageEx"][14]["Rank"], "no rank")
-        self.assertEqual(record[0]["LineageEx"][15]["TaxId"], "32523")
-        self.assertEqual(record[0]["LineageEx"][15]["ScientificName"], "Tetrapoda")
-        self.assertEqual(record[0]["LineageEx"][15]["Rank"], "no rank")
-        self.assertEqual(record[0]["LineageEx"][16]["TaxId"], "32524")
-        self.assertEqual(record[0]["LineageEx"][16]["ScientificName"], "Amniota")
-        self.assertEqual(record[0]["LineageEx"][16]["Rank"], "no rank")
-        self.assertEqual(record[0]["LineageEx"][17]["TaxId"], "40674")
-        self.assertEqual(record[0]["LineageEx"][17]["ScientificName"], "Mammalia")
-        self.assertEqual(record[0]["LineageEx"][17]["Rank"], "class")
-        self.assertEqual(record[0]["LineageEx"][18]["TaxId"], "32525")
-        self.assertEqual(record[0]["LineageEx"][18]["ScientificName"], "Theria")
-        self.assertEqual(record[0]["LineageEx"][18]["Rank"], "no rank")
-        self.assertEqual(record[0]["LineageEx"][19]["TaxId"], "9347")
-        self.assertEqual(record[0]["LineageEx"][19]["ScientificName"], "Eutheria")
-        self.assertEqual(record[0]["LineageEx"][19]["Rank"], "no rank")
-        self.assertEqual(record[0]["LineageEx"][20]["TaxId"], "314145")
-        self.assertEqual(record[0]["LineageEx"][20]["ScientificName"], "Laurasiatheria")
-        self.assertEqual(record[0]["LineageEx"][20]["Rank"], "superorder")
-        self.assertEqual(record[0]["LineageEx"][21]["TaxId"], "33554")
-        self.assertEqual(record[0]["LineageEx"][21]["ScientificName"], "Carnivora")
-        self.assertEqual(record[0]["LineageEx"][21]["Rank"], "order")
-        self.assertEqual(record[0]["LineageEx"][22]["TaxId"], "379583")
-        self.assertEqual(record[0]["LineageEx"][22]["ScientificName"], "Feliformia")
-        self.assertEqual(record[0]["LineageEx"][22]["Rank"], "suborder")
-        self.assertEqual(record[0]["LineageEx"][23]["TaxId"], "9681")
-        self.assertEqual(record[0]["LineageEx"][23]["ScientificName"], "Felidae")
-        self.assertEqual(record[0]["LineageEx"][23]["Rank"], "family")
-        self.assertEqual(record[0]["LineageEx"][24]["TaxId"], "338152")
-        self.assertEqual(record[0]["LineageEx"][24]["ScientificName"], "Felinae")
-        self.assertEqual(record[0]["LineageEx"][24]["Rank"], "subfamily")
-        self.assertEqual(record[0]["LineageEx"][25]["TaxId"], "9682")
-        self.assertEqual(record[0]["LineageEx"][25]["ScientificName"], "Felis")
-        self.assertEqual(record[0]["LineageEx"][25]["Rank"], "genus")
-        self.assertEqual(record[0]["CreateDate"], "1995/02/27")
-        self.assertEqual(record[0]["UpdateDate"], "2007/09/04")
-        self.assertEqual(record[0]["PubDate"], "1993/07/26")
-
-    def test_nucleotide1(self):
-        '''Test parsing XML returned by EFetch, Nucleotide database (first test)
-        '''
-        # Access the nucleotide database using efetch.
-        # To create the XML file, use
-        # >>> Bio.Entrez.efetch(db='nucleotide', id=5, retmode='xml')
-        with open('Entrez/nucleotide1.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(record[0]["GBSeq_locus"], "X60065")
-        self.assertEqual(record[0]["GBSeq_length"], "1136")
-        self.assertEqual(record[0]["GBSeq_strandedness"], "single")
-        self.assertEqual(record[0]["GBSeq_moltype"], "mRNA")
-        self.assertEqual(record[0]["GBSeq_topology"], "linear")
-        self.assertEqual(record[0]["GBSeq_division"], "MAM")
-        self.assertEqual(record[0]["GBSeq_update-date"], "14-NOV-2006")
-        self.assertEqual(record[0]["GBSeq_create-date"], "05-MAY-1992")
-        self.assertEqual(record[0]["GBSeq_definition"], "B.bovis beta-2-gpI mRNA for beta-2-glycoprotein I")
-        self.assertEqual(record[0]["GBSeq_primary-accession"], "X60065")
-        self.assertEqual(record[0]["GBSeq_accession-version"], "X60065.1")
-        self.assertEqual(record[0]["GBSeq_other-seqids"][0], "emb|X60065.1|")
-        self.assertEqual(record[0]["GBSeq_other-seqids"][1], "gi|5")
-        self.assertEqual(record[0]["GBSeq_keywords"][0], "beta-2 glycoprotein I")
-        self.assertEqual(record[0]["GBSeq_source"], "Bos taurus (cattle)")
-        self.assertEqual(record[0]["GBSeq_organism"], "Bos taurus")
-        self.assertEqual(record[0]["GBSeq_taxonomy"], "Eukaryota; Metazoa; Chordata; Craniata; Vertebrata; Euteleostomi; Mammalia; Eutheria; Laurasiatheria; Cetartiodactyla; Ruminantia; Pecora; Bovidae; Bovinae; Bos")
-        self.assertEqual(record[0]["GBSeq_references"][0]["GBReference_reference"], "1")
-        self.assertEqual(record[0]["GBSeq_references"][0]["GBReference_authors"][0], "Bendixen,E.")
-        self.assertEqual(record[0]["GBSeq_references"][0]["GBReference_authors"][1], "Halkier,T.")
-        self.assertEqual(record[0]["GBSeq_references"][0]["GBReference_authors"][2], "Magnusson,S.")
-        self.assertEqual(record[0]["GBSeq_references"][0]["GBReference_authors"][3], "Sottrup-Jensen,L.")
-        self.assertEqual(record[0]["GBSeq_references"][0]["GBReference_authors"][4], "Kristensen,T.")
-        self.assertEqual(record[0]["GBSeq_references"][0]["GBReference_title"], "Complete primary structure of bovine beta 2-glycoprotein I: localization of the disulfide bridges")
-        self.assertEqual(record[0]["GBSeq_references"][0]["GBReference_journal"], "Biochemistry 31 (14), 3611-3617 (1992)")
-        self.assertEqual(record[0]["GBSeq_references"][0]["GBReference_pubmed"], "1567819")
-        self.assertEqual(record[0]["GBSeq_references"][1]["GBReference_reference"], "2")
-        self.assertEqual(record[0]["GBSeq_references"][1]["GBReference_position"], "1..1136")
-        self.assertEqual(record[0]["GBSeq_references"][1]["GBReference_authors"][0], "Kristensen,T.")
-        self.assertEqual(record[0]["GBSeq_references"][1]["GBReference_title"], "Direct Submission")
-        self.assertEqual(record[0]["GBSeq_references"][1]["GBReference_journal"], "Submitted (11-JUN-1991) T. Kristensen, Dept of Mol Biology, University of Aarhus, C F Mollers Alle 130, DK-8000 Aarhus C, DENMARK")
-        self.assertEqual(len(record[0]["GBSeq_feature-table"]), 7)
-        self.assertEqual(record[0]["GBSeq_feature-table"][0]["GBFeature_key"], "source")
-        self.assertEqual(record[0]["GBSeq_feature-table"][0]["GBFeature_location"], "1..1136")
-        self.assertEqual(record[0]["GBSeq_feature-table"][0]["GBFeature_intervals"][0]["GBInterval_from"], "1")
-        self.assertEqual(record[0]["GBSeq_feature-table"][0]["GBFeature_intervals"][0]["GBInterval_to"], "1136")
-        self.assertEqual(record[0]["GBSeq_feature-table"][0]["GBFeature_intervals"][0]["GBInterval_accession"], "X60065.1")
-        self.assertEqual(record[0]["GBSeq_feature-table"][0]["GBFeature_quals"][0]["GBQualifier_name"], "organism")
-        self.assertEqual(record[0]["GBSeq_feature-table"][0]["GBFeature_quals"][0]["GBQualifier_value"], "Bos taurus")
-        self.assertEqual(record[0]["GBSeq_feature-table"][0]["GBFeature_quals"][1]["GBQualifier_name"], "mol_type")
-        self.assertEqual(record[0]["GBSeq_feature-table"][0]["GBFeature_quals"][1]["GBQualifier_value"], "mRNA")
-        self.assertEqual(record[0]["GBSeq_feature-table"][0]["GBFeature_quals"][2]["GBQualifier_name"], "db_xref")
-        self.assertEqual(record[0]["GBSeq_feature-table"][0]["GBFeature_quals"][2]["GBQualifier_value"], "taxon:9913")
-        self.assertEqual(record[0]["GBSeq_feature-table"][0]["GBFeature_quals"][3]["GBQualifier_name"], "clone")
-        self.assertEqual(record[0]["GBSeq_feature-table"][0]["GBFeature_quals"][3]["GBQualifier_value"], "pBB2I")
-        self.assertEqual(record[0]["GBSeq_feature-table"][0]["GBFeature_quals"][4]["GBQualifier_name"], "tissue_type")
-        self.assertEqual(record[0]["GBSeq_feature-table"][0]["GBFeature_quals"][4]["GBQualifier_value"], "liver")
-        self.assertEqual(record[0]["GBSeq_feature-table"][1]["GBFeature_key"], "gene")
-        self.assertEqual(record[0]["GBSeq_feature-table"][1]["GBFeature_location"], "<1..1136")
-        self.assertEqual(record[0]["GBSeq_feature-table"][1]["GBFeature_intervals"][0]["GBInterval_from"], "1")
-        self.assertEqual(record[0]["GBSeq_feature-table"][1]["GBFeature_intervals"][0]["GBInterval_to"], "1136")
-        self.assertEqual(record[0]["GBSeq_feature-table"][1]["GBFeature_intervals"][0]["GBInterval_accession"], "X60065.1")
-        self.assertEqual(record[0]["GBSeq_feature-table"][1]["GBFeature_partial5"], "")
-        self.assertEqual(record[0]["GBSeq_feature-table"][1]["GBFeature_partial5"].attributes["value"], "true")
-        self.assertEqual(record[0]["GBSeq_feature-table"][1]["GBFeature_quals"][0]["GBQualifier_name"], "gene")
-        self.assertEqual(record[0]["GBSeq_feature-table"][1]["GBFeature_quals"][0]["GBQualifier_value"], "beta-2-gpI")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_key"], "CDS")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_location"], "<1..1029")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_intervals"][0]["GBInterval_from"], "1")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_intervals"][0]["GBInterval_to"], "1029")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_intervals"][0]["GBInterval_accession"], "X60065.1")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_partial5"], "")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_partial5"].attributes["value"], "true")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_quals"][0]["GBQualifier_name"], "gene")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_quals"][0]["GBQualifier_value"], "beta-2-gpI")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_quals"][1]["GBQualifier_name"], "codon_start")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_quals"][1]["GBQualifier_value"], "1")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_quals"][2]["GBQualifier_name"], "transl_table")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_quals"][2]["GBQualifier_value"], "1")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_quals"][3]["GBQualifier_name"], "product")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_quals"][3]["GBQualifier_value"], "beta-2-glycoprotein I")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_quals"][4]["GBQualifier_name"], "protein_id")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_quals"][4]["GBQualifier_value"], "CAA42669.1")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_quals"][5]["GBQualifier_name"], "db_xref")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_quals"][5]["GBQualifier_value"], "GI:6")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_quals"][6]["GBQualifier_name"], "db_xref")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_quals"][6]["GBQualifier_value"], "GOA:P17690")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_quals"][7]["GBQualifier_name"], "db_xref")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_quals"][7]["GBQualifier_value"], "UniProtKB/Swiss-Prot:P17690")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_quals"][8]["GBQualifier_name"], "translation")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_quals"][8]["GBQualifier_value"], "PALVLLLGFLCHVAIAGRTCPKPDELPFSTVVPLKRTYEPGEQIVFSCQPGYVSRGGIRRFTCPLTGLWPINTLKCMPRVCPFAGILENGTVRYTTFEYPNTISFSCHTGFYLKGASSAKCTEEGKWSPDLPVCAPITCPPPPIPKFASLSVYKPLAGNNSFYGSKAVFKCLPHHAMFGNDTVTCTEHGNWTQLPECREVRCPFPSRPDNGFVNHPANPVLYYKDTATFGCHETYSLDGPEEVECSKFGNWSAQPSCKASCKLSIKRATVIYEGERVAIQNKFKNGMLHGQKVSFFCKHKEKKCSYTEDAQCIDGTIEIPKCFKEHSSLAFWKTDASDVKPC")
-        self.assertEqual(record[0]["GBSeq_feature-table"][3]["GBFeature_key"], "sig_peptide")
-        self.assertEqual(record[0]["GBSeq_feature-table"][3]["GBFeature_location"], "<1..48")
-        self.assertEqual(record[0]["GBSeq_feature-table"][3]["GBFeature_intervals"][0]["GBInterval_from"], "1")
-        self.assertEqual(record[0]["GBSeq_feature-table"][3]["GBFeature_intervals"][0]["GBInterval_to"], "48")
-        self.assertEqual(record[0]["GBSeq_feature-table"][3]["GBFeature_intervals"][0]["GBInterval_accession"], "X60065.1")
-        self.assertEqual(record[0]["GBSeq_feature-table"][3]["GBFeature_partial5"], "")
-        self.assertEqual(record[0]["GBSeq_feature-table"][3]["GBFeature_partial5"].attributes["value"], "true")
-        self.assertEqual(record[0]["GBSeq_feature-table"][3]["GBFeature_quals"][0]["GBQualifier_name"], "gene")
-        self.assertEqual(record[0]["GBSeq_feature-table"][3]["GBFeature_quals"][0]["GBQualifier_value"], "beta-2-gpI")
-        self.assertEqual(record[0]["GBSeq_feature-table"][4]["GBFeature_key"], "mat_peptide")
-        self.assertEqual(record[0]["GBSeq_feature-table"][4]["GBFeature_location"], "49..1026")
-        self.assertEqual(record[0]["GBSeq_feature-table"][4]["GBFeature_intervals"][0]["GBInterval_from"], "49")
-        self.assertEqual(record[0]["GBSeq_feature-table"][4]["GBFeature_intervals"][0]["GBInterval_to"], "1026")
-        self.assertEqual(record[0]["GBSeq_feature-table"][4]["GBFeature_intervals"][0]["GBInterval_accession"], "X60065.1")
-        self.assertEqual(record[0]["GBSeq_feature-table"][4]["GBFeature_quals"][0]["GBQualifier_name"], "gene")
-        self.assertEqual(record[0]["GBSeq_feature-table"][4]["GBFeature_quals"][0]["GBQualifier_value"], "beta-2-gpI")
-        self.assertEqual(record[0]["GBSeq_feature-table"][4]["GBFeature_quals"][1]["GBQualifier_name"], "product")
-        self.assertEqual(record[0]["GBSeq_feature-table"][4]["GBFeature_quals"][1]["GBQualifier_value"], "beta-2-glycoprotein I")
-        self.assertEqual(record[0]["GBSeq_feature-table"][5]["GBFeature_key"], "polyA_signal")
-        self.assertEqual(record[0]["GBSeq_feature-table"][5]["GBFeature_location"], "1101..1106")
-        self.assertEqual(record[0]["GBSeq_feature-table"][5]["GBFeature_intervals"][0]["GBInterval_from"], "1101")
-        self.assertEqual(record[0]["GBSeq_feature-table"][5]["GBFeature_intervals"][0]["GBInterval_to"], "1106")
-        self.assertEqual(record[0]["GBSeq_feature-table"][5]["GBFeature_intervals"][0]["GBInterval_accession"], "X60065.1")
-        self.assertEqual(record[0]["GBSeq_feature-table"][5]["GBFeature_quals"][0]["GBQualifier_name"], "gene")
-        self.assertEqual(record[0]["GBSeq_feature-table"][5]["GBFeature_quals"][0]["GBQualifier_value"], "beta-2-gpI")
-        self.assertEqual(record[0]["GBSeq_feature-table"][6]["GBFeature_key"], "polyA_site")
-        self.assertEqual(record[0]["GBSeq_feature-table"][6]["GBFeature_location"], "1130")
-        self.assertEqual(record[0]["GBSeq_feature-table"][6]["GBFeature_intervals"][0]["GBInterval_point"], "1130")
-        self.assertEqual(record[0]["GBSeq_feature-table"][6]["GBFeature_intervals"][0]["GBInterval_accession"], "X60065.1")
-        self.assertEqual(record[0]["GBSeq_feature-table"][6]["GBFeature_quals"][0]["GBQualifier_name"], "gene")
-        self.assertEqual(record[0]["GBSeq_feature-table"][6]["GBFeature_quals"][0]["GBQualifier_value"], "beta-2-gpI")
-        self.assertEqual(record[0]["GBSeq_sequence"], "ccagcgctcgtcttgctgttggggtttctctgccacgttgctatcgcaggacgaacctgccccaagccagatgagctaccgttttccacggtggttccactgaaacggacctatgagcccggggagcagatagtcttctcctgccagccgggctacgtgtcccggggagggatccggcggtttacatgcccgctcacaggactctggcccatcaacacgctgaaatgcatgcccagagtatgtccttttgctgggatcttagaaaacggaacggtacgctatacaacgtttgagtatcccaacaccatcagcttttcttgccacacggggttttatctgaaaggagctagttctgcaaaatgcactgaggaagggaagtggagcccagaccttcctgtctgtgcccctataacctgccctccaccacccatacccaa [...]
-
-    def test_nucleotide2(self):
-        '''Test parsing XML returned by EFetch, Nucleotide database (second test)
-        '''
-        # Access the nucleotide database using efetch.
-        # To create the XML file, use
-        # >>> Bio.Entrez.efetch(db='nucleotide', id=5,
-        #                       rettype='fasta', complexity=0, retmode='xml')
-        with open('Entrez/nucleotide2.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(record[0]["TSeq_seqtype"], "")
-        self.assertEqual(record[0]["TSeq_seqtype"].attributes["value"], "nucleotide")
-        self.assertEqual(record[0]["TSeq_gi"], "5")
-        self.assertEqual(record[0]["TSeq_accver"], "X60065.1")
-        self.assertEqual(record[0]["TSeq_taxid"], "9913")
-        self.assertEqual(record[0]["TSeq_orgname"], "Bos taurus")
-        self.assertEqual(record[0]["TSeq_defline"], "B.bovis beta-2-gpI mRNA for beta-2-glycoprotein I")
-        self.assertEqual(record[0]["TSeq_length"], "1136")
-        self.assertEqual(record[0]["TSeq_sequence"], "CCAGCGCTCGTCTTGCTGTTGGGGTTTCTCTGCCACGTTGCTATCGCAGGACGAACCTGCCCCAAGCCAGATGAGCTACCGTTTTCCACGGTGGTTCCACTGAAACGGACCTATGAGCCCGGGGAGCAGATAGTCTTCTCCTGCCAGCCGGGCTACGTGTCCCGGGGAGGGATCCGGCGGTTTACATGCCCGCTCACAGGACTCTGGCCCATCAACACGCTGAAATGCATGCCCAGAGTATGTCCTTTTGCTGGGATCTTAGAAAACGGAACGGTACGCTATACAACGTTTGAGTATCCCAACACCATCAGCTTTTCTTGCCACACGGGGTTTTATCTGAAAGGAGCTAGTTCTGCAAAATGCACTGAGGAAGGGAAGTGGAGCCCAGACCTTCCTGTCTGTGCCCCTATAACCTGCCCTCCACCACCCATACCCAAG [...]
-        self.assertEqual(record[1]["TSeq_seqtype"], "")
-        self.assertEqual(record[1]["TSeq_seqtype"].attributes["value"], "protein")
-        self.assertEqual(record[1]["TSeq_gi"], "6")
-        self.assertEqual(record[1]["TSeq_accver"], "CAA42669.1")
-        self.assertEqual(record[1]["TSeq_taxid"], "9913")
-        self.assertEqual(record[1]["TSeq_orgname"], "Bos taurus")
-        self.assertEqual(record[1]["TSeq_defline"], "beta-2-glycoprotein I [Bos taurus]")
-        self.assertEqual(record[1]["TSeq_length"], "342")
-        self.assertEqual(record[1]["TSeq_sequence"], "PALVLLLGFLCHVAIAGRTCPKPDELPFSTVVPLKRTYEPGEQIVFSCQPGYVSRGGIRRFTCPLTGLWPINTLKCMPRVCPFAGILENGTVRYTTFEYPNTISFSCHTGFYLKGASSAKCTEEGKWSPDLPVCAPITCPPPPIPKFASLSVYKPLAGNNSFYGSKAVFKCLPHHAMFGNDTVTCTEHGNWTQLPECREVRCPFPSRPDNGFVNHPANPVLYYKDTATFGCHETYSLDGPEEVECSKFGNWSAQPSCKASCKLSIKRATVIYEGERVAIQNKFKNGMLHGQKVSFFCKHKEKKCSYTEDAQCIDGTIEIPKCFKEHSSLAFWKTDASDVKPC")
-
-    def test_protein(self):
-        '''Test parsing XML returned by EFetch, Protein database
-        '''
-        # Access the protein database using efetch.
-        # To create the XML file, use
-        # >>> Bio.Entrez.efetch(db='protein', id=8, rettype='gp', retmode='xml')
-        with open('Entrez/protein.xml', "rb") as handle:
-            record = Entrez.read(handle)
-        self.assertEqual(record[0]["GBSeq_locus"], "CAA35997")
-        self.assertEqual(record[0]["GBSeq_length"], "100")
-        self.assertEqual(record[0]["GBSeq_moltype"], "AA")
-        self.assertEqual(record[0]["GBSeq_topology"], "linear")
-        self.assertEqual(record[0]["GBSeq_division"], "MAM")
-        self.assertEqual(record[0]["GBSeq_update-date"], "12-SEP-1993")
-        self.assertEqual(record[0]["GBSeq_create-date"], "03-APR-1990")
-        self.assertEqual(record[0]["GBSeq_definition"], "unnamed protein product [Bos taurus]")
-        self.assertEqual(record[0]["GBSeq_primary-accession"], "CAA35997")
-        self.assertEqual(record[0]["GBSeq_accession-version"], "CAA35997.1")
-        self.assertEqual(record[0]["GBSeq_other-seqids"][0], "emb|CAA35997.1|")
-        self.assertEqual(record[0]["GBSeq_other-seqids"][1], "gi|8")
-        self.assertEqual(record[0]["GBSeq_source"], "Bos taurus (cattle)")
-        self.assertEqual(record[0]["GBSeq_organism"], "Bos taurus")
-        self.assertEqual(record[0]["GBSeq_taxonomy"], "Eukaryota; Metazoa; Chordata; Craniata; Vertebrata; Euteleostomi; Mammalia; Eutheria; Laurasiatheria; Cetartiodactyla; Ruminantia; Pecora; Bovidae; Bovinae; Bos")
-        self.assertEqual(record[0]["GBSeq_references"][0]["GBReference_reference"], "1")
-        self.assertEqual(record[0]["GBSeq_references"][0]["GBReference_position"], "1..100")
-        self.assertEqual(record[0]["GBSeq_references"][0]["GBReference_authors"][0], "Kiefer,M.C.")
-        self.assertEqual(record[0]["GBSeq_references"][0]["GBReference_authors"][1], "Saphire,A.C.S.")
-        self.assertEqual(record[0]["GBSeq_references"][0]["GBReference_authors"][2], "Bauer,D.M.")
-        self.assertEqual(record[0]["GBSeq_references"][0]["GBReference_authors"][3], "Barr,P.J.")
-        self.assertEqual(record[0]["GBSeq_references"][0]["GBReference_journal"], "Unpublished")
-        self.assertEqual(record[0]["GBSeq_references"][1]["GBReference_reference"], "2")
-        self.assertEqual(record[0]["GBSeq_references"][1]["GBReference_position"], "1..100")
-        self.assertEqual(record[0]["GBSeq_references"][1]["GBReference_authors"][0], "Kiefer,M.C.")
-        self.assertEqual(record[0]["GBSeq_references"][1]["GBReference_title"], "Direct Submission")
-        self.assertEqual(record[0]["GBSeq_references"][1]["GBReference_journal"], "Submitted (30-JAN-1990) Kiefer M.C., Chiron Corporation, 4560 Hortom St, Emeryville CA 94608-2916, U S A")
-        self.assertEqual(record[0]["GBSeq_comment"], "See <X15699> for Human sequence.~Data kindly reviewed (08-MAY-1990) by Kiefer M.C.")
-        self.assertEqual(record[0]["GBSeq_source-db"], "embl accession X51700.1")
-        self.assertEqual(record[0]["GBSeq_feature-table"][0]["GBFeature_key"], "source")
-        self.assertEqual(record[0]["GBSeq_feature-table"][0]["GBFeature_location"], "1..100")
-        self.assertEqual(record[0]["GBSeq_feature-table"][0]["GBFeature_intervals"][0]["GBInterval_from"], "1")
-        self.assertEqual(record[0]["GBSeq_feature-table"][0]["GBFeature_intervals"][0]["GBInterval_to"], "100")
-        self.assertEqual(record[0]["GBSeq_feature-table"][0]["GBFeature_intervals"][0]["GBInterval_accession"], "CAA35997.1")
-        self.assertEqual(record[0]["GBSeq_feature-table"][0]["GBFeature_quals"][0]["GBQualifier_name"], "organism")
-        self.assertEqual(record[0]["GBSeq_feature-table"][0]["GBFeature_quals"][0]["GBQualifier_value"], "Bos taurus")
-        self.assertEqual(record[0]["GBSeq_feature-table"][0]["GBFeature_quals"][1]["GBQualifier_name"], "db_xref")
-        self.assertEqual(record[0]["GBSeq_feature-table"][0]["GBFeature_quals"][1]["GBQualifier_value"], "taxon:9913")
-        self.assertEqual(record[0]["GBSeq_feature-table"][0]["GBFeature_quals"][2]["GBQualifier_name"], "clone")
-        self.assertEqual(record[0]["GBSeq_feature-table"][0]["GBFeature_quals"][2]["GBQualifier_value"], "bBGP-3")
-        self.assertEqual(record[0]["GBSeq_feature-table"][0]["GBFeature_quals"][3]["GBQualifier_name"], "tissue_type")
-        self.assertEqual(record[0]["GBSeq_feature-table"][0]["GBFeature_quals"][3]["GBQualifier_value"], "bone matrix")
-        self.assertEqual(record[0]["GBSeq_feature-table"][0]["GBFeature_quals"][4]["GBQualifier_name"], "clone_lib")
-        self.assertEqual(record[0]["GBSeq_feature-table"][0]["GBFeature_quals"][4]["GBQualifier_value"], "Zap-bb")
-        self.assertEqual(record[0]["GBSeq_feature-table"][1]["GBFeature_key"], "Protein")
-        self.assertEqual(record[0]["GBSeq_feature-table"][1]["GBFeature_location"], "1..100")
-        self.assertEqual(record[0]["GBSeq_feature-table"][1]["GBFeature_intervals"][0]["GBInterval_from"], "1")
-        self.assertEqual(record[0]["GBSeq_feature-table"][1]["GBFeature_intervals"][0]["GBInterval_to"], "100")
-        self.assertEqual(record[0]["GBSeq_feature-table"][1]["GBFeature_intervals"][0]["GBInterval_accession"], "CAA35997.1")
-        self.assertEqual(record[0]["GBSeq_feature-table"][1]["GBFeature_quals"][0]["GBQualifier_name"], "name")
-        self.assertEqual(record[0]["GBSeq_feature-table"][1]["GBFeature_quals"][0]["GBQualifier_value"], "unnamed protein product")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_key"], "Region")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_location"], "33..97")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_intervals"][0]["GBInterval_from"], "33")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_intervals"][0]["GBInterval_to"], "97")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_intervals"][0]["GBInterval_accession"], "CAA35997.1")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_quals"][0]["GBQualifier_name"], "region_name")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_quals"][0]["GBQualifier_value"], "Gla")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_quals"][1]["GBQualifier_name"], "note")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_quals"][1]["GBQualifier_value"], "Vitamin K-dependent carboxylation/gamma-carboxyglutamic (GLA) domain. This domain is responsible for the high-affinity binding of calcium ions. This domain contains post-translational modifications of many glutamate residues by Vitamin K-dependent...; cl02449")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_quals"][2]["GBQualifier_name"], "db_xref")
-        self.assertEqual(record[0]["GBSeq_feature-table"][2]["GBFeature_quals"][2]["GBQualifier_value"], "CDD:92835")
-        self.assertEqual(record[0]["GBSeq_feature-table"][3]["GBFeature_key"], "CDS")
-        self.assertEqual(record[0]["GBSeq_feature-table"][3]["GBFeature_location"], "1..100")
-        self.assertEqual(record[0]["GBSeq_feature-table"][3]["GBFeature_intervals"][0]["GBInterval_from"], "1")
-        self.assertEqual(record[0]["GBSeq_feature-table"][3]["GBFeature_intervals"][0]["GBInterval_to"], "100")
-        self.assertEqual(record[0]["GBSeq_feature-table"][3]["GBFeature_intervals"][0]["GBInterval_accession"], "CAA35997.1")
-        self.assertEqual(record[0]["GBSeq_feature-table"][3]["GBFeature_quals"][0]["GBQualifier_name"], "coded_by")
-        self.assertEqual(record[0]["GBSeq_feature-table"][3]["GBFeature_quals"][0]["GBQualifier_value"], "X51700.1:28..330")
-        self.assertEqual(record[0]["GBSeq_feature-table"][3]["GBFeature_quals"][1]["GBQualifier_name"], "note")
-        self.assertEqual(record[0]["GBSeq_feature-table"][3]["GBFeature_quals"][1]["GBQualifier_value"], "bone Gla precursor (100 AA)")
-        self.assertEqual(record[0]["GBSeq_feature-table"][3]["GBFeature_quals"][2]["GBQualifier_name"], "db_xref")
-        self.assertEqual(record[0]["GBSeq_feature-table"][3]["GBFeature_quals"][2]["GBQualifier_value"], "GOA:P02820")
-        self.assertEqual(record[0]["GBSeq_feature-table"][3]["GBFeature_quals"][3]["GBQualifier_name"], "db_xref")
-        self.assertEqual(record[0]["GBSeq_feature-table"][3]["GBFeature_quals"][3]["GBQualifier_value"], "InterPro:IPR000294")
-        self.assertEqual(record[0]["GBSeq_feature-table"][3]["GBFeature_quals"][4]["GBQualifier_name"], "db_xref")
-        self.assertEqual(record[0]["GBSeq_feature-table"][3]["GBFeature_quals"][4]["GBQualifier_value"], "InterPro:IPR002384")
-        self.assertEqual(record[0]["GBSeq_feature-table"][3]["GBFeature_quals"][5]["GBQualifier_name"], "db_xref")
-        self.assertEqual(record[0]["GBSeq_feature-table"][3]["GBFeature_quals"][5]["GBQualifier_value"], "PDB:1Q3M")
-        self.assertEqual(record[0]["GBSeq_feature-table"][3]["GBFeature_quals"][6]["GBQualifier_name"], "db_xref")
-        self.assertEqual(record[0]["GBSeq_feature-table"][3]["GBFeature_quals"][6]["GBQualifier_value"], "UniProtKB/Swiss-Prot:P02820")
-        self.assertEqual(record[0]["GBSeq_sequence"], "mrtpmllallalatlclagradakpgdaesgkgaafvskqegsevvkrlrryldhwlgapapypdplepkrevcelnpdcdeladhigfqeayrrfygpv")
-
-    def test_genbank(self):
-        '''Test error handling when presented with GenBank non-XML data
-        '''
-        # Access the nucleotide database using efetch, but return the data
-        # in GenBank format.
-        # To create the GenBank file, use
-        # >>> Bio.Entrez.efetch(db='nucleotide', id='NT_019265', rettype='gb')
-        from Bio.Entrez import Parser
-        with open('GenBank/NT_019265.gb', "rb") as handle:
-            self.assertRaises(Parser.NotXMLError, Entrez.read, handle)
-        with open('GenBank/NT_019265.gb', "rb") as handle:
-            iterator = Entrez.parse(handle)
-            self.assertRaises(Parser.NotXMLError, next, iterator)
-
-    def test_fasta(self):
-        '''Test error handling when presented with Fasta non-XML data
-        '''
-        from Bio.Entrez import Parser
-        with open('Fasta/wisteria.nu', "rb") as handle:
-            self.assertRaises(Parser.NotXMLError, Entrez.read, handle)
-        with open('Fasta/wisteria.nu', "rb") as handle:
-            iterator = Entrez.parse(handle)
-            self.assertRaises(Parser.NotXMLError, next, iterator)
-
-    def test_pubmed_html(self):
-        '''Test error handling when presented with HTML (so XML-like) data
-        '''
-        # To create the HTML file, use
-        # >>> Bio.Entrez.efetch(db="pubmed", id="19304878")
-        from Bio.Entrez import Parser
-        with open('Entrez/pubmed3.html', "rb") as handle:
-            self.assertRaises(Parser.NotXMLError, Entrez.read, handle)
-        # Test if the error is also raised with Entrez.parse
-        with open('Entrez/pubmed3.html', "rb") as handle:
-            records = Entrez.parse(handle)
-            self.assertRaises(Parser.NotXMLError, next, records)
-
-    def test_xml_without_declaration(self):
-        '''Test error handling for a missing XML declaration
-        '''
-        # To create the XML file, use
-        # >>> Bio.Entrez.efetch(db="journals",id="2830,6011,7473",retmode='xml')
-        from Bio.Entrez import Parser
-        with open('Entrez/journals.xml', "rb") as handle:
-            self.assertRaises(Parser.NotXMLError, Entrez.read, handle)
-        # Test if the error is also raised with Entrez.parse
-        with open('Entrez/journals.xml', "rb") as handle:
-            records = Entrez.parse(handle)
-            self.assertRaises(Parser.NotXMLError, next, records)
-
-    def test_truncated_xml(self):
-        """Test error handling for a truncated XML declaration"""
-        from Bio.Entrez.Parser import CorruptedXMLError
-        from Bio._py3k import StringIO
-        truncated_xml = """<?xml version="1.0"?>
-        <!DOCTYPE GBSet PUBLIC "-//NCBI//NCBI GBSeq/EN" "http://www.ncbi.nlm.nih.gov/dtd/NCBI_GBSeq.dtd">
-        <GBSet><GBSeq><GBSeq_locus>
-        """
-        handle = StringIO()
-        handle.write(truncated_xml)
-        handle.seek(0)
-        records = Entrez.parse(handle)
-        self.assertRaises(CorruptedXMLError, next, records)
-
-if __name__ == '__main__':
+# This lets us set the email address to be sent to NCBI Entrez:
+Entrez.email = "biopython-dev at biopython.org"
+
+URL_HEAD = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/"
+URL_TOOL = "tool=biopython"
+URL_EMAIL = "email=biopython-dev%40biopython.org"
+
+
+class TestURLConstruction(unittest.TestCase):
+    def test_email_warning(self):
+        """Test issuing warning when user does not specify email address."""
+        Entrez.email = None
+
+        with warnings.catch_warnings(record=True) as w:
+            Entrez._construct_params(params=None)
+            self.assertEqual(len(w), 1)
+
+    def test_construct_cgi_ecitmatch(self):
+        citation = {
+            "journal_title": "proc natl acad sci u s a",
+            "year": "1991", "volume": "88", "first_page": "3248",
+            "author_name": "mann bj", "key": "citation_1"
+        }
+        cgi = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/ecitmatch.cgi'
+        variables = Entrez._update_ecitmatch_variables({'db': 'pubmed',
+                                                        'bdata': [citation]})
+        post = False
+
+        params = Entrez._construct_params(variables)
+        options = Entrez._encode_options(ecitmatch=True, params=params)
+        result_url = Entrez._construct_cgi(cgi, post=post, options=options)
+        self.assertTrue("retmode=xml" in result_url, result_url)
+
+    def test_construct_cgi_einfo(self):
+        """Test constructed url for request to Entrez."""
+        cgi = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/einfo.fcgi'
+        params = Entrez._construct_params(params=None)
+        options = Entrez._encode_options(ecitmatch=False, params=params)
+        result_url = Entrez._construct_cgi(cgi, post=False, options=options)
+        self.assertTrue(result_url.startswith(URL_HEAD + "einfo.fcgi?"),
+                        result_url)
+        self.assertTrue(URL_TOOL in result_url)
+        self.assertTrue(URL_EMAIL in result_url)
+
+    def test_construct_cgi_epost1(self):
+        cgi = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/epost.fcgi'
+        variables = {'db': 'nuccore', 'id': '186972394,160418'}
+        post = True
+
+        params = Entrez._construct_params(variables)
+        options = Entrez._encode_options(ecitmatch=False, params=params)
+        result_url = Entrez._construct_cgi(cgi, post=post, options=options)
+        self.assertEqual(URL_HEAD + "epost.fcgi", result_url)
+
+    def test_construct_cgi_epost2(self):
+        cgi = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/epost.fcgi'
+        variables = {'db': 'nuccore', 'id': ["160418", "160351"]}
+        post = True
+
+        params = Entrez._construct_params(variables)
+        options = Entrez._encode_options(ecitmatch=False, params=params)
+        result_url = Entrez._construct_cgi(cgi, post=post, options=options)
+        self.assertEqual(URL_HEAD + "epost.fcgi", result_url)
+
+    def test_construct_cgi_elink1(self):
+        cgi = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi'
+        variables = {'cmd': 'neighbor_history', 'db': 'nucleotide',
+                     'dbfrom': 'protein', 'id': '22347800,48526535',
+                     'query_key': None, 'webenv': None}
+        post = False
+
+        params = Entrez._construct_params(variables)
+        options = Entrez._encode_options(ecitmatch=False, params=params)
+        result_url = Entrez._construct_cgi(cgi, post=post, options=options)
+        self.assertTrue(result_url.startswith(URL_HEAD + "elink.fcgi?"),
+                        result_url)
+        self.assertTrue(URL_TOOL in result_url)
+        self.assertTrue(URL_EMAIL in result_url)
+        self.assertTrue("id=22347800%2C48526535" in result_url, result_url)
+
+    def test_construct_cgi_elink2(self):
+        """Commas: Link from protein to gene."""
+        cgi = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi'
+        variables = {'db': 'gene', 'dbfrom': 'protein',
+                     'id': '15718680,157427902,119703751'}
+        post = False
+
+        params = Entrez._construct_params(variables)
+        options = Entrez._encode_options(ecitmatch=False, params=params)
+        result_url = Entrez._construct_cgi(cgi, post=post, options=options)
+        self.assertTrue(result_url.startswith(URL_HEAD + "elink.fcgi"),
+                        result_url)
+        self.assertTrue(URL_TOOL in result_url)
+        self.assertTrue(URL_EMAIL in result_url)
+        self.assertTrue("id=15718680%2C157427902%2C119703751" in result_url,
+                        result_url)
+
+    def test_construct_cgi_elink3(self):
+        """Multiple ID entries: Find one-to-one links from protein to gene."""
+        cgi = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi'
+        variables = {'db': 'gene', 'dbfrom': 'protein',
+                     'id': ["15718680", "157427902", "119703751"]}
+        post = False
+
+        params = Entrez._construct_params(variables)
+        options = Entrez._encode_options(ecitmatch=False, params=params)
+        result_url = Entrez._construct_cgi(cgi, post=post, options=options)
+        self.assertTrue(result_url.startswith(URL_HEAD + "elink.fcgi"),
+                        result_url)
+        self.assertTrue(URL_TOOL in result_url)
+        self.assertTrue(URL_EMAIL in result_url)
+        self.assertTrue("id=15718680" in result_url, result_url)
+        self.assertTrue("id=157427902" in result_url, result_url)
+        self.assertTrue("id=119703751" in result_url, result_url)
+
+    def test_construct_cgi_efetch(self):
+        cgi = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi'
+        variables = {'db': 'protein', 'id': '15718680,157427902,119703751',
+                     'retmode': 'xml'}
+        post = False
+
+        params = Entrez._construct_params(variables)
+        options = Entrez._encode_options(ecitmatch=False, params=params)
+        result_url = Entrez._construct_cgi(cgi, post=post, options=options)
+        self.assertTrue(result_url.startswith(URL_HEAD + "efetch.fcgi?"),
+                        result_url)
+        self.assertTrue(URL_TOOL in result_url)
+        self.assertTrue(URL_EMAIL in result_url)
+        self.assertTrue("id=15718680%2C157427902%2C119703751" in result_url,
+                        result_url)
+
+
+if __name__ == "__main__":
     runner = unittest.TextTestRunner(verbosity=2)
     unittest.main(testRunner=runner)
diff --git a/Tests/test_Entrez_online.py b/Tests/test_Entrez_online.py
index b4bbdca..49830e1 100644
--- a/Tests/test_Entrez_online.py
+++ b/Tests/test_Entrez_online.py
@@ -29,13 +29,13 @@ if os.name == 'java':
     except ImportError:
         from Bio import MissingPythonDependencyError
         raise MissingPythonDependencyError("The Bio.Entrez XML parser fails on "
-                                  "Jython, see http://bugs.jython.org/issue1447")
+                                           "Jython, see http://bugs.jython.org/issue1447")
 
 
 # This lets us set the email address to be sent to NCBI Entrez:
 Entrez.email = "biopython-dev at biopython.org"
 
-URL_HEAD = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/"
+URL_HEAD = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/"
 URL_TOOL = "tool=biopython"
 URL_EMAIL = "email=biopython-dev%40biopython.org"
 
@@ -132,9 +132,8 @@ class EntrezOnlineCase(unittest.TestCase):
         self.assertEqual(records[0]['System_sysid']['Sys-id']['Sys-id_bsid'], '1134002')
 
     def test_efetch_taxonomy_xml(self):
-        """Test Entrez using a integer id - like a taxon id
-        """
-        handle = Entrez.efetch( db="taxonomy", id=3702, retmode="XML")
+        """Test Entrez using a integer id - like a taxon id"""
+        handle = Entrez.efetch(db="taxonomy", id=3702, retmode="XML")
         taxon_record = Entrez.read(handle)
         self.assertTrue(1, len(taxon_record))
         self.assertTrue('TaxId' in taxon_record[0])
@@ -169,6 +168,26 @@ class EntrezOnlineCase(unittest.TestCase):
         self.assertEqual(URL_HEAD + "epost.fcgi", handle.url)
         handle.close()
 
+    def test_egquery(self):
+        handle = Entrez.egquery(term="biopython")
+        record = Entrez.read(handle)
+        handle.close()
+
+        done = False
+        for row in record["eGQueryResult"]:
+            if "pmc" in row["DbName"]:
+                self.assertTrue(int(row["Count"]) > 60)
+                done = True
+        self.assertTrue(done)
+
+    def test_espell(self):
+        handle = Entrez.espell(term="biopythooon")
+        record = Entrez.read(handle)
+        handle.close()
+
+        self.assertEqual(record["Query"], "biopythooon")
+        self.assertEqual(record["CorrectedQuery"], "biopython")
+
     def test_ecitmatch(self):
         citation = {
             "journal_title": "proc natl acad sci u s a",
diff --git a/Tests/test_Entrez.py b/Tests/test_Entrez_parser.py
similarity index 98%
copy from Tests/test_Entrez.py
copy to Tests/test_Entrez_parser.py
index 6025420..5a1788f 100644
--- a/Tests/test_Entrez.py
+++ b/Tests/test_Entrez_parser.py
@@ -3,8 +3,7 @@
 # This code is part of the Biopython distribution and governed by its
 # license.  Please see the LICENSE file that should have been included
 # as part of this package.
-'''Testing code for Bio.Entrez parsers.
-'''
+"""Testing code for Bio.Entrez parsers."""
 
 import unittest
 import sys
@@ -16,7 +15,7 @@ if os.name == 'java':
     except ImportError:
         from Bio import MissingPythonDependencyError
         raise MissingPythonDependencyError("The Bio.Entrez XML parser fails on "
-                                  "Jython, see http://bugs.jython.org/issue1447")
+                                           "Jython, see http://bugs.jython.org/issue1447")
 
 from io import BytesIO
 from Bio._py3k import StringIO
@@ -24,10 +23,10 @@ from Bio import Entrez
 
 
 class GeneralTests(unittest.TestCase):
-    '''General tests for Bio.Entrez'''
+    """General tests for Bio.Entrez."""
+
     def test_closed_handle(self):
-        '''Test parsing closed handle fails gracefully
-        '''
+        """Test parsing closed handle fails gracefully."""
         handle = open('Entrez/einfo1.xml', "rb")
         handle.close()
         self.assertRaises(IOError, Entrez.read, handle)
@@ -64,11 +63,10 @@ class GeneralTests(unittest.TestCase):
 
 
 class EInfoTest(unittest.TestCase):
-    '''Tests for parsing XML output returned by EInfo
-    '''
+    """Tests for parsing XML output returned by EInfo."""
+
     def test_list(self):
-        '''Test parsing database list returned by EInfo
-        '''
+        """Test parsing database list returned by EInfo."""
         # To create the XML file, use
         # >>> Bio.Entrez.einfo()
         with open('Entrez/einfo1.xml', "rb") as handle:
@@ -110,11 +108,10 @@ class EInfoTest(unittest.TestCase):
                                             'toolkit',
                                             'unigene',
                                             'unists'
-                                           ])
+                                            ])
 
     def test_pubmed1(self):
-        '''Test parsing database info returned by EInfo
-        '''
+        """Test parsing database info returned by EInfo."""
         # To create the XML file, use
         # >>> Bio.Entrez.einfo(db="pubmed")
         with open('Entrez/einfo2.xml', "rb") as handle:
@@ -145,8 +142,7 @@ class EInfoTest(unittest.TestCase):
         self.assertEqual(record["DbInfo"]['LinkList'][0]['DbTo'], 'books')
 
     def test_pubmed2(self):
-        '''Test validating the XML against the DTD
-        '''
+        """Test validating the XML against the DTD."""
         # To create the XML file, use
         # >>> Bio.Entrez.einfo(db="pubmed")
         # Starting some time in 2010, the results returned by Bio.Entrez
@@ -156,8 +152,7 @@ class EInfoTest(unittest.TestCase):
             self.assertRaises(Parser.ValidationError, Entrez.read, handle)
 
     def test_pubmed3(self):
-        '''Test non-validating parser on XML with an inconsistent DTD
-        '''
+        """Test non-validating parser on XML with an inconsistent DTD."""
         # To create the XML file, use
         # >>> Bio.Entrez.einfo(db="pubmed")
         # Starting some time in 2010, the results returned by Bio.Entrez
@@ -807,8 +802,7 @@ class EInfoTest(unittest.TestCase):
         self.assertEqual(record["DbInfo"]["LinkList"][56]["DbTo"], "unists")
 
     def test_corrupted(self):
-        '''Test if corrupted XML is handled correctly
-        '''
+        """Test if corrupted XML is handled correctly."""
         # To create the XML file, use
         # >>> Bio.Entrez.einfo()
         # and manually delete the last couple of lines
@@ -818,11 +812,10 @@ class EInfoTest(unittest.TestCase):
 
 
 class ESearchTest(unittest.TestCase):
-    '''Tests for parsing XML output returned by ESearch
-    '''
+    """Tests for parsing XML output returned by ESearch."""
+
     def test_pubmed1(self):
-        '''Test parsing XML returned by ESearch from PubMed (first test)
-        '''
+        """Test parsing XML returned by ESearch from PubMed (first test)."""
         # To create the XML file, use
         # >>> Bio.Entrez.esearch(db="pubmed", term="biopython")
         with open('Entrez/esearch1.xml', "rb") as handle:
@@ -846,8 +839,7 @@ class ESearchTest(unittest.TestCase):
         self.assertEqual(record['QueryTranslation'], 'biopython[All Fields]')
 
     def test_pubmed2(self):
-        '''Test parsing XML returned by ESearch from PubMed (second test)
-        '''
+        """Test parsing XML returned by ESearch from PubMed (second test)."""
         # Search in PubMed for the term cancer for the entrez date from
         # the last 60 days and retrieve the first 100 IDs and translations
         # using the history parameter.
@@ -1000,8 +992,7 @@ class ESearchTest(unittest.TestCase):
         self.assertEqual(record['QueryTranslation'], '(("neoplasms"[TIAB] NOT Medline[SB]) OR "neoplasms"[MeSH Terms] OR cancer[Text Word]) AND 2008/02/16[EDAT] : 2008/04/16[EDAT]')
 
     def test_pubmed3(self):
-        '''Test parsing XML returned by ESearch from PubMed (third test)
-        '''
+        """Test parsing XML returned by ESearch from PubMed (third test)."""
         # Search in PubMed for the journal PNAS Volume 97, and retrieve
         # 6 IDs starting at ID 7.
         # To create the XML file, use
@@ -1035,8 +1026,7 @@ class ESearchTest(unittest.TestCase):
         self.assertEqual(record['QueryTranslation'], '"Proc Natl Acad Sci U S A"[Journal] AND 97[vi]')
 
     def test_journals(self):
-        '''Test parsing XML returned by ESearch from the Journals database
-        '''
+        """Test parsing XML returned by ESearch from the Journals database."""
         # Search in Journals for the term obstetrics.
         # To create the XML file, use
         # >>> Bio.Entrez.esearch(db="journals", term="obstetrics")
@@ -1078,8 +1068,7 @@ class ESearchTest(unittest.TestCase):
         self.assertEqual(record['QueryTranslation'], 'obstetrics[All Fields]')
 
     def test_pmc(self):
-        '''Test parsing XML returned by ESearch from PubMed Central
-        '''
+        """Test parsing XML returned by ESearch from PubMed Central."""
         # Search in PubMed Central for stem cells in free fulltext articles.
         # To create the XML file, use
         # >>> Bio.Entrez.esearch(db="pmc",
@@ -1157,8 +1146,7 @@ class ESearchTest(unittest.TestCase):
         self.assertEqual(record['QueryTranslation'], '("stem cells"[MeSH Terms] OR stem cells[Acknowledgments] OR stem cells[Figure/Table Caption] OR stem cells[Section Title] OR stem cells[Body - All Words] OR stem cells[Title] OR stem cells[Abstract]) AND free fulltext[filter]')
 
     def test_nucleotide(self):
-        '''Test parsing XML returned by ESearch from the Nucleotide database
-        '''
+        """Test parsing XML returned by ESearch from the Nucleotide database."""
         # Search in Nucleotide for a property of the sequence,
         # To create the XML file, use
         # >>> Bio.Entrez.esearch(db="nucleotide", term="biomol trna[prop]")
@@ -1192,8 +1180,7 @@ class ESearchTest(unittest.TestCase):
         self.assertEqual(record['QueryTranslation'], '')
 
     def test_protein(self):
-        '''Test parsing XML returned by ESearch from the Protein database
-        '''
+        """Test parsing XML returned by ESearch from the Protein database."""
         # Search in Protein for a molecular weight
         # To create the XML file, use
         # >>> Bio.Entrez.esearch(db="protein", term="200020[molecular weight]")
@@ -1216,8 +1203,7 @@ class ESearchTest(unittest.TestCase):
         self.assertEqual(record['QueryTranslation'], '000200020[molecular weight]')
 
     def test_notfound(self):
-        '''Test parsing XML returned by ESearch when no items were found
-        '''
+        """Test parsing XML returned by ESearch when no items were found."""
         # To create the XML file, use
         # >>> Bio.Entrez.esearch(db="protein", term="abcXYZ")
         with open('Entrez/esearch8.xml', "rb") as handle:
@@ -1245,13 +1231,12 @@ class ESearchTest(unittest.TestCase):
 
 
 class EPostTest(unittest.TestCase):
-    '''Tests for parsing XML output returned by EPost
-    '''
+    """Tests for parsing XML output returned by EPost."""
+
     # Don't know how to get an InvalidIdList in the XML returned by EPost;
     # unable to test if we are parsing it correctly.
     def test_epost(self):
-        '''Test parsing XML returned by EPost
-        '''
+        """Test parsing XML returned by EPost."""
         # To create the XML file, use
         # >>> Bio.Entrez.epost(db="pubmed", id="11237011")
         with open('Entrez/epost1.xml', "rb") as handle:
@@ -1260,16 +1245,14 @@ class EPostTest(unittest.TestCase):
         self.assertEqual(record["WebEnv"], '0zYsuLk3zG_lRMkblPBEqnT8nIENUGw4HAy8xXChTnoVm7GEnWY71jv3nz at 1FC077F3806DE010_0042SID')
 
     def test_wrong(self):
-        '''Test parsing XML returned by EPost with incorrect arguments
-        '''
+        """Test parsing XML returned by EPost with incorrect arguments."""
         # To create the XML file, use
         # >>> Bio.Entrez.epost(db="nothing")
         with open('Entrez/epost2.xml', "rb") as handle:
             self.assertRaises(RuntimeError, Entrez.read, handle)
 
     def test_invalid(self):
-        '''Test parsing XML returned by EPost with an invalid id (overflow tag)
-        '''
+        """Test parsing XML returned by EPost with invalid id (overflow tag)."""
         # To create the XML file, use
         # >>> Bio.Entrez.epost(db="pubmed", id=99999999999999999999999999999999)
         with open('Entrez/epost3.xml', "rb") as handle:
@@ -1280,15 +1263,14 @@ class EPostTest(unittest.TestCase):
 
 
 class ESummaryTest(unittest.TestCase):
-    '''Tests for parsing XML output returned by ESummary
-    '''
+    """Tests for parsing XML output returned by ESummary."""
+
     # Items have a type, which can be
     # (Integer|Date|String|Structure|List|Flags|Qualifier|Enumerator|Unknown)
     # I don't have an XML file where the type "Flags", "Qualifier",
     # "Enumerator", or "Unknown" is used, so they are not tested here.
     def test_pubmed(self):
-        '''Test parsing XML returned by ESummary from PubMed
-        '''
+        """Test parsing XML returned by ESummary from PubMed."""
         # In PubMed display records for PMIDs 11850928 and 11482001 in
         # xml retrieval mode
         # To create the XML file, use
@@ -1366,8 +1348,7 @@ class ESummaryTest(unittest.TestCase):
         self.assertEqual(record[1]["SO"], "2001 Jun;20(2):89-103")
 
     def test_journals(self):
-        '''Test parsing XML returned by ESummary from the Journals database
-        '''
+        """Test parsing XML returned by ESummary from the Journals database."""
         # In Journals display records for journal IDs 27731,439,735,905
         # To create the XML file, use
         # >>> Bio.Entrez.esummary(db="journals", id="27731,439,735,905")
@@ -1440,8 +1421,7 @@ class ESummaryTest(unittest.TestCase):
         self.assertEqual(record[3]["ContinuationNotes"], "Continues: Journal of the Asian Federation of Obstetrics and Gynaecology. Continued by: Journal of obstetrics and gynaecology (Tokyo, Japan). ")
 
     def test_protein(self):
-        '''Test parsing XML returned by ESummary from the Protein database
-        '''
+        """Test parsing XML returned by ESummary from the Protein database."""
         # In Protein display records for GIs 28800982 and 28628843 in xml retrieval mode
         # To create the XML file, use
         # >>> Bio.Entrez.esummary(db="protein", id="28800982,28628843", retmode="xml")
@@ -1476,8 +1456,7 @@ class ESummaryTest(unittest.TestCase):
         self.assertEqual(record[1]["Comment"], "  ")
 
     def test_nucleotide(self):
-        '''Test parsing XML returned by ESummary from the Nucleotide database
-        '''
+        """Test parsing XML returned by ESummary from the Nucleotide database."""
         # In Nucleotide display records for GIs 28864546 and 28800981
         # in xml retrieval mode
         # To create the XML file, use
@@ -1514,8 +1493,7 @@ class ESummaryTest(unittest.TestCase):
         self.assertEqual(record[1]["Comment"], "  ")
 
     def test_structure(self):
-        '''Test parsing XML returned by ESummary from the Structure database
-        '''
+        """Test parsing XML returned by ESummary from the Structure database."""
         # In Nucleotide display records for GIs 28864546 and 28800981
         # in xml retrieval mode
         # To create the XML file, use
@@ -1564,8 +1542,7 @@ class ESummaryTest(unittest.TestCase):
         self.assertEqual(record[1]["RNAChainCount"], "0")
 
     def test_taxonomy(self):
-        '''Test parsing XML returned by ESummary from the Taxonomy database
-        '''
+        """Test parsing XML returned by ESummary from the Taxonomy database."""
         # In Taxonomy display records for TAXIDs 9913 and 30521 in
         # xml retrieval mode
         # To create the XML file, use
@@ -1604,8 +1581,7 @@ class ESummaryTest(unittest.TestCase):
         self.assertEqual(record[1]["Subsp"], "")
 
     def test_unists(self):
-        '''Test parsing XML returned by ESummary from the UniSTS database
-        '''
+        """Test parsing XML returned by ESummary from the UniSTS database."""
         # In UniSTS display records for IDs 254085 and 254086 in xml
         # retrieval mode
         # To create the XML file, use
@@ -1632,8 +1608,7 @@ class ESummaryTest(unittest.TestCase):
         self.assertEqual(record[1]["LocusId"], "")
 
     def test_wrong(self):
-        '''Test parsing XML returned by ESummary with incorrect arguments
-        '''
+        """Test parsing XML returned by ESummary with incorrect arguments."""
         # To create the XML file, use
         # >>> Bio.Entrez.esummary()
         with open('Entrez/esummary8.xml', "rb") as handle:
@@ -1641,11 +1616,10 @@ class ESummaryTest(unittest.TestCase):
 
 
 class ELinkTest(unittest.TestCase):
-    '''Tests for parsing XML output returned by ELink
-    '''
+    """Tests for parsing XML output returned by ELink."""
+
     def test_pubmed1(self):
-        '''Test parsing pubmed links returned by ELink (first test)
-        '''
+        """Test parsing pubmed links returned by ELink (first test)."""
         # Retrieve IDs from PubMed for PMID 9298984 to the PubMed database
         # To create the XML file, use
         # >>> Bio.Entrez.elink(dbfrom="pubmed", id="9298984", cmd="neighbor")
@@ -1853,8 +1827,7 @@ class ELinkTest(unittest.TestCase):
         self.assertEqual(record[0]["LinkSetDb"][7]["Link"][0]["Id"], "9298984")
 
     def test_nucleotide(self):
-        '''Test parsing Nucleotide to Protein links returned by ELink
-        '''
+        """Test parsing Nucleotide to Protein links returned by ELink."""
         # Retrieve IDs from Nucleotide for GI  48819, 7140345 to Protein
         # To create the XML file, use
         # >>> Bio.Entrez.elink(dbfrom="nucleotide", db="protein",
@@ -1892,8 +1865,7 @@ class ELinkTest(unittest.TestCase):
         self.assertEqual(record[0]["LinkSetDb"][1]['Link'][15]['Id'], "48820")
 
     def test_pubmed2(self):
-        '''Test parsing pubmed links returned by ELink (second test)
-        '''
+        """Test parsing pubmed links returned by ELink (second test)."""
         # Retrieve PubMed related articles for PMIDs 11812492 11774222
         # with a publication date from 1995 to the present
         # To create the XML file, use
@@ -2272,8 +2244,7 @@ class ELinkTest(unittest.TestCase):
         self.assertEqual(record[0]["LinkSetDb"][0]["Link"][361]["Id"], "7729881")
 
     def test_medline(self):
-        '''Test parsing medline indexed articles returned by ELink
-        '''
+        """Test parsing medline indexed articles returned by ELink."""
         # Retrieve MEDLINE indexed only related articles for PMID 12242737
         # To create the XML file, use
         # >>> Bio.Entrez.elink(dbfrom="pubmed", id="12242737", db="pubmed",
@@ -2504,8 +2475,7 @@ class ELinkTest(unittest.TestCase):
         self.assertEqual(record[0]["LinkSetDb"][0]["LinkName"], "pubmed_pubmed")
 
     def test_pubmed3(self):
-        '''Test parsing pubmed link returned by ELink (third test)
-        '''
+        """Test parsing pubmed link returned by ELink (third test)."""
         # Create a hyperlink to the first link available for PMID 10611131
         # in PubMed
         # To create the XML file, use
@@ -2538,8 +2508,7 @@ class ELinkTest(unittest.TestCase):
         self.assertEqual(record[0]["IdUrlList"]['IdUrlSet'][0]["ObjUrl"][0]["Provider"]["Url"], "http://highwire.stanford.edu")
 
     def test_pubmed4(self):
-        '''Test parsing pubmed links returned by ELink (fourth test)
-        '''
+        """Test parsing pubmed links returned by ELink (fourth test)."""
         # List all available links in PubMed, except for libraries, for
         # PMIDs 12085856 and 12085853
         # To create the XML file, use
@@ -2604,8 +2573,7 @@ class ELinkTest(unittest.TestCase):
         self.assertEqual(record[0]["IdUrlList"]["IdUrlSet"][1]["ObjUrl"][2]["Provider"]["Url"], "http://medlineplus.gov/")
 
     def test_pubmed5(self):
-        '''Test parsing pubmed links returned by ELink (fifth test)
-        '''
+        """Test parsing pubmed links returned by ELink (fifth test)."""
         # List Entrez database links for PubMed PMIDs 12169658 and 11748140
         # To create the XML file, use
         # >>> Bio.Entrez.elink(dbfrom="pubmed", id="12169658,11748140",
@@ -2825,8 +2793,7 @@ class ELinkTest(unittest.TestCase):
         self.assertEqual(record[0]["IdCheckList"]["IdLinkSet"][1]["LinkInfo"][14]["Priority"], "255")
 
     def test_pubmed6(self):
-        '''Test parsing pubmed links returned by ELink (sixth test)
-        '''
+        """Test parsing pubmed links returned by ELink (sixth test)."""
         # Check for the existence of a Related Articles link for PMID
         # 12068369.
         # To create the XML file, use
@@ -2845,11 +2812,10 @@ class ELinkTest(unittest.TestCase):
 
 
 class EGQueryTest(unittest.TestCase):
-    '''Tests for parsing XML output returned by EGQuery
-    '''
+    """Tests for parsing XML output returned by EGQuery."""
+
     def test_egquery1(self):
-        '''Test parsing XML output returned by EGQuery (first test)
-        '''
+        """Test parsing XML output returned by EGQuery (first test)."""
         # Display counts in XML for stem cells in each Entrez database
         # To create the XML file, use
         # >>> Bio.Entrez.egquery(term="stem cells")
@@ -2998,8 +2964,7 @@ class EGQueryTest(unittest.TestCase):
         self.assertEqual(record["eGQueryResult"][34]["Status"], "Term or Database is not found")
 
     def test_egquery2(self):
-        '''Test parsing XML output returned by EGQuery (second test)
-        '''
+        """Test parsing XML output returned by EGQuery (second test)."""
         # Display counts in XML for brca1 or brca2 for each Entrez database
         # To create the XML file, use
         # >>> Bio.Entrez.egquery(term="brca1 OR brca2")
@@ -3149,11 +3114,10 @@ class EGQueryTest(unittest.TestCase):
 
 
 class ESpellTest(unittest.TestCase):
-    '''Tests for parsing XML output returned by ESpell
-    '''
+    """Tests for parsing XML output returned by ESpell."""
+
     def test_espell(self):
-        '''Test parsing XML output returned by ESpell
-        '''
+        """Test parsing XML output returned by ESpell."""
         # Request suggestions for the PubMed search biopythooon
         # To create the XML file, use
         # >>> Bio.Entrez.espell(db="pubmed", term="biopythooon")
@@ -3168,11 +3132,10 @@ class ESpellTest(unittest.TestCase):
 
 
 class EFetchTest(unittest.TestCase):
-    '''Tests for parsing XML output returned by EFetch
-    '''
+    """Tests for parsing XML output returned by EFetch."""
+
     def test_pubmed1(self):
-        '''Test parsing XML returned by EFetch, PubMed database (first test)
-        '''
+        """Test parsing XML returned by EFetch, PubMed database (first test)."""
         # In PubMed display PMIDs 12091962 and 9997 in xml retrieval mode
         # and abstract retrieval type.
         # To create the XML file, use
@@ -3373,8 +3336,7 @@ class EFetchTest(unittest.TestCase):
         self.assertEqual(record[1]["PubmedData"]["ArticleIdList"][0].attributes["IdType"], "pubmed")
 
     def test_pubmed2(self):
-        '''Test parsing XML returned by EFetch, PubMed database (second test)
-        '''
+        """Test parsing XML returned by EFetch, PubMed database (second test)."""
         # In PubMed display PMIDs in xml retrieval mode.
         # To create the XML file, use
         # >>> Bio.Entrez.efetch(db='pubmed', id="11748933,11700088",
@@ -3586,8 +3548,7 @@ class EFetchTest(unittest.TestCase):
         self.assertEqual(record[1]["PubmedData"]["ArticleIdList"][2].attributes["IdType"], "pii")
 
     def test_omim(self):
-        '''Test parsing XML returned by EFetch, OMIM database
-        '''
+        """Test parsing XML returned by EFetch, OMIM database."""
         # In OMIM show the full record for MIM number 601100 as XML
         # To create the XML file, use
         # >>> Bio.Entrez.efetch(db="omim", id="601100", retmode='xml',
@@ -3763,8 +3724,7 @@ class EFetchTest(unittest.TestCase):
         self.assertEqual(record[0]["Mim-entry_nucleotideLinks"]["Mim-link"]["Mim-link_numRelevant"], "0")
 
     def test_taxonomy(self):
-        '''Test parsing XML returned by EFetch, Taxonomy database
-        '''
+        """Test parsing XML returned by EFetch, Taxonomy database."""
         # Access the Taxonomy database using efetch.
         # To create the XML file, use
         # >>> Bio.Entrez.efetch(db="taxonomy", id="9685", retmode="xml")
@@ -3871,8 +3831,7 @@ class EFetchTest(unittest.TestCase):
         self.assertEqual(record[0]["PubDate"], "1993/07/26")
 
     def test_nucleotide1(self):
-        '''Test parsing XML returned by EFetch, Nucleotide database (first test)
-        '''
+        """Test parsing XML returned by EFetch, Nucleotide database (first test)."""
         # Access the nucleotide database using efetch.
         # To create the XML file, use
         # >>> Bio.Entrez.efetch(db='nucleotide', id=5, retmode='xml')
@@ -3993,8 +3952,7 @@ class EFetchTest(unittest.TestCase):
         self.assertEqual(record[0]["GBSeq_sequence"], "ccagcgctcgtcttgctgttggggtttctctgccacgttgctatcgcaggacgaacctgccccaagccagatgagctaccgttttccacggtggttccactgaaacggacctatgagcccggggagcagatagtcttctcctgccagccgggctacgtgtcccggggagggatccggcggtttacatgcccgctcacaggactctggcccatcaacacgctgaaatgcatgcccagagtatgtccttttgctgggatcttagaaaacggaacggtacgctatacaacgtttgagtatcccaacaccatcagcttttcttgccacacggggttttatctgaaaggagctagttctgcaaaatgcactgaggaagggaagtggagcccagaccttcctgtctgtgcccctataacctgccctccaccacccatacccaa [...]
 
     def test_nucleotide2(self):
-        '''Test parsing XML returned by EFetch, Nucleotide database (second test)
-        '''
+        """Test parsing XML returned by EFetch, Nucleotide database (second test)."""
         # Access the nucleotide database using efetch.
         # To create the XML file, use
         # >>> Bio.Entrez.efetch(db='nucleotide', id=5,
@@ -4021,8 +3979,7 @@ class EFetchTest(unittest.TestCase):
         self.assertEqual(record[1]["TSeq_sequence"], "PALVLLLGFLCHVAIAGRTCPKPDELPFSTVVPLKRTYEPGEQIVFSCQPGYVSRGGIRRFTCPLTGLWPINTLKCMPRVCPFAGILENGTVRYTTFEYPNTISFSCHTGFYLKGASSAKCTEEGKWSPDLPVCAPITCPPPPIPKFASLSVYKPLAGNNSFYGSKAVFKCLPHHAMFGNDTVTCTEHGNWTQLPECREVRCPFPSRPDNGFVNHPANPVLYYKDTATFGCHETYSLDGPEEVECSKFGNWSAQPSCKASCKLSIKRATVIYEGERVAIQNKFKNGMLHGQKVSFFCKHKEKKCSYTEDAQCIDGTIEIPKCFKEHSSLAFWKTDASDVKPC")
 
     def test_protein(self):
-        '''Test parsing XML returned by EFetch, Protein database
-        '''
+        """Test parsing XML returned by EFetch, Protein database."""
         # Access the protein database using efetch.
         # To create the XML file, use
         # >>> Bio.Entrez.efetch(db='protein', id=8, rettype='gp', retmode='xml')
@@ -4112,8 +4069,7 @@ class EFetchTest(unittest.TestCase):
         self.assertEqual(record[0]["GBSeq_sequence"], "mrtpmllallalatlclagradakpgdaesgkgaafvskqegsevvkrlrryldhwlgapapypdplepkrevcelnpdcdeladhigfqeayrrfygpv")
 
     def test_genbank(self):
-        '''Test error handling when presented with GenBank non-XML data
-        '''
+        """Test error handling when presented with GenBank non-XML data."""
         # Access the nucleotide database using efetch, but return the data
         # in GenBank format.
         # To create the GenBank file, use
@@ -4126,8 +4082,7 @@ class EFetchTest(unittest.TestCase):
             self.assertRaises(Parser.NotXMLError, next, iterator)
 
     def test_fasta(self):
-        '''Test error handling when presented with Fasta non-XML data
-        '''
+        """Test error handling when presented with Fasta non-XML data."""
         from Bio.Entrez import Parser
         with open('Fasta/wisteria.nu', "rb") as handle:
             self.assertRaises(Parser.NotXMLError, Entrez.read, handle)
@@ -4136,8 +4091,7 @@ class EFetchTest(unittest.TestCase):
             self.assertRaises(Parser.NotXMLError, next, iterator)
 
     def test_pubmed_html(self):
-        '''Test error handling when presented with HTML (so XML-like) data
-        '''
+        """Test error handling when presented with HTML (so XML-like) data."""
         # To create the HTML file, use
         # >>> Bio.Entrez.efetch(db="pubmed", id="19304878")
         from Bio.Entrez import Parser
@@ -4149,8 +4103,7 @@ class EFetchTest(unittest.TestCase):
             self.assertRaises(Parser.NotXMLError, next, records)
 
     def test_xml_without_declaration(self):
-        '''Test error handling for a missing XML declaration
-        '''
+        """Test error handling for a missing XML declaration."""
         # To create the XML file, use
         # >>> Bio.Entrez.efetch(db="journals",id="2830,6011,7473",retmode='xml')
         from Bio.Entrez import Parser
@@ -4162,7 +4115,7 @@ class EFetchTest(unittest.TestCase):
             self.assertRaises(Parser.NotXMLError, next, records)
 
     def test_truncated_xml(self):
-        """Test error handling for a truncated XML declaration"""
+        """Test error handling for a truncated XML declaration."""
         from Bio.Entrez.Parser import CorruptedXMLError
         from Bio._py3k import StringIO
         truncated_xml = """<?xml version="1.0"?>
diff --git a/Tests/test_GAQueens.py b/Tests/test_GAQueens.py
index c658837..93ce493 100644
--- a/Tests/test_GAQueens.py
+++ b/Tests/test_GAQueens.py
@@ -285,7 +285,7 @@ class QueensCrossover(object):
                                                     make_best_larger=0)
 
             assert len(best_1) + len(best_2) == len(rest_1) + len(rest_2), \
-                   "Did not preserve genome length!"
+                "Did not preserve genome length!"
 
             new_org_1.genome = best_1 + best_2
             new_org_2.genome = rest_1 + rest_2
@@ -326,8 +326,8 @@ class QueensCrossover(object):
         # will overridden right away
         best_fitness = [0, 0, -1]
         for start_index in range(len(genome) - region_size):
-            region_fitness = \
-             self._fitness_calc(genome[start_index: start_index + region_size])
+            region_fitness = self._fitness_calc(
+                genome[start_index: start_index + region_size])
 
             if region_fitness > best_fitness[2]:
                 best_fitness = [start_index, start_index + region_size,
diff --git a/Tests/test_GenBank.py b/Tests/test_GenBank.py
index 2157329..a798eda 100644
--- a/Tests/test_GenBank.py
+++ b/Tests/test_GenBank.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 # Copyright 2001-2004 by Brad Chapman.  All rights reserved.
-# Revisions copyright 2007-2013 by Peter Cock. All rights reserved.
+# Revisions copyright 2007-2016 by Peter Cock. All rights reserved.
 # Revisions copyright 2013 by Kai Blin. All rights reserved.
 # This code is part of the Biopython distribution and governed by its
 # license.  Please see the LICENSE file that should have been included
@@ -96,7 +96,7 @@ for parser in all_parsers:
                         print("References*")
                         for reference in cur_record.annotations[ann_key]:
                             print(str(reference))
-                print("Feaures")
+                print("Features")
                 for feature in cur_record.features:
                     print(feature)
                     if isinstance(_get_base_alphabet(cur_record.seq.alphabet),
diff --git a/Tests/test_GenBank_unittest.py b/Tests/test_GenBank_unittest.py
index d23f4d9..5dd2007 100644
--- a/Tests/test_GenBank_unittest.py
+++ b/Tests/test_GenBank_unittest.py
@@ -1,5 +1,5 @@
 # Copyright 2013 by Kai Blin.
-# Revisions copyright 2015 by Peter Cock.
+# Revisions copyright 2015-2016 by Peter Cock.
 # This code is part of the Biopython distribution and governed by its
 # license.  Please see the LICENSE file that should have been included
 # as part of this package.
@@ -9,38 +9,50 @@ import warnings
 from os import path
 
 from Bio import BiopythonParserWarning
+from Bio import BiopythonWarning
 from Bio import GenBank
 from Bio import SeqIO
+from Bio.SeqRecord import SeqRecord
+from Bio.Seq import Seq
+from Bio.Alphabet import generic_dna
+from Bio._py3k import StringIO
 
 
 class GenBankTests(unittest.TestCase):
+    """GenBank tests."""
+
     def test_invalid_product_line_raises_value_error(self):
-        """Test GenBank parsing invalid product line raises ValueError"""
+        """Parsing invalid product line."""
         def parse_invalid_product_line():
             rec = SeqIO.read(path.join('GenBank', 'invalid_product.gb'),
                              'genbank')
         self.assertRaises(ValueError, parse_invalid_product_line)
 
     def test_genbank_read(self):
+        """GenBank.read(...) simple test."""
         with open(path.join("GenBank", "NC_000932.gb")) as handle:
             record = GenBank.read(handle)
         self.assertEqual(['NC_000932'], record.accession)
 
     def test_genbank_read_multirecord(self):
+        """GenBank.read(...) error on multiple record input."""
         with open(path.join("GenBank", "cor6_6.gb")) as handle:
             self.assertRaises(ValueError, GenBank.read, handle)
 
     def test_genbank_read_invalid(self):
+        """GenBank.read(...) error on invalid file (e.g. FASTA file)."""
         with open(path.join("GenBank", "NC_000932.faa")) as handle:
             self.assertRaises(ValueError, GenBank.read, handle)
 
     def test_genbank_read_no_origin_no_end(self):
+        """GenBank.read(...) error on malformed file."""
         with open(path.join("GenBank", "no_origin_no_end.gb")) as handle:
             self.assertRaises(ValueError, GenBank.read, handle)
 
     # Evil hack with 000 to manipulate sort order to ensure this is tested
     # first (otherwise something silences the warning)
     def test_000_genbank_bad_loc_wrap_warning(self):
+        """Feature line wrapping warning."""
         with warnings.catch_warnings():
             warnings.simplefilter("error", BiopythonParserWarning)
             with open(path.join("GenBank", "bad_loc_wrap.gb")) as handle:
@@ -48,12 +60,14 @@ class GenBankTests(unittest.TestCase):
                 try:
                     record = GenBank.read(handle)
                 except BiopythonParserWarning as e:
-                    self.assertEqual(str(e), "Non-standard feature line wrapping (didn't break on comma)?")
+                    self.assertEqual(str(e),
+                                     "Non-standard feature line wrapping (didn't break on comma)?")
                 else:
                     self.assertTrue(False, "Expected specified BiopythonParserWarning here.")
 
     # Similar hack as we also want to catch that warning here
     def test_001_negative_location_warning(self):
+        """Un-parsable feature location warning."""
         with warnings.catch_warnings():
             warnings.simplefilter("error", BiopythonParserWarning)
             try:
@@ -64,6 +78,7 @@ class GenBankTests(unittest.TestCase):
                 self.assertTrue(False, "Expected specified BiopythonParserWarning here.")
 
     def test_genbank_bad_loc_wrap_parsing(self):
+        """Bad location wrapping."""
         with warnings.catch_warnings():
             warnings.simplefilter("ignore", BiopythonParserWarning)
             with open(path.join("GenBank", "bad_loc_wrap.gb")) as handle:
@@ -73,12 +88,14 @@ class GenBankTests(unittest.TestCase):
                 self.assertEqual(loc, "join(3462..3615,3698..3978,4077..4307,4408..4797,4876..5028,5141..5332)")
 
     def test_negative_location(self):
+        """Negative feature locations."""
         with warnings.catch_warnings():
             warnings.simplefilter("ignore", BiopythonParserWarning)
             rec = SeqIO.read(path.join("GenBank", "negative_location.gb"), "genbank")
             self.assertEqual(None, rec.features[-1].location)
 
     def test_dot_lineage(self):
+        """Missing taxonomy lineage."""
         with warnings.catch_warnings():
             warnings.simplefilter("ignore", BiopythonParserWarning)
             rec = SeqIO.read("GenBank/bad_loc_wrap.gb", "genbank")
@@ -121,10 +138,11 @@ class GenBankTests(unittest.TestCase):
         self.assertTrue("XX\nPR   Project:PRJNA16232;\nXX\n" in embl, embl)
 
     def test_structured_comment_parsing(self):
+        """Structued comment parsing."""
         # GISAID_EpiFlu(TM)Data, HM138502.gbk has both 'comment' and 'structured_comment'
         record = SeqIO.read(path.join('GenBank', 'HM138502.gbk'), 'genbank')
         self.assertEqual(record.annotations['comment'],
-            "Swine influenza A (H1N1) virus isolated during human swine flu\noutbreak of 2009.")
+                         "Swine influenza A (H1N1) virus isolated during human swine flu\noutbreak of 2009.")
         self.assertEqual(record.annotations['structured_comment']['GISAID_EpiFlu(TM)Data']['Lineage'], 'swl')
         self.assertEqual(len(record.annotations['structured_comment']['GISAID_EpiFlu(TM)Data']), 3)
         # FluData structured comment
@@ -143,6 +161,89 @@ class GenBankTests(unittest.TestCase):
                          'reference sequence was derived from AP000423.\n'
                          'COMPLETENESS: full length.')
 
+    def test_locus_line_topogoly(self):
+        """Test if chromosome topology is conserved"""
+        record = SeqIO.read('GenBank/DS830848.gb', 'genbank')
+        self.assertEqual(record.annotations['topology'], 'linear')
+        out_handle = StringIO()
+        SeqIO.write([record], out_handle, 'genbank')
+        first_line = out_handle.getvalue().split('\n')[0]
+        # TODO - Use self.assertIn once drop Python 2.6
+        # self.assertIn('linear', first_line)
+        self.assertTrue(" linear " in first_line)
+        with open('GenBank/DS830848.gb', 'r') as fh:
+            orig_first_line = fh.readline().strip()
+        self.assertEqual(first_line, orig_first_line)
+
+    def test_long_names(self):
+        """Various GenBank names which push the column based LOCUS line."""
+        original = SeqIO.read("GenBank/iro.gb", "gb")
+        self.assertEqual(len(original), 1326)
+        for name, seq_len, ok in [
+                ("short", 1, True),
+                ("max_length_of_16", 1000, True),
+                ("overly_long_at_17", 1000, True),
+                ("excessively_long_at_22", 99999, True),
+                ("excessively_long_at_22", 100000, False),
+                ("pushing_the_limits_at_24", 999, True),
+                ("pushing_the_limits_at_24", 1000, False),
+                ("longest_possible_len_of_26", 10, False),  # 2 digits
+                ("longest_possible_len_of_26", 9, True),  # 1 digit
+                ]:
+            # Make the length match the desired target
+            record = original[:]
+            # TODO - Implement Seq * int
+            record.seq = Seq("N" * seq_len, original.seq.alphabet)
+            # Set the identifer to the desired name
+            record.id = record.name = name
+            # Attempt to output the record...
+            if not ok:
+                # e.g. ValueError: Locus identifier 'excessively_long_at_22' is too long
+                self.assertRaises(ValueError, record.format, "gb")
+                continue
+            with warnings.catch_warnings():
+                # e.g. BiopythonWarning: Stealing space from length field to
+                # allow long name in LOCUS line
+                warnings.simplefilter("ignore", BiopythonWarning)
+                # output = record.format("gb")
+                handle = StringIO()
+                self.assertEqual(1, SeqIO.write(record, handle, "gb"))
+            handle.seek(0)
+            line = handle.readline()
+            self.assertTrue(" %s " % name in line, line)
+            self.assertTrue(" %i bp " % seq_len in line, line)
+            name_and_length = line[12:40]
+            self.assertEqual(name_and_length.split(), [name, str(seq_len)], line)
+            handle.seek(0)
+            with warnings.catch_warnings():
+                # e.g. BiopythonParserWarning: GenBank LOCUS line
+                # identifier over 16 characters
+                warnings.simplefilter("ignore", BiopythonWarning)
+                new = SeqIO.read(handle, "gb")
+            self.assertEqual(name, new.name)
+            self.assertEqual(seq_len, len(new))
+
+
+class OutputTests(unittest.TestCase):
+    """GenBank output tests."""
+
+    def test_mad_dots(self):
+        """Writing and reading back accesssion.version variants."""
+        for identifier in ["example",
+                           "example.1a",
+                           "example.1.2",
+                           "example.1-2",
+                           ]:
+            old = SeqRecord(Seq("ACGT", generic_dna),
+                            id=identifier,
+                            name=identifier,
+                            description="mad dots")
+            new = SeqIO.read(StringIO(old.format("gb")), "gb")
+            self.assertEqual(old.id, new.id)
+            self.assertEqual(old.name, new.name)
+            self.assertEqual(old.description, new.description)
+            self.assertEqual(old.seq, new.seq)
+
 
 if __name__ == "__main__":
     runner = unittest.TextTestRunner(verbosity=2)
diff --git a/Tests/test_KGML_nographics.py b/Tests/test_KGML_nographics.py
index eb11452..2240a78 100644
--- a/Tests/test_KGML_nographics.py
+++ b/Tests/test_KGML_nographics.py
@@ -51,23 +51,23 @@ class KGMLPathwayTest(unittest.TestCase):
                                  (81, 72, 8, 1),
                                  os.path.join("KEGG", "map03070.png"),
                                  True)]
-        # A list of KO IDs that we're going to use to modify pathway 
-        # appearance. These are KO IDs for reactions that take part in ko00020, 
+        # A list of KO IDs that we're going to use to modify pathway
+        # appearance. These are KO IDs for reactions that take part in ko00020,
         # the TCA cycle
         self.ko_ids = \
-            set(['ko:K00239','ko:K00240','ko:K00241','ko:K00242','ko:K00244',
-                 'ko:K00245','ko:K00246','ko:K00247','ko:K00174','ko:K00175',
-                 'ko:K00177','ko:K00176','ko:K00382','ko:K00164','ko:K00164',
-                 'ko:K00658','ko:K01902','ko:K01903','ko:K01899','ko:K01900',
-                 'ko:K01899','ko:K01900','ko:K00031','ko:K00030','ko:K00031',
-                 'ko:K01648','ko:K00234','ko:K00235','ko:K00236','ko:K00237',
-                 'ko:K01676','ko:K01677','ko:K01678','ko:K01679','ko:K01681',
-                 'ko:K01682','ko:K01681','ko:K01682','ko:K01647','ko:K00025',
-                 'ko:K00026','ko:K00024','ko:K01958','ko:K01959','ko:K01960',
-                 'ko:K00163','ko:K00161','ko:K00162','ko:K00163','ko:K00161',
-                 'ko:K00162','ko:K00382','ko:K00627','ko:K00169','ko:K00170',
-                 'ko:K00172','ko:K00171','ko:K01643','ko:K01644','ko:K01646',
-                 'ko:K01610','ko:K01596'])
+            set(['ko:K00239', 'ko:K00240', 'ko:K00241', 'ko:K00242', 'ko:K00244',
+                 'ko:K00245', 'ko:K00246', 'ko:K00247', 'ko:K00174', 'ko:K00175',
+                 'ko:K00177', 'ko:K00176', 'ko:K00382', 'ko:K00164', 'ko:K00164',
+                 'ko:K00658', 'ko:K01902', 'ko:K01903', 'ko:K01899', 'ko:K01900',
+                 'ko:K01899', 'ko:K01900', 'ko:K00031', 'ko:K00030', 'ko:K00031',
+                 'ko:K01648', 'ko:K00234', 'ko:K00235', 'ko:K00236', 'ko:K00237',
+                 'ko:K01676', 'ko:K01677', 'ko:K01678', 'ko:K01679', 'ko:K01681',
+                 'ko:K01682', 'ko:K01681', 'ko:K01682', 'ko:K01647', 'ko:K00025',
+                 'ko:K00026', 'ko:K00024', 'ko:K01958', 'ko:K01959', 'ko:K01960',
+                 'ko:K00163', 'ko:K00161', 'ko:K00162', 'ko:K00163', 'ko:K00161',
+                 'ko:K00162', 'ko:K00382', 'ko:K00627', 'ko:K00169', 'ko:K00170',
+                 'ko:K00172', 'ko:K00171', 'ko:K01643', 'ko:K01644', 'ko:K01646',
+                 'ko:K01610', 'ko:K01596'])
 
     def tearDown(self):
         for p in self.data:
diff --git a/Tests/test_MMCIF.py b/Tests/test_MMCIF.py
index a062be9..43dacf4 100644
--- a/Tests/test_MMCIF.py
+++ b/Tests/test_MMCIF.py
@@ -174,7 +174,7 @@ class ParseReal(unittest.TestCase):
         parser = MMCIFParser(QUIET=1)
         with warnings.catch_warnings():
             warnings.simplefilter('ignore', PDBConstructionWarning)
-            structure = parser.get_structure("example", "PDB/4zhl.cif")
+            structure = parser.get_structure("example", "PDB/4ZHL.cif")
         for ppbuild in [PPBuilder(), CaPPBuilder()]:
             # First try allowing non-standard amino acids,
             polypeptides = ppbuild.build_peptides(structure[0], False)
diff --git a/Tests/test_NCBITextParser.py b/Tests/test_NCBITextParser.py
index eb561aa..bce8a83 100644
--- a/Tests/test_NCBITextParser.py
+++ b/Tests/test_NCBITextParser.py
@@ -14228,10 +14228,10 @@ class TestNCBITextParser(unittest.TestCase):
         descrs = [
         ("sp|P85309.2|CASPD_HPVKA RecName: Full=Capsid protein; AltName: F...", 152, 8e-35),
         ("sp|P83664.2|CAPSD_HPVCO RecName: Full=Capsid protein; AltName: F...", 146, 6e-33),
-        ("gb|AAB03575.1| nucleoprotein",                                        146, 6e-33),
-        ("gb|ABH05070.1| putative nucleocapsid protein [European mountain ...",  83, 8e-14),
-        ("gb|AAW12704.1| nucleoprotein [High Plains virus]",                     73, 8e-11),
-        ("gb|AAW12703.1| nucleoprotein [High Plains virus]",                     73, 8e-11),
+        ("gb|AAB03575.1| nucleoprotein", 146, 6e-33),
+        ("gb|ABH05070.1| putative nucleocapsid protein [European mountain ...", 83, 8e-14),
+        ("gb|AAW12704.1| nucleoprotein [High Plains virus]", 73, 8e-11),
+        ("gb|AAW12703.1| nucleoprotein [High Plains virus]", 73, 8e-11),
         ]
         for (a, b) in zip(record.descriptions, descrs):
             self.assertEqual((a.title, a.score, a.e), b)
diff --git a/Tests/test_NCBIXML.py b/Tests/test_NCBIXML.py
index ccf1a9c..6b6c631 100644
--- a/Tests/test_NCBIXML.py
+++ b/Tests/test_NCBIXML.py
@@ -1703,7 +1703,7 @@ class TestNCBIXML(unittest.TestCase):
         self.assertEqual(record.database, "nr")
         self.assertEqual(record.num_sequences_in_database, 8994603)
         self.assertEqual(record.database_sequences, 8994603)
-        #self.assertEqual(record.database_length, 3078807967)
+        # self.assertEqual(record.database_length, 3078807967)
         self.assertEqual(record.database_length, -1216159329)  # NCBI bug!
         self.assertEqual(len(record.descriptions), 10)
         self.assertEqual(len(record.alignments), 10)
diff --git a/Tests/test_NCBI_BLAST_tools.py b/Tests/test_NCBI_BLAST_tools.py
index 511908a..a90d102 100644
--- a/Tests/test_NCBI_BLAST_tools.py
+++ b/Tests/test_NCBI_BLAST_tools.py
@@ -68,7 +68,8 @@ for folder in likely_dirs:
         del exe_name, name
 
 # To avoid the name clash with legacy BLAST, Debian introduced rpsblast+ alias
-wanted.remove("rpsblast+")
+if "rpsblast+" in wanted:
+    wanted.remove("rpsblast+")
 if "rpsblast+" in exe_names:
     exe_names["rpsblast"] = exe_names["rpsblast+"]
     del exe_names["rpsblast+"]
diff --git a/Tests/test_Nexus.py b/Tests/test_Nexus.py
index e8cc7ec..46c5430 100755
--- a/Tests/test_Nexus.py
+++ b/Tests/test_Nexus.py
@@ -320,7 +320,7 @@ usertype matrix_test stepmatrix=5
 [T]    2.43     2.12     2.31      .       2.14     
 [-]    2.43     2.14     2.31     2.14      .       
 ;
-""")
+""")  # noqa for pep8 W291 trailing whitespace
 
     def test_TreeTest1(self):
         """Test Tree module."""
diff --git a/Tests/test_PAML_codeml.py b/Tests/test_PAML_codeml.py
index cca7964..c7cec38 100644
--- a/Tests/test_PAML_codeml.py
+++ b/Tests/test_PAML_codeml.py
@@ -541,7 +541,6 @@ class ModTest(unittest.TestCase):
                              version_msg)
 
 
-
 if __name__ == "__main__":
     runner = unittest.TextTestRunner(verbosity=2)
     unittest.main(testRunner=runner)
diff --git a/Tests/test_PAML_yn00.py b/Tests/test_PAML_yn00.py
index 1291b84..9ef6030 100644
--- a/Tests/test_PAML_yn00.py
+++ b/Tests/test_PAML_yn00.py
@@ -86,10 +86,10 @@ class ModTest(unittest.TestCase):
             self.yn00.run)
 
     # def testPamlErrorsCaught(self):
-        # self.yn00.alignment = self.align_file
-        # self.yn00.out_file = self.out_file
-        # self.assertRaises((EnvironmentError, PamlError),
-            # self.yn00.run)
+    #     self.yn00.alignment = self.align_file
+    #     self.yn00.out_file = self.out_file
+    #     self.assertRaises((EnvironmentError, PamlError),
+    #                        self.yn00.run)
 
     def testCtlFileValidOnRun(self):
         self.yn00.alignment = self.align_file
diff --git a/Tests/test_PDB.py b/Tests/test_PDB.py
index aa3f64c..8b5b5c1 100644
--- a/Tests/test_PDB.py
+++ b/Tests/test_PDB.py
@@ -13,6 +13,7 @@
 from __future__ import print_function
 
 import os
+import sys
 import tempfile
 import unittest
 import warnings
@@ -37,6 +38,7 @@ from Bio.PDB.PDBExceptions import PDBConstructionException, PDBConstructionWarni
 from Bio.PDB import rotmat, Vector
 from Bio.PDB import Residue, Atom
 from Bio.PDB import make_dssp_dict
+from Bio.PDB import DSSP
 from Bio.PDB.NACCESS import process_asa_data, process_rsa_data
 
 
@@ -92,7 +94,7 @@ class A_ExceptionTest(unittest.TestCase):
         s = parser.get_structure("example", StringIO(data))
         data = "ATOM      9  N   ASP A 152      21.ish  34.953  27.691  1.00 19.26           N\n"
         self.assertRaises(PDBConstructionException,
-                parser.get_structure, "example", StringIO(data))
+                          parser.get_structure, "example", StringIO(data))
 
     def test_4_occupancy(self):
         """Parse file with missing occupancy"""
@@ -122,16 +124,16 @@ class HeaderTests(unittest.TestCase):
         self.assertAlmostEqual(struct.header['resolution'], 1.7)
         # Case-insensitive string comparisons
         known_strings = {
-                'author': 'T.R.Gamble,S.Yoo,F.F.Vajdos,U.K.Von Schwedler,D.K.Worthylake,H.Wang,J.P.Mccutcheon,W.I.Sundquist,C.P.Hill',
-                'deposition_date': '1998-03-27',
-                'head': 'viral protein',
-                'journal': 'AUTH   T.R.GAMBLE,S.YOO,F.F.VAJDOS,U.K.VON SCHWEDLER,AUTH 2 D.K.WORTHYLAKE,H.WANG,J.P.MCCUTCHEON,W.I.SUNDQUIST,AUTH 3 C.P.HILLTITL   STRUCTURE OF THE CARBOXYL-TERMINAL DIMERIZATIONTITL 2 DOMAIN OF THE HIV-1 CAPSID PROTEIN.REF    SCIENCE                       V. 278   849 1997REFN                   ISSN 0036-8075PMID   9346481DOI    10.1126/SCIENCE.278.5339.849',
-                'journal_reference': 't.r.gamble,s.yoo,f.f.vajdos,u.k.von schwedler, d.k.worthylake,h.wang,j.p.mccutcheon,w.i.sundquist, c.p.hill structure of the carboxyl-terminal dimerization domain of the hiv-1 capsid protein. science v. 278 849 1997 issn 0036-8075 9346481 10.1126/science.278.5339.849 ',
-                'keywords': 'capsid, core protein, hiv, c-terminal domain, viral protein',
-                'name': ' hiv capsid c-terminal domain',
-                'release_date': '1998-10-14',
-                'structure_method': 'x-ray diffraction',
-                }
+            'author': 'T.R.Gamble,S.Yoo,F.F.Vajdos,U.K.Von Schwedler,D.K.Worthylake,H.Wang,J.P.Mccutcheon,W.I.Sundquist,C.P.Hill',
+            'deposition_date': '1998-03-27',
+            'head': 'viral protein',
+            'journal': 'AUTH   T.R.GAMBLE,S.YOO,F.F.VAJDOS,U.K.VON SCHWEDLER,AUTH 2 D.K.WORTHYLAKE,H.WANG,J.P.MCCUTCHEON,W.I.SUNDQUIST,AUTH 3 C.P.HILLTITL   STRUCTURE OF THE CARBOXYL-TERMINAL DIMERIZATIONTITL 2 DOMAIN OF THE HIV-1 CAPSID PROTEIN.REF    SCIENCE                       V. 278   849 1997REFN                   ISSN 0036-8075PMID   9346481DOI    10.1126/SCIENCE.278.5339.849',
+            'journal_reference': 't.r.gamble,s.yoo,f.f.vajdos,u.k.von schwedler, d.k.worthylake,h.wang,j.p.mccutcheon,w.i.sundquist, c.p.hill structure of the carboxyl-terminal dimerization domain of the hiv-1 capsid protein. science v. 278 849 1997 issn 0036-8075 9346481 10.1126/science.278.5339.849 ',
+            'keywords': 'capsid, core protein, hiv, c-terminal domain, viral protein',
+            'name': ' hiv capsid c-terminal domain',
+            'release_date': '1998-10-14',
+            'structure_method': 'x-ray diffraction',
+        }
         for key, expect in known_strings.items():
             self.assertEqual(struct.header[key].lower(), expect.lower())
 
@@ -140,16 +142,16 @@ class HeaderTests(unittest.TestCase):
         parser = PDBParser()
         struct = parser.get_structure('2BEG', 'PDB/2BEG.pdb')
         known_strings = {
-                'author': 'T.Luhrs,C.Ritter,M.Adrian,D.Riek-Loher,B.Bohrmann,H.Dobeli,D.Schubert,R.Riek',
-                'deposition_date': '2005-10-24',
-                'head': 'protein fibril',
-                'journal': "AUTH   T.LUHRS,C.RITTER,M.ADRIAN,D.RIEK-LOHER,B.BOHRMANN,AUTH 2 H.DOBELI,D.SCHUBERT,R.RIEKTITL   3D STRUCTURE OF ALZHEIMER'S AMYLOID-{BETA}(1-42)TITL 2 FIBRILS.REF    PROC.NATL.ACAD.SCI.USA        V. 102 17342 2005REFN                   ISSN 0027-8424PMID   16293696DOI    10.1073/PNAS.0506723102",
-                'journal_reference': "t.luhrs,c.ritter,m.adrian,d.riek-loher,b.bohrmann, h.dobeli,d.schubert,r.riek 3d structure of alzheimer's amyloid-{beta}(1-42) fibrils. proc.natl.acad.sci.usa v. 102 17342 2005 issn 0027-8424 16293696 10.1073/pnas.0506723102 ",
-                'keywords': "alzheimer's, fibril, protofilament, beta-sandwich, quenched hydrogen/deuterium exchange, pairwise mutagenesis, protein fibril",
-                'name': " 3d structure of alzheimer's abeta(1-42) fibrils",
-                'release_date': '2005-11-22',
-                'structure_method': 'solution nmr',
-                }
+            'author': 'T.Luhrs,C.Ritter,M.Adrian,D.Riek-Loher,B.Bohrmann,H.Dobeli,D.Schubert,R.Riek',
+            'deposition_date': '2005-10-24',
+            'head': 'protein fibril',
+            'journal': "AUTH   T.LUHRS,C.RITTER,M.ADRIAN,D.RIEK-LOHER,B.BOHRMANN,AUTH 2 H.DOBELI,D.SCHUBERT,R.RIEKTITL   3D STRUCTURE OF ALZHEIMER'S AMYLOID-{BETA}(1-42)TITL 2 FIBRILS.REF    PROC.NATL.ACAD.SCI.USA        V. 102 17342 2005REFN                   ISSN 0027-8424PMID   16293696DOI    10.1073/PNAS.0506723102",
+            'journal_reference': "t.luhrs,c.ritter,m.adrian,d.riek-loher,b.bohrmann, h.dobeli,d.schubert,r.riek 3d structure of alzheimer's amyloid-{beta}(1-42) fibrils. proc.natl.acad.sci.usa v. 102 17342 2005 issn 0027-8424 16293696 10.1073/pnas.0506723102 ",
+            'keywords': "alzheimer's, fibril, protofilament, beta-sandwich, quenched hydrogen/deuterium exchange, pairwise mutagenesis, protein fibril",
+            'name': " 3d structure of alzheimer's abeta(1-42) fibrils",
+            'release_date': '2005-11-22',
+            'structure_method': 'solution nmr',
+        }
         for key, expect in known_strings.items():
             self.assertEqual(struct.header[key].lower(), expect.lower())
 
@@ -384,7 +386,7 @@ class ParseTest(unittest.TestCase):
                        (('W', 75, ' '), 1),
                        (('W', 77, ' '), 1),
                        ])
-            ]
+        ]
 
         for c_idx, chn in enumerate(chain_data):
             # Check chain ID and length
@@ -517,7 +519,7 @@ class ParseTest(unittest.TestCase):
             io.save(filename)
             # Check if there are lines besides 'ATOM', 'TER' and 'END'
             with open(filename, 'rU') as handle:
-                record_set = set([l[0:6] for l in handle])
+                record_set = set(l[0:6] for l in handle)
             record_set -= set(('ATOM  ', 'HETATM', 'MODEL ', 'ENDMDL', 'TER\n', 'END\n'))
             self.assertEqual(record_set, set())
         finally:
@@ -1081,6 +1083,21 @@ class CopyTests(unittest.TestCase):
             self.assertFalse(e.get_list()[0] is ee.get_list()[0])
 
 
+def eprint(*args, **kwargs):
+    '''Helper function that prints to stderr.'''
+    print(*args, file=sys.stderr, **kwargs)
+
+
+def will_it_float(s):
+    '''
+    Helper function that converts the input into a float if it is a number.
+    Otherwise if the input is a string it is returned as it is.'''
+    try:
+        return float(s)
+    except ValueError:
+        return(s)
+
+
 class DsspTests(unittest.TestCase):
     """Tests for DSSP parsing etc which don't need the binary tool.
 
@@ -1117,6 +1134,86 @@ class DsspTests(unittest.TestCase):
         # Check if all h-bond partner indices were successfully parsed.
         self.assertEqual((dssp_indices & hb_indices), hb_indices)
 
+    def test_DSSP_in_model_obj(self):
+        '''
+        Test that all the elements are added correctly to the xtra attribute of the input model object.
+        '''
+        p = PDBParser()
+        s = p.get_structure("example", "PDB/2BEG.pdb")
+        m = s[0]
+        # Read the DSSP data into the pdb object:
+        trash_var = DSSP(m, "PDB/2BEG.dssp", 'dssp', 'Sander', 'DSSP')
+        # Now compare the xtra attribute of the pdb object
+        # residue by residue with the pre-computed values:
+        i = 0
+        with open("PDB/dssp_xtra_Sander.txt", 'r') as fh_ref:
+            ref_lines = fh_ref.readlines()
+            for chain in m:
+                for res in chain:
+                    # Split the pre-computed values into a list:
+                    xtra_list_ref = ref_lines[i].rstrip().split('\t')
+                    # Then convert each element to float where possible:
+                    xtra_list_ref = list(map(will_it_float, xtra_list_ref))
+                    # The xtra attribute is a dict.
+                    # To compare with the pre-comouted values first sort according to keys:
+                    xtra_itemts = sorted(res.xtra.items(), key=lambda s: s[0])
+                    # Then extract the list of xtra values for the residue
+                    # and convert to floats where possible:
+                    xtra_list = [t[1] for t in xtra_itemts]
+                    xtra_list = list(map(will_it_float, xtra_list))
+                    # The reason for converting to float is, that casting a float to a string in python2.6
+                    # will include fewer decimals than python3 and an assertion error will be thrown.
+                    self.assertEqual(xtra_list, xtra_list_ref)
+                    i += 1
+
+    def test_DSSP_RSA(self):
+        """Tests the usage of different ASA tables."""
+        # Tests include Sander/default, Wilke and Miller
+        p = PDBParser()
+        # Sander/default:
+        s = p.get_structure("example", "PDB/2BEG.pdb")
+        m = s[0]
+        # Read the DSSP data into the pdb object:
+        trash_var = DSSP(m, "PDB/2BEG.dssp", 'dssp', 'Sander', 'DSSP')
+        # Then compare the RASA values for each residue with the pre-computed values:
+        i = 0
+        with open("PDB/Sander_RASA.txt", 'r') as fh_ref:
+            ref_lines = fh_ref.readlines()
+            for chain in m:
+                for res in chain:
+                    rasa_ref = float(ref_lines[i].rstrip())
+                    rasa = float(res.xtra['EXP_DSSP_RASA'])
+                    self.assertAlmostEqual(rasa, rasa_ref)
+                    i += 1
+
+        # Wilke (procedure similar as for the Sander values above):
+        s = p.get_structure("example", "PDB/2BEG.pdb")
+        m = s[0]
+        trash_var = DSSP(m, "PDB/2BEG.dssp", 'dssp', 'Wilke', 'DSSP')
+        i = 0
+        with open("PDB/Wilke_RASA.txt", 'r') as fh_ref:
+            ref_lines = fh_ref.readlines()
+            for chain in m:
+                for res in chain:
+                    rasa_ref = float(ref_lines[i].rstrip())
+                    rasa = float(res.xtra['EXP_DSSP_RASA'])
+                    self.assertAlmostEqual(rasa, rasa_ref)
+                    i += 1
+
+        # Miller (procedure similar as for the Sander values above):
+        s = p.get_structure("example", "PDB/2BEG.pdb")
+        m = s[0]
+        trash_var = DSSP(m, "PDB/2BEG.dssp", 'dssp', 'Miller', 'DSSP')
+        i = 0
+        with open("PDB/Miller_RASA.txt", 'r') as fh_ref:
+            ref_lines = fh_ref.readlines()
+            for chain in m:
+                for res in chain:
+                    rasa_ref = float(ref_lines[i].rstrip())
+                    rasa = float(res.xtra['EXP_DSSP_RASA'])
+                    self.assertAlmostEqual(rasa, rasa_ref)
+                    i += 1
+
 
 class NACCESSTests(unittest.TestCase):
     """Tests for NACCESS parsing etc which don't need the binary tool.
diff --git a/Tests/test_Phylo.py b/Tests/test_Phylo.py
index 3ce25df..1c8e111 100644
--- a/Tests/test_Phylo.py
+++ b/Tests/test_Phylo.py
@@ -93,33 +93,33 @@ class IOTests(unittest.TestCase):
         self.assertEqual(clade_a.name, 'foo')
         self.assertAlmostEqual(clade_a.branch_length, 0.1)
 
-
+    def test_phylo_read_extra(self):
         """Additional tests to check correct parsing"""
-        tree = Phylo.read(StringIO("(A:1, B:-2, (C:3, D:4):-2)"),'newick')
-        self.assertEqual(tree.distance('A'),1)
-        self.assertEqual(tree.distance('B'),-2)
-        self.assertEqual(tree.distance('C'),1)
-        self.assertEqual(tree.distance('D'),2)
-
-        tree = Phylo.read(StringIO("((A:1, B:-2):-5, (C:3, D:4):-2)"),'newick')
-        self.assertEqual(tree.distance('A'),-4)
-        self.assertEqual(tree.distance('B'),-7)
-        self.assertEqual(tree.distance('C'),1)
-        self.assertEqual(tree.distance('D'),2)
-
-        tree = Phylo.read(StringIO("((:1, B:-2):-5, (C:3, D:4):-2)"),'newick')
-        distances = {-4.0:1,-7.0:1,1:1,2:1}
+        tree = Phylo.read(StringIO("(A:1, B:-2, (C:3, D:4):-2)"), 'newick')
+        self.assertEqual(tree.distance('A'), 1)
+        self.assertEqual(tree.distance('B'), -2)
+        self.assertEqual(tree.distance('C'), 1)
+        self.assertEqual(tree.distance('D'), 2)
+
+        tree = Phylo.read(StringIO("((A:1, B:-2):-5, (C:3, D:4):-2)"), 'newick')
+        self.assertEqual(tree.distance('A'), -4)
+        self.assertEqual(tree.distance('B'), -7)
+        self.assertEqual(tree.distance('C'), 1)
+        self.assertEqual(tree.distance('D'), 2)
+
+        tree = Phylo.read(StringIO("((:1, B:-2):-5, (C:3, D:4):-2)"), 'newick')
+        distances = {-4.0: 1, -7.0: 1, 1: 1, 2: 1}
         for x in tree.get_terminals():
             entry = int(tree.distance(x))
             distances[entry] -= distances[entry]
-            self.assertEqual(distances[entry],0)
+            self.assertEqual(distances[entry], 0)
 
-        tree = Phylo.read(StringIO("((:\n1\n,\n B:-2):-5, (C:3, D:4):-2);"),'newick')
-        distances = {-4.0:1,-7.0:1,1:1,2:1}
+        tree = Phylo.read(StringIO("((:\n1\n,\n B:-2):-5, (C:3, D:4):-2);"), 'newick')
+        distances = {-4.0: 1, -7.0: 1, 1: 1, 2: 1}
         for x in tree.get_terminals():
             entry = int(tree.distance(x))
             distances[entry] -= distances[entry]
-            self.assertEqual(distances[entry],0)
+            self.assertEqual(distances[entry], 0)
 
     def test_format_branch_length(self):
         """Custom format string for Newick branch length serialization."""
@@ -232,7 +232,7 @@ class TreeTests(unittest.TestCase):
         for treefname, fmt in [(EX_APAF, 'phyloxml'),
                                (EX_BCL2, 'phyloxml'),
                                (EX_NEWICK, 'newick'),
-                              ]:
+                               ]:
             tree = Phylo.read(treefname, fmt)
             orig_tree_len = tree.total_branch_length()
             # Total branch length does not change
diff --git a/Tests/test_PhyloXML.py b/Tests/test_PhyloXML.py
index 31ff16b..9d7d1f3 100644
--- a/Tests/test_PhyloXML.py
+++ b/Tests/test_PhyloXML.py
@@ -104,65 +104,62 @@ class ParseTests(unittest.TestCase):
 
     test_shape_apaf = _test_shape_factory(EX_APAF,
             # lvl-2 clades, sub-clade counts, lvl-3 clades
-                ( ( (2, (2, 2)),
+                (((2, (2, 2)),
                     (2, (2, 2)),
                   ),
-                ),
+                 ),
             )
     test_shape_bcl2 = _test_shape_factory(EX_BCL2,
-                ( ( (2, (2, 2)),
+                (((2, (2, 2)),
                     (2, (2, 2)),
                   ),
-                ),
+                 ),
             )
     test_shape_phylo = _test_shape_factory(EX_PHYLO,
-                ( ( (2, (0, 0)),
+                (((2, (0, 0)),
                     (0, ()),
                   ),
-                  ( (2, (0, 0)),
+                  ((2, (0, 0)),
                     (0, ()),
-                  ),
-                  ( (2, (0, 0)),
+                   ),
+                  ((2, (0, 0)),
                     (0, ()),
-                  ),
-                  ( (2, (0, 0)),
+                   ),
+                  ((2, (0, 0)),
                     (0, ()),
-                  ),
-                  ( (2, (0, 0)),
+                   ),
+                  ((2, (0, 0)),
                     (0, ()),
-                  ),
-                  ( (2, (0, 0)),
+                   ),
+                  ((2, (0, 0)),
                     (0, ()),
-                  ),
-                  ( (2, (0, 0)),
+                   ),
+                  ((2, (0, 0)),
                     (0, ()),
-                  ),
-                  ( (2, (0, 0)),
+                   ),
+                  ((2, (0, 0)),
                     (0, ()),
-                  ),
-                  ( (2, (0, 0)),
+                   ),
+                  ((2, (0, 0)),
                     (0, ()),
-                  ),
-                  ( (0, ()),
+                   ),
+                  ((0, ()),
                     (2, (0, 0)),
-                  ),
-                  ( (3, (0, 0, 0)),
+                   ),
+                  ((3, (0, 0, 0)),
                     (0, ()),
-                  ),
-                  ( (2, (0, 0)),
+                   ),
+                  ((2, (0, 0)),
                     (0, ()),
-                  ),
-                  ( (2, (0, 0)),
+                   ),
+                  ((2, (0, 0)),
                     (0, ()),
-                  ),
-                ),
+                   ),
+                 ),
             )
     test_shape_dollo = _test_shape_factory(EX_DOLLO,
-                ( ( (2, (2, 2)),
-                    (2, (2, 2)),
-                  ),
-                ),
-            )
+                                           (((2, (2, 2)),
+                                             (2, (2, 2)),),),)
 
 
 class TreeTests(unittest.TestCase):
@@ -186,9 +183,11 @@ class TreeTests(unittest.TestCase):
         self.assertEqual(otr.tag, 'alignment')
         self.assertEqual(otr.namespace, 'http://example.org/align')
         self.assertEqual(len(otr.children), 3)
-        for child, name, value in zip(otr, ('A', 'B', 'C'), (
-          'acgtcgcggcccgtggaagtcctctcct', 'aggtcgcggcctgtggaagtcctctcct',
-          'taaatcgc--cccgtgg-agtccc-cct')):
+        for child, name, value in zip(otr,
+                                      ('A', 'B', 'C'),
+                                      ('acgtcgcggcccgtggaagtcctctcct',
+                                       'aggtcgcggcctgtggaagtcctctcct',
+                                       'taaatcgc--cccgtgg-agtccc-cct')):
             self.assertEqual(child.tag, 'seq')
             self.assertEqual(child.attributes['name'], name)
             self.assertEqual(child.value, value)
@@ -238,10 +237,10 @@ class TreeTests(unittest.TestCase):
         self.assertTrue(isinstance(bchars, PX.BinaryCharacters))
         self.assertEqual(bchars.type, 'parsimony inferred')
         for name, count, value in (
-                ('gained',  2, ['Cofilin_ADF', 'Gelsolin']),
-                ('lost',    0, []),
+                ('gained', 2, ['Cofilin_ADF', 'Gelsolin']),
+                ('lost', 0, []),
                 ('present', 2, ['Cofilin_ADF', 'Gelsolin']),
-                ('absent',  None, []),
+                ('absent', None, []),
                 ):
             self.assertEqual(getattr(bchars, name + '_count'), count)
             self.assertEqual(getattr(bchars, name), value)
@@ -570,13 +569,13 @@ class WriterTests(unittest.TestCase):
                 (ParseTests, [
                     'test_read_phylo', 'test_parse_phylo', 'test_shape_phylo']),
                 (TreeTests, [
-                    'test_Phyloxml',   'test_Other',
-                    'test_Phylogeny',  'test_Clade',
+                    'test_Phyloxml', 'test_Other',
+                    'test_Phylogeny', 'test_Clade',
                     'test_Annotation', 'test_CladeRelation',
-                    'test_Date',       'test_Distribution',
-                    'test_Events',     'test_Property',
-                    'test_Sequence',   'test_SequenceRelation',
-                    'test_Taxonomy',   'test_Uri',
+                    'test_Date', 'test_Distribution',
+                    'test_Events', 'test_Property',
+                    'test_Sequence', 'test_SequenceRelation',
+                    'test_Taxonomy', 'test_Uri',
                     ]),
                 ))
         finally:
@@ -635,11 +634,11 @@ class MethodTests(unittest.TestCase):
             domain_architecture=PX.DomainArchitecture(
                 length=50,
                 domains=[PX.ProteinDomain(*args) for args in (
-                    # value,   start,   end,    confidence
-                    ('FOO',     0,      5,      7.0e-26),
-                    ('BAR',     8,      13,     7.2e-117),
-                    ('A-OK',    21,     34,     2.4e-06),
-                    ('WD40',    40,     50,     0.3))],
+                    # value, start, end, confidence
+                    ('FOO', 0, 5, 7.0e-26),
+                    ('BAR', 8, 13, 7.2e-117),
+                    ('A-OK', 21, 34, 2.4e-06),
+                    ('WD40', 40, 50, 0.3))],
                 ))
         srec = pseq.to_seqrecord()
         # TODO: check seqrec-specific traits (see args)
diff --git a/Tests/test_Phylo_depend.py b/Tests/test_Phylo_matplotlib.py
similarity index 83%
rename from Tests/test_Phylo_depend.py
rename to Tests/test_Phylo_matplotlib.py
index d7d741b..6a046d8 100644
--- a/Tests/test_Phylo_depend.py
+++ b/Tests/test_Phylo_matplotlib.py
@@ -5,6 +5,11 @@
 
 """Unit tests for Bio.Phylo functions with external dependencies."""
 
+import unittest
+
+from Bio._py3k import StringIO
+from Bio import Phylo
+
 # Check for any missing dependencies at the top level so we can skip
 from Bio import MissingExternalDependencyError
 
@@ -24,26 +29,8 @@ try:
 except ImportError:
     # Can fail here with font problems
     raise MissingExternalDependencyError(
-            "Install matplotlib installation if you want to use Bio.Phylo._utils.")
-
-try:
-    import networkx
-except ImportError:
-    # We'll skip any tests requiring this below...
-    networkx = None
-
-try:
-    import pygraphviz
-except ImportError:
-    # We'll skip any tests requiring this below...
-    pygraphviz = None
-
-
-# OK, we can go ahead
-import unittest
-from Bio._py3k import StringIO
+            "Install matplotlib if you want to use Bio.Phylo._utils.")
 
-from Bio import Phylo
 
 # Example PhyloXML file
 EX_DOLLO = 'PhyloXML/o_tol_332_d_dollo.xml'
@@ -102,15 +89,6 @@ class UtilTests(unittest.TestCase):
         Phylo.draw_ascii(tree, file=handle, column_width=120)
         handle.close()
 
-    if networkx:
-        def test_to_networkx(self):
-            """Tree to Graph conversion, if networkx is available."""
-            tree = Phylo.read(EX_DOLLO, 'phyloxml')
-            G = Phylo.to_networkx(tree)
-            self.assertEqual(len(G.nodes()), 659)
-
-
-# ---------------------------------------------------------
 
 if __name__ == '__main__':
     runner = unittest.TextTestRunner(verbosity=2)
diff --git a/Tests/test_Phylo_networkx.py b/Tests/test_Phylo_networkx.py
new file mode 100644
index 0000000..f823316
--- /dev/null
+++ b/Tests/test_Phylo_networkx.py
@@ -0,0 +1,40 @@
+# Copyright (C) 2009 by Eric Talevich (eric.talevich at gmail.com)
+# This code is part of the Biopython distribution and governed by its
+# license. Please see the LICENSE file that should have been included
+# as part of this package.
+
+"""Unit tests for Bio.Phylo functions with external dependencies."""
+
+
+import unittest
+
+from Bio._py3k import StringIO
+from Bio import Phylo
+
+# Check for any missing dependencies at the top level so we can skip
+from Bio import MissingExternalDependencyError
+
+try:
+    import networkx
+except ImportError:
+    raise MissingExternalDependencyError(
+        "Install networkx if you wish to use it with Bio.Phylo")
+
+# Example PhyloXML file
+EX_DOLLO = 'PhyloXML/o_tol_332_d_dollo.xml'
+EX_APAF = 'PhyloXML/apaf.xml'
+
+
+class UtilTests(unittest.TestCase):
+    """Tests for various utility functions."""
+
+    def test_to_networkx(self):
+        """Tree to Graph conversion, if networkx is available."""
+        tree = Phylo.read(EX_DOLLO, 'phyloxml')
+        G = Phylo.to_networkx(tree)
+        self.assertEqual(len(G.nodes()), 659)
+
+
+if __name__ == '__main__':
+    runner = unittest.TextTestRunner(verbosity=2)
+    unittest.main(testRunner=runner)
diff --git a/Tests/test_PopGen_DFDist.py b/Tests/test_PopGen_DFDist.py
index d8b1426..1d99437 100644
--- a/Tests/test_PopGen_DFDist.py
+++ b/Tests/test_PopGen_DFDist.py
@@ -9,9 +9,15 @@ import os
 import shutil
 import tempfile
 import unittest
-from Bio.PopGen import FDist
-from Bio.PopGen.FDist import Controller
+import warnings
+
 from Bio import MissingExternalDependencyError
+from Bio import BiopythonDeprecationWarning
+
+with warnings.catch_warnings():
+    warnings.simplefilter("ignore", BiopythonDeprecationWarning)
+    from Bio.PopGen import FDist
+    from Bio.PopGen.FDist import Controller
 
 # Tests DFDist related code. Note: this case requires Dfdist (four binaries)
 # test_PopGen_FDist_nodepend tests code that does not require fdist2 or Dfdist
diff --git a/Tests/test_PopGen_FDist.py b/Tests/test_PopGen_FDist.py
index 7c48392..0d3a8f4 100644
--- a/Tests/test_PopGen_FDist.py
+++ b/Tests/test_PopGen_FDist.py
@@ -9,9 +9,16 @@ import os
 import shutil
 import tempfile
 import unittest
-from Bio.PopGen import FDist
-from Bio.PopGen.FDist import Controller
+import warnings
+
 from Bio import MissingExternalDependencyError
+from Bio import BiopythonDeprecationWarning
+
+with warnings.catch_warnings():
+    warnings.simplefilter("ignore", BiopythonDeprecationWarning)
+    from Bio.PopGen import FDist
+    from Bio.PopGen.FDist import Controller
+
 
 # Tests FDist2 related code. Note: this case requires fdist2 (four binaries)
 # test_PopGen_FDist_nodepend tests code that does not require fdist2 or Dfdist
diff --git a/Tests/test_PopGen_FastSimCoal.py b/Tests/test_PopGen_FastSimCoal.py
index 28f74f1..6048bbf 100644
--- a/Tests/test_PopGen_FastSimCoal.py
+++ b/Tests/test_PopGen_FastSimCoal.py
@@ -3,11 +3,17 @@
 # license.  Please see the LICENSE file that should have been included
 # as part of this package.
 
-from Bio.PopGen.SimCoal.Controller import FastSimCoalController
-from Bio import MissingExternalDependencyError
 import os
 import shutil
 import unittest
+import warnings
+
+from Bio import MissingExternalDependencyError
+from Bio import BiopythonDeprecationWarning
+
+with warnings.catch_warnings():
+    warnings.simplefilter("ignore", BiopythonDeprecationWarning)
+    from Bio.PopGen.SimCoal.Controller import FastSimCoalController
 
 # Tests fastsimcoal related code. Note: this case requires fastsimcoal 2.51
 
diff --git a/Tests/test_PopGen_SimCoal.py b/Tests/test_PopGen_SimCoal.py
index 9c1d703..d26ad3e 100644
--- a/Tests/test_PopGen_SimCoal.py
+++ b/Tests/test_PopGen_SimCoal.py
@@ -5,9 +5,15 @@
 
 import os
 import unittest
-from Bio.PopGen import SimCoal
-from Bio.PopGen.SimCoal.Controller import SimCoalController
+import warnings
+
 from Bio import MissingExternalDependencyError
+from Bio import BiopythonDeprecationWarning
+
+with warnings.catch_warnings():
+    warnings.simplefilter("ignore", BiopythonDeprecationWarning)
+    from Bio.PopGen import SimCoal
+    from Bio.PopGen.SimCoal.Controller import SimCoalController
 
 # Tests simcoal related code. Note: this case requires simcoal
 # test_PopGen_SimCoal_nodepend tests code that does not require simcoal
diff --git a/Tests/test_PopGen_SimCoal_nodepend.py b/Tests/test_PopGen_SimCoal_nodepend.py
index ad5e1e5..5f1a65f 100644
--- a/Tests/test_PopGen_SimCoal_nodepend.py
+++ b/Tests/test_PopGen_SimCoal_nodepend.py
@@ -7,7 +7,13 @@ from Bio._py3k import _universal_read_mode
 
 import os
 import unittest
-from Bio.PopGen.SimCoal.Template import generate_simcoal_from_template
+import warnings
+
+from Bio import BiopythonDeprecationWarning
+
+with warnings.catch_warnings():
+    warnings.simplefilter("ignore", BiopythonDeprecationWarning)
+    from Bio.PopGen.SimCoal.Template import generate_simcoal_from_template
 
 # Tests simcoal related code. Note: this case doesn't require simcoal
 # test_PopGen_SimCoal tests code that requires simcoal
diff --git a/Tests/test_QCPSuperimposer.py b/Tests/test_QCPSuperimposer.py
index 9e2d43a..e8a152f 100644
--- a/Tests/test_QCPSuperimposer.py
+++ b/Tests/test_QCPSuperimposer.py
@@ -3,7 +3,6 @@
 # as part of this package.
 
 from __future__ import print_function
-import warnings
 
 try:
     # TODO - Don't use "from XXX import *"
@@ -14,10 +13,7 @@ except ImportError:
     raise MissingPythonDependencyError(
         "Install NumPy if you want to use Bio.QCPSuperimposer.")
 
-from Bio import BiopythonExperimentalWarning
-with warnings.catch_warnings():
-    warnings.simplefilter('ignore', BiopythonExperimentalWarning)
-    from Bio.PDB.QCPSuperimposer import QCPSuperimposer
+from Bio.PDB.QCPSuperimposer import QCPSuperimposer
 
 # start with two coordinate sets (Nx3 arrays - Float0)
 
diff --git a/Tests/test_RCSBFormats.py b/Tests/test_RCSBFormats.py
index 5e0ad2e..5f64dc5 100644
--- a/Tests/test_RCSBFormats.py
+++ b/Tests/test_RCSBFormats.py
@@ -25,6 +25,7 @@ from Bio.PDB.MMCIFParser import MMCIFParser
 from Bio.PDB import PDBParser
 from Bio.PDB.PDBExceptions import PDBConstructionException, PDBConstructionWarning
 
+
 class CompareStructures(unittest.TestCase):
     """Tests for comparing the same structure parsed by PDB and MMCIF parsers"""
 
@@ -50,9 +51,9 @@ class CompareStructures(unittest.TestCase):
         cif_models = [(m.id, len(m.child_list)) for m in self.cifo.get_models()]
         pdb_models = [(m.id, len(m.child_list)) for m in self.pdbo.get_models()]
 
-        self.assertEqual( len(cif_models), len(pdb_models) )
-        self.assertEqual( [i[0] for i in cif_models], [i[0] for i in pdb_models] )
-        self.assertEqual( [i[1] for i in cif_models], [i[1] for i in pdb_models] )
+        self.assertEqual(len(cif_models), len(pdb_models))
+        self.assertEqual([i[0] for i in cif_models], [i[0] for i in pdb_models])
+        self.assertEqual([i[1] for i in cif_models], [i[1] for i in pdb_models])
 
     def test_compare_chains(self):
         """Compare parsed chains"""
@@ -60,9 +61,9 @@ class CompareStructures(unittest.TestCase):
         cif_chains = [(c.id, len(c.child_list)) for c in self.cifo.get_chains()]
         pdb_chains = [(c.id, len(c.child_list)) for c in self.pdbo.get_chains()]
 
-        self.assertEqual( len(cif_chains), len(pdb_chains) )
-        self.assertEqual( [i[0] for i in cif_chains], [i[0] for i in pdb_chains] )
-        self.assertEqual( [i[1] for i in cif_chains], [i[1] for i in pdb_chains] )
+        self.assertEqual(len(cif_chains), len(pdb_chains))
+        self.assertEqual([i[0] for i in cif_chains], [i[0] for i in pdb_chains])
+        self.assertEqual([i[1] for i in cif_chains], [i[1] for i in pdb_chains])
 
 if __name__ == '__main__':
     runner = unittest.TextTestRunner(verbosity=2)
diff --git a/Tests/test_Restriction.py b/Tests/test_Restriction.py
index cb3b19c..25e3693 100644
--- a/Tests/test_Restriction.py
+++ b/Tests/test_Restriction.py
@@ -93,7 +93,7 @@ class RestrictionBatchPrintTest(unittest.TestCase):
             else:
                 nc.append(k)
         result = analysis.make_format(ls, '', [], '')
-        self.assertEqual(result.replace(' ',''), expected.replace(' ',''))
+        self.assertEqual(result.replace(' ', ''), expected.replace(' ', ''))
 
     def test_make_format_map1(self):
         """Make sure print_as('map'); print_that() does not error on wrap round with no markers.
@@ -123,14 +123,14 @@ class RestrictionBatchPrintTest(unittest.TestCase):
         """Make sure print_as('map'); print_that() does not error on wrap round with marker.
         """
         analysis = self.createAnalysis(
-                'CCAGTCTATAATTCG' + 
+                'CCAGTCTATAATTCG' +
+                Restriction.BamHI.site +
+                'GCGGCATCATACTCGA' +
                 Restriction.BamHI.site +
-                'GCGGCATCATACTCGA' + 
-                Restriction.BamHI.site + 
                 'ATATCGCGTGATGATA' +
                 Restriction.NdeI.site +
                 'CGTAGTAATTACGCATG',
-                ["NdeI","EcoRI","BamHI","BsmBI"])
+                ["NdeI", "EcoRI", "BamHI", "BsmBI"])
         analysis.print_as('map')
         expected = [
             "                17 BamHI",
@@ -162,7 +162,7 @@ class RestrictionBatchPrintTest(unittest.TestCase):
                 'ATATCGCGTGATGATA' +
                 Restriction.EcoRV.site +
                 'CGTAGTAATTACGCATG',
-                ["NdeI","EcoRI","BamHI","BsmBI"])
+                ["NdeI", "EcoRI", "BamHI", "BsmBI"])
         analysis.print_as('map')
         expected = [
             "                17 BamHI",
diff --git a/Tests/test_SCOP_Residues.py b/Tests/test_SCOP_Residues.py
index acb48cc..3fdb27d 100755
--- a/Tests/test_SCOP_Residues.py
+++ b/Tests/test_SCOP_Residues.py
@@ -11,18 +11,18 @@ from Bio.SCOP.Residues import *
 
 class ResiduesTests(unittest.TestCase):
     res = (
-        ( "-",           () ),
-        ( "A:",          (("A", "", ""),) ),
-        ( "1:",          (("1", "", ""),) ),
-        ( "1-100",       (("", "1", "100"),)  ),
-        ( "B:1-101",     (("B",   "1", "101"),) ),
-        ( "1:1a-100a",   (("1", "1a", "100a"),) ),
-        ( "a:-100a--1a", (("a", "-100a", "-1a"),) ),
-        ( "-1-100",      (("", "-1", "100"),) ),
-        ( "-1-100",      (("", "-1", "100"),) ),
-        ( "A:12-19,A:23-25", (("A", "12", "19"), ("A", "23", "25")) ),
-        ( "12-19,1:23-25", (("", "12", "19"), ("1", "23", "25")) ),
-        ( "0-1,1:-1a-25a,T:", (("", "0", "1"), ("1", "-1a", "25a"), ("T", "", "")) ),
+        ("-", ()),
+        ("A:", (("A", "", ""),)),
+        ("1:", (("1", "", ""),)),
+        ("1-100", (("", "1", "100"),)),
+        ("B:1-101", (("B", "1", "101"),)),
+        ("1:1a-100a", (("1", "1a", "100a"),)),
+        ("a:-100a--1a", (("a", "-100a", "-1a"),)),
+        ("-1-100", (("", "-1", "100"),)),
+        ("-1-100", (("", "-1", "100"),)),
+        ("A:12-19,A:23-25", (("A", "12", "19"), ("A", "23", "25"))),
+        ("12-19,1:23-25", (("", "12", "19"), ("1", "23", "25"))),
+        ("0-1,1:-1a-25a,T:", (("", "0", "1"), ("1", "-1a", "25a"), ("T", "", ""))),
         )
 
     def testParse(self):
diff --git a/Tests/test_SearchIO_hmmer2_text_index.py b/Tests/test_SearchIO_hmmer2_text_index.py
index 56bedf2..fe841b7 100644
--- a/Tests/test_SearchIO_hmmer2_text_index.py
+++ b/Tests/test_SearchIO_hmmer2_text_index.py
@@ -195,7 +195,7 @@ tophits_s report:
      Total hits:           4
      Satisfying E cutoff:  4
      Total memory:         20K
-"""
+"""  # noqa for pep8 W291 trailing whitespace
         self.check_raw(filename, 'Peptidase_C1', raw)
 
     def test_hmmer2text_22_single_hmmpfam(self):
@@ -251,7 +251,7 @@ Methylase_M: domain 1 of 1, from 280 to 481: score -105.2, E = 0.0022
   gi|1522636   464 ---------RFKEIIK--NWKINDINF----ST    481  
 
 //
-"""
+"""  # noqa for pep8 W291 trailing whitespace
         self.check_raw(filename, 'gi|1522636|gb|AAC37060.1|', raw)
 
     def test_hmmer2text_22_multiple_first_hmmpfam(self):
@@ -283,7 +283,7 @@ Model           Domain  seq-f seq-t    hmm-f hmm-t      score  E-value
 Alignments of top-scoring domains:
 	[no hits above thresholds]
 //
-"""
+"""  # noqa for pep8 W291 trailing whitespace
         self.check_raw(filename, 'random_s00', raw)
 
     def test_hmmer2text_22_multiple_middle_hmmpfam(self):
@@ -352,7 +352,7 @@ Rotavirus_VP3: domain 1 of 1, from 134 to 147: score -1.2, E = 7.9
   gi|4885477   134    -KALELFRKDMASNY    147  
 
 //
-"""
+"""  # noqa for pep8 W291 trailing whitespace
         self.check_raw(filename, 'gi|4885477|ref|NP_005359.1|', raw)
 
     def test_hmmer2text_22_multiple_last_hmmpfam(self):
@@ -473,7 +473,7 @@ TFIIB: domain 1 of 1, from 253 to 268: score 2.6, E = 6.1
   gi|1254903   253    ITHIANQLGLEK---DVVR    268  
 
 //
-"""
+"""  # noqa for pep8 W291 trailing whitespace
         self.check_raw(filename, 'gi|125490392|ref|NP_038661.2|', raw)
 
 
diff --git a/Tests/test_SearchIO_hmmer3_domtab.py b/Tests/test_SearchIO_hmmer3_domtab.py
index 3904241..0559b90 100644
--- a/Tests/test_SearchIO_hmmer3_domtab.py
+++ b/Tests/test_SearchIO_hmmer3_domtab.py
@@ -13,8 +13,8 @@ from Bio import BiopythonExperimentalWarning
 
 import warnings
 with warnings.catch_warnings():
-   warnings.simplefilter('ignore', BiopythonExperimentalWarning)
-   from Bio.SearchIO import parse
+    warnings.simplefilter('ignore', BiopythonExperimentalWarning)
+    from Bio.SearchIO import parse
 
 # test case files are in the Blast directory
 TEST_DIR = 'Hmmer'
diff --git a/Tests/test_SearchIO_hmmer3_text_index.py b/Tests/test_SearchIO_hmmer3_text_index.py
index 77ffd96..285f8ae 100644
--- a/Tests/test_SearchIO_hmmer3_text_index.py
+++ b/Tests/test_SearchIO_hmmer3_text_index.py
@@ -118,7 +118,7 @@ Domain search space  (domZ):               1  [number of targets reported over t
 # CPU time: 0.33u 0.16s 00:00:00.49 Elapsed: 00:00:00.21
 # Mc/sec: 1757.33
 //
-"""
+"""  # noqa for pep8 W291 trailing whitespace
         self.check_raw(filename, "gi|4885477|ref|NP_005359.1|", raw)
 
     def test_hmmer3text_30_multiple_last(self):
@@ -234,7 +234,7 @@ Domain search space  (domZ):               5  [number of targets reported over t
 # CPU time: 0.51u 0.15s 00:00:00.66 Elapsed: 00:00:00.23
 # Mc/sec: 3667.47
 //
-"""
+"""  # noqa for pep8 W291 trailing whitespace
         self.check_raw(filename, "gi|125490392|ref|NP_038661.2|", raw)
 
     def test_hmmer3text_30_single(self):
@@ -296,7 +296,7 @@ Domain search space  (domZ):               1  [number of targets reported over t
 # CPU time: 0.28u 0.17s 00:00:00.45 Elapsed: 00:00:00.21
 # Mc/sec: 1757.33
 //
-"""
+"""  # noqa for pep8 W291 trailing whitespace
         self.check_raw(filename, "gi|4885477|ref|NP_005359.1|", raw)
 
 
diff --git a/Tests/test_SeqIO_AbiIO.py b/Tests/test_SeqIO_AbiIO.py
index d2dabcd..8602184 100644
--- a/Tests/test_SeqIO_AbiIO.py
+++ b/Tests/test_SeqIO_AbiIO.py
@@ -50,7 +50,7 @@ test_data = {
                                     'User1', 'phAR1', 'phCH1', 'phDY1',
                                     'phQL1', 'phTR1', 'phTR2', 'AUDT1',
                                     'PXLB1', 'RMdV1', 'DATA9', 'RGNm1',
-                                    'DATA11', 'DATA10', 'DATA12' ]),
+                                    'DATA11', 'DATA10', 'DATA12']),
               },
 'data_3730': {
              'path': ['Abi', '3730.ab1'],
diff --git a/Tests/test_SeqIO_Insdc.py b/Tests/test_SeqIO_Insdc.py
index 8750f1b..1684c3d 100644
--- a/Tests/test_SeqIO_Insdc.py
+++ b/Tests/test_SeqIO_Insdc.py
@@ -22,6 +22,7 @@ class TestEmbl(unittest.TestCase):
         self.assertEqual(len(record), 1859)
         # Single keyword:
         self.assertEqual(record.annotations["keywords"], ["beta-glucosidase"])
+        self.assertEqual(record.annotations["topology"], "linear")
 
     def test_annotation2(self):
         """Check parsing of annotation from EMBL files (2)."""
@@ -32,6 +33,23 @@ class TestEmbl(unittest.TestCase):
                          ['JP 2005522996-A/12', 'test-data',
                           'lot and lots of keywords for this example',
                           'multi-line keywords'])
+        self.assertEqual(record.annotations["topology"], "linear")
+
+    def test_annotation3(self):
+        """Check parsing of annotation from EMBL files (3)."""
+        record = SeqIO.read("EMBL/AE017046.embl", "embl")
+        self.assertEqual(len(record), 9609)
+        # TODO: Should this be an empty list, or simply absent?
+        self.assertEqual(record.annotations["keywords"], [""])
+        self.assertEqual(record.annotations["topology"], "circular")
+
+    def test_annotation4(self):
+        """Check parsing of annotation from EMBL files (4)."""
+        record = SeqIO.read("EMBL/location_wrap.embl", "embl")
+        self.assertEqual(len(record), 120)
+        self.assertTrue("keywords" not in record.annotations)
+        # The ID line has the topology as unspecified:
+        self.assertTrue("topology" not in record.annotations)
 
     def test_writing_empty_qualifiers(self):
         f = SeqFeature(FeatureLocation(5, 20, strand=+1),
diff --git a/Tests/test_SeqIO_QualityIO.py b/Tests/test_SeqIO_QualityIO.py
index 5273278..d8e62e6 100644
--- a/Tests/test_SeqIO_QualityIO.py
+++ b/Tests/test_SeqIO_QualityIO.py
@@ -370,7 +370,7 @@ class TestQual(unittest.TestCase):
 >1117_10_1017_F3
 33 33 -1 -1 -1 27 -1 -1 17 16 -1 28 24 11 -1 6 -1 -1 -1 29 -1 8 29 24 -1 -1 8 8 -1 20 -1 13 -1 -1 8 13 -1 28 10 24 -1 10 -1 -1 -1 4 -1 -1 7 6 
 >1117_11_136_F3
-16 22 -1 -1 -1 33 -1 -1 30 27 -1 27 28 32 -1 29 -1 -1 -1 27 -1 18 9 6 -1 -1 23 16 -1 26 -1 5 7 -1 22 7 -1 18 14 8 -1 8 -1 -1 -1 11 -1 -1 4 24"""
+16 22 -1 -1 -1 33 -1 -1 30 27 -1 27 28 32 -1 29 -1 -1 -1 27 -1 18 9 6 -1 -1 23 16 -1 26 -1 5 7 -1 22 7 -1 18 14 8 -1 8 -1 -1 -1 11 -1 -1 4 24"""  # noqa for pep8 W291 trailing whitespace
         h = StringIO(data)
         h2 = StringIO()
         with warnings.catch_warnings():
diff --git a/Tests/test_SeqIO_SeqXML.py b/Tests/test_SeqIO_SeqXML.py
index 08644ee..d95bbec 100644
--- a/Tests/test_SeqIO_SeqXML.py
+++ b/Tests/test_SeqIO_SeqXML.py
@@ -17,9 +17,10 @@ test_files = {
     "globalSpecies": ["SeqXML/global_species_example.xml", 2],
 }
 
-corrupt_files = ["SeqXML/corrupt_example1.xml",
-                 "SeqXML/corrupt_example2.xml",
-                ]
+corrupt_files = [
+    "SeqXML/corrupt_example1.xml",
+    "SeqXML/corrupt_example2.xml",
+]
 
 
 def assert_equal_records(testCase, record_a, record_b):
diff --git a/Tests/test_SeqIO_features.py b/Tests/test_SeqIO_features.py
index f0381f3..3fe80f3 100644
--- a/Tests/test_SeqIO_features.py
+++ b/Tests/test_SeqIO_features.py
@@ -24,16 +24,10 @@ from Bio.SeqFeature import SeqFeature, FeatureLocation, CompoundLocation
 from Bio.SeqFeature import ExactPosition, BeforePosition, AfterPosition
 from Bio.SeqFeature import OneOfPosition, WithinPosition, UnknownPosition
 from Bio.SeqIO.InsdcIO import _insdc_location_string
-from Bio.SeqIO.InsdcIO import _insdc_feature_location_string
 
 
 def _get_location_string(feature, record_length):
-    # Check the legacy interface is consistent...
-    using_sub_features = _insdc_feature_location_string(feature, record_length)
-    using_compound_location = _insdc_location_string(feature.location, record_length)
-    assert using_sub_features == using_compound_location, \
-        "%r vs %r from:\n%s" % (using_sub_features, using_compound_location, feature)
-    return using_compound_location
+    return _insdc_location_string(feature.location, record_length)
 
 
 # Top level function as this makes it easier to use for debugging:
@@ -126,7 +120,7 @@ def compare_records(old_list, new_list, expect_minor_diffs=False):
     return True
 
 
-def compare_feature(old, new, ignore_sub_features=False):
+def compare_feature(old, new):
     """Check two SeqFeatures agree."""
     if old.type != new.type:
         raise ValueError("Type %s versus %s" % (repr(old.type), repr(new.type)))
@@ -150,13 +144,6 @@ def compare_feature(old, new, ignore_sub_features=False):
     or str(old.location.end) != str(new.location.end):
         raise ValueError("End %s versus %s:\n%s\nvs:\n%s"
                          % (old.location.end, new.location.end, repr(old), repr(new)))
-    if not ignore_sub_features:
-        # Using private variable to avoid deprecation warnings,
-        if len(old._sub_features) != len(new._sub_features):
-            raise ValueError("Different sub features")
-        for a, b in zip(old._sub_features, new._sub_features):
-            if not compare_feature(a, b):
-                return False
     # This only checks key shared qualifiers
     # Would a white list be easier?
     # for key in ["name","gene","translation","codon_table","codon_start","locus_tag"]:
@@ -170,13 +157,13 @@ def compare_feature(old, new, ignore_sub_features=False):
     return True
 
 
-def compare_features(old_list, new_list, ignore_sub_features=False):
+def compare_features(old_list, new_list):
     """Check two lists of SeqFeatures agree, raises a ValueError if mismatch."""
     if len(old_list) != len(new_list):
         raise ValueError("%i vs %i features" % (len(old_list), len(new_list)))
     for old, new in zip(old_list, new_list):
         # This assumes they are in the same order
-        if not compare_feature(old, new, ignore_sub_features):
+        if not compare_feature(old, new):
             return False
     return True
 
@@ -191,14 +178,12 @@ def make_join_feature(f_list, ftype="misc_feature"):
         f.type = ftype
     if strand == -1:
         # All reverse strand.
-        # Historical accident from GenBank parser means sub_features reversed
+        # Put into biological order for CompoundLocation
         c_loc = CompoundLocation([f.location for f in f_list[::-1]])
     else:
         # All forward, or mixed strand
         c_loc = CompoundLocation([f.location for f in f_list])
-    answer = SeqFeature(c_loc, ftype)
-    answer._sub_features = f_list  # to avoid deprecation warning
-    return answer
+    return SeqFeature(c_loc, ftype)
 
 
 # Prepare a single GenBank record with one feature with a %s place holder for
@@ -288,13 +273,6 @@ class SeqFeatureExtractionWritingReading(unittest.TestCase):
         self.assertTrue(isinstance(new, Seq))
         self.assertEqual(str(new), answer_str)
 
-        # Using private variable to avoid deprecation warning
-        if not feature._sub_features:
-            new = parent_seq[feature.location.start:feature.location.end]
-            if feature.strand == -1:
-                new = reverse_complement(new)
-            self.assertEqual(str(new), answer_str)
-
         new = feature.extract(str(parent_seq))
         self.assertTrue(isinstance(new, str))
         self.assertEqual(new, answer_str)
@@ -322,16 +300,6 @@ class SeqFeatureExtractionWritingReading(unittest.TestCase):
         self.assertEqual(location_str,
                          _get_location_string(new_f, 1326))
 
-        # Checking the strand is tricky - on parsing a GenBank file
-        # strand +1 is assumed, but our constructed features for the
-        # unit test have mostly defaulted to strand None.
-        self.assertEqual(len(feature._sub_features), len(new_f._sub_features))
-        for f1, f2 in zip(feature._sub_features, new_f._sub_features):
-            f1.type = "misc_feature"  # hack as may not be misc_feature
-            if f1.strand is None:
-                f1.strand = f2.strand  # hack as described above
-            self.assertEqual(f1.strand, f2.strand)
-            self.assertTrue(compare_feature(f1, f2))
         feature.type = "misc_feature"  # hack as may not be misc_feature
         if not feature.strand:
             feature.strand = new_f.strand  # hack as above
@@ -666,9 +634,9 @@ class FeatureWriting(unittest.TestCase):
                          "complement(join(21..35,41..50))")
         self.assertEqual(_get_location_string(f._flip(100), 100),
                          "complement(join(61..75,81..90))")
-        for sub_f in f._flip(100)._sub_features:
-            self.assertEqual(sub_f.strand, -1)
         self.assertEqual(f._flip(100).strand, -1)
+        for sub_loc in f._flip(100).location.parts:
+            self.assertEqual(sub_loc.strand, -1)
         f1 = SeqFeature(FeatureLocation(110, 120), strand=+1)
         f2 = SeqFeature(FeatureLocation(125, 140), strand=+1)
         f3 = SeqFeature(FeatureLocation(145, 150), strand=+1)
@@ -677,9 +645,10 @@ class FeatureWriting(unittest.TestCase):
                          "join(111..120,126..140,146..150)")
         self.assertEqual(_get_location_string(f._flip(150), 150),
                          "complement(join(1..5,11..25,31..40))")
-        for sub_f in f._flip(100)._sub_features:
-            self.assertEqual(sub_f.strand, -1)
         self.assertEqual(f._flip(100).strand, -1)
+        self.assertEqual(f._flip(100).location.strand, -1)
+        for sub_loc in f._flip(100).location.parts:
+            self.assertEqual(sub_loc.strand, -1)
         self.record.features.append(f)
         f1 = SeqFeature(FeatureLocation(210, 220), strand=-1)
         f2 = SeqFeature(FeatureLocation(225, 240), strand=-1)
@@ -688,9 +657,10 @@ class FeatureWriting(unittest.TestCase):
                          "complement(join(211..220,226..240))")
         self.assertEqual(_get_location_string(f._flip(300), 300),
                          "join(61..75,81..90)")
-        for sub_f in f._flip(100)._sub_features:
-            self.assertEqual(sub_f.strand, +1)
         self.assertEqual(f._flip(100).strand, +1)
+        self.assertEqual(f._flip(100).location.strand, +1)
+        for sub_loc in f._flip(100).location.parts:
+            self.assertEqual(sub_loc.strand, +1)
         self.record.features.append(f)
         f1 = SeqFeature(FeatureLocation(310, 320), strand=-1)
         f2 = SeqFeature(FeatureLocation(325, 340), strand=-1)
@@ -700,9 +670,9 @@ class FeatureWriting(unittest.TestCase):
                          "complement(join(311..320,326..340,346..350))")
         self.assertEqual(_get_location_string(f._flip(350), 350),
                          "join(1..5,11..25,31..40)")
-        for sub_f in f._flip(100)._sub_features:
-            self.assertEqual(sub_f.strand, +1)
         self.assertEqual(f._flip(100).strand, +1)
+        for sub_loc in f._flip(100).location.parts:
+            self.assertEqual(sub_loc.strand, +1)
         self.record.features.append(f)
         self.write_read_checks()
 
@@ -724,8 +694,6 @@ class FeatureWriting(unittest.TestCase):
         self.assertEqual(tmp.strand, -1)
         for sub_loc in tmp.location.parts:
             self.assertEqual(sub_loc.strand, -1)
-        for sub_f in tmp._sub_features:
-            self.assertEqual(sub_f.strand, -1)
 
         f1 = SeqFeature(FeatureLocation(OneOfPosition(107, [ExactPosition(107),
                                                             ExactPosition(110)]),
@@ -746,8 +714,6 @@ class FeatureWriting(unittest.TestCase):
         self.assertEqual(tmp.strand, -1)
         for sub_loc in tmp.location.parts:
             self.assertEqual(sub_loc.strand, -1)
-        for sub_f in tmp._sub_features:
-            self.assertEqual(sub_f.strand, -1)
         self.record.features.append(f)
 
         f1 = SeqFeature(FeatureLocation(BeforePosition(210), 220), strand=-1)
@@ -765,8 +731,6 @@ class FeatureWriting(unittest.TestCase):
         self.assertEqual(tmp.strand, +1)
         for sub_loc in tmp.location.parts:
             self.assertEqual(sub_loc.strand, +1)
-        for sub_f in tmp._sub_features:
-            self.assertEqual(sub_f.strand, +1)
         self.record.features.append(f)
 
         f1 = SeqFeature(FeatureLocation(AfterPosition(310), 320), strand=-1)
@@ -786,8 +750,6 @@ class FeatureWriting(unittest.TestCase):
         self.assertEqual(tmp.strand, +1)
         for sub_loc in tmp.location.parts:
             self.assertEqual(sub_loc.strand, +1)
-        for sub_f in tmp._sub_features:
-            self.assertEqual(sub_f.strand, +1)
         self.record.features.append(f)
 
         self.write_read_checks()
diff --git a/Tests/test_SeqIO_write.py b/Tests/test_SeqIO_write.py
index 7a65f76..1fae6b3 100644
--- a/Tests/test_SeqIO_write.py
+++ b/Tests/test_SeqIO_write.py
@@ -5,9 +5,10 @@
 
 import os
 import unittest
+import warnings
 from io import BytesIO
 from Bio._py3k import StringIO
-
+from Bio import BiopythonWarning
 from Bio import SeqIO
 from Bio import AlignIO
 from Bio.SeqRecord import SeqRecord
@@ -50,7 +51,7 @@ test_records = [
                 description="an%sevil\rdescription right\nhere" % os.linesep),
       SeqRecord(Seq("TTTCCTCGGAGGCCAATCTGGATCAAGACCAT", Alphabet.generic_dna), id="Z")],
      "3 DNA seq alignment with CR/LF in name/descr",
-      [(["genbank"], ValueError, r"Locus identifier 'The\nMystery\rSequece:\r\nX' is too long")]),
+      [(["genbank"], ValueError, r"Invalid whitespace in 'The\nMystery\rSequece:\r\nX' for LOCUS line")]),
     ([SeqRecord(Seq("CHSMAIKLSSEHNIPSGIANAL", Alphabet.generic_protein), id="Alpha"),
       SeqRecord(Seq("VHGMAHPLGAFYNTPHGVANAI", Alphabet.generic_protein), id="Beta"),
       SeqRecord(Seq("VHGMAHPLGAFYNTPHGVANAI", Alphabet.generic_protein), id="Beta"),
@@ -129,7 +130,9 @@ class WriterTests(unittest.TestCase):
             handle = StringIO()
         if err_msg:
             try:
-                SeqIO.write(records, handle, format)
+                with warnings.catch_warnings():
+                    warnings.simplefilter('ignore', BiopythonWarning)
+                    SeqIO.write(records, handle, format)
             except err_type as err:
                 self.assertEqual(str(err), err_msg)
         else:
diff --git a/Tests/test_SeqRecord.py b/Tests/test_SeqRecord.py
index 23393c2..c8e6010 100644
--- a/Tests/test_SeqRecord.py
+++ b/Tests/test_SeqRecord.py
@@ -1,4 +1,4 @@
-# Copyright 2009 by Peter Cock.  All rights reserved.
+# Copyright 2009-2016 by Peter Cock.  All rights reserved.
 # This code is part of the Biopython distribution and governed by its
 # license.  Please see the LICENSE file that should have been included
 # as part of this package.
@@ -72,6 +72,23 @@ class SeqRecordCreation(unittest.TestCase):
         except (TypeError, ValueError) as e:
             pass
 
+    def test_replacing_seq(self):
+        """Replacing .seq if .letter_annotation present."""
+        rec = SeqRecord(Seq("ACGT", generic_dna),
+                        id="Test", name="Test", description="Test",
+                        letter_annotations={"example": [1, 2, 3, 4]})
+        try:
+            rec.seq = Seq("ACGTACGT", generic_dna)
+            self.fail("Changing .seq length with letter_annotations present should fail!")
+        except ValueError as e:
+            self.assertEqual(str(e), "You must empty the letter annotations first!")
+        # Check we can replace IF the length is the same
+        self.assertEqual(str(rec.seq), "ACGT")
+        self.assertEqual(rec.letter_annotations, {"example": [1, 2, 3, 4]})
+        rec.seq = Seq("NNNN", generic_dna)
+        self.assertEqual(str(rec.seq), "NNNN")
+        self.assertEqual(rec.letter_annotations, {"example": [1, 2, 3, 4]})
+
     def test_valid_id(self):
         with self.assertRaises(TypeError):
             SeqRecord(Seq("ACGT", generic_dna), id=dict())
diff --git a/Tests/test_SeqUtils.py b/Tests/test_SeqUtils.py
index 46acd04..c74783c 100644
--- a/Tests/test_SeqUtils.py
+++ b/Tests/test_SeqUtils.py
@@ -59,7 +59,7 @@ class SeqUtilsTests(unittest.TestCase):
         record = SeqIO.read(dna_genbank_filename, "genbank")
         records = []
         for feature in record.features:
-            if feature.type == "CDS" and not feature.sub_features:
+            if feature.type == "CDS" and len(feature.location.parts) == 1:
                 start = feature.location.start.position
                 end = feature.location.end.position
                 table = int(feature.qualifiers["transl_table"][0])
diff --git a/Tests/test_Seq_objs.py b/Tests/test_Seq_objs.py
index c42613b..d407369 100644
--- a/Tests/test_Seq_objs.py
+++ b/Tests/test_Seq_objs.py
@@ -9,14 +9,10 @@ from __future__ import print_function
 import warnings
 import unittest
 import sys
-if sys.version_info[0] >= 3:
-    maketrans = str.maketrans
-else:
-    from string import maketrans
 
 from Bio import BiopythonWarning
-from Bio.Alphabet import generic_protein, generic_nucleotide, \
-                         generic_dna, generic_rna
+from Bio.Alphabet import generic_protein, generic_nucleotide
+from Bio.Alphabet import generic_dna, generic_rna
 from Bio.Alphabet import _check_type_compatible
 from Bio.Alphabet.IUPAC import protein, extended_protein
 from Bio.Alphabet.IUPAC import unambiguous_dna, ambiguous_dna, ambiguous_rna
@@ -24,6 +20,11 @@ from Bio.Data.IUPACData import ambiguous_dna_values, ambiguous_rna_values
 from Bio.Seq import Seq, UnknownSeq, MutableSeq, translate
 from Bio.Data.CodonTable import TranslationError, CodonTable
 
+if sys.version_info[0] < 3:
+    from string import maketrans
+else:
+    maketrans = str.maketrans
+
 # This is just the standard table with less stop codons
 # (replaced with coding for O as an artifical example)
 special_table = CodonTable(forward_table={
@@ -99,7 +100,8 @@ class StringMethodTests(unittest.TestCase):
             _examples.append(seq.tomutable())
     _start_end_values = [0, 1, 2, 1000, -1, -2, -999]
 
-    def _test_method(self, method_name, pre_comp_function=None, start_end=False):
+    def _test_method(self, method_name, pre_comp_function=None,
+                     start_end=False):
         """Check this method matches the plain string's method."""
         self.assertTrue(isinstance(method_name, str))
         for example1 in self._examples:
@@ -379,12 +381,10 @@ class StringMethodTests(unittest.TestCase):
                 continue
             str1 = str(example1)
             # This only does the unambiguous cases
-            if "U" in str1 or "u" in str1 \
-            or example1.alphabet == generic_rna:
+            if any(("U" in str1, "u" in str1, example1.alphabet == generic_rna)):
                 mapping = maketrans("ACGUacgu", "UGCAugca")
-            elif "T" in str1 or "t" in str1 \
-            or example1.alphabet == generic_dna \
-            or example1.alphabet == generic_nucleotide:
+            elif any(("T" in str1, "t" in str1, example1.alphabet == generic_dna,
+                     example1.alphabet == generic_nucleotide)):
                 mapping = maketrans("ACGTacgt", "TGCAtgca")
             elif "A" not in str1 and "a" not in str1:
                 mapping = maketrans("CGcg", "GCgc")
@@ -407,12 +407,10 @@ class StringMethodTests(unittest.TestCase):
                 continue
             str1 = str(example1)
             # This only does the unambiguous cases
-            if "U" in str1 or "u" in str1 \
-            or example1.alphabet == generic_rna:
+            if any(("U" in str1, "u" in str1, example1.alphabet == generic_rna)):
                 mapping = maketrans("ACGUacgu", "UGCAugca")
-            elif "T" in str1 or "t" in str1 \
-            or example1.alphabet == generic_dna \
-            or example1.alphabet == generic_nucleotide:
+            elif any(("T" in str1, "t" in str1, example1.alphabet == generic_dna,
+                     example1.alphabet == generic_nucleotide)):
                 mapping = maketrans("ACGTacgt", "TGCAtgca")
             elif "A" not in str1 and "a" not in str1:
                 mapping = maketrans("CGcg", "GCgc")
@@ -493,7 +491,8 @@ class StringMethodTests(unittest.TestCase):
             self.assertEqual("***RR", str(nuc.translate(1)))
             self.assertEqual("***RR", str(nuc.translate("SGC0")))
             self.assertEqual("**W**", str(nuc.translate(table=2)))
-            self.assertEqual("**WRR", str(nuc.translate(table='Yeast Mitochondrial')))
+            self.assertEqual("**WRR",
+                             str(nuc.translate(table='Yeast Mitochondrial')))
             self.assertEqual("**WSS", str(nuc.translate(table=5)))
             self.assertEqual("**WSS", str(nuc.translate(table=9)))
             self.assertEqual("**CRR", str(nuc.translate(table='Euplotid Nuclear')))
@@ -503,9 +502,11 @@ class StringMethodTests(unittest.TestCase):
             self.assertEqual("**GRR", str(nuc.translate(table=25)))
             self.assertEqual("", str(nuc.translate(to_stop=True)))
             self.assertEqual("O*ORR", str(nuc.translate(table=special_table)))
-            self.assertEqual("*QWRR", str(nuc.translate(table=Chilodonella_uncinata_table)))
+            self.assertEqual("*QWRR",
+                             str(nuc.translate(table=Chilodonella_uncinata_table)))
             # These test the Bio.Seq.translate() function - move these?:
-            self.assertEqual("*QWRR", translate(str(nuc), table=Chilodonella_uncinata_table))
+            self.assertEqual("*QWRR",
+                             translate(str(nuc), table=Chilodonella_uncinata_table))
             self.assertEqual("O*ORR", translate(str(nuc), table=special_table))
             self.assertEqual("", translate(str(nuc), to_stop=True))
             self.assertEqual("***RR", translate(str(nuc), table='Bacterial'))
@@ -546,17 +547,17 @@ class StringMethodTests(unittest.TestCase):
             for c1 in ambig:
                 for c2 in ambig:
                     for c3 in ambig:
-                        values = set([str(Seq(a + b + c).translate())
-                                      for a in ambig_values[c1]
-                                      for b in ambig_values[c2]
-                                      for c in ambig_values[c3]])
+                        values = set(str(Seq(a + b + c).translate())
+                                     for a in ambig_values[c1]
+                                     for b in ambig_values[c2]
+                                     for c in ambig_values[c3])
                         t = str(Seq(c1 + c2 + c3).translate())
                         if t == "*":
                             self.assertEqual(values, set("*"))
                         elif t == "X":
                             self.assertTrue(len(values) > 1,
-                                "translate('%s') = '%s' not '%s'"
-                                % (c1 + c2 + c3, t, ",".join(values)))
+                                            "translate('%s') = '%s' not '%s'"
+                                            % (c1 + c2 + c3, t, ",".join(values)))
                         elif t == "Z":
                             self.assertEqual(values, set("EQ"))
                         elif t == "B":
diff --git a/Tests/test_TreeConstruction.py b/Tests/test_TreeConstruction.py
index 3b749e6..8a706d1 100644
--- a/Tests/test_TreeConstruction.py
+++ b/Tests/test_TreeConstruction.py
@@ -126,7 +126,7 @@ class DistanceCalculatorTest(unittest.TestCase):
         # Comparing characters only -- 4 misses, 1 match
         dmat = DistanceCalculator().get_distance(aln)
         self.assertEqual(dmat['Alpha', 'Alpha'], 0.)
-        self.assertAlmostEqual(dmat['Alpha', 'Gamma'], 4./5.)
+        self.assertAlmostEqual(dmat['Alpha', 'Gamma'], 4. / 5.)
 
 
 class DistanceTreeConstructorTest(unittest.TestCase):
@@ -177,9 +177,9 @@ class ParsimonyScorerTest(unittest.TestCase):
 
         alphabet = ['A', 'T', 'C', 'G']
         step_matrix = [[0],
-                       [2.5,   0],
-                       [2.5,   1,    0],
-                       [  1, 2.5,  2.5, 0]]
+                       [2.5, 0],
+                       [2.5, 1, 0],
+                       [1, 2.5, 2.5, 0]]
         matrix = _Matrix(alphabet, step_matrix)
         scorer = ParsimonyScorer(matrix)
         score = scorer.get_score(tree, aln)
@@ -223,9 +223,9 @@ class NNITreeSearcherTest(unittest.TestCase):
         tree = Phylo.read('./TreeConstruction/upgma.tre', 'newick')
         alphabet = ['A', 'T', 'C', 'G']
         step_matrix = [[0],
-                       [2.5,   0],
-                       [2.5,   1,    0],
-                       [  1, 2.5,  2.5, 0]]
+                       [2.5, 0],
+                       [2.5, 1, 0],
+                       [1, 2.5, 2.5, 0]]
         matrix = _Matrix(alphabet, step_matrix)
         scorer = ParsimonyScorer(matrix)
         searcher = NNITreeSearcher(scorer)
@@ -243,9 +243,9 @@ class ParsimonyTreeConstructorTest(unittest.TestCase):
         tree2 = Phylo.read('./TreeConstruction/nj.tre', 'newick')
         alphabet = ['A', 'T', 'C', 'G']
         step_matrix = [[0],
-                       [2.5,   0],
-                       [2.5,   1,    0],
-                       [  1, 2.5,  2.5, 0]]
+                       [2.5, 0],
+                       [2.5, 1, 0],
+                       [1, 2.5, 2.5, 0]]
         matrix = _Matrix(alphabet, step_matrix)
         scorer = ParsimonyScorer(matrix)
         searcher = NNITreeSearcher(scorer)
diff --git a/Tests/test_Tutorial.py b/Tests/test_Tutorial.py
index 97963b5..7e26357 100644
--- a/Tests/test_Tutorial.py
+++ b/Tests/test_Tutorial.py
@@ -2,8 +2,47 @@
 # This code is part of the Biopython distribution and governed by its
 # license.  Please see the LICENSE file that should have been included
 # as part of this package.
-
-# This will apply to all the doctests too:
+#
+# This script looks for entries in the LaTeX source for the
+# Biopython Tutorial which can be turned into Python doctests,
+# e.g.
+#
+# %doctest
+# \begin{verbatim}
+# >>> from Bio.Alphabet import generic_dna
+# >>> from Bio.Seq import Seq
+# >>> len("ACGT")
+# 4
+# \end{verbatim}
+#
+# Code snippets can be extended using a similar syntax, which
+# will create a single combined doctest:
+#
+# %cont-doctest
+# \begin{verbatim}
+# >>> Seq("ACGT") == Seq("ACGT", generic_dna)
+# True
+# \end{verbatim}
+#
+# The %doctest line also supports a relative working directory,
+# and listing multiple Python dependencies as lib:XXX which will
+# ensure "import XXX" works before using the test. e.g.
+#
+# %doctest examples lib:numpy lib:scipy
+#
+# Note if using lib:XXX you must include a relative path to the
+# working directory, just use . for the default path, e.g.
+#
+# %doctest . lib:reportlab
+#
+# TODO: Adding bin:XXX for checking binary XXX is on $PATH?
+# TODO: Adding way to specify the doctest needs the network?
+#
+# See also "Writing doctests in the Tutorial" in the Tutorial
+# itself.
+
+
+# This future import will apply to all the doctests too:
 from __future__ import print_function
 from Bio._py3k import _universal_read_mode
 
diff --git a/Tests/test_Uniprot.py b/Tests/test_Uniprot.py
index c061f15..ef54f62 100644
--- a/Tests/test_Uniprot.py
+++ b/Tests/test_Uniprot.py
@@ -272,7 +272,7 @@ class TestUniprot(unittest.TestCase):
             elif key in ["date"]:
                 # TODO - Why is this a list vs str?
                 pass
-            elif type(old.annotations[key]) != type(new.annotations[key]):
+            elif not isinstance(old.annotations[key], type(new.annotations[key])):
                 raise TypeError("%s gives %s vs %s" %
                                  (key, old.annotations[key], new.annotations[key]))
             elif key in ["organism"]:
diff --git a/Tests/test_mmtf.py b/Tests/test_mmtf.py
new file mode 100644
index 0000000..ad7505e
--- /dev/null
+++ b/Tests/test_mmtf.py
@@ -0,0 +1,100 @@
+import unittest
+import warnings
+from Bio.PDB.mmtf import MMTFParser
+from Bio.PDB.MMCIFParser import MMCIFParser
+from Bio.PDB.PDBExceptions import PDBConstructionWarning
+
+
+class ParseMMTF(unittest.TestCase):
+    """Testing with real mmtf file(s)."""
+
+    def check_atoms(self):
+        """Check all atoms in self.mmtf_atoms and self.mmcif_atoms are equivalent"""
+        self.assertEqual(len(self.mmcif_atoms), len(self.mmtf_atoms))
+        for i, e in enumerate(self.mmcif_atoms):
+            mmtf_atom = self.mmtf_atoms[i]
+            mmcif_atom = self.mmcif_atoms[i]
+            self.assertEqual(mmtf_atom.name, mmcif_atom.name)  # eg. CA, spaces are removed from atom name
+            self.assertEqual(mmtf_atom.fullname, mmcif_atom.fullname)  # e.g. " CA ", spaces included
+            self.assertAlmostEqual(mmtf_atom.coord[0], mmcif_atom.coord[0], places=3)
+            self.assertAlmostEqual(mmtf_atom.coord[1], mmcif_atom.coord[1], places=3)
+            self.assertAlmostEqual(mmtf_atom.coord[2], mmcif_atom.coord[2], places=3)
+            self.assertEqual(mmtf_atom.bfactor, mmcif_atom.bfactor)
+            self.assertEqual(mmtf_atom.occupancy, mmcif_atom.occupancy)
+            self.assertEqual(mmtf_atom.altloc, mmcif_atom.altloc)
+            self.assertEqual(mmtf_atom.full_id,
+                                   mmcif_atom.full_id)  # (structure id, model id, chain id, residue id, atom id)
+            self.assertEqual(mmtf_atom.id, mmcif_atom.name)  # id of atom is the atom name (e.g. "CA")
+            # self.assertEqual(mmtf_atom.serial_number,mmcif_atom.serial_number) # mmCIF serial number is none
+
+    def check_residues(self):
+        """Check all residues in self.mmcif_res and self.mmtf_res are equivalent"""
+        self.assertEqual(len(self.mmcif_res), len(self.mmtf_res))
+        for i, e in enumerate(self.mmcif_res):
+            mmcif_r = self.mmcif_res[i]
+            mmtf_r = self.mmtf_res[i]
+            self.assertEqual(mmtf_r.level, mmcif_r.level)
+            self.assertEqual(mmtf_r.disordered, mmcif_r.disordered)
+            self.assertEqual(mmtf_r.resname, mmcif_r.resname)
+            self.assertEqual(mmtf_r.segid, mmcif_r.segid)
+            self.mmcif_atoms = [x for x in mmcif_r.get_atom()]
+            self.mmtf_atoms = [x for x in mmtf_r.get_atom()]
+            self.check_atoms()
+
+    def check_mmtf_vs_cif(self, mmtf_filename, cif_filename):
+        """Compare parsed structures for MMTF and CIF files."""
+        with warnings.catch_warnings():
+            warnings.simplefilter('ignore', PDBConstructionWarning)
+            mmtf_struct = MMTFParser.get_structure(mmtf_filename)
+        mmcif_parser = MMCIFParser()
+        mmcif_struct = mmcif_parser.get_structure("example", cif_filename)
+        self.mmcif_atoms = [x for x in mmcif_struct.get_atoms()]
+        self.mmtf_atoms = [x for x in mmtf_struct.get_atoms()]
+        self.check_atoms()
+        mmcif_chains = [x for x in mmcif_struct.get_chains()]
+        mmtf_chains = [x for x in mmtf_struct.get_chains()]
+        self.assertEqual(len(mmcif_chains), len(mmtf_chains))
+        for i, e in enumerate(mmcif_chains):
+            self.mmcif_res = [x for x in mmcif_chains[i].get_residues()]
+            self.mmtf_res = [x for x in mmtf_chains[i].get_residues()]
+            self.check_residues()
+
+        self.mmcif_res = [x for x in mmcif_struct.get_residues()]
+        self.mmtf_res = [x for x in mmtf_struct.get_residues()]
+        self.check_residues()
+        self.assertEqual(len([x for x in mmcif_struct.get_models()]), len([x for x in mmtf_struct.get_models()]))
+
+    def test_4CUP(self):
+        """Compare parsing 4CUP.mmtf and 4CUP.cif"""
+        self.check_mmtf_vs_cif("PDB/4CUP.mmtf", "PDB/4CUP.cif")
+
+# TODO:
+#    def test_1A8O(self):
+#        """Compare parsing 1A8O.mmtf and 1A8O.cif"""
+#        self.check_mmtf_vs_cif("PDB/1A8O.mmtf", "PDB/1A8O.cif")
+
+# TODO:
+#    def test_4ZHL(self):
+#        """Compare parsing 4ZHL.mmtf and 4ZHL.cif"""
+#        self.check_mmtf_vs_cif("PDB/4ZHL.mmtf", "PDB/4ZHL.cif")
+
+
+class SimpleParseMMTF(unittest.TestCase):
+    """Just parse some real mmtf files."""
+
+    def test_4ZHL(self):
+        """Parse 4ZHL.mmtf"""
+        with warnings.catch_warnings():
+            warnings.simplefilter('ignore', PDBConstructionWarning)
+            structure = MMTFParser.get_structure("PDB/4ZHL.mmtf")
+
+    def test_1A80(self):
+        """Parse 1A8O.mmtf"""
+        with warnings.catch_warnings():
+            warnings.simplefilter('ignore', PDBConstructionWarning)
+            structure = MMTFParser.get_structure("PDB/1A8O.mmtf")
+
+
+if __name__ == "__main__":
+    runner = unittest.TextTestRunner(verbosity=2)
+    unittest.main(testRunner=runner)
diff --git a/Tests/test_pairwise2.py b/Tests/test_pairwise2.py
index 45cf52f..9f8376e 100644
--- a/Tests/test_pairwise2.py
+++ b/Tests/test_pairwise2.py
@@ -4,9 +4,60 @@
 # license.  Please see the LICENSE file that should have been included
 # as part of this package.
 
-import unittest
+# Remove unittest2 import after dropping support for Python2.6
+import sys
 
 from Bio import pairwise2
+from Bio.SubsMat.MatrixInfo import blosum62
+
+if sys.version_info < (2, 7):
+    try:
+        import unittest2 as unittest
+    except ImportError:
+        from Bio import MissingPythonDependencyError
+        raise MissingPythonDependencyError("Under Python 2.6 this test needs "
+                                           "the unittest2 library")
+else:
+    import unittest
+
+
+class TestPairwiseErrorConditions(unittest.TestCase):
+    """Test several error conditions"""
+
+    def test_function_name(self):
+        """Test for wrong function names"""
+        # Function name pattern must be globalXX or localXX
+        self.assertRaises(AttributeError, lambda: pairwise2.align.globalxxx)
+        self.assertRaises(AttributeError, lambda: pairwise2.align.localxxx)
+        self.assertRaises(AttributeError, lambda: pairwise2.align.glocalxx)
+        # First X must be from (x, m, d, c), second from (x, s, d, c)
+        self.assertRaises(AttributeError, lambda: pairwise2.align.globalax)
+        self.assertRaises(AttributeError, lambda: pairwise2.align.globalxa)
+
+    def test_function_parameters(self):
+        """Test for number of parameteres"""
+        # globalxx takes two parameters
+        self.assertRaises(TypeError, pairwise2.align.globalxx, 'A')
+        # matrix_only is no keyword argument
+        self.assertRaises(TypeError, pairwise2.align.globalxx, 'A', 'C',
+                          {'matrix_only': True})
+        # Both sequences must be either strings or lists
+        self.assertRaises(TypeError, pairwise2.align.globalxx, 'A', ['C'])
+        # If both sequences are lists, gap_char must also be set as list
+        self.assertRaises(TypeError, pairwise2.align.globalxx, ['A'], ['C'])
+
+        # If one or both sequences are empty, there is no alignment
+        alignment = pairwise2.align.globalxx('A', '')
+        self.assertEqual(alignment, [])
+
+        # Gap scores must be negativ
+        self.assertRaises(ValueError, pairwise2.align.globalxs, 'A', 'C',
+                          5, -1)
+        self.assertRaises(ValueError, pairwise2.align.globalxs, 'A', 'C',
+                          -5, 1)
+        # Gap open penalty must be higher than gap extension penalty
+        self.assertRaises(ValueError, pairwise2.align.globalxs, 'A', 'C',
+                          -1, -5)
 
 
 class TestPairwiseGlobal(unittest.TestCase):
@@ -32,6 +83,28 @@ GA--T
   Score=3
 """)
 
+    def test_globalxx_simple2(self):
+        """Do the same test with sequence order reversed"""
+        aligns = pairwise2.align.globalxx("GAT", "GAACT")
+        self.assertEqual(len(aligns), 2)
+        aligns.sort()
+        seq1, seq2, score, begin, end = aligns[0]
+        alignment = pairwise2.format_alignment(seq1, seq2, score, begin, end)
+        self.assertEqual(alignment, """\
+G-A-T
+|||||
+GAACT
+  Score=3
+""")
+        seq1, seq2, score, begin, end = aligns[1]
+        alignment = pairwise2.format_alignment(seq1, seq2, score, begin, end)
+        self.assertEqual(alignment, """\
+GA--T
+|||||
+GAACT
+  Score=3
+""")
+
 
 class TestPairwiseLocal(unittest.TestCase):
 
@@ -54,6 +127,54 @@ zA-Bz
   Score=1.9
 """)
 
+    def test_localms(self):
+        """Two different local alignments"""
+        aligns = sorted(pairwise2.align.localms("xxxABCDxxx", "zzzABzzCDz", 1,
+                                                -0.5, -3, -1))
+        alignment = pairwise2.format_alignment(*aligns[0])
+        self.assertEqual(alignment, """\
+--xxxABCDxxx
+       ||
+zzzABzzCDz--
+  Score=2
+""")
+        alignment = pairwise2.format_alignment(*aligns[1])
+        self.assertEqual(alignment, """\
+xxxABCDxxx
+   ||
+zzzABzzCDz
+  Score=2
+""")
+
+    def test_blosum62(self):
+        """Test localds with blosum62."""
+        self.assertEqual(1, blosum62[('K', 'Q')])
+        self.assertEqual(4, blosum62[('A', 'A')])
+        self.assertEqual(8, blosum62[('H', 'H')])
+        alignments = pairwise2.align.localds('VKAHGKKV', 'FQAHCAGV',
+                                             blosum62, -4, -4)
+        for a in alignments:
+            self.assertEqual(pairwise2.format_alignment(*a),
+                             "VKAHGKKV\n |||\nFQAHCAGV\n  Score=13\n")
+
+
+class TestScoreOnly(unittest.TestCase):
+    """Test paramater ``score_only``"""
+
+    def test_score_only_global(self):
+        """Test ``score_only`` in a global alignment"""
+        aligns1 = pairwise2.align.globalxx("GAACT", "GAT")
+        aligns2 = pairwise2.align.globalxx("GAACT", "GAT", score_only=True)
+        self.assertEqual(aligns1[0][2], aligns2)
+
+    def test_score_only_local(self):
+        """Test ``score_only`` in a local alignment"""
+        aligns1 = pairwise2.align.localms("xxxABCDxxx", "zzzABzzCDz", 1, -0.5,
+                                          -3, -1)
+        aligns2 = pairwise2.align.localms("xxxABCDxxx", "zzzABzzCDz", 1, -0.5,
+                                          -3, -1, score_only=True)
+        self.assertEqual(aligns1[0][2], aligns2)
+
 
 class TestPairwiseOpenPenalty(unittest.TestCase):
 
@@ -117,17 +238,17 @@ GA--T
         seq1, seq2, score, begin, end = aligns[0]
         alignment = pairwise2.format_alignment(seq1, seq2, score, begin, end)
         self.assertEqual(alignment, """\
-GCT-
-||||
-GATA
-  Score=-0.1
+GC-T-
+|||||
+G-ATA
+  Score=1.7
 """)
 
 
 class TestPairwiseExtendPenalty(unittest.TestCase):
 
     def test_extend_penalty1(self):
-        aligns = pairwise2.align.globalxs("GACT", "GT", -0.2, -0.5)
+        aligns = pairwise2.align.globalxs("GACT", "GT", -0.5, -0.2)
         self.assertEqual(len(aligns), 1)
         seq1, seq2, score, begin, end = aligns[0]
         alignment = pairwise2.format_alignment(seq1, seq2, score, begin, end)
@@ -139,31 +260,24 @@ G--T
 """)
 
     def test_extend_penalty2(self):
-        aligns = pairwise2.align.globalxs("GACT", "GT", -0.2, -1.5)
-        self.assertEqual(len(aligns), 2)
+        aligns = pairwise2.align.globalxs("GACT", "GT", -1.5, -0.2)
+        self.assertEqual(len(aligns), 1)
         aligns.sort()
         seq1, seq2, score, begin, end = aligns[0]
         alignment = pairwise2.format_alignment(seq1, seq2, score, begin, end)
         self.assertEqual(alignment, """\
 GACT
 ||||
--G-T
-  Score=0.6
-""")
-        seq1, seq2, score, begin, end = aligns[1]
-        alignment = pairwise2.format_alignment(seq1, seq2, score, begin, end)
-        self.assertEqual(alignment, """\
-GACT
-||||
-G-T-
-  Score=0.6
+G--T
+  Score=0.3
 """)
 
 
 class TestPairwisePenalizeExtendWhenOpening(unittest.TestCase):
 
     def test_penalize_extend_when_opening(self):
-        aligns = pairwise2.align.globalxs("GACT", "GT", -0.2, -1.5, penalize_extend_when_opening=1)
+        aligns = pairwise2.align.globalxs("GACT", "GT", -0.2, -1.5,
+                                          penalize_extend_when_opening=1)
         self.assertEqual(len(aligns), 1)
         seq1, seq2, score, begin, end = aligns[0]
         alignment = pairwise2.format_alignment(seq1, seq2, score, begin, end)
@@ -178,7 +292,40 @@ G--T
 class TestPairwisePenalizeEndgaps(unittest.TestCase):
 
     def test_penalize_end_gaps(self):
-        aligns = pairwise2.align.globalxs("GACT", "GT", -0.2, -0.8, penalize_end_gaps=0)
+        aligns = pairwise2.align.globalxs("GACT", "GT", -0.8, -0.2,
+                                          penalize_end_gaps=0)
+        self.assertEqual(len(aligns), 3)
+        aligns.sort()
+        seq1, seq2, score, begin, end = aligns[0]
+        alignment = pairwise2.format_alignment(seq1, seq2, score, begin, end)
+        self.assertEqual(alignment, """\
+GACT
+||||
+--GT
+  Score=1
+""")
+        seq1, seq2, score, begin, end = aligns[1]
+        alignment = pairwise2.format_alignment(seq1, seq2, score, begin, end)
+        self.assertEqual(alignment, """\
+GACT
+||||
+G--T
+  Score=1
+""")
+        seq1, seq2, score, begin, end = aligns[2]
+        alignment = pairwise2.format_alignment(seq1, seq2, score, begin, end)
+        self.assertEqual(alignment, """\
+GACT
+||||
+GT--
+  Score=1
+""")
+
+    def test_penalize_end_gaps2(self):
+        """Do the same, but use the generic method (with the same resutlt)"""
+        aligns = pairwise2.align.globalxs("GACT", "GT", -0.8, -0.2,
+                                          penalize_end_gaps=0,
+                                          force_generic=True)
         self.assertEqual(len(aligns), 3)
         aligns.sort()
         seq1, seq2, score, begin, end = aligns[0]
@@ -246,7 +393,8 @@ G-TCT
 class TestPairwiseSeparateGapPenaltiesWithExtension(unittest.TestCase):
 
     def test_separate_gap_penalties_with_extension(self):
-        aligns = pairwise2.align.localxd(list("GAAT"), list("GTCCT"), -0.1, 0, -0.1, -0.1, gap_char=["-"])
+        aligns = pairwise2.align.localxd(list("GAAT"), list("GTCCT"),
+                                         -0.1, 0, -0.1, -0.1, gap_char=["-"])
         self.assertEqual(len(aligns), 3)
         aligns.sort()
         seq1, seq2, score, begin, end = aligns[0]
@@ -284,7 +432,8 @@ class TestPairwiseMatchDictionary(unittest.TestCase):
         }
 
     def test_match_dictionary1(self):
-        aligns = pairwise2.align.localds("ATAT", "ATT", self.match_dict, -.5, 0)
+        aligns = pairwise2.align.localds("ATAT", "ATT", self.match_dict,
+                                         -.5, 0)
         self.assertEqual(len(aligns), 2)
         aligns.sort()
         seq1, seq2, score, begin, end = aligns[0]
@@ -387,12 +536,23 @@ class TestPersiteGapPenalties(unittest.TestCase):
     def test_gap_here_only_1(self):
         seq1 = "AAAABBBAAAACCCCCCCCCCCCCCAAAABBBAAAA"
         seq2 = "AABBBAAAACCCCAAAABBBAA"
-        breaks = [0, 11, len(seq2)]
-        # Very expensive to open a gap in seq1:
-        nogaps = lambda x, y: -2000 - y
-        # Very expensive to open a gap in seq2 unless it is in one of the allowed positions
-        specificgaps = lambda x, y: (-2 - y) if x in breaks else (-2000 - y)
-        alignments = pairwise2.align.globalmc(seq1, seq2, 1, -1, nogaps, specificgaps)
+
+        def no_gaps(x, y):
+            """Very expensive to open a gap in seq1."""
+
+            x = 0  # fool QuantifiedCode, x is not used here
+            return -2000 - y
+
+        def specific_gaps(x, y):
+            """Very expensive to open a gap in seq2
+
+            ...unless it is in one of the allowed positions:
+            """
+            breaks = [0, 11, len(seq2)]
+            return (-2 - y) if x in breaks else (-2000 - y)
+
+        alignments = pairwise2.align.globalmc(seq1, seq2, 1, -1, no_gaps,
+                                              specific_gaps)
         self.assertEqual(len(alignments), 1)
         formatted = pairwise2.format_alignment(*alignments[0])
         self.assertEqual(formatted, """\
@@ -411,12 +571,22 @@ AAAABBBAAAACCCCCCCCCCCCCCAAAABBBAAAA
         """
         seq1 = "AAAABBBAAAACCCCCCCCCCCCCCAAAABBBAAAA"
         seq2 = "AABBBAAAACCCCAAAABBBAA"
-        breaks = [0, 3, len(seq2)]
-        # Very expensive to open a gap in seq1:
-        nogaps = lambda x, y: -2000 - y
-        # Very expensive to open a gap in seq2 unless it is in one of the allowed positions:
-        specificgaps = lambda x, y: (-2 - y) if x in breaks else (-2000 - y)
-        alignments = pairwise2.align.globalmc(seq1, seq2, 1, -1, nogaps, specificgaps)
+
+        def no_gaps(x, y):
+            """Very expensive to open a gap in seq1."""
+            x = 0  # fool QuantifiedCode, x is not used here
+            return -2000 - y
+
+        def specific_gaps(x, y):
+            """Very expensive to open a gap in seq2
+
+            ...unless it is in one of the allowed positions:
+            """
+            breaks = [0, 3, len(seq2)]
+            return (-2 - y) if x in breaks else (-2000 - y)
+
+        alignments = pairwise2.align.globalmc(seq1, seq2, 1, -1, no_gaps,
+                                              specific_gaps)
         self.assertEqual(len(alignments), 1)
         formatted = pairwise2.format_alignment(*alignments[0])
         self.assertEqual(formatted, """\
@@ -427,6 +597,48 @@ AAAABBBAAAACCCCCCCCCCCCCCAAAABBBAAAA
 """)
 
 
+class TestOtherFunctions(unittest.TestCase):
+    """Test remaining non-tested private methods."""
+
+    def test_clean_alignments(self):
+        """``_clean_alignments`` removes redundant alignments."""
+        alns = [
+            ('ACCGT', 'AC-G-', 3.0, 0, 4),
+            ('ACCGT', 'A-CG-', 3.0, 0, 4),
+            ('ACCGT', 'AC-G-', 3.0, 0, 4),
+            ('ACCGT', 'A-CG-', 3.0, 0, 4),
+        ]
+        expected = [
+            ('ACCGT', 'AC-G-', 3.0, 0, 4),
+            ('ACCGT', 'A-CG-', 3.0, 0, 4),
+        ]
+        result = pairwise2._clean_alignments(alns)
+        self.assertEqual(expected, result)
+
+    def test_print_matrix(self):
+        """``print_matrix`` prints nested lists as nice matrices."""
+        import sys
+
+        try:  # Python 2
+            from StringIO import StringIO
+        except ImportError:  # Python 3
+            from io import StringIO
+        out = StringIO()
+        sys.stdout = out
+        pairwise2.print_matrix([[0.0, -1.0, -1.5, -2.0], [-1.0, 4.0, 3.0, 2.5],
+                                [-1.5, 3.0, 8.0, 7.0], [-2.0, 2.5, 7.0, 6.0],
+                                [-2.5, 2.0, 6.5, 11.0],
+                                [-3.0, 1.5, 6.0, 10.0]])
+        self.assertEqual(out.getvalue(),
+                         ' 0.0  -1.0  -1.5  -2.0 \n'
+                         '-1.0   4.0   3.0   2.5 \n'
+                         '-1.5   3.0   8.0   7.0 \n'
+                         '-2.0   2.5   7.0   6.0 \n'
+                         '-2.5   2.0   6.5  11.0 \n'
+                         '-3.0   1.5   6.0  10.0 \n')
+        sys.stdout = sys.__stdout__
+
+
 if __name__ == '__main__':
     runner = unittest.TextTestRunner(verbosity=2)
     unittest.main(testRunner=runner)
diff --git a/Tests/test_prosite1.py b/Tests/test_prosite1.py
index 78ea784..9d2f642 100644
--- a/Tests/test_prosite1.py
+++ b/Tests/test_prosite1.py
@@ -17,7 +17,7 @@ class TestPrositeRead(unittest.TestCase):
         """Parsing Prosite record ps00107.txt"""
         filename = os.path.join('Prosite', 'ps00107.txt')
         with open(filename) as handle:
-           record = Prosite.read(handle)
+            record = Prosite.read(handle)
         self.assertEqual(record.name, "PROTEIN_KINASE_ATP")
         self.assertEqual(record.type, "PATTERN")
         self.assertEqual(record.accession, "PS00107")
diff --git a/Tests/test_raxml_tool.py b/Tests/test_raxml_tool.py
index 44c15fd..a323d0d 100644
--- a/Tests/test_raxml_tool.py
+++ b/Tests/test_raxml_tool.py
@@ -58,7 +58,7 @@ class AppTests(unittest.TestCase):
                           'RAxML_result.test',
                           # Present in 7.2.X+  but not 7.0.4:
                           'RAxML_bestTree.test',
-                         ]:
+                          ]:
                 if os.path.isfile(fname):
                     os.remove(fname)
 
diff --git a/setup.py b/setup.py
index 8b94436..09d2292 100644
--- a/setup.py
+++ b/setup.py
@@ -27,12 +27,28 @@ import sys
 import os
 import shutil
 
-from distutils.core import setup
-from distutils.core import Command
-from distutils.command.install import install
-from distutils.command.build_py import build_py
-from distutils.command.build_ext import build_ext
-from distutils.extension import Extension
+if "bdist_wheel" in sys.argv:
+    try:
+        import setuptools
+        import wheel
+    except ImportError:
+        sys.exit("We need both setuptools AND wheel packages installed for bdist_wheel to work")
+    # Import specific bits of setuptools ...
+    from setuptools import setup
+    from setuptools import Command
+    from setuptools.command.install import install
+    from setuptools.command.build_py import build_py
+    from setuptools.command.build_ext import build_ext
+    from setuptools import Extension
+else:
+    # Except for wheels, stick with standard library's distutils
+    from distutils.core import setup
+    from distutils.core import Command
+    from distutils.command.install import install
+    from distutils.command.build_py import build_py
+    from distutils.command.build_ext import build_ext
+    from distutils.extension import Extension
+
 
 _CHECKED = None
 
@@ -339,6 +355,7 @@ PACKAGES = [
     'Bio.KEGG.Compound',
     'Bio.KEGG.Enzyme',
     'Bio.KEGG.Map',
+    'Bio.PDB.mmtf',
     'Bio.KEGG.KGML',
     'Bio.Medline',
     'Bio.motifs',

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/python-biopython.git



More information about the debian-med-commit mailing list